我在运行 xen 的几台 Linux 机器上遇到了问题。它们充当虚拟机管理程序,并使用多路径设置连接到 SAN,为客户虚拟机提供存储。
有时两条路径中的一条会失败,但可以通过运行以下命令快速恢复:
multipath
multipath -ll
我需要彻底查明问题所在,并找出发生这种情况的原因。我注意到,当虚拟机管理程序不太忙(网络和 I/O 方面)时,不会发生这种情况。我还通过将所有服务移到相同的新机箱上来消除可能的硬件问题。我收集了一些系统日志,这些日志可能表明 NIC 模块问题或内核问题,而多路径失败可能只是由此导致的!!??以下是多路径关闭时始终显示的日志:
kernel: BUG: soft lockup - CPU#0 stuck for 60s! [swapper:0]
kernel: BUG: soft lockup - CPU#2 stuck for 60s! [events/2:76]
我将把完整日志粘贴在这篇文章的末尾,以便于阅读。现在再介绍一下我的设置:
- 通过 eth0 和 eth2 (绑定) 设置互联网访问
- 通过 eth1 和 eth3 设置 SAN 多路径访问
服务器:
- Supermicro SuperServer 6016T-NTRF
- 英特尔® 至强® CPU E5645
- 英特尔公司 82576 千兆网络
CentOS 版本 5.7(最终版)2.6.18-274.18.1.el5xen
文件名:/lib/modules/2.6.18-274.18.1.el5xen/kernel/drivers/net/igb/igb.ko
版本:3.0.6-k2-1
- 日志 02
如果有人需要更多详细信息,请联系我们。任何帮助都将不胜感激。
答案1
由于这似乎是一个 iSCSI 设置,因此有几个区域可能会发生路径故障转移。
- 简单的以太网不稳定。数据包被丢弃,从而触发故障转移到另一条路径,而不是等待重新传输和重组。
- 不太简单的以太网问题。交换机端口短暂翻转,触发故障转移。
- 多路径堆栈中的某些内容触发了故障转移。多路径对网络异常比常规 TCP/IP 更敏感,因此不会等待太长时间来重新建立连接;而是进行故障转移。
- 网络堆栈出现问题。这里有几种可能性,但从您的错误消息来看,这很可能就是问题所在。
多路径设置对线路延迟非常敏感,而 iSCSI + 以太网比光纤通道环境更敏感。出现一些抖动是正常的。
由于这种情况似乎发生在 HVM 繁忙时,这表明内核 NIC 路径要么数据拥塞,要么 CPU 不足(可能两者兼而有之),从而触发了多路径故障转移。对此你无能为力,但你可以缩小范围,以便更好地解释为什么它正在做它正在做的事情。
服务器负载非常容易,听起来你已经完成了。
诊断拥塞更加困难。如果您的网络端口带宽监视器没有显示大量流量,但您发布的日志条目仍然出现,则表明服务器内部堵塞。如果您真的可以在其中一个事件期间抓取数据包,则带时间戳的数据包计数将告诉您是否真的看到通过的流量有 10 秒的间隙;这肯定表明服务器内部堵塞。
定影该问题很可能是特定于驱动程序的,并且有可能对 TCP/IP 堆栈可调参数进行一些调整。