Разница между глобальным maxconn и серверным maxconn haproxy

У меня вопрос о моем конфиге haproxy:

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 syslog emerg
    maxconn     4000
    quiet
    user        haproxy
    group       haproxy
    daemon
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will 
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode        http
    log         global
    option      abortonclose
    option      dontlognull
    option      httpclose
    option      httplog
    option      forwardfor
    option      redispatch
    timeout connect 10000 # default 10 second time out if a backend is not found
    timeout client 300000 # 5 min timeout for client
    timeout server 300000 # 5 min timeout for server
    stats       enable

listen  http_proxy  localhost:81

    balance     roundrobin
    option      httpchk GET /empty.html
    server      server1 myip:80 maxconn 15 check inter 10000
    server      server2 myip:80 maxconn 15 check inter 10000

Как вы видите, все просто, но я немного запутался в том, как работают свойства maxconn.

Есть глобальное и maxconn на сервере, в блоке listen. Я думаю так: глобальное свойство управляет общим количеством соединений, которые haproxy, как служба, будет ставить в очередь или обрабатывать за один раз. Если число превышает это, он либо убивает соединение, либо объединяет в пул какой-нибудь linux сокет? Я понятия не имею, что происходит, если число становится больше 4000.

Затем у вас есть свойство сервера maxconn, установленное на 15. Во-первых, я установил это значение на 15, потому что мой php-fpm, который перенаправляет на отдельный сервер, имеет только столько дочерних процессов, сколько он может использовать, поэтому я убеждаюсь, что я объединяю запросы здесь, а не в php-fpm. Что, как мне кажется, быстрее.

Но вернемся к теме, моя теория об этом числе заключается в том, что каждый сервер в этом блоке будет посылать только 15 соединений за раз. А затем соединения будут ждать открытого сервера. Если бы у меня были включены cookies, соединения ждали бы КОРРЕКТНОГО открытого сервера. Но у меня их нет.

Итак, вопросы:

  1. Что произойдет, если количество глобальных соединений превысит 4000? Они умирают? Или как-то объединяются в Linux?
  2. Связаны ли глобальные соединения с серверными соединениями, кроме того факта, что вы не можете иметь общее число серверных соединений больше глобального?
  3. При подсчете глобальных соединений, разве это не должно быть количество соединений, сложенных в разделе сервера, плюс определенный процент для объединения в пул? И, очевидно, у вас есть другие ограничения на соединения, но на самом деле это то, сколько вы хотите отправить на прокси?

Спасибо заранее.

86
задан Andrew Whitaker 13 August 2019 в 17:03
поделиться