Mise à jour: 16 septembre 2024
HAProxy ou High Availability Proxy est un logiciel Open Source d’équilibrage de la charge TCP et HTTP et en même temps un serveur proxy.
HAProxy a été écrit par Willy Tarreau avec le langage C. Il prend en charge SSL, les compressions, les versions persistantes (keep-alive), les formats de journaux personnalisés et la réécriture d’en-têtes.
HAProxy est un serveur proxy et un équilibreur de charge rapides et légers, utilisant peu de mémoire et processeur. Il est utilisé par de grands sites comme Github, StackOverflow, Reddit, Tumblr, Twitter et autres.
Il est devenu l’un des plus populaires logiciels Load-Balancer et en même temps un serveur proxy.
Dans ce tutoriel, je expliquerai comment installer et configurer HAProxy pour 3 types de serveurs : un équilibreur de charge et deux serveurs Web Nginx.
Nous allons installer HAProxy sur un seul serveur, puis le serveur Web Nginx sur les autres serveurs.
HAProxy agira comme un équilibreur de charge pour les serveurs Web Nginx.
Concepts de base de HAProxy
Couche 4 et couche 7 (L4 et L7)
HAProxy peut fonctionner dans deux modes: mode TCP couche 4 et HTTP couche 7.
En mode TCP couche 4, HAProxy transfère les paquets TCP RAW du client aux serveurs d’applications.
En mode HTTP de couche 7, HAProxy analyse l’en-tête HTTP avant de le transmettre aux serveurs d’application.
Dans ce didacticiel, nous utiliserons Nginx en tant que serveur Web prenant uniquement en charge le mode HTTP Layer 7.
Algorithme d’équilibreur de charge
C’est l’algorithme utilisé par HAProxy pour sélectionner le serveur lors de l’équilibrage de la charge. Les modes suivants sont disponibles:
Roundrobin
C’est l’algorithme de Load-Balancing le plus simple. Pour chaque nouvelle connexion, celle-ci sera gérée par le prochain serveur principal.
Si le dernier serveur principal de la liste est atteint, il recommencera à partir du haut de la liste.
Lastconn
La nouvelle connexion sera gérée par le serveur principal avec le moins de connexions possible. Ceci est utile lorsque le temps et la charge des demandes varient beaucoup.
La source
Pour les sessions persistantes, l’adresse IP du client sera hachée pour déterminer le serveur principal qui a reçu la dernière demande de cette adresse IP.
Donc, une adresse IP A sera toujours traitée par backend1, et l’IP B sera toujours traitée par backend2 pour ne pas interrompre les sessions
Il existe un autre algorithme : consultez le site officiel HAProxy pour plus de détails.
Les prérequis
Nous aurons besoins de ces conditions préalables :
3 Centos 8
La dernière version de Centos sera installé au niveau de :
- Répartiteur de charge : 192.168.1.102
- Nginx1 : 192.168.1.104
- Nginx2 : 192.168.1.105
Privilèges Root
Nous aurons aussi besoin de privilèges root sur les 3 serveurs.
Étape 1 – Configurez les fichiers /etc/hosts
Connectez-vous au serveur d’équilibrage de charge et modifiez le fichier /etc/hosts.
ssh loadbalancer@192.168.1.102
sudo su
vi /etc/hosts
Ajoutez les noms d’hôte (hostnames) nginx1 et nginx2:
192.168.1.104 nginx1.loadbalancer.me nginx1
192.168.1.105 nginx2.loadbalancer.me nginx2
Enregistrez le fichier et quittez l’éditeur.
Ensuite, éditez le fichier hosts sur les serveurs Nginx (nginx1 et nginx2):
ssh nginx1@192.168.1.104
ssh nginx2@192.168.1.105
Modifiez et ajoutez une nouvelle ligne pour l’équilibreur de charge dans les fichiers host:
vi /etc/host
Ajoutez le nom d’hôte du Load-Balancer sur chaque serveur nginx:
192.168.1.102 loadbalancer
Faites la même chose sur les serveurs nginx1 et nginx2.
Étape 2 – Installer et configurer HAProxy
HAProxy est disponible dans le référentiel CentOS 7.
Connectez-vous au serveur LoadBalancer et mettez à jour les listes de packages:
ssh loadbalancer@192.168.1.104
yum -y update
Maintenant, installez HAProxy avec cette commande yum:
yum -y install haproxy
Lorsque l’installation est terminée, accédez au répertoire /etc/haproxy/et sauvegardez le fichier de configuration d’origine:
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig
Ensuite, ajoutez un nouveau fichier de configuration HAProxy haproxy.cfg avec l’éditeur VI:
vi haproxy.cfg
Copiez et collez la configuration ci-dessous:
#---------------------------------------------------------------------
# Paramètres globaux
#---------------------------------------------------------------------
global
log 127.0.0.1 local2 #Log configuration
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy #Haproxy fonctionnant sous utilisateur et le groupe
"haproxy"
group haproxy
daemon
# mise en marche de stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# par défaut, toutes les sections ‘listen’ et ‘backend’ seront
# utiliser si non désigné dans leur bloc
#---------------------------------------------------------------------
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 fonctionne sur port 8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /stats #URL pour HAProxy monitoring
stats realm Haproxy\ Statistics
stats auth jacques:jacques #Utilisateur et mot de passe pour se connecter au tableau de bord de surveillance
stats admin if TRUE
default_backend app-main #Ceci est optionnel pour monitorer le backend
#---------------------------------------------------------------------
# Configuration FrontEnd
#---------------------------------------------------------------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#---------------------------------------------------------------------
# BackEnd roundrobin comme balance algorithm
#---------------------------------------------------------------------
backend app-main
balance roundrobin #Balance algorithm
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost #Vérifie si l’application de serveur est fonctionnel et en bon état - 200 status code
server nginx1 192.168.1.104:80 check #Nginx1
server nginx2 192.168.1.105:80 check #Nginx2
Enregistrez le fichier de configuration et quittez.
Ensuite, configurez rsyslogpour HAProxy.
Nous allons configurer le rsyslog daemon pour consigner les statistiques HAProxy. Éditez le fichier rsyslog.conf pour que le port UDP 514 puisse être utilisé par rsyslog.
vi /etc/rsyslog.conf
Décommentez cette ligne pour activer la connexion UDP:
$ModLoad imudp
$UDPServerRun 514
Si vous souhaitez utiliser une adresse IP spécifique, vous pouvez ajouter une nouvelle ligne comme celle-ci :
$UDPServerAddress 127.0.0.1
Enregistrez le fichier et quittez.
Créez ensuite un nouveau fichier de configuration Haproxy pour rsyslog:
cd /etc/rsyslog.d/
vi haproxy.conf
Coller la configuration ci-dessous:
local2.=info /var/log/haproxy-access.log #Pour accès Log
local2.notice /var/log/haproxy-info.log #Pour Service Info - Backend, loadbalancer
Sauvegarder et quitter.
Maintenant, redémarrez rsyslogpuis démarrez haproxy:
Étape 3 – Installer et configurer Nginx
Dans cette section, nous allons installer Nginx à partir du référentiel epel sur les serveurs nginx1 et nginx2.
Connectez-vous aux serveurs:
ssh nginx1@192.168.1.104
ssh nginx2@192.168.1.105
Installez le référentiel epel avec la commande yum ci-dessous:
yum -y install epel-release
Maintenant vous pouvez installer Nginx:
yum -y install nginx
Nginx est installé. Accédez au répertoire Web et modifiez le fichier d’index afin que nous puissions voir lequel des deux serveurs a livré le fichier html:
cd /usr/share/nginx/html/
echo "<h1>nginx1.loadbalance.me</h1>" > index.html #Pour nginx1 server
echo "<h1>nginx2.loadbalance.me</h1>" > index.html #Pour nginx2 server
Ensuite, ajoutez Nginx pour démarrer au démarrage, puis démarrez-le:
systemctl enable nginx
systemctl start nginx
Assurez-vous de refaire la même chose sur les serveurs nginx1 et nginx2.
Étape 4 – Tester l’installation
Tester depuis un navigateur en accédant à l’IP du répartiteur de charge: 192.168.1.102
Test avec la commande curl:
curl 192.168.1.102
Test de connexion à la surveillance Web HAProxy exécutée sur le port 8080 avec le nom d’utilisateur et le mot de passe “jacques”:
http://192.168.1.102:8080/stats
HAProxy fonctionne correctement et agit comme un équilibreur de charge pour nos deux serveurs Web Nginx.
Conclusion
HAProxy ou proxy haute disponibilité est un logiciel open source offrant une haute disponibilité pour les services basés sur TCP, il fonctionne comme un équilibreur de charge HTTP et un serveur proxy.
HAProxy est le bon choix pour tous ceux qui recherchent un équilibreur de charge et un serveur proxy efficace.
Haproxy peut fonctionner en mode TCP de couche 4 et en mode HTTP de couche 7. Nginx ne prend en charge que le mode HTTP de couche 7 avec HAProxy.
Si vous souhaitez utiliser le mode TCP Layer 4, vous pouvez utiliser d’autres serveurs Web tels qu’Apache. Sur CentOS 7, HAProxy est disponible dans le référentiel par défaut. C’est facile à installer et à configurer.
- Meilleurs Plugins Cache WordPress - 21 octobre 2024
- Avis Gandi - 18 octobre 2024
- Avis BigCommerce - 16 octobre 2024