Keepalived pour plus de 20 adresses virtuelles

12

J'ai configuré keepalived sur deux machines Debian pour une haute disponibilité, mais j'ai rencontré le nombre maximum d'IP virtuelles que je peux assigner à mon vrrp_instance. Comment pourrais-je configurer et échouer plus de 20 IP virtuelles?

Voici la configuration, très simple:

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

Chaque machine exécute également une liaison Apache (plus tard Nginx) sur les adresses IP virtuelles pour la terminaison du certificat client SSL et le proxy pour les serveurs Web principaux. La raison pour laquelle j'ai besoin de tant de VIP est l'impossibilité d'utiliser VirtualHost sur HTTPS.

Voici mon 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
}

Une configuration identique se trouve sur la machine BACKUP, et cela fonctionne bien, mais uniquement jusqu'à la 20e IP.

J'ai trouvé un HOWTO traitant de ce problème. Fondamentalement, ils suggèrent d'avoir un seul VIP et d'acheminer tout le trafic "via" cette adresse IP, et "tout ira bien". Est-ce une bonne approche? J'utilise des pare-feu pfSense devant les machines.

Citation du lien ci-dessus:

ip route add $VNET/N via $VIP

or

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

Merci d'avance.

ÉDITER:

@David Schwartz a dit qu'il serait judicieux d'ajouter une route, j'ai donc essayé d'ajouter une route statique au pare-feu pfSense, mais cela n'a pas fonctionné comme je m'y attendais.

Route 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

J'ai également vérifié que le transfert de paquets était activé sur mes hôtes:

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

Suis-je en train de mal faire? J'ai également supprimé tous les VIP du keepalived.conf pour qu'il échoue uniquement le 10.200.85.100.

cvaldemar
la source
Je pense que cette approche est logique.
David Schwartz
... ou devrais-je simplement créer des vrrp_instances supplémentaires chacune avec un bloc de 20 IP? Je pourrais probablement regrouper les sites HTTPS hébergés d'une manière ou d'une autre en lui donnant un sens supplémentaire.
cvaldemar
Le réseau de destination doit être l'ensemble de plus de 20 IP, pas une seule IP.
David Schwartz,

Réponses:

14

La solution la plus simple sans changer votre architecture actuelle consiste à utiliser virtual_ipaddress_excluded . Par exemple

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 contient une liste d'adresses IP que keepalived fera monter et descendre sur le serveur, mais elles ne sont pas incluses dans le paquet VRRP lui-même, donc elles ne comptent pas dans la limite des 20 adresses IP.

Dans mes configurations, j'aime allouer une adresse IP spécifiquement pour virtual_ipaddress . c'est-à-dire celui qui est inclus dans les paquets VRRP et qui met tout le reste dans virtual_ipaddress_excluded . C'est une bonne idée car vous ne voulez pas avoir à changer l'adresse IP principale simplement parce qu'un client est parti.

johnf
la source
Excellent. Je fais cela au lieu de plusieurs instances vrrp. Vous m'avez également fait lire des documents conservés. Merci!
cvaldemar