一、LVS 原理
1.1.什么是 LVS
LVS(Linux Virtual Server,Linux 虚拟服务器)是集成于 Linux 内核的高性能负载均衡技术,由我国科学家章文嵩博士于 1998 年主导开发,其核心模块(IPVS)直接内置于 Linux 内核中,属于内核级别的负载均衡解决方案。
与 Nginx、HAProxy 等运行在用户态的负载均衡工具不同,LVS 工作在操作系统最底层的内核空间,通过直接操纵网络数据包转发逻辑,实现对大规模并发请求的高效分发。它并非独立的软件,而是 Linux 系统原生支持的功能模块,只需通过 ipvsadm 工具配置即可启用,因此具有极高的稳定性和兼容性。
1.2.LVS 的核心作用
负载均衡:避免单点过载
LVS 的核心功能是作为 “前端调度器(Director)”,接收来自客户端的所有请求,再根据预设的调度算法(如轮询、加权轮询、最小连接等),将请求 “均匀” 分发到后端的多台服务器(Real Server,真实服务器)。
高可用:保障服务不中断
结合外部健康检测工具(如 Keepalived),LVS 可实现服务的高可用。当后端某台服务器(如 Real Server 3)因故障(宕机、网络中断、服务崩溃)无法响应时,健康检测工具会立即将其从 “可用服务器池” 中剔除,LVS 调度器会自动将后续请求转发给其他正常服务器。待故障服务器修复后,又会被重新加入服务器池,整个过程无需人工干预,确保服务持续可用。
注意:LVS 本身没有高可用功能。
1.3.LVS 三大核心组件
负载均衡器(Director):
整个集群的 “入口网关”,负责接收所有客户端请求(通过虚拟 IP 暴露服务),并根据调度算法将请求转发到后端服务器。 Director 是 LVS 的核心控制节点,需配置两块网卡(或单网卡绑定多 IP):一块用于接收客户端请求(绑定 VIP),另一块用于与后端服务器通信(绑定 DIP,即 Director IP)。
服务器池(Real Server,RS):
实际提供服务的后端服务器集群(如 Web 服务器、数据库服务器),接收 Director 转发的请求并处理。所有 RS 需配置 RIP(Real IP),且能与 Director 通信(通常处于同一局域网)。RS 对客户端透明,客户端仅感知 VIP 的存在,不知道具体 RS 的 IP。
虚拟 IP(VIP,Virtual IP):
对外暴露的 “服务 IP”,是客户端访问集群的唯一入口(如 10.0.0.100)。 VIP 绑定在 Director 上,所有 RS 需通过一定配置(如 ARP 抑制)确保客户端请求只会被 Director 接收,避免 IP 冲突。
LVS 相关术语
VIP(Virtual IP):客户端访问 LVS 集群的入口 IP,对外暴露服务。
RIP(Real Server IP):后端真实服务器的 IP,用于处理 LVS 转发的请求。
DIP(Director IP):负载均衡器(Director)与后端服务器通信的 IP。
CIP(Client IP):发起请求的客户端设备的 IP 地址。
Director(负载均衡器):LVS 集群的核心调度节点,接收请求并转发给后端。
Real Server(RS):后端实际提供服务的服务器集群。
IPVS:Linux 内核中的模块,LVS 的核心转发引擎。
ipvsadm:管理 IPVS 的用户态工具,用于配置 LVS 规则。
1.4.LVS 的优势
1.高性能
LVS 工作在 TCP/IP 协议栈的四层(传输层),直接在内核中完成请求转发,无需经过用户态与内核态之间的数据拷贝(这是用户态工具的性能瓶颈)。因此,其转发效率接近硬件负载均衡器,能以极低的资源消耗处理海量请求。
2.高并发
由于内核级优化,LVS 可支持百万级并发连接(如每秒处理 100 万以上的新连接),远超 Nginx(十万级)、HAProxy(数十万级)等工具,是高流量场景的核心支撑技术。
3.开源免费
作为 Linux 内核的一部分,LVS 完全开源,无需支付任何 licensing 费用,且可自由定制修改。相比昂贵的硬件负载均衡器(如 F5),LVS 能以极低的成本构建企业级负载均衡集群,大幅降低架构成本。
4.灵活的网络模式
支持 NAT(网络地址转换)、DR(直接路由,性能最优)、TUN(隧道)、FullNet 模式四种网络模式,可适应不同的网络拓扑(如局域网、跨机房部署),满足复杂场景需求。
1.5.适用场景
LVS 凭借其高性能、高并发特性,广泛应用于以下场景:
1.大型门户网站 / 电商平台:如淘宝、京东等,需应对海量用户访问,LVS 作为第一层负载均衡,将请求分发到下层的 Nginx 或应用服务器。
2.高流量 API 服务:如支付接口、短视频接口等,需处理每秒数万至数十万的 API 调用,LVS 可确保请求均匀分配,避免接口服务器过载。
3.云服务与 IDC 机房:作为云平台的负载均衡网关(如 OpenStack 中的 LVS 组件),为虚拟机、容器集群提供流量分发能力。
4.金融、电信等核心系统:对稳定性要求极高的场景,LVS 配合 Keepalived 实现主从热备,确保服务零中断。
二、LVS 负载均衡工作模式
2.1.NAT 模式
2.1.1.NAT 详细传输过程逻辑
客户端发送请求:
客户端向 VIP(如
192.168.67.100:80
)发起访问,请求数据包包含:源 IP(CIP):客户端自身 IP(如
192.168.67.10
)目的 IP(VIP):LVS 负载均衡器对外暴露的虚拟 IP
目的端口:服务端口(如
80
或443
)
Director 接收请求并做 DNAT
LVS 调度器(Director)接收请求后,执行 目的地址转换(DNAT):
将目的 IP 从 VIP 改为 RS 的 RIP(如
192.168.13.100
)可能修改目的端口(如将客户端请求的
80
映射到 RS 的8080
)源 IP 保持为 CIP 不变
转发修改后的数据包至 RS
RS 处理请求并响应
RS 接收数据包(源 IP 为 CIP,目的 IP 为 RIP),处理请求后生成响应数据包:
源 IP:RS 自身的 RIP(如
192.168.13.10
)目的 IP:客户端的 CIP
源端口:服务端口(如
80
)目的端口:客户端随机端口(如
8080
)
Director 接收响应并做 SNAT
响应数据包返回至 Director,Director 执行源地址转换(SNAT):
将源 IP 从 RIP 改为 VIP
可能修改源端口(与步骤 2 对应)
转发修改后的数据包至客户端
客户端接收响应
客户端收到的响应数据包中,源 IP 为 VIP,与请求时一致,感知不到后端 RS 的存在。
2.1.2.NAT 模式特点
1.优点:
配置简单:RS 无需特殊配置,只需能访问 Director 的 DIP 即可。
网络隔离:RS 可使用私有 IP,无需暴露在公网,安全性高。
支持端口映射:可将客户端请求的端口(如
80
)映射到 RS 的其他端口(如8080
)。
2.缺点:
性能瓶颈:所有请求和响应都需经过 Director,Director 易成为流量瓶颈。
依赖 Director:RS 必须通过 Director 与客户端通信,无法直接响应。
扩展性有限:Director 的处理能力限制了集群规模,通常适用于中小规模部署。
2.1.3.NAT 适用场景
小规模集群:当后端 RS 数量较少(如 < 10 台),且流量不大时。
RS 无公网 IP:RS 部署在私有网络,需通过 Director 进行地址转换。
测试 / 开发环境:配置简单,便于快速搭建负载均衡架构。
端口映射需求:需要将不同端口的请求分发到同一 RS 的不同服务时(如
80→8080
,443→8443
)。
2.2.DR 模式
2.2.1.DR 详细传输过程逻辑
1. 客户端发送访问请求
客户端向 VIP(如 10.0.0.100:80
)发起请求,数据帧包含:
源 IP(CIP):客户端自身 IP(如
113.57.xxx.xxx
)源 MAC:客户端网卡的 MAC 地址(如
aa:bb:cc:dd:ee:ff
)目的 IP(VIP):LVS 集群的虚拟服务 IP(绑定在 Director 的 dummy 虚拟网卡
lvstest
上)目的 MAC:Director 的
lvstest
网卡的 MAC 地址(如ff:ee:dd:cc:bb:aa
,由系统自动分配)目的端口:服务端口(如
80
)
关键点:Director 通过
nmcli
创建的 dummy 网卡lvstest
作为 VIP 的载体,其 MAC 地址独立于物理网卡。客户端通过 ARP 解析 VIP 对应的 MAC 时,获取的是lvstest
的 MAC。
2. Director 调度器转发请求
Director 接收请求后,执行以下操作:
修改目的 MAC:将目的 MAC 从
lvstest
的 MAC(ff:ee:dd:cc:bb:aa
)改为目标 RS 的 dummy 网卡rs-vip
的 MAC 地址(如11:22:33:44:55:66
)修改源 MAC:将源 MAC 从客户端的 MAC(
aa:bb:cc:dd:ee:ff
)改为DIP 所在物理网卡的 MAC(如22:33:44:55:66:77
,即 Director 连 RS 的eth1
网卡 MAC)IP 层保持不变:源 IP(CIP)、目的 IP(VIP)、端口均不修改
关键点:Director 通过物理网卡
eth1
(绑定 DIP)转发数据包,根据链路层规则,源 MAC 必须是发送接口(eth1)的 MAC,与 dummy 网卡lvstest
无关。
3. RS 处理请求并直接响应客户端
RS 接收数据包(因 RS 的 dummy 网卡 rs-vip
绑定了 VIP,能识别目的 IP 为 VIP 的请求),处理后生成响应:
源 IP:保持为 VIP(确保客户端感知不到 RS 存在)
源 MAC:RS 的
rs-vip
网卡的 MAC 地址(11:22:33:44:55:66
)目的 IP:客户端 IP(CIP)
目的 MAC:客户端的 MAC 地址(
aa:bb:cc:dd:ee:ff
)响应数据包直接通过 RS 的物理网卡(如 eth0)发送给客户端,不经过 Director
关键点:RS 的
rs-vip
虚拟网卡仅用于接收 VIP 流量,响应时通过物理网卡(如eth0
)发送,其源 MAC 为rs-vip
的 MAC,确保客户端能通过 ARP 解析到正确的 MAC。
4. 客户端接收响应
客户端收到响应,源 IP 为 VIP(与请求时一致),源 MAC 为 RS 的 rs-vip
网卡的 MAC(但客户端仅关注 IP 层,不感知 MAC 变化),认为是从 “虚拟服务” 直接返回的结果,完成一次通信。
为什么使用 dummy 网卡?
dummy 网卡相比 lo 回环网卡,在ARP 冲突控制、路由适配、独立性三个核心维度更适合作为 VIP 的载体,能简化配置并降低冲突风险。而 lo 接口的设计初衷是本地通信,其特性与 DR 模式中 VIP 需要跨网络通信、严格控制 ARP 的需求天然冲突,因此实际场景中几乎都选择 dummy 网卡(或其他专用虚拟网卡,如 tun/tap)承载 VIP。
2.2.2.DR 模式特点
数据转发基于二层 MAC 地址修改
Director(负载均衡器)仅修改请求数据包的目的 MAC 地址(从自身与后端通信的网卡 MAC 改为目标后端服务器的 MAC),不修改源 IP、目的 IP(VIP)和端口。这种转发方式几乎不消耗 Director 的计算资源,效率极高。
响应不经过 Director,降低瓶颈
后端服务器(RS)处理请求后,直接向客户端返回响应(源 IP 为 VIP,目的 IP 为客户端 IP),响应数据包不经过 Director。因此,Director 仅承担 “请求转发” 角色,不会成为流量瓶颈,支持更高并发。
网络层限制:需同一广播域
Director 与后端服务器(RS)必须处于同一局域网(同一广播域),因为 MAC 地址转发依赖二层网络通信(无法跨网段路由)。
后端服务器需特殊配置
所有 RS 必须在本地绑定 VIP(通常通过虚拟 dummy 网卡,而非物理网卡或 lo 回环),否则无法接收目标为 VIP 的数据包。
需配置 ARP 抑制(如关闭 VIP 的 ARP 响应、抑制 ARP 广播),避免 RS 因绑定 VIP 而对外宣告 ARP,导致客户端直接向 RS 发送请求(绕过 Director)。
不支持端口映射
由于 Director 不修改 IP 和端口,后端服务器的服务端口必须与 VIP 暴露的端口一致(如 VIP:80 对应 RS:80),无法像 NAT 模式那样做端口转换。
扩展性强
因 Director 负载极低,可轻松扩展后端服务器数量(理论上支持数百甚至上千节点),适合大规模集群。
2.2.3.DR 适用场景
高并发、大流量的 TCP/UDP 服务
如 Web 服务器(HTTP/HTTPS)、静态资源服务、视频点播 / 直播的前端负载均衡等。这类服务请求量巨大,DR 模式的低延迟、高吞吐量特性可显著提升整体性能。
同一局域网内的服务部署
由于依赖二层 MAC 通信,Director 与 RS 必须在同一网段(如机房内部集群),适合数据中心内部的负载均衡场景。
追求极致性能,降低 Director 负载
相比 NAT 模式(响应需经 Director)或 TUN 模式(封装 IP 隧道,开销较高),DR 模式性能最优,适合对延迟敏感的服务(如金融交易、实时通信)。
后端服务器可水平扩展的场景
当业务需要通过增加后端节点提升容量时,DR 模式对 Director 的低依赖使其能轻松支持大规模扩展,无需频繁升级 Director 硬件。
2.3.TUN 模式
2.3.1.TUN 详细传输过程逻辑
客户端发送请求:发送数据包,包内有源 IP+vip+dport
VS 调度器转发流量:到达 VS 调度器后对客户端发送过来的数据包重新封装添加 IP 报文头,新添加的 IP 报文头中包含TUNSRCIP(DIP)+TUNDESTIP(RSIP1) 并发送到 RS1
RS 回应:RS 收到 VS 调度器发送过来的数据包做出响应,生成的响应报文中包含 SRCIP(VIP)+DSTIP(CIP)+port,响应数据包通过网络直接回传给 client
2.3.2.TUN 模式特点
核心转发逻辑:
仅请求数据包经过 VS 时被隧道封装(添加外层 IP 头),响应数据包由 RS 直接回传客户端,VS 不参与响应转发,避免成为瓶颈。
依赖 IP 隧道协议(如 GRE)实现跨网段通信,原 IP 层(CIP→VIP)始终不变,确保 RS 能识别请求。
优势:
突破局域网限制:VS 与 RS 可不在同一网段(支持跨机房、跨地域部署),解决 DR 模式 “必须同一广播域” 的痛点。
性能较高:响应不经过 VS,仅请求有封装开销,性能优于 NAT 模式(接近 DR 模式的 70%-80%),支持中大规模集群(数十至数百台 RS)。
灵活性强:可通过隧道隔离 RS 网络,适合多租户场景(如不同 RS 集群分属不同部门,通过隧道与 VS 通信)。
劣势:
封装开销:隧道封装 / 解封装会消耗一定 CPU 资源(尤其高并发场景),性能略低于 DR 模式。
配置复杂:需在 VS 和 RS 上额外配置隧道协议(如 GRE),并确保隧道两端路由互通;RS 需绑定 VIP 并配置 ARP 抑制(避免 VIP 冲突)。
依赖隧道协议支持:部分老旧设备或系统可能不支持 GRE 等隧道协议,限制部署场景。
2.3.3.TUN 适用场景
跨网段 / 跨机房部署:
如总部与分部的服务器集群(跨城市局域网),需通过公网或专线通信,TUN 模式可通过隧道将请求从 VS 转发到异地 RS。
分布式集群 / 云服务:
云平台中,虚拟机或容器分布在不同私有网络(如 AWS 的 VPC、阿里云的专有网络),TUN 模式可跨网络边界分发请求。
大规模地理分布式服务:
如跨地域的 CDN 节点、短视频的边缘计算节点,需将用户请求就近转发到不同地区的 RS,TUN 模式支持跨广域网的负载均衡。
需隔离 RS 网络的场景:
当 RS 部署在安全隔离区(如金融系统的核心数据库集群),仅允许通过隧道与外界通信时,TUN 模式可在保证隔离的同时实现负载均衡。
2.4.FullNet 模式
2.4.1.FullNet 详细传输过程逻辑
客户端对 VIP 发起请求。
Director 接过请求,发现是请求后端集群服务。
Director 对请求报文做 FULL NAT,把源 IP 改为 DIP,把目标 IP 转换为任意以后后端 RS 的 RIP,然后法网后端。
RS 接收到请求后,进行响应,相应报文源 IP 为 RIP,目标 IP 还是 DIP,又内部路由路由到 Director。
Director 接收相应报文后,进行 FULL NAT,把源地址改为 VIP,目标地址改为 CIP。
2.4.2.FullNet 模式特点
双向 NAT 解耦网络:请求 / 响应均做 IP 转换,RS 无需配置网关指向 Director,部署更灵活。
跨网自由部署:RS 可分布在任意路由可达的网络(跨机房、跨云平台),无需同网段。
隐藏 RS 真实 IP:客户端 / 外部网络无法直接访问 RS 的 RIP,增强后端安全性。
性能适中:优于普通 NAT(无响应瓶颈),略低于 DR 模式,支持中大规模集群。
2.4.3.FullNet 适用场景
跨数据中心 / 混合云:多地域机房、公有云 + 私有云混合部署,统一通过 Director 接入。
高安全隔离:金融、政务等敏感业务,RS 部署在内网隔离区,仅暴露 VIP 对外服务。
替代普通 NAT:解决普通 NAT 的 “RS 网关必须指向 Director” 限制,支持更灵活的 RS 扩展。
2.5.模式总结
模式 | 核心逻辑 | 网络修改 | 响应路径 | 网络要求 | 性能 | 适用场景 |
---|---|---|---|---|---|---|
NAT | Director作网关,双向改IP | 源IP(CIP→DIP)、目的IP(VIP→RIP) | 经Director | RS网关指向Director,同网段 | 低 | 小规模集群、低成本 |
DR | 修改MAC,IP层不变 | 仅改目的MAC | 直连客户端 | 同广播域(二层可达) | 极高 | 高并发Web、局域网大规模集群 |
TUN | 隧道封装,跨网段转发 | 外层IP(DIP→RIP),内层不变 | 直连客户端 | 跨网段,RS支持隧道协议 | 中高 | 跨地域集群、分布式系统 |
FULLNAT | 双向NAT,解耦RS网络 | 源IP(CIP→DIP)、目的IP(VIP→RIP) | 经Director | RS路由可达即可,无需同网段 | 中 | 混合云、高安全隔离场景 |
三、LVS 负载均衡算法
3.1.静态算法(不感知 RS 负载)
RR(轮询) 轮流调度 RS,不考虑性能差异,适合 RS 配置一致的小规模集群,缺点是性能差异大时易导致负载不均。
WRR(加权轮询) 按 RS 权重比例分配请求(如权重 2:1 则高配置 RS 处理 2 倍流量),适合混合配置集群,需手动配置权重。
SH(源 IP 哈希) 相同源 IP 请求固定发往同一 RS,实现会话保持(如购物车),但可能导致单 IP 流量过大时 RS 负载不均。
DH(目标 IP 哈希) 相同目标 IP 请求固定发往同一 RS,适合正向代理缓存(如 CDN),可减少后端缓存失效。
3.2.动态算法(感知 RS 负载)
LC(最少连接) 优先调度当前连接数最少的 RS,适合长连接服务(如数据库),但未考虑 RS 性能差异。
WLC(加权最少连接,默认) 综合 RS 权重与连接数(公式:
(活动连接数×256 + 非活动连接数) / 权重
),调度更公平,适合大多数场景。SED(最短预期延迟) 高权重 RS 优先承接新连接(公式:
(活动连接数+1) ×256 / 权重
),适合需要快速调度高配置 RS 的场景。NQ(永不排队) 第一轮均匀分配请求,后续按 SED 调度,避免请求排队,提升高并发场景响应速度。
LBLC(基于局部性的 LC) 结合 DH 与 LC,优先调度目标 IP 最近使用的 RS,适合 CDN 等缓存场景,减少缓存失效。
LBLCR(带复制的 LBLC) 当 RS 负载不均时,从高负载 RS 复制请求到低负载 RS,适合大规模缓存集群动态均衡。
3.3.内核新增算法(4.15+)
FO(加权失败转移) 优先调度未标记过载且权重最高的 RS,支持手动标记过载 RS,适合灰度发布或故障隔离。
OVF(溢出连接) 按权重分配请求,当 RS 连接数超过权重值时自动调度至下一个 RS,防止单 RS 过载。