Qu’est-ce que le Fail Over ?
Le fail over est un anglicisme traduit généralement par « Tolérance de pannes ».
Le principe est simple :
Deux machines font le service d’une seule avec un paramétrage « flottant » qui permet de déplacer ce service sur la seconde machine en cas de panne de la première.
Les machines implémentant ce type de service sont des membres d’un CLUSTER qui est un groupe d’au moins deux machines en tolérance de pannes. Logique non ? 😉
Qu’est-ce que UCARP ?
UCARP est un un dérivé du Protocole de Redondance à Adresse Commune d’OpenBSD (CARP) qui permet de mettre en place des clusters redondants , au niveau d’un firewall généralement.
Ce protocole est lui-même inspiré de HSRP de CISCO.
Une adresse ip virtuelle se déplace d’une machine à l’autre en fonction des aléas matériels qui peuvent survenir.
L’intérêt évident est de na pas perdre la connectivité Internet quand UCARP est installé sur deux firewalls.
Installation de UCARP
Le site du projet Ucarp est le suivant http://www.ucarp.org/.
Vous pouvez lire leur doc d’install, mais pour ma part j’ai utilisé les RPMS de Dag Wiers destinés à la REDHAT ENTERPRISE 4.
La CentOS 4.2 que j’utilise est 99,9% compatible avec Redhat Enterprise.
Pour cela , j’ai ajouté le service logiciel de Dag Wiers en suivant sa documentation : http://dries.studentenweb.org/rpm/clientconfig.html
J’ai utilisé la procédure suivante :
Import de la clef PGP utilisée par Dag pour signer ses RPMS.
rpm --import http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
Création dun fichier /etc/yum.repod/dag.repo contenant le texte suivant :
[dries]
name=Extra Fedora rpms dries - $releasever - $basearch
baseurl=http://ftp.belnet.be/packages/dries.ulyssis.org/redhat/el4/en/i386/dries/RPMS
Adaptez ce texte à la version de votre système.
Il ne reste qu’à installer ucarp avec la commande suivante :
yum -y install ucarp
Il faut bien entendu installer ucarp sur les deux serveurs qui vont entrer dans le « cluster ».
Paramétrage de UCARP
Ucarp servant à déplacer un ip virtuelle entre deux machine il vous faut connaitre ces informations :
– 1 adresse ip flottante qui sera utilisée comme adresse ip de la passerelle ou du service à « redonder ».
Dans l’exemple, je vais utiliser l’ip 172.16.10.254/24.
– 2 adresses ip fixes qui seront les adresses ip réelles des deux serveurs inclus dans le « cluster ».
Dans l’exemple, je vais utiliser les IPs 172.16.10.1/24 et 172.16.10.2/24.
Ici mon paramétrage se fait sur eth1 qui est l’interface du coté LAN de mon firewall. Adaptez ceci à votre cas.
Sur le premier serveur, voici la commande que j’ai utilisé pour paramétrer eth1.
netconf -d eth1 --ip 172.16.10.1 --netmask 255.255.255.0 --bootproto=none
Cette commande crée le fichier /etc/sysconfig/network-scripts/ifcfg-eth1 avec les valeur indiquées.
Ce fichier existe certainement déjà sur votre système, vous pouvez l’adapter pour ressembler à celui-ci si vous ne voulez pas utiliser la commande netconfig.
DEVICE=eth0
BOOTPROTO=static
#HWADDR=XX:XX:XX:XX:XX:XX / Adresse MAC de votre carte.
ONBOOT=yes
TYPE=Ethernet
IPADDR=172.16.10.1
NETMASK=255.255.255.0
Sur le second serveur, voici la commande que j’ai utilisé pour paramétrer eth1.
netconf -d eth1 --ip 172.16.10.2 --netmask 255.255.255.0 --bootproto=none
L’adresse ip virtuelle se paramètre de la même manière qu’eth1, mais cette fois la commande est identique sur les deux serveurs, car ils doivent « servir » la même adresse.
netconf -d eth1:0 --ip 172.16.10.254 --netmask 255.255.255.0 --bootproto=none
Modifier le fichier /etc/sysconfig/network-scripts/ifcfg-eth1:0 pour ne pas démarrer cette interface au boot.
Modifier la ligne ONBOOT comme suit :
ONBOOT=no
Vous remarquerez que malgrès le ONBOOT=no, l’interface démarre car c’est un alias de eth1 qui est bien activée lors du boot du serveur.
Après divers tests, cela ne semble pas poser problèmes, car UCARP stoppe ou démarre cette interface pour vous.
Voila qui est fait pour la config réseau proprement dite.
Le paramétrage de ucarp se fait en modifiant les fichiers de conf du dossier /etc/sysconfig/carp.
On crée tout d’abord le fichier de configuration qui doit avoir un nom structuré comme ceci : vip-XXX.conf
Le XXX peut être compris entre 001 et 255.
Ici je crée mon premier fichier :
cp vip-001.conf.example vip-001.conf
Ce fichier doit être modifié comme ceci :
# Virtual IP configuration file for UCARP
# The number (from 001 to 255) in the name of the file is the identifier
# $Id: vip-001.conf.example 1527 2004-07-09 15:23:54Z dude $
# Set the same password on all mamchines sharing the same virtual IP
PASSWORD="mon_mot_de_passe_partagé"
# You are required to have an IPADDR= line in the configuration file for
# this interface (so no DHCP allowed)
BIND_INTERFACE="eth1"
# Do *NOT* use a main interface for the virtual IP, use an ethX:Y alias
# with the corresponding /etc/sysconfig/network-scripts/ifcfg-ethX:Y file
# already configured and ith ONBOOT=no
VIP_INTERFACE="eth1:0"
# If you have extra options to add, see "ucarp --help" output
# (the lower the "-k
OPTIONS="-k 128 -P"
Vous remarqerez qu’il vous faut adpater le paramètre PASSWORD= »mon_mot_de_passe_partagé » à votre convenance.
Ce mot de passe est un code échangé par les machines ucarp afin de sécuriser les échanges d’information de services. Ce mot de passe ne passe jamais en clair sur le réseau par mesure de sécurité.
En effet, si une machine utilisant ucarp arrivait à connaitre le mot de passe, cela pourrait créer un gros problème de fonctionnement et de sécurité sur le réseau.
Voila! Votre UCARP est paramétré, ce n’était pas si difficile en fait.
Il nous faut maintenant lancer ce service afin de vérifier son fonctionnement.
Sur les deux machines, éxécutez la commande :
service carp start
Si vous regardez le fichier de log /var/log/messages, vous verrez ucarp se mettre en service et négocier l’état MASTER ou BACKUP dans le cluster ( commande tail -f /var/log/messages
).
Activation de ucarp au boot de la machine
chkconfig --add carp
chkconfig carp on
Test du fonctionnement
Une fois ucarp lancé, tapez depuis une 3ème machine connectée au réseau la commande suivante :
ping 172.16.10.254
Si c'est une machine Windows, ajoutez l'option -t après ping.
Stoppez le service carp sur le serveur dont l’état est MASTER ( vu dans le fichier messages ) avec la commande service carp stop
ou stoppez complètement la machine.
Le ping ne devrait perdre aucun paquet car la seconde machine prends le relais de la première dés qu’elle détecte l’abscence des messages carp du serveur MASTER.
Redémarrez le service carp avec la commande service carp start
ou redémarrez la machine.
Cette machine reprendra sa fonction de maître après avoir redémarré son service carp.
Commentaires
UCARP est prévu pour un fail over sur un firewall, car ce service assez simple ne nécéssite qu’une synchronisation des règles du firewall.
Si vous vous utilisez ucarp dans un autre usage, pensez donc que les deux serveurs doivent éxécuter les mêmes services de la même manière.
Dans le cas de services plus pointus, on fait plutôt appel à des outils comme HEARTBEAT qui assure la disponibilité de services réseau.
Ici, un exemple en anglais de l’usage d’heartbeat http://www.linuxjournal.com/article/5862.