GNU/Linux >> Tutoriels Linux >  >> Linux

Comment configurer HAProxy comme équilibreur de charge pour Nginx dans CentOS 7

É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.

1. Serveurs CentOS 7

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

2. Accès SSH à tous les serveurs

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.


Linux
  1. Comment configurer NGINX en tant qu'équilibreur de charge TCP/UDP sous Linux

  2. Comment configurer HAProxy dans Ubuntu 16.04

  3. Comment configurer l'équilibreur de charge HAProxy

  4. Comment configurer le serveur NTP dans CentOS ?

  5. Comment configurer VSFTPD sur CentOS 7.x ?

Comment configurer Nginx en tant que proxy inverse pour Apache sur Ubuntu 18.04 VPS

Comment configurer HAProxy sur CentOS 8

Comment installer Nginx sur CentOS 7 ?

Comment configurer un serveur NGINX RTMP pour le streaming

Comment installer Nginx sur CentOS 8

Comment configurer l'équilibreur de charge Traefik avec Docker dans Ubuntu 20.04