Haproxy
HAProxy 退出時,keepalived track_script 為什麼不重新啟動keepalived?
更新:似乎需要一個自定義跟踪腳本來實際故障轉移並在 HAProxy 死亡時重新啟動。發佈為答案。
我使用網際網路上數十個範例中的相同跟踪腳本設置了 keepalived(加上 VIP)+ haproxy + galera_node(在同一主機上,配置如下)。我沒有得到的是當我終止
haproxy
在給定節點上執行的程序時,這就是顯示的內容/var/log/syslog
:Keepalived_vrrp[29230]: VRRP_Instance(250) Entering MASTER STATE Keepalived_vrrp[29230]: VRRP_Script(check_haproxy) failed
說得通。它確實失敗了。但奇怪的
keepalived
是既不是放棄 VIP 也不是進入 BACKUP 狀態,這是期望的行為(下圖,在 haproxy 離開後幾分鐘 VIP 仍然存在)。我是否誤解了keepalived
設計的工作原理,或者我的配置中是否存在其他明顯錯誤?(在 Ubuntu 14.04 上 KA 版本為 1.2.7)# ip a 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 0e:02:c6:83:82:74 brd ff:ff:ff:ff:ff:ff inet 10.10.10.202/24 brd 10.20.18.255 scope global eth0 valid_lft forever preferred_lft forever inet 10.10.10.250/32 scope global eth0 valid_lft forever preferred_lft forever
keepalived.conf
global_defs { router_id mynode } vrrp_script check_haproxy { script "killall -0 haproxy" interval 1 fall 2 weight 2 } vrrp_instance 200 { virtual_router_id 200 advert_int 1 nopreempt priority 90 state BACKUP interface eth0 notify /etc/keepalived/log_status.sh virtual_ipaddress { 10.10.10.250 dev eth0 } track_script { check_haproxy } }
我現在正在使用自定義 track_script 來解決此問題。如果 haproxy 沒有執行,它會重新啟動 keepalived。似乎keepalived僅在啟動/重新啟動時使用預設跟踪腳本進入備份模式,而不是在它執行時¯_(ツ)_/¯
#!/bin/sh # restart keepalive if haproxy died pid=`/bin/pidof haproxy` test -z "$pid" && { service keepalived restart &>/dev/null; exit 1; } exit 0