企业级调度器 LVS 基础知识总结
一、LVS 基础
1、简介
LVS 是Linux 虚拟服务器(Linux Virtual Server),它是基于 Linux 内核的负载均衡软件,由章文嵩博士主导开发。LVS 基于IP负载均衡、内容请求分发等技术,整合了一些特有的理念和思想后开发的一套解决方案。普通的 Linux 主机可以基于 LVS 提供的负载均衡技术,实现一个高扩展的 Linux 的服务器集群。核心功能是将客户端请求分发到后端多台真实服务器,实现高可用和高并发。工作在网络层(TCP/IP 协议栈),性能损耗低,支持百万级并发连接。
2、结构
一般来说,LVS集群有三部分组成:
负载调度器(load balancer):负责将客户的请求调度到后端主机上。
服务器池(server pool):真正响应用户请求的后端主机。
共享存储(shared storage):存储配置、元数据等相关信息。
3、主要资源调度功能
NAT:修改请求数据包的目标ip地址,实现请求转发功能;
Tunneling:给请求数据包外部增加新的ip首部,实现请求转发功能;
DirectRouting:修改请求数据包的mac地址,实现请求转发功能;
FULLNAT:结合SYNPROXY技术,修改数据包的源ip地址和目标ip地址,实现请求转发功能。
二、工作原理
LVS 是根据监听到的前端请求报文中的目标 IP 和目标协议及端口号,将该请求转发到后台某台 RS 服务器上,由 RS 服务器完成对前端请求的响应,具体的监听规则及调度策略由使用者自行配置。
LVS 是内核中的功能,工作在 PRE_ROUTING链 和 INPUT链 中间的位置上,截取发往 INPUT 链的请求与配置好的 LVS 监听及调度规则进行对比,如果命中,则会触发 LVS 调度,从而转发该请求。

三、常见术语
物理术语 - 用于描述主机的常见术语
DS:Director Server。指的是LVS集群中的负责调度(Dispatcher)或者负载均衡(Load Balancer)的主机,即部署LVS的主机。也称VS(Virtual Server)。
RS:Real Server。指的是这正相应用户主机的后端服务器主机。也称BS(Backend Server)。
逻辑术语 - 用户描述逻辑关系的常见术语
VIP:Virtual Server IP。LVS主机上用于向外部用户提供服务的ip地址,作为用户请求的目标的IP地址。它是一个在物理主机上没有物理网卡的ip地址,一般用于LVS主机的外网ip。
DIP:Director Server IP。LVS主机上和后端提供真正服务的主机通信的IP地址。它是一个独立的物理网卡上的地址,一般用于LVS主机的内网ip。
RIP:Real Server IP。在LVS调度主机后端,真正响应用户请求的主机IP地址。
CIP:Client IP。发起请求的用户客户端IP地址,一般都是外网ip地址。
这四者之间的访问关系如下:CIP <--> VIP == DIP <--> RIP
四、工作流程
用户在客户端发起访问服务的请求;
经过层层的dns解析原理,获取服务的提供ip地址(VIP);
客户端向VIP所在的LVS主机(VS)发起服务请求;
LVS主机(VS)接收到用户请求,根据自身的配置,将用户请求转交到后端的某主机(RS);
用户请求经LVS的DIP网卡,进入到公司内网环境;
根据数据包的结构,找到真正提供服务的后端主机(RS);
公司内部的后端主机,处理用户请求后,采用某种方式返回给客户端。

五、工作模式
LVS 官方支持三种工作模式,分别是 NAT 模式,DR 模式,TUN 模式,不同的模式有各自不同的特点,使用者可以根据业务场景选择不同的的工作模式来实现其负载均衡集群。
1、NAT 模式
工作原理
调度器(Director)作为客户端与后端真实服务器(RS)的中间节点,负责双向地址转换。
客户端请求到达 Director 的 VIP(虚拟 IP),Director 将数据包的目标 IP 修改为某 RS 的私有 IP(RIP),转发给 RS;
RS 处理后将响应发送给 Director(RS 的网关需指向 Director 的 DIP,即私有 IP),Director 再将响应包的源 IP 修改为 VIP,返回给客户端。(所有进出流量均经过 Director)
基本工作流程
用户向具有公网ip地址的LVS主机地址(VIP)发起请求,(Src=CIP,Dst=VIP)
LVS主机接收到数据包后,修改数据包的目标地址为后端RS1主机并转发出去,(Src=CIP,Dst=RIP1)
后端RS1主机处理完请求后,返回数据包给LVS主机,(Src=RIP1,Dst=CIP)
LVS主机接收到数据包后,修改数据包的源地址为LVS的公网地址(VIP)并转发出去,(Src=VIP,Dst=CIP)
网络拓扑
Director 有 2 块网卡:一块连接公网(配置 VIP),一块连接私有网段(配置 DIP);
所有 RS 位于私有网段,使用私有 IP(RIP),网关指向 DIP,与 Director 通过私有网络通信。

优缺点
优点:配置简单,RS 可使用私有 IP,无需公网地址;
缺点:Director 成为性能瓶颈(所有流量经过),支持的 RS 数量少(通常≤10 台),转发效率低(需修改 IP 头)。
适用场景
小规模集群,RS 数量少,对成本敏感(无需额外网络设备)。
2、DR 模式
工作原理
DR 模式是 LVS 的默认模式,应用广泛。Director 仅处理入站请求,通过修改数据包的 MAC 地址(二层转发)实现负载均衡,出站流量直接从 RS 返回客户端。
客户端请求到达 Director 的 VIP,Director 保持目标 IP(VIP)不变,仅将目标 MAC 地址修改为某 RS 的 MAC,源 MAC 改为自身 MAC(即 DIP 所在的接口的 MAC),转发给 RS;
RS 接收数据包(因本地配置了 VIP,且通过抑制 ARP 响应避免冲突),处理后直接以 VIP 为源 IP 响应客户端(不经过 Director)。
基本工作流程
用户向具有公网 ip 地址的 LVS 主机地址(VIP)发起请求,(Src=CIP,Dst=VIP)
LVS 主机接收到数据包后,修改数据包的目标 MAC 地址为后端 RS 主机并转发出去,(Src=CIP,Dst=VIP)
后端 RS 主机处理完请求后,返回数据包给客户端主机,(Src=VIP,Dst=CIP)
网络拓扑
Director 与所有 RS 必须在同一物理网段(二层可达),连接到同一交换机;
Director 配置 VIP(公网可见),RS 在 IO 接口配置 VIP(隐藏,仅用于响应),避免 ARP 广播冲突。

优缺点
优点:性能极佳(Director 仅处理入站,出站直接回客户端),支持大量 RS(数百台),无 IP 修改开销;
缺点:配置复杂(需处理 RS 的 ARP 抑制、VIP 绑定),RS 与 Director 必须同网段(不支持跨网段部署)。
适用场景
高并发、高性能要求的集群(如 Web 服务器),RS 集中在同一机房。
3、TUN 模式
工作原理
通过 IP 隧道(如 IPIP 协议)封装数据包,实现跨网段转发,出站流量直接从 RS 返回客户端。
客户端请求到达 Director 的 VIP,不修改请求报文的IP首部(源 IP 为 CIP,目标 IP 为 VIP),而是将原请求报文封装在新的 IP 包中(源 IP 为 DIP,目标 IP 为 RIP),通过隧道发送给 RS;
RS 解封装后处理请求,直接以 VIP 为源 IP 响应客户端,目标 IP 是 CIP。
基本工作流程
用户向具有公网 ip 地址的 LVS 主机地址(VIP)发起请求,(Src=CIP,Dst=VIP);
LVS 主机接收到数据包后,将原数据包封装到 ip 隧道数据包中,转发到后端 RS 主机,(Src=DIP,Dst=RIP);
后端 RS 主机处理完请求后,返回数据包给客户端主机,(Src=VIP,Dst=CIP)。
网络拓扑
Director 配置 VIP,RS 配置 VIP 和隧道 IP(可跨网段,甚至不同机房);
Director 与 RS 通过公网或专用网络建立 IP 隧道,无需同网段。

优缺点
优点:RS 可跨网段部署(扩展性强),性能优于 NAT(出站不经过 Director);
缺点:RS 需支持 IP 隧道协议,封装 / 解封装有额外开销,配置复杂。
适用场景
大规模分布式集群(如 CDN 节点),RS 分散在不同地理位置。
六、LVS 调度算法
1、调度分类
静态方法:仅仅从调度策略本身实现的功能角度进行工作。包含 RR、WRR、DH、SH;
动态方法:在满足调度策略本身实现功的前提下,还要考虑后端主机的动态负载效果。包含:LC、WLC、LBLC、LBLCR、SED、NQ;
高版本内核中新增的调度算法: 在 4.15 版本的内核中新增的方法。包含:FO、OVF、MH、TNDR等
2、常见算法解读
静态算法
RR:Round Robin,轮询算法,LVS 服务器将前端请求轮流转发到后端每一台 RS 服务器上,后端每台 RS 服务器处理的请求量都是相同的;
WRR:Weight RR,加权轮询算法,LVS 服务器将前端请求根据后端 RS 服务器的权重进行转发,对于后端 RS 服务器中性能好的机器可以设置较高的权重,物尽其用。算法的调度规则:当前 RS 服务器被调度的比例 = 当前 RS 服务器的权重值/总权重值(所有RS服务器的权重之和);
SH:Source Hash,源 IP 地址 hash,将来自于同一个 IP 地址的客户端请求调度到后端同一台 RS 服务器上,从而实现会话保持;
DH:Destinatio Hash,目标 IP 地址 hash,客户端的请求第一次被调度到某到 RS 服务器后,其后续的请求都将会被发往同一台 RS 服务器,一般用于正向代理缓存场景;
动态算法
LC:Least Connections,最少连接算法,将前端请求调度到己建立的连接数最少的后端 RS 服务器上,如果集群后端服务器具有相同的配置和相近的系统性能,采用此调度算法可以较好的均衡负载。Overhead = 活动连接数 * 256 + 非活动连接数。负载值越小,则被调度的优先级越高,256个非活动连接相当于1个活动连接;
WLC:Weighted Least Connections,加权最少连接算法,此算法是 LVS 的默认调度算法。在 LC 算法中,只考虑了 RS 服务器的连接数,而没有考虑 RS 服务器会有不同的配置和性能,此算法优化了负载均衡性能,具有较高权重值的 RS 服务器将承受较大比例的活动连接负载。Overhead =(活动连接数 * 256 + 非活动连接数)/ Weight。权重值越大,则计算出的负载值越小,相应的,被调度的优先级越高。256个非活动连接相当于1个活动连接。
SED:Shortest Expected Delay,最短延迟调度算法,此算法是 WLC 算法的改进版。为了避免WLC在初始环境下,多台主机没有任何活动请求,这个时候权重值就失效了,所以出现了SED,也就是说,将所有主机的活动连接数,默认都是存在至少1个活动连接。Overhead =(活动连接数 + 1)* 256 / Weight。权重值越大,则计算出的负载值越小,相应的,被调度的优先级越高。不考虑非活动连接的原因是为了防止 WLC 算法中 非活动连接数 过大影响调度的准确性,+1 是为了保证被除数大于0,防止出现计算结果为0的情况,计算结果为0则意味着每台 RS 被调度的概率是一致的,权重值设置无效。
NQ:Never Queue,最少队列调度算法/永不排队调度算法。初始的时候先做一次轮循,保证每台 RS 都至少被调度一次,后续使用 SED 调度算法。
LBLC:Locality-Based Least Connections,基于局部性的最少链接调度算法。本质是动态的 DH 算法,该算法优先使用 DH 算法将请求调度到同一台 RS 服务器上,如果该 RS 服务器负载较高或不可用,则再使用 LC 算法决定调度到哪一台 RS 服务器上,此 RS 服务器将成为一下次调度时 DH 算法的首选项。
LBLCR:Locality-Based Least Connections with Replication,带复制的基于局部性的最少链接调度算法。在 LBLC 算法中,如果 DH 算法选出的 RS 服务器不能被调度,则要使用 LC 算法重新选择 RS 服务器,LBLCR 的算法优势是会将之前被选中的 RS 服务器上的相关缓存数据复制一份到此次被选中的 RS 服务器上,达到数据复用的目的。
3、特点及适用场景
| 算法名称 | 英文全称 | 核心特点 | 适用场景 |
|---|---|---|---|
| RR | Round Robin(轮询) | 按顺序依次分配请求给后端 RS,不考虑 RS 性能、负载或请求处理时间,均等分配。 | 后端 RS 性能相近,请求处理时间差异小(如静态资源服务器集群:图片、HTML 文件服务)。 |
| WRR | Weighted Round Robin(加权轮询) | 为 RS 分配权重(权重与性能正相关),权重越高的 RS 处理请求越多(按权重比例分配)。 | 后端 RS 性能不均衡(如部分服务器配置更高),需按性能比例分配负载(如混合配置的 Web 服务器集群)。 |
| DH | Destination Hash(目标地址哈希) | 根据请求的目标 IP 地址哈希,相同目标 IP 的请求固定分配到同一 RS。 | 对目标 IP 缓存命中率敏感的场景(如反向代理服务器、CDN 节点),提高相同目标 IP 的缓存利用率。 |
| SH | Source Hash(源地址哈希) | 根据请求的客户端 IP(源 IP)哈希,相同客户端 IP 的请求固定分配到同一 RS。 | 需要会话保持的场景(如用户登录状态、购物车数据保存在 RS 本地),避免会话失效。 |
| LC | Least Connections(最少连接) | 动态根据 RS 当前活跃连接数分配请求,优先分配给连接数最少的 RS,适应负载波动。 | 请求处理时间差异大的场景(如动态页面生成、数据库查询),避免某 RS 因长耗时请求过载。 |
| WLC | Weighted Least Connections(加权最少连接) | 结合 RS 权重和当前连接数,通过 “连接数 / 权重” 计算负载值,负载值越小的 RS 优先分配。 | RS 性能不均衡且请求处理时间波动大(如混合静态 / 动态内容的 Web 集群、应用服务器集群),兼顾性能与负载。 |
| LBLC | Locality-Based Least Connections(基于局部性的最少连接) | 优先将相同目标 IP 的请求分配给 “最近处理过该目标 IP” 的 RS(若负载不高);否则按最少连接选择。 | 目标 IP 访问具有局部性(某几个目标 IP 请求量极大)的缓存集群(如 Web 缓存服务器),提高缓存命中率。 |
| LBLCR | Locality-Based Least Connections with Replication(带复制的基于局部性最少连接) | LBLC 的改进版:当某目标 IP 请求量过大导致对应 RS 过载时,将该目标 IP 映射 “复制” 到其他低负载 RS,分散压力。 | 目标 IP 访问极不均衡的场景(如热门商品详情页、爆款内容服务器集群),解决热门目标 IP 的单点瓶颈。 |
| SED | Shortest Expected Delay(最短预期延迟) | WLC 的优化版,通过 “(当前连接数 + 1)/ 权重” 计算预期延迟,优先选择预期延迟最小的 RS,更倾向高权重 RS。 | 对请求响应速度敏感,且 RS 性能差异较大的场景,减少高权重 RS 的 “等待时间”,提升整体响应效率。 |
| NQ | Never Queue(永不排队) | SED 的改进版:若存在连接数为 0 的空闲 RS,优先分配新请求给空闲 RS;否则按 SED 算法分配,避免请求排队。 | 希望新请求快速被处理(减少等待时间)的场景(如在线聊天、游戏匹配等实时交互服务),优先利用空闲资源。 |
七、ipvsadm 命令基础使用
ipvsadm 是 LVS 的管理工具,用于配置、管理 IP 虚拟服务器(IPVS)规则,包括定义虚拟服务(VIP: 端口)、添加 / 删除后端 RS、指定调度算法等。
1、创建集群
命令格式
ipvsadm -A -t|u|f service_address:port [-s scheduler] [-p [timeout]]
常用选项
-A :增加lvs集群
-t :指定lvs集群服务主机的tcp端口
-u :指定lvs集群服务主机的udp端口
-f :指定lvs集群服务主机采用的防火墙自定义规则的标记,默认是数字
-s :指定lvs集群的调度策略,默认是wlc
示例
# 添加虚拟服务,TCP,VIP:80,轮询算法
ipvsadm -A -t 10.0.0.10:80 -s rr2、编辑集群
命令格式
ipvsadm -E -t service_address:port [-s scheduler]
常用选项
-E :编辑lvs集群的信息
示例
# 将该集群调度策略改为lc
ipvsadm -E -t 10.0.0.10:80 -s lc3、删除集群
命令格式
ipvsadm -D -t service_address:port
常用选项
-D :删除指定lvs集群的信息
-C :删除所有lvs集群的信息
示例
# 删除该集群
ipvsadm -D -t 10.0.0.10:804、增加主机
命令格式
ipvsadm -a -t service_address:port -r server-address:port -g|m|i [options]
常用选项
-a :给lvs集群增加一个真实主机RS
-r :指定真实主机的地址信息,格式是 IP:[Port],Port可以省略
-g|m|i :设定后端主机的转发模式。-g 采用默认的direct routing模式。-m 采用masquerading的nat模式。-i 采用ipip的tunneling模式。这三者只能选择其一。
-w :指定真实主机的权重信息
示例
#为虚拟服务添加后端 RS , 采用DR模式
ipvsadm -a -t 10.0.0.10:80 -r 192.168.1.2:80 -g5、编辑主机
命令格式
ipvsadm -e -t service_address:port -r server-address:port [options]
常用选项
-e :修改真实主机的属性信息
-m :设定真实主机的转发模型信息为nat模型
注意:修改真实主机信息的时候,必须指定已存在的lvs集群地址,协议也必须正确。-m 和 -i 不能同时使用
示例
#转换为 NAT 模式
ipvsadm -e -t 10.0.0.10:80 -r 192.168.1.2:80 -m6、删除主机
命令格式
ipvsadm -d -t service_address:port -r server-address:port
常用选项
-d :删除真实主机的属性信息
注意:LVS 服务主机和 RS 真实主机的地址必须指定正确。单个删除 RS 主机有些繁琐,我们可以直接采用删除 LVS 主机的效果清空所有目标主机。
示例
#转换为 NAT 模式
ipvsadm -d -t 10.0.0.10:80 -r 192.168.1.2:807、查看&保存规则
命令格式
ipvsadm-save [-n] > 规则文件
常用选项
-n :以精确的数字格式打印出 LVS 规则,如果不加 -n 的话,他会基于域名解析,将相应的 ip 转换成主机名展示。
注:使用 ipvsadm -Sn 可以实现同样的效果
示例
#保存规则到文件中
ipvsadm-save -n > /etc/sysconfig/ipvsadm
8、恢复规则
命令格式
ipvsadm-restore < 规则文件
示例
#从文件中恢复规则
ipvsadm-restore < /etc/sysconfig/ipvsadm
9、清空规则
命令格式
ipvsadm -C
10、常用命令选项
| 选项 | 作用 | 示例 |
|---|---|---|
-A | 添加虚拟服务 | ipvsadm -A -t 10.0.0.10:80 -s rr(TCP 服务,VIP:80,轮询算法) |
-a | 为虚拟服务添加后端 RS | ipvsadm -a -t 10.0.0.10:80 -r 192.168.1.2:80 -g(DR 模式) |
-D | 删除虚拟服务 | ipvsadm -D -t 10.0.0.10:80 |
-d | 从虚拟服务中删除后端 RS | ipvsadm -d -t 10.0.0.10:80 -r 192.168.1.2:80 |
-L/-l | 查看 IPVS 规则 | ipvsadm -Ln(-n:数字显示 IP / 端口) |
-s | 指定调度算法(如 rr、wrr、lc、wlc 等) | ipvsadm -E -t 10.0.0.10:80 -s wrr(修改算法为加权轮询) |
-m/-g/-i | 指定 RS 的工作模式(NAT/DR/TUN) | -m(NAT)、-g(DR)、-i(TUN) |
-w | 设置 RS 的权重 | ipvsadm -a -t 10.0.0.10:80 -r 192.168.1.2:80 -g -w 5(权重 5) |
-C | 清除所有 IPVS 规则 | ipvsadm -C |
ipvsadm-save | 保存规则到文件 | ipvsadm-save > /etc/sysconfig/ipvsadm |
ipvsadm-restore | 从文件恢复规则 | ipvsadm-restore < /etc/sysconfig/ipvsadm |
八、总结
LVS 的三种模式中,NAT 适合小规模场景,DR 适合高性能本地集群,TUN 适合跨网段分布式集群;调度算法需根据 RS 性能和请求特性选择;ipvsadm 是配置 LVS 的核心工具,通过其定义虚拟服务与后端节点的映射关系。
