Я новичок в haproxy и использую его для балансировки TCP-нагрузки журналов rsyslog на коннекторы ArcSight. На всю жизнь я не могу добиться, чтобы трафик равномерно балансировался между всеми узлами в пуле (что является желаемым поведением). Я пробовал много перестановок весов и maxconn, но безрезультатно.
Кажется, что это должно быть простой проблемой, но поведение каждого узла пула очень сбивает с толку. Кроме того, поскольку большинство людей используют haproxy для балансировки нагрузки http, я нахожу скудную документацию о том, как лучше всего делать то, что я пытаюсь сделать.
Кто-нибудь может порекомендовать какие-либо идеи, проверенные конфигурации или шаги по устранению неполадок?
Спасибо!
Вот наша текущая конфигурация:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 256000
user haproxy
group haproxy
spread-checks 5
daemon
quiet
defaults
log global
option dontlognull
option redispatch
option allbackups
maxconn 256000
timeout connect 5000
listen stats :1936
mode http
stats enable
stats realm Haproxy\ Statistics
stats uri /
stats auth admin:savetheday
frontend rsyslog_netscreen
bind 127.0.0.1:8514
mode tcp
option tcplog
option contstats
option tcpka
default_backend rsyslog_netscreen_backend
backend rsyslog_netscreen_backend
balance roundrobin
mode tcp
option tcpka
option srvtcpka
server netscreen1 localhost:9515 weight 1 maxconn 1024 check
server netscreen2 localhost:9516 weight 1 maxconn 1024 check
server netscreen3 localhost:9517 weight 1 maxconn 1024 check
server netscreen4 localhost:9518 weight 1 maxconn 1024 check
server netscreen5 localhost:9519 weight 1 maxconn 1024 check
server netscreen6 localhost:9520 weight 1 maxconn 1024 check
Обратите внимание, что roundrobin
не лучшая стратегия для достижения равномерной нагрузки. Он будет следить за тем, чтобы каждый бэкэнд получил одинаковые число соединений с течением времени, но не заботится о том, как долго длится каждое соединение.
В твоем stats
Представление, должно быть очевидно, что общее количество сеансов на один внутренний сервер почти одинаково (если их время безотказной работы одинаково). Однако количество текущих сеансов может немного отличаться.
Мы обнаружили, что с помощью leastconn
вместо того roundrobin
дает гораздо более равномерную нагрузку. Это имеет смысл, потому что серверы, которые застряли со многими долгоживущими клиентами, которые держат свое соединение, не должны быть обременены новыми входящими соединениями.
используйте roundrobin для короткоживущих соединений и используйте lessconn для довольно долгоживущих соединений.