«

»

Déc 22 2013

[Tuto] HA: Un cluster DRBD/Apache avec Heartbeat sur Debian 7

Bonjour à tous !

Vous souvenez-vous de mon tutoriel sur DRBD? Dans le prolongement de ce tutoriel, nous allons mettre en place un cluster Web actif/passif hautement disponible avec DRBD et Heartbeat.

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

Cluster HA/DRBD/Apache

Cluster HA/DRBD/Apache

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:

http://denisrosenkranz.com/tuto-ha-drbd-sur-debian-6/

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éressante 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és, ne pas en prendre compte.

ATTENTION: Ne pas oublier de modifier ce fichier sur les deux serveurs DRBD.

Si votre parition /dev/drbd0 est montée démontez la avant de continuer ce tutoriel. Si vous avec aussi configurer le montage automatique de cette parition 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 partgaé 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 puissez 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 voila 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émarage 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 faigant, 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.

Voila ce qui met fin à ce long tuto sur le couple DRBD/HeartBeat.

Dans un prochain tuto nous allons voir comment mettre en place un Cluster MySQL.

Amusez-vous bien :)

(16 commentaires)

2 pings

Passer au formulaire de commentaire

  1. Antho

    Salut y’a tout qui marche mais on a un soucis:
    quand on stop heartbeat sur le node 1, le node 2 passe bien en primary, sauf que l’adresse physique reste bloqué sur notre node 1 donc il check toujours sur le node 1, alors qu’on est sur le 2 (pourtant tout est correct au niveau du drdb etc…)

    1. Denis

      As-tu bien renseigner ton IP balancé dans le fichier /etc/ha.d/haresources sur les deux serveurs?

      1. Dylan

        J’ai le même souci que Antho.

  2. Gallardo

    salut tous le monde ,j’ai un soucis , j’obtient bien « un coucou de node 1 » mais une fois que je stoppe heartbeat sur le node 1 j’obtient un 403 forbidden lorsque j’actualise la page .aidez moii svp :/.Merci

    1. Denis

      Salut Gallardo,

      Vérifie les choses suivantes quand tu stop HeartBeat sur le node1:

      – Est-ce que l’IP balancé est bien sur le node2? (ifconfig)
      – Est-ce que la partition DRBD est bien montée sur le node2? (df -h)
      – Est-ce que Apache est bien lancé sur le node2?

      1. Gallardo

        Alors merci de répondre tout d’abord , oui l’ip est bien basculé sur le node 2 ,et apache est bien lancer , pour faire plus simple j’ai crée aussi le www dans /mnt/www et dedans j’y ais placé un autre index.php et la tout a fonctionner ,j’ai éteint le node 1 et le node 2 a pris le relais du fait que j’obtienne un coucou de node 2.Merci

        1. Gallardo

          Une dernière question :) , un fois mes vm éteinte , mes deux nodes se retrouvent en Standalone comme ceci

          root@node2:~# drbd-overview
          0:r0 StandAlone Secondary/Unknown UpToDate/DUnknown r—–

          Que faut-il faire ? j’ai bien mis drdb au démarrage dans le update-rc.d mais j’obtient cette erreur .Les deux vm se ping bien .Merci beaucoup d’avance pour ton aide

          1. Denis

            Salut,

            Voila ce que tu peux essayer de faire:

            Si heartbeat est installé stop le sur node2 et redemarre le sur node1

            sinon stope heartbeat sur les deux machines et:

            – Redemarrer drbd sur les deux nodes
            – Mettre les deux nodes up: –> drbdadm up r0
            – Mettre node1 en primary –> drdbadm primary r0

            Il faut savoir que DRBD est succeptible quand tu eteint tes vm il faut:

            – Eteindre le secondary puis le primary
            – Allumer le primary puis le secondary

  3. axel

    salut , alors moi j’ai un petit problème lorsque je crée le fichier haresources je ne sais pas si je met l’ip que je désire pour l’ip virtuelle ? faut-il rajouter un carte réseau ? merciii beaucoup de votre aide

    1. Denis

      Salut Axel,

      Dans ton fichier haresources tu peux j’ip que tu veux pour l’IP virtuelle. Tant que cette IP fait partie de ton LAN.

      Tu n’as pas besoins de rajouter une carte réseau, HeartBeat va automatiquement créer une carte réseau virtuelle sur ton interface eth0.

      Tu peux voir ça avec la commande ifconfig ou ip a

      1. axel

        Ok mercii beaucoup pour ta réponse :) cela a marché parfaitement

  4. noname98

    Bonjour,

    Merci beaucoup pour ce tuto.

    Je l’ai testé et il me semble que pour que tout fonctionne correctement notamment au redémarrage des machines, il ne faut pas oublier de lancer sur les 2 machines le service DRBD

    update-rc.d drbd defaults 70

    De plus pour être cohérent avec le précédent tuto (ha:drbd) j’ai modifier la ligne haresources

    node1 IPaddr::192.168.2.57/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/mnt/r0::ext4

    /mnt/r0 à la place /mnt/

    Si mes remarques peuvent être utile

    1. Denis

      Merci,

      Effectivement entre mes deux tuto j’ai changé de le point de montage de la partition DRBD

  5. benoit

    je me suis corrigé mon souci, en faite il manquait une ligne dans les fichiers ha.cf :
    bcast eth0.
    Et pour se faciliter le dépannage, mettre aussi:
    logfile /var/log/ha-log
    Voilà.

    1. noname98

      J’ai aussi suivi le tuto, mais pas eu besoin de rajouter bcast eth0 par contre j’ai rajouter le lancement de drdb au démarrage de la machine…

  6. benoit

    Salut,
    j’ai un souci au moment de tester la bscule de drbd. Après avoir arrêter le heartbeat sur le node 1, je bascule sur le 2 et rien de change.
    J’arrive à mettre l’un ou l’autre en primary mais pas grâce au heartbeat. Une piste pour m’aider à trouver ma bourde ?

  1. Un cluster DRBD / Apache avec Heartbeat sur Debian 7 | Databases, Systems & Networks

    […] Source: denisrosenkranz.com […]

  2. DataNet Secure » Un cluster DRBD / Apache avec Heartbeat sur Debian 7

    […] Source: denisrosenkranz.com […]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Lire les articles précédents :
DisquesDurs-300x258
[Tuto] MDADM: Remplacer un disque défectueux

Bonjour à tous, Ce tutoriel fait suite aux deux derniers tutoriel sur MDADM. Dans ce tuto nous allons voir comment...

Fermer