Haproxy - время ожидания http-запроса против времени ожидания http-keep-alive против сервера времени ожидания
Я пытаюсь обернуть голову вокруг того, как параметры haproxy
timeout http-request <timeout>
timeout http-keep-alive <timeout>
timeout server <timeout>
взаимодействовать друг с другом. Я использую веб-сайт Apache на двух серверах приложений, которые работают за балансировщиком нагрузки haproxy. Сейчас у меня нет поддержки активности, но я экспериментировал с ней, потому что думаю, что это поможет оптимизировать сайт. Моей целью было включить поддержку активности для соединения между браузером и haproxy, но отключить поддержку активности между haproxy и apache. Я сделал это с
option http-server-close
Сейчас я смотрю на настройку тайм-аутов поддержки активности. Я изучал руководство по haproxy для опции тайм-аута http-запроса, опции тайм-аута http-keep-alive и опции сервера тайм-аута. Если я правильно понимаю руководство, тайм-аут http-keep-alive - это время, чтобы сохранить соединение открытым между новыми запросами, а тайм-аут http-запроса - это время ожидания заголовков ответа перед закрытием соединения. Но я не могу понять, что диктует сервер тайм-аута. Я хочу сказать, что сервер тайм-аутов - это время ожидания полного ответа, но кто-нибудь может это подтвердить? Если я прав, что сервер тайм-аутов - это время ожидания полного ответа, то я прав, что он не должен иметь никакого отношения к настройкам тайм-аута поддержки активности?
Вот мой конфиг haproxy, над которым я работаю:
global
maxconn 4096
pidfile /var/run/haproxy.pid
daemon
defaults
mode http
retries 3
option redispatch
maxconn 5000
timeout connect 5000
timeout client 300000
timeout server 300000
listen HTTP *:80
mode http
cookie HTTP insert nocache
balance roundrobin
#option httpclose # I just commented this out in favor of http-server-close
option http-server-close
timeout http-keep-alive 500 # from the haproxy manual suggestion of "tens to hundreds of ms"
timeout http-request 5000
option forwardfor
stats enable
stats uri /my-lb-status
stats auth myLbStatus:123456
reqadd X-Forwarded-Proto:\ http
option httpchk GET /robots.txt HTTP/1.0
server SERVER_A 1.2.3.4:80 cookie app_01 check
server maintenance 127.0.0.1:8080 backup
В конечном счете, моя цель состоит в том, чтобы иметь возможность включить поддержку активности между браузером и haproxy с требованием возможности запуска отчета, который может занять 2-3 минуты для запуска на серверах приложений.
1 ответ
Просто чтобы немного уточнить. Я надеюсь, что это также отвечает на ваши вопросы.
тайм-аут http-запроса
Время от первого полученного клиентского байта до последнего отправленного клиенту байта (независимо от активности). Поэтому, если ваш серверный модуль слишком медленный или клиент отправляет свой запрос слишком медленно, весь обмен данными может занять больше времени, чем этот, и запрос будет отброшен (и тайм-аут отправлен клиенту).
тайм-аут http-keep-alive
Время держать соединение открытым между haproxy и клиентом (после отправки ответа клиента). Это не имеет никакого отношения к времени отклика сервера. Это не имеет никакого отношения к длине одного запроса (то есть время ожидания http-запроса). Это позволяет быстрее получать ответы, если пользователь запрашивает несколько ресурсов (например, html, img и js). При поддержке активности одиночные запросы могут использовать одно и то же TCP-соединение. Таким образом, время загрузки полной веб-страницы сокращается.
сервер тайм-аута
Это время ожидания для ваших внутренних серверов. Когда достигнуто, haproxy отвечает 504 (время ожидания шлюза). Это также не имеет ничего общего с поддержанием активности, поскольку речь идет только о связи между прокси и бэкэндом.