La traduction de l'article a été préparée en prévision du lancement du cours

La répartition de charge est une solution courante pour le dimensionnement horizontal des applications web sur plusieurs hÎtes tout en fournissant aux utilisateurs un point d'accÚs unique au service. est l'un des logiciels de répartition de charge les plus populaires et open source, offrant également une haute disponibilité et des fonctionnalités de proxy.
HAProxy vise Ă optimiser l'utilisation des ressources, Ă maximiser le dĂ©bit, Ă minimiser le temps de rĂ©ponse et Ă Ă©viter la surcharge de chaque ressource individuelle. Il peut ĂȘtre installĂ© sur de nombreuses distributions Linux, telles que CentOS 8, que nous aborderons dans ce guide, ainsi que sur des systĂšmes et .

HAProxy est particuliÚrement adapté aux sites web à trÚs fort trafic et est donc souvent utilisé pour améliorer la fiabilité et les performances des configurations de services web à plusieurs serveurs. Ce guide décrit les étapes pour configurer HAProxy en tant que répartiteur de charge sur un hÎte cloud CentOS 8, qui dirige ensuite le trafic vers vos serveurs web.
Pour obtenir les meilleurs résultats, vous devez disposer d'au moins deux serveurs web et d'un serveur de répartition de charge. Les serveurs web doivent exécuter au moins un service web de base, tel que nginx ou httpd, afin de pouvoir vérifier la répartition de charge entre eux.
Installation de HAProxy sur CentOS 8
Ătant donnĂ© que HAProxy est une application Ă code source ouvert en rapide Ă©volution, la distribution disponible dans les dĂ©pĂŽts standards de CentOS peut ne pas ĂȘtre la version la plus rĂ©cente. Pour connaĂźtre la version actuelle, exĂ©cutez la commande suivante :
sudo yum info haproxyHAProxy propose toujours trois versions stables : les deux derniÚres versions prises en charge et une troisiÚme version plus ancienne qui reçoit toujours des mises à jour critiques. Vous pouvez toujours vérifier la derniÚre version stable sur le site d'HAProxy, puis décider avec quelle version vous souhaitez travailler.
Dans ce guide, nous allons installer la derniÚre version stable 2.0, qui n'était pas encore disponible dans les dépÎts standard au moment de la rédaction du guide. Vous devrez l'installer depuis la source. Mais d'abord, vérifiez si vous remplissez les conditions nécessaires pour télécharger et compiler le programme.
sudo yum install gcc pcre-devel tar make -yTéléchargez le code source à l'aide de la commande ci-dessous. Vous pouvez vérifier s'il existe une version plus récente disponible sur .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gzUne fois le téléchargement terminé, décompressez les fichiers à l'aide de la commande ci-dessous :
tar xzvf ~/haproxy.tar.gz -C ~/Accédez au répertoire décompressé contenant les sources :
cd ~/haproxy-2.0.7Ensuite, compilez le programme pour votre systĂšme :
make TARGET=linux-glibcEt enfin, installez HAProxy :
sudo make installMaintenant, HAProxy est installé, mais certaines manipulations supplémentaires sont nécessaires pour son fonctionnement. Continuons la configuration du logiciel et des services ci-dessous.
Configuration de HAProxy pour votre serveur
Ajoutez maintenant les répertoires suivants et le fichier statistiques pour les entrées de HAProxy :
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/statsCréez un lien symbolique pour les fichiers exécutables, afin que vous puissiez exécuter les commandes HAProxy en tant qu'utilisateur normal :
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxySi vous souhaitez ajouter le proxy à votre systÚme en tant que service, copiez le fichier haproxy.init du dossier examples vers votre répertoire /etc/init.d. Modifiez les permissions du fichier pour que le script puisse s'exécuter, puis redémarrez le service systemd :
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reloadVous devez également autoriser le service à se redémarrer automatiquement au démarrage du systÚme :
sudo chkconfig haproxy onPour plus de commodité, il est également recommandé d'ajouter un nouvel utilisateur pour exécuter HAProxy :
sudo useradd -r haproxyAprÚs cela, vous pouvez vérifier à nouveau le numéro de la version installée à l'aide de la commande suivante :
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/Dans notre cas, la version doit ĂȘtre 2.0.7, comme indiquĂ© dans l'exemple de sortie ci-dessus.
Enfin, le pare-feu sur CentOS 8 est par défaut assez restrictif pour ce projet. Utilisez les commandes suivantes pour autoriser les services nécessaires et recharger le pare-feu :
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reloadConfiguration du répartiteur de charge
La configuration de HAProxy est un processus assez simple. En gros, tout ce que vous devez faire est d'informer HAProxy des connexions qu'il doit Ă©couter et oĂč il doit les retransmettre.
Cela se fait en créant un fichier de configuration /etc/haproxy/haproxy.cfg avec les paramÚtres définissants. Vous pouvez lire sur les options de configuration HAProxy , si vous voulez en savoir plus à ce sujet.
Répartition de charge au niveau de transport (couche 4)
Commençons par une configuration de base. Créez un nouveau fichier de configuration, par exemple, en utilisant vi avec la commande suivante :
sudo vi /etc/haproxy/haproxy.cfgAjoutez les sections suivantes au fichier. Remplacez server_name par ce qui doit appeler vos serveurs sur la page de statistiques, et private_ip par les adresses IP privées des serveurs vers lesquels vous souhaitez diriger le trafic web. Vous pouvez vérifier les adresses IP privées et sur l'onglet Réseau privé dans le menu Réseau.
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 checkCela définit le répartiteur de charge au niveau de transport (couche 4) avec le nom externe http_front, écoutant le port 80, qui dirige ensuite le trafic vers le backend par défaut nommé http_back. Des statistiques supplémentaires /haproxy?stats se connectent à la page de statistiques à l'adresse indiquée.
Différents algorithmes de répartition de charge.
La spécification des serveurs dans la section backend permet à HAProxy d'utiliser ces serveurs pour la répartition de charge en fonction de l'algorithme de round-robin lorsque c'est possible.
Les algorithmes de répartition de charge sont utilisés pour déterminer quel serveur du backend reçoit chaque connexion. Voici quelques options utiles :
- Roundrobin : chaque serveur est utilisé à son tour selon son poids. C'est l'algorithme le plus fluide et le plus équilibré, lorsque le temps de traitement des serveurs reste uniformément réparti. Cet algorithme est dynamique, ce qui permet d'ajuster le poids du serveur à la volée.
- Leastconn: un serveur avec le nombre de connexions le plus bas est sĂ©lectionnĂ©. Une itĂ©ration cyclique est effectuĂ©e entre les serveurs ayant la mĂȘme charge. L'utilisation de cet algorithme est recommandĂ©e pour les sessions longues, telles que LDAP, SQL, TSE, etc., mais il n'est pas trĂšs adaptĂ© pour les sessions courtes comme HTTP.
- Premier : le premier serveur avec des slots disponibles pour se connecter reçoit la connexion. Les serveurs sont choisis de l'identifiant numérique le plus bas au plus élevé, ce qui correspond par défaut à la position du serveur dans le parc. Une fois que le serveur atteint la valeur maxconn, le serveur suivant est utilisé.
- Source : L'adresse IP source est hachĂ©e et divisĂ©e par le poids total des serveurs en cours d'exĂ©cution afin de dĂ©terminer quel serveur recevra la demande. Ainsi, la mĂȘme adresse IP client sera toujours affectĂ©e au mĂȘme serveur, tant que les serveurs restent inchangĂ©s.
Configuration de l'équilibrage de charge au niveau de l'application (couche 7)
Une autre possibilitĂ© disponible est de configurer l'Ă©quilibreur de charge pour fonctionner au niveau de l'application (couche 7), ce qui est utile lorsque des parties de votre application Web sont rĂ©parties sur diffĂ©rents hĂŽtes. Cela peut ĂȘtre rĂ©alisĂ© en rĂ©gulant le passage de la connexion, par exemple, selon l'URL.
Ouvrez le fichier de configuration HAProxy avec un éditeur de texte :
sudo vi /etc/haproxy/haproxy.cfgEnsuite, configurez les segments frontend et backend conformément à l'exemple ci-dessous :
frontend http_front
bind *:80
stats uri \/haproxy?stats
acl url_blog path_beg \/blog
use_backend blog_back if url_blog
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
backend blog_back
server server_name3 private_ip3:80 checkLe frontend dĂ©clare une rĂšgle ACL nommĂ©e url_blog, qui s'applique Ă toutes les connexions avec des chemins commençant par \/blog. Use_backend dĂ©finit que les connexions correspondant Ă la condition url_blog doivent ĂȘtre traitĂ©es par le backend nommĂ© blog_back, tandis que toutes les autres requĂȘtes sont gĂ©rĂ©es par le backend par dĂ©faut.
Du cÎté backend, la configuration définit deux groupes de serveurs : http_back, comme auparavant, et un nouveau, appelé blog_back, qui traite les connexions avec example.com\/blog.
AprÚs avoir modifié les paramÚtres, enregistrez le fichier et redémarrez HAProxy avec la commande suivante :
sudo systemctl restart haproxySi vous avez reçu des avertissements ou des messages d'erreur lors du démarrage, vérifiez la configuration pour déceler leur présence et assurez-vous d'avoir créé tous les fichiers et dossiers nécessaires, puis réessayez de redémarrer.
Test de la configuration
Lorsque HAProxy est configurĂ© et lancĂ©, ouvrez l'adresse IP publique du serveur d'Ă©quilibrage de charge dans votre navigateur et vĂ©rifiez si vous vous ĂȘtes correctement connectĂ© en arriĂšre-plan. Le paramĂštre stats uri dans la configuration crĂ©e une page de statistiques Ă l'adresse spĂ©cifiĂ©e.
http://load_balancer_public_ip/haproxy?statsLorsque vous téléchargez la page de statistiques, si tous vos serveurs s'affichent en vert, la configuration a réussi !

La page de statistiques contient des informations utiles pour suivre vos hĂ©bergeurs web, y compris le temps de fonctionnement/d'arrĂȘt et le nombre de sessions. Si un serveur est marquĂ© en rouge, assurez-vous qu'il est allumĂ© et que vous pouvez le pinger depuis la machine d'Ă©quilibrage de charge.
Si votre équilibrage de charge ne répond pas, assurez-vous que les connexions HTTP ne sont pas bloquées par le pare-feu. Vérifiez également que HAProxy fonctionne à l'aide de la commande ci-dessous :
sudo systemctl status haproxyProtection de la page de statistiques par mot de passe
Cependant, si la page de statistiques est simplement indiquĂ©e dans le frontend, elle est ouverte Ă tous, ce qui peut ne pas ĂȘtre une trĂšs bonne idĂ©e. Au lieu de cela, vous pouvez lui attribuer son propre numĂ©ro de port en ajoutant l'exemple ci-dessous Ă la fin de votre fichier haproxy.cfg. Remplacez username et password par quelque chose de sĂ©curisé :
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:passwordAprÚs avoir ajouté le nouveau groupe d'écoute, supprimez l'ancienne référence à stats uri du groupe frontend. Lorsque vous avez terminé, enregistrez le fichier et redémarrez HAProxy.
sudo systemctl restart haproxyEnsuite, rouvrez l'équilibrage de charge avec le nouveau numéro de port et connectez-vous avec le nom d'utilisateur et le mot de passe que vous avez indiqués dans le fichier de configuration.
http://load_balancer_public_ip:8181Assurez-vous que tous vos serveurs s'affichent toujours en vert, puis ouvrez uniquement l'IP de l'équilibrage de charge sans aucun numéro de port dans votre navigateur.
http://load_balancer_public_ip/Si vos serveurs internes présentent une certaine variété de pages cibles, vous remarquerez qu'à chaque fois que vous rechargez la page, vous recevez une réponse d'un autre hÎte. Vous pouvez essayer différents algorithmes de répartition dans la section de configuration ou consulter .
Conclusion : le répartiteur de charge HAProxy
FĂ©licitations pour la configuration rĂ©ussie du rĂ©partiteur de charge HAProxy ! MĂȘme avec une configuration de base, vous pouvez considĂ©rablement amĂ©liorer la performance et la disponibilitĂ© de votre application web. Ce guide n'est qu'une introduction Ă la rĂ©partition de charge avec HAProxy, qui offre bien plus que ce que l'on peut dĂ©crire dans un court manuel de configuration. Nous recommandons d'expĂ©rimenter avec diffĂ©rentes configurations en utilisant , disponible pour HAProxy, puis de commencer Ă planifier la rĂ©partition de charge pour votre environnement de production.
En utilisant plusieurs hĂŽtes pour protĂ©ger votre service web avec une marge de puissance, le rĂ©partiteur de charge lui-mĂȘme peut nĂ©anmoins constituer un point de dĂ©faillance. Vous pouvez encore amĂ©liorer la haute disponibilitĂ© en Ă©tablissant une IP flottante entre plusieurs rĂ©partiteurs de charge. Vous pouvez en apprendre davantage Ă ce sujet dans notre .
En savoir plus sur le cours ***
Source : habr.com
