LVS 核心知识点解释
一、什么是集群(Cluster)
1.1 通俗定义
集群就是把多台功能相同的服务器组合在一起,当成一台超级服务器对外提供服务。
1.2 集群核心三大优势
-
高可用性(HA):一台服务器挂了,业务不中断
-
负载均衡(LB):流量均匀分给多台服务器,避免单台过载
-
高性能:多台服务器并发处理,提升整体吞吐量
1.3 集群基础架构图解

二、集群的三大分类
行业内集群统一分为三类,LVS 属于负载均衡集群,是企业最常用的集群类型。
2.1 负载均衡集群(LB集群)------LVS所属类型
核心作用:分发用户流量,将海量请求均匀分配给后端多台服务器。
特点:所有节点同时工作,提升并发处理能力,无闲置机器。
代表软件:LVS、Nginx、HAProxy
2.2 高可用集群(HA集群)
核心作用:解决单点故障,保证业务永不宕机。
特点:主节点工作,备节点闲置待命,主节点故障,备节点立刻接管。
代表软件:Keepalived、Heartbeat
2.3 高性能计算集群(HPC集群)
核心作用:拆分复杂计算任务,多台服务器协同运算。
场景:大数据运算、科学计算、人工智能建模,互联网业务极少使用。
三、LVS 是什么?核心作用详解
3.1 LVS 简介
LVS(Linux Virtual Server,Linux虚拟服务器)是基于Linux内核的四层负载均衡软件,由章文嵩博士开发,开源免费、性能极强。
区别于Nginx(七层负载均衡):LVS工作在内核态,不处理数据包内容,只转发数据包,吞吐量、并发量远超Nginx,支撑百万级并发无压力。
3.2 LVS 核心作用
-
流量分发:将用户海量请求,按照算法均匀分给后端多台真实服务器(RS)
-
屏蔽后端节点:用户只访问LVS虚拟IP(VIP),无需感知后端真实服务器
-
故障自动剔除:后端服务器故障,LVS自动停止分发流量,不影响业务
-
无缝扩容:业务压力大时,直接新增后端服务器,无需改动前端架构
3.3 LVS 核心组件名词解释
-
VS(Virtual Server):虚拟服务器,即LVS负载均衡器(调度器)
-
RS(Real Server):后端真实业务服务器
-
VIP:虚拟IP,用户访问的统一入口IP
-
RIP:后端真实服务器的内网IP
-
DIP:LVS调度器的内网IP,用于和RS通信
四、LVS 四种工作模式(原理+图解+步骤)
LVS 四种模式核心区别:数据包转发方式、回包路径、是否修改IP报文,难度从低到高:NAT < DR < TUN < FULLNAT
4.1 LVS-NAT 模式(网络地址转换模式)
4.1.1 核心原理
用户请求到达LVS,LVS修改数据包目标IP ,将VIP改为后端RS的RIP;RS回包时,LVS修改源IP ,将RIP改为VIP。所有流量都经过LVS。
4.1.2 流量走向图解

4.1.3 完整工作步骤
-
用户发送请求,目标IP为LVS的VIP
-
LVS根据算法选中一台后端RS
-
LVS修改数据包:目标IP VIP → RIP,转发给RS
-
RS处理请求,返回响应包,源IP为RIP,目标IP为用户IP
-
响应包经过LVS,LVS修改源IP RIP → VIP
-
最终用户收到来自VIP的响应,无感知后端节点
4.1.4 优缺点
✅ 优点:配置简单、支持跨网段、支持任意操作系统
❌ 缺点:所有流量经过LVS,LVS容易成为性能瓶颈,适合中小流量
4.2 LVS-DR 模式(直接路由模式,企业最常用)
4.2.1 核心原理
只改MAC地址,不改IP地址。入站流量经过LVS,出站流量直接由RS返回给用户,不经过LVS,性能最高。
4.2.2 流量走向图解

4.2.3 完整工作步骤
-
用户请求访问VIP,数据包到达局域网交换机
-
LVS接收数据包,根据算法选中RS
-
仅修改数据包MAC地址:将LVS的MAC改为对应RS的MAC,IP保持VIP不变
-
RS接收数据包(RS网卡绑定VIP,可识别请求)
-
RS处理请求,直接封装响应包,以VIP为源IP返回给用户
-
全程响应流量不经过LVS,极大减轻调度器压力
4.2.4 优缺点
✅ 优点:性能最强、并发最高、LVS无流量瓶颈
❌ 缺点:所有服务器必须同网段、RS需绑定VIP、仅支持Linux系统
4.3 LVS-TUN 模式(隧道模式)
4.3.1 核心原理
LVS不修改原数据包,而是在原数据包外层再封装一层IP隧道,转发给跨网段的RS,RS解包处理后,直接回包给用户。
4.3.2 流量走向图解

4.3.3 适用场景
解决DR模式必须同网段的限制,支持后端服务器跨机房、跨网段部署。
4.3.4 优缺点
✅ 优点:支持跨网段、跨机房部署,高性能
❌ 缺点:需要开启IP隧道功能、配置复杂、部分系统不支持
4.4 LVS-FULLNAT 模式(双向NAT模式)
4.4.1 核心原理
同时修改源IP+目标IP。用户请求进来:源IP用户IP→LVS的DIP,目标IP VIP→RIP;回包时反向修改,彻底隔离内外网。
4.4.2 核心价值
支持LVS和RS完全不同网段,无需RS绑定VIP,适配复杂网络架构,是公有云LVS主流模式。
4.4.3 优缺点
✅ 优点:网络适配性极强、无网段限制、安全性高
❌ 缺点:内核开销大,性能略低于DR模式
五、LVS 13种调度算法(通俗分类+详解)
LVS算法分为两大类:静态算法(固定规则,不看服务器状态) 、动态算法(根据服务器负载动态调整)
5.1 静态算法(4种)
不感知后端服务器负载、连接数、性能,严格按照预设规则分发。
1. RR 轮询
最基础算法,请求依次轮流分给每台RS,一人一个,绝对平均。
适用:所有服务器性能一致、业务请求压力均匀的场景。
2. WRR 加权轮询
给性能好的服务器设置更高权重,权重越高,分到的请求越多。
适用:后端服务器配置性能不一致的场景(主流常用)。
3. DH 目标地址哈希
根据用户访问的目标IP哈希计算,固定分配到某一台RS。
作用:固定用户访问节点,简单实现会话保持。
4. SH 源地址哈希
根据用户客户端IP哈希计算,同一个用户IP永远访问同一台RS。
5.2 动态算法(9种,企业核心常用)
实时感知后端服务器当前连接数、负载、响应速度,智能分发请求。
1. LC 最少连接
永远把新请求分给当前连接数最少的服务器,动态平衡负载。
2. WLC 加权最少连接(默认算法)
综合权重+连接数,性能好的服务器承载更多连接,是LVS默认调度算法,适配绝大多数场景。
3. LBLCR 基于局部性的最少连接
优先将用户请求分给上次访问过的RS,若无则分配最少连接节点,兼顾会话+负载。
4. LBLC 带复制的局部性最少连接
适合缓存集群,热点数据节点优先分配,支持节点复制。
5. SED 最短预期延迟
在WLC基础上优化,优先分给响应延迟最低的服务器,体验更好。
6. NQ 永不排队
空闲服务器优先分配请求,无空闲再按最少连接分配,避免闲置浪费。
7. DRR 目标轮询
针对目标端口轮询,适配多端口业务。
8. SRR 源轮询
根据源IP进行轮询分发。
9. FO 快速重叠
极致优化延迟,适合高并发低延迟场景。
六、LVS 多端口轮询问题及完整解决方案
6.1 问题现象
当后端服务器开启多个端口(如80、443、8080) ,LVS默认会将多个端口的请求分别轮询,导致:同一个用户的不同端口请求被分到不同RS,业务异常、登录失效、数据错乱。
6.2 问题根本原因
LVS默认以「端口」为独立调度单元,不同端口的调度队列相互独立,无关联。
6.3 解决方案
利用防火墙标记解决轮询错误
前端防火墙统一接管所有端口,转发至LVS,LVS只调度单一端口,从架构层面规避多端口轮询问题。
1.在rs主机中同时开始http和https两种协议
bash
#在RS1和RS2中开启https
[root@RS1+RS2 ~]# dnf install mod_ssl -y
[root@RS1+RS2 ~]# systemctl restart httpd
[root@RS1+RS2 ~]# systemctl restart httpd
2.在vsnode中添加https的轮询策略
bash
root@vsnode boot]# ip^Cadm -A -t 192.168.0.200:80 -s rr
[root@vsnode boot]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g
[root@vsnode boot]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
[root@vsnode boot]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@vsnode boot]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
[root@vsnode boot]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
[root@vsnode boot]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.200:80 rr
-> 192.168.0.10:80 Route 1 0 0
-> 192.168.0.20:80 Route 1 0 0
TCP 192.168.0.200:443 rr
-> 192.168.0.10:443 Route 1 0 0
-> 192.168.0.20:443
3.轮询错误展示
bash
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
RS2 - 192.168.0.20
RS2 - 192.168.0.20
#当上述设定完成后http和https是独立的service,轮询会出现重复问题
解决方案:使用火墙标记访问vip的80和443的所有数据包,设定标记为6666,然后对此标记进行负载
bash
[root@vsnode boot]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666
[root@vsnode boot]# ipvsadm -A -f 6666 -s rr
[root@vsnode boot]# ipvsadm -a -f 6666 -r 192.168.0.10 -g
[root@vsnode boot]# ipvsadm -a -f 6666 -r 192.168.0.20 -g
#测试:在客户端
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
RS2 - 192.168.0.20
RS1 - 192.168.0.10
bash
#删除ipvsadm策略
[root@vsnode ~l#ipvsadm -LnIp Virtual Server version 1.2.1(size=4096)Prot LocalAddress:Port Scheduler Flags
RemoteAddress:Port->
Forward Weight ActiveConn InActConn
TCP192.168.0.200:80 rr
192.168.0.10:80
192.168.0.20:80->
TCP192.168.0.200:443「r
Route
Route
192.168.0.10:443
Route
192.168.0.20:443->
Route
FWM6666 rr persistent 1
[root@vsnode-~]# ipvsadm -D -f 6666
[root@vsnode ~]#
七、LVS 会话粘滞(会话保持)问题及完整解决方案
7.1 什么是会话粘滞问题
LVS默认轮询调度,用户第一次请求访问RS1,第二次请求可能被分到RS2。
如果业务存在本地会话、缓存、登录状态,就会出现:登录成功后刷新页面退出、表单提交失败、状态异常。
7.2 解决方案
LVS持久化会话(IP持久化,最简单)
原理:设置持久化时间,同一客户端IP在指定时间内,永远访问同一台RS。
适用场景:中小型业务、临时会话保持
缺点:出口公网IP统一的局域网用户,会被固定到同一节点,负载不均
1.设定ipvs调度策略
bsh
[root@vsnode ~]# ipvsadm -A -f 6666 -s rr -p 1
[root@vsnode ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 6666 rr persistent 1
-> 192.168.0.10:0 Route 1 0 0
-> 192.168.0.20:0
2,测试:
bash
[root@client ~]# curl 192.168.0.200
RS1 - 192.168.0.10
[root@client ~]# curl 192.168.0.200
RS1 - 192.168.0.10
3.观察
bash
[root@vsnode ~]# watch -n 1 ipvsadm -Lnc
IPVS connection entries
pro expire state source virtual destination
TCP 01:56 FIN_WAIT 172.25.254.99:42420 192.168.0.200:80 192.168.0.20:80
IP 00:57 ASSURED 172.25.254.99:0 0.0.26.10:0 192.168.0.20:0
TCP 01:54 FIN_WAIT 172.25.254.99:46216 192.168.0.200:80 192.168.0.20:80
TCP 01:55 FIN_WAIT 172.25.254.99:46222 192.168.0.200:80 192.168.0.20:80