我们有一台 CentOS 服务器运行虚拟机集群。有时集群的内部网络会断线一分钟左右……然后又恢复。这个问题与实际网络流量有某种关系,但不是简单的负载问题。(系统通常负载很轻,无论实际负载如何都会发生问题。)
设置:
- Dom0 上安装 CentOS 5.6,DomU 上安装各种 CentOS
- 硬件 - 配有 BroadCom NextXpress 2 NIC 的 Dell R710(叹气)
- 使用 BroadCom 的最新 NIC 驱动程序
- Xen 配置为使用 network-bridge 和 vif-bridge
- 对 iptable 进行一些调整,将不相关的端口路由到其中一个虚拟端口。
系统有一个外部可见的 IP 地址,Dom0 运行一个配置了多个虚拟主机的 Apache httpd,每个虚拟主机都反向代理运行在虚拟主机上的 Web 服务器。(虚拟主机必须进行 NAT,主要是因为我们没有分配足够的公共 IP 地址。)
症状:
- 大部分时候运行良好。
- 当有人尝试将大文件上传到一个虚拟机时,所有虚拟机的内部网络都会中断:
- Dom0 httpd 发现与虚拟后端服务器通信时出现网络超时并报告 502。
- 先前建立的从 Dom0 到任意 DomU 的 ssh 连接冻结。
- 我们的监控显示虚拟之间的流量 ping 失败。
- DomU 的 Xen 控制台不会冻结。
- 我看到的任何日志文件中均没有日志消息,无论是在 Dom0 还是 DomU 上...除了 Dom0 httpd 日志之外。
- 大约一分钟后,问题就会自行解决。
这是100%可重复的。
我们尝试过的方法:
- 在 Dom0 上下载、构建和安装最新的 BNX2 驱动程序
- 关闭 NIC 上的 MSI - 将“options bnx2 disable_msi=1”添加到 /etc/modprobe.conf
- 关闭 tcp 分段卸载 — “ethtool -K eth0 tso off”。
- 半夜祭祀一只黑公鸡。
除了切换到 KVM...或屠宰更多公鸡之外,我已经用尽了所有选择。
有什么建议么?
答案1
我们最终找到了问题所在。原来是虚拟网络配置出了问题。由于某种我记不清的原因,该特定下载的网络流量在虚拟网络中额外循环了一次。当用户尝试上传大型文件时,下载占用了所有可用的内核网络缓冲区。这导致整个网络冻结……直到某个问题超时,一切都恢复正常。
很抱歉,这一切有点模糊,但它可能会为遇到类似问题的人提供一些提示。
答案2
也许用于将虚拟机连接到主机的网络线程数量有限,而上传大文件最终会占用所有线程,其余线程会丢失信号。我没有其他猜测。抱歉。
答案3
您可以查看内存过量使用和/或交换配置。如果其中任何一个“调整到极限”,那么大文件上传可能会触发对这些资源的管理 - 导致在管理完成之前不可用。
答案4
你确定没有MAC地址冲突吗?
这只是猜测,但如果有人复制了 Xen domU 配置文件但忘记将 MAC 更改为每个 domU 和接口中唯一的 MAC,这种情况很容易发生。我曾见过这种情况导致奇怪的网络问题,偶尔所有连接都会丢失整整 60 秒。