É possível manter a fila ao reiniciar o HAProxy

2

Estou usando o HAProxy para balancear servidores de aplicativos. Cada servidor de aplicativos tem um limite máximo de conexões. Quando esse limite é excedido, a fila é excedida. Quando isso acontecer, adicionarei outro servidor de aplicativos ao HAProxy e usarei uma "recarga normal" para reter as solicitações de entrada até que o serviço seja iniciado novamente. Minha pergunta é: quando reiniciado, o que acontecerá com a fila existente - ela será mantida? Caso contrário, como posso retê-lo? Obviamente, não quero que as solicitações HTTP sejam descartadas ao recarregar.

Zach Russell
fonte
Dê uma olhada nisso e isso .
Gf_
@ gf_ Eu vi esses dois artigos. Isso não responde à minha pergunta específica sobre a fila http persistente na recarga - ela se aplica apenas a novas solicitações de entrada.
Zach Russell
Entendo ... AFAIK, as conexões estabelecidas (como estas na sua fila) não são descartadas ao recarregar.
gf_
Não tenho certeza se você viu isso também, mas pode ser de ajuda.
Gf_

Respostas:

3

Dos documentos oficiais: http://www.haproxy.org/download/1.7/doc/management.txt

O HAProxy suporta uma parada suave e difícil. A parada forçada é simples, quando o sinal SIGTERM é enviado para o processo haproxy, ele sai imediatamente e todas as conexões estabelecidas são fechadas. A parada normal é acionada quando o sinal SIGUSR1 é enviado ao processo haproxy. Consiste em apenas desassociar das portas de atendimento, mas continua a processar as conexões existentes até que elas fechem. Depois que a última conexão é fechada, o processo é encerrado.

O método de parada forçada é usado para as ações "stop" ou "restart" do script de gerenciamento de serviços. A parada normal é usada para a ação "recarregar" que tenta recarregar perfeitamente uma nova configuração em um novo processo.

Ambos os sinais podem ser enviados pelo próprio processo haproxy durante uma recarga ou reinicialização, para que sejam enviados no momento mais recente possível e somente se for absolutamente necessário. É o que é executado pelas opções "-st" (hard) e "-sf" (graceful), respectivamente.

Então, em particular:

Ele [a parada normal] consiste apenas em desvincular as portas de atendimento, mas continua a processar as conexões existentes até que elas fechem.

Ênfase: mas continue a processar as conexões existentes

Você pode ver a fila de back-end cair para 0, porque essas são as estatísticas da fila de back-end recém-formada do novo processo. O antigo, que foi preenchido no máximo, não é mais exibido como pertencia ao processo anterior. Mas está sendo processado, de acordo com este link, que também inclui um cenário de teste para verificar você mesmo:

http://comments.gmane.org/gmane.comp.web.haproxy/7815

JayMcTee
fonte