我在 Amazon AWS VPC 中有 2 个带有 Keepalived v1.2.13 的节点。
我正在尝试实现这个场景,假设 Node1 是 MASTER:
如果我停止 HAProxy 或停止 keepalived 或停止节点,则故障转移到 Node2。
如果我在 Node1 上启动 HAProxy 备份或启动 keepalived 或启动节点,则执行不是故障转移到 Node1(无抖动)。
使用以下配置,只需停止 keepalived 或停止节点,故障转移即可工作。track_script 导致的优先级变化似乎不会影响 MASTER 选举。
节点1
vrrp_script chk_haproxy { # Requires keepalived-1.1.13
script "killall -0 haproxy" # cheaper than pidof
interval 2 # check every 2 seconds
fall 2
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
advert_int 2
state BACKUP
nopreempt
interface eth0
virtual_router_id 51
priority 101
unicast_peer {
172.17.16.10
}
notify_master "/etc/keepalived/randomscript.sh"
track_script {
chk_haproxy
}
}
节点2
vrrp_script chk_haproxy { # Requires keepalived-1.1.13
script "killall -0 haproxy" # cheaper than pidof
interval 2 # check every 2 seconds
fall 2
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
advert_int 2
state BACKUP
nopreempt
interface eth0
virtual_router_id 51
priority 100
unicast_peer {
172.17.16.11
}
notify_master "/etc/keepalived/randomscript.sh"
track_script {
chk_haproxy
}
}
答案1
我最终使用了两个都节点:
state EQUAL
priority 100
竞争条件是由于实例的安全组存在某种问题而导致的。因此,这是一个特定于AWS。
由于未知原因,即使安全组中未明确允许,VRRP 单播仍可工作。我明确打开了它(自定义协议 112),它解决了该问题。似乎在堆栈初始化期间允许数据包需要一些时间。