Verificação de integridade do HAProxy contagens consecutivas não redefinidas

1

Temos dois servidores Redis atrás de um servidor HAProxy. Um servidor é o mestre, que está ativo, e o outro é o escravo, que está inativo. Se o mestre cair, as sentinelas elegem o outro servidor para ser o mestre. Essa parte está funcionando bem. O que é complicado é garantir que o HAProxy nunca permita que o tráfego vá para os dois servidores ao mesmo tempo.

Inicialmente, consertei isso adicionando rise e fall argumentos para os servidores, conforme abaixo:

backend Backend:Redis
    bind-process 1
    timeout server  3h
    timeout tunnel 3h
    option tcp-check
    tcp-check connect
    tcp-check send PING\r\n
    tcp-check expect string +PONG
    tcp-check send info\ replication\r\n
    tcp-check expect string role:master
    tcp-check send QUIT\r\n
    tcp-check expect string +OK
    server redis-01.vbox 10.10.0.10:6279 check inter 5s rise 5 fall 2 maxconn 600 weight 1
    server redis-02.vbox 10.10.0.11:6279 check inter 5s rise 5 fall 2 maxconn 600 weight 1

Estamos lidando com um caso estranho após a seguinte sequência:

  • Comece com redis-01 (mestre inicial) e redis-02 (escravo inicial) para baixo.
  • Mate redis-01 (mestre).
  • Os sentinelas elegem redis-02 como novo mestre.
  • Reinicie os redis em redis-01 (agora escravo, mestre original).
  • Para duas ou três verificações de integridade do HAProxy, redis-01 acha que é mestre e passa nas verificações.
  • Eventualmente, redis-01 percebe que ainda é o escravo e começa a falhar nas verificações.

O problema é que o HAProxy não redefine o contador de verificação de integridade. A página de status mostra que redis-01 passou em 2/5 (ou 3/5) verificações de integridade. Não está em alta, o que é bom. O que não é bom é que, se o outro servidor ficar inativo, ele terá menos verificações para passar, eventualmente apenas 1, o que pode levar ao caso de ambos os servidores estarem ativos, do ponto de vista do HAProxy.

Eu não entendo porque o HAProxy não considera redis-01 não ter conseguido, já que parou de passar verificações depois de 2. Parece que não deveria continuar esperando. A documentação diz:

The "rise" parameter states that a server will be considered as operational after consecutive successful health checks.

Recebeu 2 das 5, mas não obteve 5, então não está ativo e não deve começar a contar novamente às 2 da próxima vez que passar na verificação de saúde. Precisa estar em 0.

A pergunta então é uma das seguintes: 1) O que eu preciso fazer para dizer ao HAProxy para redefinir o contador de verificação de saúde consecutiva? 2) Existe uma maneira melhor de evitar que o HAProxy considere ambos os servidores ao mesmo tempo?

    
por siride 14.04.2017 / 00:33

0 respostas