华为交换机 M-LAG 跨设备链路聚合配置实战 - 夜莺博客

华为交换机 M-LAG 跨设备链路聚合配置实战

M-LAG(跨设备链路聚合)是华为交换机替代传统堆叠的一种双活组网方式:两台设备各自独立运行、独立转发,通过 peer-link 交互协议报文,对下挂服务器呈现为一个逻辑 Eth-Trunk。和 iStack/CSS 相比,M-LAG 的控制面是分离的,所以它的坑不在链路本身,而在两台设备的"一致性"上——关键配置(Type 1)不一致时,即使 M-LAG 状态显示正常,也可能出现环路或长时间丢包。本文按实施顺序讲清楚 dfs-group 的搭建、peer-link 与成员口的配置、一致性检查怎么做,以及割接与排障时的关键命令。

M-LAG 与堆叠的区别与选型

堆叠(iStack/CSS)把多台物理设备合成为一个逻辑设备,一个控制面、一次升级、一个配置;M-LAG 保留两个独立控制面,各自转发,靠协议同步状态。M-LAG 的优势是升级可以逐台进行、故障域更小、跨设备带宽利用率高;代价是配置必须人工保持一致。

对比项 iStack / CSS 堆叠 M-LAG
控制面 单一(主备) 双活、各自独立
升级方式 整机重启,业务中断 可逐台升级,业务基本不中断
配置一致性 自动同步 需人工保证(有一致性检查兜底)
跨设备链路 堆叠线缆 peer-link(建议独立接口/端口)
适用场景 中小规模接入、需简化管理 双活数据中心、服务器双归接入

第一步:规划 dfs-group 与双归组网

M-LAG 的基础单元是 dfs-group(Dynamic Fabric Service group),编号 1~16。两台成员设备使用同一个 dfs-group 编号;其中一台为主(active),另一台为备(standby)。m-lag 编号在组内唯一,对应一对 M-LAG 成员接口与世界面的服务器。

# 设备 A(主)
dfs-group 1
 priority 150
 source ip 10.10.10.1
 peer-link 1 interface Eth-Trunk 10
 m-lag 1
  consistency-check mode {loose|strict}
  peer-link 1
  port m-lag 1 interface 10GE1/0/1

# 设备 B(备)
dfs-group 1
 priority 120
 source ip 10.10.10.2
 peer-link 1 interface Eth-Trunk 10

优先级大的设备成为主设备(Active),因此规划时给期望的主设备配置更大的 priority。source ip 是 dfs-group 的心跳/协商地址,必须三层可达;生产中建议用独立的带外或专用链路,避免 peer-link 与心跳共用一条易拥塞的路径。

第二步:peer-link 与成员接口配置要点

# peer-link(两台设备之间的互联)
interface Eth-Trunk 10
 mode lacp-static
 trunkport 10GE1/0/21 to 10GE1/0/22
 description peer-link-for-mlag

# M-LAG 成员接口(面向服务器)
interface Eth-Trunk 20
 mode lacp-static
 trunkport 10GE1/0/1
 stp disable          # M-LAG 成员口建议去使能 STP
 dfs-group 1 m-lag 1
 description m-lag-to-server

三个容易踩的点:peer-link 建议去掉 STP 影响并关闭不必要的生成树收敛;M-LAG 成员口的 Eth-Trunk 编号在两端应保持一致,便于排障和后续自动化;成员口不要承载三层业务地址,三层网关应放在 M-LAG 的 VLANIF 或 VBDIF 上。

第三步:一致性检查(最关键的一步)

M-LAG 的配置分两类:关键配置(Type 1)和一般配置(Type 2)。关键配置不一致会引发环路或长时间丢包,因此检查模式分 strict(严格)和 loose(宽松)两种:严格模式下不一致会触发 M-LAG 状态异常并告警,宽松模式仅告警不阻断。生产环境建议严格模式。

display dfs-group 1 m-lag brief
display dfs-group 1 m-lag consistency-check
display dfs-group 1 m-lag troubleshooting
display dfs-group 1 m-lag troubleshooting verbose
display m-lag troubleshooting

排查建议:先用 display dfs-group 1 m-lag brief 确认主备角色和成员口状态,再用一致性检查命令逐项确认 Type 1 配置(如成员口、VLAN、Eth-Trunk 模式)在两端是否一致。display m-lag troubleshooting 会列出最近的故障原因(最多 100 条),遇到"状态正常但业务异常"时优先看它的输出。

常见故障与处理思路

  • 服务器侧只有一个成员口转发:通常是两端 LACP 系统优先级或成员口模式不一致,检查 Eth-Trunk 的 mode 与 lacp m-lag system priority 是否两端匹配。
  • M-LAG 状态正常但丢包:对照一致性检查结果,重点看关键配置差异;同时确认 peer-link 带宽是否足够承载故障时的流量冲击。
  • peer-link 断开后业务仍在转发:这是 M-LAG 双主场景,需确认心跳链路是否仍然连通,避免出现两台设备都认为自己是主设备的情况。
  • 升级割接:逐台升级时先把待升级设备上所有 M-LAG 成员口加入维护模式(或临时隔离),升级完成后确认一致性检查全部通过再升级另一台。
# 割接前后建议固定执行的验证命令
display dfs-group 1 m-lag brief
display eth-trunk 20 verbose
display dfs-group 1 m-lag consistency-check
display interface brief | include Eth-Trunk

M-LAG 的实施难度不高,难的是长期保持两台设备的配置一致。把一致性检查命令写进日常巡检脚本、变更前必跑一遍,比事后排障便宜得多。

双活网关与两级 M-LAG 拓扑

M-LAG 在实际组网中很少单独出现:接入层双归到汇聚层的 M-LAG,汇聚层再双归到核心层,就形成两级 M-LAG。这种拓扑下需要重点关注两件事:一是 VLAN 与三层网关的位置,二是故障时的转发路径。三层网关建议放在汇聚层 M-LAG 的 VLANIF 上,并配合双活网关(两台成员设备配置相同的网关 IP 与虚拟 MAC),使服务器无论从哪一侧上行都以同一网关地址为下一跳,避免主备切换导致 ARP 表项重建。

层次 建议做法 注意点
接入层 双归到汇聚 M-LAG,成员口去使能 STP Eth-Trunk 编号两端保持一致
汇聚层 VLANIF 承载三层网关,启用双活网关 虚拟 MAC 两端必须一致
peer-link 独立端口、独立链路,避免与心跳共用 带宽需能承载故障时的流量冲击
上行 汇聚到核心可再组 M-LAG 或走路由 避免环路,注意跨设备转发路径

升级与割接的检查清单

M-LAG 的最大价值是允许逐台升级,但"可以逐台"不等于"随便升级"。割接前应确认三项:double-active(双主)检测链路正常、一致性检查全部通过、以及服务器侧的 LACP 状态在两次切换之间保持稳定。升级一台设备时,先把该设备上所有 M-LAG 成员口纳入维护或临时隔离,升级完成、设备重新加入 dfs-group、一致性检查通过后再升级另一台。

# 割接前
display dfs-group 1 m-lag brief
display dfs-group 1 m-lag consistency-check
display dfs-group 1 m-lag troubleshooting
display device          # 确认主备角色

# 升级一台后
display dfs-group 1 m-lag brief
display dfs-group 1 m-lag troubleshooting verbose
display eth-trunk verbose | include "State|Active"

# 确认业务恢复
display interface brief | include up
display cpu-usage
display logbuffer | include -i "M-LAG|DFS"

常见告警与处理思路

  • 一致性检查告警(strict 模式):说明关键配置(Type 1)两端不一致,处理顺序是"先看告警项、再对照两端配置、最后统一配置",不要直接切到 loose 模式掩盖问题。
  • peer-link 状态异常:检查物理链路与成员口状态;peer-link 中断时 M-LAG 会进入保护状态,业务可能单边转发,应尽快恢复而不是长期运行在该状态。
  • 双主(double-active):两台设备都认为自己是主设备,通常由心跳链路同时中断引起,此时必须确保心跳链路与会话链路分离,避免同一条链路故障同时打断两个平面。
  • 服务器侧只有一个成员口活跃:优先检查两端的 LACP 系统优先级与成员口模式,再检查服务器网卡自身的 LACP 配置。

巡检脚本示例

M-LAG 的问题往往不是"突然坏掉",而是配置在多次变更中逐渐漂移。把下面的检查项写成脚本,纳入每日巡检并保存输出,漂移会在出问题之前暴露。

#!/bin/bash
# 华为交换机 M-LAG 日常巡检(需在设备上执行或通过 SSH 批量下发)
for cmd in "display dfs-group 1 m-lag brief" \
           "display dfs-group 1 m-lag consistency-check" \
           "display eth-trunk 20 verbose" \
           "display dfs-group 1 m-lag troubleshooting" ; do
  echo "==== $cmd ===="
  echo "$cmd"
done
# 关注点:
#   1) 主备角色是否与设计一致(priority 大的为主)
#   2) 一致性检查是否有 FAIL 项
#   3) 成员口 Active 数量是否与设计一致
#   4) troubleshooting 是否存在最近故障记录

常见问题(FAQ)

M-LAG 和 iStack 能不能混用?可以在不同层次使用,例如接入用堆叠、汇聚用 M-LAG,但同一对设备之间不要同时按两种方式组网,配置和故障定位都会变得复杂。

一致性检查应该选 strict 还是 loose?生产环境建议 strict:不一致时立即告警,避免"状态正常但业务异常"的隐蔽故障。loose 只适合变更窗口期间临时放宽。

peer-link 需要几根线?至少两根并做成 Eth-Trunk,且与心跳链路分离;peer-link 承载故障时的跨设备流量,单根线会同时成为带宽瓶颈和单点故障。

服务器需要改配置吗?通常不需要。M-LAG 对服务器呈现为一个标准的 LACP 聚合组,只要系统标识与成员数符合预期,服务器侧无感知。

相关内容

延伸阅读:华为交换机Eth-Trunk链路聚合配置:手工模式与LACP模式、华为交换机堆叠:iStack 与 CSS 的区别和选择(中文指南)、Huawei VXLAN Distributed Gateway with BGP EVPN Config

原文链接:https://support.huawei.com/enterprise/en/doc/EDOC1100198444/bfcb12e8/m-lag-configuration-commands