Debian 10 : Créer un proxy load-balancer HAProxy HTTP

Debian 10 : Créer un proxy load-balancer HAProxy HTTP

Encore un article ! En forme le bougre ! Aujourd’hui nous allons rapidement voir ensemble comment installer HAProxy pour réaliser du load-balancing de plusieurs sites web Apache2.

Ces derniers temps, j’ai eut besoin de mettre en place un proxy pour réaliser du load-balancing comprenant 3-4 sites web classiques tournant sous Apache2, et étant donné que je ne l’avais encore jamais expérimenté avant, j’ai dû me dépatouiller là-dedans… et le moins qu’on puisse dire, c’est que les tutoriels en français parlant d’HAProxy ne sont pas légions (la plupart date d’il y a plusieurs années, et donc la config n’est pas forcément fonctionnelle, ou bien les autres tutos sont en anglais).

Me voilà donc ici : je vais vous expliquer rapidement comment installer un serveur HAProxy et réaliser du load-balancing de deux sites Apache2 en back-end. Alors, de prime abord tout ces termes ont l’air peut être compliqués, mais ne vous en faites pas, je vais vous résumer ça comme d’habitude 😉

1) Proxy, load-balancing, backend, frontend…

Tout d’abord, on va détailler chaque terme puis on verra ensuite pourquoi un load-balancer est utile et enfin pourquoi choisir HAProxy.

  • Proxy : je ne vais pas détailler ici car j’ai déjà fait un post qui en parle, juste ;
  • Load-balancing : répartition de charges en français, là c’est de suite plus parlant ! C’est un méchanisme permettant de distribuer la
    charge ;
  • Front-end : Le front-end est composé des serveurs qui vont reçevoir les connexions en premier, typiquement notre ou nos load-balancer justement ;
  • Back-end : ce sont les serveurs qui vont reçevoir le trafic en second, typiquement les serveurs web ;

Un peu plus clair du coup ? Et donc, l’avantage d’avoir un load-balancer, c’est de justement faire du load-balancing, et oui ! Imaginez que vous avez un site à forte affluence, et que vous n’avez qu’un seul serveur… bonne channce car celui-ci risque de flancher assez vite ! Avec un load-balancer, celui-ci va récupérer tout le trafic et le dispatcher sur plusieurs serveurs web, où votre site sera hébergé. De cette manière, la charge est moins lourde.

Vient ensuite la question d’HAProxy. Pourquoi lui ? Car c’est tout simplement le plus connu (rien de foufou ici). Pour reprendre un article de linuxfr.org :

HAProxy est une solution libre, fiable et très performante de répartition de charge de niveau 4 (TCP) et 7 (HTTP). Elle est particulièrement adaptée aux sites web fortement chargés qui nécessitent de la persistance ou du traitement au niveau 7.

La fiabilité est l’un, sinon le point fort d’HAProxy. Il est par exemple utilisé par des sociétés apparaissant au classement Fortune 500 pour servir des millions de pages chaque jour.

Cette fiabilité ne s’est pas faite au détriment des performances : HAProxy requiert peu de ressources, et son architecture évènementielle mono-processus lui permet facilement de gérer plusieurs milliers de connexions simultanées sur plusieurs relais sans effondrer le système.

Bien, désormais vu que tout est clair pour vous, un rapide schéma puis on s’attèle à l’installation (rapide et simple) de tout ça !

2) Installation des deux serveurs web Apache

Ici rien d’incroyable, il nous suffit de l’installer via un petit apt install apache et le tour est joué. Vous pouvez éventuellement modifier le fichier /var/www/html/index.html pour renseigner par exemple « SRV-01 / SRV-02 » selon le serveur et ainsi voir par la suite si le load-balancing est fonctionnel.

Dans mon cas, je vais simplement modifier mon fichier hosts pour y renseigner l’adresse IP de mon proxy, car tout ceci est fait dans mon réseau local :

On fait de même pour le serveur web-02.

3) Installation du load-balancer HAProxy

Ici, on installe haproxy via un classique apt install haproxy, puis on se rend dans /etc/haproxy/ pour modifier le fichier de config de base comme suit :

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

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

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        # An alternative list with additional directives can be obtained from
        #  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
        ssl-default-bind-options no-sslv3

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

# On défini la partie frontend
frontend frontend-base
        # On défini l'IP et le port sur lequel va écouter le proxy
        bind 192.168.1.100:80
        # On indique le nom de la partie backend dispo plus bas
        default_backend    backend-base
        # On active le fait de ne pas forward les requêtes avec l'IP du
        # proxy mais avec l'IP du ou des clients
        option             forwardfor

# On défini la partie backend
backend backend-base
        # On utilise la méthode roundrobin pour le loadbalancing
        balance            roundrobin
        # On défini les serveurs qui sont en backend
        server             web-01 192.168.1.110:80 check
        server             web-02 192.168.1.120:80 check

Donc concrètement, on rajoute simplement un bout de config en fin du fichier de config, et il ne vous reste plus qu’à lire les commentaires 😁

Une fois fait, un petit /etc/init.d/haproxy restart et on peut directement tester la chose !

Un petit coup de F5 :

Et bien voilà, vous avez installé et configuré votre premier load-balancer via HAProxy ! Alors bien entendu tout cela est très sommaire, nous n’avons pas vu comment rajouter certaines règles précises ou encore comment forwarder le trafic HTTPS, mais tout ceci sera l’objet d’un prochain article !

Laisser un commentaire