news 2026/7/29 22:12:42

LVS(Linux Virtual Server)全面解析与实验手册:集群概念、工作模式与调度算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LVS(Linux Virtual Server)全面解析与实验手册:集群概念、工作模式与调度算法

摘要

本文深入解析 LVS(Linux Virtual Server)负载均衡技术,涵盖集群核心概念、三大分类、四种工作模式(NAT、DR、TUN、FULLNAT)及十三种调度算法。通过详细的实验手册,手把手指导多端口轮询(FWM)和会话粘滞(Redis+持久连接)的配置。每条命令均附带详细注释,可直接复制执行,助您从理论到实践全面掌握 LVS。

一、什么是集群(Cluster)

集群(Cluster)是一组相互独立的计算机(节点),通过高速网络互联,对外表现为一个单一系统,共同对外提供服务。其核心思想是将多台计算机组合起来,以较低的成本获得与大型主机相当的性能和可用性。

1.1 核心概念

  • Scale Up(纵向扩展):提升单台服务器的硬件配置(CPU、内存、磁盘),成本高、有上限,存在单点故障(SPOF)。
  • Scale Out(横向扩展):增加服务器数量,通过集群技术协同工作,成本低、弹性好,是高并发场景的标准做法。
  • 集群的关键在于“协同”:多台机器不是简单堆叠,而是通过调度器和统一入口对外提供透明服务。

1.2 集群核心特征

特征说明
单一系统映像用户看到的是一个整体入口(VIP),不需要关心背后有多少台服务器。
高可用性单节点故障不影响整体服务;衡量标准 A = MTBF/(MTBF+MTTR),目标 99.999%。
可扩展性通过增加节点水平扩展(Scale Out),性能线性增长。
负载均衡请求由调度器按算法智能分发到各节点,避免单点过载。
透明性客户端无需修改代码,后端 RS 对用户完全透明。

1.3 集群架构示意

客户端请求 (CIP → VIP) │ ┌──────▼──────┐ │ 负载均衡器 │ ← Director / Load Balancer │ (LVS) │ 对外暴露 VIP,对内分发请求 └──────┬──────┘ ┌───────┼───────┐ ┌──▼──┐ ┌──▼──┐ ┌──▼──┐ │RS 1 │ │RS 2 │ │RS 3 │ ← Real Server(真实服务器) │Web │ │Web │ │Web │ 处理实际业务请求 └──┬──┘ └──┬──┘ └──┬──┘ └───────┼───────┘ ┌──────▼──────┐ │ 共享存储 │ ← NFS / Ceph / GlusterFS / FastDFS └─────────────┘ 保障数据一致性

二、集群分类

集群按功能目标分为三大类,实际生产环境中通常混合使用。

2.1 负载均衡集群(LB — Load Balancing)

特性说明
目标将大量并发请求分发到多台服务器,提升系统吞吐量。
典型实现LVS(四层)、Nginx(七层)、HAProxy(四/七层)、F5(硬件)。
工作层次四层传输层(IP:Port)或七层应用层(HTTP/HTTPS)。
适用场景Web服务、API网关、DNS解析、邮件服务。
核心价值用多台廉价服务器替代昂贵的大型机,成本低且弹性好。

2.2 高可用集群(HA — High Availability)

特性说明
目标保证服务连续性,单点故障(SPOF)时自动切换到备用节点。
典型实现Keepalived(VRRP协议)、Heartbeat、Corosync + Pacemaker。
适用场景数据库主备(Master-Slave)、核心服务冗余、VIP漂移。
衡量指标可用性 A = MTBF/(MTBF+MTTR),常见目标 99.9% ~ 99.999%(5个9)。
SLAService Level Agreement(服务等级协议),定义可用性目标。
故障切换时间Keepalived 通常 1~3 秒完成 VIP 漂移。

2.3 高性能计算集群(HPC — High Performance Computing)

特性说明
目标将大规模计算任务拆分到多节点并行处理,聚合算力。
典型实现MPI(消息传递接口)、Hadoop MapReduce、Apache Spark。
适用场景科学计算、气象预测、基因分析、AI 大模型训练。
分布式存储Ceph、GlusterFS、FastDFS、MogileFS、Hadoop HDFS。
数据处理Hadoop MapReduce、Apache Spark(内存计算)。

2.4 三类集群对比

LB (负载均衡) HA (高可用) HPC (高性能) ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 分发用户请求 │ │ 主备故障切换 │ │ 并行拆分计算 │ │ 横向扩展容量 │ │ 服务永不中断 │ │ 聚合算力求解 │ │ 对外一个入口 │ │ VIP 自动漂移 │ │ 任务调度分发 │ │ LVS/Nginx │ │ Keepalived │ │ MPI/Spark │ └──────────────┘ └──────────────┘ └──────────────┘

★ 生产环境标准组合:LVS(四层LB)+ Keepalived(HA,VIP高可用)+ Nginx(七层代理)+ Redis(Session共享)。

三、LVS 的作用

LVS(Linux Virtual Server)是章文嵩博士于 1998 年开发的开源负载均衡项目,已从 Linux 2.4 内核开始集成到内核空间。官网:http://www.linuxvirtualserver.org/。

3.1 LVS 核心术语

缩写全称含义
VSVirtual Server虚拟服务器,即 LVS 调度器本身
RSReal Server真实服务器,后端处理请求的服务器
CIPClient IP客户端 IP 地址,发起请求的源地址
VIPVirtual IP虚拟 IP,VS 对外暴露的 IP,客户端访问的目标地址
DIPDirector IP调度器 IP,VS 与 RS 通信时使用的内网 IP
RIPReal Server IP真实服务器 IP,RS 自身的 IP 地址

3.2 LVS 数据流模型

数据包流转路径:

CIP (客户端IP) <──请求──> VIP (虚拟IP) ==调度== DIP (调度器内网IP) <──转发──> RIP (真实服务器IP)

通俗理解

  • 用户只知道 VIP,也只访问 VIP。
  • VIP 像公司的总机号码,DIP/RIP 像内部员工的分机号。
  • LVS 的工作就是:接到总机来电后,根据策略转给合适的分机。

3.3 LVS 核心定位

维度说明
工作空间内核空间(kernel space),基于 Netfilter 框架,处理效率极高。
工作层次四层(传输层),基于 IP:Port 调度,不解析 HTTP 等七层协议。
核心模块ip_vs 内核模块,通过 ipvsadm 用户态工具管理。
性能百万级并发连接,DR 模式下 CPU 占用近乎为零。
转发方式只做分发不做代理(DR/TUN),或做简单 NAT 转换(NAT/FULLNAT)。

3.4 LVS 在 Netfilter 框架中的位置

数据包进入后经过 Netfilter 的 5 个钩子点:

PREROUTING → INPUT → FORWARD → OUTPUT → POSTROUTING

LVS 工作在 INPUT 链上:

  • VIP 的数据包到达 PREROUTING → 路由判断是本机 → 进入 INPUT。
  • ip_vs 模块在 INPUT 链上拦截数据包,根据调度规则修改目标地址。
  • NAT 模式:修改后的包走 FORWARD → POSTROUTING 发往 RS。
  • DR 模式:修改 MAC 地址后直接通过交换机发往 RS。

四、LVS 的 4 种工作模式及原理

LVS 的四种工作模式按数据包修改的层次不同分为:lvs-nat(修改 IP 层,DNAT)、lvs-dr(修改 MAC 层)、lvs-tun(IP 隧道封装)、lvs-fullnat(双向全 NAT)。

4.1 NAT 模式(Network Address Translation)

【原理】LVS 修改数据包的目标 IP 地址(DNAT),将 VIP 转换为选中 RS 的 RIP。RS 处理完毕后,响应必须原路返回 Director,再由 Director 做 SNAT 还原源 IP 后返回客户端。

数据包流转(NAT 模式)

┌────────┐ ①请求(CIP→VIP) ┌────────────┐ ②DNAT(VIP→RIP) ┌──────────┐ │ Client │ ──────────────────► │ Director │ ──────────────────► │ Real Srv │ │ CIP:X │ │ VIP/RIP │ │ RIP │ │ │ ◄────────────────── │ 改目标IP │ ◄────────────────── │ │ └────────┘ ④响应(VIP→CIP) └────────────┘ ③响应(RIP→CIP) └──────────┘ 由Director SNAT还原 RS的默认网关必须是Director
项目说明
修改内容目标 IP 地址(入站做 DNAT)+ 源 IP 地址(出站做 SNAT)
RS 默认网关必须指向 Director 的 DIP(192.168.0.100),否则响应无法原路返回
Director 压力大——进出双向流量都要经过 Director,网卡带宽是瓶颈
支持端口映射✅ 支持(例如 VIP:80 → RS:8080,端口可以不同)
RS 规模上限10~20 台(受 Director 网卡吞吐量限制)
RS 操作系统任意 OS(Linux / Windows / …),对 RS 完全透明
跨网段不支持——RS 必须与 Director 网络可达且同在一个广播域
Director 要求必须开启 IP 转发:net.ipv4.ip_forward = 1

★ NAT 模式的工作流程(逐步详解)

  1. 客户端发送请求:CIP → VIP:Port
  2. Director 收到后做 DNAT:将目标 IP 从 VIP 改为选中 RS 的 RIP
  3. RS 收到请求,处理后生成响应:RIP → CIP
  4. 响应必须经过 Director(因 RS 默认网关指向 Director)
  5. Director 做 SNAT:将源 IP 从 RIP 还原为 VIP,返回给客户端

六、LVS NAT模式实验配置

以下为LVS NAT模式实验环境配置的详细命令,每条命令均附带注释说明,可直接在Xshell中执行。

6.1 环境说明

主机网络模式功能是否设定网关
lvsnat-172.25.254.100,hostonly-192.168.0.100vs(虚拟服务器/调度器)-
rs1hostonly-192.168.0.10rs(真实服务器1)192.168.0.100
rs2hostonly-192.168.0.20rs(真实服务器2)192.168.0.100

6.2 环境设定操作

6.2.1 基本环境配置

lvs主机网络配置:

  • eth0 - nat模式 - 172.25.254.100
  • eth1 - hostonly模式 - 192.168.0.100

rs1主机网络配置:

  • eth0 - hostonly模式 - 192.168.0.10
  • 注意:使用脚本设定IP时不设定网关,后续手动设定

rs2主机网络配置:

  • eth0 - hostonly模式 - 192.168.0.20
  • 注意:使用脚本设定IP时不设定网关,后续手动设定
6.2.2 设定RS1和RS2的网关

在RS1主机上执行以下命令:

# 修改eth0网卡的网关为192.168.0.100(指向LVS的DIP) [root@rs1 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 重新加载网络连接配置 [root@rs1 ~]# nmcli connection reload 激活eth0网络连接 [root@rs1 ~]# nmcli connection up eth0 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4) 查看路由表,确认网关设置生效 [root@rs1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0

在RS2主机上执行以下命令:

# 修改eth0网卡的网关为192.168.0.100(指向LVS的DIP) [root@rs2 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 重新加载网络连接配置 [root@rs2 ~]# nmcli connection reload 激活eth0网络连接 [root@rs2 ~]# nmcli connection up eth0 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4) 查看路由表,确认网关设置生效 [root@rs2 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
6.2.3 环境验证

配置效果验证:

  • 所有IP之间可以直接ping通
  • RS1和RS2的默认网关都指向LVS的DIP(192.168.0.100)
  • LVS可以同时访问nat网络(172.25.254.0/24)和hostonly网络(192.168.0.0/24)

网络连通性测试命令:

# 从LVS ping RS1 [root@lvs ~]# ping 192.168.0.10 从LVS ping RS2 [root@lvs ~]# ping 192.168.0.20 从RS1 ping LVS [root@rs1 ~]# ping 192.168.0.100 从RS2 ping LVS [root@rs2 ~]# ping 192.168.0.100 从RS1 ping RS2(通过LVS网关转发) [root@rs1 ~]# ping 192.168.0.20 从RS2 ping RS1(通过LVS网关转发) [root@rs2 ~]# ping 192.168.0.10

注意事项:

  1. NAT模式下,RS的默认网关必须指向Director的DIP,否则响应包无法返回
  2. 确保所有主机的防火墙已关闭或配置了相应规则
  3. LVS主机需要开启IP转发功能:sysctl -w net.ipv4.ip_forward=1
  4. 建议将IP转发配置写入/etc/sysctl.conf文件永久生效

五、LVS 调度算法

LVS 内置了 13 种调度算法,可根据业务场景灵活选择。

算法缩写说明适用场景
轮询rr按顺序轮流分配请求所有 RS 性能相近
加权轮询wrr按权重比例分配请求RS 性能差异明显
最少连接lc将请求发给当前连接数最少的 RS长连接服务(如数据库)
加权最少连接wlc考虑权重的最少连接(默认算法)通用场景,性能最佳
基于局部性的最少连接lblc考虑目标 IP 的局部性,相同目标 IP 发往同一 RS缓存服务器
带复制的基于局部性的最少连接lblcrlblc 的改进版,允许复制到负载较轻的 RS缓存服务器集群
目标地址散列dh根据目标 IP 的哈希值选择 RS反向代理缓存
源地址散列sh根据源 IP 的哈希值选择 RS会话保持(
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/29 22:10:42

5分钟掌握终极免费音乐解锁工具:浏览器本地解密完整指南

5分钟掌握终极免费音乐解锁工具&#xff1a;浏览器本地解密完整指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: htt…

作者头像 李华
网站建设 2026/7/29 22:10:40

SuperCom串口调试工具:嵌入式开发的终极解决方案

SuperCom串口调试工具&#xff1a;嵌入式开发的终极解决方案 【免费下载链接】SuperCom SuperCom 是一款串口调试工具 项目地址: https://gitcode.com/gh_mirrors/su/SuperCom 想象一下&#xff0c;你正在调试一个物联网设备&#xff0c;需要同时监控多个传感器数据、发…

作者头像 李华
网站建设 2026/7/29 22:09:47

AlohaMini进阶开发:自定义控制算法与ROS节点扩展指南

AlohaMini进阶开发&#xff1a;自定义控制算法与ROS节点扩展指南 【免费下载链接】AlohaMini Open-Source Dual-Arm Mobile Robot with Motorized Lift 项目地址: https://gitcode.com/gh_mirrors/al/AlohaMini AlohaMini是一款开源双臂移动机器人&#xff0c;具备电动升…

作者头像 李华
网站建设 2026/7/29 22:09:17

Anna KVS云原生特性详解:自动扩缩容如何降低90%云服务成本?

Anna KVS云原生特性详解&#xff1a;自动扩缩容如何降低90%云服务成本&#xff1f; 【免费下载链接】anna A low-latency, cloud-native KVS 项目地址: https://gitcode.com/gh_mirrors/an/anna Anna KVS是一款低延迟的云原生键值存储系统&#xff08;KVS&#xff09;&a…

作者头像 李华
网站建设 2026/7/29 22:08:53

Apicurio Registry与Helm集成:Kubernetes包管理的终极指南

Apicurio Registry与Helm集成&#xff1a;Kubernetes包管理的终极指南 【免费下载链接】apicurio-registry An API/Schema registry - stores APIs and Schemas. 项目地址: https://gitcode.com/GitHub_Trending/ap/apicurio-registry Apicurio Registry是一款功能强大的…

作者头像 李华