Introduction
Dans cette section, il sera expliqué l’utilisation de uCarp sous Debian 4.0 Etch pour avoir une IP flottante entre deux machines.
Prérequis
Peu de choses nécessaires pour cela, une installation de Debian 4.0 Etch ou plus récente.
Il est à note que le paquet uCarp en Debian 4.0 Etch ne supporte pas la configuration par paramètres depuis le fichier /etc/init.d/interfaces mais une simple configuration par ligne de commande à exécuter quand l’interface change d’état.
Pour remédier à cela, j’ai fait un backport du paquet uCarp de Debian Testing Lenny. Ce paquet est disponible à l’URL suivante: http://download.free-4ever.net/debian/ucarp/ucarp_1.2-2~bpo40+1_i386.deb
Installation
Rien de particulier, après avoir téléchargé le paquet, on utilise la commande dpkg avec ligne de commande de la forme suivante:
dpkg -i ucarp_1.2-2~bpo40+1_i386.deb
Le paquet s’installe proprement sans soucis de dépendance.
Configuration
Toutes les configurations vont se passer dans le fichier /etc/network/interfaces.
Il sera de la forme suivante sur le premier serveur:
auto eth0 iface eth0 inet static # Adresse IP réelle de la machine address 192.168.1.250 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 # un id qui sert dans le cas ou plusieurs instances tournent sur une même machine ucarp-vid 1 # l'IP virtuelle ucarp-vip 192.168.1.254 # un secret partagé entre les deux serveurs ucarp-password KavalEik1 # le poids de ce serveur dans le cluster ucarp-advskew 0 # L'intervalle de vérification ucarp advbase 1 # Ce serveur n'est pas maitre ucarp-master no # L'interface avec l'adresse IP virtuelle iface eth0:ucarp inet static address 192.168.1.254 netmask 255.255.255.255
Et sur le deuxième serveur:
auto eth0 iface eth0 inet static address 192.168.1.251 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 # un id qui sert dans le cas ou plusieurs instances tournent sur une même machine ucarp-vid 1 # l'IP virtuelle ucarp-vip 192.168.1.254 # un secret partagé entre les deux serveurs ucarp-password KavalEik1 # le poids de ce serveur dans le cluster ucarp-advskew 50 # L'intervalle de vérification ucarp advbase 1 # Ce serveur n'est pas maitre ucarp-master no # L'interface avec l'adresse IP virtuelle iface eth0:ucarp inet static address 192.168.1.254 netmask 255.255.255.255
C’est uCarp qui se chargera d’activer l’interface eth0:ucarp sur le serveur qui est maître à l’instant t et bien de la désactiver sur l’autre.
Le poids du firewall de backup est plus important. Il est conseillé de ne pas laisser les deux serveurs avec le même poids sans définir un maitre, après un isolement réseau, uCarp ne sait pas sortir du conflit de serveur maître !
Si au moment où uCarp active l’interface, on souhaite qu’il exécute une commande pour démarrer un service par exemple, il faut lui donner les noms des scripts à exécuter.
Pour cela, on utilise les paramètres suivants:
# le script à exécuter quand ce serveur récupère l'IP virtuelle ucarp-upscript /etc/network/vip-up-dmz # le script à exécuter quand ce serveur perd l'IP virtuelle ucarp-downscript /etc/network/vip-down-dmz
Il ne faut surtout pas oublier dans ces scripts d’activer l’interface virtuelle pour le script up et la désactiver pour le script down.
uCarp exécute ces scripts en leur passant en paramètre le nom de l’interface physique qui supporte l’interface virtuelle à activer ou désactiver.
Les scripts seront donc de la forme suivante pour le up:
#!/bin/sh # On active l'interface virtuelle /sbin/ifup $1:ucarp # Quand mon interface s'active, je souhaite démarrer le daemon OpenVPN /etc/init.d/openvpn start
et pour le script down:
#!/bin/sh # On désactive l'interface virtuelle /sbin/ifdown $1:ucarp # on arrête OpenVPN /etc/init.d/openvpn stop # On s'assure qu'il n'en reste pas de vivant ! pkill openvpn pkill -9 openvpn
Toute la configuration de uCarp tient la dedans.
Activation des modifications
Il ne reste plus qu’à redémarrer l’interface qui porte uCarp sur chaque serveur.
Basculement manuel
Je n’ai pas trouvé grand chose sur une façon propre de provoquer un basculement. Alors je fais rapidement un down/up sur l’interface physique.
Pour cela utiliser une ligne de commande du style:
ifdown eth0 && sleep 2 && ifup eth0
Mot de la fin
uCarp peut être utile dans des cas simples où l’on a besoin d’une Ip flottante entre deux machines. Il s’appuie uniquement sur les défaillances réseau contrairement à Heartbeat qui est capable de surveiller un service pour déterminer le moment où il doit basculer.
uCarp sert plutôt dans les cas de cluster de firewall. On met l’ip flottante sur les interfaces internes pour avoir une passerelle par défaut qui ne change jamais par exemple.