深入浅出 | 阿里巴巴处理千万并发访问利器——LVS
老男孩IT教育
行业新闻
2023年6月15日 17:48
LVS是linux Virtual server的缩写,是一个虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能。
本文目录
LVS 负载均衡集群简介
LVS 负载均衡发展历史
LVS 负载均衡层次结构
LVS 负载均衡工作原理
LVS 负载均衡工作模式
LVS 负载均衡调度算法
1.1 LVS负载均衡集群简介
LVS是linux Virtual server的缩写,是一个虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能;
该项目在1998年5月由章文嵩博士组织成立,是中国国内最早出现的自由软件项目之一。
相关官方资料链接如下:

1.2 LVS负载均衡发展历史
早在Linux系统发布2.2内核时,LVS服务的核心组件IPVS,就已经以内核补丁的形式出现
从2.4.23版本开始,IPVS软件就已经合并到linux内核的常用版本的内核补丁集合
从2.4.24以后IPVS已经成为linux官方标准内核的一部分。
利用LVS实现负载均衡功能时,系统内核中的IPVS才是linux中真正实现负载均衡调度工具。
1.3 LVS负载均衡层次结构
从下图可知,LVS负载均衡调度技术是在linux内核中实现的,因此被称为linux虚拟服务器(linux virtual server)
使用LVS实现负载均衡功能时,不能直接配置内核中的ipvs,而需要使用ipvs的管理工具ipvsadm进行管理;
或者通过keepailived软件直接管理ipvs。

1.4 LVS负载均衡工作原理
LVS集群负载均衡服务接受所有入站客户端请求,并根据调度算法决定哪个节点应该处理回复请求。
负载均衡器(简称LB)也被称为LVS Director(简称 director);
LVS虚拟服务器的体系结构如下图所示,一组服务器通过高速的局域网或者地理分布的广域网相互连接;
在它们的前端有一个负载调度器,负载调度器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的;
客户访问集群系统提供的网络服务,就像访问一台高性能、高可用的服务器一样。
客户端程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务集群中透明地加入和删除一个节点来达到;
通过检测节点或服务进程故障和正确地重置系统达到高可用性。

负载均衡网站架构组成部分术语解释:

LVS集群内部的节点称为真实服务器(real server),也叫做集群节点,请求集群服务的计算机称为客户端计算机;
与计算机通常在网上交换数据包方式相同,客户端计算机,Director和真实服务器使用IP地址彼此进行通信。
1.5 LVS负载均衡工作模式
LVS负载均衡在进行部署使用时,具有3种常见的工作模式会应用在不同企业场景,具体工作模式为:
工作模式01:TUN
工作模式02:DR
工作模式03:NAT
01 Tun
英文全称为Tunneling。
强调说明:
在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)

TUN模式工作流程:
1、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。
此时报文的源IP为CIP,目标IP为VIP。
2、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
3、IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,
封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。
此时源IP为DIP,目标IP为RIP
4、POSTROUTING链根据最新封装的IP报文,将数据包发至RS;
因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输;
此时源IP为DIP,目标IP为RIP
5、RS接收到报文后发现是自己的IP地址,就将报文接收下来,
拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,此时RS开始处理此请求,
处理完成之后,通过lo接口送给eth0网卡,然后向外传递。
此时的源IP地址为VIP,目标IP为CIP
6、响应报文最终送达至客户端
TUN模式工作总结:
1、负载均衡器通过把请求的报文通过IP隧道(ipip隧道)的方式请求的报文不经过源目的地址的改写(包括mac)。
而是直接封装成另外的IP报文转发至真实服务器,而真实服务器将响应处理后直接返回给客户端用户
2、由于真实服务器将响应处理后的报文直接返回给客户端用户,因此,最好RS有一个外网IP地址,这样效率才会更高。
理论上:只要能出网即可,无需外网IP地址
3、由于调度器LB只处理入站请求的报文。因此,此集群系统的吞吐量可以提高10倍以上,但隧道模式也会带来一定的系统开销。
TUN模式适合LAN/WAN
4、TUN模式的LAN环境转发不如DR模式效率高,而且还要考虑系统对IP隧道的支持问题
5、所有的RS服务器都要绑定VIP,抑制ARP,配置复杂
6、LAN环境一般多采用DR模式,WAN环境可以用TUN模式
但是当前在WAN环境下请求转发更多的被haproxy/nginx/DNS调度等代理取代。
因此,TUN模式在国内公司实际应用的已经很少。
7、直接对外的访问业务,例如:web服务做RS节点,最好用公网IP地址。
不直接对外的业务,例如:mysql存储系统RS节点,最好用内部IP地址。
02 DR
英文全称为Direct Routing。
强调说明:
Virtual Server via Direct Routing(VS/DR)模式是通过改写请求报文的目标mac地址,将请求发给真实服务器的;
而真实服务器将响应后的处理结果直接返回给客户端用户,即不经过负载均衡器本身了。
同VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。
而且,这种DR模式没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求

DR模式工作流程:
1、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP。
2、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
3、IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,
将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。
此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
4、由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,
那么此时数据包将会发至Real Server。
5、RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。
处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。
此时的源IP地址为VIP,目标IP为CIP
6、响应报文最终送达至客户端
DR模式工作总结:
1、通过在调度器LB上修改数据包的目的MAC地址实现转发源IP地址仍然是CIP,目的IP地址仍然是VIP
2、请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此,并发访问量大时使用效率很高(和NAT模式比)
3、至于DR模式是通过MAC地址的改写机制实现的转发,因此,所有RS节点和调度器LB只能在一个局域网LAN中(小缺点)
4、需要注意RS节点的VIP绑定(lo:vip)和ARP抑制问题
5、强调下:RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配的上级路由器的IP
(这是RS带有外网IP地址的情况)理论讲,只要RS可以出网即可,不是必须要配置外网IP
6、由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度LB无法改变请求的报文的目的端口(和NAT要区别)
7、当前调度器LB支持几乎所有的UNIX,LINUX系统,但目前不支持windows,真实服务器RS节点可以是windows系统
8、总的来说DR模式效率很高,但是配置也比较麻烦。因此,访问量不是特别大的公司可以用haproxy/nginx取代之
(日2000W PV或并发请求1W以下都可以考虑用haproxy/nginx(LVS NAT模式))
9、直接对外的访问业务,例如 web服务做RS节点,RS最好用公网IP地址,如果不直接对外的业务,
例如 mysql存储系统RS节点,最好只用内部IP地址
03 NAT
英文全称为Network Address Translation。
强调说明:
修改目标IP地址为挑选出的RS的IP地址。

NAT模式工作流程:
1、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。
此时报文的源IP为CIP,目标IP为VIP。
2、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
3、IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,
然后将数据包发至POSTROUTING链。此时报文的源IP为CIP,目标IP为RIP
4、POSTROUTING链通过选路,将数据包发送给Real Server
5、Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。
此时报文的源IP为RIP,目标IP为CIP
6、Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。
此时报文的源IP为VIP,目标IP为CIP
NAT模式工作总结:
1、NAT技术将请求的报文(DNAT)和响应的报文(SNAT),通过调度器地址重写然后在转发给内部服务器,报文返回时在改写成原来的用户请求的地址。
2、只需要在调度器LB上配置wan公网IP即可,调度器也要有私有LAN IP和内部RS节点通信
3、每台内部RS节点的网关地址,必须要配成调度器LB的私有LAN内物理网卡地址(LDIP),这样才能确保数据报文返回时仍然经过调度器LB
4、由于请求与相应的数据报文都经过调度器LB,因此,网站访问量大时调度器LB有较大瓶颈,一般要求最多10-20台节点。
5、NAT模式支持对IP及端口的转换,即用户请求10.0.0.1:80,可以通过调度器转换得到RS节点的10.0.0.2:8080
(DR和TUN模式不具备的)
6、所有NAT内部RS节点只需配置私有LAN IP即可
7、由于数据包来回都需要经过调度器,因此,要开启内核转发net.ipv4.ip_forward=1
1.6 LVS负载均衡调度算法
LVS的调度算法决定了如何在集群节点之间分布工作负荷;
当Director调度器收到来自客户端计算机访问它的VIP上的集群服务的入站请求时,Director调度器必须决定哪个集群节点应该处理请求。
Director调度器可用于做出该决定的调度方法成两个基本类型:
固定调度方法:rr wrr dh sh
动态调度算法:wlc lc lblc SED NQ
固定调度方法解释说明:
01 rr(轮询调度)
全称为Round-Robin。
将请求依次分配不同的RS节点,也就是在RS节点中均摊请求。这种算法简单,但是只适合于RS节点处理性能相差不大的情况。
02 wrr(加权轮询调度)
全称为weighted Round-Robin。
将依据不同RS节点的权值分配任务。权值较高的RS将优先获得任务,并且分配到连接数将比权值较低的RS节点更多;
相同权值的RS得到相同数目的连接数。
03 dh(目的地址哈希调度)
全称为Destination Hashing。
以目的地址为关键字查找一个静态hash表来获得需要的RS。
04 sh(源地址哈希调度)
全称为Source Hashing。
以源地址为关键字查找一个静态hash表来获得需要的RS
动态调度方法解释说明:
01 wlc(加权最小连接数调度)
全称为weighted least-Connection。
假设各台RS的权值依次为Wi(I=1..n),当前的TCP连接数依次为Ti(I=1..n),依次选取Ti/Wi为最小的RS作为下一个分配的RS
02 lc(最小连接数调度)
全称为least-connection。
IPVS表存储了所有的活动的连接,把新的连接请求发送到当前连接数最小的RS
03 lblc(基于地址的最小连接数调度)
全称为locality-based least-connection。
将来自同一目的地址的请求分配给同一台RS节点,如果这台服务器尚未满负荷,分配给连接数最小的RS,并以它为下一次分配的首先考虑
04 SED(最短的期望的延迟)
全称为shortest expected delay scheduling SED,基于wlc算法
举例说明ABC三台机器分别权重123,连接数分别是123,那么如果使用wlc算法的话一个新请求进入时他可能会分给ABC中任意一个。
使用sed算法后进行这样一个运算A(1+1)/1 B(1+2)/2 C(1+3)/3,根据运算结果,把连接交给C
05 NQ(最少队列调度)
全称为never queue scheduling NQ,无需队列
如果有台realserver的连接数=0就直接分配过去,不需要再进行sed运算
老男孩教育专注IT教育10余年,只培养IT技术精英
全国免费咨询电话(渠道合作):400-609-2893











