Мы начали использовать HAProxy недавно, и пока все работает нормально. Однако мы наблюдаем «случайным образом» некоторые ошибки на внутреннем сервере (Debian + Apache + FCGID + PHP 7), например:
[Wed Jan 31 08:22:22 2018] [warn] [client XXXX:XXXX::1] (70007)The timeout specified has expired: mod_fcgid: can't get data from http client, referer: XXX
И на сервере HAProxy это приводит к следующему журналу:
Jan 31 08:22:22 localhost haproxy[4029466]: 127.0.0.1:41408 [31/Jan/2018:08:05:12.587] http-in server/myservername 0/0/4/1029610/1029615 500 569 - - CD-- 64/64/0/0/0 0/0 "POST /file.php HTTP/1.1"
Как видите, Tr
и Ta
время для этих запросов довольно велико (1000 с).
Других ошибок в журнале мы не видим и задаемся вопросом, что может вызвать это и как отладить это дальше? По какой-то причине бэкэнд-сервер не получает данные от HAProxy? Мы не можем воспроизвести это, и это происходит примерно раз в час или около того. У нас есть несколько серверов в бэкэнде, и сервер HAProxy, а также серверы бэкэнда довольно скучны (нагрузка на мощный сервер HAProxy <0,1).
Вот часть нашей конфигурации HAProxy (мы специально установили таймауты довольно высокими):
mode http
log global
timeout connect 10s
timeout client 600s
timeout server 1200s
timeout check 90s
option log-health-checks
option httplog
option log-separate-errors
default-server inter 90s rise 3 fall 3
option httpchk GET check.php
В остальном все вполне стандартно. Я должен отметить, что мы видим это пока только для некоторых запросов POST, а не один раз для запроса GET.
Обновление: проблема не возникает, если мы не используем HAProxy и отправляем трафик напрямую на сервер. Так что это должно быть как-то связано с HAProxy.
Некоторые POST-запросы у нас могут быть довольно большими. Возможно ли, что нам понадобится настроить некоторые параметры буфера? Мы зарегистрировали длину содержимого такого запроса, используя capture request header Content-Length len 10
а длина такого неудачного запроса - 1084028 (должно быть> 1 МБ).