HAProxy – Répartiteur de charge (Debian/Ubuntu)

Publié par Geoffrey Sauvageot-Berland le

Hello ! Nous allons voir comment mettre en place HAProxy qui nous permet de faire du load balancing (répartition de charge entre plusieurs serveurs WEB). Cette solution est très populaire dans le monde de l’open source. HAProxy est une solution fiable et pérenne pour votre infrastructure. Pour rendre utile ce mécanisme, il faudra mettre en place une solution de réplication (ex : gluster-fs) qui permet de fusionner des répertoires entre deux serveurs ou plus et donc de garantir l’intégrité des données.

Prérequis :

Apache2 doit être installé sur deb1 et deb2

Mes serveurs auront les paramètres IP suivants :

  • Serveur WEB deb1.local (IP :  192.168.128.141/24)
  • Serveur WEB deb2.local (IP : 192.168.128.142/24)
  • Serveur haproxy.local (IP : 192.168.128.150/24)

Fixer le nom de domaine de vos 3 serveurs :

hostnamectl set-hostname deb1.local
hostnamectl set-hostname deb2.local
hostnamectl set-hostname haproxy.local

Modification du fichier /etc/hosts

nano /etc/hosts 
# à effectuer sur les trois serveurs 
192.168.128.141 deb1.local deb1
192.168.128.142 deb2.local deb2
192.168.128.150 haproxy.local haproxy 

Redémarrez vos trois machines pour que les modifications s’appliquent définitivement.

Essayez de joindre les machines avec leurs DNS :

Depuis la machine haproxy : ping deb1 && ping deb2

Installation et configuration – Haproxy

Sur la machine qui va héberger la solution haproxy, tapez les commandes suivantes :

apt update 
apt install haproxy

Fichier de configuration haproxy.cfg

Rajoutez à la fin du fichier haproxy.cfg les directives suivantes :

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend webservers
backend webservers
        mode http
        balance roundrobin
        cookie LBN insert indirect nocache
        option httpclose
        option forwardfor
        server deb1* 192.168.128.141:80 check inter 1s
        server deb2* 192.168.128.142:80 check inter 1s

Modifiez les deux dernières lignes (IPs) et le(s) ports 80 en fonction de votre configuration

Une fois que vous avez effectué les modifications, enregistrez le fichier, puis redémarrez le service haproxy

# su - 
service haproxy restart 
service haproxy status 
# ou 
systemctl restart haproxy
systemctl status haproxy

Si vous n’obtenez pas d’erreur au redémarrage d’Haproxy, les étapes suivantes devraient bien se dérouler 🙂

Accédez à l’interface web de Haproxy, via un navigateur web :

http://iphaproxy/haproxy?stats

Vérification du fonctionnement de Haproxy

Les modifications des fichiers ci-dessous sont faites à titre d' »exemple afin de vérifier que le load balancing fonctionne réellement.

Ouvrez de nouveau un terminal SSH sur deb1 et deb2 , puis dirigez vous à la racine du serveur WEB (pour rappel :

cd /var/www/html/

Éditez le fichier de base d’apache 2 (“index.html”), sur les deux serveurs web, et modifiez le titre de la page (voir la partie en jaune ci-dessous)

nano index.html

Web server is running on 2

Puis exécutez la même action sur le serveur deb1 , en changeant légèrement l’intitulé.

Web server running on 1

La preuve en image

HAProxy, se charge de répartir la charge entre les deux serveurs. Un coup c’est web1 qui répond à la requête, une autrefois c’est web2. Actualiser la page quelques fois afin de voir le « balancement entre deb1 et deb2.

Voilà ce tutoriel est dès à présent terminé. Ci-dessous vous retrouvez un schéma représentant un scénario idéal dans la mise en place d’une solution de répartition de charge.

À noter que l’ajout d’un deuxième Haproxy, pour permettre le mode Active/Passive, sécuriserait complètement l’infrastructure ci-dessous.

Scénario idéal :

À bientôt 🙂

Brlndtech


En savoir plus sur Le Guide Du SecOps

Subscribe to get the latest posts sent to your email.


Geoffrey Sauvageot-Berland

Ingénieur diplômé par l’état en Informatique et Cybersécurité. Généraliste, à l'origine administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. Fondateur du blog : "Le Guide du SecOps", anciennement "Le Guide du SysOps"

En savoir plus sur Le Guide Du SecOps

Abonnez-vous pour poursuivre la lecture et avoir accès à l’ensemble des archives.

Continue reading