我可能不明白这应该如何工作,但我无法弄清楚为什么带有这个基本 vrrp_instance 的 BACKUP 系统会立即过渡到 master 并且似乎从不尊重优先级。
当两者都健康且在线时,为什么虚拟 IP 地址不会从备份系统中删除?
看起来两个系统都在广播 vrrp 广告。从tcpdump
备份系统开始:
betaproxyslc01.fakecorp.com > vrrp.mcast.net: vrrp betaproxyslc01.fakecorp.com > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51 , prio 150 , authtype simple, intvl 1s, length 20, >addrs: virtual-app .fakecorp.com auth "password" 15:52:24.541637 IP (tos 0xc0, ttl 255, id 1611, offset 0, flags [none], proto VRRP (112), length 40)
betaproxyslc02.fakecorp.com > vrrp.mcast.net: vrrp betaproxyslc02.fakecorp.com > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51 , prio 100, authtype simple, intvl 1s, length 20, >addrs: virtual-app …
我希望有人能看到我做错了什么并提供帮助来运行 keepalived track_script 。
我将主 keepalived 框的 vrrp_instance 的优先级设置为 101,将故障转移框的优先级设置为 100。断开网络连接或停止主设备上的 keepalived 会导致 VIP 按预期转移到辅助设备。
如果脚本要运行,如果脚本返回成功,我希望它会将优先级添加 2。然而 atcpdump
始终显示优先级不变。即使我对脚本定义进行了虚假设置,我也从未在 /var/log/messages 中看到任何有关该脚本的信息。停止 HAProxy 服务不会产生任何影响,而且我对脚本所做的其他测试表明它永远不会运行。
输出tcpdump
:
172.18.8.2 > 224.0.0.18: vrrp 172.18.8.2 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 101, authtype simple, intvl 1s, length 20, addrs: 172.18.8.4 auth "password"
Run Code Online (Sandbox Code Playgroud)
这是 keepalived 配置:
global_defs {
router_id BETAPROXYSLC01
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority …
Run Code Online (Sandbox Code Playgroud)