负载均衡 - HAProxy


现在常用的三大开源软件负载均衡器分别是Nginx、LVS、HAProxy。三大软件特点如下:

LVS

(1)抗负载能力强,抗负载能力强、性能高、能达到F5硬件的60%;对内存和cpu资源消耗比较低。
(2)工作在网络4层,通过VRRP协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量产生。
(3)稳定性、可靠性好,自身有完美的热备方案(如:LVS+Keepalived)。
(4)应用范围比较广,可以对所有应用做负载均衡。
(5)不支持正则处理,不能做动静分离。
(6)支持负载均衡算法:rr(轮循)、wrr(加权轮循)、lc(最小连接)、wlc(权重最小连接)。
(7)配置复杂,对网络依赖比较大,稳定性很高。

Ngxin

(1)工作在网络的七层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构。
(2)Nginx对网络的依赖比较小,理论上能ping通就能进行负载均衡。
(3)Nginx安装和配置比较简单,测试起来比较方便。
(4)也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发。
(5)对后端服务器的健康检查,只支持通过端口检测,不支持通过url来检测。
(6)Nginx对请求的异步处理可以帮助节点服务器减轻负载。
(7)Nginx仅能支持http、https和Email协议,这样就在使用范围较小。
(8)不支持Session的直接保持,但能通过ip_hash来解决,对Big request header的支持不是很好。
(9)支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(加权轮循)、IP-hash(IP哈希)。
(10)Nginx还能做Web服务器即Cache功能。

HAProxy

(1)支持两种代理模式:TCP(四层)和HTTP(七层)。
(2)能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作。
(3)支持url检测后端的健康状态。
(4)更多负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)。
(5)单纯从效率上来将HAProxy更会比Nginx有更出色的负载均衡速度。
(6)HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
(7)支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(加权轮循)、source(源地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
(8)不能做Web服务器即Cache 

三大负载均衡使用场景

(1)网站建设初期,可以选用Nginx/HAProxy作为反向代理负载均衡(或者流量不大都可以不选用负载均衡),因为其配置简单,性能也能满足一般的业务场景。如果考虑到负载均衡器是有单点问题,可以采用Nginx+Keepalived/HAProxy+Keepalived避免负载均衡器自身的单点问题。

(2)网站并发达到一定程度之后,为了提高稳定性和转发效率,可以使用LVS、毕竟LVS比Nginx/HAProxy要更稳定,转发效率也更高。不过维护LVS对维护人员的要求也会更高,投入成本也更大。

需要注意的是

Nginx和HAProxy比较:Nginx支持七层、用户量最大,稳定性比较可靠。HAProxy支持四层和七层,支持更多的负载均衡算法,支持session保存等。具体选择看使用场景。目前来说HAProxy由于弥补了一些Nginx的缺点致使其用户量也不断在提升。

衡量负载均衡器好坏的几个重要因素

(1)会话率:单位时间内的处理的请求数

(2)会话并发能力:并发处理能力

(3)数据率:处理数据能力

经过官方测试统计,haproxy 单位时间处理的最大请求数为20000个,
可以同时维护40000-50000个并发连接,最大数据处理能力为10Gbps。
综合上述,haproxy是性能优越的负载均衡、反向代理服务器。


HAProxy简介

HAProxy是法国人Willy Tarreau开发的一款可应对客户端10000以上的同时连接的高性能的TCP和HTTP负载均衡器。由于其丰富强大的功能在国内备受推崇,是目前主流的负载均衡器。Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。其配置简单,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后haproxy还会自动重新添加回服务器主机。

Haproxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么必须对其进行优化以使每个CPU时间片(Cycle)做更多的工作。

Haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进当前架构中,同时可以保护web服务器不被暴露到网络上。

Haproxy软件引入了frontend,backend的功能,frontend(acl规则匹配)可以根据任意HTTP请求头做规则匹配,然后把请求定向到相关的backend(server pools等待前端把请求转过来的服务器组)。通过frontend和backend,可以很容易的实现Haproxy的7层负载均衡代理功能。

HAProxy是一种高效、可靠、免费的高可用及负载均衡解决方案,非常适合于高负载站点的七层数据请求。客户端通过HAProxy代理服务器获得站点页面,而代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器。

同一客户端访问服务器,HAProxy保持会话的三种方案:

(1)HAProxy将客户端IP进行Hash计算并保存,由此确保相同IP来访问时被转发到同一台真实服务器上。
(2)HAProxy依靠真实服务器发送给客户端的cookie信息进行会话保持。
(3)HAProxy保存真实服务器的session及服务器标识,实现会话保持功能。