LVS 介绍与选型指南
介绍 LVS/IPVS 内核四层负载均衡的架构、转发模式、调度算法、ipvsadm 用法与适用边界,并与 HAProxy、Nginx、Keepalived 组合做选型对比。
LVS 介绍与选型指南
一、信息基准
本文为认知篇(A1),纯依据官方公开资料溯源编写,不包含本地安装与实测内容。查询日期为 2026-10-19。
LVS(Linux Virtual Server)由两部分构成:其一是已合入 Linux 内核主线的 IPVS(IP Virtual Server)子系统,版本随内核发布、无独立版号;其二是用户态管理工具 ipvsadm,有独立版本序列。因此本文标题不带版本号,版本口径以「内核子系统 + ipvsadm 工具」双线描述。
1.1 版本依据表(2026-10-19 实查)
| 组件 | 版本基准 | 说明 | 官方来源 |
|---|---|---|---|
| IPVS 内核子系统 | 随 Linux 内核发布,无独立版号 | 当前 stable 线 7.2.11(2026-10-15),长期维护线 6.18.57、6.12.113 等 | kernel.org/releases.json |
| ipvsadm 工具 | 1.31 | kernel.org utils 目录当前最新发布包 | kernel.org/pub/linux/utils/kernel/ipvsadm/ |
| Keepalived(常搭配的高可用组件) | v2.4.3 | 2026-07-20 发布,用于 VRRP 双机热备 | github.com/acassen/keepalived/releases.atom |
1.2 官方来源清单
| 来源 | URL | 用途 |
|---|---|---|
| LVS 项目官网 | https://www.linuxvirtualserver.org/ | 项目总览、HOWTO 文档 |
| Linux 内核官网 | https://www.kernel.org/ | 内核版本与 IPVS 源码树 |
| ipvsadm 官方发布目录 | https://www.kernel.org/pub/linux/utils/kernel/ipvsadm/ | ipvsadm 源码包与手册页 |
| Keepalived 官网 | https://www.keepalived.org/ | 高可用搭配组件资料 |
| HAProxy 官网 | https://www.haproxy.org/ | 选型对比数据 |
| Nginx 官网 | https://nginx.org/ | 选型对比数据 |
二、软件概述
LVS(Linux Virtual Server,Linux 虚拟服务器)是 1998 年 5 月由章文嵩博士发起的开源服务器集群项目,目标是用多台廉价的通用服务器以可伸缩的方式对外提供高可用、高性能的网络服务。项目核心成果 IPVS 代码自 Linux 2.4 内核起合入内核主线,成为内核原生支持的四层负载均衡子系统,二十余年来持续随内核演进。
按 2026-10-19 的官方实查口径,本文介绍的版本基准为:内核侧 IPVS 子系统随当前 stable 内核 7.2.x 提供;用户态管理工具为 ipvsadm 1.31。ipvsadm 是对内核 IPVS 规则进行增删查改的标准命令行界面,LVS 的部署与运维几乎都通过它(或解析同样规则的 Keepalived)完成。
LVS 在体系中的位置:它运行于负载均衡器(Director)的内核态,将发往虚拟 IP(VIP)的连接按调度算法分发给后端真实服务器(Real Server),对外表现为一个「虚拟服务器」。它不解析应用层内容,属于纯四层(传输层)负载均衡。
三、核心架构
3.1 三层体系结构
LVS 官方 HOWTO 描述的集群体系由三部分组成:
- 负载调度器(Load Balancer / Director):整个集群对外的唯一入口,持有虚拟 IP(VIP),运行 IPVS 内核模块完成报文分发;
- 服务器池(Server Pool):一组真实服务器(Real Server),实际处理请求,彼此提供相同服务;
- 后端共享存储:让服务器池中各节点访问一致的内容(如共享文件系统或数据库),保证任意节点返回相同结果。
3.2 IPVS 在内核中的实现
IPVS 代码位于内核树 net/netfilter/ipvs/ 目录,通过 Netfilter 框架在报文途经的钩子点上拦截发往 VIP 的连接,在连接级(而非报文级)做出调度决策:同一连接的后续报文始终送往首次选定的真实服务器,从而保证 TCP 状态一致。调度器维护一张连接哈希表,记录连接与真实服务器的绑定关系。
3.3 三种报文转发模式
| 模式 | 原理 | 特点 |
|---|---|---|
| NAT(网络地址转换) | 改写目标地址后转发,响应报文再经调度器改写源地址返回 | 后端可在任意网段;进出流量都经过调度器,调度器易成瓶颈 |
| TUN(IP 隧道) | 在原 IP 报文外封装一层 IP 头送往后端,后端解封装后直接响应客户端 | 后端可跨网段部署;响应不经过调度器,吞吐高;要求后端支持隧道协议 |
| DR(直接路由) | 只改写目标 MAC 地址,将报文交给同网段后端,后端以 VIP 为源地址直接响应 | 性能开销最小,是最常用的高性能模式;要求调度器与后端处于同一二层网络 |
3.4 调度算法
ipvsadm 手册页列出的调度算法共十种,分为静态(不考虑服务器实时负载)与动态(依据连接数等状态)两类:
- 静态:
rr(轮询)、wrr(加权轮询)、dh(目标地址散列)、sh(源地址散列)、sed(最短期望延迟)、nq(永不排队); - 动态:
lc(最少连接)、wlc(加权最少连接,默认)、lblc(基于局部性的最少连接)、lblcr(带复制的基于局部性的最少连接)。
四、功能特性
- 内核态四层负载均衡:在内核中完成报文转发,无用户态进程开销,单机可支撑海量并发连接;
- 多种转发模式:NAT、TUN、DR 三种模式覆盖不同网络拓扑需求(见 3.3);
- 十种调度算法:覆盖从简单轮询到基于局部性的动态调度(见 3.4);
- 会话保持:通过
-p选项开启持久化连接,将同一客户端在超时窗口内的多个连接固定到同一真实服务器; - 高可用组网:LVS 本身不含 VRRP 能力,标准做法是搭配 Keepalived,由后者以主备方式管理 VIP 并自动漂移,同时接管 IPVS 规则与健康检查;
- 健康检查:IPVS 自身不探测后端,由 Keepalived 的
virtual_server/real_server配置块(TCP 端口检查或 HTTP GET 检查)动态摘除故障节点; - 协议与地址族:支持 TCP、UDP 协议及 IPv4/IPv6(
-t/-u/-f与-6用法详见 ipvsadm 手册页); - SYN Proxy 防护:内核 IPVS 提供
--synproxy能力,由调度器代替后端完成三次握手,缓解 SYN Flood 攻击对真实服务器的影响; - 连接统计可视:
/proc/net/ip_vs及 ipvsadm-L --stats/--rate提供吞吐、连接数等计数。
五、快速上手
以下示例引自 ipvsadm 官方手册页(man ipvsadm)与 Keepalived 官方资料中的标准用法,仅作认知示意,不包含本地实测结果。
5.1 用 ipvsadm 建立 NAT 模式虚拟服务
# 打开内核转发(NAT 模式必需)
sysctl -w net.ipv4.ip_forward=1
# 创建一个对外的虚拟服务:VIP 的 80 端口,wlc 调度
ipvsadm -A -t 207.175.44.110:80 -s wlc
# 添加两台真实服务器,NAT 模式(-m)
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.1:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.2:80 -m
# 查看当前规则与统计
ipvsadm -L -n --stats
上述 VIP 与地址取自 ipvsadm 手册页示例;-A 增加虚拟服务、-a 增加真实服务器、-t 指定 TCP 服务、-s 指定调度算法、-m 指定 NAT 模式。
5.2 用 Keepalived 声明式管理 LVS
生产环境通常不用手工 ipvsadm 命令,而是由 Keepalived 的配置文件声明虚拟服务,Keepalived 启动后负责下发 IPVS 规则、执行健康检查并进行 VRRP 主备切换。来源:keepalived.conf 手册页(man keepalived.conf)。
virtual_server 207.175.44.110 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
protocol TCP
real_server 192.168.10.1 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 192.168.10.2 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
5.3 官方文档入口
- ipvsadm 手册页:https://kernel.org/pub/linux/utils/kernel/ipvsadm/
- LVS 官方 HOWTO:https://www.linuxvirtualserver.org/architecture.html
- Keepalived 官网:https://www.keepalived.org/
六、适用场景与限制
6.1 适用场景
- 超高四层吞吐与并发连接:数据库、消息队列、DNS、游戏长连接等纯传输层服务的前置分发,内核态转发开销极小;
- 大流量网站入口(DR/TUN 模式):响应流量绕过调度器直接回客户端,适合下载、视频等出入流量严重不对称的业务;
- 与 Keepalived 组成主备入口:VIP 漂移 + 健康检查 + IPVS 规则托管的一体化方案,是自建高可用网关的经典组合;
- 内核原生依赖场景:不希望在业务链路中引入额外用户态代理进程的环境。
6.2 限制
- 不具备七层能力:不能依据 HTTP 路径、Host、Cookie 等内容做路由,也无法做 TLS 终止之外的七层改写,需要时须在其后串接 HAProxy/Nginx;
- 配置与观测偏底层:ipvsadm 规则是内核态表项,排障依赖内核计数与日志,学习曲线比应用层代理陡;
- 健康检查需外部组件:IPVS 自身不带后端探测,脱离 Keepalived/ldirectord 时需自行维护节点摘除;
- DR 模式的网络约束:要求调度器与真实服务器同处一个二层网络,且后端需对 ARP 做特殊处理(抑制对 VIP 的 ARP 应答);
- 规则不跨节点同步:主备调度器各自维护规则,依赖 Keepalived 在切换时重新下发,不宜频繁变更。
七、同类选型对比
按任务口径对比三个参照系:HAProxy、Nginx(负载均衡角色)、以及与 LVS 强绑定的 Keepalived 组合。下列数据均为 2026-10-19 联网实查。
7.1 量化对比表
| 维度 | LVS(IPVS + ipvsadm) | HAProxy | Nginx(LB 角色) | Keepalived(与 LVS 组合) |
|---|---|---|---|---|
| 开源许可 | GPL-2.0(随内核) | GPL-2.0(官网声明) | BSD-2-Clause | GPL-2.0 |
| GitHub stars | 官方未公布(IPVS 随内核树发布,ipvsadm 托管于 kernel.org,无独立 star 计数仓库) | 6,931(github.com/haproxy/haproxy 页面实查) | 31,912(nginx/nginx 为官方只读源码副本,star 数据仅供参考) | 4,726(github.com/acassen/keepalived 页面实查) |
| 最近发版 | ipvsadm 1.31(kernel.org 官方目录);IPVS 随 stable 内核 7.2.11(2026-10-15) | 3.4.7(haproxy.org 下载页实查) | stable 线 1.30.6;mainline 线 1.31.7(nginx.org 官方下载页实查) | v2.4.3(2026-07-20,GitHub releases.atom 实查) |
| 版本节奏 | 随内核主线滚动演进;ipvsadm 独立工具更新缓慢(当前 1.31) | 每年推出一条新稳定分支,多分支并行维护 | stable/mainline 双线并行,约每数周发布补丁版本 | 长期维持 2.x 序列,小步迭代 |
| 工作层次 | 纯四层(内核态) | 四层 + 七层(用户态) | 四层 + 七层(用户态) | 高可用(VRRP)+ IPVS 托管 |
| 兼容矩阵 | Linux 内核原生,随发行版内核提供 | 跨平台:Linux、BSD 等多平台构建 | 跨平台:Linux、BSD、Windows 等多平台构建 | 仅 Linux(依赖内核 IPVS 与 VRRP) |
7.2 选型分析
- LVS 的不可替代点在内核态四层性能与连接容量上限最高,且零额外进程;代价是没有七层能力、生态工具链较薄;
- HAProxy 胜在七层精细调度(内容路由、健康检查内建、可观测性强),是业务级流量治理的首选;
- Nginx 同时覆盖 Web 服务与负载均衡,许可宽松(BSD),部署面广,但七层高级能力部分集中在商业版;
- Keepalived 与 LVS 是互补关系而非替代:它为 LVS 提供 VIP 高可用与配置托管,二者组合是自建四层高可用入口的事实标准。
选型建议一句话:追求极致四层吞吐、流量模型简单时选 LVS+Keepalived;需要七层内容路由、精细健康检查与灰度能力时选 HAProxy(或 Nginx),也可将 LVS 置于前端、HAProxy/Nginx 置于后端组成两层负载均衡架构。
八、参考链接
- LVS 项目官网:https://www.linuxvirtualserver.org/
- Linux 内核版本发布页(releases.json):https://www.kernel.org/releases.json
- ipvsadm 官方发布目录与手册:https://www.kernel.org/pub/linux/utils/kernel/ipvsadm/
- Keepalived 官网:https://www.keepalived.org/
- Keepalived 发布记录(releases.atom):https://github.com/acassen/keepalived/releases.atom
- HAProxy 官网下载页:https://www.haproxy.org/
- Nginx 官方下载页:https://nginx.org/en/download.html