我有完全相同的问题,但我的问题不在防火墙或我的以太网适配器,而是在检查脚本的“重量”设置.
这是我的配置:
主:
vrrp_instance haproxy {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
备份:
vrrp_instance haproxy {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
Check_script:
vrrp_script chk_haproxy {
script "python /root/ha_check.py"
interval 2 # check every 2 seconds
weight 2
rise 2
fall 2
}
主人拒绝释放VIP的原因是因为尽管脚本失败了,但主人仍然从BACKUP服务器获得更高的优先级.发生这种情况是因为check_script上的“权重”设置不足以覆盖优先级编号之间的“GAP”,这意味着将BACKUP服务器的优先级数字提高到MASTER Server的优先级数.我会进一步解释:
根据keepalived手册,“权重”设置中的正数将在检查成功时将该数字添加到优先级.
如果检查失败,负数将从优先级编号中减去该编号.
所以,根据我的配置:
服务器优先级脚本先前失败:
大师:152
备份:100
Failover_IP:MASTER
故障转移ip被主服务器正确“抓取”,因为Master与备份服务器相比具有更高的优先级(152> 100)
服务器优先级在脚本失败后:
MASTER服务器:148
备份服务器:102
Failover_IP:仍然是MASTER
故障转移ip仍然在主服务器上,因为与BACKUP(148> 102)相比,Master再次具有更高的优先级. MASTER服务器拒绝发布IP,因为他的优先级高于其他服务器.
我的情况的解决方案是:
解决方案-1:更改两台服务器的优先级数,使它们没有太多的“GAP”.
例如:
优先级:150
备份优先级:149
Check_script权重:原样(2).
通过上面的配置,当脚本成功(意味着一切正常)时,优先级将是:
师父:152
备份:149
IP_Location:On Master(152> 149)
脚本失败时:
师父:150
备份:151
IP_Location:备份时(151> 150)
解决方案 – 2:将脚本的重量编号从2更改为-60