当前位置:网站首页>47Haproxy集群
47Haproxy集群
2022-08-10 11:44:00 【戏精吾】
Haproxy集群
AProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且
可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通
常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前
的架构中,同时可以保护web服务器不被暴露到网络上。
拓展:常见的Web集群调度器分为软件和硬件
软件通常使用开源的LVS、Haproxy、Nginx
硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟、深信服、360等。
Haproxy应用分析
LVS在企业应用中抗负载能力很强,但存在不足:LVS不支持正则处理,不能实现动静分离;对于大型网站,LVS的实施配置复杂,维护成本相对较高。
Haproxy 是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理
适用于负载大的Web站点
运行在硬件上可支持数以万计的并发连接的连接请求
Haproxy常用调度算法
Haproxy支持多种调度算法,最常用的有:
- RR(Round Robin)表示简单的轮询
RR算法是最简单最常用的一种算法,即轮询调度。轮询分配访问请求实现负载均衡效果。 - LC (Least Connections)
最小连接数算法,根据后端的节点连接数大小动态分配前端请求。此算法相比较算法有很大改进,是目前用到比较多的一种算法。 - SH (Source Hashing)
基于来源访问调度算法,用于一些有Sessions会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度。此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡部分节点访问量超大,影响业务使用。 - static-rr,表示根据权重
- uri,表示根据请求的URI,做cdn需使用:
- url_param,表示根据请求的URl参数’balance url param’requires an URL parameter name
- hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
- rdp-cookie(name),表示根据cookie(name)来锁定并哈希每一次TcP请求。
Haproxy的特性
可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美。
最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s。
支持多达8 种负载均衡算法,同时也支持会话保持。
支持虚拟主机功能,从而实现web负载均衡更加灵活。
支持连接拒绝、全透明代理等独特功能。
拥有强大的ACL支持,用于访问控制。
其独特的弹性二叉树数据结构,使数据结构的复杂性上升到0(1),即数据的查询速度不会随着数据条目的增加而速度有所下降。
支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源量费,让多个请求在一个tcp连接中完成。
支持TCP加速,零复制功能,类似于mmap机制。
支持响应池(response buffering)
支持RDP(远程桌面)协议
基于源的粘性,类似于nginx的ip_hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器
更好统计数据接口,其web接口显示后端冀全中各个服务器的接受、发送、拒绝、错误等数据的统计信息
详细的健康状态检测,web接口中有关对上流服务器的健康检测状态,并提供了一定的管理功能
基于流量的健康评估机制
基于http认证
基于命令行的管理接口
日志分析器,可对日志进行分析
LVS、Nginx、HAproxy的区别
- LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;
- LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;
- LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;
- HAProxy功能强大,但整体性能低于4层模式的LVS负载均衡。
- Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。
Haproxy搭建Web群集
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3QrvZAwP-1659918794437)(C:\Users\灰灰\AppData\Roaming\Typora\typora-user-images\image-20220803112155810.png)]
Haproxy调度器部署
1.关闭防火墙,增强机制
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.上传软件包到/opt下,并解压
tar -xf haproxy-1.5.19.tar.gz
3. 安装依赖包
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
4.编译安装
cd haproxy-1.5.18/
make TARGET=linux2628 ARCH=x86_64
make install
#使用uname -r查看内核,kernel大于2.6.28用TARGET=linux2628,下于的用TARGET=linux26
ARCH=x86_64 #系统位数,64位系统
5.配置Haproxy
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/ #将配置文件拷贝到etc/haproxy下
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak #备份
vim /etc/haproxy/haproxy.cfg
全局配置,主要用于定义全局参数,属于进程级的配置
global
log /dev/log local0 info #local0为日志设备,默认存放到系统日志
log /dev/log local1 notice
#log loghost local0 info
maxconn 4096 #最大连接数,需考虑ulimit -n限制,推荐使用10240
--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
#chroot /usr/share/haproxy
uid 99 #用户UID
gid 99 #用户GID
daemon #守护进程模式
nbproc 1 #添加,设置并发进程数,建议与当前服务器CPU核数相等或为其2倍
配置默认参数,这些参数可以被用到Listen,frontend,backend组件
defaults
log global #引入global定义的日志格式
mode http #模式为http
option httplog #日志类别为http日志格式
option dontlognull #不记录健康检查日志信息
retries 3 #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
redispatch #当服务器负载很高时,自动结束当前队列处理比较久的连接
maxconn 2000 #最大连接数,“defaults”中的值不能超过“global”段中的定义
#contimeout 5000 #设置连接超时时间,默认单位是毫秒
#clitimeout 50000 #设置客户端超时时间,默认单位是毫秒
#srvtimeout 50000 #设置服务器超时时间,默认单位是毫秒
timeout http-request 10s #默认http请求超时时间
timeout queue 1m #默认队列超时时间
timeout connect 10s #默认连接超时时间,新版本中替代contimeout,该参数向后兼容
timeout client 1m #默认客户端超时时间,新版本中替代clitimeout,该参数向后兼容
timeout server 1m #默认服务器超时时间,新版本中替代srvtimeout,该参数向后兼容
timeout http-keep-alive 10s #默认持久连接超时时间
timeout check 10s #设置心跳检查超时时间
删除下面所有listen项,添加如下内容
listen webcluster 0.0.0.0:80 #haproxy实例状态监控部分配置,定义一个名为webcluster的应用
option httpchk GET /test.html #检查服务器的test.html文件
balance roundrobin #负载均衡调度算法使用轮询算法
定义在线节点
server inst1 192.168.74.129:80 check inter 2000 fall 3
server inst1 192.168.74.130:80 check inter 2000 fall 3
轮询算法:roundrobin;
最小连接数算法:leastconn;
来源访问调度算法:source;类似于nginx的ip_hash
#check inter 2000 表示启用对此后端服务器执行健康检查,设置健康状态检查的时间间隔,单位为毫秒
#fall 3 表示连续三次检测不到心跳频率则认为该节点失效
#若节点配置后带有“backup”表示该节点只是个备份节点,仅在所有在线节点都失效该节点才启用。不携带“backup”,表示为主节点,和其它在线节点共同提供服务。
6.添加系统服务
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy #创建软连接
systemctl start haproxy #启动服务
Nginx节点服务器部署
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#安装nginx服务
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum -y install nginx
cd /usr/share/nginx/html/
web1
echo "this is syw server " >/usr/share/nginx/html/test.html
web2
echo "this is xjw " >/usr/share/nginx/html/test.html
#启动服务
systemctl start nginx
#编辑测试文件
测试:在客户端浏览器输入192.168.74.128、test.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AnknVLs8-1659918794438)(C:\Users\灰灰\AppData\Roaming\Typora\typora-user-images\image-20220803153757312.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBpp2Qv3-1659918794439)(C:\Users\灰灰\AppData\Roaming\Typora\typora-user-images\image-20220803153810232.png)]
日志重新定义
默认haproxy的日志是输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。
vim /etc/haproxy/haproxy.cfg
#更改日志文件
global
log /dev/log local0 info
log /dev/log local0 notice
#重启haproxy服务
service haproxy restart
需要修改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停止处理这个信息。
#重启服务
systemctl restart rsyslog.service
查看haproxy的访问请求日志信息
访问网页后查看日志
tail -f /var/log/haproxy/haproxy.log
使用网页访问192.168.48.10,则会产生对应的日志文件,查看/var/log/haproxy/haproxy-info.log。停止掉某个节点服务器,然后再刷新页面,开启节点服务器,则会产生haproxy-notice.log。
temctl restart rsyslog.service
查看haproxy的访问请求日志信息
访问网页后查看日志
tail -f /var/log/haproxy/haproxy.log
使用网页访问192.168.48.10,则会产生对应的日志文件,查看/var/log/haproxy/haproxy-info.log。停止掉某个节点服务器,然后再刷新页面,开启节点服务器,则会产生haproxy-notice.log。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0hy0J5Mr-1659918794440)(C:\Users\灰灰\AppData\Roaming\Typora\typora-user-images\image-20220803160951605.png)]
边栏推荐
- Servlet---解决post请求中中文乱码问题
- 三星计划2023年开始在越南生产半导体零部件
- Excel function formulas - LOOKUP function
- 日记16
- LT8911EXB MIPI CSI/DSI to EDP signal conversion
- Buckle Exercise - 61 Sort by frequency of characters
- Samsung plans to start producing semiconductor components in Vietnam in 2023
- Database management tool: dynamic read-write separation
- 第5章 虚拟存储器
- 传三星3nm斩获第二家客户,目前产能已供不应求
猜你喜欢
LeetCode50天刷题计划(Day 17—— 下一个序列(14.50-16.30)
培训机构学习费用是多少呢?
mpf6_Time Series Data_quandl_correct kernel PCA_AIC_BIC_trend_log_return_seasonal_decompose_sARIMAx_ADFull
你是怎么知道数据库 Htap 能力强弱的?怎么能看出来
可视化服务编排在金融APP中的实践
Does face attendance choose face comparison 1:1 or face search 1:N?
蚂蚁金服+拼多多+抖音+天猫(技术三面)面经合集助你拿大厂offer
制品库是什么?
常量及数据类型你还记得多少?
16、Pytorch Lightning入门
随机推荐
CodeForces - 628D (数位dp)
Accumulated and thin hair!Safety Dog has once again obtained the certification of scientific and technological achievements transformation!
如何培养ui设计师的设计思维?
Analysis of the name matching process between the LCD driver and the device (Tiny4412)
search--09
three.js模糊玻璃效果
What are some useful performance testing tools recommended? Performance testing report charging standards
开源的作者,也有个生活问题
HDU 6040 Hints of sd0061 (技巧)
Threshold-based filtering buffer management scheme in a shared buffer packet switch论文核心部分
网络套接字(UDP和TCP编程)
中芯CIM国产化项目暂停?上扬软件:未停摆,改为远程开发!
这三个 Go 水平自测题,你手写不出来还是先老实上班吧,过来看看
LeetCode 138. Copy a linked list with random pointers
So delicious!Since using this interface artifact, my team efficiency has increased by 60%!
Golang分布式应用之etcd
10 个 Reduce 常用“奇技淫巧”
蚂蚁金服+拼多多+抖音+天猫(技术三面)面经合集助你拿大厂offer
第六届”蓝帽杯“全国大学生网络安全技能大赛半决赛部分WriteUp
【LeetCode】640. 求解方程