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.
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.
Notice
Dans Virtualbox, le réseau en 192.168.2.XXX est mon réseau locale (mode pont) et pour le réseau en 10.1.0.XXX la configuration de la carte est en mode Réseau interneImportant!
Voici donc les nouvelles IP et hostname:
Serveurs de répartition de charge
hostname: lb1
Deux carte réseaux
eth0: 192.168.2.101
eth1: 10.1.0.11
hostname: lb2
Deux carte réseaux
eth0: 192.168.2.102
eth1: 10.1.0.12
Vous voyez dans la nouvelle configuration que les IP 192.168.2.100 et 10.1.0.1 ne son plus configurés, c’est normal, elle vont être automatiquement configurée par HeartBeat, qui va servir au balancement entre les serveurs HaProxy
Pour rappel voici les IP des serveurs web.
Serveur web1
hostname: web1
eth0: 10.1.0.21
Serveur web2
hostname: web2
eth0: 10.1.0.22
Configuration des serveurs de répartition de charges
Pour rappel, voici la configuration IP des serveurs:
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.
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.
6 Commentaires
1 ping
Passer au formulaire de commentaire
Si je comprends bien dans ton tutoriel on a effectivement deux serveurs haproxy avec la même configuration mais si le premier serveur lb1 ne fonctionne plus c’est à moi de basculer l’ip sur le deuxième lb2 dans le cas ou lb1 ne répond plus ?
check that lm
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
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 !
apt-get install heartbeat ne marche pas pour moi ,pouvez-vous nous poster votre fichier /etc/apt/sources.list ???
You put the lime in the coucont and drink the article up.
[…] HAProxy est une solution libre, fiable, et très performante de répartition de charge de niveau 4 (TCP) et 7 (HTTP). […]