
Para obtener tolerancia a fallas, estoy ejecutando haproxy entre Thruk y múltiples backends de nagios con el complemento Livestatus. Thruk no tiene tiempo de espera de conexión, por lo que un backend "inactivo" hace que Thruk tarde una eternidad en cargarse, lo que generalmente resulta en un tiempo de espera de Apache (que se envía como proxy a Thruk a través de fcgi).
Tengo un problema cuando Thruk envía un comando externo. El cliente no espera una respuesta del servidor, por lo que cierra inmediatamente la conexión después de enviar sus datos. Aparentemente, esto hace que haproxy interrumpa la conexión si aún no ha establecido una conexión con el servidor remoto. Da como resultado entradas de registro 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
El CC aparentemente significa que el cliente cerró la conexión inesperadamente mientras haproxy intentaba conectarse al servidor backend. Una vez que esto sucede, haproxy no continúa intentando establecer la conexión con el backend, lo que significa que los datos que envió el cliente se tiran al suelo.
Pensé que las opciones tcp-smart-accept/connect podrían ayudar, pero no tuvieron ningún efecto.
¿Hay algo que pueda hacer aquí además de modificar el cliente o agregar algún tipo de proxy TCP de almacenamiento y reenvío entre Thruk y haproxy? ¿Existe una opción para haproxy que haga que almacene en un buffer la solicitud del cliente y la envíe al servidor una vez que se haya establecido la conexión, incluso si el cliente ya no está?