Назад | Перейти на главную страницу

HAProxy track_script + nopreempt не работает

У меня есть 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), и проблема была решена. Кажется, требуется время, чтобы разрешить пакет во время инициализации стека.