重庆网站推广优化软件业务,wordpress的字体,免费网络推广网站,呼和浩特网站制作LVSHaproxy 一、Haproxy简介1.1、Haproxy应用分析1.2、Haproxy的特性1.3、常见负载均衡策略1.4、LVS、Haproxy、Nginx区别1.5、 Haproxy的优点1.6、常见的Web集群调度器 二、Haproxy部署实例四、日志定义优化 一、Haproxy简介
Haproxy 是一个使用C语言编写的自由及开放源代码软… LVSHaproxy 一、Haproxy简介1.1、Haproxy应用分析1.2、Haproxy的特性1.3、常见负载均衡策略1.4、LVS、Haproxy、Nginx区别1.5、 Haproxy的优点1.6、常见的Web集群调度器 二、Haproxy部署实例四、日志定义优化 一、Haproxy简介
Haproxy 是一个使用C语言编写的自由及开放源代码软件其提供高可用性、负载均衡以及基于TCP和HTTP的应用程序代理。
1.1、Haproxy应用分析 LVS在企业应用中抗负载能力很强但存在不足 LVS不支持正则处理不能实现动静分离 对于大型网站LVS的实施配置复杂维护成本相对较高 Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理软件 适用于负载大的web站点运行在硬件上可支持数以万计的并发连接的连接请求
1.2、Haproxy的特性
可靠性和稳定性非常好可以与硬件级的F5负载均衡设备相媲美最高可以同时维护40000-50000个并发连接单位时间内处理的最大请求数为20000个最大处理能力可达10Git/s支持多达8 种负载均衡算法同时也支持会话保持支持虚拟主机功能从而实现web负载均衡更加灵活支持连接拒绝、全透明代理等独特功能拥有强大的ACL支持用于访问控制其独特的弹性二叉树数据结构使数据结构的复杂性上升到了01即数据的查询速度不会随着数据条目的增加而速度有所下降支持客户端的keepalive功能减少客户端与haproxy的多次三次握手导致资源量费让多个请求在一个tcp连接中完成支持TCP加速零复制功能类似于mmap机制支持响应池response buffering支持RDP协议基于源的粘性类似于nginx的ip_hash功能把自同一客户端的请求在一定时间内始终调度到上游的同一服务器更好统计数据接口其web接口显示后端冀全中各个服务器的接受、发送、拒绝、错误等数据的统计信息详细的健康状态检测web接口中有关对上流服务器的健康检测状态并提供了一定的管理功能基于流量的健康评估机制基于http认证基于命令行的管理接口日志分析器可对日志进行分析
1.3、常见负载均衡策略
Haproxy支持多种调度算法最常用的有8种 1RRRound Robin RR算法是最简单最常用的一种算法即轮询调度 理解举例有三个节点A、B、C 第一个用户访问会被指派到节点A 第二个用户访问会被指派到节点B 第三个用户访问会被指派到节点C 第四个用户访问继续指派到节点A轮询分配访问请求实现负载均衡效果
2LCLeast Connections 1.最小连接数算法根据后端的节点连接数大小动态分配前端请求 2.理解举例 有三个节点A、B、C各节点的连接数分别为A:4 B:5 C:6 3.第一个用户连接请求会被指派到A上连接数变为A:5 B:5 C:6 4.第二个用户请求会继续分配到A上连接数变为A:6 B:5 C:6再有新的请求会分配给B每次将新的请求指派给连接数最小的客户端 3.由于实际情况下A、B、C的连接数会动态释放很难会出现一样连接数的情况 4.此算法相比较rr算法有很大改进是米钱用到比较多的一种算法 3SHSource Hashing 基于来源访问调度算法用于一些有Session会话记录在服务端的场景可以基于来源的IP、Cookie等做集群调度
理解举例 有三个节点A、B、C第一个用户第一次访问被指派到了A第二个用户第一次访问被指派到了B
当第一个用户第二次访问时会被继续指派到A第二个用户第二次访问时依旧会被指派到B只要负载均衡器不重启第一个用户都会被指派到A第二个用户访问都会被指派到B实现集群的调度
此调度算法好处是实现会话保持但某些IP访问量非常大时会引起负载不均衡部分节点访问量超大影响业务使用 4uri 表示根据请求的URI,做cdn需使用 5url_param 表示根据HTTP请求头来锁定每 一 次HTTP请求。
6rdp—cookiename 表示根据据cookie name来锁定并哈希每一次TCP请求。
7 source 表示根据请求的源IP类似Nginx的IP hash机制。
8 static-rr 表示根据权重轮询
1.4、LVS、Haproxy、Nginx区别 LVS基于Linux操作系统实现软负载均衡而Haproxy和Nginx是基于第三方应用实现的软负载均衡 LVS是可实现4层的IP负载均衡技术无法实现基于目录、URL的转发。而实现Haproxy和Nginx都可以实现4层和7层技术Haproxy可提供TCP和Http应用的负载均衡综合解决方案 LVS因为工作在ISO模型的第四层其状态监测功能单一而Haproxy在状态监测方面功能更丰富、强大可支持端口、URL、脚本等多种状态监测方式 Haproxy功能强大但整体性能低于4层模式的LVS负载均衡 Nginx主要用于web服务器或缓存服务器
1.5、 Haproxy的优点 Haproxy也是支持虚拟主机的 Haproxy支持8种负载均衡器策略 Haproxy的优点能补充nginx的一些缺点比如支持Session的保持Cookie的引导同时支持通过获取指定url来检测后端服务器的状态 Haproxy跟LVS类似本身就只是一款负载均衡软件单纯从效率上来讲Haproxy会比Nginx有更出色的负载均衡速度在并发处理上也是优于Nginx的 Haproxy支持TCP协议的负载均衡转发
1.6、常见的Web集群调度器 目前常见的Web集群调度器分为软件和硬件 软件通常使用开源的LVS、Haproxy、Nginx 硬件一般使用比较多的是F5也有很多人使用国内的一些产品如梭子鱼、绿盟等
二、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
编译安装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/conf 修改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:admin
添加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 部署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.jsp 安装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.sh 编写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 备服务器的配置类似 效果测试 动静分离负载均衡测试 高可用测试
四、日志定义优化
默认haproxy的日志是输出到系统的syslog中查看起来不是非常方便为了更好的管理haproxy的日志我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。
需要修改rsyslog配置为了便于管理。将haproxy相关的配置独立定义到haproxy.conf并放到/etc/rsyslog.d/下rsyslog启动时会自动加载此目录下的所有配置文件。1. #修改配置文件
vim /etc/haproxy/haproxy.cfg
globallog 192.168.59.118 local6 infolog /dev/log local0 notice2. #修改rsyslog配置
vim /etc/rsyslog.conf
14 # Provides UDP syslog reception
15 $ModLoad imudp #注释掉
16 $UDPServerRun 514 #注释掉
...
74 local6.* /var/log/haproxy.log3. # 重启服务
systemctl restart rsyslog.service
service haproxy restart4. #查看haproxy的访问请求日志信息
访问网页后查看日志
tail -f /var/log/haproxy.log 修改配置文件 修改rsyslog配置 重启服务 查看haproxy的访问请求日志信息