MCLAG详解:跨设备链路聚合原理、配置与排障实战
MCLAG这个缩写做网络的老哥们应该不陌生但很多刚接触数据中心或园区核心网的朋友第一次听到“多机链路聚合”这个概念往往会和传统的堆叠搞混。今天不绕弯子直接把这个功能的来龙去脉、工作原理、配置要点和我在现网踩过的坑一次性讲清楚。不管你是刚入门的新人还是被客户追问“为什么用MCLAG不用堆叠”的售前这篇文章都能给你一个能直接用上的答案。1. MCLAG到底是什么先讲清楚它解决什么业务问题1.1 从一个网线被拔掉的事故说起先讲个我早年亲历的场景。某个数据中心机房一台接入交换机下联着一台双网卡服务器服务器做了bond两张网卡分别接到两台不同的接入交换机A和B上本意是物理链路冗余。结果某天机房的兄弟打扫卫生不小心碰掉了一根网线服务器业务倒是没断但交换机A上的一堆报警日志立刻刷屏检测到上联口DownSTP拓扑收敛部分业务流量走了备份路径。问题还不大但等A和B之间的互联链路又出了点小毛病整个广播域都开始震荡业务侧反馈时延忽高忽低。这个场景暴露的痛点很明显服务器双归、链路冗余的需求一直都在但传统的STP会阻塞掉一条冗余链路二层的带宽利用率打五折VRRP能做到网关冗余但下联口的跨设备绑定和流量负载均衡又做不了。MCLAG就是为解决这类问题而生的——它让两台独立的物理交换机在外界看来像一台逻辑交换机服务器的两条双归链路可以同时工作既做冗余又做负载分担而且彻底告别STP阻塞链路这种“伤敌一千自损八百”的老办法。1.2 MCLAG的核心概念速览MCLAG全称Multichassis Link Aggregation中文常翻译成跨设备链路聚合或多机链路聚合。它最核心的动作就是把两台物理设备也叫成员设备或peer设备通过一条专用的peer-link链路连接起来然后在这两台设备上分别创建同编号的跨设备聚合口把服务器的双归链路分别接入这两台设备。这样一来服务器的成员口可以散落在两台交换机上但对服务器来说它面对的就是一个标准的二层聚合口行为完全透明。这里有几个关键词需要记牢Peer-link心跳链路/互联链路两台成员设备之间的专用物理链路负责协议报文同步和部分数据流量的跨设备转发。双主检测DADDual Active Detection: 用于检测两台设备之间peer-link断裂的场景避免两台设备同时争抢同一个网关或被监控的IP造成双主冲突。跨设备聚合组在两台设备上创建的、组号一致、成员口逻辑上属于同一个聚合逻辑口的配置集合。主备角色虽然两台设备都在转发流量但控制面通常有主备之分主设备负责部分协议的处理和对外代表整个MCLAG系统。1.3 适合用MCLAG的场景和受众MCLAG最常见的归宿是数据中心的双机接入和园区的核心汇聚层。比如服务器双网卡bond接入两台汇聚交换机或者防火墙、负载均衡器双机旁挂两台核心交换机再或者接入交换机双归到两台汇聚设备形成无环的二层网络。这些场景的共同特点是既要求设备冗余又不想白白浪费一条空闲链路还希望故障切换做到秒级甚至毫秒级。适合读这篇内容的读者除了在机房摸爬滚打的网络工程师还包括做运维架构设计的朋友。因为MCLAG不只是交换机的功能它与服务器的链路绑定策略、上层虚拟化集群的网络配置密切相关运维侧理解了MCLAG的工作方式双网卡bond的模式选择自然就心里有数了。2. 为什么不用堆叠反而要选MCLAG2.1 传统堆叠那些让人头大的坑在过去十来年里很多机房解决设备冗余的首选方案都是堆叠。华为叫堆叠H3C叫IRF锐捷叫VSU本质上都是把多台设备通过专用的堆叠线缆和堆叠口组合成一个逻辑设备。堆叠的好处很明显所有成员设备共享一套控制面和转发表项配置简单、管理方便跨设备链路聚合直接就能做收敛速度也快。但堆叠有一个非常让人头疼的问题所有成员设备实际上是“一套系统”坏一台、升级一台往往会影响整个堆叠系统。特别是跨越物理位置的堆叠比如两台设备一台在3楼机房一台在5楼机房中间通过光纤堆叠一旦这条堆叠链路光模块老化产生的堆叠分裂会让两台设备同时变成“独立”设备争抢同一个IP和MAC地址现网直接瘫痪。我见过最惨的一次事故就是某业务中段的堆叠链路因为光纤尾纤被老鼠咬断两台设备瞬间分裂又瞬间合并整个二层网络震荡了半个小时业务侧打电话都快把机房门槛踩平了。堆叠的另一个隐藏问题是分裂后的“脑裂”风险。堆叠系统靠堆叠链路同步状态一旦链路断了两台设备之间没有一种强力的双主检测机制去快速收敛就会出现两台设备同时转发相同网关、相同MAC的情况这种场景在网络里属于严重事故。虽然有些厂商的设备做了堆叠链路检测的增强功能但天生的架构决定了它无法完全规避跨设备故障带来的风险。2.2 MCLAG的解决思路把“一台设备”换成“两台独立设备”MCLAG的思路则完全不同。它不追求把两台设备“伪装”成一台而是让两台设备各自保留独立的控制面只在特定配置的聚合口上协同工作。也就是说每台设备仍然管理自己的路由表、MAC表仍然有自己独立的系统MAC只是在服务器看到的那个逻辑聚合口上两台设备对外呈现统一的转发行为。这样做带来的直接好处是故障域被隔离一台设备宕机另一台完全不受影响不需要“整机重启”或“整机升级”。软件升级可以一台一台来业务不中断。升级和维护更安全堆叠升级往往需要重启整个逻辑系统MCLAG可以逐台升级配合流量切换策略基本能做到无感知。跨机柜、跨楼层部署更容易MCLAG成员设备之间只需要一条可达的物理链路段不需要像堆叠那样对链路质量和光模块有极高的要求。哪怕Peer-link断了还有双主检测机制能快速响应不会出现两台设备互相抢资源的情况。2.3 一张表看懂MCLAG、堆叠、VRRP的差异很多刚接触的朋友会把MCLAG和VRRP混为一谈毕竟两者都强调“网关冗余”。这里我用一张表直接把核心差异摆出来对比维度MCLAG传统堆叠VRRP设备独立性两台独立设备控制面独立逻辑上一台设备共享控制面两台独立设备控制面独立跨设备链路聚合原生支持双归链路可同时转发支持但依赖堆叠系统稳定不支持下联双归只能靠STP阻塞设备故障影响一台故障另一台独立运行单台故障可能引发整系统风险主设备故障备份设备接管网关升级维护可逐台升级通常需要整系统升级或重启可逐台升级环路防护通过双归检测和peer-link协商二层可无环系统内无环仍需依赖STP适用范围数据中心接入/核心、园区核心中小网络、对单点管理要求高的场合纯网关冗余场景从表上能明显看出来MCLAG在设计理念上强调的是“独立设备、联合转发”而堆叠强调的是“多设备、一系统”。哪种更好不绝对但要论业务的容错能力MCLAG天然比堆叠更有优势。3. MCLAG工作的核心细节几个必须搞懂的原理3.1 控制面怎么配合Peer-link上到底跑什么很多第一次配MCLAG的人最容易犯的迷糊是以为MCLAG像堆叠一样要同步一大堆东西。实际上MCLAG两台设备之间的Peer-link上主要跑的是控制面的协商报文比如LACP报文、MCLAG状态同步报文、MAC地址同步信息等。数据流量只有当流量需要跨设备到达对端成员口时才会通过Peer-link绕行。在华为设备上MCLAG的控制面通过独立的协议报文通常被称为peer-link keepalive和M-LAG报文来同步状态。Peer-link本身往往也承载流量所以通常建议至少用两条物理链路做链路聚合来承载。这里有个细节值得注意在配置Peer-link时建议把peer-link的成员口设置为Trunk口并放行所需的VLAN同时将peer-link口加入一个专用的逻辑接口让它具备高优先级防止被MCLAG自身的选路规则意外阻塞。3.2 双主检测DAD为什么这么关键MCLAG最怕的就是Peer-link断了之后两台设备不知道对方的状态各自以为自己是唯一的主设备同时开始转发报文、响应网关ARP这个场景在网络里等于“双主脑裂”。为了规避这个问题MCLAG必须配置独立的双主检测链路。这条链路和Peer-link无关它是一套独立的探测机制可以通过直连网线、独立VLAN、甚至管理口通道来做。双主检测的原理不复杂两台设备周期性地通过这条检测链路发送心跳报文如果一段时间内收不到对端的报文同时Peer-link也确认处于Down状态设备就会进入“双主故障”流程。此时优先级低的设备会主动把业务口关闭或置为Error-Down从而保证整个二层网络只有一台设备在转发。华为称之为MAD检测机制下的M-LAG场景一般通过独立的VLANIF接口来传递检测报文。3.3 数据面转发模型双归到底是怎么做到负载均衡的MCLAG的数据面转发模型值得单独说一说。服务器的两张网卡一张接到设备A一张接到设备B两台设备各自的聚合口成员号不同但组编号相同。当服务器发送流量时它按LACP协商出来的Hash算法选择一张网卡送出。对MCLAG来说上行流量到达A或B之后由接收设备直接做三层或二层转发不强制走Peer-link只有在目的MAC地址在对端设备的直连端口下时才需要把报文通过Peer-link转发过去。下行流量同样如此。A和B各自学到服务器不同网卡的MAC地址通过Peer-link同步MAC表让两台设备都“认识”服务器的MAC。这样即使流量到达了B而服务器对应网卡实际接在A上B也能通过Peer-link把报文转给A再由A从对应成员口送出去。所以从转发模型上看MCLAG的Peer-link不只是控制通道也是兜底的转发通道。这里有个常见误区以为Peer-link带宽只是用来跑控制报文的于是只配了1条万兆。而实际场景中如果双归流量在下行方向出现跨设备访问Peer-link很容易被打满。我在项目里通常建议Peer-link至少配置4条万兆或2条40GE具体取决于下联服务器的数量和流量模型。4. 主流厂商的MCLAG实现差异和配置实操4.1 华为M-LAG配置思路和关键命令华为的MCLAG功能叫M-LAG在很多中高端框式交换机、盒式接入交换机上都支持。配置的核心步骤大致分为四步接口放通Peer-link、配置M-LAG domain、配置DFS Group和双主检测、最后把下联口加入跨设备Eth-Trunk。拿一台盒式设备举例伪配置结构大致如下# 创建peer-link对应的Eth-Trunk interface Eth-Trunk1 port link-type trunk port trunk allow-pass vlan all m-lag peer-link 1 # 配置M-LAG domain m-lag domain 1 peer-link 1 dfs-group 1 dual-active detect source ip 10.0.0.1 peer ip 10.0.0.2 vpn-instance xxx # 配置跨设备Eth-Trunk两台设备上编号保持一致 interface Eth-Trunk10 port link-type trunk port trunk allow-pass vlan 100 200 m-lag id 10 # 成员口分别接入 interface GigabitEthernet0/0/1 eth-trunk 10需要特别注意的是m-lag id在两台设备上必须一致这是两台设备“识别”同一个跨设备聚合组的关键。而peer-link的编号只需要在本机范围内唯一即可两台设备可以相同也可以不同但为了便于排查建议统一规划。华为的实现中还有一个比较核心的概念是DFS Group它负责M-LAG成员设备之间的状态同步和主备竞争。有些朋友配置时漏了dfs-group导致M-LAG状态起不来这种情况在开局时相当常见。4.2 H3C与锐捷的实现差异H3C这边早期多采用的是IRF堆叠后再做跨设备聚合后来在支持M-LAG的设备上也提供了独立的多机聚合方案但在很多中低端盒式设备上IRF仍然是主要的跨设备链路聚合载体。这带来一个问题如果要获得MCLAG的独立故障域特性必须选用支持独立多机聚合的软件版本和硬件平台。选型时一定要提前确认设备是否支持“独立双机跨设备聚合”而不是只能做IRF。锐捷的M-LAG实现更倾向于“简化堆叠的管理体验”在配置命令上对接触过虚拟化堆叠的用户比较友好。锐捷的M-LAG同样支持独立的双主检测链路且部分框式交换机支持M-LAG和虚拟化同时使用。比如核心框式设备做M-LAG下联接入设备用VSU堆叠再到服务器双归这样组网既保证了核心层的独立设备冗余又兼顾了接入层的高密度端口管理需求。4.3 参数选型和Peer-link带宽规划的建议在真正动手配置之前我强烈建议先做一张简单的对接信息表把以下内容明确下来MCLAG域编号、虚拟网关IP和VRRP实例编号Peer-link使用的VLAN集合和Eth-Trunk编号跨设备聚合组编号、成员口端口号、允许的VLAN列表双主检测链路的接口IP、检测VRF/VPN实例服务器bond模式通常使用LACP模式即802.3ad对端也配置为动态聚合。关于Peer-link带宽我个人有一个经验参考如果下联服务器总数不超过40台且流量以内网数据库、文件存储等南北向为主2条万兆做Peer-link基本够用如果有大量备份流量或东西向存储同步建议4条万兆起步。还有Peer-link不建议跨多跳三层网络承载最好就是两台设备之间的直连物理链路否则时延和链路质量不可控故障时的收敛表现也会受影响。4.4 一个能直接抄作业的组网样例假设一个简单的场景两台核心交换机Core-A和Core-B做MCLAG下挂两台接入交换机Acc-1和Acc-2Acc-1双归到Core-A和Core-BAcc-2同样双归。服务器的双网卡分别接到Acc-1和Acc-2上通过接入交换机的跨设备聚合实现服务器双归。在这个组网里核心层的MCLAG主要承载的是接入设备的双归接入层的MCLAG承载的是服务器的双归两层都做MCLAG时需要注意VLAN的横穿策略和STP的收敛参数。接入层两台设备之间一样要配置Peer-link和双主检测否则接入设备故障时服务器的那两条bond链路无法被核心层感知流量就断了。这种“核心M-LAG接入M-LAG”的组网在数据中心很常见配置逻辑一脉相承关键在于把每一层的跨设备聚合组编号、VLAN集合规划清楚不要让不同层级的网段配置产生冲突。5. 实战中踩过的坑常见问题与排查思路5.1 问题一M-LAG状态死了但业务还是通的有一次现网设备出现了M-LAG状态Down可业务通过生成树兜底还是通了按理说这是“业务没断但隐患很大”的状态。排查时我先查了Peer-link的物理端口状态发现光模块接收光功率偏低链路间歇性出现CRC错误导致M-LAG报文丢包协议状态震荡。这种问题日志里不一定有明显报错需要靠接口的状态计数和光功率历史记录来定位。解决方案是更换对端光模块和光纤跳线并把Peer-link的成员口从2条增加到4条进一步降低单条链路抖动对M-LAG协议的影响。之后把接口下的光功率阈值监控打开提前预警链路劣化。5.2 问题二双主检测链路假死另一个高频问题出在双主检测链路上。某次客户反映两台MCLAG设备一会儿同时拥有网关一会儿又恢复正常业务出现间歇性丢包。通过日志发现双主检测报文超时但链路本身显示是通的。排查后发现客户把双主检测报文和设备的管理报文放在同一个VLAN里管理VLAN的广播域中某些终端发出了大量的组播报文导致设备CPU处理检测报文的优先级被拉低心跳超时后误判双主。解决办法是把双主检测独立到一个专用VLAN并确保这个VLAN里除了两台设备之外没有任何业务终端。这个“专用化”思想在对稳定性要求极高的网络里非常重要不要图省事和业务VLAN混用。5.3 问题三下联服务器流量Hash不均MCLAG组网后通过服务器的多张网卡分别接入两台设备但服务器侧bond的Hash算法如果设置不当容易出现一张网卡跑满、另一张空闲的情况。比如服务器bond配置为主备模式只有一张网卡在转发另一张备用这样MCLAG的跨设备负载分担优势完全发挥不出来。解决方式是服务器侧把bond模式设置为IEEE 802.3ad动态链路聚合同时两端聚合口的速率、双工、VLAN配置完全一致。交换机的跨设备聚合口一般默认用增强型Hash算法可以在成员口下用命令调整报文的HASH因子比如基于源目IP、源目MAC、L4端口等。具体用哪种Hash更均衡可以通过一段时间的接口流量统计来判断多做几次调整对比选一个最贴近实际流量模型的参数。5.4 常见问题速查表现象可能原因推荐排查动作M-LAG状态Down但业务通Peer-link链路劣化、光模块故障、报文超时检查端口光功率、CRC计数、协议报文统计双主检测误报检测VLAN混用业务流量、报文优先级被拉低单独规划检测VLAN排查CPU占用流量全部走Peer-link下联口成员配置错误、MAC表同步异常检查聚合口成员状态、对端MAC表是否同步服务器侧流量不均bond模式错误、Hash算法不匹配统一为动态聚合调整Hash因子升级单台设备后业务闪断升级前未切换流量、MCLAG协商未恢复先手动把流量切到备用设备再逐台升级6. 从实际维护角度补充的几点心得MCLAG功能部署起来并不复杂真正考验人的是对网络模型的理解和排障的耐心。刚接触的朋友如果只在模拟器上敲命令很难体会到现网中光模块、光纤、服务器驱动、生成树收敛这些因素叠加后的真实复杂度。我个人的习惯是在实施MCLAG前先把故障演练清单列出来拔掉设备A的上联光缆、拔掉Peer-link其中一条成员链路、重启设备B、切换服务器的两块网卡绑定的主备角色。每做一次操作记录业务中断的时间和日志中的关键事件。通过这些演练能非常直观地看出MCLAG的收敛速度是否满足业务要求。还有一个小细节想提醒大家MCLAG设备的时间同步一定要做牢靠。很多日志分析都依赖准确的时间戳如果两台设备的时间偏差超过几十秒排障时对事件顺序的判断会出现严重误导。在检查MCLAG状态之前建议先确认NTP或PTP同步正常这虽然听起来和MCLAG没有直接关系但实际排障时帮了大忙。MCLAG作为跨设备链路聚合的成熟技术方案在数据中心和园区网的场景里还会长期存在。理解它的设计初衷、掌握配置方法和排障思路比死记某一家厂商的命令行更值钱。希望这篇内容能帮你在下一次项目中少踩几个坑。