Haproxy搭建Web群集
1.常见的Web集群调度器
(1)目前常见的Web集群调度器分为软件和硬件
(2)软件通常使用开源的LVS、Haproxy、Nginx
(3)LVS性能最好(基于内核转发),但是搭建相对复杂;Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有 Haproxy好。
(4)硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等
https://www.f5.com.cn/扫面处理漏洞方式:升级到最新的版本,安全加固方式升级服务最新版本或做黑白名单
https://www.sangfor.com.cn/
在代理服务以及负载均衡方面经常使用nginx,考虑到是否可以对数据库访问做负载均衡时,nginx不再适用,此时查找资料,Haproxy可以实现。本文在查阅相关资料文献的基础之上,搭建部署一套Haproxy服务,调整相关配置文件,实现Haproxy反向代理以及负载均衡的功能。在此进行整理总结记录,以便后续持续深入学习,以及为后来者提供借鉴,文中不免疏漏之处,望读者给予指正,感激之至!
2.Haproxy应用分析
-
Haproxy概念
Haproxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
Haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。Haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。 -
LVS在企业应用中抗负载能力很强,但存在不足
(1)LVS不支持正则处理,不能实现动静分离
(2)对于大型网站,LVS的实施配置复杂,维护成本相对较高
(3)一般在上百台群集中使用 -
Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件
(1)适用于负载大的Web站点
(2)运行在硬件上可支持数以万计的并发连接的连接请求
3.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认证;
●基于命令行的管理接口;
●日志分析器,可对日志进行分析。
Haproxy优点
- Haproxy支持两种代理模式 TCP(四层)和HTTP(七层),也是支持虚拟主机的。
- Haproxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
- Haproxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲Haproxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
- Haproxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。
- HAProxy负载均衡策略非常多:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)。
(1)round-robin,表示简单的轮询
(2)static-rr,表示根据权重
(3)leastconn,表示最少连接者先处理
(4)source,表示根据请求源IP
(5)uri,表示根据请求的URI,做cdn需使用;
cdn相当于进来一个访问请求经过cdn后在nginx中查出返回到cdn并缓存再给用户
(6)url_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name
(7)hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
(8)rdp-cookie(name),表示根据cookie(name)来锁定并哈希每一次TCP请求。
4.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好。