GNU/Linux >> Tutoriels Linux >  >> Cent OS

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

HAProxy ou High Availability Proxy est un équilibreur de charge TCP et HTTP open source et un logiciel de serveur proxy. HAProxy a été écrit par Willy Tarreau en C, il prend en charge SSL, les compressions, le keep-alive, les formats de journal personnalisés et la réécriture d'en-tête. HAProxy est un serveur proxy et un équilibreur de charge rapide et léger avec une faible empreinte mémoire et une faible utilisation du processeur. Il est utilisé par de grands sites comme Github, StackOverflow, Reddit, Tumblr, Twitter et autres. Il est devenu l'équilibreur de charge logiciel et le serveur proxy les plus populaires au cours des dernières années.

Dans ce tutoriel, je vais vous guider à travers l'installation et la configuration de HAProxy pour 3 serveurs, un équilibreur de charge et deux serveurs Web Nginx. Nous allons installer HAProxy sur un seul serveur, puis installer le serveur Web Nginx sur les autres serveurs. HAProxy agit comme un équilibreur de charge pour les serveurs Web Nginx.

Concept de base avec HAProxy

Couche 4 et couche 7

HAProxy peut s'exécuter en deux modes :le mode TCP Layer 4 et le mode HTTP Layer 7. En mode TCP Layer 4, HAProxy transmet 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'applications. Dans ce didacticiel, nous utiliserons Nginx comme serveur Web qui ne prend en charge que le mode HTTP de couche 7.

Algorithme d'équilibrage

Il s'agit de l'algorithme utilisé par HAProxy pour sélectionner le serveur lors de l'équilibrage de charge. Les modes suivants sont disponibles :

Roundrobin

C'est l'algorithme d'équilibrage le plus simple. Pour chaque nouvelle connexion, elle sera gérée par le prochain serveur backend. Si le dernier serveur backend de la liste est atteint, il recommencera à partir du haut de la liste backend.

Dernière connexion

La nouvelle connexion sera gérée par le serveur principal avec le moins de connexions. Ceci est utile lorsque le temps et la charge des requêtes varient beaucoup.

Source

Ceci est pour les sessions persistantes, l'IP du client sera hachée pour déterminer le serveur backend qui a reçu la dernière requête de cette IP. Ainsi une IP A sera toujours gérée par backend1, et une IP B sera toujours gérée par banckend2 pour ne pas interrompre les sessions

Il existe d'autres algorithmes. Consultez le site officiel HAProxy pour plus de détails.

Prérequis

  • 3 CentOS 7

équilibreur de charge
            192.168.1.102

           nginx1
           192.168.1.104

            nginx2
            192.168.1.105

  • Privilèges root sur les 3 serveurs.

Étape 1 - Configurer les fichiers /etc/hosts

Connectez-vous au serveur d'équilibrage de charge et modifiez le fichier /etc/hosts.

ssh [email protected]
sudo su
vi /etc/hosts

Ajoutez les noms d'hôte 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, modifiez le fichier hosts sur les serveurs Nginx (nginx1 et nginx2) :

ssh [email protected]
ssh [email protected]

Modifiez et ajoutez une nouvelle ligne pour l'équilibreur de charge dans les fichiers hôtes :

vi /etc/host

Ajoutez le nom d'hôte de l'équilibreur de charge sur chaque serveur nginx :

192.168.1.102    loadbalancer

faites ceci 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 [email protected]
yum -y update

Installez maintenant HAProxy avec cette commande yum :

yum -y install haproxy

Lorsque l'installation est terminée, allez dans le 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

Collez la configuration ci-dessous :

#---------------------------------------------------------------------
# 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 howtoforge:howtoforge            #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 roundrobin 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 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 rsyslog pour HAProxy.

Nous allons configurer le démon rsyslog pour enregistrer les statistiques HAProxy. Modifiez le fichier rsyslog.conf pour permettre au port UDP 514 d'ê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-dessous :

$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

Collez la configuration ci-dessous :

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.

Redémarrez maintenant rsyslog puis démarrez haproxy :

systemctl restart rsyslog
systemctl start haproxy

Ajoutez haproxy pour démarrer au démarrage :

systemctl enable 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 [email protected]
ssh [email protected]

Installez le référentiel epel avec la commande yum ci-dessous :

yum -y install epel-release

Vous pouvez maintenant installer Nginx :

yum -y install nginx

Nginx est installé. Allez dans le 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     #For nginx1 server
echo "<h1>nginx2.loadbalance.me</h1>" > index.html     #For nginx2 server

Ensuite, ajoutez Nginx pour qu'il démarre au démarrage, puis démarrez-le :

systemctl enable nginx
systemctl start nginx

Assurez-vous d'effectuer cette étape sur les serveurs nginx1 et nginx2.

Étape 4 - Tester

Test depuis le navigateur en accédant à l'IP de l'équilibreur de charge :192.168.1.102

Test avec la commande curl :

curl 192.168.1.102

Test de connexion à la surveillance Web HAProxy qui s'exécute sur le port 8080 avec le nom d'utilisateur et le mot de passe "howtoforge":

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 qui fournit une haute disponibilité pour les services basés sur TCP, il fonctionne comme équilibreur de charge HTTP et serveur proxy. Le logiciel est écrit en C et prend en charge SSL, keep-alive et la compression. HAProxy est le bon choix pour tous ceux qui ont besoin d'un équilibreur de charge et d'un serveur proxy rapides et légers avec une faible empreinte mémoire et une faible utilisation du processeur. 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 Layer 7 avec HAProxy. Si vous souhaitez utiliser le mode TCP de couche 4, vous pouvez utiliser d'autres serveurs Web comme apache. Sur CentOS 7, HAProxy est disponible dans le référentiel par défaut. Il est facile à installer et à configurer.


Cent OS
  1. Comment installer Nginx sur CentOS 7

  2. Comment installer Nginx sur CentOS 8

  3. Comment installer Magento 2.1 sur CentOS 7

  4. Comment configurer l'équilibreur de charge HAProxy

  5. Comment configurer le serveur VNC pour un nouvel utilisateur dans CentOS/RHEL 5

Comment installer HAProxy sur CentOS 8

Comment configurer HAProxy comme équilibreur de charge pour Nginx sur CentOS 8

Comment installer Varnish Cache 6 pour Nginx sur CentOS/RHEL 8

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

Comment configurer HAProxy sur CentOS 8

Comment configurer un serveur NGINX RTMP pour le streaming