数据中心内 Linux 服务器之间的连接断开

数据中心内 Linux 服务器之间的连接断开

我在美国的一个数据中心有多个 Linux 服务器。这些服务器由托管公司安装,运行 Fedora Core。

我们遇到了连接中断的问题。问题似乎是,当我们在一段时间不活动后尝试连接到其他服务器之一时,第一次连接尝试会失败,有时第二次也会失败。但是,之后连接成功并且可以使用一段时间。这种情况发生在 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 keep alive。不过,我不知道这样做有多容易。

相关内容