我们已经将 keepalived 与虚拟 IP 地址结合使用两年了。在极少数情况下,如果机器崩溃,这种方法会非常有效。
但是当机器本身出现问题时,我们见过一些没有发生故障转移的情况。例如,我们遇到一个问题,系统一直在交换。负载为 25,而不是正常的 5,而且无法通过 ssh 进入机器。Ping 可以正常工作。Keepalived 一直在运行,虚拟 IP 地址没有被其他从属服务器接管。
我们还遇到过这样的情况:在 MySql HA 设置中,有人错误地在主服务器上而不是从服务器上执行备份,从而锁定了整个数据库。这种情况也没有被发现。
这里的问题是,我只是使用了错误的脚本来检查机器本身是否工作正常,还是这对于虚拟 IP 设置来说是典型的?
我觉得很奇怪你不使用第三个系统来确定主服务器是否可用。当然我理解为什么:keepalivd 应该由主服务器自己在主服务器上切换。
我最近注意到,对于 Redis HA 设置,人们正在使用 Zookeeper(例如https://github.com/ryanlecompte/redis_failover)是因为我遇到了限制吗?
答案1
这里的问题是,我只是使用了错误的脚本来检查机器本身是否正常工作,
是的。
例如,当我们遇到系统一直在交换的问题时。负载为 25,而不是正常的 5,并且无法通过 ssh 进入机器。Ping 可以正常工作。Keepalived 一直在运行,虚拟 IP 地址未被其他从属服务器接管。
您是否尝试过编写自己的脚本来检查平均负载,如下所示:
#!/bin/bash
LOAD=$(/command/to/get/the/load/average)
if [ $LOAD -ge 25 ]; then
exit 1
else
exit 0
fi
然后将其用作track_script
:
vrrp_script check_load {
script "/path/to/check_load.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
...
authentication {
auth_type PASS
auth_pass Neifeaw7
}
virtual_ipaddress {
192.168.6.8
}
track_script {
check_load
}
}
但是等一下,如果虚拟 IP 切换过于频繁会发生什么?