下面我有一个服务器的配置.两者之间唯一不同的是优先号码主人为110而后者为109.
但是当我使用/etc/init.d/process停止我的进程时,keepalived不会故障转移.我只是让VRRP_Script(chk_script)失败而没有别的.没有故障转移或没有.
vrrp_script chk_script { script "/usr/local/bin/failover.sh" interval 2 weight 2 } vrrp_instance HAInstance { state BACKUP interface eth0 virtual_router_id 8 priority 109 advert_int 1 nopreempt vrrp_unicast_bind 10.10.10.8 vrrp_unicast_peer 10.10.10.9 virtual_ipaddress { 10.10.10.10/16 dev eth0 } notify /usr/local/bin/keepalivednotify.sh track_script { chk_script weight 20 } }
这是我下面的chk_script.当我将killall -0进程作为我的脚本时,也会发生同样的问题.
!/bin/bash SERVICE='process' STATUS=$(ps ax | grep -v grep | grep $SERVICE) if [ "$STATUS" != "" ] then exit 0 else exit 1 fi
有谁知道解决这个问题?谢谢.
解决方法
这是我的配置:
主:
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