lvs项目中的所有知识点总结
目录
一,什么是集群(Cluster)
二、集群分类
三、LVS 的作用
四,LVS 四种工作模式及原理
1. NAT 模式(VS-NAT)
2. DR 模式(Direct Routing,直接路由,生产最常用)
4. FULLNAT 模式(完整 NAT,阿里扩展模式)
五、LVS 的 13 种调度算法
六、LVS 多端口轮询问题 & 解决方案
1,问题现象
2,解决方案
七、会话粘滞(Session Stickiness)解决方案
1,问题描述
2,解决方案:
方案 1:持久连接(Persistent)
方案 2:源地址散列算法(SH)
方案 3:在应用层维持会话(如 cookie)
方案 4:结合 Keepalived 的持久性
3,完整实践步骤(以 DR 模式部署 HTTP 负载均衡为例)
4,拓扑图解(DR 模式)
八、总结
一,什么是集群(Cluster)
集群是指将多台独立的计算机(节点)通过网络连接,协同完成特定任务,对外表现为一个统一的服务实体。其核心目标是:
高可用性(HA):单点故障不影响整体服务。
高性能(Performance):聚合多机算力,提升吞吐量。
可伸缩性(Scalability):按需动态增减节点。
二、集群分类
| 类别 | 英文 | 目的 | 典型应用 |
|---|---|---|---|
| 负载均衡集群 | LB(Load Balancing) | 将请求均匀分散到多台后端服务器,提高并发能力 | LVS、Nginx、HAProxy |
| 高可用性集群 | HA(High Availability) | 保证服务不间断,故障时自动切换 | Keepalived、Heartbeat |
| 高性能计算集群 | HPC(High Performance Computing) | 并行处理大规模计算任务 | MPI、Slurm |
| 存储集群 | Storage Cluster | 提供共享存储或分布式文件系统 | Ceph、GlusterFS |
LVS 属于负载均衡集群,常与 HA 结合(如 Keepalived)实现高可用负载均衡。
三、LVS 的作用
LVS(Linux Virtual Server)是 Linux 内核内置的四层(传输层)负载均衡器。它实现:
请求分发:根据调度算法将客户端请求转发给后端真实服务器(Real Server,RS)。
服务屏蔽:后端 RS 对客户端透明,客户端只与 LVS 的虚拟 IP(VIP)通信。
可扩展性:支持海量并发连接(工作于内核态,性能极高)。
健康检查:通常配合 keepalived 自动剔除故障 RS。
四,LVS 四种工作模式及原理
1. NAT 模式(VS-NAT)
原理:调度器收到请求,修改数据包目标 IP / 端口为 RS 的 RIP + 端口;RS 响应数据包原路返回调度器,调度器修改源 IP 后发回客户端。
- 数据流:客户端 → DS(DNAT)→ RS → DS(SNAT)→ 客户端
- 特点:支持端口映射;请求、响应全部经过调度器;RS 网关必须指向 DIP;性能最差。简易配置步骤
# 1.开启内核转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 2.创建虚拟服务 ipvsadm -A -t 192.168.1.100:80 -s rr # 3.添加后端RS(NAT模式 -m) ipvsadm -a -t 192.168.1.100:80 -r 10.0.0.10:80 -m ipvsadm -a -t 192.168.1.100:80 -r 10.0.0.11:80 -m2. DR 模式(Direct Routing,直接路由,生产最常用)
原理:调度器仅修改二层 MAC 地址,目标 MAC 改为 RS 网卡 MAC;IP 头不变。RS 收到数据包处理后,直接返回客户端,响应报文不再经过调度器。
- 数据流:客户端 → DS (改 MAC) → RS → 客户端
- 要求:DS 与 RS 在同一广播域;RS 本地 lo 网卡绑定 VIP(32 位掩码),抑制 ARP 响应;性能最优。简易配置步骤
# DS配置 ipvsadm -A -t 192.168.1.100:80 -s wrr ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.20:80 -g # RS配置(lo绑定VIP,抑制arp) ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce3. TUN 模式(VS-TUN,IP 隧道模式)
原理:调度器不修改原始数据包,在外层新增一层 IP 隧道头部,封装数据包转发给 RS;RS 解封装处理,直接响应客户端。
数据流:客户端 → DS (IP 封装) → RS (解包) → 客户端 特点:DS 和 RS 可以跨网段;RS 需要支持 IPIP 隧道协议;多用于跨机房场景。
4. FULLNAT 模式(完整 NAT,阿里扩展模式)
原理:同时修改源 IP、目标 IP。客户端 CIP→DIP,VIP→RIP;响应报文 RS→DIP,DIP→CIP。
| 模式 | 修改内容 | 响应路径 | 跨网段 | 性能 |
|---|---|---|---|---|
| NAT | 目标 IP + 端口 | 经过 DS | 支持 | 低 |
| DR | 目标 MAC | 直达客户端 | 不支持 | 极高 |
| TUN | IP 封装包头 | 直达客户端 | 支持 | 高 |
| FullNAT | 源 IP + 目标 IP | 经过 DS | 支持 | 中 |
- 请求、响应均经过调度器;支持跨网段部署;区别于标准 NAT,源地址也会转换;需要内核补丁 / 新版 ipvs 支持。
五、LVS 的 13 种调度算法
(实际内核支持 10 种,此处按常见分类详列)
内核中 IPVS 支持10 种,但许多资料扩展列举至 13 种(含历史版本或组合变体)。下面一并列出,并注明内核标准支持。
| 序号 | 算法名称 | 缩写 | 说明 | 内核支持 |
|---|---|---|---|---|
| 1 | 轮询 | RR | 依次轮流分配,不考虑权重 | ✅ |
| 2 | 加权轮询 | WRR | 按权重比例轮询 | ✅ |
| 3 | 最少连接 | LC | 分配给当前连接数最少的 RS | ✅ |
| 4 | 加权最少连接 | WLC | 按权重和连接数综合计算(默认算法) | ✅ |
| 5 | 基于局部性的最少连接 | LBLC | 针对目标 IP 的负载均衡,适用于缓存集群 | ✅ |
| 6 | 带复制的基于局部性最少连接 | LBLCR | LBLC 的改进,复制热门请求到多个节点 | ✅ |
| 7 | 目标地址散列 | DH | 根据目标 IP 的哈希值选择 RS,用于正向代理 | ✅ |
| 8 | 源地址散列 | SH | 根据源 IP 的哈希值选择 RS,用于会话粘滞(非持久) | ✅ |
| 9 | 最短预期延迟 | SED | 考虑权重和当前连接,选出期望延迟最小的节点(算法:连接数/权重) | ✅ |
| 10 | 永不排队 | NQ | 改进的 SED,若有空闲节点则直接分配,否则按 SED 选择 | ✅ |
| 11 | 随机 | RANDOM | 随机选择(部分早期版本支持,现已被更优算法替代) | ❌ |
| 12 | 加权随机 | WRANDOM | 带权重的随机选择(同上) | ❌ |
| 13 | 最小连接调度(增强型) | - | 某些资料将 LC 和 WLC 的变体单独列出,实际与 LC/WLC 重复 | ❌ |
说明:当前 Linux 内核(4.x+)仅支持前 10 种。若作业要求“13种”,可按上述列表划分,并注明其中 3 种为历史或变体,核心仍是 10 种标准算法。
六、LVS 多端口轮询问题 & 解决方案
1,问题现象
默认情况下,LVS 把VIP:80、VIP:443当成两个独立虚拟服务,各自独立调度。 用户访问http(80)调度到 RS1,跳转https(443)被调度到 RS2,会话丢失。
2,解决方案
防火墙标记 fwmark(推荐方案)
原理:利用 iptables 将 VIP 多个端口数据包打上相同 mark 标记,ipvs 基于标记统一调度,不再区分端口。
# 1. iptables给80、443流量统一打上标记666 iptables -t mangle -A PREROUTING -d 192.168.1.100 -p tcp --dport 80 -j MARK --set-mark 666 iptables -t mangle -A PREROUTING -d 192.168.1.100 -p tcp --dport 443 -j MARK --set-mark 666 # 2. ipvs基于标记创建虚拟服务(不再指定端口) ipvsadm -A -f 666 -s wrr ipvsadm -a -f 666 -r 192.168.1.20 -g ipvsadm -a -f 666 -r 192.168.1.21 -g✅ 效果:同一客户端访问 80/443,统一纳入同一调度规则,保证分配到同一 RS。
七、会话粘滞(Session Stickiness)解决方案
1,问题描述
无状态调度算法(如 RR)会将同一用户的不同请求分到不同 RS,若 RS 维护了用户会话(Session)数据,则会导致会话丢失。
2,解决方案:
方案 1:持久连接(Persistent)
与多端口方案相同,使用-p选项,同一源 IP 的所有请求在超时内固定到同一 RS。
ipvsadm -A -t 192.168.1.100:80 -p 3600 -s rr
方案 2:源地址散列算法(SH)
根据源 IP 的哈希值直接选择固定 RS,无需超时,但算法固定,无法按权重调整。
ipvsadm -A -t 192.168.1.100:80 -s sh
方案 3:在应用层维持会话(如 cookie)
后端 RS 通过 cookie 或 URL 重写传递会话标识,但 LVS 不干预,需 RS 共享会话存储(如 Redis)或保持节点间同步。
方案 4:结合 Keepalived 的持久性
Keepalived 配置中可设置persistence_timeout,与ipvsadm -p等效。
推荐:
短时粘滞(如购物车)使用持久连接,超时设 3600 秒。
若需长期固定,则使用 SH 算法,但注意权重配置受限。
3,完整实践步骤(以 DR 模式部署 HTTP 负载均衡为例)
# 环境规划 # LVS: 192.168.1.100 (VIP: 192.168.1.200) # RS1: 192.168.1.10 (绑定VIP: lo:0) # RS2: 192.168.1.11 (绑定VIP: lo:0) # ---------- 步骤1: 在 LVS 上配置 VIP ---------- ifconfig eth0:0 192.168.1.200 netmask 255.255.255.255 up route add -host 192.168.1.200 dev eth0:0 # ---------- 步骤2: 在 LVS 上开启转发 ---------- echo 1 > /proc/sys/net/ipv4/ip_forward # ---------- 步骤3: 在 RS 上绑定 VIP 并抑制 ARP ---------- # 编辑 /etc/sysctl.conf 添加: net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 # 应用: sysctl -p # 绑定 VIP 到 lo:0 ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 up # ---------- 步骤4: 在 LVS 上添加虚拟服务和 RS ---------- # 使用 WLC 算法(默认),并启用持久连接(粘滞) ipvsadm -A -t 192.168.1.200:80 -p 600 -s wlc ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.10:80 -g -w 1 ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.11:80 -g -w 2 # 查看状态 ipvsadm -Ln # ---------- 步骤5: 测试 ---------- # 客户端访问 http://192.168.1.200 ,多次刷新,观察会话保持和负载分布4,拓扑图解(DR 模式)
+-----------------+
| 客户端 |
| (CIP) |
+--------+--------+
|
| 请求: VIP=192.168.1.200
|
+--------v--------+ +--------------------+
| LVS (Director) | | VIP: 192.168.1.200|
| eth0: 192.168.1.100 | | 仅响应ARP请求 |
| eth0:0 VIP | +--------------------+
+--------+--------+ / \
| (MAC改写, 发送至RS) / \
| +------v-----+ +------v-----+
+------------->| RS1 | | RS2 |
| 192.168.1.10| |192.168.1.11 |
| lo:0 VIP | | lo:0 VIP |
+------------+ +------------+
| |
+----直接响应--------+
|
+-----v-----+
| 客户端 |
+-----------+
八、总结
| 知识点 | 核心要点 |
|---|---|
| 集群 | 多节点协同,对外单一映像 |
| 分类 | LB、HA、HPC、存储 |
| LVS作用 | 四层负载均衡,高性能、透明 |
| 四种模式 | NAT(改IP)、DR(改MAC)、TUN(隧道)、FULLNAT(双向NAT) |
| 调度算法 | 内核支持10种,主要用 WLC、RR、SH 等 |
| 多端口问题 | 持久连接 + 协议辅助模块(如 ip_vs_ftp) |
| 会话粘滞 | 持久连接 或 SH 算法,或结合共享存储 |