Comment configurer HAProxy en tant qu’équilibreur de charge pour Nginx sur CentOS 7

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 :

  1. Répartiteur de charge : 192.168.1.102
  2. Nginx1 : 192.168.1.104
  3. 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

Nginx serveur 1 load balancing
nginx serveur 2

Test avec la commande curl:

curl 192.168.1.102
Commande Curl pour vérifier l'installation de nginx en tant loadbalncer

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 installation

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.

Jacques Tremblay
Suivez moi
Les derniers articles par Jacques Tremblay (tout voir)

Tags:

Top Hebergeur
Logo
Compare items
  • Total (0)
Compare
0