Keepalived para más de 20 direcciones virtuales

12

He configurado keepalived en dos máquinas Debian para una alta disponibilidad, pero me he encontrado con la cantidad máxima de IP virtuales que puedo asignar a mi vrrp_instance. ¿Cómo haría para configurar y fallar más de 20 IP virtuales?

Esta es la configuración, muy simple:

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

Cada máquina también está ejecutando el enlace Apache (más tarde Nginx) en las IP virtuales para la terminación del certificado del cliente SSL y el proxy para servidores web backend. La razón por la que necesito tantos VIP es la incapacidad de usar VirtualHost en HTTPS.

Este es mi 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
}

Hay una configuración idéntica en la máquina BACKUP, y funciona bien, pero solo hasta la 20ª IP.

He encontrado un CÓMO discutiendo este problema. Básicamente, sugieren tener solo un VIP y enrutar todo el tráfico "a través de" esta IP, y "todo estará bien". ¿Es este un buen enfoque? Estoy ejecutando firewalls pfSense frente a las máquinas.

Cita del enlace de arriba:

ip route add $VNET/N via $VIP

or

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

Gracias por adelantado.

EDITAR:

@David Schwartz dijo que tendría sentido agregar una ruta, así que intenté agregar una ruta estática al firewall de pfSense, pero eso no funcionó como esperaba.

Ruta 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

También me aseguré de tener habilitado el reenvío de paquetes en mis hosts:

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

¿Estoy haciendo esto mal? También eliminé todos los VIP del keepalived.conf, por lo que solo falla durante 10.200.85.100.

cvaldemar
fuente
Creo que ese enfoque tiene sentido.
David Schwartz el
... o simplemente haría vrrp_instances adicionales cada una con un bloque de 20 IP? Probablemente podría agrupar los sitios HTTPS alojados de alguna manera dándole un significado adicional.
cvaldemar
La red de destino debe ser el conjunto de más de 20 IP, no una sola IP.
David Schwartz

Respuestas:

14

La solución más simple sin cambiar su arquitectura actual es hacer uso de virtual_ipaddress_excluded . Por ejemplo

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 contiene una lista de direcciones IP que keepalived generará en el servidor, sin embargo, no están incluidas en el paquete VRRP en sí mismo, por lo que no cuentan para el límite de 20 direcciones IP.

En mis configuraciones me gusta asignar una IP específicamente para virtual_ipaddress . es decir, el que está incluido en los paquetes VRRP y pone todo lo demás en virtual_ipaddress_excluded . Esta es una buena idea porque no desea tener que cambiar la IP principal solo porque un cliente se fue.

johnf
fuente
Excelente. Estoy haciendo esto en lugar de múltiples instancias vrrp. También me hiciste leer sobre documentación actualizada. ¡Gracias!
cvaldemar