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 didacticiel, vous passerez en revue l'installation et la configuration de HAProxy sur RHEL 8 / CentOS 8. Nous allons installer HAProxy sur un seul serveur, puis installer le serveur Web Nginx sur les autres serveurs. HAProxy agira comme un équilibreur de charge pour les serveurs Web Nginx.
Dans ce didacticiel, vous apprendrez :
- Architecture et concepts HAProxy
- Configurer le fichier hosts pour la résolution de noms
- Installer et configurer HAProxy
- Installer et configurer Nginx
- Test de la fonctionnalité d'équilibrage de charge
- Accéder à l'URL des statistiques HAProxy
Configuration logicielle requise et conventions utilisées
Catégorie | Exigences, conventions ou version du logiciel utilisée |
---|---|
Système | RHEL 8/CentOS 8 |
Logiciel | HAProxy, Nginx |
Autre | Accès privilégié à votre système Linux en tant que root ou via le sudo commande. |
Conventions | # - nécessite que les commandes linux données soient exécutées avec les privilèges root soit directement en tant qu'utilisateur root, soit en utilisant sudo commande$ – nécessite que les commandes linux données soient exécutées en tant qu'utilisateur normal non privilégié |
Architecture et concepts HAProxy
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 transfère les paquets TCP RAW du client vers les 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 prenant en charge le mode HTTP de couche 7.
L'algorithme d'équilibrage est 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.
Le moins conn
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.
Configurer le fichier hosts pour la résolution de noms
Connectez-vous au serveur d'équilibrage de charge et modifiez le /etc/hosts
fichier et équilibreur de charge HAProxy, noms d'hôte nginx1, nginx2. Copiez le même fichier sur les deux autres nœuds nginx et vérifiez la connectivité réseau via la commande ping.
# vim /etc/hosts
192.168.1.108 loadbalancer.example.com
192.168.1.104 nginx1.example.com
192.168.1.105 nginx2.example.com
Installer et configurer HAProxy
HAProxy est disponible dans le référentiel RHEL 8 / CentOS 8, donc connectez-vous au serveur loadbalancer et installez le package HAProxy avec cette commande yum.
# yum install haproxy
Une fois installé avec succès, vous pouvez utiliser la commande ci-dessous pour vérifier l'installation.
# yum info haproxy
# yum info haproxy Updating Subscription Management repositories. Updating Subscription Management repositories. Last metadata expiration check: 0:06:03 ago on Sat 16 Mar 2019 11:40:24 PM +04. Installed Packages Name : haproxy Version : 1.8.14 Release : 1.el8 Arch : x86_64 Size : 4.1 M Source : haproxy-1.8.14-1.el8.src.rpm Repo : @System From repo : rhel-8-for-x86_64-appstream-beta-rpms Summary : HAProxy reverse proxy for high availability environments URL : http://www.haproxy.org/ License : GPLv2+ Description : HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high : availability environments. Indeed, it can: : - route HTTP requests depending on statically assigned cookies : - spread load among several servers while assuring server persistence : through the use of HTTP cookies : - switch to backup servers in the event a main one fails : - accept connections to special ports dedicated to service monitoring : - stop accepting connections without breaking existing ones : - add, modify, and delete HTTP headers in both directions : - block requests matching particular patterns : - report detailed status to authenticated users from a URI : intercepted from the application
Lorsque l'installation est terminée, allez dans le /etc/haproxy/
répertoire et sauvegardez le fichier de configuration d'origine.
# cd /etc/haproxy/ # cp haproxy.cfg haproxy.cfg.orig
Ensuite, effectuez les modifications ci-dessous dans le fichier de configuration HAProxy haproxy.cfg
avec n'importe quel éditeur.
#--------------------------------------------------------------------- # Example configuration for a possible web application. See the # full configuration options online. # # https://www.haproxy.org/download/1.8/doc/configuration.txt # #--------------------------------------------------------------------- #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log # log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats # utilize system-wide crypto-policies ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM #--------------------------------------------------------------------- # 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 stats bind loadbalancer.example.com: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 admin:admin # User and Password for login to the monitoring dashboard #stats admin if TRUE default_backend loadbalancer # This is optionally for monitoring backend #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend loadbalancer bind loadbalancer.example.com:80 #acl url_static path_beg -i /static /images /javascript /stylesheets #acl url_static path_end -i .jpg .gif .png .css .js #use_backend static if url_static option http-server-close option forwardfor default_backend loadbalancer #--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- #backend static # balance roundrobin # server static 127.0.0.1:4331 check #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- backend loadbalancer 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.example.com 192.168.1.104:80 check # NGINX Server1 server nginx2.example.com 192.168.1.105:80 check # NGNIX Server2
Enregistrez ce fichier de configuration et quittez.
Maintenant, nous allons configurer le démon rsyslog pour enregistrer les statistiques HAProxy. Modifiez le rsyslog.conf
fichier pour permettre au port UDP 514 d'être utilisé par rsyslog. Ouvrez le fichier de configuration rsyslog et décommentez les lignes pour activer la connexion UDP.
# vim /etc/rsyslog.conf
module(load="imudp") # needs to be done just once input(type="imudp" port="514")
Enregistrez le fichier avec les modifications ci-dessus et quittez. Créez ensuite un nouveau fichier de configuration HAProxy pour rsyslog et ajoutez les entrées ci-dessous dans ce fichier.
# cd /etc/rsyslog.d/ # vi haproxy.conf
local2.=info /var/log/haproxy-access.log # For Access Log local2.notice /var/log/haproxy-info.log # For Service Info - Backend, loadbalancer
Maintenant, redémarrez rsyslog, puis démarrez le service HAProxy et ajoutez HAProxy pour démarrer au démarrage.
# systemctl restart rsyslog # systemctl start haproxy # systemctl enable haproxy
Installer et configurer Nginx
Nginx fait déjà partie du référentiel RHEL 8 / CentOS 8 existant et peut être installé avec la commande suivante.
# yum install nginx
Une fois installé, vous pouvez vérifier l'installation à l'aide de cette commande.
# yum info nginx
# yum info nginx Updating Subscription Management repositories. Updating Subscription Management repositories. Last metadata expiration check: 0:06:14 ago on Sat 16 Mar 2019 11:40:24 PM +04. Installed Packages Name : nginx Epoch : 1 Version : 1.14.0 Release : 3.el8+1631+ba902cf0 Arch : x86_64 Size : 568 k Source : nginx-1.14.0-3.el8+1631+ba902cf0.src.rpm Repo : rhel-8-for-x86_64-appstream-beta-rpms Summary : A high performance web server and reverse proxy server URL : http://nginx.org/ License : BSD Description : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and : IMAP protocols, with a strong focus on high concurrency, performance and low : memory usage.
Une fois Nginx installé, allez dans le répertoire web et modifiez le index.html
déposer en conséquence. Assurez-vous de suivre les étapes ci-dessous sur les serveurs nginx1 et nginx2.
# cd /usr/share/nginx/html # ls -lrth total 20K -rw-r--r--. 1 root root 2.8K Oct 31 2016 poweredby.png -rw-r--r--. 1 root root 368 Oct 31 2016 nginx-logo.png -rw-r--r--. 1 root root 3.7K Mar 16 20:39 50x.html -rw-r--r--. 1 root root 3.6K Mar 16 20:39 404.html -rw-r--r--. 1 root root 3.7K Mar 16 20:42 index.html
Ensuite, ajoutez Nginx pour démarrer au démarrage, puis démarrez le démon avec les commandes ci-dessous.
# systemctl enable nginx # systemctl start nginx
Test de la fonctionnalité d'équilibrage de charge
Les tests peuvent être effectués en parcourant et en accédant à l'IP 192.168.1.108 de l'équilibreur de charge (dans mon cas) et vous verrez une fois qu'il va au Nginx Node1 et une deuxième fois qu'il va au Nginx Node2 de manière circulaire.
Page Web sur NGINX Node1. Page Web sur NGINX Node2.
Vous pouvez également vérifier le /var/log/haproxy-access.log
pour obtenir des informations détaillées sur l'équilibrage de charge.
Accéder à l'URL des statistiques HAProxy
Accédez au tableau de bord du rapport statistique HAProxy qui s'exécute sur le port 8080 avec le nom d'utilisateur et le mot de passe définis dans haproxy.cfg
fichier.
http://192.168.1.108:8080/statsAccédez à l'URL des statistiques HAProxy. Tableau de bord des statistiques HAProxy.
HAProxy fonctionne correctement et agit comme un équilibreur de charge pour les 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 RHEL 8 / CentOS 8 Linux, HAProxy est disponible dans le référentiel par défaut. Il est facile à installer et à configurer.