IPVS 知识点总结
一、IPVS 概述
IPVS(IP Virtual Server) 是运行在 Linux 内核中的四层负载均衡技术,是 LVS(Linux Virtual Server)的核心组件。
- 发展历程:早在 Linux 2.2 内核时以补丁形式出现,从 2.4.24 版本起正式并入 Linux 官方标准内核
- 工作层级:四层(传输层),根据 IP 加端口号分发请求
- 核心功能:负载均衡器根据指定调度算法和服务器负载,将客户端请求转发给后端真实服务器(RS)
- 高可用支持:主备 IPVS 通过 UDP 组播同步连接状态,故障转移时备份节点可继承大多数连接状态
二、三种工作模式
1. NAT 模式(Network Address Translation)
核心原理:通过网络地址转换实现请求转发,请求和响应都经过调度器。
工作流程:
- 客户端向 VIP(虚拟IP)发送请求
- LVS 调度器收到请求后,根据调度算法选择一台 RS
- DNAT:将请求报文的目标地址 VIP 改写为 RS 的 RIP,目标端口也可改写
- 请求转发给后端 RS 处理
- RS 处理完后将响应发回调度器
- SNAT:调度器将响应报文的源地址 RIP 改回 VIP
- 响应返回给客户端,客户端认为响应来自 VIP
模式总结:
- 请求通过 DNAT 改写目标地址,响应通过 SNAT 改写源地址
- 调度器需要同时配置公网 WAN IP 和内网 LAN IP
- RS 的默认网关必须指向调度器的内网 IP(LDIP)
- 支持 IP 加端口转换(如 80 到 8080),DR/TUN 不支持
- RS 只需配置私有 IP 即可
- 需要开启内核转发
net.ipv4.ip_forward=1
优缺点:
| 优点 | 缺点 |
|---|---|
| 配置简单,易于理解 | 调度器是瓶颈,请求响应都经过 LB |
| 支持端口映射 | 节点数量有限,一般 10 到 20 台 |
| RS 只需内网 IP | 性能较低 |
2. DR 模式(Direct Routing 直接路由)
LVS 默认模式,应用最广泛。
核心原理:通过改写请求报文的目标 MAC 地址实现转发,响应直接由 RS 返回客户端,不经过调度器。
工作流程:
- 客户端向 VIP 发送请求
- LVS 调度器收到请求后,选择一台 RS
- 改写目标 MAC:将请求的目标 MAC 改为 RS 的 MAC 地址,源 IP / 目标 IP / 端口均保持不变(CIP 到 VIP)
- 请求通过二层转发给 RS
- RS 发现目标 IP 是自己 lo 接口上绑定的 VIP,处理请求
- RS 直接将响应返回给客户端(源 IP 为 VIP)
模式总结:
- 仅修改目的 MAC 地址,源 IP 仍是 CIP,目的 IP 仍是 VIP
- 请求经过调度器,响应不经过,并发量大时效率很高
- 所有 RS 和调度器必须在同一个局域网(LAN) 内
- RS 需要在 lo 接口绑定 VIP,并解决 ARP 抑制 问题
- RS 的默认网关不需要指向调度器 DIP,直接指向上级路由器
- 调度器无法改变目标端口(不支持端口映射)
ARP 抑制配置:
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
优缺点:
| 优点 | 缺点 |
|---|---|
| 性能最高,吞吐量好 | 不能跨 LAN(同一二层网络) |
| 响应直接返回,无调度器瓶颈 | 需要配置 ARP 抑制 |
| 无隧道开销 | 不支持端口映射 |
3. TUN 模式(IP Tunneling IP 隧道)
核心原理:将请求报文封装一层新的 IP 首部,通过 IP 隧道转发给 RS,RS 解封后处理并直接返回响应。
工作流程:
- 客户端向 VIP 发送请求(源 CIP,目标 VIP)
- 调度器收到请求后,选择一台 RS
- IP 封装:在原 IP 报文外再封装一层 IP 首部。外层是源 DIP 和目标 RIP,内层是源 CIP 和目标 VIP(保持不变)
- 通过隧道将报文发给 RS
- RS 收到后拆除外层 IP,发现内层目标是自己 lo 上的 VIP
- RS 处理请求,直接将响应返回给客户端(源 VIP,目标 CIP)
模式总结:
- 请求报文不修改原地址,而是在外层再封装一层 IP(IP-in-IP)
- 响应直接由 RS 返回客户端,调度器只处理入站请求
- 集群系统吞吐量可提高 10 倍以上,但隧道有一定系统开销
- 支持跨 LAN / WAN,RS 可以在不同地理位置
- 所有 RS 需要绑定 VIP,需抑制 ARP
- 不支持端口转换
- RS 需要支持 IP 隧道协议(ipip / ipsec)
优缺点:
| 优点 | 缺点 |
|---|---|
| 可跨 LAN/WAN,扩展性好 | 配置复杂,需 IP 隧道支持 |
| 响应不经过调度器,性能好 | 隧道封装有系统开销 |
| 支持跨地域部署 | LAN 环境下效率不如 DR 模式 |
三、三种模式对比
NAT 模式的核心是改 IP 地址。客户端访问 VIP,调度器把请求的目标 IP 改成后端 RS 的 IP,这是 DNAT。RS 处理完把响应发回调度器,调度器再把响应的源 IP 从 RS 改回 VIP,这是 SNAT。所以请求和响应两头都过调度器,调度器是明显瓶颈,支持的节点少,一般十到二十台。但它的好处是支持端口映射,比如 80 端口转到后端的 8080,而且 RS 只需要内网 IP,配置最简单。缺点是 RS 的默认网关必须指向调度器,还要开启内核转发。
DR 模式的核心是改 MAC 地址。请求到达调度器后,调度器把报文的目 MAC 改成目标 RS 的 MAC,而源 IP、目标 IP、端口全部保持不变,靠二层直接转发给 RS。RS 的 lo 接口上绑定了 VIP,收到后处理请求,然后把响应直接回给客户端,不经过调度器。所以调度器只处理入站请求这一半流量,性能最高,在局域网内是默认首选。它的限制是同在一个二层网络内,不能跨 VLAN 或跨机房,还需要在 RS 上做 ARP 抑制,也不支持端口映射。
TUN 模式的核心是加一层 IP 头。调度器不修改原报文,而是在原 IP 包外面再封装一层新的 IP 首部,外层源是 DIP 目标是 RIP,内层保持源 CIP 目标 VIP 不变,通过 IP 隧道发给 RS。RS 解封后处理,响应直接回给客户端。因为走隧道,所以能跨 LAN 甚至 WAN,RS 可以在不同地域部署,这是它相对 DR 的最大优势。缺点是隧道封装有系统开销,局域网内效率不如 DR,配置也更复杂,同样不支持端口映射,RS 要支持隧道协议。
总结:NAT 是改地址双向都过调度器,简单便宜但性能差;DR 是改二层 MAC 响应直回,局域网内最快;TUN 是再加一层 IP 头响应直回,能跨地域但有开销。选型看场景,局域网要性能选 DR,要端口映射或图省事选 NAT,跨地域选 TUN。
| 对比项 | NAT 模式 | DR 模式 | TUN 模式 |
|---|---|---|---|
| 转发方式 | DNAT 加 SNAT(改写IP) | 改写目标 MAC | IP 隧道封装 |
| 请求是否经过 LB | 是 | 是 | 是 |
| 响应是否经过 LB | 是 | 否 | 否 |
| 网络要求 | 同一 LAN | 同一 LAN(二层) | LAN / WAN 均可 |
| RS 网关 | 必须指向 LB | 不指向 LB | 不指向 LB |
| 端口映射 | 支持 | 不支持 | 不支持 |
| VIP 绑定位置 | LB 上 | LB 加 RS 的 lo | LB 加 RS 的 lo |
| ARP 抑制 | 不需要 | 需要 | 需要 |
| 节点数量 | 少(10 到 20 台) | 多(100 台级) | 多(100 台级) |
| 性能 | 低(瓶颈在 LB) | 最高 | 高(有隧道开销) |
| 适用场景 | 小规模、需端口映射 | 局域网内高性能 | 跨地域 / 跨机房 |
四、调度算法
IPVS 提供 10 种调度算法,分两大类:
固定调度算法:
- RR(轮询):依次分配
- WRR(加权轮询):按权重分配
- SH(源地址哈希):同一客户端 IP 固定到同一 RS
- DH(目标地址哈希):同一目标地址固定到同一 RS
动态调度算法(根据负载状态):
- LC(最少连接):连接数最少的优先
- WLC(加权最少连接):默认算法,连接数除以权重最小者优先
- SED(最短期望延迟)、NQ(最少队列)
- LBLC(基于局部的最少连接)、LBLCR(带复制的 LBLC)