HAproxy descarta dados no chão quando o cliente se desconecta imediatamente após o envio de dados

2

Para ganhar tolerância a falhas, estou executando o haproxy entre o Thruk e vários back-ends nagios com o plugin Livestatus. O Thruk não tem tempo limite de conexão, então um backend "morto" faz com que o Thruk demore uma eternidade para ser carregado, normalmente resultando em um timeout do apache (que é o proxy do Thruk via fcgi).

Estou tendo um problema quando o Thruk envia um comando externo. O cliente não espera uma resposta do servidor, portanto, ele imediatamente fecha a conexão depois de enviar seus dados. Isso aparentemente faz com que o haproxy desconecte a conexão se ainda não estabeleceu uma conexão com o servidor remoto. Isso resulta em entradas de log como esta:

127.0.0.1:48350 [07 / Abr / 2014: 12: 39: 17.268] thruk_backend_nagios2_6557_6559 thruk_backend_nagios2_6557_6559 / nagios2 0 / -1 / 0 0 CC 0/0/0/0/0 0/0

O CC aparentemente significa que o cliente fechou a conexão inesperadamente enquanto o haproxy tentava se conectar ao servidor backend. Quando isso acontece, o haproxy não continua tentando estabelecer a conexão com o back-end, o que significa que os dados que o cliente enviou são descartados.

Eu achei que as opções tcp-smart-accept / connect podem ajudar, mas não tiveram efeito.

Existe algo que eu possa fazer aqui além de modificar o cliente ou adicionar algum tipo de proxy TCP de armazenamento e encaminhamento entre o Thruk e o haproxy? Existe uma opção para o haproxy que fará com que ele armazene o pedido do cliente e o envie para o servidor assim que a conexão for estabelecida, mesmo que o cliente esteja ausente?

    
por Andrew Gaffney 07.04.2014 / 22:01

0 respostas

Tags