大网站都在用的HAproxy+Web群集还不快来学
1 HAproxy+Web群集
1.1 常见的web集群调度器
目前常见的web集群调度器分为软件和硬件
软件通常使用开源的LVS、Nginx、HAproxy
就性能来说LVS性能最好(基于性能实现的负载均衡,但是搭建相对复杂),Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,并发性能没有HAproxy好。
硬件一般使用比较多的是F5、Array、也有很多人使用国内的一些产品,例如梭子鱼、绿盟等。
1.2 HAproxy应用分析和比较
lvs:
LVS在企业应用中抗负载能力能抢,但存在不足
LVS不支持正则处理,不能实现动静分离
对于大型网站,LVS的实施配置复杂,维护成本相对较高
HAproxy
HAproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用代理的软件
适用于负载大(并发1W以上的)的web站点,这些站点通常有需要会话保持或七层代理
HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。运行在硬件上可支持数以万计的并发连接的请求连接
1.3 Haproxy调度算法原理
roundrobin
简单的轮询调度
leastconn
最小连接数算法,根据后端的节点链接数大小动态分配前端请求
uri
根据请求的URI地址哈希
基于来源访问调度算法,用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度。
source
根据源地址hash调度
url_param
根据请求的URL参数进行调度
hdr(name)
根据HTTP请求头来做调度
rdp-cookie(name)
根据cookie的key哈希
表示根据cookie(name)来锁定哈希每一次TCP请求
static-rr
加权轮询
1.4 HAProxy的主要特性有
●可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美; ●最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s; ●支持多达8种负载均衡算法 ●支持Session会话保持,Cookie的引导; ●支持通过获取指定的url来检测后端服务器的状态; ●支持虚机主机功能,从而实现web负载均衡更加灵活; ●支持连接拒绝、全透明代理等独特的功能; ●拥有强大的ACL支持,用于访问控制; ●支持TCP和HTTP协议的负载均衡转发; ●支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成
1.5 LVS、Nginx、HAproxy的区别
●LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡; ●LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案; ●LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式; ●HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡; ●Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是性能没有LVS和Haproxy好,对群集节点健康检查功能不强,只支持通过端口来检测,不支持通过URL来检测。
负载均衡性能:硬件负载均衡是性能更好打的(F5、绿盟)LVS是最好的,其次是Haproxy其次,Nginx要弱于其他两种
他们支持的代理类型:LVS是基于Linux系统内核实现的软负载均衡,只支持四层代理的IP转发,并且不支持正则匹配。而Nginx和Haproxy都是基于应用程序实现的软负载均衡,都支持四层和七层反向代理转发且支持正则匹配
健康检查方式 :LVS可以配合Keepalive实现支持对TCP端口或者URL路径方式的健康检查。Nginx默认只支持被动健康检查方式,主动健康检查需要安装第三方模块支持。Hparoxy支持TCP端口、URL路径、脚本等方式的健康检查。
1.6 Haproxy的配置文件组成
-
global:用于配置全局参数
-
default:用于配置所有的frontend和的组backend的默认属性
-
frontend:用于配置前度服务(即HAproxy自身提供的服务)实例
-
backend:用于配置后端服务器()即HAproxy后面接的服务十实例组
-
listen:frontend +backend的组合配置,可以理解成更间接的配置方法,frontend域和backend域中所有的配置都可以配置在listen域中。
2 Haproxy的部署
HAproxy的安装
#haproxy支持基于lua实现功能扩展(需要安装比较新的lua语言,方便进行haproxy编译) yum install -y gcc gcc-c++ make ? curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz tar zxf lua-5.4.4.tar.gz -C /usr/local/ cd /usr/local/lua-5.4.4 make linux test ? ? #安装haproxy yum install -y zlib-devel openssl-devel pcre-devel systemd-devel useradd -M -s /sbin/nologin haproxy ? cd /opt tar xf haproxy-2.8.3.tar.gz cd /opt/haproxy-2.8.3/ ? make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/lua-5.4.4/src/ LUA_LIB=/usr/local/src/lua-5.4.4/src/ make install PREFIX=/usr/local/haproxy ? mkdir /etc/haproxy cp /opt/haproxy-2.8.3/examples/quick-test.cfg /etc/haproxy/haproxy.cfg vim /etc/haproxy/haproxy.cfg ? cp /opt/haproxy-2.8.3/examples/haproxy.init /etc/init.d/haproxy vim /etc/init.d/haproxy 26 [ "${NETWORKING}" = "no" ] && exit 0 ? ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/ haproxy -v ? chmod +x /etc/init.d/haproxy chkconfig --add /etc/init.d/haproxy chkconfig --level 35 haproxy on chkconfig --list haproxy ? service haproxy start netstat -lntp | grep haproxy
2.1 HAproxy搭建 Web 群集部署
HAproxy服务器:192.168.111.5
Nginx服务器1:192.168.111.7
Nginx服务器2:192.168.111.8
Tomcat服务器:192.168.111.10:8080 192.168.111.10:8081
2.2 实验步骤
配置节点服务器Nginx1和Nginx2
安装依赖包新建nginx用户解压包配置编译环境
编译并安装,创建软链接,创建脚本将nginx加入到系统服务中
make && make install ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令 vim /lib/systemd/system/nginx.service
添加权限并启动
修改网页内容
vim /usr/local/nginx/html/index.html
同样操作修改Nginx2服务器并测试页面是否成功
配置Tomcat服务器
rpm方式安装JDK,并设置JDK环境变量
执行脚本并查看版本
解压tomcat压缩包改名为tomcat1并复制相同文件tomcat2
tar zxvf apache-tomcat-9.0.16.tar.gz mv apache-tomcat-9.0.16 /usr/local/tomcat1 cp -a /usr/local/tomcat1 /usr/local/tomcat2
编译脚本将tomcat添加到系统服务中
修改tomcat1的启动和关闭脚本
tomcat2同样配置,并配置动态页面 this is web 4
同样配置配置tomcat1
修改tomcat2的端口号,tomcat1和tomcat2不能占用相同的端口号
启动服务并查看服务状态
网页测试否配置成功
配置HAproxy服务器
安装依赖包建立程序用户并解压压缩包
配置编译环境并安装
make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/lua-5.4.4/src/ LUA_LIB=/usr/local/src/lua-5.4.4/src/ make install PREFIX=/usr/local/haproxy
为HAproxy建立程序目录,并将配置文件格式复制到程序目录里
复制脚本文件格式到系统目录中,并修改第26行加上双引号
添加软链接,添加权限并启动
修改配置文件
vim /etc/haproxy/haproxy.cfg
测试静态页面
测试动态页面
取消注释为使动态页面保持长连接
测试状态监控页面
2.3 日志单独保存
方法一:修改rsyslog配置通过if语句判断将日志记录转移到指定目录中
vim /etc/haproxy/haproxy.cfg global log /dev/log local0 info log /dev/log local0 notice ? ...... defaults ? ...... ? log global ? ...... #需要修改rsyslog配置,为了便于管理。将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。 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 &~ #这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下。“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。
启动配置并重启haproxy查看请求日志消息
方法二:通过修改日志等级的方式,来将请求日志放到指定文件里
#修改haproxy.cfg,将info及以上级别的日志发送到rsyslog的local0接口,将warning及以上级别的日志发送到rsyslog的local1接口 vim /etc/haproxy/haproxy.cfg global ? ...... ? log 127.0.0.1 local0 info ? log 127.0.0.1 local1 warning ? ...... ? defaults ? ...... ? log global ? ...... ? #注:信息级日志会打印HAProxy 的每一条请求处理,会占用大量的磁盘空间,在生产环境中,将日志级别调整为notice ? ? #为 rsyslog 添加 haproxy 日志的配置 mkdir /var/log/haproxy ? vim /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"
启动服务并查看
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!