介绍: LVS是Linux Virtual Server的简称,即Linux虚拟服务器。它是基于TCP/IP的负载均衡技术,转发效率高,具有处理百万计并发连接请求的能力。 LVS通过IPVS模块实现。IPVS模块安装在LVS集群作为负载均衡的主节点上,虚拟出一个IP地址和端口对外提供服务。用户通过访问这个虚拟服务(VS),请求由负载均衡器(LB)分发到后端真实服务器(RS)中,由RS实际处理用户的请求并返回响应。 如下图所示: IPVS三种转发模式: 根据负载均衡器转发客户端请求以及RS返回响应机制的不同,将IPVS的转发模式分为三种:NAT,DR,FULLNAT。 NAT模式(Network Address Translation) 请求包和响应包都需要经过LB处理。当客户端的请求到达虚拟服务 后,LB会对请求包做目的地址转换(DNAT),将请求包的目的IP改写为RS的IP。当收到RS的响应后,LB会对响应包做源地址转换(SNAT),将响应包的源IP改写为LB的IP。 NAT模式的特点: 1.LB会修改数据包的地址
2.对于请求包,会进行DNAT;对于响应包,会进行SNAT。 3.LB会透传客户端IP到RS(DR模式也会透传) 4.虽然LB在转发过程中做了NAT转换,但是因为只是做了部分地址转发,所以RS收到的请求包里是能看到客户端IP的。 5.需要将RS的默认网关地址配置为LB的浮动IP地址。 6.LB和RS须位于同一个子网,并且客户端不能和LB/RS位于同一子网。 执行过程如下图所示:

DR模式(Direct Routing) 客户端的请求包到达负载均衡器的虚拟服务IP端口后,负载均衡器不会改写请求包的IP和端口,但是会改写请求包的MAC地址为后端RS的MAC地址,然后将数据包转发;真实服务器处理请求后,响应包直接回给客户端,不再经过负载均衡器。所以DR模式的转发效率是最高的,特别适合下行流量较大的业务场景,比如请求视频等大文件。 DR模式的特点: 1.数据包在LB转发过程中,源/目的IP端口都不会变化。 2.LB只是将数据包的MAC地址改写为RS的MAC地址,然后转发给相应的RS。 3.每台RS上都必须在环回网卡上绑定LB的虚拟服务IP,因为LB转发时并不会改写数据包的目的IP,所以RS收到的数据包的目的IP仍是LB的虚拟服务IP。为了保证RS能够正确处理该数据包,而不是丢弃,必须在RS的环回网卡上绑定LB的虚拟服务IP。这样RS会认为这个虚拟服务IP是自己的IP,自己是能够处理这个数据包的。否则RS会直接丢弃该数据包。 4.RS上的业务进程必须监听在环回网卡的虚拟服务IP上,且端口必须和LB上的虚拟服务端口一致。因为LB不会改写数据包的目的端口,所以RS服务的监听端口必须和虚拟服务端口一致,否则RS会直接拒绝该数据包。 5.RS处理完请求后,响应直接回给客户端,不再经过LB。 6.LB和RS须位于同一个子网。 如下图所示:

FULLNAT模式 FULLNAT模式下,LB会对请求包和响应包都做SNAT+DNAT。 FULLNAT模式的特点: 1.LB完全作为一个代理服务器,FULLNAT下,客户端感知不到RS,RS也感知不到客户端,它们都只能看到LB。此种模式和七层负载均衡有点相似,只不过不会去解析应用层协议,而是在TCP层将消息转发。 2.LB和RS对于组网结构没有要求,不同于NAT和DR要求LB和RS位于一个子网,FULLNAT对于组网结构没有要求。只需要保证客户端和LB、LB和RS之间网络互通即可。 流程如下图所示: IPVS支持的调度算法 对于后端的RS集群,LB是如何决策应该把消息调度到哪个RS节点呢?这是由负载均衡调度算法决定的。IPVS常用的调度算法有:

轮询(Round Robin)   LB认为集群内每台RS都是相同的,会轮流进行调度分发。从数据统计上看,RR模式是调度最均衡的。

加权轮询(Weighted Round Robin)   LB会根据RS上配置的权重,将消息按权重比分发到不同的RS上。可以给性能更好的RS节点配置更高的权重,提升集群整体的性能。

最小连接数(Least Connections)   LB会根据和集群内每台RS的连接数统计情况,将消息调度到连接数最少的RS节点上。在长连接业务场景下,LC算法对于系统整体负载均衡的情况较好;但是在短连接业务场景下,由于连接会迅速释放,可能会导致消息每次都调度到同一个RS节点,造成严重的负载不均衡。

加权最小连接数(Weighted Least Connections)   最小连接数算法的加权版~

地址哈希(Address Hash)   LB上会保存一张哈希表,通过哈希映射将客户端和RS节点关联起来。