GNU/Linux >> Tutoriels Linux >  >> Linux

Équilibrage de charge avec HAProxy, Nginx et Keepalived sous Linux

Avoir une configuration appropriée de l'équilibreur de charge permet à votre serveur Web de gérer un trafic élevé en douceur au lieu de tomber en panne.

Qu'est-ce que l'équilibrage de charge ?

L'équilibrage de charge est le processus de répartition des charges de travail sur plusieurs serveurs. C'est comme répartir les charges de travail entre les travailleurs de jour et de nuit dans une entreprise. L'équilibrage de charge améliore la fiabilité du serveur car il surmonte les défaillances ponctuelles.

Un exemple de l'aspect d'un serveur sans équilibrage de charge est présenté ci-dessous.

Dans cet exemple, si le serveur Web tombe en panne, la requête Web de l'utilisateur n'est pas accessible en temps réel. De même, si un grand nombre d'utilisateurs demandent simultanément la même page Web, le traitement de la demande Web de l'utilisateur par un seul serveur Web peut être un processus lent. Par conséquent, les équilibreurs de charge sont utilisés pour améliorer les performances du serveur, fournir une sauvegarde et prévenir les pannes.

Dans ce didacticiel, nous allons configurer un équilibreur de charge pour le serveur Web à l'aide de Nginx, HAProxy et Keepalived.

Un exemple de l'apparence des serveurs avec des équilibreurs de charge est illustré ci-dessous.

Alors, que sont Nginx, Haproxy et Keepalived ?

Nginx

Nginx, prononcé comme Engine-x est un serveur Web open source. Plus qu'un simple serveur Web, il peut fonctionner comme un serveur proxy inverse, un serveur proxy de messagerie, un équilibreur de charge, un serveur de fichiers léger et un cache HTTP. Nginx a été utilisé sur de nombreux sites populaires tels que BitBucket, WordPress, Pinterest, Quora et GoDaddy.

HA Proxy

HAProxy signifie proxy haute disponibilité. Il s'agit d'un équilibreur de charge open source qui fournit des solutions d'équilibrage de charge, de haute disponibilité et de proxy pour les applications basées sur TCP et HTTP. Il est le mieux adapté pour répartir la charge de travail sur plusieurs serveurs afin d'améliorer les performances et la fiabilité des serveurs.

La fonction de Haproxy est de transmettre la demande Web de l'utilisateur final à l'un des serveurs Web disponibles. Il peut utiliser divers algorithmes d'équilibrage de charge tels que Round Robin, Least Connections, etc.

Keepalived

Que se passe-t-il si l'équilibreur de charge HAProxy tombe en panne ?

Keepalived est un programme open source qui prend en charge à la fois l'équilibrage de charge et la haute disponibilité. Il s'agit essentiellement d'un logiciel de routage et propose deux types d'équilibrage de charge :

  • Couche 4 (couche de transport)
  • Couche 7 (couche d'application)

Keepalived peut exécuter les fonctions suivantes :

  • Vérification de l'état (si les serveurs sont opérationnels ou non)
  • Mise en œuvre VRRP (protocole de routage de redondance virtuelle) pour gérer le basculement d'équilibrage de charge

Keepalived utilise VIP (adresse IP virtuelle) comme adresse IP flottante qui flotte entre un équilibreur de charge maître et un équilibreur de charge de secours et est utilisé pour basculer entre eux. Si l'équilibreur de charge principal tombe en panne, l'équilibreur de charge de secours est utilisé pour transférer la requête Web.

Passons à la simulation de la manière dont la haute disponibilité et l'équilibrage de charge sont maintenus pour les serveurs Web.

Configuration d'un équilibreur de charge sous Linux avec Nginx, HAProxy et Keepalived

Il s'agit d'une expérience de laboratoire de test, ce qui signifie qu'il s'agit simplement d'une configuration de test pour vous aider à démarrer. Vous devrez peut-être faire quelques ajustements si vous l'implémentez sur de vrais serveurs. Utilisez ce didacticiel comme support d'apprentissage au lieu de le suivre aveuglément pour votre propre configuration.

J'ai utilisé la distribution CentOS Linux dans ce tutoriel. Vous pouvez utiliser d'autres distributions Linux mais je ne peux pas garantir que toutes les commandes (en particulier celles d'installation) fonctionneront dans d'autres distributions.

Exigences pour la configuration de l'équilibreur de charge

4 systèmes CentOS installés (une installation minimale suffit pour ce tutoriel)

  • 2 CentOS à configurer avec nginx
  • 2 CentOS à configurer avec HAProxy et Keepalived

Dans ce tutoriel, nous avons travaillé sur les adresses IP suivantes à titre d'exemple. Ceux-ci peuvent être modifiés selon votre système. Ne pensez pas que ce sont des adresses IP statiques.

Serveurs Web :

  • 10.13.211.169
  • 10.13.211.158

Équilibreur de charge :

  • 10.13.211.194
  • 10.13.211.120

IP virtuelle :

  • 10.13.211.10

Vous pouvez facilement obtenir l'adresse IP dans la ligne de commande Linux.

Étape 1 :Configurer les serveurs Web avec Nginx

Dans cette partie, nous utiliserons deux systèmes CentOS comme serveur Web. Nous devons d'abord installer Nginx dessus.

Pour cela, ajoutez un dépôt contenant nginx puis installez-le à partir de là :

yum install epel-release
yum install nginx

Après avoir installé nginx, démarrez le service Nginx :

systemctl start nginx

Faites en sorte que le service nginx soit activé même après chaque démarrage :

systemctl enable nginx

Vérifiez l'état du service nginx :

systemctl status nginx

Autoriser les trafics Web dans nginx qui est bloqué par défaut par le pare-feu CentOS.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd –reload 

Répétez également les étapes ci-dessus sur le deuxième serveur Web CentOS.

Maintenant, prêtez attention aux étapes suivantes.

Les fichiers Web pour nginx se trouvent dans /usr/share/nginx/html Modifiez le contenu du fichier index.html uniquement pour identifier les serveurs Web.

Pour le premier serveur Web :

echo “this is first webserver” > /usr/share/nginx/html/index.html

Pour le deuxième serveur Web :

echo “this is second webserver” > /usr/share/nginx/html/index.html

REMARQUE :Si vous êtes sur une machine virtuelle, il est préférable d'installer et de configurer Nginx sur un système, puis de cloner le système. Ensuite, vous pouvez reconfigurer sur le deuxième système. Gain de temps et d'erreurs.

Confirmez maintenant l'état du serveur Web en accédant à l'URL suivante dans votre navigateur :http://SERVER_DOMAIN_NAME ou Local_IP_Address. Exemple ici :

http://10.13.211.169

Ou dans le terminal, curl Local_IP_Address. Exemple ici :

curl 10.13.211.169

Vous obtiendrez la sortie comme :

Étape 2 :Configurer les équilibreurs de charge avec HAProxy

Sur les deux autres systèmes, utilisez les commandes suivantes pour installer HAProxy :

yum -y update
yum -y install haproxy

Le fichier de configuration HAProxy se trouve dans /etc/haproxy. Utilisez la commande cd pour accéder au répertoire et sauvegarder le fichier avant de le modifier.

cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg_bac

Créez un nouveau fichier haproxy.cfg et ouvrez-le avec l'éditeur de votre choix.

touch haproxy.cfg
vim haproxy.cfg

Maintenant, collez les lignes suivantes dans le fichier :

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
#---------------------------------
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back

#round robin balancing backend http
#-----------------------------------
backend http_back
balance roundrobin
#balance leastconn
mode http
server webserver1 10.13.211.169:80 check    # ip_address_of_1st_centos_webserver
server webserver2 10.13.211.158:80 check    # ip_address_of_2nd_centos_webserver

Maintenant, activez et démarrez le service HAProxy.

systemctl enable haproxy
systemctl start haproxy

Vérifiez l'état de HAProxy :

systemctl status haproxy

Accédez à l'URL de votre navigateur pour confirmer le service de haproxy :http://load balancer's IP Address/haproxy?stats. Exemple utilisé ici :

http://10.13.211.194/haproxy?stats

ou dans le terminal, utilisez la commande $ curl  LoadBalancer_IP_Address

curl 10.13.211.194
curl 10.13.211.194

curl deux fois et vous verrez des sorties différentes pour la commande curl. C'est parce que la réponse provient de différents serveurs Web (un à la fois), pour votre demande à l'équilibreur de charge.

La sortie ressemblerait à ceci :

Étape 3 :Configurer la haute disponibilité avec Keepalived

Keepalived doit être installé sur les deux systèmes CentOS de l'équilibreur de charge HAProxy (que nous venons de configurer ci-dessus). L'un agit en tant que maître (équilibreur de charge principal) et un autre agit en tant qu'équilibreur de charge de secours.

Sur les deux systèmes, exécutez la commande suivante :

yum install -y keepalived

Le fichier de configuration de Keepalived se trouve dans /etc/keepalived/keepalived.conf . Sauvegardez le fichier keepalived.conf d'origine et utilisez la configuration suivante dans le nouveau fichier keepalived.conf.

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bac
touch /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf

Collez les lignes suivantes dans le fichier de configuration (n'oubliez pas de modifier les adresses e-mail) :

global_defs {
notification_email {
linuxhandbook.com
[email protected]
}
notification_email_from [email protected]
smtp_server 10.13.211.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER
interface eth0 #put your interface name here. [to see interface name: $ ip a ]
virtual_router_id 51
priority 101 # 101 for master. 100 for backup. [priority of master> priority of backup]
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #password
}
virtual_ipaddress {
10.13.211.10 # use the virtual ip address. 
}
}

Remarque :les adresses IP virtuelles peuvent être n'importe quelle adresse IP active de votre réseau. Près de la plage d'adresses IP de Loadbalancer. Ici, l'IP de l'équilibreur de charge est :10.13.211.194 et 10.13.211.120, et le VIP est 10.13.211.10

Modifiez le fichier de configuration selon l'hypothèse du système. Faites attention à la configuration principale et de sauvegarde. Enregistrez le fichier, démarrez et activez le processus Keepalived :

systemctl start keepalived
systemctl enable keepalived

Pour afficher l'état de Keepalived :

systemctl status keepalived

Remarque :Si vous êtes sur une machine virtuelle, il est préférable d'installer et de configurer Haproxy et Keepalived sur un seul système, puis de cloner le système. Ensuite, vous pouvez reconfigurer sur le deuxième système. Gain de temps et d'erreurs.

Maintenant, pour vérifier l'état de votre équilibreur de charge haute disponibilité, accédez au terminal et appuyez sur :

$ while true; do ; curl 10.13.211.10 ; sleep 1; done;

Appuyez sur ctrl+c pour arrêter l'exécution du terminal.

La sortie ressemblera à ceci :

Si vous ne vous sentez pas à l'aise lors de l'installation et de la configuration des fichiers, téléchargez les scripts à partir de mon référentiel GitHub et exécutez-les simplement.

J'espère que ce tutoriel vous a aidé à configurer un équilibreur de charge sous Linux avec une haute disponibilité. Bien sûr, c'était une configuration simple, mais cela donne certainement une idée de l'équilibrage de charge et de la gestion de la haute disponibilité.

Si vous avez des questions ou des suggestions, veuillez laisser un commentaire ci-dessous.

Auteur :Rishi Raj Gautam est un amoureux de Linux et un activiste de l'open source.


Linux
  1. Modifier du texte sous Linux avec KWrite et Kate

  2. Personnalisation de mon terminal Linux avec tmux et Git

  3. Comment installer le serveur Web Nginx sur Linux

  4. Équilibrer la sécurité Linux avec la convivialité

  5. Équilibrage de charge Nginx

Configurer l'équilibrage de charge avec HAProxy, Nginx et Keepalived sous Linux

Installer et configurer Varnish Cache avec Nginx Web Server sur Ubuntu 18.04

Comment installer et configurer Caddy Web Server avec PHP sur Rocky Linux 8

Comment configurer l'équilibrage de charge avec NGINX sur Jelastic Cloud

Développement Web et techniques avancées avec Linux sur Windows (WSL)

Ruby on Rails sur Azure App Service (sites Web) avec Linux (et Ubuntu sur Windows 10)