El problema de que los IPs añadidos en keepalived no se comunican al superar los 20
Servidor
Published: 2016-05-16

Este contenido se ha movido de Qiita.

En algún lugar se utiliza keepalived como balanceador de carga en una configuración VRRP + LVS.
Este balanceador de carga opera configurando numerosos IPs (debido a los certificados SSL, entre otras razones) de la siguiente manera.

En este proceso, se produjo un triste incidente en el que no se pudo establecer la comunicación con las direcciones IP añadidas.

Configuración del balanceador de carga keepalived (Configuración DSR)

Se rutearon las direcciones IP necesarias para SSL desde el router utilizando una ruta estática y se fueron añadiendo direcciones IP según fuera necesario.

→ Como resultado, las direcciones IP en el keepalived del balanceador de carga han ido aumentando poco a poco.
Nota: Se han utilizado direcciones IP privadas por conveniencia.

No se pueden establecer más de 20 direcciones IP en VRRP

  • Se configuraron 21 direcciones IP en el archivo de configuración (Nota: este es un ejemplo de configuración)
vrrp_instance BOND0 {
    state MASTER
    interface bond0 
    virtual_router_id 100 
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.4 dev bond0
        192.168.2.1 dev bond0
        192.168.2.2 dev bond0
        192.168.2.3 dev bond0
        192.168.2.4 dev bond0
        192.168.2.5 dev bond0
        192.168.2.6 dev bond0
        192.168.2.7 dev bond0
        192.168.2.8 dev bond0
        192.168.2.9 dev bond0
        192.168.2.10 dev bond0
        192.168.2.11 dev bond0
        192.168.2.12 dev bond0
        192.168.2.13 dev bond0
        192.168.2.14 dev bond0
        192.168.2.15 dev bond0
        192.168.2.16 dev bond0
        192.168.2.17 dev bond0
        192.168.2.18 dev bond0
        192.168.2.19 dev bond0
        192.168.2.20 dev bond0
    }
}
  • A pesar de haber configurado 21 direcciones IP, ¡no hay suficientes!
# ip addr show bond0 | grep "inet 192"
    inet 192.168.1.4/32 scope global bond0
    inet 192.168.2.1/32 scope global bond0
    inet 192.168.2.2/32 scope global bond0
    inet 192.168.2.3/32 scope global bond0
    inet 192.168.2.4/32 scope global bond0
    inet 192.168.2.5/32 scope global bond0
    inet 192.168.2.6/32 scope global bond0
    inet 192.168.2.7/32 scope global bond0
    inet 192.168.2.8/32 scope global bond0
    inet 192.168.2.9/32 scope global bond0
    inet 192.168.2.10/32 scope global bond0
    inet 192.168.2.11/32 scope global bond0
    inet 192.168.2.12/32 scope global bond0
    inet 192.168.2.13/32 scope global bond0
    inet 192.168.2.14/32 scope global bond0
    inet 192.168.2.15/32 scope global bond0
    inet 192.168.2.16/32 scope global bond0
    inet 192.168.2.17/32 scope global bond0
    inet 192.168.2.18/32 scope global bond0
    inet 192.168.2.19/32 scope global bond0

Esto en realidad se menciona en la documentación de keepalived…
http://www.keepalived.org/pdf/UserGuide.pdf

virtual_ipaddress { # Bloque limitado a 20 direcciones IP
    @IP
    @IP
    @IP
}

¡Se permiten hasta 20 direcciones IP! ¡Lo dice claramente!

Cómo configurar más de 20 direcciones IP

  • Se pueden añadir direcciones IP adicionales en el archivo de configuración utilizando virtual_ipaddress_excluded (Nota: este es un ejemplo de configuración)
vrrp_instance BOND0 {
    state MASTER
    interface bond0 
    virtual_router_id 100 
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.4 dev bond0
    }
    virtual_ipaddress_excluded {
        192.168.2.1 dev bond0
        192.168.2.2 dev bond0
        192.168.2.3 dev bond0
        192.168.2.4 dev bond0
        192.168.2.5 dev bond0
        192.168.2.6 dev bond0
        192.168.2.7 dev bond0
        192.168.2.8 dev bond0
        192.168.2.9 dev bond0
        192.168.2.10 dev bond0
        192.168.2.11 dev bond0
        192.168.2.12 dev bond0
        192.168.2.13 dev bond0
        192.168.2.14 dev bond0
        192.168.2.15 dev bond0
        192.168.2.16 dev bond0
        192.168.2.17 dev bond0
        192.168.2.18 dev bond0
        192.168.2.19 dev bond0
        192.168.2.20 dev bond0
    }
}
  • Ahora se pueden configurar con éxito más de 20 direcciones IP.
# ip addr show bond0 | grep "inet 192"
    inet 192.168.1.4/32 scope global bond0
    inet 192.168.2.1/32 scope global bond0
    inet 192.168.2.2/32 scope global bond0
    inet 192.168.2.3/32 scope global bond0
    inet 192.168.2.4/32 scope global bond0
    inet 192.168.2.5/32 scope global bond0
    inet 192.168.2.6/32 scope global bond0
    inet 192.168.2.7/32 scope global bond0
    inet 192.168.2.8/32 scope global bond0
    inet 192.168.2.9/32 scope global bond0
    inet 192.168.2.10/32 scope global bond0
    inet 192.168.2.11/32 scope global bond0
    inet 192.168.2.12/32 scope global bond0
    inet 192.168.2.13/32 scope global bond0
    inet 192.168.2.14/32 scope global bond0
    inet 192.168.2.15/32 scope global bond0
    inet 192.168.2.16/32 scope global bond0
    inet 192.168.2.17/32 scope global bond0
    inet 192.168.2.18/32 scope global bond0
    inet 192.168.2.19/32 scope global bond0
    inet 192.168.2.20/32 scope global bond0