O HAproxy descarta os dados quando o cliente se desconecta imediatamente após o envio dos dados

O HAproxy descarta os dados quando o cliente se desconecta imediatamente após o envio dos dados

Para obter tolerância a falhas, estou executando o haproxy entre Thruk e vários back-ends do Nagios com o plugin Livestatus. Thruk não tem tempo limite de conexão, portanto, um back-end "morto" faz com que o Thruk demore uma eternidade para carregar, geralmente resultando em um tempo limite do Apache (que está fazendo proxy para Thruk via fcgi).

Estou tendo um problema quando Thruk envia um comando externo. O cliente não espera uma resposta do servidor, portanto fecha imediatamente a conexão após enviar seus dados. Aparentemente, isso faz com que o haproxy interrompa a conexão se ainda não tiver estabelecido uma conexão com o servidor remoto. Isso resulta em entradas de log como esta:

127.0.0.1:48350 [07/abril/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

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

Achei que as opções tcp-smart-accept/connect poderiam ajudar, mas não surtiram efeito.

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

informação relacionada