You are on page 1of 13

Mise en place d'une solution haute disponibilité sous Linux

Joël CHEVALLIER
Elève-Ingénieur Supinfo Paris
Promotion SUPINFO 2008

Table of Contents
ntroduction............................................................................................................................................2
1 Installation des logiciels HA.............................................................................................................3
1.1 Pré-requis...................................................................................................................................3
1.2 Installation de DRBD.................................................................................................................3
1.3 Installation de Heartbeat............................................................................................................4
1.4 Installation de Mon...................................................................................................................6
2 Configuration de DRBD....................................................................................................................7
2.1 Préparation du système..............................................................................................................7
2.2 Drbd.conf...................................................................................................................................7
2.3 Synchronisation des noeuds.......................................................................................................8
3 Configuration de Heartbeat...............................................................................................................9
3.1 ha.cf.........................................................................................................................................9
3.2. haresources ............................................................................................................................9
3.3. authkeys..................................................................................................................................10
4 Configuration de Mon......................................................................................................................11
4.1 Script de démarrage.................................................................................................................11
4.2 Mon.cf......................................................................................................................................11
4.3 Tests.........................................................................................................................................12
Conclusion..........................................................................................................................................13
ntroduction
Assurer la haute disponibilité d’un service et des données est aujourd’hui devenu le principal souci
des DSI dans le monde de l’entreprise. Actuellement, plusieurs solutions sont disponibles.
- L’équipement SAN (Storage area network) très coûteux et dont la maintenance s’avère très
fastidieuse en cas de panne.
- La synchronisation régulière (type rsync) entre les serveurs. Inconvénient : en cas de crash les
données récupérées dateront de la dernière synchronisation.

Le projet Linux High Availability a été développé dans le but de fournir une solution aux
problèmes rencontrés précédemment. Cette solution répond à plusieurs impératifs : faible coût,
facilité de maintenance et données parfaitement à jour en cas de bascule serveur.

A travers cet article, nous allons voir comment installer et configurer simplement une telle solution.
1 Installation des logiciels HA
1.1 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 DEB. Par ailleurs, la commande apt-get nous permettra une installation simplifiée de
tous les programmes nécessaires à la mise en place de cette solution. Par soucis de commodité nous
emploierons le terme HA (High Availability) dans la suite de l’article.

Voici un récapitulatif du matériel et des logiciels utilisés pour notre infrastrucure HA:
Matériel :
- 2 machines aux performances comparables mais pas forcément identiques munies de 2 cartes
réseaux chacune (1x100baseT + 1x1000baseT).

Système:
- Linux Debian Sarge basée sur un kernel 2.4.

Logiciels:
- DRBD v0.7
- Heartbeat v1.2
- Mon v0.99

Remarques:
- La 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’installation avec apt-get
(sauf pour mon qui n’est pas dans l’arbre de packages de Debian et doit donc être installé
manuellement).

Avant toutes choses, mettez à jour votre liste de packages afin d’être sûr de récupérer la dernière
version stable des logiciels.

# apt-get update

1.2 Installation de DRBD

DRBD permet de faire du RAID 1 (réplication ou mirroring de disque) 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.

Remarques :
- il est bien entendu indispensable que votre machine dispose d’un accès à internet.
- La procédure suivante est à réaliser sur les 2 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.

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 verifier que le module est bien chargé.

# lsmod | grep drbd

drbd 144992 0

1.3 Installation de Heartbeat


Heartbeat est situé au cœur du processus de fonctionnement d’une solution de haute disponibilité. Il constitue le lien
permettant aux 2 serveurs de se prendre mutuellement le pouls.
Etat normal du cluster

Lorsque l’un des deux serveurs cesse de répondre, le second prend immédiatement le relais et ce, de façon totalement
transparente pour l’utilisateur grâce à un système d’IP flottante. C’est le principe d’un cluster.

Heartbeat va nous permettre de former un cluster à partir des 2 machines. Chaque machine est appelée nœud 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.

# apt-get install heartbeat

Heartbeat s’installe en tant que service. Vous obtiendez 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é plus loin dans l’article.

1.4 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 à effectuer sur le serveur primaire et le secondaire.

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 habituel pour récupérer ces
modules où utiliser la liste de liens ci-dessous.
• Time::Period
• Time::HiRes
• Convert::BER
• Mon::*

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.
2 Configuration de DRBD
2.1 Préparation du système

Il nous faut maintenant choisir quelle partition sera mirrorée sur les 2 machines. Dans notre exemple, nous ferons le
mirroring de /home.
Avant de commencer, vérifiez l’existence de la partition dans /etc/fstab afin d’identifier le volume correspondant à
/home.

# cat /etc/fstab
-- 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

2.2 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. Par soucis de commodité nous utiliserons la 2ème méthode.
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 B;

# vitesse de transfert des données


syncer {
rate 100M;
group 1;
}
on sigma {

# 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 kappa {
device /dev/drbd0;
disk /dev/hda6;
address 192.168.0.3:7788;
meta-disk internal;
}
}

Il existe 3 protocoles :
• A : l’écriture est terminée lorsque les données sont inscrites sur le disque local et envoyées sur le
réseau.
• B : l’écriture est terminée lorsque les données sont inscrites sur le disque local et l’accusé de réception
de l’hôte distant est reçu.
• C : l’écriture est terminée lorsque les données sont inscrites sur le disque local et la confirmation
d’écriture sur le disque distant est réceptionnée.

Le protocole C est donc le plus sûr parmi les 3 mais aussi le plus lent. Dans notre cas, nous utilisons une liaison gigabit
dédiée entre les 2 serveurs, le protocole B est donc amplement suffisant.

Remarque : le fichier de configuration doit être identique sur les 2 nœuds.

2.3 Synchronisation des noeuds

Nous allons maintenant définir kappa comme étant le nœud primaire de notre cluster. Ceci s’effectue avec la
commande drbdadm.

# 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 nœud 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 mirroré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.
3 Configuration de Heartbeat
Heatbeat agit comme init pour lancer et arrêter les services.

Nous avons relevé à la fin de l’installation de Heartbeat une erreur. 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

3.1 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 resources si les 2 serveurs


# sont à nouveau opérationnels
auto_failback on

# Les noeuds de notre cluster


node sigma
node kappa

3.2. haresources

Ce fichier définit les services dont heartbeat devra gérer les ressources.
Le contenu de ce fichier est de la forme
Ainsi dans notre exemple, nous aurions :

sigma 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 :

sigma 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.
3.3. 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
umask de 0600 est fortement recommandé).

Il ne reste plus qu’à démarrer Heartbeat avec la commande

/etc/init.d/heartbeat start
4 Configuration de Mon
4.1 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 $*

4.2 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
4.3 Tests

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ée. 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 relai 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.


Conclusion
Le trio DRBD - Heartbeat – Mon est parfait pour assurer la redondance de deux machines physiquement proches.
Assurant à la fois la surveillance des défaillances des systèmes mais aussi celle des services, cette solution met un
terme au problème de redondance et d’interruption de service.

Cette technique est déjà utilisée depuis longtemps dans les grandes entreprises, chez les hébergeurs et autres
prestataires. La haute disponibilité est devenue un standard incontournable pour toute entreprise désirant faire face à
la concurrence.

Le projet Open source HA est en constante évolution depuis son lancement en 1999 et la limitation initiale des 2
nœuds est désormais révolue. Une entreprise aux revenus limités ne désirant pas investir dans un SAN coûteux et à la
maintenance ardue peut maintenant disposer d’une solution complète, fiable, facile à administrer et totalement libre.

Sources :
http://www.linux-ha.org/
http://www.crium.univ-metz.fr/
http://www.regit.org/
http://wiki.ubuntu-fr.org/

You might also like