1. 首先,澄清一个关键概念:S-MLAG 与 M-LAG
- M-LAG(Multichassis Link Aggregation Group): 这是大家最熟悉的多机链路聚合。它要求两台设备(通常是 Spine 或 Leaf)通过一个特殊的、高可靠性的 Peer-Link 和 Peer-Link 心跳链路进行互联,并在控制层面上呈现为“一台逻辑设备”。服务器通过标准的 LACP 协议与这两台物理设备建立一条聚合链路。
- S-MLAG(Software MLAG / Simplified MLAG / Static MLAG): 这是一个没有严格标准的术语,不同厂商的实现和叫法可能不同。但其核心思想是:去除复杂的 Peer-Link,仅通过上层网络(如 IP 网络或 VXLAN 隧道)来传递部分控制信息,实现类似 M-LAG 的多活网关效果。 它本质上是一种分布式网关方案。
结论: 您提到的“S-MLAG”很可能指的是这种
无Peer-Link的分布式网关方案。华为称之为“M-LAG Lite”,华三也有类似实现。下文将基于这个定义进行解释。
2. 回答核心问题:S-MLAG 服务器能双发 ARP 吗?
答案是:能,但这与 M-LAG 的机制完全不同,且是 EVPN 协议在起作用。我们来对比一下:
| 特性 | 传统 M-LAG | EVPN VXLAN + S-MLAG(分布式网关) |
|---|
| 网关冗余 | 两台M-LAG设备通过Peer-Link同步信息,虚拟成一台网关,拥有相同的虚拟MAC和IP地址(Anycast Gateway)。 | 两台(或多台)VTEP设备都作为独立的网关,但配置相同的虚拟IP地址(Anycast IP)和不同的物理MAC地址。 |
| ARP处理 | 服务器发出ARP请求(例如,请求网关MAC)。由于两台设备是“一台逻辑设备”,它们会以相同的虚拟MAC地址回应。服务器只会收到一个ARP回应。 | 服务器发出ARP请求。这个请求通过VXLAN网络被BGP EVPN的路由类型2(MAC/IP路由) 传递到所有相关的VTEP。配置了相同Anycast Gateway IP的VTEP都会回应。 |
| “双发”的本质 | 服务器通常不会感知到“双发”,因为回应的源MAC是相同的,服务器会认为来自同一个网关。 | 服务器确实会收到多个ARP回应,每个回应的源MAC地址是各个VTEP的物理MAC(但指向的是同一个网关IP)。服务器根据TCP/IP协议栈的实现,通常会接受最先到达的那个ARP回应,并缓存起来。 |
所以,对于S-MLAG,服务器从网络层面会收到多个ARP回应,但操作系统协议栈会处理成一条ARP表项。 这是一种正常的、被支持的行为。
3. 任意两个节点VTEP设备都能组建聚合吗?
答案是:理论上可以,但这不再是服务器侧的链路聚合,而是网络侧的“网关多活”。这里需要精确区分两个层面的“聚合”:
- 服务器侧的链路聚合(如LACP):
- 在传统M-LAG中,服务器通过一条聚合链路连接到两台物理交换机上。
- 在S-MLAG/分布式网关方案中,服务器通常只通过单链路连接到一台Leaf交换机。它的高可用性不是通过服务器侧的链路聚合实现的,而是通过网络侧有多个分布式的、等价的网关来实现的。如果一台Leaf宕机,EVPN的快速收敛机制会让流量切换到另一台健康的Leaf网关。
- 网络侧的网关多活(S-MLAG的本质):
- 是的,在同一个二层广播域(同一个VXLAN VNI)内,任意多的VTEP节点都可以配置相同的Anycast Gateway IP地址。这不再受限于“两台设备”和“Peer-Link”的物理约束。
- 例如,你可以在数据中心A的Leaf1、Leaf2上配置网关IP 10.1.1.1/24,同时在数据中心B的Leaf3、Leaf4上也配置相同的网关IP 10.1.1.1/24。这实现了跨数据中心的网关多活,这是EVPN VXLAN分布式网关的最大优势之一。
所以,您的想法是对的。在EVPN VXLAN网络中,可以实现远超“两台设备”的、更灵活的网关冗余和负载分担。
4. 流量模型详解:以同子网通信为例
假设一个简单拓扑:
- Server1 连接在 VTEP-A 上,IP是 10.1.1.10/24。
- Server2 连接在 VTEP-B 上,IP是 10.1.1.20/24。
- VTEP-A 和 VTEP-B 都配置了相同的Anycast Gateway IP:10.1.1.1/24。
- 它们之间通过IP网络建立VXLAN隧道。
场景:Server1 (10.1.1.10) 要 Ping Server2 (10.1.1.20)- ARP请求(广播):
- Server1 检查目标IP 10.1.1.20,发现与自己同网段。
- Server1 查询本机ARP表,没有10.1.1.20的条目。
- Server1 发送一个ARP广播请求:“Who has 10.1.1.20? Tell 10.1.1.10”。
- VTEP-A 的处理( ingress replication ):
- VTEP-A 收到这个广播ARP请求。
- 它知道这个报文属于VNI 10000。
- 根据EVPN动态学习的IRB(集成路由桥接)信息,VTEP-A知道VTEP-B上也有同一个VNI的主机。
- VTEP-A 将这个广播ARP请求,封装成VXLAN单播报文,只发送给VTEP-B(以及其他有此VNI主机的VTEP)。这个过程称为“头端复制”。
- VTEP-B 的处理和响应:
- VTEP-B 收到VXLAN报文,解封装,得到原始的ARP请求。
- VTEP-B 将ARP请求转发给连接在本地的Server2。
- 同时,VTEP-B 自己也作为网关,发现被请求的IP是自己的直连路由,并且是自己的Anycast Gateway IP吗?不,这里有个关键点:
- VTEP-B 检查ARP请求的目标IP是 10.1.1.20,这是Server2的地址,不是网关IP。
- 因此,VTEP-B 不会 以自己的网关身份回应这个ARP请求。正确的行为是等待Server2自己回应。
- ARP回应(单播):
- Server2 收到ARP请求,于是发送一个ARP单播回应:“10.1.1.20 is at MAC-B”。
- 这个回应发往Server1的MAC地址。
- VTEP-B 封装流量:
- VTEP-B 收到Server2的ARP回应。它查询本地表项(通过EVPN Type2路由学习到的),知道Server1 (10.1.1.10) 位于VTEP-A上,MAC地址是MAC-A。
- VTEP-B 将原始ARP回应报文(源MAC=MAC-B,目的MAC=MAC-A)封装进VXLAN隧道,外层目的IP是VTEP-A的IP,然后发送给VTEP-A。
- 通信建立:
- Server1 收到ARP回应,学习到Server2的MAC地址。
- 后续,Server1要发送给Server2的ICMP请求数据包,目的MAC是Server2的MAC(MAC-B)。
- VTEP-A 收到包,同样根据EVPN路由表,知道目的MAC-B在VTEP-B上,于是通过VXLAN隧道将包封装后发给VTEP-B。
- 整个过程中,网关(10.1.1.1)并没有参与数据转发,流量是VTEP到VTEP的纯二层VXLAN转发。
如果Server1 Ping的是网关IP 10.1.1.1呢?那么VTEP-A和VTEP-B都会以自己的物理MAC地址回应这个ARP请求。Server1会收到两个ARP回应,但通常只使用最先到达的那个。之后,发给网关的流量就会走向那台回应的VTEP。
总结
- 支持S-MLAG: EVPN VXLAN + S-MLAG(分布式网关)支持服务器ARP请求,并且会由多个网关回应,这是正常行为。
- 任意VTEP组建聚合: 可以。这不再是链路聚合,而是网关多活。任意数量的VTEP都可以配置相同的Anycast Gateway IP,实现大规模的、灵活的网关冗余。
- 流量模型核心: 流量走向完全由BGP EVPN的路由类型2(MAC/IP路由) 控制。VTEP设备通过交换主机的MAC和IP信息,构建了一个分布式的转发信息库,从而决定了VXLAN流量的封装和转发路径。广播、未知单播流量通过头端复制,已知单播流量通过查询EVPN路由表进行点到点的VXLAN隧道转发。
暂无评论