HAProxy (haproxy)
Répartiteur de charge des services répliqués : frontaux et serveurs décrits en JSON, page de statistiques et métriques Prometheus.
Généré depuis catalog/services/haproxy.yaml : ne pas modifier à la main.
Résumé
| Version | 3.2.9 |
| Usage | installer et configurer |
| Couche | infrastructure (présentée à part) |
| Catégorie | Passerelles et répartition de charge |
| Méthodes d'installation | package, podman |
| Connexion externe | non |
| Réservé au bac à sable | non |
Licence
| Identifiant SPDX | GPL-2.0-or-later |
| Politique de licence | exception de licence |
| Exception de licence | LEX-004 (en attente de la décision du client) |
| Composant de la plateforme | haproxy |
Paquets et artefacts
Un paquet que publie le projet du service (son image, son archive binaire, son paquet Python ou système) porte la licence du service ; un paquet tiers porte la licence écrite sur sa ligne, lue dans les métadonnées officielles du projet amont.
| Type | Paquet | Version | Licence | Détails |
|---|---|---|---|---|
| image de conteneur | docker.io/library/haproxy | 3.2.9 | GPL-2.0-or-later | clé d'image haproxy, utilisée par haproxy, condensé sha256:7eb80a6c4555dd64fd5b01c078b33637b1af1871d636570624ef0b079857527e |
| paquet système | haproxy | version du dépôt configuré | GPL-2.0-or-later | famille RHEL (dnf) |
| paquet système | haproxy | version du dépôt configuré | GPL-2.0-or-later | famille Debian (apt) |
Les images sont épinglées par étiquette dans le descripteur, et par condensé (digest) quand le descripteur en déclare un (le bundle hors ligne refuse alors une image téléchargée qui ne le porte pas) ; le condensé est enregistré dans le miroir du Manager à l'import du bundle hors ligne, et chaque téléchargement ou chargement est vérifié par rapport à lui.
Systèmes et architectures pris en charge
| Méthode | Systèmes d'exploitation | Architectures |
|---|---|---|
package | famille RHEL (dnf), famille Debian (apt) | x86_64, aarch64 (non restreintes par le descripteur) |
podman | famille RHEL (dnf), famille Debian (apt), Arch Linux (pacman) | x86_64, aarch64 (non restreintes par le descripteur) |
Systèmes hôtes certifiés : RHEL 8/9/10, Rocky Linux 8/9/10, AlmaLinux 8/9/10, Oracle Linux 8/9, CentOS Stream 9/10, Ubuntu 22.04/24.04, Debian 12, Arch Linux (rolling). Le contrôle préalable des hôtes accepte ces systèmes (une autre version d'une famille connue donne un avertissement, une version en fin de vie est refusée) et les architectures x86_64 et aarch64.
Prérequis
Hôte
Le descripteur ne déclare aucun contrôle préalable de l'hôte.
Programmes que les commandes et les contrôles du service lancent sur l'hôte, hors des racines gérées : les ajouter à allowed_commands de l'agent (voir Sécurité de l'agent Navin), sinon l'agent les refuse avec command_not_allowed : /usr/sbin/haproxy.
Réseau et ports
| Composant | Nom du port | Port | Ouvert dans le pare-feu de l'hôte |
|---|---|---|---|
haproxy | stats | 8404/tcp | oui |
haproxy | frontend | frontends[].bind_port/tcp | oui |
Paramètres du noyau
| Paramètre | Valeur |
|---|---|
net.core.somaxconn | 4096 |
net.ipv4.ip_nonlocal_bind | 1 |
Services et connexions nécessaires
Ce service n'a aucune dépendance.
Méthodes et modes d'installation
| Méthode | Défaut | Ce que la méthode utilise |
|---|---|---|
package | oui | les paquets système du descripteur, installés par le gestionnaire de paquets de l'hôte |
podman | - | les images de conteneur du descripteur, exécutées par Podman sous systemd |
Composants
| Composant | Type | Méthodes d'installation | Ports |
|---|---|---|---|
HAProxy (haproxy) | maître | package, podman | 8404/tcp, frontends[].bind_port/tcp |
Unique (single) (par défaut)
Un seul répartiteur de charge.
Ce que le mode déploie :
| Composant | Placement |
|---|---|
haproxy | min 1, max 1 |
Paire active et de secours (pair)
Deux répartiteurs identiques qui partagent une IP virtuelle tenue par keepalived.
Ce que le mode déploie :
| Composant | Placement |
|---|---|
haproxy | min 2, max 2 |
Installer ce service
L'assistant d'installation du Navin Manager planifie, valide et exécute l'installation ; il faut la permission services:install sur le cluster.
-
Ouvrez l'assistant. Dans Clusters, choisissez l'action de ligne Installer des services du cluster cible. L'assistant s'ouvre sur sa première étape, Service.
-
Choisissez le service. À l'étape Service, sélectionnez HAProxy. La carte affiche la licence
GPL-2.0-or-later. Choisissez la Méthode parmipackage,podman(par défautpackage). -
Choisissez les hôtes et le mode. À l'étape Hôtes, cochez les hôtes, puis choisissez le Mode :
single(par défaut),pair. Chaque mode déploie les composants listés dans Méthodes et modes d'installation. -
Liaisons. Ce service n'a aucune dépendance : l'étape Liaisons n'a rien à lier.
-
Configurez. À l'étape Configuration, relisez les paramètres (voir Paramètres de configuration). Les mots de passe laissés vides avec une valeur générée par défaut sont générés et scellés par le Manager.
-
Relisez et installez. À l'étape Installation, le Manager valide le plan et affiche l'ordre d'installation ; quand il indique « Le plan est valide. Prêt pour l'installation. », choisissez Installer. Un mode hautement disponible n'est installé que si ses contrôles HA réussissent.
-
Vérifiez. L'opération se termine quand les contrôles de santé de chaque instance réussissent (voir Contrôles de santé) ; le service apparaît alors en marche dans Services.
Haute disponibilité
| Cluster | réplicas (replication) |
| Haute disponibilité | externe (external) |
| Bascule | IP virtuelle (vip) |
| Réplication | aucun (none) |
| Quorum | VRRP (vrrp) |
| Découverte | statique (static) |
| Point d'entrée | IP virtuelle (vip) |
| Documentation officielle | https://docs.haproxy.org/3.2/configuration.html |
Prérequis
| Prérequis | Doit être hautement disponible | Modes | Description |
|---|---|---|---|
| keepalived | oui | pair | keepalived sur les deux mêmes hôtes déplace l'IP virtuelle (VRRP). |
Topologie par mode
| Modes | Niveau le plus haut du catalogue | Répartition | Composant du quorum | Domaines de panne | Description |
|---|---|---|---|---|---|
single | autonome (standalone) | unique (single) | - | 1 | Un répartiteur : un point de défaillance unique. |
pair | ha (ha) | actif-passif (active-passive) | - | 2 | Deux répartiteurs identiques ; keepalived porte l'IP virtuelle sur l'un des deux. |
Remarques
- HAProxy ne partage pas son état entre les deux instances : les connexions en cours sur l'instance perdue sont coupées, les clients se reconnectent par l'IP virtuelle.
Paramètres de configuration
Routage
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Frontaux et serveurs (frontends) | json | [] | - | non | non | non | Liste de {name, bind_port, mode http|tcp, backend {balance, check_path, servers [hôte:port]}} ; un frontal par entrée, dont le bind_port est publié sur l'hôte. Avec la méthode podman, 127.0.0.1 dans servers désigne le conteneur lui-même : indiquez l'adresse de l'hôte. |
Port des statistiques (stats_port) | port | 8404 | - | non | non | non | Port de la page de statistiques, de /health et des métriques Prometheus /metrics. |
Réglages
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Connexions maximales (maxconn) | int | 20000 | min 256, max 1000000 | non | non | oui | Limite globale de connexions. |
Délai client (timeout_client) | duration | 300s | - | non | non | non | Délai d'inactivité côté client (long pour les réponses en flux). |
Délai serveur (timeout_server) | duration | 300s | - | non | non | non | Délai d'inactivité côté serveur. |
Sécurité
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Utilisateur des statistiques (stats_user) | string | navin-stats | - | non | non | non | Identifiant de la page de statistiques (stats auth) ; /health et /metrics restent ouverts aux sondes. |
Mot de passe des statistiques (stats_password) | password | généré | - | non | oui | non | Mot de passe de la page de statistiques, généré à chaque installation et conservé dans le coffre du Manager. |
TLS (tls_enabled) | bool | false | - | non | non | oui | Servir la page de statistiques, /health et /metrics en TLS avec un certificat émis par l'autorité de la console (le certificat et sa clé sont réunis au démarrage dans un fichier 0600 du répertoire d'exécution, la forme que lit HAProxy). |
Points d'accès
| Point d'accès | Schéma | Composant | Port | Chemin | Paramètre TLS | Paramètres de liaison | Secrets de liaison | Commande de provisionnement |
|---|---|---|---|---|---|---|---|---|
stats | http | haproxy | 8404 (stats_port) | - | tls_enabled | - | - | - |
Commandes
| Commande | Composant | Cible | Description |
|---|---|---|---|
Valider la configuration (validate) | haproxy | tous les hôtes | Exécute haproxy -c sur la configuration générée. |
Recharger (reload) | haproxy | tous les hôtes | Recharge la configuration sans couper les connexions. |
Contrôles de santé
Vivacité (par instance)
| Composant | Contrôle | Détails |
|---|---|---|
haproxy | HTTP {{ ('https://' ~ host.fqdn) if config.tls_enabled else ('http://' ~ (host.ip or '127.0.0.1')) }}:{{ config.stats_port }}/health | Attendu 200 ; 20 tentatives ; intervalle 1 s ; délai 3 s |
Contrôles préalables
| Contrôle | Type | Signification | Sévérité | Composants |
|---|---|---|---|---|
stats_port_free | port_free {"param": "stats_port"} | port 8404 libre sur l'hôte | bloquant | tous les composants |
Désinstallation
Chemins supprimés quand les données sont purgées : {{ paths.log }}.
Liens rapides
- Statistiques :
{{ 'https' if config.tls_enabled else 'http' }}://{{ host.fqdn }}:{{ config.stats_port }}/stats
Documentation amont
- Site : https://www.haproxy.org
- Sources : https://github.com/haproxy/haproxy
- Haute disponibilité : https://docs.haproxy.org/3.2/configuration.html