1. 数据中心接入场景下,为什么我选了堆叠而不是VRRP
先说一个我最近刚做完的项目背景。客户数据中心接入层原来用的是两台CE6800独立运行,服务器双网卡分别接到两台交换机上,靠VRRP做网关冗余。表面上看高可用是有了,但实际运维中问题不少:两台设备要分别维护配置、VLAN要两边同步、双归服务器的流量转发路径也不对称,排障的时候经常要在一台设备上看半天,再去另一台设备上对半天。后来客户干脆说,能不能把两台设备“变成一台”来管。这就是这次CE6800堆叠配置案例的起因。
1.1 堆叠到底解决了什么问题
堆叠,华为这边叫iStack,本质上是把多台支持堆叠的交换机通过专用的堆叠口互联,在逻辑上合并成一台交换机。对CE6800这种数据中心接入交换机来说,堆叠带来的收益非常直接。
管理面收敛是最直观的好处。两台CE6800堆叠后,你只需要登录一个IP,看到的是一台设备,VLAN、接口、路由配置都在同一份配置里,改一处自动同步到所有成员。这比VRRP方案里两台设备各配各的,省掉的不是一点半点。
控制面冗余是另一个关键点。堆叠系统内有主交换机、备交换机、从交换机的角色划分,主设备故障时备设备能快速接管控制面,业务转发不中断。这个切换速度比VRRP的主备倒换要快,因为堆叠成员之间的状态同步是实时的,不需要像VRRP那样靠Hello报文超时去感知故障。
转发面能力翻倍。两台CE6800堆叠后,所有成员设备的物理端口都属于同一台逻辑设备,配合跨设备Eth-Trunk,服务器的双网卡可以同时工作,一条链路故障后流量自动走另一条,链路利用率从VRRP的“一主一备”变成了真正的负载分担。这一点对数据中心接入场景特别重要,因为服务器流量大,只让一条链路干活另一条闲着,太浪费。
1.2 和VRRP的对比:一张表说明白
很多刚接触堆叠的同事都会问,既然有了VRRP,为什么还要用堆叠?我通常直接用下面这张表来解释:
| 对比项 | VRRP | 堆叠(iStack) |
|---|---|---|
| 管理逻辑 | 多台独立设备,分别管理 | 多台设备虚拟成一台,统一管理 |
| 配置维护 | 需要逐台配置,同步靠人工或脚本 | 主设备配置自动同步到所有成员 |
| 转发模式 | 主备转发,备设备平时不转发业务流量 | 跨设备链路聚合,成员设备同时转发 |
| 故障切换 | 依赖检测报文,秒级或毫秒级 | 控制面实时同步,切换更快 |
| 链路利用率 | 上行链路通常一主一备,利用率低 | 跨设备Eth-Trunk负载分担,利用率高 |
| 部署复杂度 | 需要规划虚拟IP、优先级、抢占等 | 需要规划堆叠ID、优先级、堆叠口 |
| 典型场景 | 传统三层网关冗余 | 数据中心接入/汇聚,服务器双归 |
当然VRRP并没有被淘汰,在核心层、跨机框、跨地域的场景里依然广泛使用,因为它对设备型号和链路的要求更低。但在数据中心接入层,尤其是TOR(Top of Rack)这种场景下,堆叠是更主流的做法。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动手前必须想清楚的三件事:堆叠ID、优先级与堆叠口规划
CE6800堆叠配置本身不复杂,真正翻车的基本都是前期规划没做好。我总结下来,动手之前必须把三件事定下来:堆叠ID怎么分配、主设备怎么选、堆叠口怎么连。
2.1 堆叠ID决定了配置归属
堆叠ID是每台成员设备的唯一标识,范围是1到9。这里有个容易忽略的点:CE6800出厂时所有设备的堆叠ID默认都是1,如果不改,两台设备一启动就会发现ID冲突,堆叠根本建立不起来,或者建立后配置归属混乱。
堆叠ID还直接影响接口编号。假设你给一台设备改了堆叠ID为2,那这台设备的所有接口编号就会从原来的1/0/1变成2/0/1。这个变化非常关键,因为你在配置里写的所有接口都得跟着变。实际操作中,我习惯用机柜位置来规划堆叠ID,比如机柜底部的设备用ID 1,上面的用ID 2,这样看到接口编号就能猜到是哪台设备,排障时省不少事。
修改堆叠ID的命令是stack member 1 renumber 2,这条命令执行后需要保存并重启才能生效,而且会清除该设备上的原有配置。这个“清除配置”的特性特别坑,后面踩坑部分我会详细说。
2.2 优先级:主设备选举的关键
堆叠系统启动或成员加入时,会通过选举确定主设备。选举规则很简单:优先级高的当选,优先级相同则MAC地址小的当选。CE6800的优先级范围是1到255,默认值是100。
我建议不要依赖MAC地址来碰运气,而是主动把希望成为主设备的成员优先级调高。比如规划ID为1的设备做主,就把它的优先级设置成200,另一台保持默认100。这样即使设备重启或堆叠重新选举,主设备也一定是预期的那个。
为什么强调这个?因为主设备承担控制面角色,负责配置同步、协议计算等任务。如果你想让某个性能更好或上行带宽更大的设备做主,就要在配置阶段显式指定。另外在堆叠建立后如果要更换主设备,可以通过stack member <id> priority调整优先级并触发重新选举,但这个过程可能造成短暂丢包,所以最好在维护窗口做。
2.3 堆叠域和保留时间
堆叠域编号用来标识一个堆叠系统,默认域编号是0。如果同一网络里存在多组堆叠,域编号就一定要区分开,否则设备可能加入错误的堆叠域。实际项目中,我会给每个堆叠组规划一个独立的域编号,比如10、20、30,这样即便物理链路接错,设备也不会轻易加入别的堆叠。
保留时间(timer)是个更隐蔽的参数。当堆叠系统发生分裂(比如堆叠线缆断开),系统会等待一个保留时间,如果在保留时间内分裂的成员没有重新合并,备设备或从设备就会开始竞争主设备角色,从而出现双主。CE6800的保留时间默认是5秒,这个值需要根据业务容忍度来调整。对延迟敏感的业务,我会调小一些;对需要给堆叠恢复留窗口的业务,可以适当调大,但过大会增加故障后恢复的收敛时间。
2.4 堆叠口规划:连接方式决定可靠性
CE6800的堆叠口是使用业务口来承担的,支持10GE、25GE、40GE、100GE等接口类型。规划堆叠口时,要遵循一个核心原则:至少使用两个物理口作为堆叠口,并且连接到不同成员设备上,形成环形连接。
举个例子,两台设备A和B,每个设备都规划两个堆叠口。推荐的接法是:A的堆叠口1连接B的堆叠口1,A的堆叠口2连接B的堆叠口2。这样任意一根堆叠线缆断开,堆叠系统依然能通过另一根线缆通信。如果只连一根线,一旦断线堆叠就会分裂,风险很大。
连线时还要注意光模块和线缆的类型匹配。CE6800的10GE口通常使用SFP+光模块,40GE口使用QSFP+光模块,100GE口使用QSFP28光模块。项目上如果临时缺短距离光模块,也可以用堆叠铜缆(DAC线缆),成本更低,功耗也小,但长度一般只有1米、3米、5米几种规格,适用于同一个机柜内的设备堆叠。
3. 从零开始配置:CE6800堆叠的完整命令过程
规划做完,接下来就是实际操作。我以两台CE6800为例,一台规划为ID 1(主),一台规划为ID 2(备),说明完整的配置流程和关键命令。
3.1 配置前必须先确认的两件事
第一步是确认两台设备的软件版本一致。CE6800堆叠要求所有成员设备使用相同的软件版本,如果版本不一致,轻则堆叠建立失败,重则导致异常重启。查看版本命令是display version,两台设备逐台登录,对比一下版本信息里的VRP版本号和补丁号。
第二步是备份现有配置。虽然堆叠配置可以直接在原配置上叠加,但为了防止操作失误,我还是习惯先把每台设备的配置文件导出一份。命令是display current-configuration,把输出保存到本地即可。如果设备已配置了FTP或TFTP服务,也可以用save cfg.zip之类的方式备份到指定路径。总之,备份永远不嫌多余。
3.2 修改堆叠ID和优先级
先登录规划为ID 2的那台设备,执行堆叠ID修改。执行后系统会提示需要重启生效,并警告会清除配置。此时先不着急重启,继续完成其他配置后再统一重启。
code复制system-view
stack
stack member 1 renumber 2
再把优先级调整一下。优先级在主设备(ID 1)上配置成200,备设备保持默认100即可。
code复制system-view
stack
stack member 1 priority 200
stack member 1 domain 10
如果你给ID 2也配置域编号,命令就是stack member 2 domain 10。域编号建议在主备设备上都显式配置,保持一致。
3.3 创建堆叠口并绑定物理口
接下来是创建逻辑堆叠口。这一步是CE6800堆叠配置的核心,逻辑堆叠口(stack-port)是一个逻辑接口,一个堆叠口下可以绑定多个物理口。
以设备ID 1为例,进入堆叠管理视图,创建stack-port 1/1,然后将物理口10GE1/0/1和10GE1/0/2加入堆叠口:
code复制system-view
stack
stack-port 1/1
port interface 10ge 1/0/1 mode stack
port interface 10ge 1/0/2 mode stack
设备ID 2的配置类似,但要注意接口编号已经因为堆叠ID的变化而改变了,物理口应该是10GE2/0/1和10GE2/0/2:
code复制system-view
stack
stack-port 2/1
port interface 10ge 2/0/1 mode stack
port interface 10ge 2/0/2 mode stack
这里有个容易踩的坑:ID 2设备修改堆叠ID以后,接口编号已经变成2/0/x了,如果还按原来的1/0/x写接口,系统会直接报错,因为该接口不存在。刚开始做堆叠的人经常在这里卡住,以为设备配置有bug,其实是对接口编号变化没概念。
不同版本的CE6800,堆叠口绑定物理口的命令可能有细微差异。有的版本用port interface 10ge 1/0/1 mode stack,有的版本用port interface 10ge 1/0/1 enable。如果不确定,敲完port interface后按问号键,系统会提示当前版本支持的参数,照着输就行。
3.4 保存配置并重启
所有堆叠相关配置完成后,分别在两台设备上保存配置,然后重启。这一步逻辑很关键:堆叠ID的修改必须重启才生效,而堆叠口的绑定配置也只有在设备进入堆叠模式后才会真正激活。顺序上,我建议先把两台设备的堆叠线缆连好,再逐台重启,这样设备起来后就能直接建立堆叠。
code复制save
y
reboot
重启的瞬间,两台设备会互相发现并开始堆叠协商。如果一切顺利,等待一两分钟后,登录任意一台设备(堆叠后两台设备管理IP如果不同,需要分别尝试),执行display stack就能看到堆叠成员信息。
3.5 验证堆叠结果
堆叠建立后的第一件事,就是验证成员和角色是否正确。
code复制display stack
这个命令会显示堆叠系统的拓扑、每个成员的堆叠ID、角色(Master/Standby/Slave)、优先级、MAC地址等关键信息。确认ID 1是Master、ID 2是Standby,并且两边都处于正常运行状态。
再用display device查看所有成员设备的状态,确认没有设备处于异常或离线状态。最后用display stack port查看堆叠口的up/down状态和带宽信息,确保两个堆叠口都正常协商到了对应速率。
4. 堆叠建立后的业务配置与验证
堆叠本身不是目的,业务正常才是目的。堆叠建立后,还需要把业务配置迁移到堆叠系统上,并做一轮完整的验证。
4.1 配置跨设备Eth-Trunk,让服务器双网卡真正跑起来
这是堆叠方案里最核心的业务配置。之前用VRRP时,服务器双网卡分别接两台交换机,每块网卡只能走各自的链路,一条链路是主,另一条是备。堆叠之后,我们可以把两台设备上的物理口捆绑成一个Eth-Trunk,服务器双网卡通过这个聚合口接入,两条链路同时转发流量。
配置命令很简单,在堆叠系统的主设备上执行:
code复制system-view
interface eth-trunk 10
trunkport 10ge 1/0/10
trunkport 10ge 2/0/10
把ID 1设备的10GE1/0/10和ID 2设备的10GE2/0/10加入同一个Eth-Trunk。这个接口编号跨设备的写法,在非堆叠环境里是做不到的,只有堆叠后才会出现2/0/x这种编号,这也是堆叠带来的直观改变。
Eth-Trunk的负载分担模式建议根据实际流量特征来选。如果流量主要是不同IP之间的互访,用默认的基于目的IP和目的端口的哈希就行;如果担心哈希不均,可以改成逐流负载分担。服务器网卡侧也要配置对应的链路聚合模式,两边要匹配,否则聚合链路无法正常工作。
4.2 VLAN和网关配置:只在主设备上操作一次
堆叠后配置同步到所有成员,这是很多运维最喜欢的一点。VLAN、VLANIF接口、DHCP、路由等配置,只需在主设备上配置一次,自动同步到备设备和从设备。
比如创建业务VLAN 100和网关接口:
code复制system-view
vlan batch 100
interface vlanif 100
ip address 192.168.100.1 255.255.255.0
这段配置会自动同步到堆叠的所有成员。如果服务器网关要配置VRRP,可以在VLANIF上继续配置,但其实堆叠系统本质已经是一台设备,网关只用配一个IP就行,不需要VRRP了。
4.3 验证阶段必须做的几项测试
配置完成后,验证工作不能只停留在ping通网关这一步。我会按下面的清单逐项测试:
连通性测试:从服务器ping网关、ping对端服务器,确认VLAN和路由转发正常。
链路冗余测试:在服务器双网卡都在工作的情况下,手动拔掉其中一根堆叠成员设备的上行链路,观察业务是否中断。正常情况下,流量会短暂切换到另一条链路,丢包不超过几个包甚至零丢包。
堆叠线缆冗余测试:拔掉一根堆叠线缆,观察堆叠是否仍然稳定运行,display stack确认堆叠未分裂。此时系统应该通过另一根堆叠线缆继续通信,业务不受影响。
主设备切换测试:在维护窗口,重启主设备,观察备设备是否快速接管,业务是否恢复。这个测试能验证控制面冗余是否真的有效。
这些验证做完,堆叠配置才算真正落地。很多项目交付草草了事,配置一敲完就撤场,结果过几天堆叠出问题,运维连基本排查思路都没有。验证环节不光是给客户看,更是让自己心里有底。
5. 踩坑实录:CE6800堆叠配置中容易翻车的五个细节
技术文档不会告诉你这些坑,但实际项目里几乎人人都遇到过。我复盘了这次CE6800堆叠配置过程中踩过的、以及见过别人踩过的问题,整理成五个高频翻车点。
5.1 修改堆叠ID后配置被清空
这个坑杀伤力最大。stack member 1 renumber 2这条命令,作用是修改设备的堆叠ID,但它的副作用是清除该设备上原有的所有配置,并且触发自动重启。如果你在这台设备上已经配置了大量业务,执行这条命令后全部没了。
我第一次在测试环境操作时也吓了一跳,以为误删了配置。后来查了文档才知道,renumber操作本质上是要把设备“变成另一台新设备”,所以会清配置。解决方法是操作前先备份配置,或者干脆在生产设备上先把配置导出来,等堆叠建立后再统一下发业务配置。
5.2 堆叠线缆连接正确但堆叠没协商成功
配置命令全敲了,优先级也调了,重启也重启了,但display stack只看到一台设备。这种问题多半出在物理链路上。
排查顺序一般是:先看堆叠口对应的物理口是否up,用display interface 10ge 1/0/1看光模块信息;再看光模块/线缆是否正常,DAC线缆损坏的情况不太常见,但SFP+光模块故障率并不低;最后看两端的光模块速率是否匹配,10GE口对10GE口、40GE口对40GE口,速率不一致也会导致协商失败。
还有一个容易被忽略的点:配置了port mode stack的接口不能再配其他业务,如果该接口之前配置过VLAN、ACL之类的东西,系统可能会拒绝把接口加入堆叠口。遇到这种情况,先要把接口恢复到默认配置,再执行堆叠口绑定。
5.3 堆叠分裂与双主风险
堆叠线缆全部断开,会导致一个堆叠系统分裂成两个独立的堆叠系统,每个系统都认为自己是主,这就是双主。双主会造成IP地址冲突、配置不一致、业务异常等一系列问题。
应对办法是做MAD(Multi-Active Detection,多主检测)配置。CE6800支持直连检测、代理检测等MAD方式。最简单的直连检测是通过堆叠系统之间的一条专用链路互相发送检测报文,一旦检测到对端也在运行同一个堆叠系统,就会自动把优先级低的那个系统置为恢复状态,关闭其业务接口。这样能有效避免双主对业务造成影响。
MAD配置属于堆叠的高级功能,很多初学堆叠的人会忽略。我的建议是,只要是生产环境,MAD就一定要配,不要抱有侥幸心理。
5.4 两台设备软件版本不一致导致堆叠反复重启
设备软件版本不一致时,堆叠协商可能失败,或者即使协商成功,备设备也会反复重启。这个问题在扩容场景中尤其常见——新采购的设备版本和旧设备不一致。
解决方案很简单,把两台设备的版本升级到一致。升级时要注意,CE6800升级需要按照产品文档的指引操作,优先在单台设备上完成升级验证,再对另一台执行操作。如果设备已经处于非堆叠状态,升级相对简单;如果已经组成堆叠,升级时要按堆叠升级的流程走,防止升级过程中堆叠分裂或业务中断。
5.5 堆叠成功后业务配置只写了主设备,重启后配置冲突
堆叠系统虽然有配置同步机制,但同步是有条件的。如果你在堆叠建立之前,分别在两台设备上配置了相同的接口或VLAN,堆叠建立后这些配置可能发生冲突,导致重启后部分配置丢失。
正确的做法是:堆叠建立前只做堆叠相关的最小配置,业务配置全部在堆叠建立后、在主设备上统一配置。如果你已经在单独设备上配了业务,建议在组堆叠前清空这些配置,或者备份后在堆叠系统里重新下发。
这个习惯不仅适用于CE6800,所有支持堆叠的交换机都适用。先组堆叠,再配业务,能省掉大量莫名其妙的配置冲突问题。
6. 排错速查:从现象到根因的排查链路
最后分享一套排查思路。堆叠出问题时,顺着这个链路走一遍,大部分问题都能定位。
6.1 现象一:display stack只看到一台设备
先确认两台设备都正常启动,没有处于重启循环中。然后检查堆叠配置是否完整,用display stack configuration查看当前生效的堆叠配置。如果配置为空,说明堆叠口的绑定没生效,重新检查stack-port配置。
接着检查堆叠口状态,用display stack port看堆叠口是否up。如果堆叠口down,用display interface查看底层物理口状态,再逐级排查光模块、线缆、对端设备。
最后检查两台设备的软件版本是否一致。版本不一致时,堆叠协商可能异常,需要先统一版本再组堆叠。
6.2 现象二:堆叠口反复up/down
这种问题比较隐蔽。堆叠口up/down交替出现,说明协商不稳定,常见原因有几个:光模块/线缆接触不良,重新插拔或更换线缆;光模块速率不匹配,确认两端速率一致;物理口被配置了其他业务,导致堆叠口激活异常,清空该接口配置后重新绑定。
还有一种可能,是设备CPU或内存负载过高,导致堆叠心跳报文处理不及时。用display cpu-usage和display memory-usage确认一下,如果负载确实很高,要先排查业务流量是否异常,再处理堆叠问题。
6.3 现象三:堆叠后业务丢包
堆叠建立后业务丢包,先别急着怀疑堆叠本身,而是按常规排查链路的质量:上行链路是否拥塞、服务器网卡是否正常、VLAN是否放通等。如果确认业务链路没问题,再考虑堆叠相关因素。
比较常见的是Eth-Trunk哈希不均。如果其中一个成员口的流量明显偏高,另一个几乎没流量,说明负载分担策略和实际流量特征不匹配,需要调整负载分担模式。另外如果堆叠系统发生过分裂或主备切换,可能出现短暂的转发表项不一致,导致部分流量黑洞,这种情况下可以等表项自动收敛,或者手动清一下相关表项观察是否恢复。
堆叠排查的终点不要放在堆叠本身。很多业务丢包其实和堆叠没有直接关系,而是链路、配置或者服务器侧的问题。排错时保持清醒,按链路→配置→堆叠的顺序逐层排查,比一上来就怀疑堆叠要高效得多。
CE6800堆叠配置这件事,熟练掌握后其实不难,难点在于对堆叠原理的深入理解和经验性的排错思路。上面这些内容来自我这次项目的完整复盘,希望能帮到正在折腾CE6800堆叠的朋友。配置命令以你设备实际版本为准,但排查思路和坑点,是通用的。
