软件负载均衡一般分为两种实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。
LVS
1. 基于操作系统的软负载
2. 抗负载能力强,性能高,号称能达到F5的60%,对内存和cpu耗费资源低。
3. 工作在4层(tcp),通过vrrp协议进行转发(仅做数据分发),具体流量由linux内核进行处理,因此没有流量的产生
4. 稳定性和可靠性不错,有完美的热备方案(如lvs+keepalive)
5. 不支持正则表达式,不支持动静分离(废话,基于4层的当然没有)
6. 支付的负载均衡算法:rr(轮询),wrr(加权轮询),lc(最小连接),wlc(权重最小连接)
7. 配置复杂,对网络依赖较高,但稳定性很高
8. 不支持http,如域名,目录结构等进行负载(废话,基于4层的当然没有)
Nginx
1. 基于第三方应用的软负载
2. 工作在7层,主要针对的是http,https,email协议,其他不支持
3. 对网络依赖较小,能ping通就能进行负载
4. 能给承担高负载,号称能给支持超过1万次的并发
5. 对后端服务器的健康监测只能通过端口而不是支持url
6. 可以对请求进行异步处理,减轻服务器的负载负担
7. 不支持Session的直接保持,但支持ip-hash
8. 能给作为web服务器,即cache功能
9. 支持的负载均衡算法:轮询,加权轮询,ip哈希
Haproxy
1. 基于第三方应用的软负载
2. 可以工作在4层和7层
3. 支持url来进行后端服务器的检测
4. 支持nginx不支持的session保持和cookie引导等工作
5. 支持的负载均衡算法:动态加权,加权源地址哈希,加权url哈希,加权参数哈希,轮询,加权轮询,源地址保持,根据cookie保持
6. 单纯从效率上讲HAProxy会比Nginx更高效
7. 可以对MySQL进行负载均衡
8. 不能作为web服务器即cache
三大主流软件负载均衡器适用业务场景:
1、网站建设初期,可以选用Nigix/HAproxy作为反向代理负载均衡(或者流量不大都可以不选用负载均衡),因为其配置简单,性能也能满足一般的业务场景。如果考虑到负载均衡器是有单点问题,可以采用Nginx+Keepalived/HAproxy+Keepalived避免负载均衡器自身的单点问题。
2、网站并发达到一定程度之后,为了提高稳定性和转发效率,可以使用LVS、毕竟LVS比Nginx/HAproxy要更稳定,转发效率也更高。不过维护LVS对维护人员的要求也会更高,投入成本也更大。
注:Niginx与Haproxy比较:Niginx支持七层、用户量最大,稳定性比较可靠。Haproxy支持四层和七层,支持更多的负载均衡算法,支持session保存等。具体选型看使用场景,目前来说Haproxy由于弥补了一些Niginx的缺点用户量也不断在提升。
衡量负载均衡器好坏的几个重要因素:
1、会话率 :单位时间内的处理的请求数
2、会话并发能力:并发处理能力
3、数据率:处理数据能力
经过官方测试统计,haproxy 单位时间处理的最大请求数为20000个,可以同时维护40000-50000个并发连接,最大数据处理能力为10Gbps。综合上述,haproxy是性能优越的负载均衡、反向代理服务器。
总结HAProxy主要优点:
一、免费开源,稳定性也是非常好,这个可通过我做的一些小项目可以看出来,单Haproxy也跑得不错,稳定性可以与LVS相媲美;
二、根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom's 10GbE NICs (Myri-10G PCI-Express),这个作为软件级负载均衡,也是比较惊人的;
三、HAProxy可以作为MySQL、邮件或其它的非web的负载均衡,我们常用于它作为MySQL(读)负载均衡;
四、自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警,这个也是我非常喜欢它的原因之一;
五、HAProxy支持虚拟主机。