凌晨两点被电话叫起来,说核心交换机堆叠分裂了,两台设备各自为政,网关地址冲突,整个办公区断网——干网络运维的多少都碰过这种局面。现场往往还伴着另一个尴尬:手边这台华为、机房那台 H3C、备件架上还有一台锐捷,三套交换机配置命令各写各的,查个堆叠状态的命令都得先在脑子里翻译一遍。这篇就把这三家的命令体系摊开来对着讲,重点落在“锐捷查 IRF 命令”这个被无数人搜错方向的问题上,顺带把虚拟化配置、日常排障、参数选择这些容易翻车的细节一次说透。
内容适合刚接手多品牌混装机房的运维、正在准备网络方向认证的备考人员,以及那些“知道概念但一动手就卡壳”的朋友。不追求把命令手册抄一遍,只讲实际会用到的、会踩坑的那部分。
1. 三套命令行为什么长得不一样
1.1 从视图结构说起
三家设备的命令长相差异,根子在视图(View)模型的设计上。华为的 VRP、H3C 的 Comware、锐捷的 RGOS,本质上都是“分层视图 + 逐级下沉”的框架,但分层的粗细和提示符的表现方式不同,导致你敲同一条逻辑操作时,敲的字符数完全不一样。
华为和 H3C 的路径几乎一致:用户视图<>→ 系统视图[]→ 具体功能视图,用system-view进去,用quit退一级,用return或Ctrl+Z直接回用户视图。锐捷多插了一层特权模式,跟早年的 IOS 习惯接近:用户模式>→ 特权模式#(enable进入)→ 全局配置模式(config)#(configure terminal进入)→ 接口模式(config-if-GigabitEthernet 0/1)#。这一层“特权模式”的存在,是很多人从华为/H3C 转到锐捷时第一处不适应的:明明只想看一眼配置,结果发现show在用户模式下敲不出来,得先enable。
这个设计差异带来的实际影响比想象中大。你在华为设备上习惯性地敲display current-configuration看当前配置,换到锐捷上敲display会直接报错,因为锐捷用的是show。更麻烦的是,锐捷的exit和end语义不同:exit是退一级,end是从任意配置视图直接跳回特权模式。很多人习惯性敲exit,结果在接口视图里连敲好几次才退回全局,效率就这么被吃掉了。
提示:在锐捷设备上,任何配置视图下敲
end都能一步回到特权模式#,比连敲exit快得多。华为和 H3C 对应的是return或Ctrl+Z,这三个快捷键建议刻进肌肉记忆。
1.2 display 与 show 的补全习惯差异
命令补全这块,三家的差异也挺有意思。华为和 H3C 都支持Tab补全和?帮助,输入几个字母按Tab会自动补全到唯一匹配项,有歧义时再按一次Tab列出所有候选。锐捷同样支持Tab,但在一些老版本上Tab补全的候选列表刷新会有延迟,连续快速敲命令时容易出现补全错位,这时候别急着骂设备,慢半拍再按一次就好。
真正拉开效率差距的是缩写规则。华为和 H3C 允许把命令词缩到不产生歧义的最短前缀,比如dis cu等于display current-configuration,int g0/0/1等于interface GigabitEthernet 0/0/1。锐捷的缩写规则更保守一些,sh run能用,但接口名缩写得小心,int gi0/1这类写法在不同版本上表现不一致,稳妥起见还是敲完整的interface GigabitEthernet 0/1。
下面这张表是我自己整理的常用等价命令,贴在工位上比翻手册快:
| 操作意图 | 华为 VRP | H3C Comware | 锐捷 RGOS |
|---|---|---|---|
| 查看当前配置 | display current-configuration | display current-configuration | show running-config |
| 查看启动配置 | display saved-configuration | display saved-configuration | show startup-config |
| 查看版本 | display version | display version | show version |
| 查看接口简况 | display interface brief | display interface brief | show interfaces status |
| 保存配置 | save | save | write或copy running-config startup-config |
| 重启设备 | reboot | reboot | reload |
有一点必须强调:华为和 H3C 的save命令都会二次确认,默认选项是Y,但如果你手快连敲回车,可能会把不想保存的临时配置固化下来。我的做法是改完配置先display current-configuration | include xxx核对一遍关键行,确认无误再save。锐捷的write反而干脆,敲下去直接写,没有确认环节,所以更要养成“先看后写”的习惯。
2. 锐捷“查IRF”这件事,先得把名字对上
2.1 IRF、iStack、VSU 到底是不是一回事
搜索框里输入“锐捷查 irf 命令”的人,十有八九最后会一脸茫然地发现:锐捷的官方文档里根本找不到 IRF 这个缩写。原因很简单——IRF 是 H3C 的技术名称,全称 Intelligent Resilient Framework,中文叫智能弹性架构。华为对应的技术分两种:盒式设备叫 iStack,框式设备叫 CSS(Cluster Switch System)。而锐捷把自己的设备虚拟化技术命名为VSU,Virtual Switching Unit,虚拟交换单元。
这三者要解决的问题完全一致:把两台(或更多)物理交换机在逻辑上合并成一台,统一管理平面、统一控制平面、统一转发平面,对外只呈现一个管理 IP、一份配置、一个生成树域。区别主要在实现的底层机制、成员数量上限、以及命令行入口。所以“锐捷查 IRF 命令”这个搜索词,本质上是技术名称错位——你要查的功能锐捷有,但关键词得换成 VSU。
这个错位在实际工作中造成过不少麻烦。我见过有同事在锐捷设备上敲display irf,看到报错就断定“这台设备不支持堆叠”,转头去申请新设备预算,实际上那台机器支持 VSU,只是命令入口不同。还有人拿着 H3C 的 IRF 配置模板往锐捷上套,irf-port敲进去毫无反应,白白耗掉半个下午。
注意:判断一台设备支不支持虚拟化,别看它认不认
irf这个关键词,要看它的产品规格里有没有 VSU(锐捷)、iStack/CSS(华为)、IRF(H3C)。命令名称跟着厂商走,功能本身是行业通用需求。
2.2 锐捷 VSU 常用查看命令清单
把入口对上之后,锐捷查虚拟化状态的命令其实很规整。核心就那么几条,全部在特权模式#下执行:
Ruijie# show switch virtual Ruijie# show switch virtual config Ruijie# show switch virtual topology Ruijie# show switch virtual link Ruijie# show switch virtual role这五条命令各有分工,别混着用。show switch virtual看的是全局状态,包括当前是不是虚拟化模式、域 ID 是多少、本机是 active 还是 standby、优先级配置。show switch virtual config看的是配置层面的参数,比如 domain id、switch id、优先级、VSL 端口成员。show switch virtual topology看的是拓扑关系,谁跟谁连、走哪几个口、链路是否正常。show switch virtual link专门盯 VSL 链路的状态和流量,排查“配置都对但就是起不来”的时候,这条最有用。show switch virtual role则直接告诉你主备角色和切换原因。
实际排障时的顺序建议是:先show switch virtual确认模式对不对,再show switch virtual link确认链路通不通,最后show switch virtual topology确认拓扑关系和角色。这个顺序能把问题范围一层层缩小,比一上来就翻配置高效得多。
2.3 show switch virtual 输出怎么读
很多人拿到这条命令的输出,盯着满屏字段不知道看哪个。我挑几个真正影响判断的字段说。
第一看Switch Mode。如果显示Virtual switch,说明设备已经进入虚拟化模式;如果显示Standalone或者Local,说明还没转换,这时候你配再多 VSL 端口也没用,得先执行switch convert mode virtual做模式转换(这条命令会让设备重启,务必挑窗口期)。
第二看Domain ID。同一个 VSU 域里两台设备的 domain id 必须一致,不一致就是两台独立的虚拟交换机,永远合不到一起。这个坑特别隐蔽,因为配置的时候很容易在第二台上忘了改。
第三看Role。正常状态下一台Active、一台Standby。如果两台都是Active,那就是双主,说明 VSL 链路断了但 MAD 检测没生效或者没配,这种状态下网络里会出现两个相同的 MAC 和 IP,属于必须立刻处理的严重故障。
第四看Priority。优先级决定谁当 Active,数值大的优先。默认都是 100,如果两台一样,就靠设备运行时长和 MAC 地址比大小来定,结果不可控。生产环境里一定要显式把主设备的优先级调高,比如设成 200,避免重启顺序不同导致主备角色漂移。
Ruijie# show switch virtual Switch mode : Virtual switch Domain ID : 1 Switch ID : 1 Priority : 200 Role : Active Local MAC address : 00d0.f822.33a1这份输出里,Switch ID也要留意,同一个域内必须唯一,一台是 1 一台是 2,重了就会冲突。改 Switch ID 的命令是switch virtual domain 1下面的switch 2,改完同样需要重启生效。
3. 三家虚拟化技术的关键参数对照
3.1 机型与形态选型
选型这件事,先看你要解决的是什么问题。如果只是想让两台接入交换机在管理上合并、少配一个管理 IP、少跑一份生成树,那三家的入门级方案都能满足,成本差异也不大。但如果你要的是控制平面真正合一、跨设备的链路聚合(M-LAG 那类效果)、故障时秒级切换,那就得看具体型号支持的虚拟化等级。
华为这边,盒式设备走 iStack,一般支持 2 到 9 台堆叠,具体上限看型号;框式设备走 CSS,通常 2 台。H3C 的 IRF 在盒式设备上支持 2 到 9 台,框式一般也是 2 台,部分高端型号支持 4 台。锐捷的 VSU 在主流盒式产品上是 2 台,这也是它和 IRF/iStack 最大的形态差异——VSU 定位就是双机虚拟化,不是多机堆叠。
这个差异直接决定了组网设计。你要是规划一个 4 台设备的接入层堆叠组,锐捷的 VSU 方案就得改成两组双机 VSU,中间再跑链路聚合和生成树,复杂度上去了。所以选型阶段必须先把台数定下来,别等配置到一半才发现上限不够。
3.2 连线与端口规划
虚拟化链路的物理连接,是实际施工里最容易出问题的一环。三个技术都要求成员设备之间用专门的堆叠口或业务口做互联,区别在于对端口的要求严格程度不同。
H3C 的 IRF 用irf-port逻辑端口绑定物理口,每个 member 有两个 IRF 端口(1/1 和 1/2),推荐做环形连接:A 的 1/1 连 B 的 2/1,A 的 2/1 连 B 的 1/1。环形比链形多一条冗余路径,单条链路故障不会导致分裂。物理口方面,优先用万兆口,千兆口在流量大的场景下会成为瓶颈。
华为的 iStack 同样推荐环形,逻辑端口叫stack-port,每个 member 有两个(0/1 和 0/2),配置时用port member-group interface把物理口绑进去。有个细节容易忽略:绑定前必须先把物理口shutdown,绑完再undo shutdown,否则会报错。这个顺序在华为文档里写得很清楚,但实际操作时经常因为手快跳过。
锐捷的 VSL 端口配置相对简单,用port-member interface指定成员口,一般建议至少两个口做聚合,避免单点。锐捷的部分型号支持把业务口直接转成 VSL 口,不需要专用堆叠卡,灵活度高,但也意味着这些口不能再跑业务,规划时要预留。
提示:三家都支持用业务口做虚拟化链路,但强烈建议优先使用专用堆叠口或高速端口。用千兆业务口做 VSL,一旦有大量跨设备流量,链路会先于业务被打满,表现为“莫名其妙变慢”,很难第一时间联想到堆叠链路。
3.3 参数对照表
把关键参数拉成一张表,配置时对照着填,能省掉大量来回查文档的时间:
| 参数项 | 华为 iStack | H3C IRF | 锐捷 VSU |
|---|---|---|---|
| 逻辑端口名 | stack-port | irf-port | vsl-port |
| 成员编号设置 | stack slot 0 renumber 1 | irf member 1 renumber 2 | switch virtual domain下switch 2 |
| 优先级设置 | stack slot 0 priority 200 | irf member 1 priority 32 | priority 200 |
| 激活命令 | 无需单独激活 | irf-port-configuration active | switch convert mode virtual |
| 生效方式 | 重启 | 重启 | 重启 |
| 最大成员数 | 依型号,盒式常见 2-9 | 依型号,盒式常见 2-9 | 主流为 2 |
| 状态查看 | display stack | display irf | show switch virtual |
| 拓扑查看 | display stack topology | display irf topology | show switch virtual topology |
这里有个非常关键的区别要单独拎出来:H3C 的 IRF 必须执行irf-port-configuration active才会真正激活配置,而且这条命令必须在所有 IRF 物理口都undo shutdown之后敲。华为的 iStack 没有这一步,配置完直接重启就生效。锐捷则是通过switch convert mode virtual一步到位完成模式转换和激活。
我在一次割接里就因为漏敲irf-port-configuration active,两台 H3C 重启后依然是独立设备,白等了一个重启周期。后来养成习惯,H3C 的 IRF 配置流程固定按“关端口 → 建 irf-port → 绑物理口 → 开端口 → 激活 → 存配置 → 重启”这个七步走,一步都不跳。
4. 日常配置命令三厂商对照实操
4.1 登录、视图切换与版本查看
新设备上架第一件事是确认版本和型号,这决定了后续能用哪些特性。三家查看版本的命令分别是display version、display version、show version,输出里的关键信息是固件版本号、设备型号、运行时长、以及序列号。
版本这块的经验是:同一虚拟化组内的成员设备,固件版本必须完全一致。三家技术都要求这一点,版本不一致会导致堆叠起不来,或者起来了但行为异常。实际场景中经常遇到备件机是新版本、在网机是老版本,直接插上去配置半天不通。正确做法是先把备件机降级到和在网机一致的版本,再上架。
视图切换的对比前面讲过,这里补充一个实用技巧。华为和 H3C 支持在任意视图下用return直接回用户视图,锐捷用end回特权模式。但如果你想从接口视图直接跳到另一个接口视图,华为和 H3C 都得先quit回系统视图再进,锐捷也一样。频繁切换接口时,用display this在当前视图下确认自己改的是哪个口,比看提示符靠谱——提示符里的接口名在某些终端宽度下会被截断。
4.2 VLAN 与接入口配置
VLAN 配置是最基础也最高频的操作。三家的命令逻辑一致,语法各异。
华为:
<Huawei> system-view [Huawei] vlan 10 [Huawei-vlan10] quit [Huawei] interface GigabitEthernet 0/0/1 [Huawei-GigabitEthernet0/0/1] port link-type access [Huawei-GigabitEthernet0/0/1] port default vlan 10H3C:
<H3C> system-view [H3C] vlan 10 [H3C-vlan10] quit [H3C] interface GigabitEthernet 1/0/1 [H3C-GigabitEthernet1/0/1] port link-type access [H3C-GigabitEthernet1/0/1] port access vlan 10锐捷:
Ruijie> enable Ruijie# configure terminal Ruijie(config)# vlan 10 Ruijie(config-vlan)# exit Ruijie(config)# interface GigabitEthernet 0/1 Ruijie(config-if-GigabitEthernet 0/1)# switchport mode access Ruijie(config-if-GigabitEthernet 0/1)# switchport access vlan 10注意华为和 H3C 在接口视图下的关键字顺序:华为是port default vlan,H3C 是port access vlan,这两个词序反了是很常见的笔误来源。锐捷则用的是switchport前缀,整体更接近 Cisco 风格。
Trunk 口的允许 VLAN 列表配置差异更大,这也是跨厂商对接时最容易出问题的地方:
| 厂商 | Trunk 封装设置 | 放通 VLAN 命令 |
|---|---|---|
| 华为 | port link-type trunk | port trunk allow-pass vlan 10 20 |
| H3C | port link-type trunk | port trunk permit vlan 10 20 |
| 锐捷 | switchport mode trunk | switchport trunk allowed vlan add 10,20 |
关键坑点在这里:锐捷的 Trunk 口默认放通所有 VLAN,而华为和 H3C 默认只放通 VLAN 1。这意味着你在锐捷上配 Trunk,不写允许列表也能通,但换到华为/H3C 上就必须显式写,否则业务 VLAN 的流量直接被丢弃。反过来,从华为/H3C 迁移到锐捷时,如果保留了“逐个放通”的思维,可能漏配导致部分 VLAN 不通。这个不对称性我在联调时吃过亏,后来固定用show vlan/display vlan逐口核对放通列表。
4.3 链路聚合三种写法
链路聚合在跨设备对接、上联汇聚时几乎是标配。三家的逻辑端口名称完全不同,这是配置时的第一个坎。
华为用Eth-Trunk,H3C 用Bridge-Aggregation,锐捷用AggregatePort。名字不同但配置骨架相似:先建逻辑口,再把物理口加进去,然后设置工作模式(静态或 LACP)。
华为:
[Huawei] interface Eth-Trunk 1 [Huawei-Eth-Trunk1] mode lacp-static [Huawei-Eth-Trunk1] trunkport GigabitEthernet 0/0/1 to 0/0/2H3C:
[H3C] interface Bridge-Aggregation 1 [H3C-Bridge-Aggregation1] link-aggregation mode dynamic [H3C-Bridge-Aggregation1] quit [H3C] interface GigabitEthernet 1/0/1 [H3C-GigabitEthernet1/0/1] port link-aggregation group 1锐捷:
Ruijie(config)# interface AggregatePort 1 Ruijie(config-if-AggregatePort 1)# exit Ruijie(config)# interface range GigabitEthernet 0/1-2 Ruijie(config-if-range)# port-group 1H3C 的写法是“在物理口里指向逻辑口”,跟华为“在逻辑口里拉物理口”方向相反,这个思维转换需要一点时间适应。锐捷则支持interface range批量操作,两台以上物理口做聚合时效率最高。
模式选择上,LACP(动态)优于静态。静态聚合的问题是对端如果没配聚合,本端照样认为聚合正常,链路状态显示 UP 但实际流量只走一条,排查起来极其隐蔽。LACP 有协商报文,对端不配合会直接显示 down 或者Selected: N不对,问题暴露得早。三家都支持 LACP,配置时记得把模式显式设成动态,别用默认值。
注意:聚合口建好之后,一定要用查看命令确认成员口状态。华为看
display eth-trunk 1,H3C 看display link-aggregation verbose,锐捷看show aggregateport summary。重点看Selected或Up的成员数是不是等于你配置的数量,少了就是有问题。
4.4 三层接口与静态路由
三层接口的命名差异也值得单独说一下。华为叫Vlanif,H3C 叫Vlan-interface,锐捷叫VLAN。这三个名字背后的东西完全一样,都是给 VLAN 配 IP 的逻辑接口,但敲错一个字母就是命令不存在。
华为:[Huawei] interface Vlanif 10 [Huawei-Vlanif10] ip address 192.168.10.1 24 H3C: [H3C] interface Vlan-interface 10 [H3C-Vlan-interface10] ip address 192.168.10.1 24 锐捷:Ruijie(config)# interface VLAN 10 Ruijie(config-if-VLAN 10)# ip address 192.168.10.1 255.255.255.0注意掩码写法:华为和 H3C 支持位数写法(24),锐捷在这一层通常要求写完整掩码(255.255.255.0),虽然部分新版本也支持位数,但为了兼容性还是写全更稳。
静态路由的写法差异在掩码的简写上:
华为:[Huawei] ip route-static 0.0.0.0 0.0.0.0 192.168.1.1 H3C: [H3C] ip route-static 0.0.0.0 0 192.168.1.1 锐捷:Ruijie(config)# ip route 0.0.0.0 0.0.0.0 192.168.1.1H3C 允许把0.0.0.0简写成0,华为不行。这种细节在抄配置模板时最容易出错,复制过来一粘贴就报语法错误。我的做法是建一个自己的命令片段库,按厂商分目录存,需要时改 IP 不改语法。
4.5 保存、备份与回滚
配置保存这件事,说小不小。我见过割接当晚配置全对、业务全通,第二天早上重启后配置全丢的案例——原因是没执行保存。三家设备的配置都分运行配置和启动配置,改完不保存只存在内存里,重启即失效。
| 厂商 | 保存命令 | 是否有确认 | 备份方式 |
|---|---|---|---|
| 华为 | save | 是,需输入y | 导出vrpcfg.zip |
| H3C | save | 是,回车确认 | 导出.cfg文件 |
| 锐捷 | write | 否,直接写入 | show running-config复制存档 |
华为和 H3C 在保存时给了一次反悔机会,锐捷的write则是立即执行。这个差异意味着在锐捷上误操作后没有“不保存重启恢复”这条退路,所以改配置前先show running-config存一份文本档,是必须养成的习惯。
回滚这块,三家都有配置回滚点的机制,但配置复杂度差别很大。华为和 H3C 支持configuration replace file类的配置替换,锐捷则在部分型号上支持配置版本管理。日常运维里更实用的做法是改之前先备份,出问题手动比对恢复,别指望一键回滚。我自己的流程是:登录设备 →show running-config全量复制到本地文本 → 标注日期和变更内容 → 开始改。这个动作花不了两分钟,但能救命。
5. 从零把两台设备合成一台:三套配置全流程
5.1 动手之前必须先确认的四件事
虚拟化配置一旦做错,恢复起来需要拆链路、改配置、单独重启,在机房里蹲两小时是常事。所以动手前这四件事必须确认到位。
第一,固件版本必须完全一致。不是“差不多”,是版本号每一位都一样。查版本用前面说的display version/show version,对比输出里的版本字符串。不一致就先升级或降级,别抱侥幸心理。
第二,成员编号不能冲突。出厂的默认编号通常都是 1(或 0),两台直接连起来就是冲突。必须在配置阶段把其中一台改成 2,改完重启生效,再连堆叠线。
第三,堆叠链路必须先接好再上电,或者先关端口再接线。带业务在线接堆叠线,有概率触发短暂的环路或者广播风暴。稳妥做法是把堆叠口shutdown,接好线,配置完,再undo shutdown。
第四,准备好带外管理通道。虚拟化配置过程中设备会重启,重启后管理 IP 可能变化(变成虚拟 IP),如果没有 console 或者带外管理,一旦配错就只能去机房。这个教训我吃过一次,之后再也不敢裸配。
5.2 H3C IRF 配置全流程
以两台设备为例,目标是把 member 1(主)和 member 2(备)组成一个 IRF。假设用 49、50 两个万兆口做堆叠。
先在第一台(保持 member 1)上配置:
<H3C> system-view [H3C] irf member 1 priority 32 [H3C] interface Ten-GigabitEthernet 1/0/49 [H3C-Ten-GigabitEthernet1/0/49] shutdown [H3C-Ten-GigabitEthernet1/0/49] quit [H3C] interface Ten-GigabitEthernet 1/0/50 [H3C-Ten-GigabitEthernet1/0/50] shutdown [H3C-Ten-GigabitEthernet1/0/50] quit [H3C] irf-port 1/1 [H3C-irf-port1/1] port group interface Ten-GigabitEthernet 1/0/49 [H3C-irf-port1/1] quit [H3C] irf-port 1/2 [H3C-irf-port1/2] port group interface Ten-GigabitEthernet 1/0/50 [H3C-irf-port1/2] quit [H3C] interface Ten-GigabitEthernet 1/0/49 [H3C-Ten-GigabitEthernet1/0/49] undo shutdown [H3C-Ten-GigabitEthernet1/0/49] quit [H3C] interface Ten-GigabitEthernet 1/0/50 [H3C-Ten-GigabitEthernet1/0/50] undo shutdown [H3C-Ten-GigabitEthernet1/0/50] quit [H3C] irf-port-configuration active [H3C] save注意irf-port 1/1里的第一个 1 是 member ID,第二个 1 是端口组编号。因为这台是 member 1,所以是 1/1 和 1/2。
第二台要先把 member ID 改成 2,改完必须重启才生效:
<H3C> system-view [H3C] irf member 1 renumber 2 [H3C] save [H3C] quit <H3C> reboot重启后提示符会变成<H3C>但内部 member 已经是 2,此时接口名全部变成2/0/x。然后按同样的逻辑配 IRF 端口,注意绑定的是2/0/49和2/0/50,端口组编号是2/1和2/2:
<H3C> system-view [H3C] interface Ten-GigabitEthernet 2/0/49 [H3C-Ten-GigabitEthernet2/0/49] shutdown [H3C-Ten-GigabitEthernet2/0/49] quit [H3C] irf-port 2/1 [H3C-irf-port2/1] port group interface Ten-GigabitEthernet 2/0/49 [H3C-irf-port2/1] quit [H3C] interface Ten-GigabitEthernet 2/0/49 [H3C-Ten-GigabitEthernet2/0/49] undo shutdown [H3C-irf-port2/1] quit [H3C] irf-port-configuration active [H3C] save两台都配完后重启,正常情况下会协商出主备角色。验证命令就是前面说的display irf,看 MemberID 1 和 2 是否都在,Role 是否正确。
5.3 华为 iStack 配置全流程
华为的逻辑类似,但命令词完全不同。以 S 系列盒式设备为例:
第一台(保持 slot 0):
<Huawei> system-view [Huawei] stack slot 0 priority 200 [Huawei] interface XGigabitEthernet 0/0/1 [Huawei-XGigabitEthernet0/0/1] shutdown [Huawei-XGigabitEthernet0/0/1] quit [Huawei] stack-port 0/1 [Huawei-stack-port0/1] port member-group interface XGigabitEthernet 0/0/1 [Huawei-stack-port0/1] quit [Huawei] interface XGigabitEthernet 0/0/1 [Huawei-XGigabitEthernet0/0/1] undo shutdown [Huawei] save第二台先改 slot 编号并重启:
<Huawei> system-view [Huawei] stack slot 0 renumber 1 [Huawei] save [Huawei] quit <Huawei> reboot重启后接口名变成1/0/x,然后配置堆叠端口:
<Huawei> system-view [Huawei] interface XGigabitEthernet 1/0/1 [Huawei-XGigabitEthernet1/0/1] shutdown [Huawei-XGigabitEthernet1/0/1] quit [Huawei] stack-port 1/1 [Huawei-stack-port1/1] port member-group interface XGigabitEthernet 1/0/1 [Huawei-stack-port1/1] quit [Huawei] interface XGigabitEthernet 1/0/1 [Huawei-XGigabitEthernet1/0/1] undo shutdown [Huawei] save华为 iStack 没有irf-port-configuration active这一步,配置完重启即生效。验证用display stack,看成员列表和角色,display stack configuration看优先级和端口绑定关系。
这里有个容易忽略的点:华为的stack-port 0/1中,前面的 0 是 slot ID,后面的 1 是端口组编号。如果你的设备堆叠口不止两个,可以配 0/1、0/2 两个组做环形。堆叠口数量决定了冗余程度,单组堆叠口一旦断链就是分裂,双组环形能扛住一根线断。
5.4 锐捷 VSU 配置全流程
锐捷的 VSU 配置流程跟上面两家差别最大,因为它有“模式转换”这个动作。以两台设备为例:
第一台(规划为 Active,Switch ID 1,优先级 200):
Ruijie> enable Ruijie# configure terminal Ruijie(config)# switch virtual domain 1 Ruijie(config-vs-domain)# switch 1 Ruijie(config-vs-domain)# priority 200 Ruijie(config-vs-domain)# exit Ruijie(config)# vsl-port Ruijie(config-vsl-port)# port-member interface TenGigabitEthernet 0/49 Ruijie(config-vsl-port)# port-member interface TenGigabitEthernet 0/50 Ruijie(config-vsl-port)# exit Ruijie(config)# exit Ruijie# write Ruijie# switch convert mode virtualswitch convert mode virtual会提示确认,确认后设备重启并进入虚拟化模式。
第二台(规划为 Standby,Switch ID 2,优先级 100):
Ruijie> enable Ruijie# configure terminal Ruijie(config)# switch virtual domain 1 Ruijie(config-vs-domain)# switch 2 Ruijie(config-vs-domain)# priority 100 Ruijie(config-vs-domain)# exit Ruijie(config)# vsl-port Ruijie(config-vsl-port)# port-member interface TenGigabitEthernet 0/49 Ruijie(config-vsl-port)# port-member interface TenGigabitEthernet 0/50 Ruijie(config-vsl-port)# exit Ruijie(config)# exit Ruijie# write Ruijie# switch convert mode virtual两台都转换完成、VSL 链路接通后,等一到两分钟协商,然后用show switch virtual验证。正常情况下会看到一台 Active、一台 Standby,Domain ID 都是 1,Switch ID 分别是 1 和 2。
这里有个非常关键的顺序问题:必须先配好 VSL 端口,再执行模式转换。如果先转换了模式再回来配 VSL 端口,中间那段时间两台设备已经进入虚拟化模式但没有链路,会出现双 Active,业务直接中断。我第一次配的时候就踩了这个坑,两台设备同时变成 Active,管理 IP 冲突,只能 console 进去逐个修。
提示:VSU 配置建议在业务窗口期做,两台设备最好一前一后转换,中间留出观察时间。第一台转换完先确认状态正常,再动第二台,这样出问题时影响面可控。
5.5 验证阶段该看哪几行
配置完不代表成功,验证才是关键。三家设备的验证命令前面提过,这里说清楚每条输出里该盯哪几行。
H3C 执行display irf,重点看三行:MemberID列表是否包含所有成员、Role是否一主一备(或多主多备)、Bridge MAC是否只有一个。Bridge MAC 如果出现两个不同的值,说明没合成功。
[H3C] display irf Configuration effectiveness: Normal MemberID Role Priority CPU-Mac Description 1 Master 32 00e0-fc0f-8c00 -- 2 Standby 1 00e0-fc0f-8c01 --华为执行display stack,关注MemberID、Role、Priority三列,以及顶部的角色汇总。
锐捷执行show switch virtual,关注Switch mode是否为Virtual switch、Role是否为Active/Standby。再补一条show switch virtual link确认 VSL 链路状态是 UP。
如果状态都对,最后一步是做切换测试:把主设备断电或者重启,观察备设备是否在几秒内接管,业务是否中断。这个测试能暴露很多配置层面看不出来的问题,比如 MAD 没配、生成树没收敛、MAC 表没同步。生产环境上架前做一次,比事后救火划算得多。
6. 排查实录与速查表
6.1 堆叠起不来的典型原因
堆叠配置完了但两台设备各干各的,是最高频的问题。按我实际遇到的概率排序,原因大概是这么几类。
版本不一致排第一。表现是链路物理上 UP,但角色协商不出来,display irf里只看得到自己。处理方法就是统一版本,没有捷径。
成员编号冲突排第二。两台都是 1 或者都是 0,谁都认为自己是对的。表现是配置看起来都对,但就是合不起来。改编号、重启、再连。
IRF/VSL 端口配置不对称排第三。A 的 1/1 绑了 49 口,B 的 2/1 也绑了 49 口,线也接对了,但 A 的 1/2 绑了 50,B 的 2/2 没配,导致环形变链形。这种问题在线缆全接的情况下不容易发现,用拓扑查看命令能看出来。
物理链路问题排第四。光纤模块不匹配、光纤极性反了、铜缆质量差,这些属于物理层问题,表现是端口不 UP 或者 UP 了但大量 CRC 错误。用display interface看错误计数,涨得快就是线的问题。
激活命令漏敲是 H3C 特有的坑,前面说过。表现是配置全对、重启也做了,就是不生效。补一句irf-port-configuration active再重启就好。
端口没 shutdown 就绑定,这个在华为上会直接报错,反而好发现。但配置被中断后残留了半套配置,容易在后续排查时造成误判。
6.2 双主与 MAD 检测
虚拟化组分裂成两个独立的设备,各自认为自己是主,这就是双主。后果是网络里出现重复的 MAC 和 IP,ARP 表混乱,业务时通时断。这是虚拟化方案里必须提前防的风险。
防的手段是MAD 检测(Multi-Active Detection)。三家都支持,原理差不多:在分裂发生后,通过一条独立于业务链路的检测通道(通常是 BFD 或者专用链路)发现对方还活着,然后其中一台上报或者直接关闭业务端口,避免冲突扩大。
H3C 的 BFD MAD 配置大致是这样:
[H3C] interface Vlan-interface 999 [H3C-Vlan-interface999] mad bfd enable [H3C-Vlan-interface999] mad ip address 192.168.100.1 24 member 1 [H3C-Vlan-interface999] mad ip address 192.168.100.2 24 member 2华为的配置思路类似,用mad detect mode direct配合mad ip address,具体命令随版本有差异,配置前用?查一下当前版本的支持情况。
锐捷的 VSU 支持 BFD MAD 和聚合口 MAD,配置入口在全局配置模式下,具体命令建议查当前版本的配置手册,不同型号的产品线差异比较大。
这里有个很容易忽略的前提:MAD 检测用的 VLAN 和 IP 必须独立于业务网段,而且这条检测链路不能和 VSL 链路走同一根物理线,否则 VSL 断了检测链路也断了,等于没配。我见过有人把 MAD 检测口和堆叠口接在同一个交换机上,分裂的时候一起断,双主照样发生。
6.3 命令敲不进去、参数报错的坑
排障过程中经常遇到命令敲不对的情况,有些是语法问题,有些是设备状态问题。
提示符不对。在锐捷的用户模式>下敲show running-config会报错,得先enable。华为和 H3C 在用户视图<>下敲配置命令也会报错,得先system-view。这个低级错误发生率比想象中高,尤其是切换设备的时候。
接口名写错。三家的接口命名规则不同,华为是GigabitEthernet0/0/1,H3C 是GigabitEthernet1/0/1,锐捷是GigabitEthernet 0/1。注意华为和 H3C 是三层编号(槽位/子卡/端口),锐捷是两层(槽位/端口)。虚拟化之后编号还会变,member 2 的接口在华为和 H3C 上要写成1/0/1或2/0/1,忘改就是“接口不存在”。
命令在低版本上不支持。同一厂商的不同版本,命令可能有增删。比如某些老版本不支持 LACP 的某种模式,敲进去报错。遇到这种情况别硬试,display version看版本,去查对应版本的命令手册。
配置被拒绝但没细看报错。设备返回一堆提示,很多人的习惯是直接翻页往下敲,结果配置没生效。我的习惯是配置完成后立刻display current-configuration | include 关键词核对,比事后回看日志高效。
6.4 速查表
最后把高频问题和排查方向整理成一张表,贴在机柜门上比记在心里靠谱:
| 现象 | 优先排查 | 对应命令 |
|---|---|---|
| 堆叠合不起来 | 版本、成员编号、端口绑定 | display irf/display stack/show switch virtual |
| 两台都显示主 | VSL/IRF 链路是否断,MAD 是否生效 | display irf topology/show switch virtual link |
| 管理 IP 冲突 | 是否双主,虚拟 IP 配置是否重复 | display ip interface brief |
| 业务时通时断 | 聚合口成员状态,生成树收敛 | display eth-trunk/show aggregateport summary |
| 堆叠口频繁 UP/DOWN | 光模块、光纤、CRC 错误计数 | display interface看错误统计 |
| 配置重启后丢失 | 是否执行保存 | display saved-configuration |
| 跨设备流量慢 | 堆叠链路带宽是否打满 | 查看堆叠口流量统计 |
有个细节需要补充:跨设备流量慢这个现象特别隐蔽。虚拟化之后,两台交换机之间的流量要走 VSL/IRF 链路,如果这条链路只有千兆,而业务侧是万兆上联,那么跨设备的流量就会卡在堆叠口上。表现是“同设备内的主机互访正常,跨设备就慢”,很容易被误判成网络故障。规划阶段就要把堆叠链路带宽算够,至少不低于业务链路的带宽总和。
我自己在这些设备上折腾了几年,最深的体会是:虚拟化配置的技术难度不高,难的是流程纪律。命令就那么几条,背也背下来了,但版本核对、编号修改、端口 shutdown、存配置、重启验证这几个动作,少做一步就得多花一小时排查。与其事后拿着 console 线蹲机房,不如事前把那四件事确认三遍。另外,跨厂商混用的环境里,我习惯在每台设备的描述字段里写明对端设备型号和互联端口,display interface description一敲,拓扑关系一目了然,比翻台账快得多。