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

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-соединение с прямой маршрутизацией? Спасибо