LVS DR 模式(Direct Routing)

1. 核心概念与前提

在深入 DR 模式之前,必须明确 NAT 与 DR 的根本区别,以及"视角"的重要性。

🔹 关键定义:站在"请求包"的角度

  • DNAT (Destination NAT) :修改请求包的目标 IP(通常用于将 VIP 流量转发给 RS)。
  • SNAT (Source NAT) :修改请求包的源 IP(通常用于让响应包能正确返回)。
  • DR 模式的特殊性
    • 不改 IP :DR 模式既不进行 DNAT,也不进行 SNAT
    • 只改 MAC :它仅在链路层修改目标 MAC 地址
    • 视角统一 :无论请求还是响应,我们讨论的"转换行为"均基于客户端发出的原始请求包来定义。在 DR 模式中,这个包在网络层(IP)是完全透明的。

2. 架构拓扑与组件角色

🏗️ 网络结构图

📋 组件职责

组件 IP 配置 关键行为
Client 公网 IP 发起请求,目标为 VIP。
LVS (Director) VIP (物理网卡) DIP (内网网卡) 1. 响应 VIP 的 ARP 请求。 2. 接收请求包,根据算法选择 RS。 3. 仅修改目标 MAC 为选中 RS 的 MAC。 4. 转发给交换机。
RS (Real Server) RIP (物理网卡) VIP (Lo 回环接口) 1. 不响应 VIP 的 ARP 请求(静默)。 2. 接收目标 MAC 为自己、目标 IP 为 VIP 的包。 3. 处理业务。 4. 直接通过默认网关将响应包发回 Client(不经过 LVS)。

3. 数据包流转深度解析

🔄 完整生命周期(以 HTTP 请求为例)

阶段一:请求进入 (Client → LVS)
  • 动作:Client 发送 HTTP 请求。
  • 数据包特征
    • Src IP: 49.89.179.13 (Client)
    • Dst IP: 219.142.145.239 (VIP)
    • Dst MAC: LVS 的 MAC (因为 LVS 响应了 ARP)
  • 结果:数据包被路由到 LVS。
阶段二:LVS 调度 (LVS 内部处理)
  • 动作:LVS 收到包,发现目标是 VIP,查找调度表选中 RS-1。
  • 核心操作改写链路层头部
    • Src IP: 不变 (49.89.179.13)
    • Dst IP: 不变 (219.142.145.239)
    • Src MAC: 改为 LVS 的 DIP MAC (可选,通常是 LVS 出口 MAC)
    • Dst MAC: 改为 RS-1 的 MAC
  • 结果:数据包被扔回局域网,交换机根据 MAC 表直接转发给 RS-1。
阶段三:RS 处理 (RS-1 接收)
  • 动作:RS-1 网卡收到帧,检查 MAC 匹配。向上递交给 IP 层。
  • IP 层检查 :发现 Dst IP219.142.145.239
    • 正常情况:如果本机没有这个 IP,会丢弃。
    • DR 特配 :RS-1 的 lo:0 接口绑定了该 VIP,且内核参数允许接收(arp_ignore 设置得当),因此接受并处理
  • 业务处理:Web 服务生成响应数据。
阶段四:响应返回 (RS-1 → Client)
  • 动作:RS-1 构造响应包。
  • 数据包特征
    • Src IP: 219.142.145.239 (VIP) ------ 伪装成 VIP 回复
    • Dst IP: 49.89.179.13 (Client)
    • Gateway: RS-1 的默认网关(指向真实路由器,不是 LVS
  • 结果 :响应包绕过 LVS,直接经由交换机/路由器返回给 Client。

4. OSI 模型层级变化对比

这是理解 DR 模式高性能的关键:除了链路层,其他层完全透明。

OSI 层级 字段 原始包 (Client→LVS) 转发包 (LVS→RS) 响应包 (RS→Client) 变化情况
应用层 Data GET /index.html GET /index.html HTTP 200 OK ❌ 不变
传输层 Port Sport: 54321, Dport: 80 Sport: 54321, Dport: 80 Sport: 80, Dport: 54321 ❌ 不变
网络层 IP Src: Client, Dst: VIP Src: Client, Dst: VIP Src: VIP, Dst: Client 完全不变 (请求阶段)
链路层 MAC Dst: LVS_MAC Dst: RS_MAC Dst: Router_MAC 唯一改变点

💡 结论:因为不修改 IP 和端口,DR 模式支持所有基于 TCP/UDP 的应用,包括加密流量(HTTPS),且性能损耗极低。


5. 核心难点:ARP 风暴与抑制机制

DR 模式成败的关键在于:如何确保只有 LVS 响应 VIP 的 ARP 请求?

⚠️ 问题场景

如果 RS 也响应了 "Who has VIP?" 的 ARP 请求:

  1. 客户端或路由器可能会学到 RS 的 MAC 地址。
  2. 后续请求直接发给 RS,绕过 LVS。
  3. 后果:负载均衡失效,且由于 RS 可能未建立连接状态,导致丢包或连接重置。

🛡️ 解决方案:内核参数调优 (在 RS 上执行)

必须在所有 RS 上配置以下参数,实现 "ARP 隐藏"

1. 禁止响应 ARP 请求 (arp_ignore)
复制代码
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  • 含义 :只有当目标 IP 地址是接收网卡的主 IP时,才响应 ARP 请求。
  • 效果 :当 ARP 请求询问 VIP 时,RS 发现 VIP 绑定在 lo (回环) 接口,而请求是从 eth0 进来的,主 IP 是 RIP,因此不响应
2. 禁止主动宣告 ARP (arp_announce)
复制代码
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  • 含义 :在发送 ARP 响应时,总是使用最佳本地地址(即接口的主 IP),而不是别名 IP(VIP)。
  • 效果:防止 RS 在任何情况下意外暴露 VIP 的 MAC 地址。
3. 实践中的 VIP 绑定

在 RS 上将 VIP 绑定到 lo:0,并设置为 /32 掩码:

复制代码
ifconfig lo:0 219.142.145.239 netmask 255.255.255.255 up
route add -host 219.142.145.239 dev lo:0

6. DR 模式优缺点总结

✅ 优点

  1. 高性能:LVS 只处理入站请求,出站响应由 RS 直接处理,LVS 几乎无瓶颈。
  2. 透明性:不修改 IP 和端口,支持任何应用协议(HTTP, HTTPS, FTP, MySQL 等)。
  3. 成本低:RS 可以是任何操作系统,无需特殊软件,只需内核参数调整。
  4. 扩展性强:理论上可支撑数万台后端服务器(受限于二层网络规模)。

❌ 缺点/限制

  1. 同网段限制 :LVS 和 RS 必须在同一物理网络(同一 VLAN/广播域),不能跨路由器(因为依赖 MAC 地址转发)。
  2. 配置复杂:需要在每台 RS 上手动配置 VIP 和 ARP 抑制参数。
  3. 不支持端口映射:无法像 NAT 模式那样将外部 80 端口映射到内部 8080 端口。

7. 快速部署检查清单 (Checklist)

在上线前,请逐项核对:

  • 网络拓扑:确认 LVS 和所有 RS 在同一交换机/VLAN 下。
  • LVS 配置
    • VIP 绑定在物理网卡。
    • 开启 IP 转发 (net.ipv4.ip_forward = 1)。
    • 配置 ipvsadm 规则。
  • RS 配置
    • VIP 绑定在 lo:0,掩码 /32
    • 关键 :已设置 arp_ignore=1arp_announce=2
    • 关键 :默认网关指向真实路由器,绝不能指向 LVS 的 DIP。
  • 验证测试
    • 在 Client 端 ping VIP,检查 ARP 缓存,确认 MAC 地址属于 LVS 而非 RS。
    • 在 LVS 和 RS 上同时 tcpdump,确认请求包 MAC 被改写,响应包不经过 LVS。
相关推荐
jaycyj10 小时前
Linux 高级命令
linux
冉佳驹10 小时前
Linux ——— 网络开发核心知识与协议实现详解
linux·http·https·udp·json·tcp·端口号
HalvmånEver10 小时前
MySQL数据库基础入门总结(从0到1)
linux·数据库·mysql
小猪咪piggy10 小时前
【接口自动化】(2) pytest 测试框架
运维·自动化·pytest
Lugas Luo10 小时前
Kernel 5.10 ATA 驱动分析与车载环境诊断
linux·嵌入式硬件
顶点多余10 小时前
死锁+线程安全
linux·开发语言·c++·系统安全
饺子大魔王的男人10 小时前
Linux 下 Apache RocketMQ 部署与公网访问实现指南
linux·apache·rocketmq
A.A呐10 小时前
【Linux第二十五章】高级IO
linux·运维·服务器
zzzsde10 小时前
【Linux】库的制作与使用(2)ELF&&静态链接
linux·运维·服务器
艾莉丝努力练剑10 小时前
【Linux线程】Linux系统多线程(二):线程的优缺点
linux·运维·服务器·c++·学习