Écrit en C par Willy Tarreau, HAProxy, également connu sous le nom de High Availability Proxy, est un équilibreur de charge HTTP rapide et léger et un serveur proxy. Il a une faible utilisation du processeur et est occasionné par une petite empreinte mémoire. L'équilibreur de charge est utilisé par des sites Web populaires tels que StackOverflow, Twitter, Github et Tumblr, pour n'en citer que quelques-uns.
Dans ce guide, nous allons vous montrer comment configurer HAProxy en tant qu'équilibreur de charge pour le serveur Web Nginx sur CentOS 7. L'équilibreur de charge sera placé devant 2 serveurs Web Nginx et répartira équitablement les requêtes HTTP sur les serveurs.
Algorithme d'équilibre HAProxy
Il s'agit de l'algorithme utilisé par l'équilibreur de charge pour la sélection des serveurs Web lors de la répartition des charges de travail.
1. Tourniquet
C'est le plus simple des algorithmes. Fondamentalement, chaque nouvelle connexion sera gérée par le serveur Web suivant. Par exemple, si vous avez 4 serveurs back-end, chacun d'eux traitera successivement les requêtes. Lorsque le dernier serveur Web de la liste est atteint, l'équilibreur de charge recommencera du haut avec le premier serveur Web.
2. Dernière connexion
Ici, une nouvelle requête sera traitée par le serveur avec le moins de connexions. Cela s'avère pratique lorsque la charge et les heures des requêtes diffèrent par de grandes variations.
Démarrer
Pour commencer, effectuez une liste de contrôle avant le vol et assurez-vous que vous disposez des éléments suivants.
Nom d'hôte | Adresse IP du serveur |
---|---|
équilibreur de charge | 173.82.168.96 |
serveur-web-1 | 173.82.2.236 |
serveur-web-2 | 173.82.94.57 |
Vous trouverez ci-dessous une représentation graphique de la configuration.
Étape 1 :Configurer le fichier /etc/hosts dans l'équilibreur de charge
Connectez-vous à l'équilibreur de charge à l'aide de SSH et ajoutez les adresses IP et les noms d'hôte des serveurs Web Nginx comme indiqué.
vim /etc/hosts
173.82.2.236 web-server-1
173.82.94.57 web-server-2
Enregistrez et quittez l'éditeur de texte vim.
Ensuite, connectez-vous à chacun des serveurs Web (web-server-1 et web-server-2) et modifiez le /etc/hosts
fichier pour pointer vers l'équilibreur de charge.
173.82.168.96 load-balancer
Enregistrez et quittez l'éditeur de texte.
Étape 2 :Installez et configurez HAProxy sur le serveur d'équilibrage de charge
Le référentiel HAProxy est facilement disponible sur le référentiel CentOS. Pour installer et configurer HAProxy, connectez-vous d'abord et mettez à jour les référentiels système.
yum update -y
Ensuite, installez HAProxy à l'aide de la commande :
yum -y install haproxy
Exemple de sortie
Une fois l'installation réussie et terminée, dirigez-vous vers le répertoire haproxy.
cd /etc/haproxy
Sauvegardez le haproxy.cfg
fichier en le renommant haproxy.cfg.bak
mv haproxy.cfg haproxy.cfg.bak
Ensuite, créez un nouveau fichier de configuration HAproxy.
vim haproxy.cfg
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2 #Log configuration
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy #Haproxy running under user and group "haproxy"
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080 #Haproxy Monitoring run on port 8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /stats #URL for HAProxy monitoring
stats realm Haproxy\ Statistics
stats auth Password123: Password123 #User and Password for login to the monitoring dashboard
stats admin if TRUE
default_backend app-main #This is optionally for monitoring backend
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#---------------------------------------------------------------------
# BackEnd round robin as balance algorithm
#---------------------------------------------------------------------
backend app-main
balance roundrobin #Balance algorithm
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost #Check the server application is up and healty - 200 status code
server web-server-1 173.82.2.236:80 check #Nginx1
server web-server-2 173.82.94.57:80 check #Nginx2
Prenez note des serveurs Web qui ont été spécifiés dans les 2 dernières lignes, comme indiqué dans la sortie.
Enregistrez et quittez l'éditeur de texte.
Ensuite, nous allons configurer le rsyslog démon pour enregistrer les statistiques HAProxy.
Modifiez le rsyslog.conf
fichier pour permettre au port UDP 514 d'être utilisé par rsyslog.
vim /etc/rsyslog.conf
Pour autoriser la connexion UDP via le port 154, décommentez les lignes suivantes.
$ModLoad imudp
$UDPServerRun 514
Enregistrez et quittez l'éditeur de texte.
Ensuite, créez un nouveau fichier de configuration HAProxy pour syslog.
vim /etc/rsyslog.d/haproxy.conf
Collez la configuration suivante
local2.=info /var/log/haproxy-access.log #For Access Log
local2.notice /var/log/haproxy-info.log #For Service Info - Backend, loadbalancer
Enregistrez et quittez l'éditeur de texte.
Continuez et redémarrez rsyslog.
systemctl restart rsyslog
Ensuite, démarrez et activez Haproxy pour qu'il démarre au démarrage.
systemctl start haproxy
systemctl enable haproxy
Pour confirmer que HaProxy est opérationnel, exécutez :
systemctl status haproxy
Dans l'étape suivante, nous allons installer Nginx sur nos serveurs Web.
Étape 3 :Installer et configurer Nginx
La seule étape cruciale qui reste est l'installation de Nginx sur chacun de nos serveurs web.
Mais d'abord, installez le référentiel EPEL comme indiqué
yum install epel-release
Ensuite, installez Nginx
yum install nginx -y
Exemple de sortie
Avec Nginx installé sur les deux serveurs, nous allons modifier le index.html
fichiers dans chacun des serveurs Web Nginx afin de créer une distinction entre chaque serveur lors de la simulation avec l'équilibreur de charge HAproxy.
Déplacez-vous vers le répertoire html comme indiqué :
cd /usr/share/nginx/html/
Sauvegardez le fichier index.html
mv index.html index.html.bak
Ensuite, créez un nouveau fichier index.html et collez un exemple de contenu.
Pour le serveur Web 1
echo "web-server-1. Hey ! This is your first web server" > index.html
Pour le serveur Web 2
echo "web-server-2. Hey ! This is your second web server" > index.html
Ensuite, démarrez Nginx sur les deux serveurs Web et confirmez si le service est en cours d'exécution
systemctl start nginx
systemctl status nginx
Tester l'équilibrage de charge
Pour vérifier que tout s'est bien passé, exécutez la commande suivante à plusieurs reprises.
curl 173.82.168.96
Votre sortie devrait ressembler à ceci.
Comme vous pouvez l'observer attentivement, à chaque exécution ultérieure de la commande curl, la sortie alterne entre le contenu du premier et du second serveur Web. Parfait !
Essayons maintenant de tester à l'aide du navigateur Web.
https://load-balancer-IP-address
Cela affichera le contenu sur l'un des serveurs Web, dans ce cas, web-server-2.
Maintenant, essayez d'actualiser une ou deux fois et la sortie pointera vers l'autre serveur Web, dans ce cas, web-server-1.
Impressionnant! Cela confirme que notre équilibreur de charge est capable de répartir équitablement les requêtes HTTP entre nos serveurs Web.
POUR rassembler plus de statistiques du navigateur de l'équilibreur de charge, l'URL suivante
https://load-balancer-IP:8080/stats
Utilisez le Password123 comme nom d'utilisateur et mot de passe comme nous l'avons défini dans haproxy.cfg
fichier de configuration.
Ceci résume ce tutoriel sur la configuration de l'équilibreur de charge HAProxy pour Nginx sur CentOS 7. N'hésitez pas à l'essayer et à partager ce guide sur vos réseaux sociaux. Comme toujours, vos commentaires seront appréciés.