RousselTMLEARNING

Article · HAProxy : de la découverte à l'expertise

Ajout et suppression dynamique de backends

1. Introduction à la gestion dynamique #

Traditionnellement, modifier la structure des backends nécessitait un reload du fichier de configuration. La Runtime API permet désormais d'effectuer ces changements en mémoire.
Attention : L'ajout et la suppression dynamique de backends et serveurs via la Runtime API nécessite HAProxy 2.8 ou une version supérieure.

Configuration de base #

Pour utiliser ces commandes, votre instance HAProxy doit exposer une socket d'administration avec un niveau admin dans la section global de votre configuration :

En classique :
stats socket /run/haproxy/admin.sock user haproxy group haproxy mode 660 level admin
et/ou via une IP (accès distant mais attention aux risques de sécurité si vous mettez une IP autre que localhost) :
stats socket ipv4@127.0.0.1:9999  level admin  expose-fd listeners

2. Lexique des commandes clés #

Pour manipuler l'infrastructure à chaud, il est essentiel de comprendre le rôle de chaque verbe de la Runtime API.

help #

La commande help permet d'afficher l'ensemble des commandes possibles. La syntaxe est donc la suivante, seul le endpoint change en fonction du type d'activation que vous avez fait:

Le chemin à utiliser avec socat peut changer en fonction de votre configuration
  • Classique :
    echo 'help' | socat stdio /var/run/haproxy.stat
  • IP/PORT :
    echo 'help' | socat stdio tcp4-connect:127.0.0.1:9999

add (backend / server) #

La commande add permet de créer un nouvel objet (backend ou serveur) en mémoire. Un backend peut être créé ex nihilo ou en héritant des paramètres d'une section defaults existante (indispensable pour les timeouts).

Attention : Il est possible d'avoir des problèmes de résolution quand vous ajoutez un serveur. Cela peut se voir en lançant cette commande dans laquelle vous verez qu'un serveur n'a pas d'IP :
$ echo "show servers conn default" | socat stdio /run/haproxy/admin.sock
# bkname/svname bkid/svid addr port - purge_delay served used_cur used_max need_est idle_sess unsafe_nb safe_nb idle_lim idle_cur idle_per_thr[10]
default/web1 4/1 192.168.48.3 80 - 5000 0 0 1 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0
default/web2 4/2 192.168.48.2 80 - 5000 0 0 1 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0
default/web3 4/3 - 80 - 5000 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0
Et vous pouvez éviter cela en précalculant l'IP :
IP=$(getent hosts web3 | awk '{print $1}'); echo "add server default/web3 $IP:80 check" | socat stdio /run/haproxy/admin.sock

enable (server / health) #

Par défaut, un serveur ajouté dynamiquement est en mode maintenance (maint). enable server le rend opérationnel. enable health active spécifiquement les tests de santé (health checks) pour ce serveur.

publish (backend) #

C'est une étape de validation. Tant qu'un backend n'est pas publié, il est invisible pour les frontends, même s'il existe en mémoire. Cela permet de configurer entièrement un pool avant de l'exposer au trafic.

map (add / show / del) #

Les Maps sont des tables de correspondance (ex: URL -> Backend) stockées en mémoire. add map ajoute une règle de routage, del map la supprime, et show map permet de déboguer le contenu de la table sans recharger HAProxy.

3. Ajouter un backend et un serveur #

Voici le workflow pour créer un nouveau pool de serveurs et le rendre disponible.

Création et activation #

Le processus se décompose en 4 étapes clés : l'ajout du backend, l'ajout du serveur, l'activation de la santé et la publication.

# 1. Ajouter le backend en héritant d'une section defaults
echo "add backend test-backend from mydefaults mode http" | socat stdio unix-connect:/run/haproxy/admin.sock

# 2. Ajouter un serveur au backend
echo "add server test-backend/server1 127.0.0.1:3000 check" | socat stdio unix-connect:/run/haproxy/admin.sock

# 3. Activer le serveur et ses health checks
echo "enable server test-backend/server1" | socat stdio unix-connect:/run/haproxy/admin.sock
echo "enable health test-backend/server1" | socat stdio unix-connect:/run/haproxy/admin.sock

# 4. Publier le backend pour le rendre utilisable par les frontends
echo "publish backend test-backend" | socat stdio unix-connect:/run/haproxy/admin.sock

Routage dynamique via Map files #

Pour diriger du trafic vers ce nouveau backend sans modifier le frontend, utilisez les fichiers de mapping en mémoire :

# Associer le chemin /test au nouveau backend
echo "add map virt@paths.map /test test-backend" | socat stdio unix-connect:/run/haproxy/admin.sock

4. Supprimer un backend proprement #

La suppression nécessite de respecter un ordre précis pour ne pas rompre les connexions en cours.

Procédure de retrait #

Il est impératif de passer le serveur en maintenance et d'attendre qu'il soit 'removable' avant la suppression physique.

# 1. Passer le serveur en maintenance
echo "set server test-backend/server1 state maint" | socat stdio unix-connect:/run/haproxy/admin.sock

# 2. Attendre et supprimer le serveur
echo "wait 2s srv-removable test-backend/server1; del server test-backend/server1" | socat stdio unix-connect:/run/haproxy/admin.sock

# 3. Dé-publier et supprimer le backend
echo "unpublish backend test-backend" | socat stdio unix-connect:/run/haproxy/admin.sock
echo "wait 2s be-removable test-backend; del backend test-backend" | socat stdio unix-connect:/run/haproxy/admin.sock

5. Points d'attention importants #

Quelques règles de comportement du moteur HAProxy à connaître.

Publication et Force Switch #

Un backend référencé par un use_backend sera ignoré s'il n'est pas publié. Pour forcer l'utilisation même s'il est 'unpublished', utilisez la directive force-be-switch.

Gestion de la mémoire #

Pour permettre l'ajout dynamique, HAProxy conserve les sections defaults en mémoire. Si vous n'utilisez pas de backends dynamiques, vous pouvez libérer cette mémoire avec la directive globale suivante :

global
    tune.defaults.purge on

Conclusion #

Vers une automatisation totale #

Cette approche est idéale pour coupler HAProxy à des outils comme Consul ou des contrôleurs personnalisés, permettant de scaler votre infrastructure sans jamais générer de micro-coupures liées aux rechargements de processus.

📄 HAProxy : Ajout et suppression dynamique de backends →

Mon suivi

  • ⏱ Durée estimée : ≈ 11 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Questions sur cette leçon

Aucune question pour l'instant : soyez le premier à demander de l'aide ou à partager votre configuration.

Poser une question sur cette leçon →

Glossaire de la formation

ACL (Access Control List)

Liste de contrôle d'accès définissant les permissions accordées sur des ressources. Dans HAProxy, les ACL sont des conditions flexibles permettant de ...

Backend

Section de la configuration HAProxy définissant un pool de serveurs cibles vers lesquels le trafic est redirigé. C'est ici que l'on configure l'algori...

Frontend

Section de la configuration HAProxy qui définit comment les requêtes sont reçues du côté client (adresse IP, port, certificats SSL) avant d'être envoy...

GSLB (Global Server Load Balancing)

Technique de répartition de charge à l'échelle mondiale, utilisant généralement le DNS pour diriger les utilisateurs vers le datacenter le plus proche...

HAProxy

Logiciel de load balancing et de proxying haute performance pour TCP et HTTP. HAProxy est le standard de l'industrie pour la gestion de trafic à très ...

Health Check

Mécanisme automatisé permettant au load balancer de tester périodiquement la disponibilité des serveurs afin d'exclure temporairement ceux qui sont en...

Load Balancing

Dispositif qui distribue le trafic applicatif sur un ensemble de serveurs afin d'optimiser l'usage des ressources, de minimiser les temps de réponse e...

SSL Offloading

Processus consistant à déléguer le déchiffrement du trafic HTTPS au load balancer pour libérer de la puissance CPU sur les serveurs d'application.

Stickiness

Mécanisme garantissant qu'un utilisateur est systématiquement redirigé vers le même serveur backend durant toute sa session, indispensable pour les ap...

Slowloris

Type d'attaque par déni de service (DoS) qui consiste à ouvrir de nombreuses connexions HTTP et à les maintenir ouvertes le plus longtemps possible en...

DoS / DDoS

Attaque visant à rendre un service indisponible en submergeant le serveur ou le réseau de trafic. On parle de DDoS (Distributed Denial of Service) lor...

SSL / TLS

Protocoles de sécurisation des échanges sur internet. TLS (Transport Layer Security) est le successeur moderne de SSL (Secure Sockets Layer). Ils perm...

Articles recommandés

Anatomie de la configuration HAProxy, Clustering et Haute Disponibilité

Comprendre la structure d'un fichier haproxy.cfg : sections global, defaults, frontend (haute per...

Monitoring et Statistiques dans HAProxy

Comment activer le tableau de bord de statistiques natif et exposer des métriques pour Prometheus.

Aide-mémoire HAProxy : Les commandes essentielles

Un guide pratique regroupant toutes les commandes indispensables pour installer, gérer, tester et...

HAProxy dans Kubernetes : L'Ingress Controller Haute Performance

Découvrez en profondeur l'intégration de HAProxy dans Kubernetes. Architecture Direct-to-Pod, opt...

HAProxy comme Ingress Controller Kubernetes : Le Guide de Production

Découvrez comment utiliser HAProxy comme Ingress Controller dans Kubernetes. Architecture Direct-...

HAProxy et SSL : terminaison TLS, SSL passthrough et sécurisation

HAProxy et SSL/TLS : terminaison SSL, SSL passthrough en mode TCP avec routage SNI, ré-chiffremen...

Maîtriser les ACLs dans HAProxy : Le Guide Complet

Guide complet sur les ACLs HAProxy : apprenez à configurer le routage intelligent, le contrôle d'...

HAProxy : Guide détaillé des directives de configuration

Une exploration complète des directives essentielles de HAProxy : de bind à http-check, apprenez ...

Maîtriser les ACLs dans HAProxy

Guide complet sur les ACLs HAProxy : apprenez à configurer le routage intelligent, le contrôle d'...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !