Разорванные соединения между 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 в соединениях. Хотя я не знаю, как легко это будет сделать.