Я уже много месяцев без проблем использую HAProxy для балансировки нагрузки серверов приложений. Недавно некоторые всплески трафика привели меня к установке параметра maxconn для ограничения скорости соединений с моими внутренними серверами.
Он отлично работает несколько часов, а потом, кажется, перестает принимать любые подключения.
Я посмотрел на свои графики ресурсов системы, и использование loadavg и RAM, похоже, находится под контролем без больших всплесков до зависания. РЕДАКТИРОВАТЬ: Loadavg, похоже, резко вырос с 0,13 до 1,0 прямо перед замораживанием. В этой системе 4 ядра, я запускаю HAProxy только как один процесс - когда я просматриваю его в htop после зависания, этот процессор привязан к 100%.
# HA-Proxy version 1.4.16 2011/08/04
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log 127.0.0.1 local1 debug
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
user haproxy
group haproxy
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option forwardfor
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen platform-cache 0.0.0.0:80
mode http
maxconn 10000
option abortonclose
#balance uri
hash-type consistent
balance hdr(Host)
server varnish1 10.176.129.245 weight 20 maxconn 64 check
server varnish2 10.176.129.29 weight 40 maxconn 64 check
contimeout 60000
# HTTP response : 'HTTP/1.0 200 OK'
listen http_health_check 0.0.0.0:60001
mode health
option httpchk
listen stats_for_scout 127.0.0.1:8081
mode http
stats uri /stats
listen public_stats :8080
mode http
stats uri /stats
stats realm Haproxy\ Statistics
stats auth ****************
Вот журналы от одного перезапуска до следующего зависания и перезапуска через несколько часов:
Feb 5 08:57:15 localhost haproxy[31950]: Proxy platform-cache started.
Feb 5 08:57:15 localhost haproxy[31950]: Proxy http_health_check started.Feb 5 08:57:15 localhost haproxy[31950]: Proxy stats_for_scout started.
Feb 5 08:57:15 localhost haproxy[31950]: Proxy public_stats started.
Feb 5 09:43:47 localhost haproxy[31951]: Pausing proxy platform-cache.
Feb 5 09:43:47 localhost haproxy[31951]: Pausing proxy http_health_check.
Feb 5 09:43:47 localhost haproxy[31951]: Pausing proxy stats_for_scout.
Feb 5 09:43:47 localhost haproxy[31951]: Pausing proxy public_stats.
Feb 5 09:43:47 localhost haproxy[32746]: Proxy platform-cache started.
Feb 5 09:43:47 localhost haproxy[32746]: Proxy http_health_check started.
Feb 5 09:43:47 localhost haproxy[32746]: Proxy stats_for_scout started.
Feb 5 09:43:47 localhost haproxy[32746]: Proxy public_stats started.
Feb 5 09:43:47 localhost haproxy[31951]: Stopping proxy platform-cache in 0 ms.
Feb 5 09:43:47 localhost haproxy[31951]: Stopping proxy http_health_check in 0 ms.
Feb 5 09:43:47 localhost haproxy[31951]: Stopping proxy stats_for_scout in 0 ms.
Feb 5 09:43:47 localhost haproxy[31951]: Stopping proxy public_stats in 0 ms.
Feb 5 09:43:47 localhost haproxy[31951]: Proxy platform-cache stopped (FE: 32540 conns, BE: 30334 conns).
Feb 5 09:43:47 localhost haproxy[31951]: Proxy http_health_check stopped (FE: 0 conns, BE: 0 conns).
Feb 5 09:43:47 localhost haproxy[31951]: Proxy stats_for_scout stopped (FE: 16 conns, BE: 0 conns).
Feb 5 09:43:47 localhost haproxy[31951]: Proxy public_stats stopped (FE: 4 conns, BE: 2 conns).
Feb 5 17:52:27 localhost haproxy[26610]: Proxy platform-cache started.
Feb 5 17:52:27 localhost haproxy[26610]: Proxy http_health_check started.
Feb 5 17:52:27 localhost haproxy[26610]: Proxy stats_for_scout started.
Feb 5 17:52:27 localhost haproxy[26610]: Proxy public_stats started.
~
Оригинальная конфигурация, которая безупречно проработала более года
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log 127.0.0.1 local1 debug
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
user haproxy
group haproxy
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option forwardfor
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen platform-cache 0.0.0.0:80
mode http
#balance uri
hash-type consistent
balance hdr(Host)
server varnish1 10.176.129.245 weight 20 check
server varnish2 10.176.129.29 weight 40 check
# HTTP response : 'HTTP/1.0 200 OK'
listen http_health_check 0.0.0.0:60001
mode health
option httpchk
listen stats_for_scout 127.0.0.1:8081
mode http
stats uri /stats
listen public_stats :8080
mode http
stats uri /stats
stats realm Haproxy\ Statistics
stats auth *******
Спасибо за вашу помощь!
Я просто столкнулся с той же проблемой или похожей проблемой. Я запускал haproxy, и внезапно он переставал принимать новые соединения. Я попытался увеличить максимальное количество подключений с 32k до 65k, и когда я перезапустил его, это выглядело лучше, но затем перестанет принимать новые подключения до предела максимального количества подключений в файле haproxy.cfg. Я видел, как изменения вступают в силу на странице статистики haproxy.
Затем я заглянул в / proc // limits и увидел следующее: ... Максимальное количество открытых файлов 4026 4026 файлов ...
Затем я проверил / proc // fd и увидел, что когда haproxy остановился, у меня было открыто примерно такое количество файлов. Итак, я думаю, что проблема в основных ограничениях unix, а не в haproxy. Я увеличил пределы процесса, и пока что в моих тестах это выглядит лучше.
Я надеюсь, что это поможет, если ваша проблема вызвана той же основной проблемой.
Если вы достигли настроенного лимита, это должно быть нормально. Вы можете прочитать это на haproxy документация:
maxconn <number>
Sets the maximum per-process number of concurrent connections to <number>. It
is equivalent to the command-line argument "-n". Proxies will stop accepting
connections when this limit is reached.