Keepalived для более чем 20 виртуальных адресов

12

Я установил keepalived на двух машинах Debian для обеспечения высокой доступности, но натолкнулся на максимальное количество виртуальных IP-адресов, которое я могу назначить своему vrrp_instance. Как мне настроить и отключить более 20 виртуальных IP-адресов?

Это очень простая установка:

LB01: 10.200.85.1
LB02: 10.200.85.2
Virtual IPs: 10.200.85.100 -  10.200.85.200

На каждой машине также выполняется привязка Apache (позднее Nginx) к виртуальным IP-адресам для завершения сертификата клиента SSL и прокси для внутренних веб-серверов. Причина, по которой мне нужно так много VIP, заключается в невозможности использовать VirtualHost на HTTPS.

Это мой keepalived.conf:

vrrp_script chk_apache2 {
        script "killall -0 apache2"
        interval 2
        weight 2
}

vrrp_instance VI_1 {
        interface eth0
        state MASTER
        virtual_router_id 51
        priority 101
        virtual_ipaddress {
            10.200.85.100
            .
            . all the way to
            .
            10.200.85.200
}

На машине BACKUP такая же конфигурация, и она работает нормально, но только до 20-го IP.

Я нашел HOWTO, обсуждающий эту проблему. По сути, они предлагают иметь только один VIP и маршрутизировать весь трафик "через" этот один IP, и "все будет хорошо". Это хороший подход? Я запускаю брандмауэры pfSense перед машинами.

Цитата из приведенной выше ссылки:

ip route add $VNET/N via $VIP

or

route add $VNET netmask w.x.y.z gw $VIP

Заранее спасибо.

РЕДАКТИРОВАТЬ:

@ Дэвид Шварц сказал, что было бы целесообразно добавить маршрут, поэтому я попытался добавить статический маршрут к брандмауэру pfSense, но это не сработало, как я ожидал.

Маршрут pfSense:

Interface:            LAN
Destination network:  10.200.85.200/32 (virtual IP)
Gateway:              10.200.85.100    (floating virtual IP)
Description:          Route to VIP .100

Я также убедился, что на моих хостах включена пересылка пакетов:

$ cat /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.ip_nonlocal_bind=1

Я делаю это неправильно? Я также удалил все VIP из файла keepalived.conf, чтобы он не работал более 10.200.85.100.

cvaldemar
источник
Я думаю, что такой подход имеет смысл.
Дэвид Шварц
... или я бы просто сделал дополнительные vrrp_instances каждый с блоком из 20 IP-адресов? Я мог бы, возможно, каким-то образом сгруппировать размещенные HTTPS-сайты, придав им дополнительный смысл.
cvaldemar
В сети назначения должен быть набор из 20+ IP-адресов, а не один IP-адрес.
Дэвид Шварц

Ответы:

14

Самое простое решение без изменения текущей архитектуры - использовать virtual_ipaddress_excluded . Например

vrrp_instance VI_1 {
    interface eth0
    state MASTER
    virtual_router_id 51
    priority 101

    virtual_ipaddress {
        10.200.85.100
    }

    virtual_ipaddress_excluded {
        10.200.85.101
        . all the way to
        10.200.85.200
    }
}

virtual_ipaddress_excluded содержит список IP-адресов, которые keepalived будет вызывать и отключать на сервере, однако они не включены в сам пакет VRRP, поэтому они не учитываются в пределе 20 IP-адресов.

В моих конфигурациях мне нравится выделять IP-адрес специально для virtual_ipaddress . то есть тот, который включен в пакеты VRRP и помещает все остальное в virtual_ipaddress_excluded . Это хорошая идея, потому что вы не хотите менять основной IP только потому, что клиент ушел.

johnf
источник
Отлично. Я делаю это вместо нескольких экземпляров vrrp. Вы также заставили меня прочитать документацию поддержки активности. Благодарность!
cvaldemar