Un cluster DRBD / Apache avec Heartbeat sur Debian 7
C’est quoi Heartbeat?
Heartbeat est un logiciel de surveillance de la disponibilité des programmes, pour les systèmes d’exploitation Linux, FreeBSD, OpenBSD, Solaris et MacOS X. Il est distribué sous licence GPL.
Heartbeat écoute les battements de cœur – des signaux émis par les services d’une grappe de serveurs lorsqu’ils sont opérationnels. Lorsque qu’un serveur devient défaillant, Heartbeat le detecte (puisqu’il n’entend plus ses battements de coeurs) et bascule les services surveillés sur un autre serveur. Pour que cela soit transparent pour les utilisateurs, Heartbeat met en place une IP virtuelle unique qui est balancée entre les deux serveurs.
Voici ce que nous allons mettre en place
Mise en place de la solution
Pour ce tuto, nous allons partir du Cluster DRBD que nous avons mis en place dans le tutoriel précédent:
Voici les machines que nous allons utiliser
Machine 1:
- Hostname: node1
- Adresse IP: 192.168.2.55
Machine 2 :
- Hostname: node2
- Adresse IP: 192.168.2.56
Et il faut donc que DRBD soit déja fonctionnel entre les deux serveurs.
Par contre, nous allons modifier le fichier de configuration de DRBD sur les deux serveurs.
Dans mon tutoriel précédent nous avions le fichier « /etc/drbd.d/drbd1.res
» avec le contenu suivant:
resource r0 { # Taux de transfert # 10M pour du 100mbits # 100M pour du 1Gbits syncer { rate 10M; } on node1 { device /dev/drbd0; disk /dev/sdb1; address 192.168.10.128:7788; meta-disk internal; } on node2 { device /dev/drbd0; disk /dev/sdb1; address 192.168.10.129:7788; meta-disk internal; } }
Nous allons rajouter deux options intéressantes pour améliorer le cluster, voici le nouveau fichier.
resource r0 { startup { wfc-timeout 30; degr-wfc-timeout 15; } disk { on-io-error detach; } # Taux de transfert # 10M pour du 100mbits # 100M pour du 1Gbits syncer { rate 100M; } on node1 { device /dev/drbd0; disk /dev/sdb1; address 192.168.2.55:7788; meta-disk internal; } on node2 { device /dev/drbd0; disk /dev/sdb1; address 192.168.2.56:7788; meta-disk internal; } }
PS: C’est normal que les IP ont changées, ne pas en prendre compte.
ATTENTION: Ne pas oublier de modifier ce fichier sur les deux serveurs DRBD.
Si votre partition /dev/drbd0
est montée démontez la avant de continuer ce tutoriel. Si vous avec aussi configurer le montage automatique de cettepartition dans fstab supprimez cette ligne. HeartBeat va gérer le montage de la partition drbd.
Donc maintenant que tout est OK et que DRBD est bien fonctionnel sur les deux serveurs on va pouvoir installer Heartbeat.
Installation et configuration de Heartbeat
ATTENTION: Toutes les prochaines étapes sont à faire sur les deux serveurs !
HeartBeat s’installe simplement avec la commande:
apt-get install heartbeat
Une fois heartbeat installer nous allons devoir créer trois fichiers dans le dossier « /etc/ha.d/
»
– ha.cf : Pour la configuration générale de HeartBeat
– haresources : Pour la configuration des ressources
– authkeys : Pour la clef partagée entre les serveurs du cluster
Voici le contenu du fichier ha.cf
mcast eth0 239.0.0.10 694 1 0 warntime 4 deadtime 5 initdead 15 keepalive 2 #Re-balance les services sur le node primaire quqnd il revient en ligne auto_failback on #Serveurs du cluster node node1 node node2
Attention Pour que tout fonctionne bien il faut s’assurer que vous puissiez ping node2
depuis node1
et vice-versa.
Nous allons maintenant créer le contenu du fichier haresources
node1 IPaddr::192.168.2.57/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/mnt::ext4
Explications:
node1 = noeud primaire du cluster
IPaddr::192.168.2.57/24/eth0 = Adresse IP balancée du cluster sur eth0
drbddisk::r0 = nom de la ressource drbd (spécifé dans /etc/drbd.d/drbd1.res)
Filesystem::/dev/drbd0::/mnt::ext4 = Nom de la partition drbd, point de montage et type de système de fichier.
Et pour finir nous allons créer le fichier « authkeys
». Ce fichier contient un clef partagé entre les deux serveurs. Cela peut être un mot de passe, ou un simple mot.
Voici le mien:
auth 3 3 md5 my-auth-key
Ce fichier la doit avoir les permissions « 600
». Donc sur les deux serveurs tapez:
chmod 600 /etc/ha.d/authkeys
Et voilà tout est bon maintenant 🙂
Sur node1 démarrez Heartbeat avec la commande suivante:
/etc/init.d/heartbeat start
Patientez quelques seconde et faites sur node1 la commande « drbd-overview
» et vérifiez si la parition /dev/drbd0
est bien montée dans /mnt/
.
Vous pouvez aussi vérifier avec la commande ifconfig, vous verrez qu’une nouvelle interface « eth0:0 » a été créer avec l’adresse IP configuré dans le fichier haresources.
Maintenant sur node2 démarrez aussi heartbeat avec la commande:
/etc/init.d/heartbeat start
Et voila votre cluster DRBD est opérationnel.
Comment le tester?
Connectez vous si ce n’est pas déja fait en SSH sur les deux nodes.
Sur node2 tapez la commande suivante pour vérifier l’état de drbd en temps réel:
watch drbd-overview
Actuellent depuis node2 vous devriez voir cette ligne:
0:r0 Connected Secondary/Primary UpToDate/UpToDate C r-----
Cette ligne nous montre bien que node2 est secondary et que la partition drbd n’est pas montée
Maintenant sur node1 on arrête Heartbeat avec la commande suivante:
/etc/init.d/heartbeat stop
Basculez tout de suite sur node2 et voyez que la ligne va devenir:
0:r0 Connected Primary/Secondary UpToDate/UpToDate C r----- /mnt ext4 7.9G 146M 7.4G 2%
Cela nous montre bien que node2 est devenu primaire et que la parition drbd est bien monté. Vous pouvez aussi vérifier que l’ip de balancement est bien présente sur node2.
Maintenant on remet node1 en primaire en redémarrant Heartbeat avec la commande:
/etc/init.d/heartbeat start
Maintenant que notre cluster drbd est actif on va installer apache pour mettre en place un site hautement disponible.
Installation d’apache
On commence par installer Apache et PHP5 sur les deux nodes avec la commande:
apt-get install apache2 php5
Après l’installation d’Apache, nous allons désactiver sur les deux nodes le démarrage automatique du service au lancement de la machine parce que c’est Heartbeat qui va gérer le lancement d’Apache.
Sur les deux nodes lancez donc la commande:
insserv -r apache2
Et arrêtez Apache sur node2 avec la commande:
/etc/init.d/apache2 stop
Sur le node1 nous allons créer dans /mnt/
un dossier « www
» pour stocker les pages web. Dans ce dossier nous allons créer une page Web par défaut pour vérifier que le balancement fonctionne.
Donc dans « /mnt/www/
» créez un fichier index.php
avec le contenu suivant:
<?php echo "Un coucou de ".gethostname()."n" ?>
Nous allons faire en sorte que le dossier des pages par défaut d’Apache soit /mnt/www au lieu de /var/www.
Comme je suis un feignant, je vais créer un lien symbolique de « /var/www
» vers « /mnt/www/
»
Sur les deux nodes faites les commandes suivantes:
rm -rvf /var/www/ ln -s /mnt/www/ /var/
Vous pouvez vérifier que le lien est fonctionnel avec la commande:
ls -la /var/www
Vous devriez voir cette ligne:
lrwxrwxrwx 1 root root 9 Dec 22 11:05 /var/www -> /mnt/www/
Maintenant nous allons configurer Heartbeat pour qu’il gère le démarrage automatique d’Apache.
Sur les deux nodes editez le fichier « /etc/ha.d/haresources
» et rajoutez simplement apache2
à la fin de la ligne.
Vos fichiers /etc/ha.d/haresources
devraient ressembler à ceci:
node1 IPaddr::192.168.2.57/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/mnt::ext4 apache2
Rechargez le fichier de configuration Heartbeat sur les deux nodes avec la commande:
/etc/init.d/heartbeat reload
Nous allons vérifier si le balancement fonctionne bien.
Ouvrez un navigateur internet et connectez-vous à l’adresse IP balancé de votre Cluster DRBD/Apache.
Pour ma part l’ip est 192.168.2.57.
Vous devriez voir une page avec le texte suivant: « Un coucou de node1″ si bien sur node 1 est le node actif.
Si vous voyez bien cela arrêtez HeartBeat sur le node1, patientez quelques secondes et rechargez la page web. Maintenant le texte affiché devrait être « Un coucou de node2″.
Cool non? La page index.php
qui nous avons mis dans « /mnt/www/
» nous affiche le hostname
de la machine. Nous voyons donc bien que le balancement se fait bien entre les deux nodes de notre Cluster DRBD/Apache.
Pour finir relancez Heartbeat sur node1. Rechargez la page web et le texte « Un coucou de node1″ apparait de nouveau.
Sur node2 vous pouvez voir avec la commande « /etc/init.d/apache2 status
» que le service Apache n’est pas démarré. Heartbeat démarre et arrète automatiquement le service Apache.
Source: denisrosenkranz.com