【无标题】

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 完整工作步骤

  1. 用户发送请求,目标IP为LVS的VIP

  2. LVS根据算法选中一台后端RS

  3. LVS修改数据包:目标IP VIP → RIP,转发给RS

  4. RS处理请求,返回响应包,源IP为RIP,目标IP为用户IP

  5. 响应包经过LVS,LVS修改源IP RIP → VIP

  6. 最终用户收到来自VIP的响应,无感知后端节点

4.1.4 优缺点

✅ 优点:配置简单、支持跨网段、支持任意操作系统

❌ 缺点:所有流量经过LVS,LVS容易成为性能瓶颈,适合中小流量

4.2 LVS-DR 模式(直接路由模式,企业最常用)

4.2.1 核心原理

只改MAC地址,不改IP地址。入站流量经过LVS,出站流量直接由RS返回给用户,不经过LVS,性能最高。

4.2.2 流量走向图解

4.2.3 完整工作步骤

  1. 用户请求访问VIP,数据包到达局域网交换机

  2. LVS接收数据包,根据算法选中RS

  3. 仅修改数据包MAC地址:将LVS的MAC改为对应RS的MAC,IP保持VIP不变

  4. RS接收数据包(RS网卡绑定VIP,可识别请求)

  5. RS处理请求,直接封装响应包,以VIP为源IP返回给用户

  6. 全程响应流量不经过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
相关推荐
扶疏5251 天前
keepalived及lvs
网络·lvs
SakitamaX3 天前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
Kina_C3 天前
LVS-NAT 负载均衡实验从环境搭建到规则持久化
linux·运维·服务器·负载均衡·lvs
Dear~yxy3 天前
LVS的12种调度算法
lvs
Kina_C3 天前
LVS-DR 模式负载均衡实战从原理到部署与验证
linux·运维·服务器·负载均衡·lvs
FoldWinCard4 天前
云原生 --- lvs
运维·服务器·lvs
qetfw10 天前
CentOS 7 搭建 LVS + Keepalived 高可用负载均衡
linux·centos·负载均衡·lvs
2401_834636992 个月前
Keepalived + LVS (DR) + Nginx + NFS 高可用 Web 集群部署实战手册
前端·nginx·lvs
念何架构之路2 个月前
接入层LVS
lvs