我在一个美国的数据中心有很多的linux服务器。 服务器由托pipe公司安装,并运行的是Fedora内核。
我们遇到连接断开的问题。 这个问题似乎是,当我们在一段时间不活动之后尝试连接到其他服务器之一时,第一次连接尝试将失败,有时第二次连接尝试失败。 然而,在此之后,连接成功,并在一段时间内工作。 对于mysql连接和原始套接字连接都会发生这种情况,但只有在连接到我们的某些服务器时才会发生。 令人困惑的是,我们看到不同行为的一些服务器具有相同的硬件configuration和软件。 例如,连接到名为mysql2的服务器时发生,而不是在名为mysql3的服务器上。 这些服务器同时安装,规格相同。
这个问题可以稍微可靠地复制,但是只能等待十五分钟到半小时。 这使得很难诊断,甚至更难,因为我不确定要寻找什么。
我意识到连接有时会失败,我们应该编写我们的应用程序来弥补这一点,但这些服务器都在同一个数据中心。 为什么两台服务器没有通信一段时间呢?
有没有人有一个想法可能是什么原因造成的? 这是一个服务器configuration问题或networking问题,我应该联系托pipe公司。 我告诉他们要寻找什么? 不幸的是,我们的经验是,除非我们给他们详细的指导,否则支持人员不会深入调查问题。
编辑:MySQL似乎至less收到连接之前,他们被丢弃:
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
你运行tcpdump / wireshark跟踪连接行为? 我的钱在两个地点之间的某种全状态防火墙上。 您的软件将打开一个连接,然后在几分钟内看不到任何stream量,并且防火墙超时连接,随后的数据将被丢弃,连接可能会重置。
我会跟踪tcpdump中的一些连接,看看它们是如何终止的,以及是否有大量的空闲时间。 如果是这个防火墙的东西,你可以尝试启用tcp保持活动的连接。 不过,我不知道这样做有多容易。