配置:
- 两个交换机,每个都有一个单独的互联网路由
- Centos 服务器的 eth0 和 eth1 在 bond0 上绑定为主动备份,eth0 在交换机上,eth1 在另一个上
/etc/modprobe.conf 如此配置,对于 bond0:
alias bond0 bonding
options bond0 mode=1 primary=eth0 miimon=100
- eth0 有时插入主交换机,有时插入次级交换机。
设想:
- 副交换机内存故障
- 链路灯保持亮起,但交换机不再处理流量
因此,因为我们使用了 miimon,它只获取链接状态,所以当切换失败时,我们的服务器都没有从它们的绑定中禁用该链接。这导致了网络中断,并且在 eth0 在该辅助交换机中的服务器上,它们变得完全不可用。具有讽刺意味的是,这比有人刚刚穿过并拔掉所有电缆还要糟糕,因为它们没有故障转移。
我一直在测试 arp_interval 作为替代方案,但据我了解,arp_interval 有两个限制:
- arp_ip_target 只占用一个 ip,这意味着如果该 IP 地址断开,bond0 会错误地认为链路应该断开,并将其断开。我使用网关作为 IP 地址,但如果网关出现故障,仍然可以继续进行内部到交换机的流量会很好。arp_ip_target 也不会这样做;它只会关闭所有接口,甚至是最后一个。
- arp_interval 取决于一定数量的网络流量(?),其中非常安静的链接可能会被错误地关闭。
有什么办法可以绕过这些 arp_interval 限制吗?miimon 可以配置得更好吗?有没有更好的方法来完成 HA Networking?我们一直在考虑通过每个服务器上的守护进程手动处理故障转移,而不是使用 arp_interval(即我们自己监控链接并使用 ifenslave 来控制它们)。我们已经不是为了性能而进行中继;可靠性确实是我们的首要任务。
你确定你彻底测试过了吗?
根据这个:
我在几台服务器上设置了 mode=1 [虽然只提供了一个 ip],它运行得很好,即使没有任何流量流动。故障转移在有和没有流量的情况下进行了多次测试。