LVS三种模式及调度算法解析

一、LVS 三种工作模式

1. NAT 模式(Network Address Translation)

工作原理

客户端请求先到达 LVS 调度器(Director),调度器修改目标 IP 为后端某台 Real Server 的 IP,并做 DNAT;Real Server 处理完请求后,把响应包发回给调度器,调度器再做 SNAT 把源 IP 改回 VIP 后返回给客户端。所有流量(请求+响应)都经过调度器

网络拓扑

  • 所有 Real Server 和 Director 在同一个二层网络(如同一个 VLAN)。
  • Real Server 默认网关指向 Director。

优点

  • 配置简单,对 RS 无特殊要求(不需要改内核参数或路由)。
  • 支持端口转换(比如 VIP:80 → RS:8080)。

缺点

  • 调度器成为性能瓶颈(双向流量都要过它)。
  • 扩展性差,一般只适用于后端 RS 数量 ≤ 10 的小规模场景。

适用场景

测试环境、小流量业务、需要端口映射的场景(比如旧系统改造)。


2. DR 模式(Direct Routing)

工作原理

客户端请求到达 Director,Director 通过修改 MAC 地址(不改 IP),将帧直接转发给选定的 Real Server。RS 必须配置 VIP(通常绑在 lo 接口上),并抑制 ARP 响应。响应流量直接从 RS 返回客户端,不经过 Director

网络拓扑

  • Director 和所有 RS 必须在同一个广播域(二层可达)。
  • VIP 在 Director 和所有 RS 上都要配置(RS 上一般配在 lo:0)。
  • RS 的默认网关是正常出口网关,不是 Director。

优点

  • 性能极高,Director 只处理入向流量,出向直通。
  • 扩展性好,可支撑成百上千台 RS。

缺点

  • 要求严格二层同网段,跨机房部署困难。
  • 不支持端口转换(VIP 端口必须和 RS 端口一致)。
  • 需要在 RS 上做 ARP 抑制(arp_ignore=1, arp_announce=2)。

适用场景

这是我们在生产中最常用的模式,尤其适合高并发、低延迟的 Web 服务、API 网关等。


3. TUN 模式(IP Tunneling)

工作原理

Director 将客户端请求封装在新的 IP 包中(IP-in-IP),发送给远端的 Real Server。RS 解封装后处理请求,响应直接返回客户端。响应也不经过 Director

网络拓扑

  • Director 和 RS 可以不在同一机房,只要三层互通即可。
  • RS 必须支持 IP 隧道(加载 ipip 模块),并配置 VIP。

优点

  • 支持跨机房部署,适合异地多活架构。
  • Director 只处理入向流量,性能较好。

缺点

  • 配置复杂,需维护隧道。
  • 包头增加 20 字节,MTU 需要调整避免分片。
  • 对 RS 内核有要求(需支持 IPIP)。

适用场景

我们用在跨 AZ 或同城双活的场景,比如灾备流量调度。但因为运维成本高,如果不是必须跨三层,一般优先选 DR。


二、LVS 调度算法

LVS 内核模块 IPVS 支持多种调度策略,核心就两类:静态(轮询类)和动态(连接数类)。

算法 特点 适用场景
rr(Round Robin) 轮询,依次分配 后端服务器性能一致,且请求处理时间相近
wrr(Weighted RR) 加权轮询,按权重分配 后端服务器性能不均(比如新旧混部)
lc(Least Connections) 谁当前连接数少就分给谁 请求处理时间差异大(如文件上传/下载混合)
wlc(Weighted LC) 加权最少连接,兼顾性能和负载 生产最常用,适应性强,推荐默认使用
lblc / lblcr 基于本地最少连接(带缓存亲和) 适用于 HTTP 缓存集群,但我们基本不用
sh(Source Hashing) 源 IP 哈希,实现会话保持 需要客户端始终打到同一 RS(但更推荐用应用层 sticky session)

补充:我们线上几乎全部用 wlc,因为它能自动适应不同规格机器 + 动态负载,比 rr 更智能,比 lc 考虑了机器能力差异。


三、ipvsadm 的作用和常用命令

作用
ipvsadm 是用户态工具,用于管理内核中的 IPVS 表(类似 iptables 管理 netfilter)。所有 LVS 规则最终都通过它写入内核。

常用命令

复制代码
# 查看当前 VS 和 RS 列表
ipvsadm -ln

# 添加一个虚拟服务(DR 模式,wlc)
ipvsadm -A -t 10.0.0.100:80 -s wlc

# 添加后端真实服务器
ipvsadm -a -t 10.0.0.100:80 -r 10.0.1.10:80 -g  # -g 表示 DR 模式
ipvsadm -a -t 10.0.0.100:80 -r 10.0.1.11:80 -g

# 删除虚拟服务(会连带删除所有 RS)
ipvsadm -D -t 10.0.0.100:80

# 清空所有规则
ipvsadm -C

# 保存规则(重启后失效,需配合脚本持久化)
ipvsadm-save > /etc/sysconfig/ipvsadm

关键选项说明

  • -A:Add virtual service
  • -a:Add real server
  • -t:TCP 服务(-u 是 UDP)
  • -s:调度算法
  • -r:real server 地址
  • -g:DR 模式(-m 是 NAT,-i 是 TUN)

注意:ipvsadm 本身不持久化规则,重启后丢失。我们在线上都是通过 Ansible + systemd 服务启动时自动加载规则,或者用 keepalived 自动管理(更常见)。


总结一下:

  • 小规模、要端口映射 → NAT
  • 同机房、高性能 → DR(首选)
  • 跨机房 → TUN
  • 调度算法首选 wlc
  • ipvsadm 是操作 IPVS 的唯一标准工具,但生产一般配合 keepalived 使用
相关推荐
zfj32141 分钟前
“昨晚快手被黑直播平台出现大量违规内容“技术解析
网络·网络安全·系统防护
TG:@yunlaoda360 云老大1 小时前
华为云国际站代理商的ESW主要有什么作用呢?
网络·数据库·华为云
向宇it1 小时前
【unity游戏开发——网络】使用Unity+PurrNet+Heathens+Steam,在 Unity 中通过 Steam与你的朋友建立联系
网络·游戏·unity·c#·游戏引擎·steam
鬼臾区1 小时前
Chapter 9 USB Device Framework 摘要1
网络
ikkkkkkkl1 小时前
计算机网络:传输层
网络·计算机网络·udp·tcp·传输层
G_H_S_3_2 小时前
【网络运维】容器、容器架构与docker部署
运维·网络·docker·架构
fantasy_arch2 小时前
SVT-AV1帧类型决策-场景切换检测
前端·网络·av1
开开心心_Every2 小时前
无广告干扰:简单好用文字LOGO设计工具
xml·java·网络·数据库·华为od·华为云·excel
不染尘.2 小时前
传输层协议头分析
服务器·网络·tcp/ip·计算机网络·udp·tcp
松涛和鸣2 小时前
37、UDP网络编程入门
linux·服务器·前端·网络·udp·php