«

»

Août 07 2014

[Tuto]HA: Mettre en place deux serveurs HaProxy actif / passif avec Heartbeat

Bonjour à tous, dans ce nouveau tutoriel, nous allons voir comment mettre en place un serveur de répartition de charge (HaProxy) passif. Ce tutoriel fait suite au tuto précédent sur Haproxy.

Dans le tutoriel précédent, nous avons mis en place cluster avec un serveur de répartition de charge, et deux serveurs web. Le serveur Haproxy distribue la charge entre les deux serveurs web.

Dans un contexte de haute disponibilité, il faut se demander ce qui va se passer si le serveur de répartition de charge devient défaillant.

En haute disponibilité, le maître mot est REDONDANCE, il ne faut pas hésiter à doubler les ressources afin de minimiser les Single Point Of Failure (SPOF) ou point unique de défaillance.

Nous allons donc dans ce tutoriel, ajouter un serveur HaProxy passif afin de minimiser, voir supprimer un SPOF, qui était et dans le tutoriel précédent le serveur LB.

Voici la nouvelle topologie que nous allons mettre en place.

Topologie

Topologie

Mais avant toute chose, nous allons devoir revoir l’adressage IP du tutoriel précédent.

Dans le tutoriel précédent, nous accédions au contenu Web via http://192.168.2.100/, cette IP était aussi l’adresse IP principale du serveur lb, nous allons devoir revoir la configuration IP de lb étant donné que l’adresse IP 192.168.2.100 va être balancé entre le serveur actif et le serveur passif ainsi que l’IP 10.1.0.1 qui sert de passerelle pour les serveurs Web.


Configuration des serveurs de répartition de charges

Pour rappel, voici la configuration IP des serveurs:

interfaces lb1 & lb2

interfaces lb1 & lb2

Il faut maintenant, installer HaProxy sur le nouveau serveur de répartition de charge

Sur lb2 faire:

echo "deb http://ftp.debian.org/debian/ wheezy-backports main" >> /etc/apt/sources.list
apt-get update
apt-get install haproxy
sed -i "s/ENABLED=0/ENABLED=1/g" /etc/default/haproxy
sed -i "s/ENABLED=0/ENABLED=1/g" /etc/init.d/haproxy

Comme la configuration de HaProxy sera la même sur les deux serveurs il suffit de la copier de lb1 vers lb2, ainsi que le fichier firewall

scp /etc/haproxy/haproxy.cfg root@10.1.0.12:/etc/haproxy/haproxy.cfg
scp /etc/init.d/firewall root@10.1.0.12:/etc/init.d/firewall

Configurez le script au démarrage sur lb2 avec la commande

update-rc.d firewall defaults

Maintenant que les deux serveurs HaProxy sont configurés à l’identiques nous allons installer heartbeat pour mettre en place le balancement entre les deux serveurs.

Installation de HeatBeat

Les prochaines manipulation sont á faire dur les deux serveurs

apt-get install heartbeat

Une fois heartbeat installé 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é 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 lb primaire quand il revient en ligne
auto_failback off

#Serveurs du cluster
node lb1
node lb2

Attention! Pour que tout fonctionne bien il faut s’assurer que vous puissiez ping lb2 depuis lb1 et vice-versa.

Pensez donc à rajouter les deux lignes suivantes sur le fichier /etc/hosts sur vos deux lb:

##LB
10.1.0.11	lb1
10.1.0.12	lb2

Nous allons maintenant créer le contenu du fichier haresources

lb1 IPaddr::192.168.2.100/24/eth0 IPaddr::10.1.0.1/24/eth1 haproxy

Explications:
lb1 = lb primaire du cluster
IPaddr::192.168.2.100/24/eth0 = Adresse IP balancée pour Haproxy
IPaddr::10.1.0.1/24/eth1 = Adresse IP balancée pour la passerelle sur eth1
haproxy = service que heartbeat va démarrer

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

Enfin nous allons désactiver le démarrage automatique de HaProxy sur les deux serveurs:

insserv -r haproxy

Finalisation du balancement

Sur les deux serveur arrêtez haproxy:

/etc/init.d/haproxy stop

Puis sur lb1 démarrez hearbeat

/etc/init.d/heartbeat start

Attendez quelques secondes et tapez la commande ifconfig:

root@lb1:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:ea:d8:36
          inet addr:192.168.2.101  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:feea:d836/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:16306 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5650 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:19138201 (18.2 MiB)  TX bytes:542436 (529.7 KiB)

eth0:0    Link encap:Ethernet  HWaddr 08:00:27:ea:d8:36
          inet addr:192.168.2.100  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1      Link encap:Ethernet  HWaddr 08:00:27:39:b1:f0
          inet addr:10.1.0.11  Bcast:10.1.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe39:b1f0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1135 errors:0 dropped:0 overruns:0 frame:0
          TX packets:164 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:74245 (72.5 KiB)  TX bytes:18185 (17.7 KiB)

eth1:0    Link encap:Ethernet  HWaddr 08:00:27:39:b1:f0
          inet addr:10.1.0.1  Bcast:10.1.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Vous voyez que les IP 192.168.2.100 et 10.1.0.1 sont maintenant configurés sur lb1.

Maintenant, démarrez heartbeat sur lb2.

Le balancement entre les deux serveurs est maintenant pleinement fonctionnel.

Vous pouvez maintenant visualiser le contenu Web sur l’IP de balancement 192.168.2.100 et les statistiques http://192.168.2.100/stats

Test du balancement

Pour tester le balancement, il vous suffit d’arrêter heartbeat sur lb1 (ou le serveur) avec la commande:

/etc/init.d/heartbeat stop

Patientez quelques secondes et faites un ifconfig sur lb2 et vous verrez que les IP balancés sont maintenant sur ce serveur.

root@lb2:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:59:b4:8f
          inet addr:192.168.2.102  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe59:b48f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:26390 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8928 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:32133942 (30.6 MiB)  TX bytes:974666 (951.8 KiB)

eth0:0    Link encap:Ethernet  HWaddr 08:00:27:59:b4:8f
          inet addr:192.168.2.100  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1      Link encap:Ethernet  HWaddr 08:00:27:4b:17:c8
          inet addr:10.1.0.12  Bcast:10.1.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe4b:17c8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2179 errors:0 dropped:0 overruns:0 frame:0
          TX packets:622 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:149565 (146.0 KiB)  TX bytes:53761 (52.5 KiB)

eth1:0    Link encap:Ethernet  HWaddr 08:00:27:4b:17:c8
          inet addr:10.1.0.1  Bcast:10.1.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Connectez-vous à http://192.168.2.100/stats et vous verrez écrit:
Statistics Report for pid XXXX on lb2, cela vous montre bien que lb2 est maintenant le serveur primaire.

lb2 est primaire

lb2 est primaire

Pour remettre lb1 primaire, il vous suffit de redémarrez HeartBeat sur celui-ci, de stopper HeartBeat sur lb2, et une fois les IP de retour sur lb1, relancez heartbeat sur lb2.

Vous pouvez aussi faire cela automatiquement en mettant la valeur auto_failback à on dans le fichier ha.cf des deux serveurs.

Voila j’espère que vous avez appréciez ce tutoriel, dans le prochain nous allons mettre en place deux serveurs NFS Actif / Passif afin de stocker le contenu web de nos serveurs Web.

(3 commentaires)

1 ping

  1. Michel

    Bonjour,

    Une alternative intéressante est d’utiliser keepalived pour la bascule de l’ip virtuelle et de faire « binder » haproxy sur celle-ci avec les deux instances de haproxy UP en même temps.

    Et pour la synchro des conf haproxy je me sers de csync2. Jettez y un oeil c’est vraiment très pratique.

    Cordialement,
    Michel

  2. Thier

    Bonjour,
    j’aimerais configuré un serveur Debian pour qu’il soit relié à deux switchs differents mais les liens auront la même adresse IP.
    Est il possible de le faire avec HaProxy ?

    Infos : J’ai configuré une partage de charge entre les switchs avec vrrp. Le premier switch est master pour le Vlan10 et le second est backup pour le vlan 20.

    Merci d’avance !

  3. Number1

    apt-get install heartbeat ne marche pas pour moi ,pouvez-vous nous poster votre fichier /etc/apt/sources.list ???

  1. TP 3 : Équilibrage de charges entre services avec HAProxy sous Debian Jessie – msmkfs

    […] HAProxy est une solution libre, fiable, et très performante de répartition de charge de niveau 4 (TCP) et 7 (HTTP). […]

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 :
HAProxyLogo
[Tuto]HA: Introduction à HaProxy sous Debian 7

Bonjour à tous, dans ce nouveau tutoriel consacré à la haute disponibilité, je vais vous parler d' HaProxy :)

Fermer