数据中心里最费钱的往往不是设备本身,而是链路的可用性。服务器要双活的网卡,交换机想双归到上联设备,可传统STP一遇到环路就直接阻塞端口,LACP链路聚合又只允许在一台设备上聚合端口——两个需求凑在一起,就成了很多网络工程师头疼的事。华为数据中心交换机上的M-LAG(Multi-Chassis Link Aggregation Group,跨设备链路聚合组)解决的就是这个核心矛盾:让两台CE交换机在逻辑上“伪装”成一台,对外提供统一的链路聚合端口,对内通过peer-link同步状态和转发信息。这篇文章我打算直接展开一个最常见的部署形态——级联M-LAG,也就是汇聚层一对CE做成M-LAG,接入层另一对CE也做成M-LAG,两层M-LAG级联起来承担整个数据中心的东西向和南北向流量。全文会包含我自己梳理的配置示例、验证命令和踩坑记录,给正在规划或调试华为CE系列交换机M-LAG的朋友做一个可以直接参考的蓝本。
1. 级联M-LAG到底是什么,它和普通M-LAG差在哪
1.1 M-LAG的基本模型,先花两分钟对齐概念
要把级联M-LAG讲清楚,必须先回到M-LAG本身。M-LAG本质上是一种“把两台物理交换机变成一台逻辑交换机”的技术。两台交换机之间会建立一条peer-link,也就是M-LAG成员设备之间的心跳和数据同步通道。业务侧的服务器、交换机或其他网络设备通过LACP动态聚合或静态聚合的方式,把链路分别接入这两台设备,但在对端设备看来,自己是在和“一台”交换机建立聚合链路。
为什么需要peer-link?因为两台设备要对外表现出一致的LACP协商结果、MAC地址表和ARP表。以LACP协商为例,正常情况下服务器发出一组LACP报文,只有一台设备应答时才能真正建立聚合链路。M-LAG通过peer-link把两台设备的状态粘合起来,服务器跟A设备协商的时候,M-LAG系统会让B设备的LACP状态也保持一致,这样服务器的双网卡bond才能在两台交换机上都处于活动状态。
M-LAG带来的收益很明显:服务器不再依赖STP实现冗余,两条上联链路可以同时工作,转发效率翻倍;交换机宕机一台,另一台完全接管,对服务器而言几乎无感知;而且不像传统堆叠那样共享控制平面,M-LAG的两台设备在管理上仍是独立的,升级、维护可以单台灰度操作。这些优点让它成了数据中心接入层、汇聚层的主流冗余方案。
1.2 “级联”这两个字的真实含义
华为CE系列交换机的M-LAG文档里,部署形态其实分了直连模式和级联模式。直连模式很好理解,就是两台成员交换机在同一个机柜或者相邻机柜里,peer-link直接用光纤或者高速线缆短距离拉通。大部分机房里的接入层M-LAG都是这种形态。
级联模式则是指两台M-LAG成员交换机之间没有直接的物理链路连接,或者peer-link不通过直连链路建立,而是必须跨过三层网络、VXLAN隧道或者其他转发设备才能互通。这种模式下,两台成员交换机可以放在不同的机柜甚至不同的机房,peer链路不再是一条短距离物理链路,而是一条穿越“级联网络”的逻辑链路。
但在真实的数据中心组网里,“级联M-LAG”还有一个更广义、出现频率更高的理解——多级M-LAG的串联组网。也就是说汇聚层的两台CE组成第一对M-LAG,接入层的两台CE组成第二对M-LAG,每一对内部都有独立的peer-link,但接入层这台“虚拟交换机”又双归接入到汇聚层那台“虚拟交换机”上。这个完整的结构从网络层级上看,就像两台虚拟交换机一级一级串下去,所以叫级联M-LAG。
我这次要写的配置示例,就是这种两级M-LAG级联的完整形态。需要提前说明的是,这套配置在各版本CE交换机上细节略有差异,但核心思路是通用的,具体命令以现场设备版本为准。
1.3 直连和级联的关键差异对照
很多新手容易把“级联M-LAG”理解成“把两台设备通过第三台设备做peer-link”,这个理解不算错,但在实际部署中,更常见的还是两层M-LAG叠加。我把两种方式的关键差异整理成了一张表,方便对照:
| 对比项 | 直连M-LAG | 级联M-LAG(两级叠加) |
|---|---|---|
| peer-link形态 | 两台成员设备之间物理直连 | 每对M-LAG内部各自直连,层与层之间通过上联链路相连 |
| 部署距离 | 同机柜、相邻机柜 | 可跨机柜、跨楼层,只要级联链路可达 |
| 业务链路 | 双归设备接入到同一对成员设备 | 上层虚拟交换机接入下层虚拟交换机,下层再接入服务器 |
| 典型位置 | 接入层双归服务器 | 汇聚层+接入层同时做M-LAG |
| 防环机制 | M-LAG本身通过peer-link同步防环 | 每一级M-LAG分别防环,级联链路需要规划好阻断逻辑 |
| 适用范围 | 小规模、单级接入 | 中大规模数据中心、需要汇聚冗余的场景 |
2. 实验拓扑设计与规划,级联M-LAG第一步是把地址算明白
2.1 两级级联的组网架构
我先给出这次配置示例使用的组网拓扑。整个拓扑分为两层,上层是汇聚层,由CE-A1和CE-A2两台交换机组成一个M-LAG系统;下层是接入层,由CE-B1和CE-B2两台交换机组成第二个M-LAG系统。
两台汇聚交换机之间通过两条物理链路捆绑成Eth-Trunk 1,作为汇聚层的peer-link。两台接入交换机之间同样通过两条物理链路捆绑成Eth-Trunk 1,作为接入层的peer-link。业务链路的走向是:服务器双挂在接入交换机CE-B1和CE-B2上,接入交换机又双归上联到汇聚交换机CE-A1和CE-A2上。
这就是一个非常标准的两级级联M-LAG。从服务器视角看,它接入的是“一台”接入交换机;从接入交换机视角看,它上联的也是“一台”汇聚交换机。每一级M-LAG都把一个物理上的环状连接“掰直”了,所以整个网络不需要运行STP也能做到无环。
2.2 设备选型与接口规划
设备型号上,汇聚层我建议用CE6800或者CE8800系列,这取决于端口速率需求和转发容量;接入层一般用CE6800或者CE5800系列就够。这个示例里为了好读,统一用CE6800描述,型号差异不影响命令逻辑。
接口规划是整个配置里最容易被忽视、也最影响调试效率的部分。我强烈建议在配置前先把表格填好,而不是一边敲命令一边想。以下是我在这次配置中使用的规划表:
| 设备 | 角色 | 接口 | Eth-Trunk编号 | 用途说明 |
|---|---|---|---|---|
| CE-A1 | 汇聚M-LAG成员1 | 100GE1/0/0, 100GE1/0/1 | Eth-Trunk 1 | 汇聚层peer-link(M-LAG peer链路) |
| CE-A2 | 汇聚M-LAG成员2 | 100GE1/0/0, 100GE1/0/1 | Eth-Trunk 1 | 汇聚层peer-link |
| CE-A1 | 汇聚M-LAG成员1 | 100GE1/0/2, 100GE1/0/3 | Eth-Trunk 20 | 下联到接入交换机,带m-lag标记 |
| CE-A2 | 汇聚M-LAG成员2 | 100GE1/0/2, 100GE1/0/3 | Eth-Trunk 20 | 下联到接入交换机,带m-lag标记 |
| CE-B1 | 接入M-LAG成员1 | 10GE1/0/0, 10GE1/0/1 | Eth-Trunk 1 | 接入层peer-link |
| CE-B2 | 接入M-LAG成员2 | 10GE1/0/0, 10GE1/0/1 | Eth-Trunk 1 | 接入层peer-link |
| CE-B1 | 接入M-LAG成员1 | 10GE1/0/2, 10GE1/0/3 | Eth-Trunk 20 | 上联到汇聚交换机,带m-lag标记 |
| CE-B2 | 接入M-LAG成员2 | 10GE1/0/2, 10GE1/0/3 | Eth-Trunk 20 | 上联到汇聚交换机,带m-lag标记 |
| CE-B1 | 接入M-LAG成员1 | 10GE1/0/4 | Eth-Trunk 30 | 下联服务器,带m-lag标记 |
| CE-B2 | 接入M-LAG成员2 | 10GE1/0/4 | Eth-Trunk 30 | 下联服务器,带m-lag标记 |
VLAN和IP的规划也要提前定好。这个示例里业务VLAN使用VLAN 100,网关放在汇聚层;管理VLAN使用VLAN 200,用于设备远程管理。汇聚层两台设备的VLANIF 100的IP地址配置成同一个地址,这是M-LAG三层网关的标准做法——两台设备同时承担网关功能,不跑VRRP也具备网关冗余能力。具体规划如下:
| VLAN | 网段 | 网关 | 说明 |
|---|---|---|---|
| 100 | 10.10.100.0/24 | 10.10.100.254 | 业务网段,网关配置在CE-A1和CE-A2上 |
| 200 | 10.10.200.0/24 | 10.10.200.254 | 管理网段 |
| 1000(内部) | 10.10.0.0/31、10.10.0.2/31 | 无 | peer-link内部互联地址,只在需要跨设备互通时使用 |
2.3 为什么要把网关放在汇聚层,而不是接入层
有不少人问过我,接入层已经做成M-LAG了,为什么不能用接入层做网关?技术上当然可以,但从整个数据中心的流量模型来看,网关放汇聚层是更合理的。
如果把网关放在接入层,那么接入层交换机就需要维护所有的ARP表项和路由表项,一旦VLAN很多、服务器很多,接入设备的控制平面压力会非常大。而把网关放在汇聚层,接入层只负责二层转发,流量通过上行链路直接送到汇聚层网关,汇聚层再根据路由表决定下一步转发。这样的模型下,接入层设备规格可以选小一点,汇聚层统一承载网关、ACL、QoS策略,运维上也更集中。
另外,级联M-LAG的上下行链路全部处于二层,汇聚层做网关后,接入层到汇聚层的所有链路都在同一个广播域里工作,M-LAG的转发逻辑也更简单清晰。
3. 汇聚层M-LAG配置示例,第一级虚拟交换机怎么搭
3.1 配置前的检查和底层链路准备
我建议在实际操作之前,先把设备的端口状态检查一遍。用display interface检查物理端口是否已协商正常,确认互联对端的光模块、光功率没有问题。很多M-LAG配不好的情况,其实不是命令不对,而是物理链路本身就有隐患,等到peer-link建立之后才暴露出大量错包和超时计数。
确认链路正常后,先创建VLAN和Eth-Trunk。这里有一个注意点:peer-link所使用的Eth-Trunk我们一般命名为Eth-Trunk 1,业务接口单独使用其他编号,这样做的好处是后续排查问题的时候,看到Eth-Trunk 1就能立刻反应出这是M-LAG同步链路,不需要再反复确认。
3.2 汇聚层CE-A1的完整配置
以下是我在CE-A1上使用的完整配置,直接按顺序敲即可:
sysname CE-A1 # vlan batch 100 200 # interface Eth-Trunk1 port link-type trunk port trunk allow-pass vlan all mode lacp-static m-lag peer-link # interface 100GE1/0/0 eth-trunk 1 # interface 100GE1/0/1 eth-trunk 1 # interface Eth-Trunk20 port link-type trunk port trunk allow-pass vlan 100 200 mode lacp-static m-lag # interface 100GE1/0/2 eth-trunk 20 # interface 100GE1/0/3 eth-trunk 20 # interface Vlanif100 ip address 10.10.100.254 255.255.255.0 # interface Vlanif200 ip address 10.10.200.254 255.255.255.0 #这段配置里有几个关键点必须解释一下。
第一个是m-lag peer-link这个标记。它表示Eth-Trunk 1这个逻辑接口承载的是M-LAG成员之间的peer链路。M-LAG系统就是通过这条链路同步MAC表项、ARP表项、VLAN配置以及LACP协商状态。peer-link必须放通所有必要的VLAN,我的习惯是直接port trunk allow-pass vlan all,避免后续新增VLAN时遗漏放通导致业务异常。
第二个是Eth-Trunk 20上的m-lag标记。这个标记的含义是:本设备上的Eth-Trunk 20是M-LAG成员接口,它会与对端设备上同样标记了m-lag的Eth-Trunk 20组成一个跨设备的逻辑聚合接口。两台汇聚交换机上的Eth-Trunk 20对外呈现为一个端口组,下联交换机双归接入时,LACP协商出来的状态才能保持一致。
第三个是VLANIF接口。两台汇聚交换机上的Vlanif100都配置成10.10.100.254,这个在M-LAG架构下是允许的。正常情况下,只有一台设备的VLANIF对外应答ARP和转发网关流量,另一台设备通过peer-link学习到相关信息后保持热备状态。
3.3 汇聚层CE-A2的镜像配置
CE-A2的配置与CE-A1基本一致,只有sysname不同。这里有个容易犯的错误:peer-link的Eth-Trunk编号和业务Eth-Trunk编号在两边必须保持一致。如果在A1上Eth-Trunk 20是业务口,但A2上疏忽大意把业务口配成了Eth-Trunk 21,那么两台设备的M-LAG成员关系就无法正确建立,display m-lag的时候会看到状态异常。
以下为CE-A2的配置:
sysname CE-A2 # vlan batch 100 200 # interface Eth-Trunk1 port link-type trunk port trunk allow-pass vlan all mode lacp-static m-lag peer-link # interface 100GE1/0/0 eth-trunk 1 # interface 100GE1/0/1 eth-trunk 1 # interface Eth-Trunk20 port link-type trunk port trunk allow-pass vlan 100 200 mode lacp-static m-lag # interface 100GE1/0/2 eth-trunk 20 # interface 100GE1/0/3 eth-trunk 20 # interface Vlanif100 ip address 10.10.100.254 255.255.255.0 # interface Vlanif200 ip address 10.10.200.254 255.255.255.0 #3.4 汇聚层配置完成后先验证再往下走
配完两台汇聚设备,不要急着去配置接入层,先做一次验证。用display m-lag brief可以查看M-LAG系统的基本状态,重点关注PeerLink状态和M-LAG接口的对账状态。正常情况下,两台设备的M-LAG域ID、系统MAC、VLAN信息都应该一致。
我在实际配置中就遇到过peer-link起来了,但M-LAG成员状态显示Down的情况。后来排查发现是因为Eth-Trunk 1的物理成员端口没有加入完整,其中一个端口被误配置到了其他业务Eth-Trunk里。这类问题光看配置很难发现,用display eth-trunk 1查看成员端口列表一眼就能定位。
4. 接入层M-LAG配置示例,第二级虚拟交换机怎么搭
4.1 接入层M-LAG的基础配置
接入层两台设备CE-B1和CE-B2的配置逻辑与汇聚层几乎一样,区别在于角色变了:接入层一方面作为“虚拟交换机”向下承接服务器的双归链路,另一方面还要作为“被双归的对象”向上连接到汇聚层的虚拟交换机。
先看CE-B1的基础配置:
sysname CE-B1 # vlan batch 100 200 # interface Eth-Trunk1 port link-type trunk port trunk allow-pass vlan all mode lacp-static m-lag peer-link # interface 10GE1/0/0 eth-trunk 1 # interface 10GE1/0/1 eth-trunk 1 # interface Eth-Trunk20 port link-type trunk port trunk allow-pass vlan 100 200 mode lacp-static m-lag # interface 10GE1/0/2 eth-trunk 20 # interface 10GE1/0/3 eth-trunk 20 # interface Eth-Trunk30 port link-type trunk port trunk allow-pass vlan 100 200 mode lacp-static m-lag # interface 10GE1/0/4 eth-trunk 30 #CE-B2的配置除了sysname之外完全对齐:
sysname CE-B2 # vlan batch 100 200 # interface Eth-Trunk1 port link-type trunk port trunk allow-pass vlan all mode lacp-static m-lag peer-link # interface 10GE1/0/0 eth-trunk 1 # interface 10GE1/0/1 eth-trunk 1 # interface Eth-Trunk20 port link-type trunk port trunk allow-pass vlan 100 200 mode lacp-static m-lag # interface 10GE1/0/2 eth-trunk 20 # interface 10GE1/0/3 eth-trunk 20 # interface Eth-Trunk30 port link-type trunk port trunk allow-pass vlan 100 200 mode lacp-static m-lag # interface 10GE1/0/4 eth-trunk 30 #注意一个细节:接入层的Eth-Trunk 20是向上连接到汇聚层的,它带m-lag标记意味着CE-B1和CE-B2两个设备上的Eth-Trunk 20合在一起,向汇聚层呈现为“一个”上联聚合口。这时候,汇聚层A1的100GE1/0/2接到B1的10GE1/0/2,A2的100GE1/0/3接到B2的10GE1/0/3,两条链路共同构成接入层M-LAG系统的上联成员,而汇聚层通过它自己的Eth-Trunk 20并把4个物理成员全业务起来。这样,从汇聚层的视角看,CE-B1和CE-B2就是一个完整的、有四条成员链路的聚合对端。
4.2 服务器双归接入的配置思路
服务器双归到接入层,是级联M-LAG里最内层的双归。服务器上配置bond接口,两块网卡分别连接到CE-B1的10GE1/0/4和CE-B2的10GE1/0/4。在交换机侧,CE-B1上的10GE1/0/4和CE-B2上的10GE1/0/4都被纳入了Eth-Trunk 30,并且两台设备上的Eth-Trunk 30都带m-lag标记。
这样一来,从服务器的视角来看,它是在跟一台交换机上的一个Eth-Trunk 30做LACP协商,两台交换机通过peer-link保持状态一致,服务器两条链路都是激活状态。
4.3 服务器侧的bond配置参考
交换机侧只是M-LAG的一半,服务器侧的bond配置同样重要。Linux服务器上使用mode=802.3ad(LACP动态聚合)时,可以参考下面这个配置思路:
# 编辑/etc/modprobe.d/bonding.conf alias bond0 bonding options bond0 miimon=100 mode=802.3ad lacp_rate=fast # 将两块网口加入bond ip link set ens2f0 down ip link set ens2f1 down ip link add bond0 type bond ip link set ens2f0 master bond0 ip link set ens2f1 master bond0 ip link set bond0 up ip addr add 10.10.100.10/24 dev bond0有几个服务器侧的参数需要特别注意。lacp_rate建议配置成fast,这样LACP报文以1秒为周期发送,M-LAG状态变化时收敛速度更快,能明显缩短链路切换时间。如果服务器网卡驱动不支持动态LACP,也可以选择静态聚合模式来匹配交换机的mode lacp-static,但静态模式没有LACP保活机制,对链路故障的感知会比较迟钝。
4.4 接入层配置时的三个常见误区
第一个误区是忘配peer-link的VLAN放通。有些工程师会认为peer-link只传M-LAG同步协议报文,不传业务报文,于是只放通了少数VLAN。这个想法是错的。M-LAG有一些已知场景会依赖peer链路转发流量,比如单播报文的目的MAC在peer设备下、或者广播/组播报文需要在两台设备之间复制时。peer-link放通VLAN不全会导致上述流量在VLAN级别被丢弃。
第二个误区是Eth-Trunk编号不一致。这个问题我在第3节提过,但接入层犯错的概率更高,因为接入层的业务Eth-Trunk不止一个,编号一多就容易标错。记住一个原则:M-LAG对端设备上所有带m-lag标记的Eth-Trunk编号必须一一对应。
第三个误区是物理成员端口混插到不同的Eth-Trunk。每个物理端口只能加入一个Eth-Trunk,如果规划表上没有标清楚哪个端口进哪个Eth-Trunk,配置时很容易把上联端口和下联端口搞混。我见过最典型的事故是把服务器下行口和上行口配反了,导致服务器通但上联不通。
5. 级联M-LAG的验证命令,从状态查看到业务倒换测试
5.1 用display命令确认M-LAG系统状态
配置全部完成后,验证环节不能省。我每次配置完M-LAG都会按固定顺序执行三个查看命令,逐个确认系统层、接口层和业务层的状态。
第一个命令是display m-lag brief,查看M-LAG系统整体状态:
display m-lag brief输出里重点看M-LAG ID、PeerLink状态和M-LAG接口数量。正常情况下PeerLink状态为Up,M-LAG接口的Active/Standby状态应该和设计一致。如果看到PeerLink反复横跳,说明链路抖动或系统同步异常,需要回到物理层排查。
第二个命令是display eth-trunk 20,查看业务Eth-Trunk的成员链路情况:
display eth-trunk 20关注输出中的成员接口列表,确认所有物理端口都处于Current状态,且LACP协商成功。如果某些成员端口显示Unselected,意味着该成员链路没有参与负载转发,需要检查对端设备相应接口的状态和VLAN配置。
第三个命令是display m-lag verbose,查看更详细的M-LAG信息和双活检测状态:
display m-lag verbose这条命令会显示两台设备之间的协商参数、虚拟系统MAC、双活检测(Bypass/Heartbeat)等关键信息。M-LAG分裂检测正常工作与否,直接影响故障场景下的收敛质量。
5.2 从服务器侧做业务验证
命令状态都正常后,从服务器发起ping和流量测试。我在测试时习惯分三步走:
第一步,从服务器ping网关10.10.100.254,确认二层到三层网关的路径正常。第二步,从服务器ping对端网段的另一台服务器,确认跨VLAN路由和汇聚层三层转发正常。第三步,在服务器上下发持续的大流量,然后依次拔掉接入层的一根上联光纤、接入层peer-link、甚至整台接入交换机,观察业务中断时间和恢复情况。
实际测下来的结果,如果只在接入层拔一根上联光纤,业务几乎无感知,丢包在个位数;如果拔掉接入层peer-link但上联链路还在,M-LAG会进入双活检测和单台接管模式,收敛时间取决于peer-link恢复和LACP重新协商的速度。
5.3 链路故障倒换测试的预期结果
我把自己做过的一次故障演练数据整理成了下表:
| 测试动作 | 预期结果 | 实测说明 |
|---|---|---|
| 拔掉CE-B1到CE-A1的上联链路 | 流量全部走CE-B2上联,无感切换 | 服务器双归链路不受影响 |
| 拔掉CE-B2整机的上联链路 | CE-B1接管全部业务,peer-link状态变为主备模式 | 若配置了monitor-link联动,接入交换机下联口也可能联动切换 |
| 重启CE-B1交换机 | 服务器无感知,流量由CE-B2承担 | 需要注意peer-link恢复后MAC表和ARP表的重新同步 |
| 拔掉服务器到CE-B1的网线 | LACP重新协商,流量全部走CE-B2 | 交换机侧Eth-Trunk 30成员数量减半,但链路聚合不中断 |
做完一轮测试,基本就能确认这套级联M-LAG的可靠性是否符合预期。如果测试结果与预期不符,不要急着怀疑配置,先把物理链路、光模块、协商频率逐一排查掉,再回到逻辑配置上找问题。
6. 常见问题与排查技巧实录
6.1 peer-link反复震荡,M-LAG一直无法稳定
这类问题在第一次配置级联M-LAG时出现频率特别高。peer-link状态Up了又Down,M-LAG系统日志里不断刷peer-link flaps。
我排查这类问题的顺序是:先看物理端口是否有错包和光功率告警,排除光模块问题;再看Eth-Trunk成员端口是否都正确加入,排除部分物理成员不在聚合组里的情况;最后看两端设备的M-LAG配置是否存在不一致,比如peer-link Eth-Trunk编号不匹配、设备角色冲突等。
有一个很容易忽略的点是链路两端速率不匹配。汇聚层是100GE口,接入层是10GE口,中间通过光电转换器或者速率适配设备连接时,如果协商模式不对,会产生大量CRC错包,直接导致peer-link频繁抖动。做级联M-LAG时,上下行链路都要用一致的光模块规格和协商模式,不建议跨速率直连后不做处理。
6.2 M-LAG成员接口对账失败,状态一直无法变成Active
有时候peer-link本身状态正常,但带m-lag标记的业务Eth-Trunk无法正常对账。输出display m-lag brief时,会看到这个接口被标识为Failed或者Down。
这种情况优先检查两侧设备的M-LAG配置一致性。同一台虚拟交换机上的两个成员设备,业务Eth-Trunk的编号、VLAN配置、物理成员端口数量、LACP模式都必须一致。举例来说,如果CE-B1的Eth-Trunk 20里有两个物理成员,而CE-B2的Eth-Trunk 20里只有一个物理成员,除非这个差异是设计上故意保留的,否则对账就会失败。
另外一个常见原因是业务Eth-Trunk的VLAN配置不一致。M-LAG对账时会同步VLAN信息,如果一边放通了VLAN 100而另一边没有放通,业务接口会处于部分工作状态,外部设备发来的流量偶发不通。
6.3 流量路径不对称导致的单向不通
级联M-LAG里最隐蔽的是数据转发路径不对称问题。从服务器A ping服务器B通,但从服务器B ping服务器A不通,排查到最后往往发现是上联和下联的负载分担hash一致性被打破了。
M-LAG本身不会强制要求流量进出走同一台设备,但在级联场景下,如果汇聚层的Eth-Trunk 20负载分担算法和接入层的Eth-Trunk 20负载分担算法不一致,就可能出现请求走A1、响应走A2的情况。如果A1和A2之间的peer-link状态正常,这种路径不对称不会造成丢包,peer-link会做最终的转发交接;但如果peer-link带宽拥塞或者状态不稳定,就会表现为偶发丢包和延迟抖动。
解决办法是确保整条级联链路上各设备的Eth-Trunk负载分担模式保持一致,比如统一使用增强型负载分担算法,把源MAC、目的MAC、源IP、目的IP、源端口、目的端口等字段都纳入hash计算,让报文的往返路径尽可能对称。
6.4 双活分裂后业务中断怎么处理
M-LAG最怕的是双活分裂,也就是peer-link断开但两台设备都认为对方还活着。此时两台交换机同时尝试接管业务,MAC表、ARP表、LACP状态全部失去同步,整个网络等于出现了一个“双主”的假象。
华为CE交换机上解决这个问题的核心机制是双活检测(也常被称为split-brain检测)。当peer-link故障时,设备会通过独立的双活检测链路探测对端是否存在。如果探测到对端仍然存活,设备会按照配置的优先级规则决定谁作为主设备继续转发,谁把业务接口转入备用状态。
配置和排查双活检测时,我的建议是单独规划一对双活检测链路,不要和业务链路混用。检测链路的稳定性直接影响故障时的收敛判断,如果检测链路本身不可靠,反而可能造成错误的主备切换。这个检测方案在不同版本CE设备上支持的形态不太一样,配置前务必确认当前版本的命令语法和参数含义。
6.5 一张问题速查表
| 症状 | 可能原因 | 处理建议 |
|---|---|---|
| peer-link一直Down | 物理链路/光模块异常,Eth-Trunk成员不完整 | 排查物理端口错包,核对成员端口配置 |
| M-LAG接口对账失败 | 两端Eth-Trunk编号或VLAN配置不一致 | 对齐两台设备的业务Eth-Trunk配置 |
| LACP聚合协商不成功 | 服务器bond模式与交换机模式不匹配 | 调整服务器LACP模式,确认lacp_rate |
| 偶发单向不通 | 负载分担hash不一致,路径不对称 | 统一各层Eth-Trunk负载分担算法 |
| 拔链路后业务中断超过预期 | peer-link断裂引起双活分裂 | 检查双活检测链路,确认主备切换策略 |
| VLAN间路由不通 | 汇聚层VLANIF网关配置冲突或缺失 | 核对两台汇聚设备的VLANIF IP和路由表 |
7. 配置级联M-LAG时我的一些实操体会
做了这么多年的网络运维和项目交付,M-LAG在我看来是数据中心网络里“收益极高但细节极多”的技术之一。收益高是因为它把链路利用率从STP时代的一半提升到了百分之百,细节多则是因为它对配置一致性、物理链路质量、故障检测机制都有非常严苛的要求。
如果让我给刚接触级联M-LAG的同行提建议,我首先会说不要急着复制配置,先把拓扑图画清楚、把接口规划表填完整,把VLAN和IP事先设计好,再动手敲命令。配置本身是机械劳动,而设计是智力劳动,90%的问题出在设计环节。
其次,我会建议在实施前把服务器的bond参数也一并确认好。交换机侧M-LAG配得再漂亮,服务器网卡驱动不支持或者bond模式不匹配,业务照样起不来。最好在项目初期就和服务器团队约定好统一的LACP参数,避免实施阶段互相扯皮。
最后,每一级M-LAG配完之后都要通过display命令确认状态,再进入下一级配置。级联M-LAG的调试难点就在于层级多、关联性强,一级出错往往要等到下一级配置完成后才暴露出来。与其到时候抓头,不如每级配置都做一次完整验证,把问题消灭在源头。
希望这篇配置示例能帮正在调试华为CE系列交换机级联M-LAG的朋友少走一点弯路。