Параметр 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 будут использовать ваши ресурсы, и каждый из них самостоятельно устанавливает ограничения на соединение. Процесс завершения не завершится, пока все очереди не будут слиты. Поэтому вполне возможно, что новый процесс и его клиенты борются за места.

Лучший обходной путь, который я могу придумать, - это

  1. Примите ровно два соединения на рабочий процесс и
  2. будьте осторожны, чтобы не перезагрузить haproxy пока завершается процесс отделки.
Другие вопросы по тегам