部署 M-lag 的设备只有单台可以ping通下联设备的原因分析

问题描述:

如下图所示,两台 CE12808 设备部署 M-LAG, 在 VLANIF 接口上配置相同的 IP 地址和相同的虚拟 MAC 地址作为下联服务器的双活网关,服务器通过二层交换机双上联至部署了 M-LAG 的一组CE12808设备。

在此场景下, 从服务器可以 ping 通网关,但从两台 CE12808 设备向服务器 IP 地址 ping 测试时,只有一台设备能够通信,另一台设备则无法通信(假定能通信的为左侧设备,而右侧 CE1208 设备无法进行通信)。

 原因分析:

两台M-LAG 的设备之间会通过 peer-link 链路发送 M-LAG 同步报文实时同步对端的信息, 在同步报文中就包含了MAC表项与 ARP 表项, 因此在两台 CE12808 设备上, 通过 display arp 命令,在两台设备上都可以看到下联服务器的 arp 表项。

对于下联服务器而言,因M-LAG为一种横向虚拟化设备, 两台 CE12808 被虚拟成一台有网关 IP 地址和MAC地址的设备,二层交换机通过 eth-trunk 链路双上联至 CE12808。目前华为设备上的 eth-trunk 只采用逐流负载分担的方式计算流量实际所走的链路。对于同一数据流的数据帧(五元组,即源目 IP 地址, 源目端口号,传输层协议号相同的数据帧),负载分担的机制会把数据帧中的地址通过 HASH 算法生成HASH-KEY 值, 然后根据这个数值在 Eth-Trunk 转发表中寻找对应的出接口,不同的 MAC 或 IP 地址 HASH 得出的 HASH-KEY 值不同,从而出接口也就不同,这样就保证了同一数据流的帧在同一条物理链路转发。

当由服务器向网关发起 ping 测试时,数据流走向如下图所示,到达二层交换机后,由 HASH 算法确定数据帧通过左侧的 eth-trunk 成员链路转发至CE12808 设备。当左侧 CE12808 设备收到数据帧后, 根据目的 MAC 地址确定是发给自己的报文, 然后拆掉二层帧头并将内部的 IP 数据包交给 IP 协议处理, 再从相同的路径回包给服务器, 实现服务器与网关的互访。同理, 从左侧 CE12808设备向服务器 ping 测试时, 数据流向通过同样的链路进行交互。

 对于右侧的 CE12808 设备, 在其上对服务器进行 ping 测试时,因 M-LAG 同步的表项中含有服务器的 MAC 地址和 IP 地址, 因此数据包会由其下联的 M-lag成员端口发出,经二层交换机发往服务器。服务器收到该数据包处理后进行回包时,数据回到二层交换机后,根据逐流负载分担的HASH算法,其五元组信息与服务器对网关ping测试时相同,因此,回程流量依旧走左侧eth-trunk成员链路回到左侧的CE12808设备,数据流走向如下图所示。

 左侧设备收到数据回包后,查看目的 MAC 地址为本机的地址, 会将二层帧头拆除并将内部的 IP 数据包交给 IP 协议处理, 不会再通过 peer-link 链路转发至右侧的 CE12808 设备。因此,对于右侧 CE12808 设备而言, 其发出的数据包并未收到回包, 因此会显示 ping不通。但对于服务器上的实际业务来说, 这种情况并不会影响客户业务的正常收发处理。

处理建议

此现象为部署了M-lag 后的正常现象, 并不会对客户的业务造成影响。在实际组网中如果遇到此类问题,可使用端口镜像的方式, 同时对二层转发设备上的eth-trunk接口做端口镜像, 抓取流量报文进行验证解释。

猜你喜欢

转载自blog.csdn.net/qq_32044265/article/details/128234402