LVS与HAProxy的对比
Posted IT那活儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS与HAProxy的对比相关的知识,希望对你有一定的参考价值。
1.LVS主要使用场景:
适用于各种高并发场景,抗并发能力特别强,LVS主要做的是四层(传输层)负载。
2.LVS的优点:
-
首先它是基于4层的网络协议的,仅作为分发只用,没有流量的产生,抗负载能力强,对于服务器的硬件要求除了网卡外,其他没有太多要求;
配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,大大减少了人为出错的几率;
应用范围比较广,不仅仅对web服务做负载均衡,还可以对其他应用(mysql)做负载均衡;
-
LVS架构中存在一个虚拟IP的概念,需要向IDC多申请一个IP来做虚拟IP。
3.LVS的四种工作模式
DR:直接路由模式
仅从性能上作比较:DR>TUN>NAT>FULLNAT
四种工作模式的详细介绍:
DR:直接路由模式
请求由 LVS 接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过 LVS。
DR 模式下需要 LVS 和绑定同一个 VIP(RS 通过将 VIP 绑定在 loopback 实现)。
RS 收到 LVS 转发来的包,链路层发现 MAC 是自己的,到上面的网络层,发现 IP 也是自己的,于是这个包被合法地接受,RS 感知不到前面有 LVS 的存在。
而当 RS 返回响应时,只要直接向源 IP(即用户的 IP)返回即可,不再经过 LVS。
TUN:隧道模式
客户端将访问vip报文发送给LVS服务器;
LVS服务器将请求报文重新封装,发送给后端真实服务器;
后端真实服务器将请求报文解封,在确认自身有vip之后进行请求处理;
后端真实服务器在处理完数据请求后,直接响应客户端。
此模式实现起来较为复杂。
NAT:路由转发模式
NAT 模式下,网络报的进出都要经过 LVS 的处理。LVS 需要作为 RS 的网关。
RS 处理完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。
注意:
FULLNAT模式
无论是 DR 还是 NAT 模式,不可避免的都有一个问题:LVS 和 RS 必须在同一个 VLAN 下,否则 LVS 无法作为 RS 的网关。
Full-NAT 相比 NAT 的主要改进是,在 SNAT/DNAT 的基础上,加上另一种转换,转换过程如下:
内网 IP 之间可以通过多个交换机跨 VLAN 通信。
当 RS 处理完接受到的包,返回时,会将这个包返回给 LVS 的内网 IP,这一步也不受限于 VLAN。
Full-NAT 主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨 VLAN 的问题。采用这种方式,LVS 和 RS 的部署在 VLAN 上将不再有任何限制,大大提高了运维部署的便利性。
4.LVS的十种负载均衡算法
均等地对待每一台服务器,不管服务器上的实际连接数和系统负载
(2) 加权轮调 wrr
调度器可以自动问询真实服务器的负载情况,并动态调整权值
(3) 最少链接 lc
动态地将网络请求调度到已建立的连接数最少的服务器上
如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡
(4) 加权最少链接 wlc
调度器可以自动问询真实服务器的负载情况,并动态调整权值
带权重的谁不干活就给谁分配,机器配置好的权重高
(5) 基于局部性的最少连接调度算法 lblc
(6) 复杂的基于局部性最少的连接算法 lblcr
记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。
(9) 最少期望延迟 sed
不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙
(10) 永不排队 nq
无需队列,如果有realserver的连接数为0就直接分配过去
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
1. HAProxy主要适用场景
2. HAProxy的优点
(1)HAProxy是支持虚拟主机的,通过frontend指令来实现
(2)支持Session的保持,Cookie的引导等工作
(3)支持url检测后端的服务器出问题的检测会有很好的帮助。
(4)它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
(5)HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡
3. 磁盘分区参数说明:
HAProxy的负载调度算法
(1)roundrobin 表示简单的轮询
(2)static-rr 表示根据权重进行轮询
(3)leastconn 表示最少连接者先处理
(4)source 表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解 决session问题的一种方法
(5)ri 表示根据请求的URI
(6)rl_param 表示根据请求的URl参数
(7)hdr(name) 表示根据HTTP请求头来锁定每一次HTTP请求
(8)rdp-cookie(name) 表示根据据cookie(name)来锁定并哈希每一次TCP请求
HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等)、7层(HTTP)。在4层模式下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者请求(request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。(新的1.3之后的版本引入了frontend,backend指令;frontend根据任意 HTTP请求头内容做规则匹配,然后把请求定向到相关的backend.)
以上是LVS和HAProxy的简介及详情,但上文只是陈述了它们的优秀的地方,下面让我们再来了解一下它们的不足,权衡利弊才能更好的帮我们进行选择。
LVS本身不支持正则表达式的处理,不能做动静分离
网站应用比较庞大时,LVS实现起来比较复杂,特别是后端存在Windows Server的机器时
不支持POP/SMTP协议
不支持SPDY协议
不支持HTTP cache功能
重载配置的功能需要重启进程
-
多进程模式支持不够友好
下图是对二者进行一个总结:
更多精彩干货分享
点击下方名片关注
IT那活儿
以上是关于LVS与HAProxy的对比的主要内容,如果未能解决你的问题,请参考以下文章