Introduction:
Cet article est une présentation rapide de l'utilisation du logiciel heartbeat couplé avec rsync.
Heartbeat est distribué sous licence GPL et fonctionne sous les systèmes GNU/Linux, *BSD, Solaris et MacOS X.
Il permet de mettre en place une solution de haute disponibilité.
Rsync, quant à lui, nous servira à répliquer les données entre les différents noeuds. Il est également publié sous licence GPL.
Principes et architecture:
Heartbeat se sert de battements de pouls pour connaître l'état du cluster et prendre les décisions adéquates.
Ces battements peuvent être pris de différentes manières physiques (port série, ethernet) et logiques (ping, UDP...).
Rsync permet de synchroniser des données en utilisant l'incrémentation. Ce qui évitera de rapatrier systématiquement
toutes les données entre les deux noeuds.
L'installation se déroulera sous l'environnement Debian GNU/Linux. Voici donc un schéma récapitulatif de ce qui sera mis en place:
Installation et configuration:
Sur le premier serveur, nous commencerons par un simple:
apt-get install heartbeat.
Après, nous irons créer le fichier
ha.cf dans le répertoire
/etc/heartbeat/ avec les lignes suivantes:
Options |
Valeurs |
Commentaire |
bcast |
eth0 |
#Interface utilisée pour la prise du pouls. |
| | |
debugfile |
/var/log/ha-debug |
#Fichier de logs pour le debugage. |
logfile |
/var/log/ha-log |
#Fichier de logs standard. |
logfacility |
local0 |
#Utilisation du syslog. |
| | |
keepalive |
2 |
#Délai entre deux battements de pouls en sec. (rajouter «ms» si millisecondes). |
deadtime |
10 |
#Délai pour considérer qu'un noeud est mort en secondes. |
warntime |
6 |
#Délai avant d'envoyer un avertissement pour les pouls en retard en secondes. |
#initdead |
60 |
#Temporisation (pour les noeuds lents) en sec (deux fois plus grand que deadtime minimum). |
| | |
udpport |
694 |
#Port UDP utilisé pour la prise de pouls. |
node |
serveur1 |
#Le premier noeud du cluster |
node |
serveur2 |
#Le second noeud du cluster |
| | |
auto_failback |
off |
#Stratégie lors du retour du noeud maître ("on" on retourne sur le maître, "off" on reste sur la machine actuelle). |
Ensuite, dans
/etc/heartbeat/, il faut créer et éditer le fichier
haresources comme il suit:
serveur1 IPaddr::192.168.252.205
Cela signifie que le noeud "serveur1" est le noeud maître du cluster et que l'adresse IP du cluster est: 192.168.252.205.
Dans
/etc/heartbeat/, nous devons créer avec les droits 600 le fichier
authkeys.
Puis éditer ce dernier en nous aidant des données suivantes:
auth |
1 |
#L'authentification numéro 1 sera utilisée. |
1 |
crc |
#Aucune authentification, juste un contrôle d'erreur. |
2 |
md5 "password" |
#Authentification en utilisant md5 avec la clef "password". |
3 |
sha "password" |
#Authentification en utilisant sha avec la clef "password". |
Les différentes possibilités d'authentification ont été rangées dans l'ordre de la moins à la plus sécurisées.
(Nous pouvons donc bien sûr changer le niveau de chiffrement en mettant
3 à la première ligne pour utiliser l'algorithme SHA1)
Voilà donc pour la configuration du premier serveur. Pour le second, il suffit de mettre
exactement les mêmes fichiers.
Enfin, il faut bien sûr que chaque noeud puisse résoudre le nom de son camarade.
Pour cela deux solutions: utiliser un serveur DNS ou inscrire directement dans le fichier hosts les correspondances.
La dernière solution est préférable, car elle nous protège d'une éventuelle perte du service DNS.
Mise en place:
Nous commencerons pour lancer heartbeat sur le noeud maître du cluster, à l'aide de la commande:
/etc/init.d/heartbeat start
Et nous ferons de même sur l'autre noeud du cluster.
Dans le cas d'une extinction ou d'une maintenance, il faut procéder dans l'autre sens et éteindre en dernier le noeud maître.
Effectuer des tests:
Une fois tout ceci installé et lancé, il est intéressant de procéder à des tests de réactions, en faisant tomber le noeud actif.
Ainsi, nous vérifierons le bon basculement des services sur le nouveau noeud actif.
Nous pourrons remarquer plusieurs étapes lors du basculement qui sont:
-Le démontage de l'interface réseau virtuelle du noeud tombé (si il est toujours allumé bien sûr).
-Le montage de l'interface réseau virtuelle du noeud activé.
-La diffusion du spoof ARP forcé par le nouveau noeud.
-Le cache ARP des clients mis à jour.
Les trois premières étapes sont loguées dans les fichiers définis précédemment (dans notre exemple: /var/logs/ha-log).
Le test peut-être fait avec un service Web, SSH ou tout autre, tant qu'il est installé sur les deux noeuds.
Si le temps de réaction pour le basculement ne nous convient pas,
il suffira de changer les paramètres dans le fichier /etc/heartbeat/ha.cf.
Configuration plus avancée:
Le fichier
/etc/heartbeat/haresources permet de régler des comportements plus avancés au cluster.
![fleche](default/images/fleche.png)
Tout d'abord nous pouvons très facilement spécifier plusieurs adresses IP au cluster,
préciser le masque du réseau ou encore l'interface utilisée:
serveur1 IPaddr::192.168.252.205 IPaddr::192.168.252.206/24/eth0
![fleche](default/images/fleche.png)
Ensuite, on peut procéder tout aussi facilement à l'execution ou à
la fermeture des services redondés:
serveur1 IPaddr::192.168.252.205 ssh webmin
Ce fichier de configuration, par exemple, indique à Heartbeat de lancer SSH et Webmin sur le nouveau noeud actif et
de couper ces services sur le noeud tombé. Les scripts indiqués sont recherché dans les dossiers
/etc/hearteat/resource.d/
puis dans
/etc/init.d. Ces scripts doivent avoir la faculté de répondre aux options:
start stop et status.
Synchronisation des données:
Pour la synchronisation des données entre les noeuds, nous pouvons utiliser de nombreuses solutions comme:
-RAID 1 sur IP
-rsync
-Utilisation d'un espace partagé (FTP, NFS, SAN...)
Dans notre exemple, nous utiliserons rsync pour sa simplicité et le coût de sa mise en place.
Sur le noeud maître:
Tout d'abord, nous devrons installer Rsync:
apt-get install rsync
Dans le dossier /etc/default/, il faut modifier une ligne du fichier rsync pour l'autoriser à se lancer:
RSYNC_ENABLE=FALSE en RSYNC_ENABLE=TRUE
Ensuite, nous devrons créer le fichier /etc/rsyncd.conf avec l'aide des lignes suivantes:
Options |
|
Valeurs |
Commentaire |
pid file |
= |
/var/run/rsyncd/pid |
|
lock file |
= |
/var/run/rsyncd.lock |
|
use chroot |
= |
yes |
#Pour chrooter le client dans le répertoire désiré. |
hosts allow |
= |
IP ou nom FQDN |
#Pour spécifié un(des) hôte(s) autorisé(s) à se connecter. |
uid |
= |
user |
#Utilisateur accepté. |
gid |
= |
user |
#Groupe de l'utilisateur accepté. |
| | |
[Nom du partage] |
|
|
#Définition d'un partage à la "Samba". |
path |
= |
/mnt/partage |
#Chemin vers l'espace de stockage à synchroniser. |
comment |
= |
Dossier de partage |
#Commentaire |
read only |
= |
yes |
#Dans notre cas, lecture seulement puisque l'on veut juste rapatrier les données. |
list |
= |
yes |
#Autorisation de lister les contenus. |
Sur le noeud secondaire:
Après avoir installé rsync (
apt-get install rsync), il suffit de lancer la commande suivante pour synchroniser le répertoire:
rsync -crtop rsync://ipduserveur/partage/ /destinationlocale/
Ensuite rien ne nous vous empêche de rajouter cette commande dans la crontab !
Pour aller plus loin:
Nous voila donc avec un petit cluster tout simple possédant deux noeuds. Heartbeat permet cependant d'aller beaucoup plus loin et l'utilisation avec une technique de réplication comme du RAID sur IP permettrait de travailler sur des bases plus solides.
Comme d'habitude, je vous invite à découvrir les différents manuels.
Le site officiel de HeartBeat |
(US) |
: |
ici |
Le site officiel de Rsync |
(US) |
: |
ici |
sur ce sujet.