Installation de l'équilibreur de charge HAProxy sur CentOS

La traduction de l'article a été préparée à la veille du début du cours "Administrateur Linux. Virtualisation et clustering"

Installation de l'équilibreur de charge HAProxy sur CentOS

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 est l'un des logiciels d'équilibrage de charge open source les plus populaires qui offre également une haute disponibilité et des fonctionnalités de proxy.

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 Debian 8 и Ubuntu 16.

Installation de l'équilibreur de charge HAProxy sur CentOS

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 Page de téléchargement HAProxy.

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 sur la page de documentationsi vous voulez en savoir plus.

É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 sur le panneau de contrôle UpCloud 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 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 !

Installation de l'équilibreur de charge HAProxy sur CentOS

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 documentation complète.

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 documentation complète, disponible pour HAProxy, puis commencez à planifier l'équilibrage de charge pour votre environnement de production.

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 article sur les adresses IP flottantes sur UpCloud.

En savoir plus sur le cours "Administrateur Linux. Virtualisation et clustering"***

Source: habr.com

Ajouter un commentaire