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).

Architecture de cluster simplifiée

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