Qu’est-ce que HaProxy ? Comment faire de la répartition de charge entre plusieurs serveurs ?

HAproxy est un logiciel permettant la répartition de charges (Load-Balancing) entre plusieurs serveurs web en répartissant les requêtes de façon quasiment transparente pour l’utilisateur.

Préparation HAproxy

Au minimum, trois machines sont nécessaires : un serveur HAproxy et deux serveurs web vers lesquels les requêtes entrantes seront réparties.
Sur les deux serveurs web, il est nécessaire de faire fonctionner au minimum apache2 ayant chacun accès à un contenu identique (pour ne pas afficher deux versions du site.)

apt-get install apache2

Le serveur HAproxy fait office de passerelle entre le réseau des serveurs web et le réseau externe. Il doit disposer de 2 interfaces réseaux : une pour faire face aux requêtes entrantes et l’autre qui communiquera avec les différents serveurs de la grappe.

Dans notre exemple, le serveur HAproxy aura pour IP “externe” (frontal web) 172.19.0.1 et pour IP “interne” (réseau serveurs web) 192.168.0.1

Les serveurs web auront pour IP:

192.168.0.10

192.168.0.20


Mise en place de l’équilibrage des charges avec HAproxy

Voici les étapes à suivre pour installer et lancer le serveur HAproxy afin de mettre en place de l’équilibrage des charges.

On change le nom de la machine HAproxy:

hostname SRV_haproxy

Pensez aussi à changer son nom dans /etc/hosts:

vim /etc/hosts

Installez le service HAproxy :

apt-get update && apt-get install haproxy

Pour qu’HAproxy soit considéré comme un service, à part entière :

vim /etc/default/haproxy
Passez le paramètre ENABLED à 1
service haproxy status
service haproxy start

Nous allons maintenant mettre en place un fichier de configuration basique afin de tester sur nos deux serveurs web.

vim /etc/haproxy/haproxy.cfg

# On précise l’interface extérieure du serveur (la où il va écouter)
listen SRV_haproxy 172.19.0.1:80

# Nous travaillons sur le flux http
mode http

# Choix du mode de répartition des charges
balance roundrobin

# On ferme la connexion après la réponse au client
option httpclose

# On vérifie si le serveur est toujours actif (health check)
httpchk HEAD /index.html HTTP/1.0

# Délais de réponse client - serveur
contimeout 5000
clitimeout 50000
srvtimeout 50000

# Définition des serveurs load balancés (serveurs réels) :
SRV_Web1 192.168.0.10:80 check server
SRV_Web2 192.168.0.20:80 check

Un autre mode de répartition peut être utilisé :
– mode “leastconn” : le serveur ayant eu le moins de connexion répondra aux requêtes en premier.


Connexion durable client-serveur pour un e-commerce

Certain usages nécessitent une connexion durable entre le client et le serveur (gestion des sessions, panier sur site e-commerce).
Pour répondre à cette problématique, nous pouvons envoyer un cookie à l’utilisateur.
En fonction du contenu de ce cookie, le répartiteur de charge pourra transférer les requêtes sur le serveur correspondant et le client pourra alors maintenir des échanges durables avec celui-ci.

Il vous suffit de rajouter ces lignes:

vim /etc/haproxy/haproxy.cfg
cookie 172.19.0.1 insert indirect
server SRV_Web1 192.168.0.10:80 cookie SRV_Web1 check
server SRV_Web2 192.168.0.20:80 cookie SRV_Web2 check

Pour vérifier la présence des cookies et de leurs actions sur un navigateur Firefox : Option > Vie privée > Affichage des cookies


Logs et stats de répartition des charge des serveurs

Il est possible de voir la répartition des charges des serveurs grâce à l’interface web d’HAproxy.

vim /etc/Haproxy/haproxy.cfg
stats uri /stats
stats auth btsig:btsig

L’interface d’information générale d’HAproxy contient de nombreuses informations sur le fonctionnement des différents serveurs web et sur l’état de l’équilibrage des charges.

Pour consulter ces informations, il faut entrer se rendre à l’URL suivante :

http://$haproxy/stats/