IPVS (keepalived) не балансирует UDP-соединения

У меня есть два балансировщика нагрузки с Debian 8 и три сервера Graylog с Debian 9.

Каждый сервер в моей сети отправляет журналы через rsyslog на виртуальный сервер, настроенный на LB. Соединение - UDP.

Проблема в том, что пакеты не сбалансированы . (все соединения идут на первый реальный сервер в списке)

В случае аварийного переключения пакеты правильно отправляются на другие реальные серверы.

Единственный способ, который я нашел для повторной балансировки соединения, - это удалить весь реальный сервер из LB и перезапустить службу keepalived.

Я уже установил:

ipvsadm --set 0 0 1
Timeout (tcp tcpfin udp): 900 120 1

Я уже установил эти две переменные:

echo 1 > /proc/sys/net/ipv4/vs/expire_nodest_conn
echo 1 > /proc/sys/net/ipv4/vs/expire_quiescent_template

IPVS настроен следующим образом:

vrrp_instance logserver {
    state MASTER
    interface eth0
    virtual_router_id 195
    priority 200
    advert_int 1
    authentication {
        auth_type keepalived
        auth_pass xxxxxx
    }
    virtual_ipaddress {
        10.20.20.195/22
    }
}


virtual_server 10.20.20.195 0 {
    delay_loop 60
    protocol UDP
    lb_algo wrr
    lb_kind DR
    persistence_timeout 30

    real_server 10.20.20.196 0 {
        weight 100
        MISC_CHECK {
                connect_timeout 3
                misc_path "/etc/keepalived/checkgraylog 10.20.20.196"
        }
    }

    real_server 10.20.20.197 0 {
       weight 100
        MISC_CHECK {
                connect_timeout 3
                misc_path "/etc/keepalived/checkgraylog 10.20.20.197"
        }
    }

    real_server 10.20.20.198 0 {
       weight 100
        MISC_CHECK {
                connect_timeout 3
                misc_path "/etc/keepalived/checkgraylog 10.20.20.198"
        }    } }

Есть ли способ эффективно сбалансировать UDP-соединение с прямой маршрутизацией? Спасибо

2
задан 10 August 2018 в 14:02
1 ответ
virtual_server 10.20.20.195 12333 {
    delay_loop 60
    protocol UDP
    lb_algo wrr
    lb_kind DR
    ops # <<< - Try this. Works for me (Ubuntu 18.04, Keepalived v1.3.9, ipvsadm v1.28) 

    real_server 10.20.20.196 12333 {

Опция ops для меня работает, только если:

  • Порт виртуального сервера определен явно.
  • fwmark используется вместе с в определении виртуального_сервера.

Не работает для формы virtual_server_IP 0 — в этом случае ipvsadm -Ln показывает, что также используется опция persistent.

1
ответ дан 24 May 2021 в 18:54

Теги

Похожие вопросы