GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment configurer HAProxy dans Ubuntu 16.04

HAProxy est un outil open source d'équilibrage de charge et de services proxy haute disponibilité pour les applications réseau TCP et HTTP. Il est facile à utiliser, convient aux sites Web à volume élevé et s'intègre parfaitement dans les architectures existantes. Il offre des connexions transparentes, le déchargement du serveur, l'application de politiques, limite les connexions en dehors de sa fonction principale de service proxy. Dans cet article, nous expliquons comment configurer haproxy dans Ubuntu 16.04.

1. Configurer le réseau

Nous ajouterons trois serveurs Web fonctionnant avec Apache2 et un serveur HAPROXY qui proxy toutes les requêtes/réponses des trois services Web de notre réseau.

Les listes suivantes répertorient les détails du serveur Web dans notre réseau.

Server 1:    site1.local     10.0.1.116
Server 2:    site2.local     10.0.1.117
Server 3:    site3.local     10.0.1.119

Serveur HAProxy :

load-balancer.local      10.0.1.118

Nous allons également attacher une adresse IP publique à load-balancer.local afin d'y accéder depuis le domaine public (facultatif). Si vous ne souhaitez pas y accéder depuis le domaine public, vous pouvez ignorer l'attachement de l'adresse IP publique en supposant que vous accéderez au serveur proxy de votre réseau.

2. Configurer le nom d'hôte

Puisque nous allons accéder à l'équilibreur de charge et au serveur Web par leur nom (et non par IPADDRESS), nous allons donc configurer le nom d'hôte de trois serveurs Web et d'un serveur proxy. Nous allons configurer le nom d'hôte de trois serveurs Web et du serveur proxy comme site1.local, site2.local, site3.local et load-balancer.local respectivement.

Nous allons configurer le nom d'hôte de 10.0.1.116 en tant que site1.local dans /etc/hosts et /etc/hostname

root@site1:~# vi /etc/hosts
127.0.0.1 localhost
10.0.1.116 site1.local

root@site1:~# vi /etc/hostname
site1.local

Redémarrer le réseau

root@site1:~#  service networking restart

Installez apache et activez-le.

root@site1:~# apt-get install apache2

root@site1:~# service apache2 enable

root@site1:~# service apache2 start

Créer un fichier d'index pour site1.local

root@site1:~# vi /var/www/html/index.html

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

Ajouter une règle de pare-feu pour http

# ufw allow 80/tcp
# ufw reload

Vérifiez maintenant si vous pouvez accéder au site1

root@site1:~# curl -I site1.local
HTTP/1.1 200 OK
Date: Sun, 14 Aug 2016 14:30:29 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Sun, 14 Aug 2016 03:50:35 GMT
ETag: "ec-53a0004a26c6d"
Accept-Ranges: bytes
Content-Length: 236
Vary: Accept-Encoding
Content-Type: text/html

OU

root@site1:~#  curl  site1.local
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

Répétez l'étape 2 pour site2 ( 10.0.1.117 ) et site3 ( 10.0.1.119 ).

Dans le serveur proxy, ajoutez les trois entrées de serveurs Web (IPADDRESS HOSTNAME) en plus de son propre nom d'hôte en tant que load-balancer.local

root@load-balancer:~# vi  /etc/hosts
127.0.0.1 localhost
10.0.1.118 load-balancer.local
10.0.1.116 site1.local
10.0.1.117 site2.local
10.0.1.119 site3.local

Configurer le nom d'hôte du serveur proxy

root@load-balancer:~# vi /etc/hostname
load-balancer.local

3. Installer HAProxy

Avant de l'installer, mettez à jour Ubuntu. Exécutez la commande suivante en tant que root ou en utilisant sudo pour mettre à jour Ubuntu.

root@load-balancer:~# apt-get update

Maintenant, mettez à jour les packages sur le système.

root@load-balancer:~# apt-get upgrade

Installez-le en exécutant la commande suivante dans le terminal.

root@load-balancer:~# apt-get install haproxy

Pour activer le service en tant que démon, modifiez /etc/defaults/haproxy et ajoutez la ligne suivante.
ACTIVÉ=1

root@load-balancer:~# vi /etc/defaults/haproxy

ENABLED=1
# Add extra flags here
#EXTRAOPTS="-de -m 16"

Démarrer le service

root@load-balancer:~# service haproxy start

4. Configurer HAProxy

Le fichier de configuration situé dans /etc/haproxy/haproxy.cfg et comporte deux parties global et proxies, la section Global définit les paramètres à l'échelle du processus et la section proxy se compose des sections defaults, listen, front-end et back-end.

Editez le fichier de configuration avec l'éditeur de texte vi

root@load-balancer:~# vi /etc/haproxy/haproxy.cfg

Le fichier de configuration par défaut ressemblera à ce qui suit. Conservez la section globale et par défaut telle quelle.

Section globale

global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon

# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private

# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
#  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH
+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3

Section par défaut

defaults
log     global
mode    http
option  httplog
option  dontlognull
timeout connect 5000
timeout client  50000
timeout server  50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

Ajout d'un écouteur :

Une section "front end" décrit un ensemble de sockets d'écoute acceptant les connexions client. Le front-end définit comment les requêtes doivent être traitées et envoyées au serveur back-end :

frontend Local_Server
bind 10.0.1.118:80
mode http
default_backend My_Web_Servers

Ajout de serveurs Web principaux :

Une section "back-end" décrit un ensemble de serveurs auxquels le proxy se connectera pour transférer les connexions entrantes. Selon la configuration ci-dessus, l'équilibreur de charge écoute maintenant sur le port 80. Définissez maintenant les serveurs Web principaux auxquels il enverra la demande.

backend My_Web_Servers
mode http
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
option httpchk HEAD / HTTP/1.1rnHost:localhost
server site1.local  10.0.1.116:80
server site2.local  10.0.1.117:80
server site3.local  10.0.1.119:80

Vous pouvez ajouter le paramètre "vérifier" à la fin des trois lignes ci-dessus pour vérifier le paramètre de santé de vos serveurs Web.

Vous pouvez utiliser un autre algorithme d'équilibrage en fonction de vos besoins.

Leastconn
Sélectionne le serveur avec le moins de connexions -- il est recommandé pour les sessions plus longues. Les serveurs du même backend sont également alternés selon un mode round robin.

Source
Cela sélectionne le serveur à utiliser en fonction d'un hachage de l'adresse IP source, c'est-à-dire l'adresse IP de votre utilisateur. C'est une méthode pour s'assurer qu'un utilisateur se connectera au même serveur.

Activer les statistiques (facultatif)

Maintenant, si vous le souhaitez, vous pouvez activer les statistiques en ajoutant ce qui suit dans le fichier de configuration.

listen stats
bind :9000
stats enable
stats hide-version
stats refresh 20s
stats show-node
stats uri /stats

5. Redémarrez HAProxy

Puisque vous avez terminé avec toutes les configurations nécessaires pour le serveur proxy, vérifiez le fichier de configuration avant de redémarrer le service à l'aide de la commande suivante.

root@load-balancer:~# haproxy -c -f /etc/haproxy/haproxy.cfg

Si la commande ci-dessus a renvoyé la sortie comme "le fichier de configuration est valide", redémarrez le service HAProxy

root@load-balancer:~# service haproxy restart

Vérifiez maintenant l'état du serveur HAProxy.

root@load-balancer:~#  service haproxy status

6. Tester HAProxy

Avant de tester, assurez-vous que vous pouvez envoyer un ping au serveur Web (site1.local, site2.local, site3.local) à partir de load-balancer.local

root@load-balancer:~# ping site1.local
PING site1.local (10.0.1.116) 56(84) bytes of data.
64 bytes from site1.local (10.0.1.116): icmp_seq=1 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=2 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=3 ttl=64 time=0.648 ms

root@load-balancer:~# ping site2.local
PING site2.local (10.0.1.117) 56(84) bytes of data.
64 bytes from site2.local (10.0.1.117): icmp_seq=1 ttl=64 time=3.02 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=2 ttl=64 time=0.687 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=3 ttl=64 time=0.778 ms

root@load-balancer:~# ping site3.local
PING site3.local (10.0.1.119) 56(84) bytes of data.
64 bytes from site3.local (10.0.1.119): icmp_seq=1 ttl=64 time=0.830 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=2 ttl=64 time=0.631 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=3 ttl=64 time=0.771 ms

Tester HAPROXY avec CURL

Pour tester l'exécution du script suivant à partir du terminal, vous constaterez que l'équilibreur de charge envoie une demande à trois serveurs Web dans une méthode de tourniquet.

root@load-balancer:~# while true; do curl http://10.0.1.118; sleep 1; done
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>

...............................

...............................

...............................

Tester dans le navigateur :

Pointez votre navigateur sur http://load-balancer.local ou http://Server-Public-IP, vous obtiendrez une réponse de trois serveurs Web de manière circulaire confirmant qu'il fonctionne conformément à nos attentes. À chaque actualisation, le serveur proxy envoie une par une les requêtes au serveur Web principal.

Vous pouvez également visiter l'URL des statistiques qui est configurée dans la dernière section du fichier de configuration pour confirmer que les ports sont ouverts au trafic. Naviguez simplement vers Public IP ou http://load-balancer.local sur le port 9000.

Par exemple, accédez à http://load-balancer.local:9000/stats

Vous pouvez également surveiller l'état du serveur à partir du terminal à l'aide de HATOP. HATOP est un outil tiers qui extrait les statistiques d'un fichier socket créé par l'équilibreur de charge. Installez HATOP en exécutant la commande suivante depuis le terminal.

root@load-balancer:~# apt-get install hatop

Normalement, lors de l'exécution de HATOP, vous devez utiliser le paramètre -s avec la commande sudo hatop -s /var/run/haproxy.sock. Pour éviter d'avoir à saisir le paramètre -s lors de l'appel à HATOP, vous pouvez insérer la ligne suivante dans votre fichier ~/.bashrc :

exporter unix-socket=/var/run/haproxy.sock

7. Journalisation de HAProxy

Modifiez /etc/rsyslog.d/haproxy.conf et ajoutez-y les lignes suivantes.

local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log

Redémarrez rsyslog

root@load-balancer:~# service rsyslog restart

Vérifiez maintenant les journaux à l'aide de la commande suivante

root@load-balancer:~# tail -f /var/log/haproxy*.log

Ajoutez également la ligne "debug" dans la section globale du fichier de configuration pour la journalisation détaillée.

Conclusion

Avec HAProxy, vous pouvez augmenter les performances et la disponibilité de votre application Web. Ce didacticiel n'est qu'une introduction à l'équilibrage de charge bien qu'il soit capable de faire bien plus que ce qui est décrit dans ce didacticiel. Vous pouvez améliorer la haute disponibilité en configurant une adresse IP flottante entre plusieurs équilibreurs de charge pour vous protéger contre les pannes dans un seul équilibreur de charge.


Ubuntu
  1. Comment configurer le serveur Rsyslog sur Ubuntu 18.04 LTS

  2. Comment configurer le cluster MariaDB Galera sur Ubuntu 20.04

  3. Comment configurer le pare-feu UFW sur Ubuntu 18.04

  4. Comment configurer Elasticsearch sur Ubuntu 18.04 et 16.04 LTS

  5. Configurer Rsyslog Server sur Ubuntu 20.04 - Comment faire ?

Comment configurer le serveur Git sur Ubuntu 20.04

Comment configurer le serveur Rsyslog sur Ubuntu

Comment configurer le serveur DHCP sur Ubuntu

Comment configurer la liaison réseau dans Ubuntu 20.04

Comment configurer HAProxy sur CentOS 8

Comment configurer le pare-feu UFW sur Ubuntu 20.04