LVS — Linux Virtual Server
LVS(Linux Virtual Server,Linux 虚拟服务器)是 Linux 内核层面的四层负载均衡方案,由章文嵩博士在 1998 年发起。它工作在内核态,性能直追硬件 F5(数十万元级别),是开源四层负载均衡的”王者”。
架构组成
LVS 由两部分构成:
ipvsadm(用户态,配置规则)
↓ 写入
ipvs(内核态,执行转发)
↓ 工作在 Netfilter 框架
数据包转发
- ipvs(内核模块):工作在内核 Netfilter 框架的 INPUT 链上,负责实际的数据包转发
- ipvsadm(命令行工具):管理 ipvs 规则,仅在添加规则时使用,转发过程完全不依赖它
四种工作模式
| 模式 | 请求路径 | 响应路径 | 适用场景 |
|---|---|---|---|
| DR(Direct Routing) | 走 LVS | 直回客户端 | 生产首选,同局域网 |
| NAT | 走 LVS | 走 LVS | 需要端口映射 |
| TUN(IP Tunneling) | IP 隧道 | 可直回 | 跨机房/跨网段 |
| FullNAT | 全地址转换 | 走 LVS | 云环境 |
DR 模式详解
为什么这么快
- 工作在内核态,无需用户态/内核态上下文切换(而 Nginx/Haproxy 需要)
- 请求走 LVS,响应直接由 Real Server 返回客户端,不走 LVS
核心术语
| 术语 | 含义 | 配置位置 |
|---|---|---|
| CIP | 客户端 IP | 客户端 |
| VIP | 虚拟 IP(对外入口) | LVS: 物理网卡 / RS: lo 网卡 |
| DIP | LVS 与 RS 通信的 IP | LVS 物理网卡 |
| RIP | Real Server 真实 IP | RS 物理网卡 |
数据包流程
1. 客户端发包:CIP → VIP(到达 LVS)
2. LVS 调度算法选 RS → 改目标 MAC 为 RS 的 MAC(不改 IP,不改端口)
3. RS 收到包 → lo 网卡上的 VIP 识别 → 处理请求
4. RS 直接回复:RIP → CIP(完全不走 LVS)
关键限制
- LVS 与所有 Real Server 必须在同一个二层网络(同一局域网)
- RS 上需配置:VIP 在 lo 网卡 +
arp_ignore=1+arp_announce=2(抑制 ARP 响应,防 VIP 冲突)
调度算法
静态算法
- rr(Round Robin):轮询
- wrr(Weighted RR):加权轮询
- dh(Destination Hashing):目标地址哈希
- sh(Source Hashing):源地址哈希
动态算法
- lc(Least Connections):最少连接
- wlc(Weighted LC):加权最少连接(默认)
- lblc(Locality-Based LC):基于本地的最少连接
典型部署架构
用户 → LVS(四层,VIP)→ Nginx/Haproxy(七层)→ Web 服务器集群
↓(Keepalived 高可用)
备 LVS 节点
LVS 也直接代理数据库集群(需先做好主从同步):写操作 → LVS 写地址 → 主库;读操作 → LVS 读地址 → 从库。
负载均衡选型对比
| 方案 | 层级 | 性能 | 特点 |
|---|---|---|---|
| LVS | 四层 | ⭐⭐⭐ | 内核态,性能堪比 F5 |
| Nginx | 四/七层 | ⭐⭐ | 七层功能最强 |
| Haproxy | 四/七层 | ⭐⭐ | ACL 灵活,健康检查细致 |
| F5 | 四/七层 | ⭐⭐⭐ | 硬件,价格极高 |
相关页面
- 负载均衡入门:L4 vs L7 基础
- Haproxy:与 LVS 组合使用
- LVS DR 模式:Day35 详细部署
- Keepalived:LVS+Keepalived 高可用
- Nginx
- iptables/Netfilter(LVS 底层依赖 Netfilter 框架)
- Keepalived
- 章文嵩 — LVS 创始人
- LVS DR 模式详解