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

haproxy tcp roundrobin балансировка нагрузки не работает должным образом

Я новичок в 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 для довольно долгоживущих соединений.