Назад | Перейти на главную страницу

Настройте HAProxy в Linux для одновременного приема 10K подключений

У меня HAProxy 1.5 работает на Ubuntu 14.04 (изменено). Он принимает соединения на портах http и https. Два серверных приложения обрабатывают запросы, используя постоянное соединение.

Когда я создаю около 2200 клиентских подключений, haproxy перестает принимать дополнительные подключения. Но я хочу, чтобы эта система принимала как минимум 10К одновременных подключений.

Вот статистика подключений:

# ss -s
TCP:   4119 (estab 4098, closed 6, orphaned 0, synrecv 0, timewait 6/0), ports 0

Transport Total     IP        IPv6
TCP       4113      4106      7
INET      4128      4117      11

Я уже настроил максимальное количество открытых файлов для процесса:

# cat /proc/1012/limits
Limit                     Soft Limit           Hard Limit           Units
Max open files            240017               240017               files

Мой файл haproxy.config:

global
    log /dev/log syslog debug
    daemon
    user haproxy
    group haproxy
    maxconn 120000
    spread-checks 4

defaults
    log global
    timeout connect 30000ms
    timeout client 300000ms
    timeout server 300000ms

frontend http-in
    mode http
    bind :80
    option httplog
    option forwardfor
    reqadd X-Forwarded-Proto:\ http
    default_backend http-routers

frontend https-in
    mode http
    bind :443 ssl crt /opt/haproxy/cert.pem no-sslv3
    option httplog
    option forwardfor
    option http-server-close
    reqadd X-Forwarded-Proto:\ https
    default_backend http-routers

frontend ssl-in
    mode tcp
    bind :4443 ssl crt /opt/haproxy/cert.pem no-sslv3
    default_backend tcp-routers

backend http-routers
    mode http
    balance roundrobin
        server node0 192.168.10.2:80 check inter 1000
        server node1 192.168.10.2:80 check inter 1000

backend tcp-routers
    mode tcp
    balance roundrobin
        server node0 192.168.10.2:80 check inter 1000
        server node1 192.168.10.2:80 check inter 1000

Насколько мне известно, maxconn блока прослушивания отличается от глобального maxconn. С помощью global maxconn вы ограничиваете максимальное количество подключений, которые вы позволяете обрабатывать процессу haproxy.

Раздел Listen / frontend имеет свой собственный maxconn, который ограничивает количество подключений для каждого слушателя. Итак, попробуйте настроить maxconn в своих разделах внешнего интерфейса или, по крайней мере, настроить его в разделе по умолчанию.

Так что либо:

 defaults
     maxconn 10000

или настроить его для каждого интерфейса.

Какая конфигурация оборудования у вашей машины HAProxy? Ядра, оперативная память, сетевые интерфейсы и т. Д.?

Мы столкнулись со многими проблемами производительности HAProxy. Вот несколько идей:

  1. Разделите трафик на два сервера HAProxy, каждый из которых будет резервным для другого.

  2. Поднять nbproc чтобы отразить количество ядер на вашем конкретном оборудовании.

  3. Если вы используете режим уровня 7, посмотрите, можете ли вы перейти в режим уровня 4 для большей пропускной способности.