先说我亲身经历的一次“翻车”。几年前帮一家公司做办公网改造,核心还是两台孤立的核心交换机,一台做主、一台闲置,主设备某天深夜电源模块老化宕机,整层楼业务全断,备用设备虽然是好的,但没有配置同步,也没人敢直接切,愣是折腾到天亮。那次之后,我就把“堆叠技术”四个字刻进了方案模板里。后来帮客户用华为、H3C的设备各做过几次堆叠改造,才真正理解市面上这些堆叠配置命令为什么长这样、各厂商之间差在哪儿。这篇文章就把我积累的原理、部署规划、厂商命令和踩坑经验一次讲透。
堆叠技术是什么?说白了,就是通过专用的堆叠链路和协议,把多台物理交换机组合成一台逻辑交换机来管理、转发和维护。逻辑上是一台设备,对外一个管理IP,配置一份,表项全局同步;物理上却是好几台设备,哪怕其中一台挂了,剩下几台还能继续干活。适合谁看?刚入行的网工,想搞懂堆叠和M-LAG、VRRP区别的人,以及正在做设备选型、准备在现网做堆叠割接的运维工程师。
1. 堆叠的价值与适用边界:为什么方案里总绕不开它
很多新人第一次听到堆叠,觉得这就是“多台交换机连起来一起用”。对,但不完整。干网络这一行,做技术选型首先得搞清楚一个问题:我到底要用它解决什么痛点?堆叠能解决的问题,恰好是盒式交换机最难受的三件事。
第一,端口密度不够。一台48口接入交换机,接终端、接服务器、接上联,端口很快就满了。扩一台设备又得重新规划VLAN、重新配STP,运维成本翻倍。堆叠之后,两台设备变成一个逻辑设备,端口数量翻倍,但配置只有一份,管理面还是一台设备。
第二,链路冗余和带宽扩展的矛盾。普通双上行链路靠STP阻塞一条,链路利用率最多50%。堆叠之后做跨设备Eth-Trunk,两条上联可以同时转发,带宽翻倍,还能做到“设备级+链路级”的双重冗余。这个场景在数据中心接入、园区核心的服务器接入区尤其常见。
第三,设备本身的可靠性不够。单台盒式交换机电源、主控(如果有)、风扇都是单体硬件,坏了就整机宕机。堆叠通过多台设备互相备份,在一台成员故障时,转发面可以由其他成员接管。
不过要泼一盆冷水:堆叠不是万能的。设备故障域变小了,但如果整个堆叠系统因为升级、误操作或者堆叠链路断裂出现问题,影响面反而比单台更大。而且堆叠系统的控制面仍是“主备”或者“多主”模式,主设备故障时选举和切换有一个秒级过程,对丢包零容忍的核心场景,很多时候直接用框式双主控,或者用M-LAG/跨设备链路聚合组这类“控制面独立、转发面虚拟成一台”的技术,比堆叠更稳。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 堆叠原理里最容易被忽略的三件事:角色选举、拓扑协商和分裂检测
堆叠的技术原理一定要吃透三件事,否则后面配置、排障都非常容易懵。
2.1 角色选举与成员编号:谁是主,谁是从,名字怎么起
堆叠系统里,每台成员设备都会被赋予角色。以华为和H3C为例,角色通常分为主设备(Master/Active)和备设备(Standby),其余成员有些厂商还细分出从设备(Slave)。主设备负责管理整个堆叠系统:配置管理、拓扑维护、表项同步、协议计算等。
那主设备到底怎么选?一般规则是:优先级越高的越可能成为主;优先级相同,则MAC地址小的一方优先;还有一种情况是设备先启动完成、先进入堆叠协商,也可能直接成为主。所以如果你希望某台设备稳定地成为主设备,不能靠“谁先开机”这种听天由命的办法,必须配置明确的优先级,同时把优先级数值写清楚。华为和H3C体系里默认优先级大多是1,可配置范围通常到32;思科则是priority值越大越优先。
再说成员编号,这个容易被忽略但影响很大。堆叠一旦建立,每台成员设备会得到一个成员编号(Member ID/Slot ID)。成员编号不只是个名字,它直接决定了接口的命名规则。比如:一台华为S5720,编号1,它的物理接口在堆叠成立后就会以“GigabitEthernet1/0/1”这样的格式出现;编号2的设备,接口就变成“GigabitEthernet2/0/1”。所以规划成员编号要尽量固定,不能今天两台设备编号都叫1,明天又改来改去,改编号往往需要重启设备,而重启可能影响现网。
成员编号还有一个“集团大忌”问题:很多人在开局配置堆叠时,忘了给第二台设备重新编号,导致两台设备都是默认的成员1。你想想,两台设备接口编号体系完全冲突,配置同步过去之后接口全是乱的,堆叠端口也绑定不上。开局配置时先明确谁做成员1谁做成员2,是非常基础但必须做对的一步。
2.2 堆叠线与拓扑协商:从插线到“合体”的数秒里发生了什么
两台设备建立堆叠,不是插一根线就能立刻合并的。整个过程大致可以概括为:成员发现、拓扑收集、角色选举、系统参数收敛、配置同步。
成员发现靠的是堆叠协议报文。设备通过专用的堆叠口或者绑定了堆叠模式的高速业务口持续发送堆叠心跳报文,报文里带着自己的成员编号、优先级、MAC地址、软件版本等信息。两台设备互相发现后,开始交换拓扑信息,每个设备会知道自己连接了哪些邻居,整个堆叠网络里有哪些成员。
拓扑收集完成后进入角色选举。这一个环节跟STP选举根桥的逻辑有些类似,比较优先级和MAC,最终选出一个主设备。当选出主设备后,整个堆叠系统会统一使用主设备的系统MAC作为对外转发的桥MAC,然后主设备把配置、路由表、MAC表项同步给所有成员。
这里有一件现网中经常遇到但文档里写得比较分散的事:堆叠拓扑分链形和环形。链形就是第一台连第二台、第二台连第三台,首尾不相连;环形就是首尾再连起来。除开堆叠线缆物理长度的限制之外,首选环形,因为环形链路即使一根断了,整个堆叠系统依然能保持互联。如果只有链形而且中间某段断了,拓扑很可能会分裂成两个堆叠系统,直接触发脑裂,业务影响非常大。
软件版本一致性也是协商的重要条件。多数厂商要求参与堆叠的设备大版本必须相同,有些允许小版本有差异,但强烈建议在开局前把两台设备的软件版本升级到完全一致。版本不一致导致的症状也很典型:堆叠口能起来,物理层Up,但协议一直协商失败,日志里反复报“堆叠参数不一致”。
2.3 堆叠分裂和检测:脑裂比单机故障更可怕
堆叠会分裂,这是很多人没认真想过的场景。假设堆叠链路中间某一段断了,系统从环形变成链形?不一定。如果恰好是中间链路断裂,两边各自的设备仍然能通过自己的堆叠口协商到成员,并且都认为自己是独立的堆叠系统,都持有原来的系统MAC和配置,同时对外提供转发服务。
这就产生了“脑裂”,网络中同时出现两台“逻辑主设备”,配置可能漂移、网关MAC来回跳、广播风暴频发。为了防止这种情况,几乎所有主流厂商都在堆叠方案里标配了分裂检测机制。华为叫DAD/BFD MAD,H3C叫MAD,思科叫Dual-Active Detection,锐捷在VSU里有双主检测。
原理并不复杂:在堆叠系统正常运行时,主设备通过一条独立的三层链路(不经过堆叠口)周期性地向外发送探测报文,从设备会检测这个报文。正常情况下,所有成员都能收到主设备发来的检测报文,所以维持正常工作状态。一旦堆叠链路断了,从设备发现自己收不到主设备的检测报文,就会判断自己所在的“半边”已经变成了无主状态,于是主动关闭自己的业务口,或者把业务口置为ERROR-DOWN,从而避免两个“堆叠脑”同时转发流量。
所以配置堆叠时,分裂检测链路绝对不能省。很多人以为只要堆叠口做了冗余,就没有必要再拉一根检测线,这是错误认知。堆叠链路负责转发和协商,分裂检测链路是最后一道保险,两者互不替代。多花一根线,避免一次全网广播风暴,这笔账怎么算都值。
3. 部署前先画两张图:成员规划表和物理连线规范
在实际操作里,堆叠配置命令本身通常不难,真正出问题的大多出在“规划没做细”。我给自己的习惯是,开工之前在纸上做一张成员规划表,把下面的信息列清楚:
- 设备型号:同一型号或同一系列,跨型号尽量不做堆叠
- 软件版本:所有成员统一到一致的版本
- 成员编号:主设备为成员1,备设备为成员2(按实际拓扑扩展)
- 优先级:主设备比备设备高,差值至少2以上
- 堆叠口规划:成员1用哪个口对成员2的哪个口
- 分裂检测方式:DAD/BFD MAD、直连检测或聚合链路检测
- 管理IP与业务VLAN规划
3.1 物理连接怎么做,才不会形成假冗余
我见过一个很典型的错误配置:两台设备要做堆叠,A设备的堆叠口1接B设备的堆叠口1,A设备的堆叠口2接B设备的堆叠口2。看起来是两条链路,实际上构成的是一个“交叉连接但逻辑绑定的错误连线”,如果厂商要求堆叠口必须按“本端1对端1、本端2对端2”,这其实是合规的环形两根线,问题是如果物理上是A的1接B的1、A的2接B的2,那么当其中一根线断了,另外一根还连着,两个设备之间仍然是一根堆叠链路,能维持运行,不算分裂;但是当你想把同一组口绑定成聚合堆叠口时,有可能会因为接口实际是交叉的B口,导致协商失败。
真实情况要看具体设备文档。一些华为框式设备的CSS,要求两台设备的CSS口交叉互联,也就是本端CSS口1连对端CSS口2,本端CSS口2连对端CSS口1,目的就是为了避免某种接线回环;而有些盒式设备则没有这么严格的交叉要求。所以“接线不能想当然”是硬道理,现场操作时一定要看设备背面的端口标识和文档的互联矩阵图。
两块设备的堆叠物理口,建议至少预留一对专门用于堆叠,不要跟业务口混用。如果业务流量很大、堆叠口协商速率下降,或者堆叠口之间有光照衰减,极容易导致堆叠链路质量下降进而产生分裂。堆叠口通常使用专用堆叠线缆(例如思科的StackWise线缆)或者高速光模块,普通千兆电口/光口虽然不少厂商也支持,但不建议在核心层这么干。
3.2 MAD检测链路与堆叠系统在现网中的“业务接口”规划
做分裂检测链路规划时,重点想清楚这条检测链路用什么承载方式。
华为iStack常见的有两种模式:直连检测方式和BFD MAD检测方式。直连检测方式需要把两台成员设备之间的一条业务口用堆叠口之外的一条物理链路直接连接起来,创建Eth-Trunk并在里面开启MAD检测;BFD MAD方式则更适合跨设备且没有直连物理链路的场景,但需要提前规划好一个独立的VLAN和IP网段,专门用于BFD报文互发。
这里要特别提醒:不要让MAD检测的BFD报文和业务报文混在同一个VLAN里,也不要把MAD检测口放进业务Eth-Trunk。否则MAD检测口一旦震荡,会连带整个业务聚合链路抖动,甚至触发误检测。
还有一条很容易踩坑:配置检测链路的IP地址,不要跟设备管理地址同一个网段。因为检测触发后,备设备会把自己业务口shutdown,只留检测口和管理口在线。如果管理地址同网段,有可能因为路由振荡导致网管彻底找不到这台设备。
3.3 版本和配置文件检查清单
部署前的现场检查和部署后的验证同样重要。具体可以按这个清单过一遍:
- 使用display version/display device命令确认软件版本一致
- 使用display elabel或通过lldp确认设备型号一致
- 确认设备风扇、电源、光模块工作状态正常
- 确认当前配置里没有残留的陈旧接口配置
- 确认所有设备时间基本同步,避免证书或日志层面的时间错乱
- 确认堆叠口绑定的物理口速率一致(比如两边都用40GE或都用100GE)
开局配置遵守“先配置、再连线、最后重启”的顺序,很多设备在运行中插入堆叠线会直接触发堆叠建立,如果配置没准备好,容易造成意想不到的震荡。稳妥的办法是先把所有设备配置好,再按照文档要求连接堆叠链路,最后重启(如果必须重启才能生效的话)。
4. 主流厂商配置命令逐条拆解:华为、H3C、思科、锐捷
命令这部分是很多人最想直接抄作业的。为了不误导大家,我先把话放在前面:各厂商不同系列、不同软件版本的命令细节会有差异,下面给出的命令是在当前主流版本上验证过的配置逻辑,核心是让你掌握“配置对象”之间的一一对应关系。真到现场,请用display version查完版本后,再对照该版本的命令手册执行。
4.1 华为:iStack和CSS的配置逻辑
华为常见把盒式交换机的堆叠叫做iStack(Intelligent Stack),框式交换机的集群叫CSS(Cluster Switch System)。两者配置思路相近但细节有区别。以S系列盒式交换机(比如S5720、S5730系列)为例,配置步骤是这样的。
先配置成员编号和优先级。假设两台设备,希望设备A作为成员1并成为主设备,设备B作为成员2。
设备A操作:
bash复制system-view
stack
stack member 1 priority 200
quit
设备B操作:
bash复制system-view
stack
stack member 2 priority 150
quit
如果设备B原本是默认的member 1,需要先改成member 2再配置优先级:
bash复制system-view
stack
stack member 1 renumber 2
quit
改编号后通常需要保存配置并重启,重启后设备B的系统编号才会变成2,接口编号也随之变为2/0/x。
成员编号和优先级配置完之后,绑定堆叠口。现代版本常用逻辑堆叠口的方式:先用interface stack-port进入成员设备的逻辑堆叠口视图,再把物理口绑定进去。设备A上把它的物理口10GE1/0/1配置成堆叠口1/1:
bash复制system-view
interface stack-port 1/1
port member-group 1 member interface 10GE1/0/1
quit
设备B上把它的物理口10GE2/0/1配置成堆叠口2/1:
bash复制system-view
interface stack-port 2/1
port member-group 2 member interface 10GE2/0/1
quit
注意,华为部分旧版本里stack-port是全局模式下的配置方式,比如stack port 1/1 enable这种写法。用新版本做开局时,建议直接使用interface stack-port这种逻辑视图,清晰且不容易冲突。
CE系列框式设备一般用CSS配置,命令大概是:
bash复制system-view
css enable
css member 1
css member 1 priority 200
css port 1
port bind interface 100GE1/1/0/1
也就是把100GE口绑定到CSS逻辑口1。框式设备和盒式设备虽然命令不同,但配置对象依然是“成员编号、优先级、堆叠逻辑口、物理口绑定”这四件事。
保存配置后,将两台设备按要求连接堆叠链路,重新启动。重启后再登录主设备,用display stack查看堆叠成员,用display stack configuration查看配置信息,确认成员和端口都处于正常状态。
4.2 H3C:新华三交换机配置命令里的压轴戏
在H3C体系里,堆叠叫IRF(Intelligent Resilient Framework,智能弹性架构)。很多人搜索H3C交换机配置命令,十有八九就是冲着IRF来的。H3C把逻辑堆叠口叫做IRF端口,IRF端口的编号是“成员编号/端口编号”,这个编号规则是理解IRF配置的关键。
设备A作为成员1,设备B作为成员2。设备A配置:
bash复制system-view
irf member 1 priority 32
irf-port 1/2
port group interface Ten-GigabitEthernet1/0/2
quit
第一行的irf member 1 priority 32设置成员1优先级为32,IRF中优先级越大越容易成为主设备。随后进入irf-port 1/2,把物理接口Ten-GigabitEthernet1/0/2绑定到这个IRF端口。
设备B配置前先改成员编号,因为出厂默认也是成员1:
bash复制system-view
irf member 1 renumber 2
quit
save force
reboot
重启后设备B的接口编号就变为Ten-GigabitEthernet2/0/x了。此时再给设备B配置:
bash复制system-view
irf member 2 priority 1
irf-port 2/1
port group interface Ten-GigabitEthernet2/0/1
quit
设备A和设备B绑定的IRF端口正好交叉对应:A的irf-port 1/2对B的irf-port 2/1。如果有多条堆叠链路,可以在A上加irf-port 1/1并在里面继续绑定另一组接口,B上则对应配置irf-port 2/2,形成环形组网。
配置完检查IRF配置:
bash复制display irf
display irf topology
最后保存配置,把两台设备断电重启。重启后两台设备会通过IRF链路自动完成协商和合并。新版本H3C支持ISSU平滑升级,但对大多数现网场景,稳妥操作还是先升级版本到统一,再做IRF合并。
H3C的MAD配置也是加在IRF配置里的。常见的BFD MAD检测方式,先规划一个专用VLAN,把两台成员设备的检测口加进去,然后在系统视图下配置:
bash复制irf
mad bfd enable
mad detect interface Ten-GigabitEthernet1/0/1 vlan 4090
quit
注意,H3C要求成员设备间先行建立BFD MAD检测的VLAN接口和IP地址,否则mad detect这条命令有可能会因为物理口未加入VLAN而报错。实际配置时建议把接口加入VLAN、配置vlan接口IP,然后再开启mad detect。
4.3 思科:StackWise和StackWise Virtual的“轻配置”哲学
思科的StackWise很“懒人友好”。Catalyst 3750/3850这类设备使用专门的StackWise线缆,把交换机后面的StackWise口按顺序连接起来,设备通电后会自动协商堆叠,不需要像华为、H3C那样手动绑定堆叠口。要做的主要工作其实是设置成员编号和优先级。
比如想让交换机1成为主交换机:
bash复制switch 1 priority 15
switch 1 renumber 1
switch 2 renumber 2
renumber操作在保存配置并重启后生效。通过show switch可以查看堆叠成员信息:
bash复制show switch
show switch stack-ports
show switch neighbors
思科的StackWise模式下,堆叠链路由硬件自动完成,所以传统思科盒式设备的配置量远小于其他厂商。但因为StackWise线缆是私有物理接口,选型时要特别注意线缆和设备的兼容性,混用型号可能导致堆叠无法建立。
到了Catalyst 9500等新一代设备,思科开始主推StackWise Virtual,它是通过高速业务口做虚拟堆叠,并且在配置上又回到了“把物理口绑到虚拟堆叠逻辑口”的思路,大体逻辑是:
bash复制interface port-channel 10
no switchport
exit
interface TenGigabitEthernet1/1/1
channel-group 10 mode on
exit
interface TenGigabitEthernet1/1/2
channel-group 10 mode on
exit
stackwise-virtual
stackwise-virtual link 1
interface port-channel 10
这里的关键是先建立一条port-channel,再把它指定为StackWise Virtual链路。同时还要配置双主检测:
bash复制stackwise-virtual dual-active detection
dual-active detection interface port-channel 20
思科命令体系和其他厂商的巨大差别在于它很强调port-channel这个中间概念:先做链路聚合,再做堆叠链路绑定;而华为和H3C是直接绑定物理口到逻辑堆叠口。理解了这个思路差异后,看思科配置手册就不会乱。
4.4 锐捷:VSU的配置要点
锐捷的高端交换机堆叠技术叫VSU(Virtual Switch Unit,虚拟交换单元)。国内锐捷在教育、政府、企业市场铺量很大,尤其在“锐捷交换机配置聚合端口命令”这类搜索里,很多问题其实都发生在VSU场景。
锐捷VSU首先要启用虚拟化功能。在设备上执行:
bash复制switch virtual enable
switch virtual domain 1
switch virtual member 1 priority 150
启用之后,还需要选择堆叠物理口并绑定到VSL(Virtual Switch Link,虚拟交换链路)。锐捷不同系列对“物理口绑定”这一步的命令表达差异较大,有些版本需要进入物理口视图下执行switch-virtual-link相关命令,有些使用独立视图。这里不写死某一条具体语法,原因是不同RGOS版本的绑定命令已经历过多次变化,直接照抄旧文档在新版本上很容易报错。通用做法是进入全局配置模式后,使用“?”帮助查看switch virtual相关命令,并对照当前版本文档执行。
VSU配置完成后,查看状态命令一般用:
bash复制show switch virtual
show switch virtual config
show switch virtual link-status
出现两台设备成员信息都正常、VSL链路Status为Up时,VSU建立成功。
如果要做跨设备链路聚合(这是锐捷VSU的重要卖点),命令和单台设备上做链路聚合基本一致,把两台成员设备上的物理口加入同一个聚合口即可。例如跨设备把Te1/0/1和Te2/0/1加入聚合口1:
bash复制interface AggregatePort 1
switchport mode trunk
exit
interface Te1/0/1
port-group 1 mode active
exit
interface Te2/0/1
port-group 1 mode active
由于VSU把两台设备虚拟成了一台,跨设备的两个物理口在逻辑上就像同一台设备的不同端口,所以可以放进同一个聚合口。这就是堆叠和跨设备链路聚合组合使用的典型配置,也是很多人理解的“锐捷聚合端口命令”的堆叠版本。
4.5 中兴与其他厂商的补充提醒
国内还经常碰到中兴交换机。中兴ZXR10系列对应堆叠/集群的技术叫VSC(Virtual Switching Cluster,虚拟交换集群),配置中也存在虚拟域、成员优先级、堆叠链路绑定这几个概念。由于中兴不同RGOM/RGOS类版本命令差异更大,这里没有一刀切的模板。现场思路是先把“成员编号、优先级、虚拟域编号、物理堆叠链路绑定”四个对象找齐,然后用“?”和display命令逐步逼出完整语法。学会这种“用厂商自己的帮助系统找命令”的方法,比背任何一家厂商的命令都可靠。
5. 配置完只是开始:验证命令、备机重启和升级的经典翻车现场
堆叠命令配置完、设备重启完成后,工作只完成了一半。接下来要做的事,是验证状态并处理那些很容易在现网翻车的细节。
5.1 验证堆叠成立的核心状态命令
华为设备上,我用得最频繁的三条命令是:
bash复制display stack
display stack member
display device
display stack可以看堆叠系统当前的主备角色、成员状态、堆叠优先级;display device可以看到每台成员设备的单板状态,确认所有成员的单板都处于Normal状态。
H3C设备上对应的命令是display irf,显示成员数、每台成员的编号、优先级、角色和IRF端口状态。出现两个成员且Status为Master/Standby,就是正常状态。display mad可以查看分裂检测的状态。
如果遇到堆叠口起不来,经常需要看的是接口物理层是否Up、堆叠协议是否协商成功。华为侧可以看display interface stack-port,H3C侧可以看display irf port。物理口Up但逻辑堆叠口Down,基本可以断定是线序或版本不一致的问题。
5.2 备机重启为什么会把整个堆叠带崩
这是一个真实翻车案例。某次现网割接,主备两台设备堆叠成功了,备设备上有个模块疑似故障,工程师想重启备设备观察一下,就直接在备设备上执行了reboot。结果重启过程中整个堆叠系统对外中断了好几分钟,主设备也跟着受影响。为什么会这样?
大多数堆叠系统是“控制面主备、转发面所有成员共同转发”的架构。虽然主设备负责控制面,但很多业务的表项同步、MAC学习、ARP处理在主设备上完成,备设备承载着大量转发任务,重启时它的MAC表项和ARP表项会全部消失,同时堆叠系统要重新收敛拓扑和成员表项,期间可能会出现流量转发黑洞。如果重启的是从设备,部分设备还会触发“堆叠合并/分裂”的重新协商流程,这个过程中主设备CPU也可能被协议报文打满。
所以,在现网上重启堆叠成员设备,必须有窗口、有预案。没有极特殊情况,不要在高峰时段单独重启堆叠里的某台备机。重启前可以用命令把该成员的流量先切走,比如通过关闭该成员上的业务口或者把相关Eth-Trunk成员口shutdown,让流量全部经由其他成员转发,再执行重启。
5.3 堆叠软件升级:最容易把现网搞挂的操作
堆叠的版本升级比单台交换机升级风险大得多。因为堆叠系统要求所有成员版本一致,升级时必须考虑“先备后主”还是“整系统升级”,不同厂商的支持能力不同。
华为的iStack和H3C的IRF通常支持ISSU方式平滑升级,也就是说先在备设备上升级,备设备起来后自动同步配置,再主备倒换,然后在新的备设备(旧主设备)上升级。这种升级过程看似平滑,但对版本差异有严格要求,跳版本升级时经常失败。保守做法是在业务低峰期,先把堆叠系统整体降级为单机模式(临时拆堆叠),或者在确保有回退方案的前提下,逐台升级并验证。
我个人的建议是:除非设备支持成熟的ISSU且版本路径经过验证,否则不要在核心堆叠上玩“现场平滑升级”。老老实实做变更窗口,按“备份配置 -> 拆掉堆叠链路 -> 逐台升级 -> 重建堆叠”的流程走,虽然停机时间稍长,但风险完全可控。堆叠技术的本质是冗余,但如果冗余系统本身在升级过程中出了幺蛾子,整网瘫痪的后果比单台设备严重得多。
5.4 分裂后的应急处理思路
假设某天凌晨,监控平台突然报“堆叠分裂”,网管登录备设备发现业务口全是ERROR-DOWN。这时候第一反应不是去恢复业务口,而是先厘清故障范围。
先看堆叠链路和分裂检测链路的状态。如果堆叠链路物理层Down了,就查光模块、线缆和接口;如果是MAD检测误触发,先看是不是检测口本身出问题了,比如检测口Up/Down震荡。
然后要判断谁才是“合法的继续保持工作”的那一半。规则是以检测到主设备的一方为继续工作方,没有检测到主设备的一方会主动关闭业务口。如果判断错误,去把没关业务口的那半边重启了,反而会把好的那半边也搞挂。正确做法是:先检查两台设备上的角色,谁检测到对端、谁认为自己是主,确认出主用堆叠系统所在的那半边,修复堆叠链路后,把关闭业务口的那半边重新启动,让它重新加入堆叠。
还有一种更麻烦的情况:堆叠链路没有物理Down,但通信质量差,导致两台设备反复互相以为对方“消失”,业务口一会儿Up一会儿Down。这种情况最有效的办法是马上检查堆叠口的错误计数和光模块收发光功率,把劣化链路换掉,而不是反复在配置层面折腾。
6. 堆叠、M-LAG与框式双主控:我最终会怎么选型
文章最后,聊一聊我的个人体会。经常有人问我:“堆叠到底是不是最优解?为什么我看到大型数据中心里反而都在谈M-LAG?”
我的观点是:没有绝对最优的技术,只有最合适的场景。堆叠最适合的场景是园区网的接入/汇聚层,以及中小型数据中心接入层。这些场景下,业务规模可控、设备数量有限、运维人力也不多,堆叠带来的“一台逻辑设备、一份配置、统一管理”能极大降低运维成本。两台设备堆叠后做跨设备Eth-Trunk,既能跑满带宽,又能实现设备冗余,性价比确实很高。
但如果是在大型数据中心的核心层或者对丢包极度敏感的业务场景,我更倾向于用M-LAG这类技术。M-LAG让两台设备控制面完全独立、转发面通过Peer-link协商保持一致,一台设备的控制面故障不会影响另一台。堆叠虽然转发面是分布式的,但控制面本质上还是一台“主设备在掌控”,一旦主设备的CPU或软件出现异常,整个堆叠都会受影响。这个架构差异决定了堆叠不可能在所有场景里取代M-LAG。
另外,如果预算允许且端口密度要求高,直接用框式双主控设备是更省心的选择。两台盒式设备堆叠本质上是在“用软件把多台设备变成一台”,而框式双主控本身就支持主控1+1备份、业务板卡按需扩展,可靠性设计更成熟。很多客户在我的建议下,核心层选择了“单台框式设备+双主控”,汇聚层再搭配盒式堆叠,整体成本和可靠性达到了一个很好的平衡。
如果是新入行的朋友,我还是建议你先把堆叠技术亲手搭一遍,不要只在模拟器里看命令。有条件就用真机,没条件就先用eNSP、HCL这类模拟器熟悉配置流程。堆叠配置里的很多细节,比如成员编号变更、逻辑堆叠口绑定、分裂检测,只有亲手做一遍、再把堆叠链路故意断开一次,才能真正理解它的工作方式和故障表现。
我现在做网络方案,反而越来越“保守”——堆叠配置命令要写给运维同事看得懂,拓扑图要画清每个堆叠口和检测口的物理连接,变更前先把回退步骤写出来。这些听起来不够炫技,但往往是让堆叠系统稳定运行多年的真正原因。技术选型和工作习惯都是这样,关键不在于你会不会敲那条命令,而在于你理解这条命令背后解决的问题,以及它可能带来的新问题。
