我在 linux 绑定上使用 ucarp 来实现两台服务器的高可用性和自动故障转移。以下是我在每台服务器上用于启动 ucarp 的命令:
服务器 1:
ucarp -i bond0 -v 2 -p secret -a 10.110.0.243 -s 10.110.0.229 --upscript=/etc/vip-up.sh --downscript=/etc/vip-down.sh -b 1 -k 1 -r 2 -z
服务器 2:
ucarp -i bond0 -v 2 -p secret -a 10.110.0.243 -s 10.110.0.242 --upscript=/etc/vip-up.sh --downscript=/etc/vip-down.sh -b 1 -k 1 -r 2 -z
和脚本的内容:
vip-up.sh :
#!/bin/sh
exec 2> /dev/null
/sbin/ip addr add "$2"/24 dev "$1"
vip-down.sh :
#!/bin/sh
exec 2> /dev/null
/sbin/ip addr del "$2"/24 dev "$1"
一切正常,当主服务器不可用时,服务器正确地从一个切换到另一个。
问题是当我从交换机上拔下两台服务器的时间过长(大约 30 分钟)时。当他们拔掉插头时,他们都认为他们是主人,当我重新插入他们时,IP地址最低的那个人试图通过发送免费的arp来保持主人地位。另一个按预期切换到备份,但我无法通过其虚拟 IP 访问主服务器。如果我拔掉主服务器,第二台服务器将从备份服务器转到主服务器,并且可以通过其虚拟 IP 访问。
我的猜测是,当我的服务器断开连接时间过长时,交换机会“忘记”我的服务器,当我重新连接它们时,需要从备份转到主服务器以正确更新交换机的 arp 缓存,即使主服务器发送的无偿 arp 应该做这项工作。请注意,在主服务器上重新启动 ucarp 确实可以解决问题,但是每次断开连接时间过长时我都需要重新启动它...
知道为什么它不能按我的预期工作以及如何解决问题吗?
谢谢。