« Load Balancer » : différence entre les versions

De Travail-Ivan 2
Page créée avec « = Load Balancer = == Introduction == Un Load Balancer est un composant essentiel dans une architecture Haute Disponibilité (HA). Son rôle principal est de répartir la charge entre différents services actifs. === Niveaux de répartition === La répartition peut s'effectuer à différents niveaux du modèle OSI : * '''Niveau 4''' : Niveau TCP, répartition au niveau du port * '''Niveau 7''' : Répartition de charge applicative (principalement HTTP) == Types... »
 
Aucun résumé des modifications
 
Ligne 2 : Ligne 2 :


== Introduction ==
== Introduction ==
Un Load Balancer est un composant essentiel dans une architecture Haute Disponibilité (HA). Son rôle principal est de répartir la charge entre différents services actifs.
Un Load Balancer est un composant essentiel dans une architecture Haute Disponibilité (HA) qui permet de distribuer la charge entre plusieurs serveurs.


=== Niveaux de répartition ===
== Configuration HAProxy ==
La répartition peut s'effectuer à différents niveaux du modèle OSI :
* '''Niveau 4''' : Niveau TCP, répartition au niveau du port
* '''Niveau 7''' : Répartition de charge applicative (principalement HTTP)


== Types de Load Balancers ==
=== Structure de base du fichier de configuration ===
Le fichier de configuration HAProxy (<code>/etc/haproxy/haproxy.cfg</code>) est divisé en plusieurs sections :


=== Load Balancer Matériel ===
==== Frontend ====
Les load balancers peuvent se présenter sous forme d'équipements physiques dédiés.
<pre>
 
frontend apache_front
=== Load Balancer Logiciel ===
    bind *:80                              # Écoute sur toutes les interfaces sur le port 80
Plusieurs solutions logicielles sont disponibles :
    default_backend apache_backend_servers  # Définit le backend par défaut
* '''HAProxy''' : La référence en logiciel libre
    option forwardfor                      # Active la transmission de l'IP client aux serveurs backend
* '''Nginx''' : Spécialisé dans la partie HTTP
</pre>
* '''Traefik''' : Utilisé dans l'univers des conteneurs
 
== HAProxy ==
 
=== Présentation ===
HAProxy (http://www.haproxy.org/) est devenu une référence parmi les load balancers.
 
==== Fonctionnalités principales ====
* Load balancing Layer 4 (TCP) et Layer 7 (HTTP)
* Réécriture d'URL
* Limitation de débit
* Terminaison SSL/TLS
* Compression Gzip
* Vérification de santé
* Support HTTP/2
* Support API


=== Installation et Configuration ===
'''Explications des commandes frontend :'''
* '''Paquet''' : <code>haproxy</code>
* '''bind *:80''' : Définit l'interface et le port d'écoute. "*" signifie toutes les interfaces
* '''Fichier de configuration''' : <code>/etc/haproxy/haproxy.cfg</code>
* '''default_backend''' : Spécifie quel groupe de serveurs (backend) va recevoir le trafic
* '''option forwardfor''' : Ajoute l'en-tête X-Forwarded-For pour préserver l'IP du client d'origine


==== Exemple de configuration HAProxy ====
==== Backend ====
<pre>
<pre>
# Configuration du frontend
frontend apache_front
    bind *:80
    default_backend apache_backend_servers
    option forwardfor
# Configuration du backend
backend apache_backend_servers
backend apache_backend_servers
     balance roundrobin
     balance roundrobin                         # Algorithme de répartition de charge
     server backend01 192.168.10.11:80 check
     server backend01 192.168.10.11:80 check   # Définition du premier serveur
     server backend02 192.168.10.12:80 check
     server backend02 192.168.10.12:80 check   # Définition du deuxième serveur
</pre>
</pre>
'''Explications des commandes backend :'''
* '''balance roundrobin''' : Distribue les requêtes de manière égale entre les serveurs
* '''server [nom] [IP]:[port] check''' :
** '''nom''' : Nom unique pour identifier le serveur
** '''IP:port''' : Adresse IP et port du serveur backend
** '''check''' : Active la vérification de santé du serveur


==== Interface de statistiques ====
==== Interface de statistiques ====
<pre>
<pre>
listen stats
listen stats
     bind 192.168.0.4:8181
     bind 192.168.0.4:8181                 # Port d'écoute pour l'interface de stats
     stats enable
     stats enable                           # Active les statistiques
     stats hide-version
     stats hide-version                     # Masque la version de HAProxy
     stats refresh 30s
     stats refresh 30s                     # Rafraîchit les stats toutes les 30 secondes
     stats show-node
     stats show-node                       # Affiche le nom du nœud
     stats auth admin:admin@123
     stats auth admin:admin@123             # Définit les identifiants d'accès
     stats uri /stats
     stats uri /stats                      # Définit l'URL d'accès aux stats
</pre>
</pre>


== Nginx comme Load Balancer ==
'''Explications des commandes stats :'''
* '''bind''' : Définit l'adresse IP et le port pour accéder à l'interface de statistiques
* '''stats enable''' : Active l'interface de statistiques
* '''stats hide-version''' : Mesure de sécurité pour cacher la version de HAProxy
* '''stats refresh''' : Définit l'intervalle de rafraîchissement automatique
* '''stats auth''' : Configure l'authentification (format: utilisateur:mot_de_passe)
* '''stats uri''' : Définit le chemin URL pour accéder aux statistiques


=== Configuration ===
== Configuration Nginx ==
Fichier de configuration : <code>/etc/nginx/nginx.conf</code>


==== Exemple de configuration Nginx ====
=== Configuration du Load Balancer Nginx ===
<pre>
<pre>
http {
http {
     upstream backend1 {
     upstream backend1 {
         server 192.168.0.1;
         server 192.168.0.1;               # Premier serveur backend
         server 192.168.0.2;
         server 192.168.0.2;               # Deuxième serveur backend
         server 192.168.0.3;
         server 192.168.0.3;               # Troisième serveur backend
     }
     }
      
      
     server {
     server {
         listen 80;
         listen 80;                         # Port d'écoute
         location / {
         location / {
             proxy_pass http://backend1;
             proxy_pass http://backend1;   # Redirection vers le groupe de serveurs
         }
         }
     }
     }
Ligne 89 : Ligne 77 :
</pre>
</pre>


== Bonnes pratiques ==
'''Explications des commandes Nginx :'''
 
* '''upstream''' : Définit un groupe de serveurs
=== Gestion des en-têtes HTTP ===
** '''server''' : Déclare chaque serveur backend du groupe
Pour garantir une traçabilité correcte des clients dans les logs :
* '''server { }''' : Bloc de configuration du serveur virtuel
* '''listen''' : Définit le port d'écoute
* '''location''' : Configure le traitement des URL
* '''proxy_pass''' : Redirige les requêtes vers le groupe de serveurs upstream


==== Configuration HAProxy ====
== Configuration des en-têtes HTTP ==
Ajouter : <code>option forwardfor</code>


==== Configuration Apache ====
=== Apache avec module RemoteIP ===
Configuration du module RemoteIP :
<pre>
<pre>
RemoteIPHeader X-Forwarded-For
RemoteIPHeader X-Forwarded-For
Ligne 104 : Ligne 93 :
</pre>
</pre>


=== Éviter le SPOF ===
'''Explications des commandes Apache :'''
* Mettre en place une redondance du Load Balancer (Actif/Passif)
* '''RemoteIPHeader''' : Spécifie l'en-tête contenant l'IP client réelle
* Utiliser une IP Virtuelle (IPVS) pour la bascule automatique
* '''RemoteIPInternalProxy''' : Définit la plage d'adresses IP de confiance (load balancers)
 
== Bonnes pratiques de configuration ==
 
=== Sécurité ===
* Toujours définir des timeouts appropriés
* Limiter l'accès à l'interface de statistiques
* Utiliser HTTPS pour le trafic sensible
* Configurer des health checks pertinents
 
=== Haute disponibilité ===
* Configurer la redondance du Load Balancer en mode Actif/Passif
* Utiliser une IP Virtuelle (IPVS) pour la bascule transparente
* Mettre en place une surveillance des ressources système
 
=== Maintenance ===
* Documenter toutes les modifications de configuration
* Tester les configurations avant mise en production avec <code>haproxy -c -f /etc/haproxy/haproxy.cfg</code>
* Maintenir des sauvegardes des configurations fonctionnelles

Dernière version du 7 novembre 2024 à 23:20

Load Balancer

Introduction

Un Load Balancer est un composant essentiel dans une architecture Haute Disponibilité (HA) qui permet de distribuer la charge entre plusieurs serveurs.

Configuration HAProxy

Structure de base du fichier de configuration

Le fichier de configuration HAProxy (/etc/haproxy/haproxy.cfg) est divisé en plusieurs sections :

Frontend

frontend apache_front
    bind *:80                               # Écoute sur toutes les interfaces sur le port 80
    default_backend apache_backend_servers   # Définit le backend par défaut
    option forwardfor                       # Active la transmission de l'IP client aux serveurs backend

Explications des commandes frontend :

  • bind *:80 : Définit l'interface et le port d'écoute. "*" signifie toutes les interfaces
  • default_backend : Spécifie quel groupe de serveurs (backend) va recevoir le trafic
  • option forwardfor : Ajoute l'en-tête X-Forwarded-For pour préserver l'IP du client d'origine

Backend

backend apache_backend_servers
    balance roundrobin                          # Algorithme de répartition de charge
    server backend01 192.168.10.11:80 check    # Définition du premier serveur
    server backend02 192.168.10.12:80 check    # Définition du deuxième serveur

Explications des commandes backend :

  • balance roundrobin : Distribue les requêtes de manière égale entre les serveurs
  • server [nom] [IP]:[port] check :
    • nom : Nom unique pour identifier le serveur
    • IP:port : Adresse IP et port du serveur backend
    • check : Active la vérification de santé du serveur

Interface de statistiques

listen stats
    bind 192.168.0.4:8181                  # Port d'écoute pour l'interface de stats
    stats enable                           # Active les statistiques
    stats hide-version                     # Masque la version de HAProxy
    stats refresh 30s                      # Rafraîchit les stats toutes les 30 secondes
    stats show-node                        # Affiche le nom du nœud
    stats auth admin:admin@123             # Définit les identifiants d'accès
    stats uri /stats                       # Définit l'URL d'accès aux stats

Explications des commandes stats :

  • bind : Définit l'adresse IP et le port pour accéder à l'interface de statistiques
  • stats enable : Active l'interface de statistiques
  • stats hide-version : Mesure de sécurité pour cacher la version de HAProxy
  • stats refresh : Définit l'intervalle de rafraîchissement automatique
  • stats auth : Configure l'authentification (format: utilisateur:mot_de_passe)
  • stats uri : Définit le chemin URL pour accéder aux statistiques

Configuration Nginx

Configuration du Load Balancer Nginx

http {
    upstream backend1 {
        server 192.168.0.1;                # Premier serveur backend
        server 192.168.0.2;                # Deuxième serveur backend
        server 192.168.0.3;                # Troisième serveur backend
    }
    
    server {
        listen 80;                         # Port d'écoute
        location / {
            proxy_pass http://backend1;    # Redirection vers le groupe de serveurs
        }
    }
}

Explications des commandes Nginx :

  • upstream : Définit un groupe de serveurs
    • server : Déclare chaque serveur backend du groupe
  • server { } : Bloc de configuration du serveur virtuel
  • listen : Définit le port d'écoute
  • location : Configure le traitement des URL
  • proxy_pass : Redirige les requêtes vers le groupe de serveurs upstream

Configuration des en-têtes HTTP

Apache avec module RemoteIP

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 10.108.0.0/14

Explications des commandes Apache :

  • RemoteIPHeader : Spécifie l'en-tête contenant l'IP client réelle
  • RemoteIPInternalProxy : Définit la plage d'adresses IP de confiance (load balancers)

Bonnes pratiques de configuration

Sécurité

  • Toujours définir des timeouts appropriés
  • Limiter l'accès à l'interface de statistiques
  • Utiliser HTTPS pour le trafic sensible
  • Configurer des health checks pertinents

Haute disponibilité

  • Configurer la redondance du Load Balancer en mode Actif/Passif
  • Utiliser une IP Virtuelle (IPVS) pour la bascule transparente
  • Mettre en place une surveillance des ressources système

Maintenance

  • Documenter toutes les modifications de configuration
  • Tester les configurations avant mise en production avec haproxy -c -f /etc/haproxy/haproxy.cfg
  • Maintenir des sauvegardes des configurations fonctionnelles