Haproxy coopère avec Nginx pour construire une expérience de déploiement de cluster Web (graphique détaillé!)

Haproxy coopère avec Nginx pour construire une expérience de déploiement de cluster Web (graphique détaillé!)

Un planificateur de cluster Web commun

1) Le planificateur de cluster Web commun actuel est divisé en logiciel et matériel. Le
logiciel utilise généralement le logiciel open source LVS, Haproxy, Nginx

2) LVS a les meilleures performances, mais il est relativement compliqué à construire; le module en amont de Nginx prend en charge les fonctions de cluster, mais la fonction de vérification de l'état des nœuds de cluster n'est pas forte et une concurrence élevée n'est pas aussi bonne que Haproxy

3) Le matériel le plus couramment utilisé est F5, et de nombreuses personnes utilisent des produits domestiques tels que Barracuda et NSFOCUS


Deux, analyse de l'application Haproxy

  • LVS a une forte capacité anti-charge dans les applications d'entreprise, mais il existe des lacunes.
    LVS ne prend pas en charge le traitement régulier et ne peut pas réaliser de séparation dynamique et statique.
    Pour les sites Web à grande échelle, la mise en œuvre et la configuration de LVS sont complexes, et le succès de la maintenance relativement élevé.
  • Haproxy est un logiciel qui offre une haute disponibilité, un équilibrage de charge et un proxy basé sur des applications TCP et HTTP. Il
    convient aux sites Web à forte charge. Il
    fonctionne sur du matériel et prend en charge des dizaines de milliers de demandes de connexion simultanées.

Troisièmement, principe de l'algorithme d'ordonnancement Haproxy

Haproxy prend en charge une variété d'algorithmes de planification, les plus couramment utilisés sont trois

  • L'
    algorithme RR (Round Robin) RR est l'algorithme le plus simple et le plus couramment utilisé, à savoir l'ordonnancement à tour de rôle
  • L'
    algorithme de connexions minimales LC (Least Connections) alloue dynamiquement les requêtes frontales en fonction du nombre de connexions de nœuds back-end.
  • SH (Source Hashing) est
    basé sur l'algorithme de planification d'accès à la source. Il est utilisé dans certains scénarios où les sessions de session sont enregistrées côté serveur. La planification du cluster peut être effectuée en fonction de l'adresse IP source, du cookie, etc.

Quatrièmement, Haproxy construit un cluster Web

Package d'installation requis pour l'expérience

haproxy-1.5.19.tar.gz
nginx-1.12.0.tar.gz

Configuration de l'environnement

Héberger système opérateur adresse IP Logiciel / package d'installation / outil requis
Abréviation de Haproxy-Server
HS
CentOS7
7-2
192.168.2.4 haproxy-1.5.19.tar.gz

Abréviation Nginx-Server1 NS1
CentOS7
7-3
192.168.2.5 nginx-1.12.0.tar.gz
Abréviation Nginx-Server2
NS1
CentOS7
7-4
192.168.2.6 nginx-1.12.0.tar.gz
Client Win10 192.168.2.10

Insérez la description de l'image ici

Remarque:

1) En raison du même segment de réseau, il n'y a pas besoin de passerelle et de services DNS, il suffit de commenter la configuration de la carte réseau.

2) Tous les serveurs doivent fermer le pare-feu.

3) Il est préférable de configurer d'abord le serveur nginx, puis de configurer le serveur haproxy pour éviter les erreurs. La dernière chose à visiter est l'adresse / test.html du serveur haproxy.

4) Lorsque le port nginx est occupé, les méthodes suivantes peuvent être utilisées pour résoudre le problème

lsof -i:80
kill -9 进程号
nginx或者/usr/local/nginx/sbin/nginx
netstat -natp | grep 80

Insérez la description de l'image ici

1. Compilation de scripts et installation du serveur Nginx (la source yum est fournie avec le déploiement)

NS1 : 192.168.2.5
NS2 : 192.168.2.6

Remarque: vous devez d'abord faire glisser le package nginx-1.12.0.tar.gz dans le répertoire / opt

#!/bin/bash
#======配置yum源======
echo -e "\033[31m =====正在验证当前为仅主机还是NAT模式===== \033[0m"
ping -c2 -w2 www.baidu.com &> /dev/null
if [ $? -eq 0 ];then echo -e "\033[31m 检测当前为NAT模式,为您配置在线yum源 \033[0m"
mkdir -p /etc/yum.repos.d/repo.bak

mv -f /etc/yum.repos.d/* /etc/yum.repos.d/repo.bak &> /dev/null

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &> /dev/null

yum clean all &> /dev/null
yum list &> /dev/null
echo -e "\033[31m 在线源已配置完成 \033[0m"

else
echo -e "\033[31m 检测当前为仅主机模式,为您配置本地yum源 \033[0m"
mount /dev/sr0 /mnt &> /dev/null
cd /etc/yum.repos.d/
mkdir -p /etc/yum.repos.d/repo.bak

mv -f /etc/yum.repos.d/* /etc/yum.repos.d/repo.bak &> /dev/null

echo '[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0' > /etc/yum.repos.d/local.repo
yum clean all &> /dev/null
yum makecache &> /dev/null

df -h | grep "/mnt" 
if [ $? -ne 0 ];then
echo -e "\033[31m 检测当前为仅主机模式,但光盘未连接! \033[0m"
else
echo -e "\033[31m 本地yum源已配置完成 \033[0m"
fi
fi
#======编译安装nginx服务======
#安装所需开发包和编译环境、编译器
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#创建程序用户,便于准确控制访问
useradd -M -s /sbin/nologin nginx

#解压安装包
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

#指定安装路径、指定用户名、组名、启用模块以支持统计状态
cd nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-file-aio --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module


#编译及安装
make && make install

#软链接便于系统识别nginx操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

#添加nginx系统服务
echo '[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/nginx.service

#赋权及开启服务、开启开机自启
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

Insérez la description de l'image ici

Les opérations ci-dessus sont les mêmes pour les deux serveurs nginx, je ne les répéterai donc pas

NS1 : 192.168.2.5

echo "this is NS1 web" > /usr/local/nginx/html/test.html
cat /usr/local/nginx/html/test.html

Insérez la description de l'image ici

NS2 : 192.168.163.6

echo "this is NS2 web" > /usr/local/nginx/html/test.html
cat /usr/local/nginx/html/test.html

Insérez la description de l'image ici

2. Déployez le serveur haproxy

Haproxy-Server : 192.168.2.4

1) Désactivez le pare-feu et téléchargez les packages logiciels requis pour installer Haproxy dans le répertoire / opt

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

cd /opt
#把haproxy-1.5.19.tar.gz安装包拖进来

Insérez la description de l'image ici

2) Compilez et installez Haproxy

yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64 && make install

参数说明
#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
TARGET=linux26	#内核版本
ARCH=x86_64 	#系统位数,64位系统

Insérez la description de l'image ici

3) Configuration du serveur Haproxy

mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/

cd /etc/haproxy/
vim haproxy.cfg
global
  #4~5行–修改,配置日志记录,local0为日志设备,默认存放到系统日志
  log /dev/log   local0 info		
  log /dev/log   local0 notice
  #log loghost    local0 info
  maxconn 4096   #最大连接数,需考虑ulimit-n限制
  
  #8行–注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
  #chroot /usr/share/haproxy
  uid 99    #用户UID
  gid 99    #用户GID
  daemon    #守护进程模式

defaults        
  log     global      #定义日志为global配置中的日志定义
  mode    http	      #模式为http
  option  httplog     #采用http日志格式记录日志
  option  dontlognull #不记录健康检查日志信息
  retries 3           #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
  redispatch				    #当服务器负载很高时,自动结束当前队列处理比较久的连接
  maxconn 2000					#最大连接数
  contimeout      5000			#连接超时时间
  clitimeout      50000			#客户端超时时间
  srvtimeout      50000			#服务器超时时间

#删除下面所有listen项–,添加
listen  webcluster 0.0.0.0:80		
    option httpchk GET /test.html	#检查服务器的test.html文件
    balance roundrobin				#负载均衡调度算法使用轮询算法roundrobin
    server inst1 192.168.2.5:80 check inter 2000 fall 3		#定义在线节点
    server inst2 192.168.2.6:80 check inter 2000 fall 3

#--参数说明----------------
balance roundrobin   #负载均衡调度算法
#轮询算法: roundrobin;最小连接数算法: leastconn;来源访问调度算法: source,类似于nginx的ip_hash

check inter 2000 #表示haproxy服务器和节点之间的一个心跳频率
fall 3   #表示连续三次检测不到心跳频率则认为该节点失效
若节点配置后带有""backup"表示该节点只是个备份节点,只有主节点失效该节点才会上。不携带"backup",表示为主节点,和其它主节点共同提供服务。

Insérez la description de l'image ici

4) Ajouter le service système Haproxy

Remarque: cette étape doit être effectuée après la configuration du serveur Nginx, sinon le démarrage échouera

cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
ll
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start

Insérez la description de l'image ici

3. Testez le cluster Web

Ouvrez http://192.168.2.4/test.html avec un navigateur sur le client et actualisez constamment le navigateur pour tester l'effet d'équilibrage de charge

Insérez la description de l'image ici

Cinq, définition du journal

1. Modifier le fichier de configuration haproxy

Par défaut, le journal de haproxy est sorti dans le syslog du système, ce qui n'est pas très pratique à visualiser.Afin de mieux gérer le journal de haproxy, nous le définissons généralement séparément dans l'environnement de production. Les journaux d'informations et d'avis de haproxy doivent être enregistrés dans différents fichiers journaux.

vim /etc/haproxy/haproxy.cfg
global
	log /dev/log local0 info
	log /dev/log local0 notice

service haproxy restart
123456

2. Modifiez la configuration de rsyslog

Besoin de modifier la configuration de rsyslog, afin de faciliter la gestion. Définissez indépendamment la configuration relative à haproxy dans haproxy.conf et placez-la sous /etc/rsyslog.d/. Lorsque rsyslog démarre, il charge automatiquement tous les fichiers de configuration de ce répertoire.

vim /etc/rsyslog.d/haproxy.conf

if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
12345678

Remarque:
Cette partie de la configuration consiste à enregistrer le journal des informations de haproxy dans /var/log/haproxy/haproxy-info.log et à enregistrer le journal des notifications dans /var/log/haproxy/haproxy-notice.log. "& ~" signifie que lorsque le journal est écrit dans le fichier journal, rsyslog arrête de traiter ces informations.

systemctl restart rsyslog.service

tail -f /var/log/haproxy/haproxy-info.log		#查看haproxy的访问请求日志信息

Je suppose que tu aimes

Origine blog.csdn.net/qq_35456705/article/details/113668088
conseillé
Classement