一、LVS概念
LVS(Linux Virtual Server)是一个基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性。
二、LVS优势
高性能:LVS工作在内核层,性能高效,能够处理大量并发请求。
高可用性:通过配置Keepalived等工具,LVS可以实现高可用性,确保服务的持续运行。
灵活性强:支持多种负载均衡算法和工作模式,适应不同的应用场景。
三、LVS整体架构
LVS的整体架构主要包括负载均衡器(Load Balancer)、后端服务器(Real Server)和客户端三部分。客户端的请求首先到达负载均衡器,然后由负载均衡器根据一定的调度算法将请求转发到后端服务器进行处理,处理结果再返回给客户端。
四、LVS相关术语
VS:Virtual Server。虚拟服务
DS:Director Server。指的是前端负载均衡器节点
RS:Real Server。后端真实的工作服务器
VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址
DIP:Director Server IP,主要用于和内部主机通讯的IP地址
RIP:Real Server IP,后端服务器的IP地址
CIP:Client IP,访问客户端的IP地址

五、LVS工作模式
LVS工作模式分为以下四种模式,不过Full--NAT模式没有被编译进内核,工作中常用的模式是DR模式,也算默认的工作模式。
1. NAT模式(Network Address Translation)
路由转发模式。在该模式下,负载均衡器不仅需要修改请求报文的目标地址,还需要修改响应报文的源地址,适用于小规模集群。
2. DR模式(Direct Routing)
直接路由模式。在该模式下,负载均衡器只修改请求报文的目标MAC地址,而不修改IP地址,后端服务器直接将响应报文发回客户端,适用于大规模集群。
3. TUN模式(IP Tunneling)
隧道模式。该模式通过IP隧道将请求转发到后端服务器,后端服务器直接将响应报文发回客户端,适用于地理位置分散的集群。
4. FULLNAT模式
通过同时修改请求报文的源IP地址和目标IP地址进行转发。阿里自己研发的FULL-NAT模式,非内部员工是使用不到的。
七、LVS调度算法
6.1调度算法分类
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑RS的负载情况
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
6.2静态调度算法
1. 轮询调度 rr(Roundrobin)(常用)
均等地对待每一台服务器,不管服务器上的实际连接数和系统负载
2. 加权轮询调度 wrr(Weightted RR)(常用)
调度器可以自动问询真实服务器的负载情况,并动态调整权值
3. 源地址散列调度算法 sh (Source Hashing)
与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
4. 目标地址散列调度算法 dh (Destination Hashing)
该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
6.3 动态调度算法
1. 最少链接 lc(Least Connection)(常用)
动态地将网络请求调度到已建立的连接数最少的服务器上
如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡
overhead=活动连接数*256+非活动连接数
2. 权重最少链接 wlc(111Weighted LC)(常用)
调度器可以自动问询真实服务器的负载情况,并动态调整权值
带权重的谁不干活就给谁分配,机器配置好的权重高
overhead=(活动连接数*256+非活动连接数)/权重值
3. 最短期望延迟 sed(Shortest Expection Delay)
不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙
overhead=(活动连接数+1)*256/权重值
4. 最少队列 nq(Nerver Queue)
无需队列,如果有realserver的连接数为0就直接分配过去
5. 基于局部性的最少连接调度算法 lblc(Locality-Based LC)
根据请求的目标IP找出该目标IP最近使用的服务器,若该服务器可用且没超载,就将请求发给它;若服务器不存在或者超载,且有服务器处于一半的工作负载,则用最少连接原则将请求发给一个可用服务器。是针对目标IP地址的负载均衡算法,可以看作动态的dh算法。可根据负载情况实现正向代理、web缓存等。
6. 带复制的基于局部的最少连接算法 lblcr(LBLC with Replication)
该算法维护从一个目标IP地址到一组服务器的映射(lblc维护的是一个目标IP地址到一台服务器的映射)。根据请求的目标IP找出该目标IP对应的服务器组,按最少连接原则从组内选出一台没有超载的服务器,将请求发给它;若该服务器超载,则最少连接原则从该集群中选出一台服务器加入到服务器组中,将请求发给该服务器。如果服务器组在一段时间没有修改,将最忙的服务器从组内剔除,以降低复制程度。这个算法也是针对目标IP地址的负载均衡算法,解决lblc负载不均衡的问题,从负载重的RS复制到负载轻的RS。可根据负载情况实现正向代理、web缓存等。
7. fo算法(Weighted Fail Over)
该算法会遍历lvs关联的RS链表,找到未过载(未设置IP_VS_DEST_F_OVERLOAD标识)且权重最高的RS进行调度。
8. ovf算法(Overflow-connection)
基于RS的活动连接数和权重值来实现。它会将新连接调度到权重值最高的RS,直到其活动连接数超过它的权重值,