Параметр maxconn сервера в haproxy
Я использую HAProxy в производственной среде, чтобы сбалансировать запросы к ряду серверных экземпляров, которые могут обрабатывать только 1 запрос за один раз (по нашему собственному решению). Зная, что я установил параметр maxconn в строке определения сервера конфигурации бэкенда в файле haproxy.cfg на 1, но сервер все еще получает запросы, потому что я вижу в журнале нашего сервера сообщения типа "запрос отклонен, уже обрабатывается", а также в HAProxy протоколировать запросы, которые возвращаются клиенту с кодом состояния 502 http.
Это конфигурация HAProxy:
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local6 debug
user haproxy
group haproxy
daemon
stats socket /tmp/haproxy
defaults
log global
mode http
balance roundrobin
option httplog
retries 10
option redispatch
frontend custom 0.0.0.0:50000
backlog 2000
acl p5queue avg_queue(custombe) gt 200
tcp-request content reject if p5queue
default_backend custombe
timeout client 15000
backend custombe
retries 10
option redispatch
timeout queue 600000
timeout connect 1000
timeout server 120000
server custom-server-1 0.0.0.0:50001 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
server custom-server-2 0.0.0.0:50002 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
server custom-server-3 0.0.0.0:50003 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
server custom-server-4 0.0.0.0:50004 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
server custom-server-5 0.0.0.0:50005 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
server custom-server-6 0.0.0.0:50006 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
server custom-server-7 0.0.0.0:50007 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
server custom-server-8 0.0.0.0:50008 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
server custom-server-9 0.0.0.0:50009 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
server custom-server-10 0.0.0.0:50010 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
Кто-то знает, почему экземпляры сервера получают запросы, если для параметра maxconn установлено значение 1? Я читал вопросы StackOverflow, где объясняется maxconn и как он работает в разных разделах, поэтому я спрашиваю об этом сейчас, он не должен так работать.
1 ответ
Убедитесь, что нет другого процесса, который имеет открытые соединения с вашим сервисом.
Обратите особое внимание, что во время haproxy reload
, есть период времени, в течение которого два процесса haproxy будут использовать ваши ресурсы, и каждый из них самостоятельно устанавливает ограничения на соединение. Процесс завершения не завершится, пока все очереди не будут слиты. Поэтому вполне возможно, что новый процесс и его клиенты борются за места.
Лучший обходной путь, который я могу придумать, - это
- Примите ровно два соединения на рабочий процесс и
- будьте осторожны, чтобы не перезагрузить
haproxy
пока завершается процесс отделки.