LVS 负载均衡核心原理深度剖析:从 NAT 到 DR 模式详解
前言
在构建高并发、高可用的互联网架构时,LVS (Linux Virtual Server) 是绕不开的核心组件。作为一款运行在 Linux 内核层(Layer 4)的负载均衡软件,它以极其强悍的性能著称。
很多初学者能照着文档部署 LVS,但在排错或架构选型时往往因为不懂底层原理而"踩坑"。本文将通俗易懂地拆解 LVS 的四大核心模式(NAT、TUN、DR、FULLNAT),并深入剖析数据包在网络层与链路层的流向。
一、 核心术语(必读)
在深入原理之前,必须统一以下四个核心角色的代号,这是理解 LVS 流量走向的基石:
- CIP (Client IP):客户端 IP,即发起请求的用户 IP。
- VIP (Virtual IP):虚拟 IP,直接面向公网,用户访问的"门面" IP。
- DIP (Director IP):负载均衡器(LB)内部用于和后端服务器通信的 IP。
- RIP (Real IP):后端真实服务器(Real Server)的 IP。
二、 LVS-NAT 模式 (Network Address Translation)
1. 核心概念
NAT 模式类似于家庭路由器的工作方式。LVS 充当了网关的角色,所有入站请求和出站响应都必须经过 LVS。
- 生活类比: 传达室大爷。信件寄给"公司(VIP)",大爷把收件人改成"员工张三(RIP)"转交。张三回信时,必须先给大爷,大爷把发件人改成"公司",再寄给客户。
2. 数据包流向
- 入站 (CIP -> VIP): 客户端请求到达 LVS。LVS 通过 DNAT (目标地址转换),将目标 IP 从
VIP修改为RIP。 - 转发 (CIP -> RIP): LVS 将修改后的包发给后端服务器。
- 处理: 后端服务器处理请求。关键点: 后端服务器的网关必须指向 LVS 的
DIP,否则回包无法送达 LVS。 - 出站 (RIP -> CIP): 后端服务器回包给 LVS。
- 回复 (VIP -> CIP): LVS 收到回包,通过 SNAT (源地址转换),将源 IP 从
RIP修改回VIP,最终发给客户端。
3. 优缺点分析
- 优点: 配置简单,支持端口映射(后端端口可与 VIP 端口不同)。
- 缺点: 性能瓶颈明显。由于请求和响应流量都经过 LVS,而响应包(如视频、图片)通常很大,LVS 网卡容易被打满。
三、 LVS-TUN 模式 (IP Tunneling)
1. 核心概念
TUN 模式主要用于异地容灾。LVS 不修改原数据包,而是将原数据包"封装"在新的 IP 包中,通过隧道传给异地服务器。
- 生活类比: 俄罗斯套娃。LVS 收到信后,不拆信,而是把整个信封塞进一个写着"上海分公司"的大信封里寄出。上海分公司拆开大信封,处理完内部的信件后,直接按原地址回复客户。
2. 数据包流向
- 入站 (CIP -> VIP): 请求到达 LVS。
- 封装: LVS 在原数据包外层再封装一层 IP 头(源是 DIP,目标是 RIP),形成 IPIP 隧道包。
- 解封: 后端服务器收到包,剥离外层 IP 头,露出里面的
CIP -> VIP。 - 直连返回 (VIP -> CIP): 后端服务器处理完毕,直接通过自己的公网网关将响应发回给客户端,不再经过 LVS。
3. 优缺点分析
- 优点: 实现了跨机房负载均衡;回包不经过 LVS,性能较高。
- 缺点: 所有后端服务器必须支持隧道协议,且需要配置公网 IP 或能独立上网,网络维护复杂。
四、 LVS-DR 模式 (Direct Routing) ------ 生产环境首选
1. 核心概念
DR 模式是性能最强的模式。LVS 在这里不做 IP 转换,而是玩弄"链路层魔法"------修改 MAC 地址。
- 生活类比: 导游与游客。游客找"导游(VIP)",LVS 仅仅是指路人,他把游客直接领到"景点(RIP)"门口,却告诉游客"这就是导游"。景点接待完游客后,游客直接自行离开。
2. 数据包流向 (重点)
假设 LVS 与后端服务器在同一局域网:
- 入站 (CIP -> VIP): 客户端请求到达 LVS。
- MAC 欺骗: LVS 不修改 IP 地址 (包里依然是 CIP->VIP),只修改数据链路层的目标 MAC 地址,将其改为后端服务器的 MAC 地址。
- 接收: 后端服务器收到包,拆开链路层,发现目标 IP 是 VIP。
- 关键技术: 后端服务器必须在环回接口 (
lo) 上绑定 VIP,否则它会认为"这不是给我的包"而丢弃。
- 关键技术: 后端服务器必须在环回接口 (
- 直连返回 (VIP -> CIP): 后端服务器处理完,直接通过本地网关回包给客户端。
3. 核心难点:ARP 抑制
在 DR 模式下,LVS 和所有后端服务器都绑定了 VIP。
- 问题: 当路由器广播询问"谁是 VIP?"时,后端服务器和 LVS 都会抢答,导致流量混乱。
- 解决: 必须调整后端 Linux 内核参数 (
arp_ignore,arp_announce),让后端服务器对 VIP 的 ARP 请求"保持沉默",只有 LVS 响应。
4. 优缺点分析
- 优点: 性能极致。LVS 只处理入站的小流量请求,出站的大流量直接由后端分担,一台 LVS 可抗住极高的并发。
- 缺点: 灵活性较差,LVS 和后端服务器必须在同一个二层网络(同一 VLAN/交换机)。
五、 LVS-FULLNAT 模式
1. 核心概念
为了解决 NAT 模式性能差、DR 模式跨网段难的问题,出现了 FULLNAT(全地址转换)。
2. 数据包流向
- 入站: LVS 将目标 IP 改为 RIP,同时将源 IP 改为 DIP。
- 处理: 后端服务器看到的请求来自 DIP,处理后回包给 DIP。
- 出站: LVS 收到回包,将源/目 IP 再次转换回 VIP/CIP。
3. 优缺点分析
- 优点: LVS 和后端服务器可以跨 VLAN 部署,网络架构极其灵活。
- 缺点: 性能不如 DR;后端服务器丢失了真实的客户端 IP(CIP),需要通过
TOA(TCP Option Address) 内核模块来获取真实 IP。
六、 总结与选型指南
在实际架构设计中,如何选择?请参考下表:
| 模式 | 核心原理 | 性能 | 响应路径 | 适用场景 |
|---|---|---|---|---|
| NAT | 修改目标 IP (DNAT) | ⭐⭐ | 必须经过 LVS | 小规模集群,业务流量小 |
| TUN | IP 隧道封装 | ⭐⭐⭐ | 直接返回用户 | 跨机房、异地容灾 |
| DR | 修改 MAC 地址 | ⭐⭐⭐⭐⭐ | 直接返回用户 | 中大型互联网公司核心流量入口 |
| FULLNAT | 双向 NAT (SNAT+DNAT) | ⭐⭐ | 必须经过 LVS | 复杂的云环境、跨 VLAN 环境 |
结论:
- 绝大多数互联网公司的流量入口(HTTP/HTTPS)首选 LVS-DR 模式,配合 Keepalived 实现高可用。
- 如果你的网络环境复杂,无法保证 LVS 和后端在同一二层网络,考虑 FULLNAT(需注意获取真实 IP 问题)。