HAProxy track_script + nopreempt não funciona

1

Eu tenho 2 nós com o Keepalived v1.2.13, no Amazon AWS VPC.

Estou tentando atingir este cenário, supondo que o Nó1 seja MASTER:
Se eu parar o HAProxy ou parar o keepalived ou parar o nó, faça o failover para o Node2.
Se eu iniciar o backup do HAProxy no Nó1 ou iniciar o keepalived ou iniciar o nó, faça não failover para o Nó1 (sem oscilação).

Com a seguinte configuração, apenas parando o keepalived ou parando o nó, o failover funciona. A mudança de prioridade devido ao track_script não parece afetar a eleição MASTER.

Node1

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
    }
}

Node2

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
    }
}
    
por Bastien974 23.04.2015 / 00:49

1 resposta

0

Acabei usando em ambos nós:

state EQUAL
priority 100

A condição de corrida foi devido a algum tipo de problema com o grupo de segurança das instâncias. Portanto, esse é um problema específico para AWS .

Por um motivo desconhecido, o Unicast VRRP funciona mesmo que não seja explicitamente permitido no grupo de segurança. Eu abri explicitamente (Custom Protocol 112) e resolveu o problema. Parece que leva tempo para permitir o pacote durante a inicialização de uma pilha.

    
por 23.04.2015 / 19:48