Разорванные соединения между Linux-серверами в дата-центре

У меня есть несколько серверов Linux в центре обработки данных в США. Серверы были установлены хостинговой компанией и работают под управлением ядра Fedora.

У нас проблемы с разорванными соединениями. Кажется, проблема в том, что когда мы пытаемся подключиться к одному из других серверов после периода бездействия, первая попытка подключения завершится неудачей, а иногда и второй. Однако после этого соединение установилось успешно и какое-то время работает. Это происходит как для соединений mysql, так и для соединений с необработанными сокетами, но, похоже, происходит только при подключении к некоторым нашим серверам. Смущает то, что некоторые серверы, для которых мы видим разные варианты поведения, имеют одинаковую конфигурацию оборудования и программного обеспечения. Например, это происходит при подключении к серверу mysql2, но не к серверу mysql3. Эти серверы были установлены одновременно с одинаковыми характеристиками.

Проблема может быть воспроизведена несколько надежно, но только после ожидания от пятнадцати минут до получаса. Это затрудняет диагностику, и еще сложнее, так как я не совсем уверен, что искать.

Я понимаю, что соединения иногда терпят неудачу, и что мы должны написать наши приложения, чтобы компенсировать это, но все эти серверы находятся в одном центре обработки данных. Почему это имеет значение, если два сервера некоторое время не общались?

У кого-нибудь есть идея, что может быть причиной этого? Это проблема конфигурации сервера или проблемы сети, о которой мне следует обратиться в хостинговую компанию. Что мне сказать им искать? К сожалению, наш опыт показывает, что вспомогательный персонал не занимается углубленным расследованием проблем, если мы не дадим им подробные указания.

Изменить: MySQL, кажется, по крайней мере получить соединения, прежде чем они будут сброшены:

mysql> show status like 'abort%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Aborted_clients  | 501   |
| Aborted_connects | 184   |
+------------------+-------+
2 rows in set (0.00 sec)

Редактировать 2: Кажется, что в конце концов проблема была в межсетевых экранах с сохранением состояния. Промывка iptables, казалось, добилась цели.

iptables -P OUTPUT ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

1 ответ

Решение

Вы запускаете tcpdump/wireshark для отслеживания поведения соединения? Мои деньги на каком-то брандмауэре с полным состоянием между двумя вашими местоположениями. Ваше программное обеспечение открывает соединение, которое затем не видит трафика в течение нескольких минут, и брандмауэр прерывает соединение, и последующие данные будут сброшены, и, возможно, соединение будет сброшено.

Я бы проследил некоторые соединения в tcpdump, чтобы увидеть, как они завершаются и есть ли большое количество простоя. Если это брандмауэр, вы можете попробовать включить tcp в соединениях. Хотя я не знаю, как легко это будет сделать.

Другие вопросы по тегам