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.