Cluster High Availability linux avec HeartBeat
Le mot clustering fait peur à ceux qui veulent s’y lancer, pourtant ce n’est pas sorcier ! Le clustering permet de faire en sorte qu’en cas de crash serveur votre service (Par exemple Web puisse continuer à fonctionner sans que l’utilisateur de puisse s’en apercevoir. Evidement ce billet attaque la base du clustering, je ne vais pas vous informer que les fichiers ne se répliquent pas par magie. Evidement vous pouvez scripter une réplication de fichiers en temps réel ou alors utiliser un SAN (Stockage Area Network).

Le fonctionnement est très simple, une IP virtuelle est ajoutée à l’interface réseau de votre serveur qui est en cours de production, heartbeat échange un « battement de coeur » entre les deux machines, lorsque le serveur primaire rencontre une avarie (Crash système, câble réseau défaillant, je vous laisse imaginer la suite …) heartbeat bascule alors l’adresse IP virtuelle sur le serveur secondaire et démarre les services demandés, rien de mieux que l’illustration de gauche.
Lorsque le serveur primaire répond à nouveau au battement de coeur vous pouvez configurer heartbeat à re-basculer sur le serveur primaire automatiquement (auto failback) ou bien laisser le secondaire travailler et exécuter une bascule manuelle (manual failback)
Cette solution reste relativement fiable pour un petit cluster (vous pouvez donc mettre en cluster FailOver un serveur Web, MySql, Samba, etc …)
1. Matériel
Pour réaliser il vous faut :
- 2 Machines (OS Linux évidement)
- 1 Cordon Null-modem (Serial RS232)
- 15 minutes
2. Paquet nécessaire
Vous devez installer le paquet heartbeat-2 avec votre gestionnaire de paquets préféré (ou pour les plus perfectionnistes le compiler ^^) :
# aptitude install heartbeat-2
3. Liaison entre les deux serveurs
Vous devez relier vos deux serveurs via un câble série afin qu’ils puissent échanger le battement de coeur (sans celui-ci vous risqueriez de rencontre quelques soucis de failback).
une fois le câble lié au deux serveurs, exécutez un test de connexion entre les deux serveurs (Cf. Test de connexion série entre deux machines linux )
4. Configuration des fichiers heartbeat
Heartbeat utilise 3 fichiers : /etc/ha.d/ha.cf, /etc/ha.d/haresources, /etc/ha.d/authkeys.
[table "1" not found /]Fichier ha.cf :
debugfile /var/log/debug-ha.log logfile /var/log/ha.log logfacility local0 node NOVA05 NOVA06 keepalive 1 deadtime 10 warntime 2 ping 192.148.10.254 bcast eth0 auto_failback off respawn hacluster /usr/lib/heartbeat/ipfail serial /dev/ttyS0 baud 19200[table "2" not found /]
Fichier haresources
Dans le fichier haresources il faut spécifier le nom du noeud primaire ainsi que le service à lancer lorsque que le serveur a la main :
primaire apache2
Vous pouvez spécifier aussi d’autres options (après le nom du noeud primaire) telles que :
[table "3" not found /]Fichier authkeys
Ce fichier est la clé de sécurité entre les noeud du cluser, il est composé de deux lignes :
auth 1 1 sha1 b9b2df1d6132c05b80e934abffcda396
Il y a plusieurs modes d’autentification : sha1, md5, crc
La première ligne indique le numéro authentification à utiliser, la deuxième est une méthode d’authentification (numéro type clef)
Appliquez les droits 600 sur ce fichier sinon heartbeat refusera de se lancer. !
Les fichiers de configuration doivent être srictement les même sur tous les serveurs de votre cluster
5. Désactivation du lancement automatique du service
Vous devez impérativement dégager le lancement automatique du service que vous voulez mettre en cluster, c’est heartbeat qui doit couper le service (si le serveur n’est pas en feu^^) sur le primaire et le lancer sur le secondaire.
exemple sous debian :
# update-rc.d -f apache2 remove
6. Lancement du service heartbeat :
Exécutez cette ligne de commande sur les noeurs un par un :
# /etc/init.d/heartbeat start
7. Commandes supplémentaires
Faire prendre la main à un noeud du cluster :
# /usr/lib/heartbeat/hb_takeover
Faire lâcher la main à un noeur du cluster :
# /usr/lib/heartbeat/hb_standby
Voilà, vous êtes paré(e) à monter un clustering HA sur Linux 😉
debugfile /var/log/debug-ha.log
logfile /var/log/ha.log
logfacility local0
node NOVA05 NOVA06
keepalive 1
deadtime 10
warntime 2
ping 192.148.10.254
bcast eth0
auto_failback off
respawn hacluster /usr/lib/heartbeat/ipfail
serial /dev/ttyS0
baud 19200
Merci pour cette explication de heartbeat.
Ton explication est donc dans le cas d’un cluster actif-passif.
Dans le cas où on souhaite utiliser un cluster actif/actif (répartition des services sur ces 2 machines), heartbeath peut-il couvrir ce cas et si oui, as-tu un retour d’expérience à nous offrir?
Bonjour bruno, en effet dans le cas de cette explication il s’agit d’un Cluster FailOver (nommé aussi HA).
Je n’ai pas testé le système du load balancing, mais je sais qu’il faut coupler heartbeat à un autre logiciel tel que ldirector.
Lorsque j’aurais testé cette solution de répartition de charge je posterai un billet 😉