Назад | Перейти на главную страницу

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

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

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

127.0.0.1:48350 [07 / апр / 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, которая заставит его буферизовать запрос клиента и отправлять его на сервер после установления соединения, даже если клиент ушел?