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 使用
相关推荐
百锦再4 小时前
第11章 泛型、trait与生命周期
android·网络·人工智能·python·golang·rust·go
濊繵5 小时前
Linux网络-Socket 编程 UDP
linux·网络·udp
00后程序员张9 小时前
HTTP抓包工具推荐,Fiddler配置方法、代理设置与使用教程详解(开发者必学网络调试技巧)
网络·http·ios·小程序·fiddler·uni-app·webview
24zhgjx-fuhao15 小时前
HTTP的配置
网络·网络协议·http
安卓开发者16 小时前
第14讲:HTTP网络请求 - Dio库的使用与封装
网络·网络协议·http
报错小能手16 小时前
计算机网络自顶向下方法33——网络层 路由器工作原理 输入端口处理和基于目的地转发 交换 输出端口处理
网络·计算机网络·智能路由器
scd020816 小时前
11.10dns作业
运维·服务器·网络
Yurko1317 小时前
【计网】基于三层交换机和 RIP 协议的局域网组建
网络·学习·计算机网络·智能路由器
无序的浪17 小时前
网络初识~
网络