Liunx 三大负载均衡软件(LVS、Nginx、HAproxy)对比

LVS:

1. 抗负载能力强,性能高,能达到 F5 的 60%,对内存和 cpu 资源消耗比较低

2. 工作在网络 4 层,通过 VRRP 协议(仅做代理使用),具体的流量是由 liunx 内核来处理,因此没有流量的产生。

3. 稳定,可靠性强,自身有完美的热备方案(Keepalived+LVS)

4. 不支持正则处理,不能做动静分离

5. 支持多种负载均衡算法:rr(轮询),wrr(带权轮询)、lc(最小连接)、wlc(带权最小连接)

6. 配置相对复杂,对网络依赖比较大,稳定性很高。

7.LVS 工作模式有 4 种:

(1)nat 地址转换

(2)dr 直接路由

(3)tun 隧道

(4)full-nat

DR 模式(直接路由模式:Virtual Server via Direct Routing) 

DR 模式是通过改写请求报文的目标 MAC 地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同 TUN 模式一样,DR 模式可以极大的提高集群系统的伸缩性。而且 DR 模式没有 IP 隧道的开销,对集群中的真实服务器也没有必要必须支持 IP 隧道协议的要求。但是要求度器 LB 与真实服务器 RS 都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。DR 模式是互联网使用比较多的一种模式。

 

Nginx:

1. 工作在网络 7 层,可以针对 http 应用做一些分流的策略,比如针对域名,目录结构

2.Nginx 对网络的依赖较小,理论上能 ping 通就能进行负载功能

3.Nginx 安装配置比较简单,测试起来很方便

4. 也可以承担较高的负载压力且稳定

5. 对后端服务器的健康检查,只支持通过端口来检测,不支持通过 url 来检测

6.Nginx 对请求的异步处理可以帮助节点服务器减轻负载压力

7.Nginx 仅能支持 http、https 和 Email 协议,这样就在适用范围较小

8. 不支持 Session 的直接保持,但能通过 ip_hash 来解决,对 Big request header 的支持不是很好

9.Nginx 还能做 Web 服务器即 Cache 功能。

Nginx 常规的和 HTTP 请求和相应流程图:

HAproxy:

1. 支持两种代理模式:TCP(四层)和 HTTP(七层),支持虚拟主机

2. 能够补充 Nginx 的一些缺点比如 Session 的保持,Cookie 引导等工作

3. 支持 url 检测后端的服务器出问题会有很好的帮助。

4. 更多负载均衡策略比如:动态加权轮循,加权源地址哈希,加权 URL 哈希加权等参数哈希已经实现。

5. 单纯从效率上来讲 HAproxy 更会比 Nginx 有更出色的负载均衡

6.HAproxy 可以对 MYsql 进行负载均衡,对后端的 DB 节点进行检测和负载均衡

7. 支持负载均衡算法:轮循、带权轮循、源地址保持、请求 URL、根据 Cookie

8. 不能做 Web 服务器即 Cache。

 haproxy 的工作模型图:

 

三大主流软件负载均衡器适用的生产场景:

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

2. 网站并发达到一定程度后,为了提高稳定性和转发效率,可以使用 LVS,毕竟 LVS 比 Nginx/HAproxy 要更稳定,转发效率也高。

 

参考文档: https://blog.51cto.com/13477944/2088079