У меня есть 2 узла с Keepalived v1.2.13 в Amazon AWS VPC.
Я пытаюсь реализовать этот сценарий, предполагая, что Node1 - МАСТЕР:
Если я остановлю HAProxy, остановлю поддержку активности или остановлю узел, переключитесь на узел Node2.
Если я запустил резервное копирование HAProxy на Node1 или запустил keepalived или запустил узел, выполните не переключение на Node1 (без колебаний).
При следующей конфигурации переключение при отказе работает только путем остановки поддержки активности или остановки узла. Изменение приоритета из-за 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 Unicast работает, даже если явно не разрешен в группе безопасности. Я явно открыл его (Custom Protocol 112), и проблема была решена. Кажется, требуется время, чтобы разрешить пакет во время инициализации стека.