我正在使用 Keepalived 以主/从配置管理两个 Redis 实例。我遇到过这样的情况:如果在主服务器(优先级较高的服务器)上终止 Keepalived,则备份服务器将接管主服务器。但是,当在优先级较高的服务器中重新启动 Keepalived 时,备份服务器会立即将主服务器状态移交给优先级较高的服务器,从而有效地刷新 Redis 缓存。
我尝试将 nopreempt 指令添加到我的 keepalived.conf,但这种行为仍然发生。
以下是来自备份(低优先级)服务器的 keepalived.conf。
global_defs{
router_id redis_server_2
}
vrrp_script chk_redis {
script "killall -0 redis-server"
interval 5
}
vrrp_instance VI_1{
interface eth0
virtual_router_id 100
priority 200
advert_int 1
state BACKUP
nopreempt
track_script {
chk_redis
}
virtual_ipaddress {
10.19.105.229
}
notify_master "/usr/bin/sudo /var/lib/redis/redis.sh -m"
notify_backup "/usr/bin/sudo /var/lib/redis/redis.sh -s"
notify_fault "/usr/bin/sudo /var/lib/redis/redis.sh -k"
答案1
好的,我思考了几分钟后就解决了。
在优先级较高的框上的 VRRP_instance V1 下,我有以下内容:
state MASTER
现在,nopreempt 不被遵守,因为优先级较高的盒子以主设备身份启动。优先级较低的盒子看到优先级较高的主设备,并切换到从属模式。通过将该行更改为
state BACKUP
优先级较高的盒子作为从属设备启动,当发现主设备具有更高的优先级时,仍保持从属状态。大功告成。