两台交换机组成M-LAG(只做2层透传VLAN)上联防火墙,分别通过聚合口1和主墙连接,聚合口2和备墙连接,当防火墙进行主备切换后会发送ARP报文通知交换机刷新MAC,但是他刚好hash只从聚合口的其中一条链路发给了交换机2,这个时候交换机2成功刷新MAC表切换到连接备墙的聚合2口,但是交换机1没收到这个arp,交换机1上查看这个mac还是对应的聚合1口直到有收到包才会切到聚合口2,导致这一段时间有一半业务会丢包,这种情况下M-LAG不会去同步MAC表项吗?有什么解决方法吗
(0)
最佳答案
一、核心问题解答:DRNI 会不会同步这条 MAC 表?
不会自动同步刷新!这是 DRNI 原生机制限制,不是 BUG。
先理清你的组网:
两台 DRNI 交换机(DR 系统),上行两条独立 Eth-Trunk:
SW1-Trunk1 → 主防火墙
SW2-Trunk2 → 备防火墙
防火墙 RBM 主备切换后发送免费 ARP (GARP),哈希路由只发到 SW2:
SW2 本地收到 GARP,本地 MAC 表更新:防火墙 MAC 出接口改为 Trunk2
SW1 没有收到这份 GARP,SW1 本地原有 MAC 表依然指向 Trunk1(旧主墙链路)
❗关键原理(重中之重)
DRNI 只同步DR 下行 DR 口学习到的 MAC;
从 IPP 上行接口(上联防火墙 Trunk)学习 / 刷新的动态 MAC 地址,DRNI 不会通过 Peer-Link(IPL)同步更新给对端!
原因:DRNI 设计逻辑 —— 上行属于独立三层网关侧路由域,设备各自独立学习上行 MAC,跨设备不自动同步上行动态 MAC 更新。
因此:SW1 不会自动同步 SW2 刚刚刷新的防火墙 MAC,必须等到流量触发新报文学习,中间窗口流量丢包。
二、为什么出现一半业务丢包?
下行终端流量会被 DRNI 负载分担:
流量由 SW2 转发:MAC 表正确,走 Trunk2 到备防火墙,正常通信;
流量由 SW1 转发:MAC 表还是旧条目,去往 Trunk1(原主防火墙,现在已经离线)→流量黑洞丢包。
三、分层解决方案(优先级从高到低)
方案 1:防火墙侧优化(最优,根治源头,推荐优先实施)
防火墙 RBM 切换时,两条上行链路同时发送免费 ARP,而不是单链路发送。
核查 F1000/F5000 防火墙 RBM 配置:
主备切换触发 GARP,所有业务接口同时发送免费 ARP,不要仅当前转发接口发送;
增加免费 ARP 发送次数(连续 3 次广播),避免被哈希随机丢在单条链路。
原理:当两条链路都收到 GARP,SW1、SW2 两台交换机同时刷新 MAC,不存在表项不一致窗口。
方案 2:交换机 DRNI 侧配置优化(组网无法改动防火墙时使用)
① 【首选】配置静态 MAC(适合防火墙网关 MAC 固定不变)
在两台 DRNI 交换机上同时配置防火墙网关 MAC 静态指向正确上行聚合口
plaintext
system-view
mac-address static 防火墙MAC地址 interface Eth-Trunk2 vlan X
优势:不受动态学习影响,切换后不会产生 MAC 漂移,永久解决;
局限:防火墙硬件 MAC 变更时需要同步修改配置。
② 开启 DRNI 对话式 MAC 学习(补充优化,不能根治但缓解收敛)
plaintext
system-view
mac-address drni forwarding-conversational-learning
作用:SW1 转发流量、查找 MAC 表发现条目失效时,可以向 Peer(SW2)请求最新 MAC 表项;
⚠️注意:属于报文触发被动查询,切换瞬间首包依然存在短暂丢包,无法做到零丢包,只能缩短收敛时间。
③ 缩短 MAC 地址老化时间(不推荐,应急方案)
plaintext
mac-address timer aging 30
默认 300s,改成 30 秒;
风险:MAC 频繁老化会增加 CPU 广播压力,大规模接入环境慎用。
方案 3:组网架构改造(长期优化方案)
当前组网缺陷:防火墙双上行分别接入两台 DRNI 成员,属于非标准 DRNI 双活上行。
标准稳定方案二选一:
防火墙做 DRNI(IRF/RBM),使用一条跨设备 Eth-Trunk 同时接入两台交换机;防火墙切换后 GARP 可以通过聚合组同时送达两台交换机;
防火墙上行先经过一台独立核心交换机,再接入 DRNI,避免非对称哈希。
四、补充避坑知识点
区分「下行 DR 口 MAC」和「上行普通接口 MAC」
下行 DR 口(下联终端服务器)学习 MAC → DRNI 自动双向同步;
上行普通 Eth-Trunk 学习 MAC → 默认不同步,就是你遇到的场景。
不要混淆 DRNI 和 IRF:IRF 集群所有 MAC 全局同步;DRNI 是跨设备聚合,上行独立学习机制,两者行为不一样。
(0)
(0)
暂无评论
你遇到的问题核心在于:M-LAG的MAC同步是基于表项的同步,而防火墙发出的ARP报文是逐包的触发事件。当ARP报文因哈希算法只到达一台交换机时,另一台无法被“事件”触发,因此不会主动更新MAC表项。
MAC同步基于表项:当交换机从一个M-LAG接口学到新的MAC地址后,它会将这个MAC地址表项同步给对端设备。
ARP是触发事件:ARP报文是触发交换机去学习或更新MAC表项的“事件”。
你遇到的情况是,防火墙切换后发出的ARP报文只到达交换机2。交换机2收到后更新了MAC表(指向聚合口2),并将这个新的MAC表项同步给了交换机1。
关键在于:交换机1确实收到了来自交换机2的MAC表项同步信息。但这个同步信息是“交换机2的MAC表项更新了”,而不是“收到一个ARP报文”。
在M-LAG的实现中,为了防止环路,从peer-link(堆叠链路)收到并同步过来的MAC表项,并不会被交换机1的转发芯片直接用于数据转发,它只会被标记为“已同步”状态。
因此,当有去往该MAC地址的数据流量到达交换机1时,由于本地芯片中没有“活跃”的转发条目,交换机会按照默认的MAC地址学习机制,将流量通过peer-link扔给交换机2去处理,同时等待从本地物理接口(聚合口) 收到真实的ARP报文来触发本地学习。这就是丢包和延迟的根源。
要根治此问题,核心思路是确保防火墙发出的ARP报文能同时被两台M-LAG交换机收到。
修改防火墙与交换机之间聚合口的哈希算法,让ARP报文有概率通过两条链路分别发送。
操作位置:在M-LAG交换机上,进入对应的聚合接口视图。
核心命令:link-aggregation load-sharing mode destination-ip source-ip
原理:将哈希因子从只基于MAC改为基于IP,增加哈希结果的随机性,让ARP报文更有可能分布到不同的成员链路上。不过,这无法保证100%的均匀分布。
在M-LAG交换机上开启ARP代理功能,由交换机代为响应ARP请求。
如果上述方案都无法有效解决问题,可以检查交换机当前运行的软件版本,确认是否为H3C官方已知的存在此问题的版本。
操作:访问H3C官网,查询你的交换机型号是否存在修复此类MAC同步问题的新版本软件,并在维护窗口期进行升级。
在实施解决方案前,建议先按以下步骤排查,确认问题根因:
(0)
暂无评论
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
暂无评论