TP HAproxy

I. Objectif 

L'objectif de ce TP est d'apprendre à configurer un Load Balancer HAProxy pour répartir la charge sur deux serveurs web. Vous allez d'abord configurer HAProxy pour balancer la charge de manière classique, puis, dans un second temps, vous ajusterez la configuration pour répartir la charge à 1/3 sur un serveur et 2/3 sur l'autre. 

Vous mettrez également en place une page de statistiques pour monitorer l'état des serveurs via HAProxy.

II. Contexte 

A. Présentation

Votre entreprise dispose de deux serveurs web pour héberger un site en production. Afin d'améliorer la disponibilité et les performances, vous avez décidé de mettre en place un Load Balancer avec HAProxy. Le rôle du Load Balancer est de distribuer les requêtes vers les deux serveurs pour éviter la surcharge d'un seul serveur.

Les adresses IP des serveurs web sont les suivantes :

Vous devez donc configurer HAProxy pour :

  1. Répartir les requêtes entre les deux serveurs de manière équilibrée.
  2. Mettre en place une page de statistiques pour monitorer vos serveurs.
  3. Ajuster la répartition de la charge pour que :

B. Matériel utilisé 

Pour faire ce TP nous utiliserons des machines virtuelles :

III. Schéma réseau

image.png

IV. Installation de HAproxy

Commençons par mettre à jour le système 

su -
apt update && apt upgrade -y

Vous pourrez ensuite installer HAproxy à l'aide de cette commande 

apt install haproxy -y

Une fois l'installation terminée, démarrez HAProxy et activez-le pour qu'il se lance automatiquement au démarrage :

systemctl start haproxy
systemctl enable haproxy

Pour vous assurer que HAProxy fonctionne correctement, vous pouvez vérifier le statut du service avec la commande :

systemctl status haproxy

Si tout est correctement installé, vous verrez un message indiquant que le service est actif et en cours d'exécution.

image.png

Documentation officielle

Si vous souhaitez consulter la documentation officielle de HAProxy pour des informations supplémentaires ou des configurations avancées, vous pouvez la trouver ici :

V. Mise en place de la page de statistiques

Nous allons configurer une page de statistiques via le HAproxy, pour surveiller nos serveurs et le trafic réseau.

A. Page de statistique

Editer le fichier de configuration de HAproxy : Le fichier de configuration HAProxy se trouve généralement à cette adresse : /etc/haproxy/haproxy.cfg

nano /etc/haproxy/haproxy.cfg

Ajoutez la section pour la page de statistiques : joutez la configuration suivante dans le fichier, généralement après la section frontend et backend, ou dans la section listen si vous en avez déjà une.

listen stats
    bind 127.0.0.1:8080            # La page de statistiques sera accessible sur localhost:8080
    stats enable                   # Active la page de statistiques
    stats uri /haproxy?stats        # Définir l'URI pour accéder aux statistiques
    stats refresh 10s               # Rafraîchir les statistiques toutes les 10 secondes
    stats realm HAProxy\ Statistics # Texte affiché dans la fenêtre d'authentification
    stats auth admin:password       # Nom d'utilisateur et mot de passe pour accéder à la page (modifier ces valeurs)
    stats admin if TRUE             # Permet d’accéder aux fonctions administratives (redémarrage des serveurs, etc.)

Redémarrer le HAproxy

systemctl restart haproxy

Si votre machine Debian n'a pas d'interface web vous pouvez tester la page de statistiques à partir de la ligne de commande grâce à cette commande :

apt install curl
curl -u admin:password http://localhost:8080/haproxy?stats

Cela vous permettra de voir l'état des serveurs et des statistiques réseau.

Vous pouvez ensuite modifier votre fichier de configuration pour avoir accès à la page de statistiques sur toutes les cartes réseaux en modifiant la ligne deux.

listen stats
    bind *:8080            # La page de statistiques sera accessible sur localhost:8080
    stats enable                   # Active la page de statistiques
    stats uri /haproxy?stats        # Définir l'URI pour accéder aux statistiques
    stats refresh 10s               # Rafraîchir les statistiques toutes les 10 secondes
    stats realm HAProxy\ Statistics # Texte affiché dans la fenêtre d'authentification
    stats auth admin:password       # Nom d'utilisateur et mot de passe pour accéder à la page (modifier ces valeurs)
    stats admin if TRUE             # Permet d’accéder aux fonctions administratives (redémarrage des serveurs, etc.)

Aller sur votre navigateur web préféré et entrez le lien suivant pour tester la page de statistique 

http://[adresse_ip_de_votre_serveur_HAProxy]:8080/haproxy?stats

Cette page s'affiche :

image.png

B. Ajout des deux serveurs web

Nous allons maintenant ajouter nos deux serveurs web sur la page de statistiques, pour ce faire ajouter ces lignes à votre fichier de configuration en n'oubliant pas de changer les ip et mettre celle de vos machines (ligne 36 et 37)

global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDH>
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

# Section backend - Répartition de charge entre les deux serveurs
backend http_back
    balance roundrobin             # Utilisation de la méthode round-robin pour la répartition
    option httpchk                 # Vérification que les serveurs sont actifs

    # Serveur Web 1 avec un poids de 1 (1/2 des requêtes)
    server web1 192.168.1.40:80 check weight 1

    # Serveur Web 1 avec un poids de 1 (1/2 des requêtes)
    server web2 192.168.1.41:80 check weight 1

# Configuration de la page de statistiques HAProxy
listen stats
    bind *:8080  # Accessible uniquement depuis localhost
    mode http
    log global

    # URL d'accès à la page de statistiques
    stats enable
    stats uri /haproxy?stats

    # Protection par mot de passe
    stats auth utilisateur:motdepasse

    # Options supplémentaires pour la page de statistiques
    stats hide-version          # Ne pas afficher la version d'HAProxy
    stats refresh 10s           # Rafraîchissement automatique toutes les 10 secondes

Redémarrer le HAproxy

systemctl restart haproxy

Retourner sur votre page web et vous pouvez voir que vos serveurs ont été ajouter avec succès

image.png

VI. Test de la configuration

A. Répartition de la charge

Les serveurs web devrait se répartir la charge à part égale c'est à dire :

Nous envoyons ensuite des requêtes à nos serveurs web (pour être précis quatre) grâce à la commande "curl"

curl http://127.0.0.1/

Nous pouvons voir les valeurs 0 dans la colonne "Sessions" > "Total

image.png

Dans les mêmes colonnes vu précédemment, nous pouvons voir que la répartition de charge s'effectue bien deux pour le serveur web 2 et deux pour le serveur web 1.

image.png

B. Ajustement de la répartition de la charge

Modifier la configuration pour que les serveurs web se répartissent la charge :

Voici la nouvelle configuration :

global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA256
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

# Section backend - Répartition de charge entre les deux serveurs
backend http_back
    balance roundrobin             # Utilisation de la méthode round-robin pour la répartition
    option httpchk                 # Vérification que les serveurs sont actifs

    # Serveur Web 1 avec un poids de 1 (1/3 des requêtes)
    server web1 192.168.1.40:80 check weight 1

    # Serveur Web 2 avec un poids de 2 (2/3 des requêtes)
    server web2 192.168.1.41:80 check weight 2

# Configuration de la page de statistiques HAProxy
listen stats
    bind *:8080  # Accessible uniquement depuis localhost
    mode http
    log global

    # URL d'accès à la page de statistiques
    stats enable
    stats uri /haproxy?stats

    # Protection par mot de passe
    stats auth utilisateur:motdepasse

    # Options supplémentaires pour la page de statistiques
    stats hide-version          # Ne pas afficher la version d'HAProxy
    stats refresh 10s           # Rafraîchissement automatique toutes les 10 secondes

Nous pouvons voir les valeurs 0 dans la colonne "Sessions" > "Total

image.png

Nous envoyons ensuite des requêtes à nos serveurs web (pour être précis quatre) grâce à la commande "curl"

curl http://127.0.0.1/

image.png

Dans les mêmes colonnes vu précédemment, nous pouvons voir que la répartition de charge s'effectue bien trois pour le serveur web 2 et une seule pour le serveur web 1.


Révision #12
Créé 26 septembre 2024 07:02:39 par Clément Ménier
Mis à jour 26 septembre 2024 17:30:34 par Clément Ménier