我在使用 Keepalived 时遇到了一个问题。
如果我的应用程序进程由于某种原因停止运行,keepalived 会将 VIP 故障转移到备份节点。但是,如果进程在备份节点上再次失败,它不会重新定位到主节点。从 /var/log/messages 可以清楚地看出它正在记录失败。
以下是我的配置文件:
在节点 1(主节点)上
vrrp_script chk { script "/root/test.sh" interval 2 # check every 2 seconds fall 1 rise 2 weight -60 }
vrrp_instance VRRP1 { state EQUAL priority 110 interface eth0 virtual_router_id 51 advert_int 1 authentication { auth_type PASS auth_pass 1111 }
notify_backup "/etc/keepalived/rtb.sh BACKUP"
notify_fault "/etc/keepalived/rtb.sh FAULT"
virtual_ipaddress {
10.58.127.80/24
}
notify_master "/etc/keepalived/rtb.sh MASTER"
track_script {
chk
}
}
在节点 2 上(备份)
vrrp_script chk { script "/root/test.sh" interval 2 # check every 2 seconds fall 1 rise 2 weight -50 }
vrrp_instance VRRP1 { state EQUAL priority 101 interface eth0 virtual_router_id 51 advert_int 1 authentication { auth_type PASS auth_pass 1111 }
notify_backup "/etc/keepalived/rtb.sh BACKUP"
notify_fault "/etc/keepalived/rtb.sh FAULT"
virtual_ipaddress {
10.58.127.80/24
}
notify_master "/etc/keepalived/rtb.sh MASTER"
track_script {
chk
}
}
如果我终止 Node1 上的应用程序进程,VIP 将被重新定位到 Node2。一段时间后,如果我再次终止 Node2 上的应用程序进程,它会记录失败,但不会重新定位 IP。
Dec 11 11:29:50 rtb48 Keepalived_vrrp[25813]: VRRP_Script(chk) failed
此后无任何行动。
Keepalived 版本 :keepalived-1.2.13-5.el6_6.x86_64
有什么线索吗?
答案1
您是否重新启动了节点#1 上的进程以使检查脚本通过?
节点 #1 的优先级为 110,脚本权重为 60。
节点 #2 的优先级为 101,脚本权重为 50。
因此,#1 的失败率为 110 - 60 =50. #2 失败是 101 - 50 =51。
在这种情况下,节点 #2 仍然具有更高的优先级并将成为主节点。
另外:你的配置看起来很奇怪,它真的是这么长的一行吗?如果是这样,中间的注释不应该把它打断吗?