Zachowane dla ponad 20 adresów wirtualnych

12

Skonfigurowałem keepalived na dwóch maszynach Debiana dla wysokiej dostępności, ale natrafiłem na maksymalną liczbę wirtualnych adresów IP, które mogę przypisać do mojego vrrp_instance. Jak mogę skonfigurować i zrezygnować z ponad 20 wirtualnych adresów IP?

To jest bardzo prosta konfiguracja:

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

Na każdym komputerze działa także wiązanie Apache (później Nginx) na wirtualnych adresach IP w celu zakończenia certyfikatu klienta SSL i proxy do serwerów WWW zaplecza. Powodem, dla którego potrzebuję tak wielu VIP-ów, jest niemożność korzystania z VirtualHost na HTTPS.

To jest mój 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
}

Identyczna konfiguracja znajduje się na maszynie BACKUP i działa dobrze, ale tylko do 20 IP.

Znalazłem HOWTO omawiające ten problem. Zasadniczo sugerują posiadanie tylko jednego VIP-a i kierowanie całego ruchu „przez” ten jeden adres IP, a „wszystko będzie dobrze”. Czy to dobre podejście? Korzystam z zapór ogniowych pfSense przed maszynami.

Cytat z powyższego linku:

ip route add $VNET/N via $VIP

or

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

Z góry dziękuję.

EDYTOWAĆ:

@David Schwartz powiedział, że warto dodać trasę, więc próbowałem dodać statyczną trasę do zapory ogniowej pfSense, ale to nie działało tak, jak się spodziewałem.

trasa 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

Upewniłem się również, że mam włączone przekazywanie pakietów na moich hostach:

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

Czy robię to źle? Usunąłem również wszystkich VIP-ów z keepalived.conf, więc nie powiedzie się to tylko 10.200.85.100.

cvaldemar
źródło
Myślę, że takie podejście ma sens.
David Schwartz
... a może po prostu stworzę dodatkowe substancje vrrp z blokiem 20 adresów IP? Prawdopodobnie mógłbym w jakiś sposób pogrupować hostowane witryny HTTPS, nadając mu dodatkowe znaczenie.
cvaldemar
Sieć docelowa powinna być zbiorem ponad 20 adresów IP, a nie pojedynczym adresem IP.
David Schwartz

Odpowiedzi:

14

Najprostszym rozwiązaniem bez zmiany obecnej architektury jest skorzystanie z opcji virtual_ipaddress_excluded . Na przykład

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 zawiera listę adresów IP, które keepalived będzie wyświetlać na serwerze, ale nie są one zawarte w samym pakiecie VRRP, więc nie wliczają się do limitu 20 adresów IP.

W moich konfiguracjach lubię przypisywać adres IP specjalnie dla virtual_ipaddress . tj. ten, który jest zawarty w pakietach VRRP i umieszcza wszystko inne w virtual_ipaddress_excluded . To dobry pomysł, ponieważ nie chcesz zmieniać głównego adresu IP tylko dlatego, że klient odszedł.

John
źródło
Doskonały. Robię to zamiast wielu instancji vrrp. Zmusiłeś mnie również do przeczytania dokumentacji o zachowaniu. Dzięki!
cvaldemar,