La traduction de l'article a été préparée à la veille du début du cours
L'équilibrage de charge est une solution courante pour faire évoluer horizontalement les applications Web sur plusieurs hôtes tout en offrant aux utilisateurs un point d'accès unique au service.
HAProxy s'efforce d'optimiser l'utilisation des ressources, de maximiser le débit, de minimiser le temps de réponse et d'éviter de surcharger une ressource individuelle. Il peut être installé sur diverses distributions Linux, telles que CentOS 8, sur laquelle nous nous concentrerons dans ce guide, ainsi que sur des systèmes
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 multi-serveurs. Ce guide décrit les étapes pour configurer HAProxy en tant qu'équilibreur de charge sur un hôte cloud CentOS 8, qui achemine ensuite le trafic vers vos serveurs Web.
Pour obtenir de meilleurs résultats, vous devez disposer d'au moins deux serveurs Web et d'un serveur d'équilibrage de charge. Les serveurs Web doivent exécuter au moins un service Web de base tel que nginx ou httpd afin de tester l'équilibrage de charge entre eux.
Installation de HAProxy sur CentOS 8
HAProxy étant une application open source en évolution rapide, la distribution disponible dans les référentiels CentOS standard n'est peut-être pas la dernière version. Pour connaître la version actuelle, exécutez la commande suivante :
sudo yum info haproxy
HAProxy propose toujours trois versions stables parmi lesquelles choisir : les deux versions prises en charge les plus récentes 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 répertoriée sur le site Web HAProxy, puis décider avec quelle version vous souhaitez travailler.
Dans ce guide, nous installerons la dernière version stable 2.0, qui n'était pas encore disponible dans les référentiels standards au moment de la rédaction du guide. Vous devrez l'installer à partir de la source d'origine. 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 -y
Téléchargez le code source à l'aide de la commande ci-dessous. Vous pouvez vérifier si une version plus récente est disponible sur
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Une fois le téléchargement terminé, extrayez les fichiers à l'aide de la commande ci-dessous :
tar xzvf ~/haproxy.tar.gz -C ~/
Accédez au répertoire source décompressé :
cd ~/haproxy-2.0.7
Compilez ensuite le programme pour votre système :
make TARGET=linux-glibc
Et enfin, installez HAProxy lui-même :
sudo make install
HAProxy est désormais installé, mais il nécessite quelques manipulations supplémentaires pour le faire fonctionner. Continuons la configuration des logiciels et des services ci-dessous.
Configuration de HAProxy pour votre serveur
Ajoutez maintenant les répertoires et fichiers de statistiques suivants pour les entrées HAProxy :
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
Créez un lien symbolique pour les binaires afin de pouvoir exécuter les commandes HAProxy en tant qu'utilisateur régulier :
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
Si vous souhaitez ajouter un proxy à votre système en tant que service, copiez le fichier haproxy.init des exemples dans votre répertoire /etc/init.d. Modifiez les autorisations du fichier pour que le script s'exécute, puis redémarrez le démon systemd :
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload
Vous devez également autoriser le service à redémarrer automatiquement au démarrage du système :
sudo chkconfig haproxy on
Pour plus de commodité, il est également recommandé d'ajouter un nouvel utilisateur pour exécuter HAProxy :
sudo useradd -r haproxy
Après cela, vous pouvez vérifier à nouveau le numéro de 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 par défaut de CentOS 8 est assez restrictif pour ce projet. Utilisez les commandes suivantes pour autoriser les services requis et réinitialiser 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 --reload
Configuration de l'équilibreur de charge
La configuration de HAProxy est un processus assez simple. Essentiellement, tout ce que vous avez à faire est d'indiquer à HAProxy quelles connexions il doit écouter et où il doit les relayer.
Cela se fait en créant un fichier de configuration /etc/haproxy/haproxy.cfg avec la définition des paramètres. Vous pouvez en savoir plus sur les options de configuration HAProxy
Équilibrage de charge au niveau de la couche de transport (couche 4)
Commençons par la configuration de base. Créez un nouveau fichier de configuration, par exemple en utilisant vi avec la commande ci-dessous :
sudo vi /etc/haproxy/haproxy.cfg
Ajoutez les sections suivantes au fichier. Remplacer nom du serveur que doivent appeler vos serveurs sur la page de statistiques, et ip_privé — les adresses IP privées des serveurs vers lesquels vous souhaitez diriger le trafic Web. Vous pouvez vérifier les adresses IP privées
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 check
Cela définit un équilibreur de charge de couche de transport (couche 4) nommé en externe http_front écoutant sur le port 80, qui transfère ensuite le trafic vers un backend par défaut nommé http_back. Statistiques supplémentaires /haproxy?stats connecte la page de statistiques à l'adresse spécifiée.
Divers algorithmes d'équilibrage de charge.
La spécification des serveurs dans la section backend permet à HAProxy d'utiliser ces serveurs pour l'équilibrage de charge selon un algorithme round-robin lorsque cela est possible.
Des algorithmes d'équilibrage sont utilisés pour déterminer à quel serveur du backend chaque connexion est transmise. Voici quelques-unes des options utiles :
- Tournoi à la ronde : Chaque serveur est utilisé tour à tour en fonction de son poids. Il s’agit de l’algorithme le plus fluide et le plus équitable lorsque le temps de traitement des serveurs reste uniformément réparti. Cet algorithme est dynamique, permettant d'ajuster le poids du serveur à la volée.
- Connexion minimale : le serveur avec le moins de connexions est sélectionné. Le round robin est effectué entre des serveurs avec 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é aux sessions courtes comme HTTP.
- Premier: Le premier serveur disposant d'emplacements de connexion disponibles reçoit la connexion. Les serveurs sont sélectionnés de l'ID numérique le plus bas au plus élevé, qui correspond par défaut à la position du serveur dans la batterie. Une fois qu'un serveur atteint maxconn, le serveur suivant est utilisé.
- La source: L'adresse IP source est hachée et divisée par le poids total des serveurs en cours d'exécution pour déterminer quel serveur recevra la requête. De cette façon, la même adresse IP client ira toujours au même serveur, tandis que les serveurs resteront les mêmes.
Mise en place de l'équilibrage de charge au niveau de l'application (couche 7)
Une autre option disponible consiste à configurer un équilibreur de charge à exécuter au niveau de la couche application (couche 7), ce qui est utile lorsque des parties de votre application Web sont situées sur des hôtes différents. Ceci peut être réalisé en limitant la transmission de la connexion, par exemple par URL.
Ouvrez le fichier de configuration HAProxy à l'aide d'un éditeur de texte :
sudo vi /etc/haproxy/haproxy.cfg
Configurez ensuite les segments frontend et backend selon 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 check
Le frontend déclare une règle ACL appelée url_blog qui s'applique à toutes les connexions dont les chemins commencent par /blog. Use_backend spécifie que les connexions correspondant à la condition url_blog doivent être servies par un backend nommé blog_back, et que toutes les autres requêtes sont gérées par le backend par défaut.
Côté backend, la configuration met en place deux groupes de serveurs : http_back, comme auparavant, et un nouveau appelé blog_back, qui gère les connexions à example.com/blog.
Après avoir modifié les paramètres, enregistrez le fichier et redémarrez HAProxy à l'aide de la commande suivante :
sudo systemctl restart haproxy
Si vous recevez des avertissements ou des messages d'erreur lors du démarrage, vérifiez votre configuration et assurez-vous que vous avez créé tous les fichiers et dossiers nécessaires, puis essayez de redémarrer.
Tester la configuration
Une fois HAProxy configuré et exécuté, ouvrez l'adresse IP publique du serveur d'équilibrage de charge dans un navigateur et vérifiez si vous êtes correctement connecté au backend. 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?stats
Lorsque vous chargez la page de statistiques, si tous vos serveurs s'affichent en vert, alors la configuration a réussi !
La page de statistiques contient des informations utiles pour suivre vos hébergeurs Web, notamment les temps d'activité et d'arrêt et le nombre de sessions. Si le serveur est marqué en rouge, assurez-vous qu'il est allumé et que vous pouvez lui envoyer une requête ping depuis la machine d'équilibrage de charge.
Si votre équilibreur de charge ne répond pas, assurez-vous que les connexions HTTP ne sont pas bloquées par un pare-feu. Assurez-vous également que HAProxy fonctionne à l'aide de la commande ci-dessous :
sudo systemctl status haproxy
Protéger la page de statistiques par un mot de passe
Cependant, si la page de statistiques est simplement répertoriée sur le front-end, elle est alors accessible à tous, ce qui n'est peut-être pas une bonne idée. Au lieu de cela, vous pouvez lui attribuer un numéro de port personnalisé en ajoutant l'exemple ci-dessous à la fin de votre fichier haproxy.cfg. Remplacer Nom d'utilisateur и Mot de passe pour quelque chose de sûr :
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Après avoir ajouté un nouveau groupe d'écoute, supprimez l'ancien lien uri de statistiques du groupe frontal. Une fois terminé, enregistrez le fichier et redémarrez HAProxy.
sudo systemctl restart haproxy
Ensuite, ouvrez à nouveau l'équilibreur 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 spécifiés dans le fichier de configuration.
http://load_balancer_public_ip:8181
Assurez-vous que tous vos serveurs sont toujours verts, puis ouvrez uniquement l'adresse IP de l'équilibreur de charge sans aucun numéro de port dans votre navigateur.
http://load_balancer_public_ip/
Si vous disposez d'au moins une certaine variété de pages de destination sur vos serveurs principaux, vous remarquerez que chaque fois que vous rechargez la page, vous recevez une réponse d'un hôte différent. Vous pouvez essayer différents algorithmes d'équilibrage dans la section de configuration ou consulter
Conclusion : équilibreur de charge HAProxy
Félicitations pour la configuration réussie de votre équilibreur de charge HAProxy ! Même avec une configuration de base d'équilibrage de charge, vous pouvez améliorer considérablement les performances et la disponibilité de votre application Web. Ce guide n'est qu'une introduction à l'équilibrage de charge avec HAProxy, qui est capable de bien plus que ce qui peut être couvert dans le guide de configuration rapide. Nous vous recommandons d'expérimenter différentes configurations en utilisant
En utilisant plusieurs hôtes pour protéger votre service Web avec une marge, l'équilibreur de charge lui-même peut toujours présenter un point de défaillance. Vous pouvez encore améliorer la haute disponibilité en installant une adresse IP flottante entre plusieurs équilibreurs de charge. Vous pouvez en savoir plus à ce sujet dans notre
En savoir plus sur le cours
Source: habr.com