配置:
- 两台交换机,每台都有单独的互联网路由
- 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 网络?我们一直在考虑通过每台服务器上的守护进程手动处理故障转移,而不是使用 arp_interval(即自己监控链接并使用 ifenslave 来启动和关闭它们)。我们已经不是为了性能而进行中继了;可靠性才是我们真正的首要任务。
答案1
你确定你已经彻底测试过了?
根据这:
arp_ip_target 指定当arp_interval > 0时用作ARP监控对等体的IP地址。多个IP地址必须用逗号分隔。
我在几台服务器上设置了 mode=1 [尽管只提供了单个 ip] 并且它运行良好,即使没有任何流量流动。在有流量和无流量的情况下多次测试了故障转移。