1. Introduction
Dans le paysage numérique d’aujourd’hui, assurer une haute disponibilité et des performances optimales des applications web est crucial. À mesure que le trafic vers votre site web ou votre application augmente, un seul serveur peut ne pas suffire pour gérer efficacement la charge. C’est là qu’intervient l’équilibrage de charge, et HAProxy se distingue comme l’une des solutions d’équilibrage de charge les plus puissantes et flexibles disponibles.
Ce tutoriel complet vous guidera à travers le processus de configuration et de configuration de HAProxy sur Ubuntu pour distribuer le trafic entrant sur plusieurs serveurs backend. À la fin de ce guide, vous disposerez d’une solution d’équilibrage de charge robuste qui peut améliorer significativement les performances, la fiabilité et l’évolutivité de votre application.
2. Comprendre l’équilibrage de charge
Avant de plonger dans les détails techniques, explorons brièvement ce qu’est l’équilibrage de charge et pourquoi il est essentiel.
L’équilibrage de charge est le processus de distribution du trafic réseau entrant sur plusieurs serveurs. Cette approche offre plusieurs avantages :
- Amélioration des performances : En répartissant la charge sur plusieurs serveurs, vous pouvez réduire la charge sur chaque serveur, ce qui conduit à des temps de réponse plus rapides.
- Haute disponibilité : Si un serveur tombe en panne, l’équilibreur de charge peut rediriger le trafic vers les serveurs sains restants, assurant que votre application reste disponible.
- Évolutivité : À mesure que votre trafic augmente, vous pouvez facilement ajouter plus de serveurs à votre pool backend pour gérer la charge accrue.
- Flexibilité : Les équilibreurs de charge vous permettent d’effectuer la maintenance sur les serveurs backend sans temps d’arrêt en les retirant temporairement du pool.
3. Qu’est-ce que HAProxy ?
HAProxy (High Availability Proxy) est une solution gratuite et open-source d’équilibrage de charge et de proxying pour les applications basées sur TCP et HTTP. Il est connu pour sa rapidité et son efficacité, capable de gérer des millions de connexions par seconde.
Les principales caractéristiques de HAProxy incluent :
- Équilibrage de charge de couche 4 (TCP) et de couche 7 (HTTP)
- Terminaison SSL/TLS
- Vérification de l’état des serveurs backend
- Journalisation et statistiques avancées
- Routage basé sur le contenu
- Limitation de débit et protection contre les DDoS
Maintenant que nous comprenons les bases, passons à la mise en œuvre pratique.
4. Mise en place de l’environnement
Pour ce tutoriel, nous supposons que vous travaillez avec Ubuntu 20.04 LTS. Vous aurez besoin de :
- Un serveur Ubuntu 20.04 avec accès root ou sudo
- Au moins deux serveurs web backend (nous utiliserons Apache dans ce tutoriel)
- Connaissance de base de la ligne de commande Linux
Assurez-vous que votre système est à jour avant de continuer :
$ sudo apt update
$ sudo apt upgrade
5. Installation de HAProxy
L’installation de HAProxy sur Ubuntu est simple. Exécutez la commande suivante :
$ sudo apt install haproxy
Une fois l’installation terminée, vous pouvez vérifier la version installée :
$ haproxy -v
Vous devriez voir une sortie similaire à :
HAProxy version 2.4.24-0ubuntu0.22.04.1 2023/10/31
6. Configuration de HAProxy
Le fichier de configuration principal de HAProxy se trouve à /etc/haproxy/haproxy.cfg
. Avant d’apporter des modifications, il est recommandé de sauvegarder la configuration originale :
$ sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
Maintenant, créons une configuration de base. Ouvrez le fichier avec votre éditeur de texte préféré :
$ sudo nano /etc/haproxy/haproxy.cfg
Remplacez le contenu par la configuration de base suivante :
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server web1 10.0.0.1:80 check
server web2 10.0.0.2:80 check
Cette configuration met en place un équilibreur de charge HTTP de base. Nous expliquerons chaque section en détail plus tard.
7. Configuration des serveurs backend
Pour ce tutoriel, nous supposerons que vous avez deux serveurs web exécutant Apache. Si vous ne les avez pas encore configurés, vous pouvez le faire avec ces commandes sur chaque serveur :
$ sudo apt install apache2
$ sudo systemctl start apache2
$ sudo systemctl enable apache2
Pour différencier les serveurs, vous pouvez personnaliser la page Apache par défaut. Sur chaque serveur, modifiez le fichier /var/www/html/index.html
:
$ sudo nano /var/www/html/index.html
Remplacez le contenu par un identifiant simple, comme :
<h1>Bienvenue sur le serveur Web 1</h1>
(Ajustez le numéro pour chaque serveur)
Assurez-vous de noter les adresses IP de vos serveurs backend et mettez à jour le fichier haproxy.cfg
en conséquence dans la section backend http_back
.
8. Explication du fichier de configuration HAProxy
Décomposons le fichier de configuration HAProxy que nous avons créé précédemment :
Section Global
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
Cette section définit les paramètres globaux :
log
: Spécifie où envoyer les logschroot
: Change le répertoire racine pour améliorer la sécuritéstats socket
: Crée un socket UNIX pour les commandes d’exécutionuser
etgroup
: Définit l’utilisateur et le groupe sous lesquels HAProxy s’exécutedaemon
: Exécute HAProxy en arrière-plan
Section Defaults
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
Cette section définit les paramètres par défaut pour toutes les autres sections :
mode http
: Définit le mode par défaut sur l’équilibrage de charge HTTP (couche 7)option httplog
: Active la journalisation HTTPoption dontlognull
: Désactive la journalisation des connexions nullestimeout
: Définit diverses valeurs de délai d’attente
Section Frontend
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
Cette section définit comment les requêtes doivent être traitées :
bind *:80
: Écoute sur toutes les interfaces sur le port 80stats uri
: Active la page de statistiques à l’URI spécifiédefault_backend
: Spécifie le backend par défaut à utiliser
Section Backend
backend http_back
balance roundrobin
server web1 10.0.0.1:80 check
server web2 10.0.0.2:80 check
Cette section définit les serveurs backend :
balance roundrobin
: Utilise l’algorithme d’équilibrage de charge round-robinserver
: Définit chaque serveur backend avec son IP et son portcheck
: Active les vérifications de santé sur les serveurs
9. Test de l’équilibreur de charge
Après avoir configuré HAProxy, redémarrez le service :
$ sudo systemctl restart haproxy
Vous pouvez vérifier le statut pour vous assurer qu’il fonctionne sans erreurs :
$ sudo systemctl status haproxy
Maintenant, vous pouvez tester votre équilibreur de charge en y accédant via un navigateur web ou en utilisant curl :
$ curl http://votre_ip_haproxy
Répétez cette commande plusieurs fois. Vous devriez voir des réponses alternant entre vos serveurs backend, démontrant que l’équilibreur de charge fonctionne.
10. Surveillance et statistiques
HAProxy fournit une page de statistiques intégrée qui offre des informations précieuses sur votre configuration d’équilibrage de charge. Nous l’avons déjà activée dans notre configuration avec la ligne :
stats uri /haproxy?stats
Pour accéder à la page de statistiques, ouvrez un navigateur web et naviguez vers :
http://votre_ip_haproxy/haproxy?stats
Cette page fournit des informations en temps réel sur vos serveurs frontend et backend, y compris :
- Statut du serveur (UP/DOWN)
- Sessions actuelles
- Octets entrants/sortants
- Taux de requêtes
- Temps de réponse
Vous pouvez utiliser ces informations pour surveiller la santé et les performances de votre configuration d’équilibrage de charge.
11. Fonctionnalités avancées de HAProxy
HAProxy offre de nombreuses fonctionnalités avancées pour affiner votre configuration d’équilibrage de charge. En voici quelques-unes que vous pourriez trouver utiles :
Terminaison SSL
Pour gérer le trafic HTTPS, vous pouvez configurer HAProxy pour effectuer la terminaison SSL. Cela décharge le traitement SSL de vos serveurs backend. Voici un exemple de configuration :
frontend https_front
bind *:443 ssl crt /etc/ssl/certs/moncert.pem
reqadd X-Forwarded-Proto:\ https
default_backend http_back
Sessions persistantes
Si votre application nécessite une persistance de session, vous pouvez activer les sessions persistantes :
backend http_back
balance roundrobin
cookie SERVERID insert indirect nocache
server web1 10.0.0.1:80 check cookie server1
server web2 10.0.0.2:80 check cookie server2
Vérifications de santé
HAProxy peut effectuer des vérifications de santé plus avancées. Par exemple, pour vérifier si une URL spécifique renvoie un statut 200 :
backend http_back
balance roundrobin
option httpchk GET /health.php
http-check expect status 200
server web1 10.0.0.1:80 check
server web2 10.0.0.2:80 check
Limitation de débit
Pour protéger vos serveurs contre les abus, vous pouvez mettre en place une limitation de débit :
frontend http_front
bind *:80
stick-table type ip size 100k expire 30s store http_req_rate(10s)
http-request track-sc0 src
http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 }
default_backend http_back
Cette configuration limite chaque IP à 100 requêtes par 10 secondes.
12. Résolution des problèmes courants
Lorsque vous travaillez avec HAProxy, vous pouvez rencontrer certains problèmes courants. Voici comment les résoudre :
- Erreurs de configuration : Vérifiez toujours votre configuration pour les erreurs de syntaxe avant de redémarrer HAProxy :
$ haproxy -c -f /etc/haproxy/haproxy.cfg
- Serveurs backend hors service : Vérifiez la page de statistiques HAProxy pour voir si des serveurs backend sont marqués comme DOWN. Vérifiez que vos serveurs backend sont en cours d’exécution et accessibles.
- Problèmes de connectivité : Assurez-vous que HAProxy peut atteindre vos serveurs backend. Vérifiez les règles de pare-feu et les configurations réseau.
- Problèmes de certificat SSL : Si vous utilisez la terminaison SSL, assurez-vous que vos certificats sont valides et correctement configurés.
- Journalisation : Activez la journalisation détaillée pour résoudre les problèmes :
global
log /dev/log local0 debug
Puis vérifiez les logs :
$ sudo tail -f /var/log/haproxy.log
13. Meilleures pratiques et considérations de sécurité
Pour assurer des performances optimales et la sécurité de votre configuration HAProxy, considérez les meilleures pratiques suivantes :
- Mises à jour régulières : Gardez HAProxy et vos serveurs backend à jour avec les derniers correctifs de sécurité.
- Communication sécurisée : Utilisez SSL/TLS pour toutes les communications, y compris entre HAProxy et les serveurs backend.
- Contrôle d’accès : Mettez en place une liste blanche IP ou une authentification pour les zones sensibles comme la page de statistiques.
- Surveillance : Mettez en place une surveillance et des alertes pour HAProxy et vos serveurs backend.
- Sauvegarde de la configuration : Sauvegardez régulièrement votre fichier de configuration HAProxy.
- Limitation de débit : Mettez en place une limitation de débit pour vous protéger contre les attaques DDoS.
- Journalisation : Configurez une journalisation complète pour le dépannage et l’analyse de sécurité.
- Utilisateur séparé : Exécutez HAProxy sous un utilisateur séparé, non-root, pour une meilleure sécurité.
- TCP Keepalives : Activez les TCP keepalives pour détecter et supprimer les connexions mortes :
option tcpka
- Tests réguliers : Testez périodiquement votre configuration d’équilibrage de charge, y compris les scénarios de basculement.
14. Conclusion
Dans ce tutoriel complet, nous avons couvert les éléments essentiels de la mise en place et de la configuration de HAProxy comme équilibreur de charge sur Ubuntu. Nous avons exploré les configurations de base et avancées, les techniques de dépannage et les meilleures pratiques pour maintenir une solution d’équilibrage de charge robuste et sécurisée.
La flexibilité et les puissantes fonctionnalités de HAProxy en font un excellent choix pour améliorer les performances, la fiabilité et l’évolutivité de vos applications web. À mesure que vous vous familiariserez avec HAProxy, vous découvrirez encore plus de façons d’optimiser votre infrastructure pour répondre à vos besoins spécifiques.
N’oubliez pas que l’équilibrage de charge n’est qu’une partie de la construction d’une application web évolutive et résiliente. Envisagez de combiner HAProxy avec d’autres outils et pratiques, tels que la conteneurisation, les déploiements automatisés et une surveillance complète, pour créer une infrastructure web vraiment robuste et efficace.