广州网站设计后缀,淘宝店铺运营推广,安徽安庆邮编,怎样做百度推广网页HAproxy搭建Web群集一、Web集群调度器1、常见的Web集群调度器2、常用集群调度器的优缺点#xff08;LVS ,Nginx,Haproxy)2.1 Nginx2.2 LVS2.3 Haproxy 3、LVS、Nginx、HAproxy的区别 二、Haproxy1、简介2、Haproxy应用分析3、HAProxy的主要特性4、Haproxy调度算法#xff08;… HAproxy搭建Web群集一、Web集群调度器1、常见的Web集群调度器2、常用集群调度器的优缺点LVS ,Nginx,Haproxy)2.1 Nginx2.2 LVS2.3 Haproxy 3、LVS、Nginx、HAproxy的区别 二、Haproxy1、简介2、Haproxy应用分析3、HAProxy的主要特性4、Haproxy调度算法负载均衡策略5、Haproxy 的会话保持6、支持的节点健康检查方式7、支持的代理类型 三、HAproxy 服务器部署Haproxy实现负载均衡、动静分离1、编译安装Haproxy2、修改Haproxy配置文件配置前后端分别处理动态资源和静态资源3、添加haproxy 系统服务4、部署Tomcat并配置动态页面5、部署节点服务器并配置静态页面6、测试动态和静态页面使用 Keepalived 实现 HAProxy 高可用7、安装keepalived并编写配置文件8、效果测试1动静分离负载均衡测试2高可用测试 四、日志定义优化1、修改haproxy.cfg文件2、rsyslog配置3、访问测试 HAproxy搭建Web群集
一、Web集群调度器
1、常见的Web集群调度器 目前常见的Web集群调度器分为软件和硬件 软件通常使用开源的LVS、Haproxy、Nginx LVS 性能最好但是搭建相对复杂;Nginx的upstream模块支持群集功能但是对群集节点健康检查功能不强高并发性能没有 Haproxy好。硬件一般使用比较多的是F5、Array也有很多人使用国内的一些产品如梭子鱼、绿盟等
2、常用集群调度器的优缺点LVS ,Nginx,Haproxy)
2.1 Nginx
优点1工作在网络的7层之上可以针对http应用做一些分流的策略比如针对域名、目录结构。Nginx正则规则比HAProxy更为强大和灵活
2Nginx对网络稳定性的依赖非常小理论上能ping通就就能进行负载功能LVS对网络稳定性依赖比较大稳定要求相对更高
3Nginx安装和配置、测试比较简单、方便有清晰的日志用于排查和管理LVS的配置、测试就要花比较长的时间了
4可以承担高负载压力且稳定一般能支撑几万次的并发量负载度比LVS相对小些
5Nginx可以通过端口检测到服务器内部的故障比如根据服务器处理网页返回的状态码、超时等等
6Nginx不仅仅是一款优秀的负载均衡器/反向代理软件它同时也是功能强大的Web应用服务器
7Nginx作为Web正向加速缓存越来越成熟了速度比传统的Squid服务器更快很多场景下都将其作反
向代理加速器
8Nginx作为静态网页和图片服务器这方面的性能非常优秀同时第三方模块也很多。
缺点1Nginx仅能支持http、https和Email协议这样就在适用范围上面小些
2对后端服务器的健康检查只支持通过端口来检测不支持通过url来检测
3不支持Session的直接保持需要通过ip_hash和cookie的引导来解决。
2.2 LVS
优点1抗负载能力强、是工作在网络4层之上仅作分发之用没有流量的产生。因此负载均衡软件里的性能最强的对内存和cpu资源消耗比较低
2LVS工作稳定因为其本身抗负载能力很强自身有完整的双机热备方案
3无流量LVS只分发请求而流量并不从它本身出去这点保证了均衡器IO的性能不会收到大流量的影响
4应用范围较广因为LVS工作在4层所以它几乎可对所有应用做负载均衡包括http、数据库等。
缺点1软件本身不支持正则表达式处理不能做动静分离。相对来说Nginx/HAProxyKeepalived则具有明显的优势
2如果是网站应用比较庞大的话LVS/DRKeepalived实施起来就比较复杂了。相对来说Nginx/HAProxyKeepalived就简单多了。
2.3 Haproxy
优点1Haproxy也是支持虚拟主机的
2Haproxy支持8种负载均衡策略
3Haproxy的优点能够补充Nginx的一些缺点比如支持Session的保持Cookie的引导同时支持通过获取指定的url来检测后端服务器的状态
4Haproxy跟LVS类似本身就只是一款负载均衡软件单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度在并发处理上也是优于Nginx的
5Haproxy支持TCP协议的负载均衡转发。
3、LVS、Nginx、HAproxy的区别
1LVS基于Linux操作系统内核实现软负载均衡而HAProxy和Nginx是基于第三方应用实现的软负载均衡
2LVS是可实现4层的IP负载均衡技术无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案
3LVS因为工作在ISO模型的第四层其状态监测功能单一而HAProxy在状态监测方面功能更丰富、强大可支持端口、URL、脚本等多种状态检测方式
4HAProxy功能强大单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡
5Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能但是性能没有LVS和Haproxy好对群集节点健康检查功能不强只支持通过端口来检测不支持通过URL来检测。
二、Haproxy
1、简介
HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理是免费、快速并且可靠的一种解决方案。
HAProxy非常适用于并发大并发达1w以上web站点这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中同时可以保护web服务器不被暴露到网络上。
2、Haproxy应用分析
1LVS在企业应用中抗负载能力很强但存在不足
LVS不支持正则处理不能实现动静分离对于大型网站LVS的实施配置复杂维护成本相对较高
2Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的 软件
适用于负载大的Web站点运行在硬件上可支持数以万计的并发连接的连接请求
3、HAProxy的主要特性
●可靠性和稳定性非常好可以与硬件级的F5负载均衡设备相媲美
●最高可以同时维护40000-50000个并发连接单位时间内处理的最大请求数为20000个最大处理能力可达10Git/s
●支持多达8种负载均衡算法
●支持Session会话保持Cookie的引导
●支持通过获取指定的url来检测后端服务器的状态
●支持虚机主机功能从而实现web负载均衡更加灵活
●支持连接拒绝、全透明代理等独特的功能
●拥有强大的ACL支持用于访问控制
●支持TCP和HTTP协议的负载均衡转发
●支持客户端的keepalive功能减少客户端与haproxy的多次三次握手导致资源浪费让多个请求在一个tcp连接中完成4、Haproxy调度算法负载均衡策略
Haproxy常用的调度算法调度依据roundrobin轮询表示简单的轮询static-rr加权轮询表示根据权重轮询leastconn最小连接表示最少连接者先处理source源地址哈希表示根据请求源ipuriURI哈希表示根据请求的URI做cdn需使用url_paramURL参数哈希表示根据请求的URL参数’balance url_param’ requires an URL parameter namehdr(name)请求头哈希rdp-cookie(name)cookie的key哈希表示根据cookie(name)来锁定并哈希每一次TCP请求
5、Haproxy 的会话保持
1源地址hash 2设置cookie 3会话粘性表stick-table
6、支持的节点健康检查方式
LVS可以配合keepalived实现支持对TCP端口和URL路径方式的健康检查
Nginx默认情况下只支持被动健康检查主动健康检查模块需要依赖第三方模块
Haproxy支持TCP端口、URL路径、脚本等方式的健康检查7、支持的代理类型
LVS基于Linux系统内核实现的软负载均衡只支持4层代理的IP转发不支持正则匹配
Haproxy和Nginx基于应用程序实现的软负载均衡都能支持4层和7层代理转发支持正则匹配三、HAproxy 服务器部署
Haproxy实现负载均衡、动静分离
HAproxy 7-1(192.168.210.101)
Web1 7-2(192.168.210.102)
Web2 7-4(192.168.210.104)
Tomcat1 7-5(192.168.210.105)
Tomcat2 7-6(192.168.210.106)1、编译安装Haproxy
7-1
systemctl stop firewalld
setenforce 0
#关闭防火墙
cd /opt
yum install -y pcre-devel zlip-devel openssl-devel systemd-devel
#安装依赖包
tar zxvf haproxy-2.8.3.tar.gz
#解压
cd haproxy-2.8.3/
#切换到haproxy-2.8.3目录
make TARGETlinux31 PREFIX/usr/local/haproxy
make install PREFIX/usr/local/haproxy
#编译useradd -M -s /sbin/nologin haproxy
#新建管理用户mkdir -p /usr/local/haproxy/conf
#创建conf目录
cd /usr/local/haproxy/conf
#在conf目录下配置haproxy.cfg文件2、修改Haproxy配置文件配置前后端分别处理动态资源和静态资源
释义版vim haproxy.cfg
global #全局配置主要用于定义全局参数属于进程级的配置通常和操作系统配置有关#将info及以上的日志发送到rsyslog的local0接口将warning及以上的日志发送到rsyslog的local1接口log 127.0.0.1 local0 infolog 127.0.0.1 local1 warning maxconn 30000 #最大连接数HAProxy 要求系统的 ulimit -n 参数大于 maxconn*218#chroot /var/lib/haproxy #修改haproxy工作目录至指定目录一般需将此行注释掉pidfile /var/run/haproxy.pid #指定保存HAProxy进程号的文件user haproxy #以指定的用户名身份运行haproxy进程group haproxy #以指定的组名运行haproxy以免因权限问题带来风险daemon #让haproxy以守护进程的方式工作于后台#nbproc 1 #指定启动的haproxy进程个数只能用于守护进程模式的haproxy默认只启动一个进程。haproxy是单进程、事件驱动模型的软件单进程下工作效率已经非常好不建议开启多进程spread-checks 2 #在haproxy后端有着众多服务器的场景中在精确的时间间隔后统一对众服务器进行健康状况检查可能会带来意外问题此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长默认为0官方建议设置为2到5之间。defaults #配置默认参数这些参数可以被用到listenfrontendbackend组件 log global #所有前端都默认使用global中的日志配置mode http #模式为http7层代理http4层代理tcpoption http-keep-alive #使用keepAlive连接后端为静态建议使用http-keep-alive后端为动态应用程序建议使用http-server-closeoption forwardfor #记录客户端IP在X-Forwarded-For头域中haproxy将在发往后端的请求中加上X-Forwarded-For首部字段option httplog #开启httplog在日志中记录http请求、session信息等。http模式时开启httplogtcp模式时开启tcplogoption dontlognull #不在日志中记录空连接option redispatch #当某后端down掉使得haproxy无法转发携带cookie的请求到该后端时将其转发到别的后端上option abortonclose #当服务器负载很高的时候自动结束掉当前队列处理比较久的链接maxconn 20000 #最大连接数“defaults”中的值不能超过“global”段中的定义retries 3 #定义连接后端服务器的失败重连次数连接失败次数超过此值后会将对应后端服务器标记为不可用#contimeout 5000 #设置连接超时时间默认单位是毫秒#clitimeout 50000 #设置客户端超时时间默认单位是毫秒#srvtimeout 50000 #设置服务器超时时间默认单位是毫秒timeout http-request 2s #默认http请求超时时间此为等待客户端发送完整请求的最大时长用于避免类DoS攻击。haproxy总是要求一次请求或响应全部发送完成后才会处理、转发timeout queue 3s #默认客户端请求在队列中的最大时长timeout connect 1s #默认haproxy和服务端建立连接的最大时长新版本中替代contimeout该参数向后兼容timeout client 10s #默认和客户端保持空闲连接的超时时长在高并发下可稍微短一点可设置为10秒以尽快释放连接新版本中替代clitimeouttimeout server 2s #默认和服务端保持空闲连接的超时时长局域网内建立连接很快所以尽量设置短一些特别是高并发时新版本中替代srvtimeouttimeout http-keep-alive 10s #默认和客户端保持长连接的最大时长。优先级高于timeout http-request 也高于timeout clienttimeout check 2s #和后端服务器成功建立连接后到最终完成检查的最大时长(不包括建立连接的时间只是读取到检查结果的时长)frontend http-in #定义前端域bind *:80 #设置监听地址和端口指定为*或0.0.0.0时将监听当前系统的所有IPv4地址maxconn 18000 #定义此端口上的maxconnacl url_static1 path_beg -i /static /images #定义ACL当uri以定义的路径开头时ACL[url_static1]为trueacl url_static2 path_end -i .jpg .jpeg .gif .png .html .htm .txt #定义ACL当uri以定义的路径结尾时ACL[url_static2]为trueuse_backend ms1 if url_static1 #当[url_static1]为true时定向到后端域ms1中use_backend ms2 if url_static2 #当[url_static2]为true时定向到后端域ms2中default_backend dynamic_group #其他情况时定向到后端域dynamic_group中backend ms1 #定义后端域ms1balance roundrobin #使用轮询算法option httpchk GET /test.html #表示基于http协议来做健康状况检查只有返回状态码为2xx或3xx的才认为是健康的其余所有状态码都认为不健康。不设置该选项时默认采用tcp做健康检查只要能建立tcp就表示健康。server ms1.inst1 192.168.80.100:80 maxconn 5000 check inter 2000 rise 2 fall 3server ms1.inst2 192.168.80.100:81 maxconn 5000 check #同上inter 2000 rise 2 fall 3是默认值可以省略backend ms2 #定义后端域ms2balance roundrobinoption httpchk GET /test.htmlserver ms2.inst1 192.168.80.101:80 maxconn 5000 checkserver ms2.inst2 192.168.80.101:81 maxconn 5000 checkbackend dynamic_group #定义后端域dynamic_groupbalance roundrobinoption http-server-closecookie HA_STICKY_dy insert indirect nocache server appsrv1 192.168.80.100:8080 cookie appsrv1 maxconn 5000 checkserver appsrv2 192.168.80.101:8080 cookie appsrv2 maxconn 5000 checklisten stats #定义监控页面bind *:1080 #绑定端口1080stats enable #启用统计报告监控stats refresh 30s #每30秒更新监控数据stats uri /stats #访问监控页面的uristats realm HAProxy\ Stats #监控页面的认证提示stats auth admin:admin #监控页面的用户名和密码无释义版#配置文件
vim haproxy.cfgglobal log 127.0.0.1 local0 infolog 127.0.0.1 local1 warning maxconn 30000pidfile /var/run/haproxy.piduser haproxygroup haproxydaemonspread-checks 2defaults log globalmode http #七层代理option http-keep-aliveoption forwardforoption httplogoption dontlognulloption redispatchoption abortonclosemaxconn 20000retries 3timeout http-request 2stimeout queue 3stimeout connect 1stimeout client 10stimeout server 2stimeout http-keep-alive 10stimeout check 2s#前端配置根据用户的访问请求跳转到对应的后端
frontend http-in #监听地址 bind *:80acl dynamic path_end -i .jspuse_backend tomcat_server if dynamic#都没匹配到跳转到默认default_backend nginx_serversbackend tomcat_serverbalance roundrobinoption http-server-closecookie HA_STICKY_dy insert indirect nocacheserver tomcat1 192.168.210.105:8080 cookie tomcat1 inter 2000 rise 2 fall 3server tomcat2 192.168.210.106:8080 cookie tomcat2 checkbackend nginx_serversbalance roundrobin#节点服务器根目录下要有此文件option httpchk GET /test.html server nginx1 192.168.210.102:80 check inter 2000 rise 2 fall 3server nginx2 192.168.210.104:80 check inter 2000 rise 2 fall 3listen statsbind *:1080stats enablestats refresh 30sstats uri /statsstats realm HAProxy\ Statsstats auth admin:admin
3、添加haproxy 系统服务
vim /etc/init.d/haproxy
#!/bin/bash
#chkconfig: 2345 90 30
#description: Haproxy Service Control ScriptPROGDIR/usr/local/haproxy
PROGNAMEhaproxy
DAEMON$PROGDIR/sbin/$PROGNAME
CONFIG$PROGDIR/conf/$PROGNAME.cfg
PIDFILE/var/run/$PROGNAME.pid
DESCHAProxy daemon
SCRIPTNAME/etc/init.d/$PROGNAME# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0start()
{echo -e Starting $DESC: $PROGNAME\n$DAEMON -f $CONFIGecho ......
}stop()
{echo -e Stopping $DESC: $PROGNAME\nhaproxy_pid$(cat $PIDFILE)kill $haproxy_pidecho ......
}restart()
{echo -e Restarting $DESC: $PROGNAME\n$DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)echo ......
}case $1 in
start)start;;stop)stop;;restart)restart;;*)echo Usage: $SCRIPTNAME {start|stop|restart}exit 1;;
esacexit 0cd /etc/init.d/
chmod x haproxy
chkconfig --add /etc/init.d/haproxy
#加入系统服务管理ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
service haproxy start 或 /etc/init.d/haproxy start
#启动#补充知识
chkconfig --list haproxy
chkconfig --level 35 haproxy on
#设置35级别4、部署Tomcat并配置动态页面
7-5 tomcat1
cd /opt
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
% page languagejava importjava.util.* pageEncodingUTF-8%
html
head
titleJSP test1 page/title
/head
body
% out.println(动态页面 1,古娜拉黑暗之神呜呼拉呼黑魔变身);%
/body
/html
/usr/local/tomcat/bin/startup.sh
#启动7-6 tomcat2
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
% page languagejava importjava.util.* pageEncodingUTF-8%
html
head
titleJSP test2 page/title
/head
body
% out.println(动态页面2,巴啦啦能量呼尼拉魔仙变身);%
/body
/html
/usr/local/tomcat/bin/startup.sh
#启动测试动态页面
192.168.210.105:8080/test/index.jsp
192.168.210.106:8080/test/index.jsp5、部署节点服务器并配置静态页面
7-27-4
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak
vim nginx.repo[nginx]
namenginx repo
baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck1
enabled1
gpgkeyhttps://nginx.org/keys/nginx_signing.key
module_hotfixestrueyum install nginx -y
#yum安装nginx7-2
cd /usr/share/nginx/html
vim test.html
this is test1 web page!7-4
cd /usr/share/nginx/html
vim test.html
this is test2 web page!sysetmctl start nginx
#启动服务测试效果
192.168.210.102/test.html
192.168.210.104/test.html6、测试动态和静态页面
192.168.210.101/test.html
#访问静态页面20230921_151201 curl 192.168.210.101/test/index.jsp
#访问动态页面多次访问
#实现负载均衡和动静分离使用 Keepalived 实现 HAProxy 高可用
在Haproxy搭建web群集的基础上加一台Haproxy服务器
HAproxy-Master 7-1(192.168.210.101)
HAproxy-BACKUP 7-3(192.168.210.103)7、安装keepalived并编写配置文件
#7-1和7-3都要安装keepalived
yum install keepalived -y
7-3要编译安装haproxy可参考7-1安装的步骤这里不再演示7-17-3
vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
#使用killall -0检查haproxy实例是否存在性能高于ps命令
if ! killall -0 haproxy; thensystemctl stop keepalived
fichmod x /etc/keepalived/check_haproxy.sh主服务器7-1
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {router_id LVS_HA1 #虚拟路由名称
}#HAProxy健康检查配置
vrrp_script chk_haproxy {script /etc/keepalived/check_haproxy.sh #指定健康检查脚本interval 2 #脚本运行周期weight 2 #每次检查的加权权重值
}#虚拟路由配置
vrrp_instance VI_1 {state MASTER #本机实例状态MASTER/BACKUP备机配置文件中设置BACKUPinterface ens33 #本机网卡名称使用ifconfig命令查看virtual_router_id 51 #虚拟路由编号主备机保持一致priority 100 #本机初始权重备机设置小于主机的值advert_int 1 #争抢虚地址的周期秒virtual_ipaddress {192.168.210.200 #虚地址IP主备机保持一致}track_script {chk_haproxy #对应的健康检查配置}
}systemctl start keepalivedip addr备服务器7-3
vim /etc/keepalived/keepalived.conf#只需要修改下面三项router_id LVS_HA2 #虚拟路由名称state BACKUP #本机实例状态MASTER/BACKUP备机配置文件中设置BACKUPpriority 90 #本机初始权重备机设置小于主机的值8、效果测试
1动静分离负载均衡测试
访问静态资源
192.168.210.200/test.html
#VIP地址访问20230921_163418 访问动态资源
curl 192.168.210.200/test/index.jsp
#多次访问2高可用测试
#停掉当前MASTER主机的HAProxy实例进行故障切换测试
service haproxy stop
#观察keepalived的状态
systemctl status keepalived再次访问静态资源和动态资源观察功能实现情况20230921_163418 四、日志定义优化
1、修改haproxy.cfg文件
修改haproxy.cfg将info及以上级别的日志发送到rsyslog的local0接口将warning及以上级别的日志发送到rsyslog的local1接口
vim /usr/local/haproxy/haproxy.cfg
global......log 127.0.0.1 local0 infolog 127.0.0.1 local1 warning......defaults......log global......
#注信息级日志会打印HAProxy 的每一条请求处理会占用大量的磁盘空间在生产环境中将日志级别调整为notice2、rsyslog配置
#为 rsyslog 添加 haproxy 日志的配置
mkdir /var/log/haproxyvim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$FileCreateMode 0644 #日志文件的权限
$FileOwner haproxy #日志文件的owner
local0.* /var/log/haproxy/haproxy.log #local0接口对应的日志输出文件
local1.* /var/log/haproxy/haproxy_warn.log #local1接口对应的日志输出文件#修改 rsyslog 的启动参数
vim /etc/sysconfig/rsyslog
......
SYSLOGD_OPTIONS-c 2 -r -m 0#重启 rsyslog 和 HAProxy
systemctl restart rsyslog
service haproxy restart3、访问测试
客户端浏览器访问http://192.168.210.101
tail -f /var/log/haproxy/haproxy-info.log