présentation du serveur proxy haproxy

			第八章:部署haproxy代理 搭建nginx集群

Introduction à Haproxy
Haproxy est un proxy inverse open source hautes performances ou l'un des logiciels de service d'équilibrage de charge. Il prend en charge la sauvegarde à chaud sur deux machines, l'hôte virtuel, le proxy d'application basé sur TCP et HTTP et d'autres fonctions.
Sa configuration est simple et il dispose d'une bonne fonction de contrôle de santé pour les nœuds du serveur (équivalent au contrôle de santé keepalived). Lorsque le serveur back-end de son proxy tombe en panne, Haproxy supprimera automatiquement le serveur défaillant. Lorsque le serveur tombe en panne,
il récupérer. Enfin, Haproxy ajoutera automatiquement le serveur RS

Haproxy est particulièrement utile pour ceux qui ont beaucoup de trafic. Mais cela nécessite une maintenance de session ou des services d'application à sept couches. Haproxy fonctionne sur du matériel serveur ordinaire et peut prendre en charge des dizaines de milliers de connexions simultanées avec seulement de simples optimisations.
Et son mode de fonctionnement permet une intégration simple et sûre dans l'architecture de différents sites Web, tout en évitant que le serveur d'applications soit exposé au réseau.
Le logiciel Haproxy introduit les fonctions de frontend et de backend. Frontend (correspondance de règles acl) permet aux responsables de l'exploitation et de la maintenance de faire correspondre les règles en fonction de n'importe quel en-tête de requête HTTP, puis de
diriger la requête vers le backend concerné (pools de serveurs en attente de l'arrivée du front-end). transférer la requête au groupe de serveurs) ). Grâce à l'interface frontale et à la sauvegarde,
nous pouvons facilement implémenter la fonction proxy à 7 couches de haproxy. haproxy est un logiciel de service proxy rare et excellent.

Haproxy prend en charge deux modes proxy principaux : le premier est un proxy TCP à 4 couches (par exemple : il peut être utilisé pour le serveur de communication de protocole interne du service de messagerie, le service Mysql, etc.).
Le second est un proxy de couche 7 (comme un proxy HTTP). En mode proxy TCP de couche 4, Haproxy transfère uniquement le trafic dans les deux sens entre le client et le serveur.
Mais en mode 7 couches, Haproxy analysera le protocole de la couche application et pourra contrôler le protocole en exécutant, rejetant, échangeant, ajoutant, modifiant ou supprimant le contenu spécifié dans la demande ou la réponse.

Introduction au fichier de configuration principal de haproxy

vim /usr/src/haproxy-1.5.19/examples/haproxy.cfg

#La configuration globale, utilisée pour définir les paramètres globaux, est une configuration au niveau du processus, généralement liée à la configuration du système d'exploitation.
global
#Définir le journal global, configuré localement, sortie via local0, la valeur par défaut est le niveau d'information, deux
journaux 127.0 peuvent être configurés. 0.1 local0 warn
#Définir le niveau de journalisation [erreur d'avertissement info debug]
#log 127.0.0.1 local1 info
#Chemin d'exécution
chroot /usr/local/haproxy
#Chemin de stockage du fichier PID
pidfile /var/run/haproxy.pid
#Définir le processus de chaque processus haproxy Le nombre maximum de connexions simultanées, ce qui équivaut à l'option de ligne de commande "-n" ; le résultat calculé automatiquement de "ulimit -n" fait référence à ce paramètre. maxconn 4096 #Exécutez l'utilisateur haproxy ou utilisez le mot
-
clé uid
user haproxy
#Exécutez haproxy user group , ou utilisez le mot-clé gid
group haproxy #Exécutez le démon
haproxy en arrière-plan #Définissez le nombre de processus haproxy à démarrer, qui ne peuvent être utilisés pour haproxy qu'en mode démon ; #Un seul processus est démarré par défaut. Compte tenu de diverses raisons telles que la difficulté de débogage, il n'est généralement utilisé qu'en mode multi-processus et dans les scénarios où un seul processus ne peut ouvrir que quelques descripteurs de fichiers. nbproc 1




#Définissez le nombre maximum de descripteurs de fichiers pouvant être ouverts par chaque processus. Par défaut, il sera automatiquement calculé, il n'est donc pas recommandé de modifier cette option. #
ulimit-n 819200
#Niveau de débogage, généralement uniquement déboguer lorsqu'un seul le processus est démarré et dans l'environnement de production désactivé.
#debug
#haproxy n'affichera aucune information pertinente après le démarrage, ce qui revient à ajouter le paramètre "-q" lors du démarrage de haproxy à partir de la ligne de commande
#quiet
#Définir l'emplacement où les statistiques sont enregistrées
stats socket /usr/local/haproxy/stats
# Paramètres de configuration par défaut
#Mode par défaut
[tcp : couche 4 ; http : couche 7 ; santé : renvoie uniquement OK]
mode http
#Hériter la définition du journal global
journal de sortie global
#Catégorie de journal , httplog
#option httplog
#Si le serveur back-end doit enregistrer Pour la véritable adresse IP du client, vous devez ajouter le champ "X-Forwarded-For" dans la requête HTTP; #Mais
lorsque le propre mécanisme de détection de santé d'haproxy accède à l'arrière - serveur final, le journal d'accès ne doit pas être enregistré. Vous pouvez utiliser except pour exclure 127.0.0.0, c'est-à-dire haproxy lui-même.
#option forwardfor sauf 127.0.0.0/8
option forwardfor
#Activer la fonction d'arrêt côté serveur dans le protocole http , et fermez activement le canal http une fois chaque requête terminée, afin que les connexions longues soient prises en charge, que la session puisse être réutilisée et que chaque enregistrement de journal soit entièrement enregistré.
option httpclose
#Si une connexion vide est générée, le journal de cette connexion vide ne sera pas enregistré.
option dontlognull
#Lorsque la session avec le serveur backend échoue (panne du serveur ou autres raisons), redistribuez la session à d'autres serveurs sains sur ; quand le serveur défaillant récupère, la session est dirigée vers le serveur récupéré ;
#Vous pouvez également utiliser le mot-clé "retries" pour définir le nombre de tentatives de connexion lors de la détermination de l'option d'échec de session, tentatives
de redistribution 3 #Lorsque haproxy est soumis à une charge importante Lorsqu'il est élevé, les liens qui ont été traités dans la file d'attente actuelle pendant une longue période seront automatiquement terminés. option abortonclose #Délai d'expiration de la requête http par défaut http-request 10s #Délai d'expiration de la file d'attente par défaut, lorsque le serveur backend est sous une charge élevée, la requête envoyée par haproxy être mis dans une file d'attente. timeout file d'attente 1m #Le délai d'expiration de la connexion entre haproxy et le serveur back-end. timeout connect 5s #Une fois le client connecté à haproxy, la transmission des données est terminée et il n'y a plus de transmission de données, c'est-à-dire le délai d'expiration pour la connexion inactive. timeout client 1m # Le délai d'expiration pour la connexion inactive entre haproxy et le serveur back-end. timeout server 1m #Le délai d'expiration par défaut pour l'établissement d'une nouvelle connexion de requête http. Si l'heure est en bref, les ressources peuvent être libérées dès que possible pour économiser les ressources. timeout http-keep-alive 10s















#Heartbeat delay timeout
timeout check 10s
#Nombre maximum de connexions simultanées
maxconn 2000
#Définir la méthode d'équilibrage de charge par défaut
#balance source
#balnace leastconn
#Configuration de la page de statistiques, la combinaison du frontend et du backend, le nom du groupe de surveillance peut être personnalisé
écouter selon les besoins admin_status
#Configurer le mode de fonctionnement de la surveillance
http
#Configurer la liaison du port d'accès à la page de statistiques
0.0.0.0:1080
#Nombre maximum par défaut de connexions sur la page de statistiques
maxconn 10 #Option de
format de journal http httplog #Activer les statistiques de statistiques activer #Masquer les informations de version haproxy stats sur la page de statistiques #Temps d'actualisation automatique de la page de surveillance actualisation des statistiques 30s #URL d'accès à la page de statistiques stats uri /stats #Boîte de mot de passe de la page de statistiques texte d'invite stats realm mCloud\ Haproxy #Utilisateur et mot de passe de la page de surveillance : administrateur, plusieurs noms d'utilisateur peut être défini sur les statistiques authadmin:admin













#Démarrez/désactivez manuellement le serveur principal, vous pouvez utiliser l'
administrateur des statistiques du nœud de gestion Web si VRAI #
Définissez le fichier d'erreur de la page d'erreur haproxy
400 /usr/local/haproxy/errorfiles/400.http
errorfile 403 /usr/local/haproxy /errorfiles/403. http
fichier d'erreurs 408 /usr/local/haproxy/errorfiles/408.http
fichier d'erreurs 500 /usr/local/haproxy/errorfiles/500.http
fichier d'erreurs 502 /usr/local/haproxy/errorfiles/502.http
fichier d'erreurs 503 /usr/local/ haproxy/errorfiles/503.http
errorfile 504 /usr/local/haproxy/errorfiles/504.http
#Surveiller l'état de surveillance du serveur back-end haproxy
écouter site_status
bind 0.0.0.0:1081 #Écouter
le mode port http #http layer 7 mode
log 127.0.0.1 local2 err #[err warn info debug]
monitor-uri /site_status #URL de détection de l'état du site Web, utilisée pour vérifier si le site Web géré par HAProxy peut être utilisé. Il renvoie 200 normalement et 503 anormalement.
acl site_dead nbsrv(php_server) lt 1 #Définissez la stratégie lorsque le site Web est en panne. Renvoie vrai lorsque le nombre de machines effectives dans le backend spécifié suspendues à l'équilibreur de charge est inférieur à 1 acl site_dead nbsrv(html_server) lt 1 acl site_dead nbsrv (backend_default
)
lt 1
moniteur échoue si site_dead #Lorsque la politique est respectée, 503 est renvoyé. Le document en ligne indique 500, mais le test réel est 503 moniteur
-net 192.168.4.171/32 #Les informations de journal de 192.168.4.152 ne seront pas enregistré et transmis
monitor-net 192.168.4.172/32
#frontend, nom
frontend personnalisé HAproxy_Cluster #
Définissez le port d'écoute front-end, il est recommandé d'utiliser la forme bind:80, sinon il y aura des problèmes lors de la création du cluster hautement disponible , et le VIP ne pourra pas y accéder lors du passage à d'autres machines. bind
0.0.0.0 :80
#acl est suivi du nom de la règle. Lorsque l'URL demandée se termine par .php, la correspondance déclenche la règle php_web. Les deux Les méthodes d'écriture suivantes sont acceptables.
#Lorsque l'URL demandée se termine par .css, .jpg, .png, Lorsque .jpeg, .js, .gif se termine, faites correspondre et déclenchez les règles static_web. #acl
static_web path_end .gif .png .jpg . css .js .jpeg
#acl static_web url_reg /.(css|jpg|png|jpeg|js| gif)$
#-i ignore la casse. Lorsque l'hôte demandé est un hôte commençant par www.test.com, la règle dns_name est mise en correspondance et déclenchée.
acl html_web hdr_beg(host) -i www.haproxytest.com
#acl html_web hdr_beg(host) 10.11 .4.152
#Lorsque l'adresse IP du client est xxxx, faites correspondre et déclenchez la règle src_ip.
#acl src_ip src xxxx
#Si la règle acl php_web correspond, la demande sera transmise au groupe php_server pour traitement ; si la règle acl html_web correspond , la requête sera transmise au groupe html_server. Traitement.
use_backend php_server si php_web
use_backend html_server si html_web
#Si aucune des règles ci-dessus ne correspond, transférez la requête au groupe default_backend pour traitement.
default_backend backend_default
#Configuration du backend, configurez le php_server group et html_server group
backend php_server
#Définissez la méthode d'équilibrage de charge comme méthode roundrobin, c'est-à-dire un algorithme de planification round-robin basé sur le poids, qui est recommandé lorsque les performances du serveur sont relativement uniformément réparties. #Il existe également plusieurs méthodes d'équilibrage de charge
comme suit :
#-- static-rr : il s'agit également d'une planification à tour de rôle basée sur le poids, mais c'est une méthode statique, l'ajustement du poids de l'unité backend au moment de l'exécution n'utilisera pas le nouveau poids ; #-- source : effectuer une opération de
hachage en fonction de l'adresse IP source de la demande pour correspondre au groupe de serveurs back-end ;
#-- leastconn : Ne convient pas aux environnements avec des sessions courtes, tels que les applications basées sur http ;
#-- uri : opération de hachage sur l'ensemble de l'URI ;
#-- uri_param : transfert des paramètres dans l'URI ;
#-- hdr() : Transfert basé sur l'en-tête http. S'il n'existe pas d'en-tête, roundrobin est utilisé à la place.
balance roundrobin
mode http
#Autoriser l'insertion de l'ID du serveur dans le cookie.
Les cookies peuvent être définis après l'ID du serveur. SERVERID
#La méthode de détection du battement de cœur consiste à détecter le fichier index.html du serveur back-end, et également Il existe d'autres moyens,
option httpchk GET /index.html
#Définition du serveur back-end, maxconn 1024 représente le nombre maximum de connexions au serveur, le cookie 1 représente l'ID du serveur 1, le poids représente le poids ( par défaut 1, maximum 265, 0 signifie ne pas participer à l'équilibre de charge),
#check inter 1500 consiste à détecter la fréquence de battement de coeur, la montée 2 correspond à 2 heures correctes et le serveur est considéré comme disponible, la chute 3 correspond à 3 échecs et le serveur est indisponible.
serveur php1 192.168.4.171:80 maxconn 1024 cookie 1 poids 3 chèque inter 1500 montée 2 chute 3
backend html_server
solde source
mode http
serveur html1 192.168.4.172:80 maxconn 1024 cookie 1 poids 3 chèque inter 1500 montée 2 chute 3
backend backend_default
balance
mode source http
serveur default1 192.168.4.171:80 maxconn 1024 cookie 1 poids 3 vérification inter 1500 montée 2 chute 3


environnement de laboratoire :

  1. serveur proxy haproxy linux-1
    192.168.10.1

2.linux-2 nginx-1

192.168.10.2

3.linux-3 nginx-2

192.168.10.3

procédure d'expérimentation :

1. Compilez et installez le serveur Nginx (nginx-1, nginx-2)

Serveur 1.nginx-1

[root@localhost ~]# miam -y install pcre-devel zlib-devel

[root@localhost ~]# tar xf nginx-1.12.0.tar.gz -C /usr/src/

[root@localhost ~]# cd /usr/src/nginx-1.12.0

[root@localhost ~]# useradd -M -s /sbin/nologin nginx

[root@localhost ~]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx &&make &&make install

[root@localhost ~]# echo "

serveur 192.168.10.3

» >/usr/local/nginx/html/index.html

[root@localhost ~]# /usr/local/nginx/sbin/nginx

[root@localhost ~]# netstat -anput |grep nginx


Si vous devez arrêter le service /usr/local/nginx/sbin/nginx -s stop


Serveur 2.nginx-2 (vous pouvez utiliser un script pour l'installer et confirmer que le logiciel de code source a été stocké dans le répertoire /root)

[root@localhost ~]# vim nginx-install.sh

#!/bin/bash
read -p "Veuillez saisir le contenu de la page d'accueil :" index

miam -y installer pcre-devel zlib-devel

tar zxvf nginx-1.12.0.tar.gz -C /usr/src/

cd /usr/src/nginx-1.12.0

useradd -M -s /sbin/nologin nginx

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install

echo "$index" > /usr/local/nginx/html/index.html

/usr/local/nginx/sbin/nginx

netstat -anput|grep nginx &>/dev/null

if [ $? -eq 0 ] ;then
echo "Le service nginx a démarré avec succès"
else
echo "Le service nginx n'a pas démarré avec succès, veuillez vérifier le processus d'installation"
fi

[root@localhost ~]# chmod +x nginx-install.sh

[root@localhost ~]# ./nginx-install.sh

2. Serveur proxy Haproxy
1. Compilez et installez haproxy

[root@localhost ~]# miam -y install pcre-devel bzip2-devel

[root@localhost ~]# tar xf haproxy-1.5.19.tar.gz -C /usr/src/

[root@localhost ~]# cd /usr/src/haproxy-1.5.19/

## Système 64 bits
[root@localhost ~]# make TARGET=linux26

[root@localhost ~]# make install

2.配置Haproxy
[root@localhost haproxy-1.5.19]# vim /usr/src/haproxy-1.5.19/examples/haproxy.cfg


k Remarque :
global --global part
log /dev/log local0 info
log /dev/log local1 notice ----Stocker les journaux d'informations et de notifications séparément pour afficher
maxconn 4096 ----Nombre maximum de connexions
uid 99
gid 99 — ID d'utilisateur et de groupe
# pidfile /var/run/haproxy.pid —Le chemin et le nom de fichier du
démon de fichier pid – exécuté en arrière-plan

valeurs par défaut ----
Journal de configuration par défaut global ——Appliquer la partie globale du
mode de configuration du journal http ——Le mode est option http
option httplog
dontlognull
retries 3 ---------Vérifiez le nombre d'échecs du nœud . S'il atteint 3 fois de suite, le nœud est considéré comme indisponible. Utilisez
maxconn 2000 ----- nombre maximum de connexions
contimeout 5000-connection timeout 5000
clitimeout 50000
srvtimeout 50000 ---- les délais d'attente du client et du serveur sont tous deux de 50000.

# option httpclose ----关闭客户端请求

écouter webcluster 0.0.0.0:80 ----option de cluster Web (adresse d'écoute et interface)
httpchk GET /index.html ----vérifier
l'équilibre des fichiers http roundrobin - algorithme de planification d'équilibrage de charge interrogeant
le serveur roundrobin inst1 192.168.10.2 :80 check inter 2000 fall 3
server inst2 192.168.10.3:80 check inter 2000 fall 3 - L'adresse, le nom, le port, l'intervalle de vérification et le numéro de contrôle de santé du nœud du serveur sont considérés comme ayant échoué après 3 fois

Le fichier journal dans le répertoire /dev/log est un socket. C'est le site d'une ligne de communication, et il existe un réseau de communication de données entre ces points terminaux (prises).
Son processus de communication est le suivant :
le programme accède à l'adresse de socket de l'ordinateur distant et une ligne de communication est établie entre l'adresse de socket de l'ordinateur accédé et l'adresse de socket de l'ordinateur distant.

[root@localhost ~]# cd

[root@localhost ~]# mkdir /etc/haproxy

Modifiez le fichier de configuration comme suit

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg journal
global
/dev/log local0 journal d'informations
/dev/log local1 avis
maxconn 4096
uid 99
gid 99
démon

journal par défaut mode
global option
http
option httplog
dontlognull
nouvelles tentatives 3
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

écouter webcluster 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
serveur inst1 192.168.10.2:80 vérifier inter 2000 automne 3
serveur inst2 192.168.10.3:80 vérifier inter 2000 automne 3

[root@localhost ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy

[root@localhost ~]# chmod +x /etc/init.d/haproxy

[root@localhost ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

[root@localhost ~]# /etc/init.d/haproxy restart

3. Vérification :
Le client ouvre 2 navigateurs IE et accède : http://192.168.10.1

Vérifiez si vous pouvez obtenir différents contenus Web et cela réussira.

4. Gestion des journaux haproxy :
Les journaux Haproxy sont sortis par défaut dans le syslog du système, ce qui n'est pas très pratique à visualiser. Afin de faciliter la gestion des journaux haproxy, ils sont définis séparément dans l'environnement de production.

[root@localhost ~]# cd /etc/rsyslog.d/

[root@localhost ~]# vim haproxy.conf

local0.* /var/log/haproxy/ha-info.log
local1.* /var/log/haproxy/ha-notice.log

#Si vous n'ajoutez pas la configuration suivante, en plus d'écrire les journaux dans /var/log/haproxy.log, le fichier de messages sera également écrit.

[root@localhost ~]# vi /etc/sysconfig/rsyslog

Ajouter à:

SYSLOGD_OPTIONS="-r -m 0 -c 2"

:wq

#-c 2 Utiliser le mode de compatibilité, la valeur par défaut est -c 5
#-r Activer les journaux distants
#-m 0 Marquer l'horodatage. L'unité est la minute. Lorsqu'elle est égale à 0, cela signifie que la fonction est désactivée.

[root@localhost ~]# systemctl redémarrer rsyslog

[root@localhost ~]# /etc/init.d/haproxy restart

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg

journal global
/dev/log local0 journal d'informations
/dev/log local1 avis

Après avoir vérifié la configuration, haproxy.cfg a été configuré

Test de vérification :
[root@localhost ~]# tail /var/log/haproxy/ha-info.log

Vérifiez si des journaux sont générés

...
La configuration rsyslog pertinente dans le manuel est écrite en langage rainerscript et convient aux environnements complexes. Omis - utilisez simplement la méthode ci-dessus pour obtenir

vim /etc/rsyslog.d/haproxy.conf

Modifier le contenu :

si ($programname == 'haproxy' et $syslogserverity-text == 'info') alors -/var/log/haproxy/haproxy-info.log

& ~

si ($programname == 'haproxy' et $syslogserverity-text == 'notice') alors -/var/log/haproxy/haproxy-notice.log

& ~

Optimisation des paramètres Haproxy
maxconn Il est recommandé d'utiliser le démon 10240 pour le nombre maximum de connexions.
Le mode de processus démon peut utiliser le
nbproc par défaut non-démon. Il est recommandé que le nombre de processus simultanés pour l'équilibrage de charge soit égal ou 2 fois le Cœur du processeur du serveur actuel.
Le nombre de tentatives est destiné à vérifier les nœuds du cluster. S'il y a plusieurs nœuds, il est simultané. La quantité est importante, définie sur 2 à 3 fois. L'option
http-server-close ferme activement l'option de requête http . Utilisez cette option dans l'environnement de production pour éviter l'accumulation de connexions http en raison d'un délai d'expiration trop long.
timeout http-keep-alive long délai de connexion (10s) )
timeout http-request délai d'expiration de la demande http (5~10s) Augmentez le vitesse de la connexion HTTP
délai d'expiration du client délai d'expiration du client

Je suppose que tu aimes

Origine blog.csdn.net/m0_57207884/article/details/119669120
conseillé
Classement