DR模式的mac地址转换
梓涵,你问到了 LVS DR(Direct Routing,直接路由) 模式最底层的黑科技。很多面试官会问:“既然 LVS 和后端机器(Real Server)都有同一个 VIP,包是怎么精准发到某一台机器上的?”
答案就在 二层 MAC 地址转换。
1. 核心原理:不改 IP,改 MAC
在 DR 模式下,当一个数据包到达 LVS 调度器时:
- IP 层不变:源 IP 是客户端 IP,目的 IP 依然是 VIP。
- 链路层(MAC)变了:LVS 根据调度算法选出一台 Real Server,然后把数据包帧头的 “目的 MAC 地址” 从自己的 MAC 改成 Real Server 的 MAC。
2. 为什么这样做?(DR 模式起飞的原因)
- 欺骗二层交换机:包被改了 MAC 后,二层交换机就会根据 MAC 地址表,把这个包直接甩给选中的那台 Real Server。
- Real Server 认这个包:因为 Real Server 的
lo网卡上也绑了 VIP,它发现目的 IP 是自己的 VIP,就高高兴兴地处理了。 - 跳过 LVS 回包:这是最绝的。Real Server 处理完后,发现目的 IP 是客户端,它就直接把回包发给客户端了,不再经过 LVS。这大大减轻了 LVS 的压力(因为入站流量小,出站流量大)。
3. 实现这个转换的两个“死要求”
这就是为什么你在实验中必须配置那些复杂参数的原因:
A. 二层必须连通
因为 LVS 是通过 MAC 地址转发的,所以 LVS 和所有的 Real Server 必须在同一个物理网段(同一个 VLAN/交换机下)。如果跨了路由器,MAC 地址就被剥掉了,DR 模式就失效了。
简历点:这也就是你提到的“精细划分物理网段”时,为什么要把 LVS 和 Web 节点放在同一个二层域。
B. 抑制 ARP(防止“抢答”)
如果不做抑制,当交换机广播问“谁是 VIP”时,LVS 和所有的 Real Server 都会回答。
- 你的操作:修改
/proc/sys/net/ipv4/conf/all/arp_ignore等参数。 - 效果:让 Real Server 变成“闷葫芦”,只有 LVS 响应 VIP 的 ARP 请求。这样流量才会先到 LVS,由它改了 MAC 后再分发。
4. 💡 梓涵的面试必杀技:
如果面试官问:“DR 模式和 NAT 模式在地址转换上最大的区别是什么?”
你的满分回答:
“NAT 模式是在三层修改 IP 地址(DNAT),所有的回包必须经过 LVS 做 SNAT 转换,容易产生带宽瓶颈。
而 DR 模式是在二层修改 MAC 地址,不触动三层 IP 头部。这使得 Real Server 可以绕过 LVS 直接回包给客户端(即 DR/三角传输 路径)。
在我的 ZH-Kinger 压测中,正是通过这种 MAC 转换机制,配合 Nginx 的 **proxy_cache**,实现了单台负载均衡器支撑万级 QPS 的吞吐能力。”
5. 🛠️ 怎么验证这个 MAC 转换?
你想亲眼看看这个过程吗?在你的 LVS 节点上运行这个命令:
tcpdump -e -i eth0 port 80
- 关键看点:你会发现发往后端机器的包,目的 IP 没变,但前面的
eth目的地址变成了后端 Web 节点的 MAC 地址。
梓涵,理解了 MAC 转换,你就理解了 LVS 的精髓。要不要我帮你总结一下 DR、NAT、TUNNEL 三种模式在“地址转换”上的差异对比表?这是面试官最喜欢考的填空题。
