HAProxy 集群调度
HAProxy 是目前比较流行的一种集群调度工具。
简介
HAProxy 是目前比较流行的一种集群调度工具,同类的集群调度工具很多,如 LVS 和 Nginx。相比较而言,LVS 性能最好,但是搭建相对复杂,Nginx 的 upstream 模块支持集群功能,但是对集群节点健康检查功能不强,性能没有 HAProxy 好。
HAProxy 是一款提供高可用性、负载均衡以及基于 TCP(第四层)和 HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种 解决方案。HAProxy 特别适用于负载特大的 web 站点,这些站点通常又需要会话保持或七层处理。HAProxy 运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进当前的架构中,同时可以保护 web 服务器不被暴露到网络上。
HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制, 很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是, 在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个 CPU 时间片(Cycle)做更多的工作。
HAProxy 支持连接拒绝:因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制 它们的危害。这个已经为一个陷于小型 DDoS 攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
HAProxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端 IP 地址或者任何其他地址来连接后端服务器. 这个特性仅在 Linux 2.4/2.6 内核打了 cttproxy 补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
负载均衡常用的调度算法:
- RR:轮询查询(加权轮询)
- LC:最小连接数(加权最小链接)
- SH:基于来源访问调度
性能
HAProxy 借助于 OS 上几种常见的技术来实现性能的最大化。
-
单进程、事件驱动模型显著降低了上下文切换的开销及内存占用。
-
O(1) 事件检查器(event checker)允许其在高并发连接中对任何连接的任何事件实现即时探测。
-
在任何可用的情况下,单缓冲(single buffering)机制能以不复制任何数据的方式完成读写操作,这会节约大量的 CPU 时钟周期及内存带宽;
-
借助于 Linux 2.6 (>= 2.6.27.19)上的
splice()系统调用,HAProxy 可以实现零复制转发(Zero-copy forwarding),在 Linux 3.5 及 以上的 OS 中还可以实现零复制启动(zero-starting); -
内存分配器在固定大小的内存池中可实现即时内存分配,这能够显著减少创建一个会话的时长;
-
树型存储:侧重于使用作者多年前开发的弹性二叉树,实现了以 O(log(N)) 的低开销来保持计时器命令、保持运行队列命令及管理轮询及最少连接队列;
-
优化的 HTTP 首部分析:优化的首部分析功能避免了在 HTTP 首部分析过程中重读任何内存区域;
-
精心地降低了昂贵的系统调用,大部分工作都在用户空间完成,如时间读取、缓冲聚合及文件描述符的启用和禁用等;
所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的 CPU 负载,甚至于在非常高的负载场景中,5% 的用户空间占用率和 95% 的系统空间 占用率也是非常普遍的现象,这意味着 HAProxy 进程消耗比系统空间消耗低 20 倍以上。因此,对 O S进行性能调优是非常重要的。即使用户空间的占用率 提高一倍,其 CPU 占用率也仅为10%,这也解释了为何 7 层处理对性能影响有限这一现象。由此,在高端系统上 HAProxy 的 7 层性能可轻易超过硬件负载 均衡设备。
在生产环境中,在 7 层处理上使用 HAProxy 作为昂贵的高端硬件负载均衡设备故障故障时的紧急解决方案也时长可见。硬件负载均衡设备在“报文”级别处理 请求,这在支持跨报文请求(request across multiple packets)有着较高的难度,并且它们不缓冲任何数据,因此有着较长的响应时间。对应地,软件 负载均衡设备使用 TCP 缓冲,可建立极长的请求,且有着较大的响应时间。
HAProxy目前主要有三个版本: 1.3 , 1.4 ,1.5,CentOS6.6 自带的RPM包为 1.5 的。
常见负载均衡对比
三种负载均衡器的优缺点如下:
-
LVS 的优点:
- 抗负载能力强、工作在第 4 层仅作分发作用,没有流量的产生,这个特点决定了它在负载均衡软件里的性能最强;无流量,同时保证了均衡器 IO 的 性能不会受到大流量的影响;
- 工作稳定,自身有完整的双击热备方案,如 LVS+Keepalived 和 LVS+hertbeat
- 应用范围比较广,可以对所有应用作负载均衡;
- 配置性比较低,这是一个缺点,也是一个优点,因为没有太多可配置的东西,所以并不需要太多更改,大大减少了人为出错的几率
-
LVS 的缺点:
- 软件本身不支持正则处理,不能做动静分离,这就凸显了 Nginx/HAProxy+keepalived 的优势
- 如果网站应用比较大,LVS/DR + Keepalived 就比较复杂,特别是后面有 Windows Server 应用的机器,实施及配置还有维护过程比较麻烦, 相对而言,Nginx/HAProxy+keepalived 就简单多了。
-
Nginx 的优点:
- 工作在 OSI 第七层,可以针对 HTTP 应用做一些分流的策略,比如针对域名、目录结构。它的正则比 HAProxy 更为强大和灵活;
- Nginx 对网络的依赖非常小,理论上能 ping 通就能就行负载功能,这个也是它的优势所在;
- Nginx 安装和配置比较简单,测试起来比较方便;
- 可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
- Nginx 可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点;
- Nginx 不仅仅是一款优秀的 负载均衡器/反向代理 软件,它同时也是强大的 Web 应用服务器。LNMP 现在也是非常流行的 web 环境,大有和 LAMP 环境分庭抗礼之势。Nginx 在处理 静态页面,特别是提高并发方面相对 Apache 有优势;
- Nginx 现在作为 web 反向加速缓存越来越成熟了。速度比传统的 squid 服务器更快,有需求的朋友可以考虑用其作为反向代理加速器; *Nginx 的缺点:
- Nginx 不支持 url 来检测;
- Nginx 仅能支持 http 和 email,这是它的弱势;
- Nginx 的 session 的保持,cookie 的引导能力相对欠缺。
-
HAProxy 的优点:
- HAProxy 是支持虚拟主机的,可以在 4/7 层上工作(支持多网段);
- 能够补充 nginx 的一些缺点比如 session 的保持,cookie 的引导等工作;
- 支持 url 检测后端的服务器;
- 它跟 LVS 一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲 HAProxy 比 nginx 有更出色的负载均衡速度,在并发处理上 也是优于 nginx 的;
- HAProxy 可以对 mysql 读进行负载均衡,对后端的 mysql 节点进行检测和负载均衡,不过在后端的 mysql slaves 数量超过 10 台时性能不如 LVS;
- HAProxy 的算法较多,达到 8 种。
搭建
安装教程请查看环境搭建- -HAProxy
-
2022-08-25
通过源码编译安装部署 Nginx
-
2021-08-09
分布式文件存储系统,通常用于存储小文件、图片等。
-
2022-08-03
通过 LVS+keepalived 对调度服务器进行双机热备,利用高可用(HA)技术提供持续不间断的服务。
-
2021-08-10
升级 fastdfs
-
2021-04-02
提供高可用性、负载均衡,以及基于 TCP 和 HTTP 的应用程序代理。