机器过载时虚拟 IP 故障转移

机器过载时虚拟 IP 故障转移

我们已经将 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 切换过于频繁会发生什么?

相关内容