Formation
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.
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
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 :
/var/lib/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 :
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.
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 :
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é.
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.
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 :
-c
permets de spécifier que l'on souhaite vérifier un fichier de configuration,-v
permets d'afficher en mode verbose, qui permets de fournir des détails supplémentaires, notamment les erreurs du fichier de configuration,-f
permets de spécifier le fichier de configuration HAProxy à testerOn oublie pas de reload le service HAProxy :
service haproxy reload
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 :
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 :