HAproxy сбрасывает данные на пол, когда клиент отключается сразу после отправки данных

HAproxy сбрасывает данные на пол, когда клиент отключается сразу после отправки данных

Для обеспечения отказоустойчивости я запускаю haproxy между Thruk и несколькими бэкендами nagios с плагином Livestatus. У Thruk нет таймаута соединения, поэтому «мертвый» бэкенд заставляет Thruk загружаться вечно, что обычно приводит к таймауту от apache (который проксирует Thruk через fcgi).

У меня проблема, когда Thruk отправляет внешнюю команду. Клиент не ожидает ответа от сервера, поэтому он немедленно закрывает соединение после отправки данных. Это, по-видимому, заставляет haproxy сбрасывать соединение, если он еще не установил соединение с удаленным сервером. Это приводит к таким записям в журнале:

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

CC, по-видимому, означает, что клиент неожиданно закрыл соединение, пока haproxy пытался подключиться к бэкенд-серверу. Как только это происходит, haproxy не продолжает попытки установить соединение с бэкендом, что означает, что данные, отправленные клиентом, теряются.

Я думал, что параметры tcp-smart-accept/connect могут помочь, но они не оказали никакого эффекта.

Можно ли что-то сделать, кроме как изменить клиента или добавить какой-то прокси-сервер TCP с промежуточным хранением между Thruk и haproxy? Есть ли опция для haproxy, которая заставит его буферизировать запрос клиента и отправить его на сервер после установки соединения, даже если клиент ушел?

Связанный контент