我们有许多 Xen 虚拟化服务器,全部运行 Debian 6 64 位。我们遇到了一个间歇性问题,偶尔会有一台服务器停止通过网络响应。当这种情况发生时,我们无法 ping 通该服务器,并且我们的应用程序日志表明它无法连接到网络上的其他服务器。
这种情况现在已经发生在几台不同的不相关服务器上,唯一的共同因素是 VPS 主机和相关基础设施、操作系统以及我们的操作系统设置。我正在跟进主机,但真的需要弄清楚原因。
目前我还没有太多可以继续的信息。我能找到的唯一与该事件一致的操作系统日志条目是系统日志中的一行:
Nov 21 19:36:10 xxxxxx ntpd[2460]: xxxx:4f8:xxx:xxx:1:2:3:4 interface xxxx:7e00::xxxx:91ff:xxxx:1bd4 -> (null)
然而我认为这是网络连接中断的结果,而不是其原因的线索。
来自工作服务器的 MTR 报告没有显示任何有用的信息。
所以,我该如何去理解这里发生的事情? 是否存在我不知道应该检查的网络特定日志?
谢谢你!
答案1
我假设您无法访问您的 VPS 主机,并且只能从 VM 内部进行调试。因此,我会这样做。
我会尝试找出故障发生的位置 - 是发生在 VM 和主机之间、VM 和网关之间,还是发生在提供商网络内的某个地方。
设置一个脚本,它将 ping 你的第一跳 - 即你的网关。如果你在同一个广播域内有其他虚拟机,你可以 ping 它们而不是 GW。你可以运行 screen/tmux 并将 ping 留在里面:
$ ping IP_OF_GW_OR_OTHER_VM | tee -a mytest.log
当发生中断时,如果网关仍然可用并且 ping 成功,则问题已经严重。在这种情况下,执行跟踪路由并 ping 接下来的 2-3 个跳数,直到找出中断发生的位置。如果网关立即不可用,那么可以设置一个 cron,在发生中断时对网络信息进行快照:
ping -c 3 gateway
if [ $? -ne 0 ]; then
ifconfig eth0 2>&1 >> /tmp/ifconfig-$(date +"%Y-%m-%d_%H:%M").log
ethtool eth0 >> /tmp/ethtool-$(date +"%Y-%m-%d_%H:%M").log
fi
如果您觉得也需要这些信息,您可以使用诸如 uptime(获取当前负载)lsof 或 netstat 之类的附加信息来扩展脚本。
有时客人的 dhclient 会断开连接或无法续订租约,因此在中断期间收集的任何信息都会有所帮助。