Création du premier Load-Balancer

Formation

Tutorial Thumbnail

Intéressons nous plus en détails du fichier de configuration principal de HAProxy qui est haproxy.cfg. Ce fichier permets de configurer l'ensemble des éléments Backend & Frontend. Le fichier de configuration HAProxy se compose de quatre parties de base qui sont global, default, frontend et backend. Ces quatre sections définissent comment le serveur doit fonctionner dans son ensemble, ses paramètres par défaut et comment HAProxy doit recevoir les demandes des clients et les acheminer vers les serveurs principaux.


Format d'un fichier de configuration

Lorsque HAProxy rencontre un mot-clé comme global ou defaults, une section démarre et toutes les lignes suivantes sont incluses jusqu'à ce qu'il atteigne un autre mot-clé dans la nouvelle section. Les lignes vides et l'indentation sont ignorées. Ainsi, la section globale continue jusqu'à ce que vous trouviez un mot clé par défaut sur sa propre ligne.


Prenons l'exemple d'un site Web que les internautes peuvent utiliser, tel que cosmotech.cf. Votre DMZ comprend deux serveurs Web Apache hébergeant les fichiers de ce site. Vous répartissez la charge sur les deux serveurs afin qu'ils reçoivent et répondent à tour de rôle aux requêtes. HAProxy est un proxy inverse qui se trouve devant deux serveurs Web et leur achemine les requêtes.


Au fur et à mesure que vous avancerez, vous en apprendrez plus sur les paramètres de configuration en lisant la documentation officielle. Regardons quelques lignes directrices importantes pour chaque section.


global      # Paramètres globaux
defaults    # Paramètres par défaut
frontend    # La partie Front-end qui accepte les demandes des clients
backend     # Serveurs en DMZ derrière HAProxy qui répondent aux demandes


La configuration "Global et "Defaults"

En haut du fichier de configuration HAProxy se trouve la section globale, identifiée par le mot clé global. Les paramètres dans l'indentation global définissent les réglages de sécurité et de performances à l'échelle du processus qui affectent HAProxy. Plus précisément, la section "global" est la première partie du fichier de configuration qui est la configuration du serveur de HAProxy, qui s'applique a lui même.


Par défaut, HAProxy fournit une configuration par défaut :

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


Explorons ensemble les différentes parties de la configuration :

  • log : fichiers journaux de HAProxy en binaire (contrairement à Apache2 ou Nginx, les fichiers journaux doit être lu avec un serveur Syslog !)
  • chroot : manière de sécuriser haproxy en chrootant dans /var/lib/haproxy ,
  • stats : activation du client/serveur Socket afin d'obtenir une interaction en direct des informations de HAProxy,
  • stats timeout : délais d'attente de la connexion Socket,
  • user & group : compte utilisateur qui lance le service HAProxy (l'équivalent du www-data),
  • daemon : faire tourner en tant que service en arrière plan,
  • ca-base & crt-base : certificats SSL/TLS de HAProxy.


La seconde section "defaults" s'applique si aucune configuration n'a été spécifié en Backend comme en Frontend :

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


Cette partie regroupe également plusieurs paramètres, à savoir :

  • log global : enregistre tous les journaux d'évènements globaux vers le serveur Syslog spécifié,
  • mode http : type de Load Balancing : soit TCP ou le HTTP,
  • option : enregistrement des requêtes HTTP dans les fichiers journaux,
  • dontlognull : ignorer dans les fichiers journaux les connexions ou requêtes vides (NULL),
  • timeout connect : temps de connexion au serveur cible, en partant du serveur vers une ressource distante,
  • timeout client : temps de connexion de la machine cliente (côté navigateur Web),
  • timeout server : temps de réponse du serveur en retour d'informations : une fois que le serveur a envoyé une requête et reçois certaines informations de la part de la ressource distante, il s'agit du temps de retour.

L’utilisation de la section defaults présent l'avantage de réduire la duplication de paramètres. En effet, si plusieurs Backend ou Frontend ont besoin d'appliquer plusieurs fois le même paramètres, dans ce cas la partie default aura pour rôle d'ajouter sa configuration, s’appliquant à toutes les sections frontend et backend qui viennent par la suite. Vous pouvez toujours remplacer ces paramètres, bien évidemment dans les sections spécifiques.


La notion du Frontend & Backend

Depuis le début de cette formation, nous avons parlé ensemble de la notion du Backend et du Frontend. Penchons-nous sur les deux éléments les plus importants de HAProxy :


Le Frontend

Plus particulièrement, le Frontend symbolise la ressource qui sera directement accessible à l'utilisateur final (depuis un navigateur Web par exemple). Dans ce cas technique, le Frontend représente notre serveur Reverse Proxy HAProxy. Ce dernier écoute toutes les adresses qui correspondent à une configuration enregistrée sur le reverse-proxy.


Voici un exemple de configuration simple d'un Frontend :

frontend comsotech_cf_front
      bind *:80
      default_backend cosmotech_cf


Cette configuration est organisée de la manière suivante :

frontend cosmotech_cf_front : configuration d'un frontend portant le nom "cosmotech_cf_front"

bind *:80 : HAProxy écoute toutes les adresses IP afin de faire correspondre la configuration du Frontend. Il est tout à fait possible de spécifier une @IP particulière à la place de l'astérisque.

default_backend cosmotech_cf : redirection du trafic Frontend vers la ressource Backend positionnée derrière HAProxy pour le frontend "cosmotech_cf_front". HAProxy renverra une erreur 503 Service indisponible si aucune ressource n'a été renseigné.


Le Backend

Une fois la partie Frontend configurée, il ne reste plus qu'à configurer la partie Backend qui permettra au serveur HAProxy de rediriger tous les paquets IP entrants à destination de la ressource interne. Cette partie de configuration permets de créer de donner au lien Frontend les différentes ressources derrières le serveur HAProxy.


Voici un exemple de la configuration Backend :

backend cosmotech_cf
   server deb11_apache1 10.19.0.55:80


Cette partie de configuration Backend, qui se nomme cosmotech_cf, permets de donner accès à la ressource interne derrière le serveur HAProxy pour une configuration de type Frontend. Nous avons donné accès à un seul serveur sans répartition de charge, pour le moment. Dans notre exemple, cette partie Backend est la configuration pour le Frontend comsotech_cf_front pour l'adresse default_backend cosmotech_cf.


Tester et appliquer sa configuration HAProxy

Dans le cas où vous souhaitez appliquer la configuration que vous avez renseigné dans le fichier de configuration haproxy.cfg, il est important de vérifier si la configuration est conforme à HAProxy, évitant ainsi tout erreur de syntaxe par exemple. Il existe pour cela une commande intégrée qui permets de vérifier le fichier de configurations passé en paramètre :

haproxy -c -v -f /etc/haproxy/haproxy.cfg


Les arguments passés en paramètres sont les suivants :

  • L'option -c permets de spécifier que l'on souhaite vérifier un fichier de configuration,
  • L'option -v permets d'afficher en mode verbose, qui permets de fournir des détails supplémentaires, notamment les erreurs du fichier de configuration,
  • L'option -f permets de spécifier le fichier de configuration HAProxy à tester


On oublie pas de reload le service HAProxy :

service haproxy reload


Créer son premier Load Balancer

Pour la création de notre premier Load Balancer, cela est assez simple dans un premier temps. Il suffit d'effectuer la liste des serveurs Web à ajouter dans le "Pool de serveurs" dans la configuration Backend associé à un Frontend et de préciser le type du Balancer :


Ici, nous avons ajouté un mode de répartition de charge de type "round robin" :

balance roundrobin


L’algorithme d’équilibrage de charge utilisé détermine quel serveur, dans un backend, sera sélectionné lors de l’équilibrage de charge. HAProxy offre plusieurs options pour les algorithmes. En plus de l’algorithme d’équilibrage de charge, un paramètre de poids peut être attribué aux serveurs pour manipuler la fréquence à laquelle le serveur est sélectionné, par rapport à d’autres serveurs.


Quelques-uns des algorithmes couramment utilisés sont les suivants :

  • roundrobin : Le mode "Round Robin" sélectionne les serveurs à tour de rôle. Il s’agit de l’algorithme par défaut.
  • leastconn : Sélectionne le serveur avec le moins de connexions. Ceci est recommandé pour les sessions plus longues. Les serveurs du même backend sont également tournés de manière circulaire.
  • source : Cela sélectionne le serveur à utiliser en fonction d’un hachage de l’adresse IP source à partir de laquelle les utilisateurs font des demandes. Cette méthode garantit que les mêmes utilisateurs se connecteront aux mêmes serveurs.


Cette configuration permets d'alterner, chacun son tour, la répartition de la charge réseau. Il est possible de spécifier autant de serveurs de ressources de nécessaire avec l'attribut "server <NOM> <IP>".

server srv1 1.2.3.4


Voici un exemple de configuration Backend avec répartition de charge :

backend cosmotech.cf
   balance roundrobin
   server deb11_apache1 10.19.0.55:80
   server deb11_apache2 10.19.0.56:80



On oublie pas de vérifier la configuration et de reloader HAProxy (avec service haproxy reload), puis en se rendant sur l'adresse IP du serveur HAProxy en HTTP :


Niveau Débutant

Technologie utilisée :

Proposer une modification
Antoine
Par Antoine
Rédigé le Samedi 01 Octobre 2022