在Amazon AWS VPC中,我有2个Keepalived v1.2.13节点。
我试图实现这种情况下,假设Node1是MASTER:
如果我停止HAProxy或停止keepalived或停止节点,故障切换到Node2。
如果我在Node1上启动HAProxy备份或启动Keepalived或启动节点,请不要故障切换到Node1(不会震荡)。
通过以下configuration,只有通过停止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 } }
我结束了在两个节点上使用:
state EQUAL priority 100
竞赛状况是由于实例的安全组的某种问题。 所以这是AWS特有的问题。
由于未知原因,即使安全组中没有明确允许,VRRP单播仍然可以正常工作。 我明确地打开它(自定义协议112),它解决了这个问题。 在堆栈初始化过程中似乎需要时间来允许数据包。