Cluster-use Haproxy pour construire

Haproxy construit un cluster

1. Planificateur de cluster Web commun

 目前常见的 Web 集群调度器分为软件和硬件,软件通常使用开源的LVS、Haproxy、Nginx,硬件一般使用比较多的是 F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等。

2. Analyse des applications Haproxy

1. LVS a une forte capacité anti-charge dans les applications d'entreprise, mais il y a des lacunes

LVS不支持正则处理,不能实现动静分离、
 对于大型网站,LVS的实施配置复杂,维护成本相对较高

2.Haproxy est un logiciel qui peut fournir une haute disponibilité, un équilibrage de charge et un proxy basé sur des applications TCP et HTTP

特别适用于负载特别大的Web站点
运行在当前的硬件上可支持数以万计的并发连接的链接请求

3. 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:

1.RR (ronde préliminaire)

RR算法是最简单最常用的一-种算法,即轮询调度

理解举例
  有三个节点A、B、C,第一个用户访问会被指派到节点A,第二个用户访问会被指派到节点B,第三个用户访问会被指派到节点
  第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果

2.LC (moindres connexions)

LC算法即最小连接数算法,根据后端的节点连接数大小动态分配前端请求

理解举例
   有三个节点A、B、C,各节点的连接数分别为A:4、B:5、 C:6, 此时如果有第一个用户连接请求,会被指派到A上,连接数变为A:5、B:5、 C:6
   第二个用户请求会继续分配到A上,连接数变为A:6、B:5、 C:6; 再有新的请求会分配给B,每次将新的请求指派给连接数最小的客户端
   由于实际情况下A、B、C的连接数会动态释放,很难会出现-样连接数的情况,因此此算法相比较rr算法有很大改进,是目前用到比较多的-种算法

3.SH (hachage de la source)

SH即基于来源访问调度算法,此算法用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度

理解举例
  有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B
  当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡调度器不重启,第一个用户访问都会被指派到A,第二个用户访向都会被指派到B,实现集群的调度
  此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用

4. Fichier de configuration Haproxy détaillé

1. Le fichier de configuration Haproxy est généralement divisé en trois parties

global:为全局配置
defaults:为默认配置
listen:为应用组件配置

Paramètres de configuration 2.Global

log 127.0.0.1 local0:配置日志记录,配置日志记录,ocal0为日志设备,默认存放到系统日志
log 127.0.0.1 local0 notice: notice为 日志级别通常有24个级别
maxconn4096:最大连接数
uid 99:用户uid
gid 99:用户gid

3. L'élément de configuration par défaut configure les paramètres par défaut, qui sont généralement hérités par le composant d'application. S'il n'y a pas d'instruction spéciale dans le composant d'application, les paramètres de configuration par défaut seront installés.

log global:定义日志为global配置中的日志定义
mode http:模式为http
option httplog:采用http日志格式记录日志
retries 3:检查节点服务器失败连续达到三次则认为节点不可用
maxconn 2000:最大连接数
contimeout 5000:连接超时时间
clitimeout 50000:客户端超时时间
srtimeout 50000:服务器超时时间

4.Les éléments de configuration d'écoute sont généralement des paramètres de module d'application de configuration

listen appli4-backup 0.0.0.0:10004: 定义一-个appli4-backup的应用
option httpchk /index.html: 检查服务器的index.html文件, option persist :强制将请求发送到已经down掉的服务器) Balance roundrobin: 负载均衡调度算法使用轮询算法
server inst1 192.168.114 .56:80 check inter 2000 fall3: 定义在线节点
 server inst2 192. 168.114.56:81 check inter 2000 fall 3 backup:定义备份节点

5. Gestion des journaux Haproxy

Haproxy的日志默认是输出到系统的syslog中,在生产环境中一般单独定义出来

修改Haproxy配置文件中关于日志配置的选项,加入配置:
vi /etc/haproxy/haproxy.cfg
 log 127.0.0.1 local0和log 127.0.0.1 local0 notice  //需要注释掉
 log /dev/log local0 info
 log /dev/log local0 notice
 修改rsyslog配置,将Haproxy相关的配置独立定义到 haproxy.conf,并放到etclrsyslog.d下,保存配置文件并重启rsyslog服务,完成rsyslog配置

Paramètres optimisés 6.Haproxy

随着企业网站负载增加,haproxy参数优化相当重要

maxconn:最大连接数,根据应用实际情况进行调整,推荐使用10 240
daemon:守护进程模式, Haproxy可以使用非守护进程模式启动,建议使用守护进程模式启动
nbproc:负载均衡的并发进程数,建议与当前服务器CPU核数相等或为其2倍
oretries:重试次数,主要用于对集群节点的检查,如果节点多,且并发量大,设置为2次或3次
option http-server-close:主动关闭http请求选项,建议在生产环境中使用此选项
timeout http-keep-alive:长连接超时时间,设置长连接超时时间可以设置为10s
timeout http-request: http请求超时时间,建议将此时间设置为5~ 10s,增加http连接释放速度
timeout client:客户端超时时间,如果访问量过大,节点响应慢可以将此时间设置短一些,建议设置为1min左右就可以了

Five. Démo

1. Exigences environnementales
1. Un serveur de planification Haproxy, deux serveurs Nginx, un client;
2. Trois serveurs sont des systèmes CentOS 7.3 64 bits;
3. Toutes les cartes réseau hôte sont configurées en mode hôte uniquement, avec une adresse de liaison statique;
4 Le client peut accéder aux deux serveurs de nœuds en accédant au serveur de répartition, sans accéder à la véritable adresse du serveur.
2. Planification des
adresses Serveur Haproxy: 192.168.100.210
Serveur Nginx 1: 192.168.100.201
Serveur Nginx 2: 192.168.100.202
Serveur nfs: 192.168.100.200
client: 192.168.100.50

1. Construisez le serveur de planification Haproxy

Utilisez yum pour installer les outils de compilation

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

Décompressez le paquet source haproxy et compilez

 yum -y install gcc gcc-c++ make pcre-devel bzip2-devel
 cd /opt/
 tar zxf haproxy-1.4.24.tar.gz
 cd haproxy-1.4.24/
 make TARGET=linux26
 make install

Modifiez le fichier de configuration haproxy.cfg et démarrez le service

mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
vi /etc/haproxy/haproxy.cfg
注释下面,防止启动失败
#chroot /usr/share/haproxy
#redispatch

删除所有listen条目,添加一下条目
listen webcluster 0.0.0.0:80
    option httpchk GET /index.html
    balance roundrobin
    server web1 192.168.100.201:80 check inter 2000 fall 3
    server web2 192.168.100.202:80 check inter 2000 fall 3

Copiez le script de démarrage haproxy dans le processus de démarrage du système

cp examples/haproxy.init /etc/init.d/haproxy       #复制haproxy启动脚本到系统启动进程中
vi /etc/init.d/haproxy
# chkconfig:35 80 83(将-换成35)

chmod 755 /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy     #建立脚本命令软链接
$syslogseverity-text
systemctl start haproxy

2. Configuration du serveur NFS

yum -y install nfs-utils rpcbind
mkdir /opt/web1
mkdir /opt/web2
echo "this is kgc web" > /opt/web1/index.html
echo "this is accp web" > /opt/web2/index.html

vi /etc/exports
/opt/web1 192.168.100.201/32(ro)
/opt/web2 192.168.100.202/32(ro)
systemctl start nfs
systemctl start rpcbind
showmount -e	#查看本机共享存储发布情况

3. Construisez le serveur Nginx

Les deux serveurs Nginx doivent utiliser yum pour installer les outils de compilation

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

Décompressez le package de code source et créez un utilisateur administratif

#解压Nginx源码包到/opt目录
root@nginx1 mnt]# tar zxvf nginx-1.12.2.tar.gz -C /opt

#创建Nginx管理用户
 root@nginx1 mnt]# cd /opt
[root@nginx1 opt]# useradd -M -s /sbin/nologin nginx

Configurer Nginx1

cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
.编译安装
 make && make install
 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
 nginx
 nginx -t
 mount 192.168.100.200:/opt/web1 /usr/local/nginx/html/index.html

Configurer Nginx2

cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
.编译安装
 make && make install
 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
 nginx
 nginx -t
 mount 192.168.100.200:/opt/web2 /usr/local/nginx/html/index.html

4. Test

Insérez la description de l'image ici
Insérez la description de l'image ici

5. Journal de configuration

#重启haproxy 服务
 service haproxy restart 
Restarting haproxy (via systemctl):                        [  确定  ]

#创建
 touch /etc/rsyslog.d/haproxy.conf
 vim /etc/rsyslog.d/haproxy.conf

#定义haproxy信息日志
if ($programname  =='haproxy' and $syslogseverity-text'== 'info')
then -/var/log/haproxy/haproxy-info.log
&~

#定义haproxy通知日志
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
 then -/var/log/haproxy/haproxy-notice.log
&~

#重启日志服务
systemctl restart rsyslog.service

#切换到日志目录下查看haproxy日志文件
 cd /var/log/haproxy/
 ls
 haproxy-info.log

#查看日志文件
 cat haproxy-info.log

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45647891/article/details/111027376
conseillé
Classement