东莞东城网站建设,怎样做让百度收录网站域名,wordpress adsence,温江建设网站Haproxy 一、Web集群调度器1.1 常用的Web集群调度器1.2 常用集群调度器的优缺点#xff08;LVS ,Nginx,Haproxy)1.2.1 Nginx1.2.2 LVS1.2.3 Haproxy 1.3 LVS、Nginx、Haproxy的区别 二、Haproxy2.1 简介2.2 Haproxy的主要特性2.3 Haproxy应用分析2.4 Haproxy的调度算法(负载均… Haproxy 一、Web集群调度器1.1 常用的Web集群调度器1.2 常用集群调度器的优缺点LVS ,Nginx,Haproxy)1.2.1 Nginx1.2.2 LVS1.2.3 Haproxy 1.3 LVS、Nginx、Haproxy的区别 二、Haproxy2.1 简介2.2 Haproxy的主要特性2.3 Haproxy应用分析2.4 Haproxy的调度算法(负载均衡策略)2.5 Haproxy 的会话保持 三、Haproxy部署实例KeepalivedHaproxy 实现负载均衡动静分离1编译安装Haproxy2修改Haproxy配置文件配置前后端分别处理动态资源和静态资源3添加haproxy 系统服务4部署Tomcat并配置动态页面5安装keepalived6编写Keepalived配置文件确定主备7效果测试1 动静分离负载均衡测试2 高可用测试 四、日志定义优化1定义日志文件2rsyslog配置3访问测试 一、Web集群调度器
1.1 常用的Web集群调度器
目前常用的Web集群调度器分为软件和硬件
1软件调度器 软件通常使用开源的LVS、Haproxy、Nginx
LVS性能最好但是搭建相对复杂
Nginx的upstream模块支持群集功能但是对群集节点健康检查功能不强高并发性能没有Haproxy好。
2硬件调度器 硬件一般使用比较多的是F5也有很多人使用国内的一些产品如梭子鱼、绿盟等。
负载均衡性能 [硬件负载均衡器F5 ] LVS 最好 Haproxy 其次 Nginx 弱于其它两种。
1.2 常用集群调度器的优缺点LVS ,Nginx,Haproxy)
1.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的引导来解决。
1.2.2 LVS 优点 1抗负载能力强、是工作在网络4层之上仅作分发之用没有流量的产生。因此负载均衡软件里的性能最强的对内存和cpu资源消耗比较低
2LVS工作稳定因为其本身抗负载能力很强自身有完整的双机热备方案
3无流量LVS只分发请求而流量并不从它本身出去这点保证了均衡器IO的性能不会收到大流量的影响
4应用范围较广因为LVS工作在4层所以它几乎可对所有应用做负载均衡包括http、数据库等。 缺点 1软件本身不支持正则表达式处理不能做动静分离。相对来说Nginx/HAProxyKeepalived则具有明显的优势
2如果是网站应用比较庞大的话LVS/DRKeepalived实施起来就比较复杂了。相对来说Nginx/HAProxyKeepalived就简单多了。
1.2.3 Haproxy 优点 1Haproxy也是支持虚拟主机的
2Haproxy支持8种负载均衡策略
3Haproxy的优点能够补充Nginx的一些缺点比如支持Session的保持Cookie的引导同时支持通过获取指定的url来检测后端服务器的状态
4Haproxy跟LVS类似本身就只是一款负载均衡软件单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度在并发处理上也是优于Nginx的
5Haproxy支持TCP协议的负载均衡转发。
1.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
2.1 简介
HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理是免费、快速并且可靠的一种解决方案。
HAProxy非常适用于并发大并发达1w以上web站点这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很
简单安全的整合至当前的架构中同时可以保护web服务器不被暴露到网络上。
2.2 Haproxy的主要特性
● 可靠性和稳定性非常好可以与硬件级F5负载均衡设备相媲美 ● 最高可以同时维护40000-50000个并发连接单位时间内处理的最大请求数位20000个最大处理能力可达10Git/s ● 支持多大8种负载均衡算法同时也支持会话保持 ● 支持虚拟主机功能从而实现web负载均衡更加灵活 ● 支持连接拒绝、全透明代理等独特的功能 ● 拥有强大的ACL支持用于访问控制 ● 其独特的弹性二叉树数据结构使数据结构得到复杂性上升到了01即数据的查寻速度不会随着数据条目的增加而速度有所下降 ● 支持客户端的keepalive功能减少客户端与Haproxy的多次三次握手导致资源浪费让多个请求在一个tcp连接中完成 ● 支持TCP急速零复制功能类似于MMAP机制; ● 支持响应池response buffering ● 支持RDP协议 ● 基于源的粘性类似Nginx的ip_bash功能把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器 ● 更好统计数据接口其web接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息 ● 详细的健康状态监测web接口中有关于对上游服务器的健康监测状态并提供了一定的管理功能 ● 基于流量的健康评估机制 ● 基于HTTP认证 ● 基于命令行的管理接口 ● 日志分析器可对日志进行分析。
2.3 Haproxy应用分析
LVS在企业应用中抗负载能力很强但存在不足 ● LVS不支持正则处理不能实现动静分离 ● 对于大型网站LVS的实施配置复杂维护成本相对较高
Haproxy的运行模式使得它可以很简单安全的整合至当前的架构中同时可以保护web服务器不被暴露到网络上 ● 适用于负载大的Web站点 ● 运行在硬件上可支持数以万计的并发连接请求
2.4 Haproxy的调度算法(负载均衡策略)
Haproxy常用的调度算法调度依据roundrobin表示简单的轮询static-rr表示根据权重轮询leastconn表示最少连接者先处理source表示根据请求源ipuri表示根据请求的URI做cdn需使用url_param表示根据请求的URL参数’balance url_param’ requires an URL parameter namehdr(name)表示根据HTTP请求头来锁定每一次HTTP请求rdp-cookie(name)表示根据cookie(name)来锁定并哈希每一次TCP请求
2.5 Haproxy 的会话保持
1源地址hash 2设置cookie 3会话粘性表stick-table
三、Haproxy部署实例
KeepalivedHaproxy 实现负载均衡动静分离
名称IP地址HAproxy-Master192.168.2.100HAproxy-Backup192.168.2.106Web-A192.168.2.103Web-B192.168.2.104Tomcat1192.168.2.102Tomcat2192.168.2.105
1编译安装Haproxy
#获取安装包
wget https://www.haproxy.org/download/2.8/src/haproxy-2.8.3.tar.gz
#解压
tar zxvf haproxy-2.8.3.tar.gzcd haproxy-2.8.3/#编译
make TARGETlinux31 PREFIX/usr/local/haproxy
make install PREFIX/usr/local/haproxy#新建管理用户
useradd -M -s /sbin/nologin haproxymkdir -p /usr/local/haproxy/conf
cd /usr/local/haproxy/conf2修改Haproxy配置文件配置前后端分别处理动态资源和静态资源
#配置文件
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.2.102:8080 cookie tomcat1 inter 2000 rise 2 fall 3server tomcat2 192.168.2.105:8080 cookie tomcat2 checkbackend nginx_serversbalance roundrobin#节点服务器根目录下要有此文件option httpchk GET /test.html server nginx1 192.168.2.103:80 check inter 2000 rise 2 fall 3server nginx2 192.168.2.104:80 check inter 2000 rise 2 fall 3listen statsbind *:1080stats enablestats refresh 30sstats uri /statsstats realm HAProxy\ Statsstats auth admin:admin3添加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 3 5 haproxy on 4部署Tomcat并配置动态页面
#动态资源
tar xf ap..
cd ap..
mv ap.. /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,https://blog.csdn.net/q2524607033?typeblog);%
/body
/html#Tomcat2
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,https://blog.csdn.net/q2524607033?typeblog);%
/body
/html#启动tomcat测试动态页面
/usr/local/tomcat/bin/startup.sh192.168.2.102:8080/test/index.jsp
192.168.2.105:8080/test/index.jsp5安装keepalived
#安装keepalive
yum install -y keepalived#写检测脚本
vim /etc/keepalived/ch.sh#!/bin/bash
#使用killall -0检查haproxy实例是否存在性能高于ps命令
if ! killall -0 haproxy; thensystemctl stop keepalived
fichmod x /etc/keepalived/check_haproxy.sh6编写Keepalived配置文件确定主备 主服务器 #主服务器
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {router_id LVS_HA1 #虚拟路由名称
}#HAProxy健康检查配置
vrrp_script chk_haproxy {script /etc/keepalived/ch.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.2.188 #虚地址IP主备机保持一致}track_script {chk_haproxy #对应的健康检查配置}
}systemctl start keepalivedip addr备服务器 备服务器的配置类似 7效果测试
1 动静分离负载均衡测试 访问静态资源 192.168.2.100/test.html访问动态资源 curl 192.168.2.100:8080/test/index.jsp
多次访问动静分离负载均衡实现成功
2 高可用测试
关闭主服务器的haproxy服务
service stop haproxy
观察keepalived的状态
systemctl status keepalived再次访问静态资源和动态资源观察功能实现情况四、日志定义优化
1定义日志文件
默认haproxy的日志是输出到系统syslog中查看起来不是非常方便。
为了更好的管理haproxy的日志需要将haproxy的info及notice日志分别记录到不同的日志文件中。
vim /etc/haproxy/haproxy.cfg # this config needs haproxy-1.1.28 or haproxy-1.2.1globallog /dev/log local0 infolog /dev/log local0 noticeservice haproxy restart2rsyslog配置
需要修改rsyslog配置为了便于管理。
将haproxy相关的配置独立定义到haproxy.conf并放到/etc/rsyslog.d/下rsyslog启动时会自动加载此目录下的所有配置文件。
vim /etc/rsyslog.d/haproxy.confif ($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
~#这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下将notice日志记录到/var/log/haproxy/haproxy-notice.log下。
#“~”表示当日志信息写入到日志文件后rsyslog停止处理这个信息mkdir /var/log/haproxy
systemctl restart rsyslogtail -f /var/log/haproxy/haproxy-info.log
service haproxy restart3访问测试
客户端浏览器访问http://192.168.2.106
[rootlocalhost haproxy]#tail -f /var/log/haproxy/haproxy-info.logAug 25 03:42:13 haproxy haproxy: /etc/rc.d/init.d/haproxy: 第 26 行:[: : 期待一元表达式
Aug 25 03:42:13 haproxy haproxy: Shutting down haproxy: [ 确定 ]
Aug 25 03:42:13 haproxy haproxy: /etc/rc.d/init.d/haproxy: 第 26 行:[: : 期待一元表达式
Aug 25 03:42:13 haproxy haproxy: Starting haproxy: [WARNING] 236/034213 (6151) : parsing [/etc/haproxy/haproxy.cfg:22]: keyword redispatch is deprecated in favor of option redispatch, and will not be supported by future versions.
Aug 25 03:42:13 haproxy haproxy: [ 确定 ]
Aug 25 03:47:30 haproxy haproxy[6152]: 192.168.122.222:63528 [25/Aug/2021:03:47:30.274] webcluster webcluster/inst1 0/0/0/1/1 304 179 - - ---- 2/2/0/1/0 0/0 GET / HTTP/1.1
Aug 25 03:47:30 haproxy haproxy[6152]: 192.168.122.222:63528 [25/Aug/2021:03:47:30.275] webcluster webcluster/inst2 173/0/1/0/174 304 179 - - ---- 2/2/0/1/0 0/0 GET / HTTP/1.1
Aug 25 03:47:30 haproxy haproxy[6152]: 192.168.122.222:63528 [25/Aug/2021:03:47:30.449] webcluster webcluster/inst1 165/0/1/0/166 304 179 - - ---- 2/2/0/1/0 0/0 GET / HTTP/1.1
Aug 25 03:47:30 haproxy haproxy[6152]: 192.168.122.222:63528 [25/Aug/2021:03:47:30.616] webcluster webcluster/inst2 158/0/0/0/158 304 179 - - ---- 2/2/0/1/0 0/0 GET / HTTP/1.1