У меня 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. Вот несколько идей:
Разделите трафик на два сервера HAProxy, каждый из которых будет резервным для другого.
Поднять nbproc чтобы отразить количество ядер на вашем конкретном оборудовании.
Если вы используете режим уровня 7, посмотрите, можете ли вы перейти в режим уровня 4 для большей пропускной способности.