Dans cette section, nous allons voir les différentes étapes nécessaires à la mise en place d'un cluster haute Disponibilité avec les solutions DRBD et Heartbeat.
Installation des logiciels HA
Pré-requis
Pour la réalisation d'une infrastructure haute disponibilité, nous utiliserons une distribution Linux DEBIAN Sarge. Cette distribution, relativement simple à prendre en main, est basée sur le système de paquets précompilés .DEB. Par ailleurs, la commande apt-get nous assure une installation simplifiée de tous les programmes indispensables à la mise en place de ce type de solution. Voici un récapitulatif du matériel et des logiciels utilisés pour notre infrastructure HA:
- Matériel : Notre cluster est constitué de deux serveurs aux performances comparables mais pas forcément identiques. Le premier étant en mode actif, c'est-à-dire le serveur maître, et le second en mode passif ou esclave. C'est ce dernier qui fera office de relais au cas où le maître présente un dysfonctionnement. Ces deux serveurs nécessitent deux équipements réseau chacun. La première carte Ethernet étant reliée en RJ45 au switch du réseau local, et une seconde carte Ethernet gigabit dédiée à l'interconnexion entre les deux serveurs, pour permettre le transfert des données en temps réel et le déclenchement du basculement entre les serveurs en cas de panne ou de rétablissement d'un des deux.
- Système : Linux Debian Sarge basée sur un kernel 2.4.x
- Logiciels : DRBD v0.7 / Heartbeat v1.2 / Mon v0.99.
Remarques:
- La distribution Linux debian étant basée sur un système de package de type DEB, nous utiliserons les versions pré-compilées pour i386.
- Les dépendances sont satisfaites automatiquement lors de l'avec apt-get (sauf pour le programme Mon qui n'est pas dans l'arbre de packages de Debian. Il devrait donc être installé manuellement.
- Il est bien entendu indispensable que votre machine dispose d'un accès à Internet.
Avant toutes choses, n'oubliez pas de mettre à jour votre liste de packages afin de vous assurer de récupérer la dernière version stable des logiciels.
# apt-get update
Installation de DRBD
Comme nous l'avons dit auparavant, DRBD permet de faire du RAID 1 par le réseau. C'est en partie grâce à ce mirroring que Heartbeat pourra mettre à disposition des services haute disponibilité.
DRBD s'installe en tant que module. Nous aurons donc besoin de récupérer les sources puis de les compiler. Voici la liste des commandes pour réaliser cette procédure (à réaliser sur les deux serveurs).
# apt-get install kernel-image-$(uname -r) kernel-headers-$(uname -r) build-essential # apt-get install drbd0.7-utils drbd0.7-module-source # apt-get install dpkg-dev kernel-package ncurses-dev patchutils # cd /usr/src # tar xfzv drbd0.7-tar.gz # apt-get install gcc-3.4 # cd /usr/src/kernel-headers-2.4.27-2-386 # module-assistant
Une fois module-assistant lancé, allez dans SELECT, puis sélectionnez le module drbd0.7. Terminez en faisant un BUILD puis un INSTALL.

"Image tirée du site http://www.supinfo-projects.com/fr/2006/ha%5Ffr/"
Le module est prêt à être lancé. Utilisez la commande modprobe pour le charger.
# modprobe drbd
drbd:initialised. Version: 0.7.11 (api:77/proto:74)
drbd: SVN Revision: 1807 build by lars@barkeeper1, 2005-06-07 19:33:30
drbd: registered as block device major 147
Enfin, utilisez la commande lsmod pour vérifier que le module est bien chargé. Si vous obtenez ce type de résultat, cela signifie que tout s'est déroulé comme il se doit.
# lsmod | grep drbd
drbd 144992 0
Installation de Heartbeat
Comme nous l'avons vu précédemment, Heartbeat constitue le lien permettant aux 2 serveurs de se prendre mutuellement le pouls. Heartbeat va nous permettre de former un cluster à partir des 2 machines. Chaque machine est appelée noeud du cluster.
L'installation de Heartbeat sur un système Debian est relativement simple, le paquet se trouvant dans les dépôts standards. La commande suivante doit être lancée sur les 2 machines afin d'installer le programme Heartbeat.
# apt-get install heartbeat
Heartbeat s'installe en tant que service. Vous obtiendrez une erreur à la fin de cette installation vous informant que le fichier ha.cf n'est pas présent. Ceci est normal et sera corrigé un peu plus bas.
Installation de Mon
Heartbeat surveille l'état du système mais pas celui des services. C'est ici qu'intervient Mon. Mon n'est pas dans l'arbre de paquets Debian. Il nous faudra donc l'installer manuellement. Les étapes suivantes sont encore une fois à effectuer sur les deux serveurs.
Récupérez le package Mon à l'adresse suivante : http://www.kernel.org/software/mon/. Téléchargez le dans /etc/ha.d puis exécutez les commandes suivantes pour l'installer.
# cd /etc/ha.d # tar xzvf mon-0.99.2.tar.gz # mv mon-0.99.2.tar.gz mon
De plus, Mon requiert quelques modules Perl externes. Vous pouvez utiliser votre CPAN (Comprehensive Perl Archive Network) habituel pour récupérer ces modules où utiliser la liste de liens ci-dessous.
Décompressez les archives avec la commande tar xvzf puis installez les modules en suivant la procédure suivante dans chacun des dossiers crées.
# perl Makefile.pl # make && make install
Les dépendances de Mon sont maintenant installées. Nous allons maintenant nous intéresser à la configuration de ces services.
Configuration de DRBD
Préparation du système
Il nous faut maintenant choisir quelle partition sera dupliquée sur les 2 machines. Dans notre exemple, nous ferons le mirroring de la partition /home. Avant de commencer, vérifiez l'existence de la partition dans /etc/fstab afin d'identifier le volume correspondant à /home.
# cat /etc/fstab# perl Makefile.pl affichage tronqué # /dev/hda6 /home /ext3 defaults affichage tronqué
Le volume correspondant à /home est donc /dev/hda6. Nous en aurons besoin plus tard. Il nous faut maintenant démonter cette partition et vérifier qu'elle est bien démontée.
# umount /home # mount
Drbd.conf
Il existe 2 méthodes pour configurer DRBD. Directement en ligne de commande, ou par l'intermédiaire d'un fichier de configuration. Nous utiliserons ici la 2ème méthode. Commencez par créez le fichier /etc/drbd.conf si celui-ci n'existe pas encore. Voici le contenu du fichier de configuration de drbd utilisé dans notre exemple.
# déclaration du cluster
resource drbd {
# protocole utilisé (voir plus bas)
protocol C;
# vitesse de transfert des données
syncer {
rate 100M;
group 1;
}
on Serv-maître {
# peripherique drbd
device /dev/drbd0;
#volume à synchroniser
disk /dev/hda6;
# adresse ip du noeud et port
address 192.168.0.2:7788;
# emplacement des méta-données
meta-disk internal;
}
# même procédure
on Serv-Esclave {
device /dev/drbd0;
disk /dev/hda6;
address 192.168.0.3:7788;
meta-disk internal;
}
}
Nous utilisons ici le protocole C pour assurer une haute disponibilité maximale. Pour rappel, DRBD permet d'effectuer la transmission des données selon 3 protocoles. Reportez vous à la section principe pour plus d'informations concernant ces 3 protocoles. Remarque : le fichier de configuration doit être identique sur les 2 noeuds.
Synchronisation des noeuds
Nous allons maintenant définir Serv-maître comme étant le noeud maître de notre cluster. Ceci s'effectue avec la commande suivante :
# drbdadm primary all
drbd0: Creating state block
drbd0: resync bitmap: bits=943172 words=29476
drbd0: size = 3684 MB (3772688 KB)
drbd0: Assuming that all blocks are out of sync
drbd0: 3772688 KB now marked out-of-sync by on disk bit-map.
drbd0: drbdsetup 10872: cstate Unconfigured --> StandAlone
La synchronisation débute. Pour suivre l'évolution de la synchronisation vous pouvez utiliser la commande suivante.
# watch -n 5 cat /proc/drbd
L'état de la synchronisation sera affiché toutes les 5 secondes. Une fois la synchronisation terminée, le noeud primaire doit apparaître comme Primary et Consistent. Il faut ensuite formater le périphérique drbd puis le monter.
# mke2fs -j /dev/drbd0 # mount /dev/drbd0 /home
Remarque : dans le cas où l'on voudrait accéder aux données à partir du serveur secondaire, la partition dupliquée doit avant tout être démontée et le serveur primaire passé à l'état secondaire. Nous verrons par la suite comment automatiser cette procédure avec Heartbeat.
Configuration de Heartbeat
Heatbeat agit comme init pour lancer et arrêter les services. Par défaut, les fichiers de configuration de Heartbeat n'existent pas, il faut les créer dans le dossier /etc/ha.d et sont au nombre de 3 et doivent être identiques sur les 2 serveurs.
- Ha.cf : Configuration générale.
- Haresources : les ressources que Heartbeat devra gérer.
- Auth.keys : méthode d'encryption utilisée pour la communication.
Ha.cf
Ce fichier définit les paramètres généraux de Heartbeat.
# Emplacement des messages de debug debugfile /var/log/ha-debug # Autres messages logfile /var/log/ha-log # Nombre de secondes entre chaque battements keepalive 2 # Temps avant qu'un noeud soit declare mort deadtime 10 # Port utilise pour la communication en UDP udpport 694 # Interface utilisée bcast eth0 # Récuperation automatique des ressources si les 2 serveurs # sont à nouveau opérationnels auto_failback on # Les noeuds de notre cluster node Serv-maître node Serv-Esclave
Haresources
Ce fichier définit les services dont heartbeat devra gérer les ressources. Ainsi dans notre exemple, nous aurions :
Serv-Esclave 192.168.0.4 apache2 mysql
Pour que heartbeat sache qu'il travaille sur un environnement mirroré avec DRBD, nous devons le lui indiquer dans le fichier haresources afin qu'en cas de panne, le serveur secondaire devienne primaire et puisse monter le volume drbd. Notre fichier devient donc :
Serv-Esclave 192.168.0.4 Filesystem::/dev/drbd0::/home::ext3 apache2 mysql
L'ajout de Filesystem::/dev/drbd0::/home::ext3 précise à Heartbeat où est située la partition DRBD, où la monter et quel est son système de fichier.
Authkeys
Ce fichier permet de sécuriser les échanges entre les 2 machines. Il définit la méthode d'encryption utilisée. Trois modes d'authentification sont disponibles :
- crc
- md5
- sha1
# auth identifiant auth 1 # identifiant méthode utilisée 1 crc
Dans notre exemple, une authentification crc est suffisante du fait d'une liaison dédiée. Veillez à appliquer les permissions adéquates sur ce fichier de sorte que seul l'utilisateur root puisse y accéder (un mask de 0600 est fortement recommandé). Il ne reste plus qu'à démarrer Heartbeat avec la commande suivante :
/etc/init.d/heartbeat start
Configuration de Mon
Script de démarrage
Nous allons maintenant voir comment configurer la surveillance des services sur les serveurs avec Mon. Tout d'abord, nous allons avoir besoin d'un script permettant à Mon de gérer l'état de Heartbeat, permettant ainsi un passage des ressources en cas de non réponse d'un service. Le dossier mon.alert contient un ensemble de scripts permettant à Mon de générer des alertes en cas de défaillance des services.
Créez le fichier ha-up-down.alert dans /etc/ha.d/mon/mon.alert.
#!/bin/bash
# arrêt/démarrage du service heartbeat
HEARTBEAT="/etc/rc.d/init.d/heartbeat"
if [ "$9" = "-u" ]; then
$HEARTBEAT start
else
$HEARTBEAT stop
Fi
# envoi d'un mail aux administrateurs (argument passé par mon.cf)
/etc/ha.d/mon/alert.d/mail.alert $*
Mon.cf
Ensuite, créez le fichier mon.cf dans /etc/ha.d/mon. Ce fichier contient la liste des services que "mon" doit surveiller et les actions résultantes de divers évènements. L'exemple suivant montre comment surveiller l'état d'un serveur http et basculer les ressources en cas de non réponse.
# emplacement des fichiers de configuration/d'alerte/logs
cfbasedir = /etc/ha.d/mon/etc
alertdir = /etc/ha.d/mon/alert.d
mondir = /etc/ha.d/mon/mon.d
statedir = /etc/ha.d/mon/state.d
logdir = /var/log/
# type d'authentification
authtype = getpwnam
# le serveur à surveiller
hostgroup server 127.0.0.1
# les services à surveiller sur le serveur
watch server
service http
interval 30s
monitor http.monitor
period wd {Mon-Sun}
# les actions en cas de panne/retour à la normale
alert ha-up-down.alert -S "service httpd down !" \
administrateur@domaine.com
upalert mail.alert -S "service httpd up !" \
administrateur@domaine.com
# délai entre chaque alerte
alertevery 600s
Vérification du fonctionnement du cluster
Enfin, démarrez "mon" avec la commande suivante :
/etc/ha.d/mon/mon
Remarque : Il s'agit ici d'un test. Il est bien entendu possible et recommandé de spécifier d'autres scripts à la place de celui que nous avons créé. Le passage des ressources étant la méthode la plus radicale, un rechargement ou un redémarrage du/des service(s) posant problème peut s'avérer approprié avant d'effectuer une bascule.
Notre infrastructure haute disponibilité est maintenant prête. Pour tester celle-ci, il nous suffira de débrancher le câble réseau reliant les 2 serveurs ou bien d'éteindre le serveur primaire. Au bout de quelques secondes, le fichier ha.log du serveur secondaire affichera des alertes et la prise de relais s'effectuera.
# tail -f /var/log/ha.log affichage tronqué heartbeat: ... WARN: node master: is dead heartbeat: ... info: Link master:eth0 dead. heartbeat: ... info: Running /etc/ha.d/rc.d/status status heartbeat: ... info: Running /etc/ha.d/rc.d/ifstat ifstat heartbeat: ... info: Running /etc/ha.d/rc.d/ifstat ifstat heartbeat: ... info: Taking over resource group 172.17.10.30 heartbeat: ... info: Acquiring resource group: master 192.168.0.2 apache2 mon affichage tronqué
Le même test peut être effectué en arrêtant le serveur web Apache.
Ce tutorial est inspiré du tutorial « Mise en place d'une solution haute disponibilité sous Linux » disponible à l'adresse suivante : http://www.supinfo-projects.com/fr/2006/ha%5Ffr/