第120篇:堆叠与 VRRP 结合的高可用方案
关键词:堆叠、CSS/iStack、VRRP、高可用、架构对比、主备切换、跨设备链路聚合、园区网设计
一、引言
在前一篇第119篇中,我们学习了 VRRP 如何跟踪上行接口实现联动切换。VRRP 是默认网关冗余的经典方案,但它存在一个固有局限:VRRP 只能实现主备模式,Backup 设备在正常运行时处于空闲状态,无法分担流量。
堆叠技术(如华为的 CSS/CSS2 和 iStack)将多台物理交换机虚拟为一台逻辑设备,消除了对 VRRP 的需求。然而,在跨设备场景下(如两台独立的汇聚交换机),堆叠不可行时,堆叠与 VRRP 结合的方案提供了更高灵活性的高可用架构。
二、核心概念
2.1 堆叠与 VRRP 的对比
| 对比维度 | 堆叠方案 | VRRP 方案 | 堆叠 + VRRP 方案 |
|---|---|---|---|
| 设备数量 | 多台物理设备逻辑为一台 | 独立设备 | 堆叠组之间用 VRRP |
| 管理复杂度 | 低,统一配置 | 中,每台独立配置 | 中 |
| 带宽利用率 | 高,所有链路活跃 | 低,Backup 空闲 | 高,堆叠内负载分担 |
| 切换时间 | 毫秒级(设备内) | 秒级 | 毫秒级(堆叠内)+ 秒级(堆叠间) |
| 上行链路 | Eth-Trunk 跨设备聚合 | 独立链路 | Eth-Trunk + VRRP |
| 部署成本 | 需要堆叠线缆 | 无需额外线缆 | 需要堆叠线缆 |
2.2 堆叠与 VRRP 结合的典型架构

2.3 堆叠的基本概念
| 概念 | 说明 |
|---|---|
| 堆叠(Stacking) | 多台交换机通过堆叠线缆连接,逻辑上为一台设备 |
| 主设备(Master) | 堆叠中的控制平面,负责管理和转发决策 |
| 从设备(Slave) | 堆叠中的数据平面,执行主设备的转发指令 |
| 堆叠优先级 | 决定主备选举,值越大优先级越高 |
| 堆叠系统 ID | 堆叠组的唯一标识 |
| 跨设备 Eth-Trunk | 堆叠后可将不同物理设备的端口加入同一个 Eth-Trunk |
2.4 高可用架构方案选择
| 场景 | 推荐方案 | 说明 |
|---|---|---|
| 小型园区(1-2 台汇聚) | VRRP | 简单部署,无需堆叠线缆 |
| 中型园区(2+ 台汇聚) | 堆叠 + VRRP | 堆叠组内负载分担,堆叠组间主备 |
| 大型园区(多层架构) | 堆叠 + VRRP + BFD | 端到端高可用 |
| 数据中心 | 堆叠/CSS + ECMP | 最大化带宽利用 |
三、技术细节
3.1 堆叠的工作原理

3.2 堆叠与 VRRP 协同工作模式
当两个堆叠组之间运行 VRRP 时:
| 特性 | 说明 |
|---|---|
| 虚拟路由器 | VRRP 虚拟路由器运行在两个堆叠组之间 |
| 跨设备 Eth-Trunk | 接入层通过 Eth-Trunk 同时连接到两个堆叠组 |
| M-LAG | 可选方案,替代 VRRP,实现真正的负载分担 |
| 切换时间 | 堆叠组内切换毫秒级,堆叠组间 VRRP 切换秒级 |
3.3 堆叠主备选举

3.4 VRRP 在堆叠组上的运行特点
| 特性 | 说明 |
|---|---|
| 虚拟 IP 归属 | VRRP 虚拟 IP 配置在堆叠组的 VLANIF 接口上 |
| 通告发送 | 由堆叠组中的 Master 设备发送 VRRP 通告 |
| 接口跟踪 | 跟踪堆叠组中物理设备的上行接口 |
| 堆叠分裂 | 堆叠分裂时,两个部分都可能认为自己是 Master,需配置分裂处理策略 |
四、实战配置/案例分析
4.1 堆叠基础配置
# ========== 交换机 A(优先级 150,将成为 Master) ==========
# 1. 配置堆叠优先级
[HUAWEI] stack
[HUAWEI-stack] priority 150
[HUAWEI-stack] quit
# 2. 配置堆叠系统 MAC(可选,推荐手动指定)
[HUAWEI] stack
[HUAWEI-stack] system-mac minimum 001E-1020-3040
[HUAWEI-stack] quit
# 3. 配置堆叠端口
[HUAWEI] interface StackPort1 1
[HUAWEI-StackPort1-1] port group 0 member interface FortyGigE 1/0/25
[HUAWEI-StackPort1-1] quit
# 4. 保存配置并重启(堆叠配置需重启生效)
[HUAWEI] save
[HUAWEI] restart
# ========== 交换机 B(优先级 100,将成为 Slave) ==========
[HUAWEI] stack
[HUAWEI-stack] priority 100
[HUAWEI-stack] quit
[HUAWEI] interface StackPort1 1
[HUAWEI-StackPort1-1] port group 0 member interface FortyGigE 1/0/25
[HUAWEI-StackPort1-1] quit
[HUAWEI] save
[HUAWEI] restart
4.2 跨设备 Eth-Trunk 配置
# ========== 堆叠组配置跨设备 Eth-Trunk ==========
# 1. 创建 Eth-Trunk
[HUAWEI-AGG-1] interface Eth-Trunk 10
[HUAWEI-AGG-1-Eth-Trunk10] mode lacp-static
[HUAWEI-AGG-1-Eth-Trunk10] trunk port GigabitEthernet 1/0/1
[HUAWEI-AGG-1-Eth-Trunk10] trunk port GigabitEthernet 2/0/1
[HUAWEI-AGG-1-Eth-Trunk10] mode hybrid
[HUAWEI-AGG-1-Eth-Trunk10] portlink-type trunk
[HUAWEI-AGG-1-Eth-Trunk10] port trunk allow-pass vlan 10 20 30
[HUAWEI-AGG-1-Eth-Trunk10] quit
# ========== 验证 ==========
[HUAWEI-AGG-1] display eth-trunk 10
# 确认两个成员端口来自不同的物理设备
[HUAWEI-AGG-1] display stack
4.3 堆叠组间 VRRP 配置
# ========== 堆叠组 1(VRRP Master) ==========
# 1. 配置 VLANIF 接口和 VRRP
[HUAWEI-AGG-1] interface Vlanif 10
[HUAWEI-AGG-1-Vlanif10] ip address 10.10.10.1 255.255.255.0
[HUAWEI-AGG-1-Vlanif10] vrrp vrid 1 virtual-ip 10.10.10.254
[HUAWEI-AGG-1-Vlanif10] vrrp vrid 1 priority 120
[HUAWEI-AGG-1-Vlanif10] vrrp vrid 1 preempt timer delay 10
[HUAWEI-AGG-1-Vlanif10] vrrp vrid 1 track bfd-session 1 reduced 40
[HUAWEI-AGG-1-Vlanif10] quit
# ========== 堆叠组 2(VRRP Backup) ==========
[HUAWEI-AGG-2] interface Vlanif 10
[HUAWEI-AGG-2-Vlanif10] ip address 10.10.10.2 255.255.255.0
[HUAWEI-AGG-2-Vlanif10] vrrp vrid 1 virtual-ip 10.10.10.254
[HUAWEI-AGG-2-Vlanif10] vrrp vrid 1 priority 100
[HUAWEI-AGG-2-Vlanif10] vrrp vrid 1 preempt timer delay 10
[HUAWEI-AGG-2-Vlanif10] vrrp vrid 1 track bfd-session 1 reduced 40
[HUAWEI-AGG-2-Vlanif10] quit
# ========== 验证 ==========
[HUAWEI-AGG-1] display vrrp brief
[HUAWEI-AGG-2] display vrrp brief
4.4 堆叠分裂处理配置
# ========== 堆叠分裂处理策略 ==========
# 1. 配置保留优先级高的堆叠组
[HUAWEI-AGG-1] stack
[HUAWEI-AGG-1-stack] split-recovery priority
[HUAWEI-AGG-1-stack] quit
# 2. 配置分裂后等待时间(防止频繁震荡)
[HUAWEI-AGG-1] stack
[HUAWEI-AGG-1-stack] split-recovery interval 10
[HUAWEI-AGG-1-stack] quit
4.5 故障案例:堆叠分裂导致 VRRP 脑裂
场景描述:汇聚堆叠组 1 的两台交换机之间堆叠线缆故障,堆叠分裂为两个独立设备。两台设备都运行 VRRP Master 状态,与堆叠组 2 分别建立了 VRRP 关系。
排查过程:
- 检查堆叠状态:
[HUAWEI-AGG-1] display stack
# 堆叠状态异常,仅显示单一设备信息
# 堆叠线缆端口 Down
- 检查 VRRP 状态:
# 堆叠组 1 分裂后的两个部分都显示为 Master
[RTR-PartA] display vrrp brief
# VRID 1, State: Master
[RTR-PartB] display vrrp brief
# VRID 1, State: Master
- 根因确认:堆叠分裂后,两部分各自保留了完整的配置和 VRRP 状态。由于堆叠线缆故障,两部分之间无法通信,各自独立运行 VRRP。
处理措施:
# 第一步:修复堆叠线缆
# 检查并更换堆叠线缆,恢复堆叠连接
# 第二步:配置堆叠分裂处理
[HUAWEI-AGG-1] stack
[HUAWEI-AGG-1-stack] split-recovery priority
# 分裂时保留优先级高的部分,另一部分自动退出
# 第三步:配置分裂检测
[HUAWEI-AGG-1-stack] split-recovery interval 30
# 分裂后等待 30 秒再处理,避免短暂抖动
4.6 故障案例:跨设备 Eth-Trunk 哈希不均
场景描述:跨设备 Eth-Trunk 部署后,发现堆叠组中一台交换机 CPU 和端口流量远高于另一台。
排查过程:
- 检查 Eth-Trunk 负载分布:
[HUAWEI-AGG-1] display eth-trunk 10
# 成员端口 GigabitEthernet 1/0/1 流量 900Mbps
# 成员端口 GigabitEthernet 2/0/1 流量 100Mbps
# 负载严重不均
- 根因分析:Eth-Trunk 的负载均衡算法默认基于源 MAC 地址。如果接入的终端 MAC 地址分布不均匀(如大量终端属于同一子网),哈希结果会偏向某个成员端口。
处理措施:
# 调整 Eth-Trunk 负载分担模式
[HUAWEI-AGG-1] interface Eth-Trunk 10
[HUAWEI-AGG-1-Eth-Trunk10] load-balance src-dst-mac
# 使用源 MAC + 目的 MAC 哈希
# 或使用 src-dst-ip 基于 IP 地址哈希
[HUAWEI-AGG-1-Eth-Trunk10] load-balance src-dst-ip
五、总结
| 项目 | 说明 |
|---|---|
| 堆叠本质 | 多台物理交换机虚拟为一台逻辑设备 |
| 跨设备 Eth-Trunk | 堆叠后的核心优势,实现链路级负载分担 |
| 堆叠 + VRRP | 堆叠组内负载分担,堆叠组间主备冗余 |
| 切换时间 | 堆叠组内毫秒级,堆叠组间 VRRP 秒级 |
| 堆叠分裂 | 需要配置 split-recovery 策略防止脑裂 |
| 华为推荐 | 汇聚层堆叠 + 堆叠间 VRRP + BFD 快速检测 |
思考
-
堆叠组之间的 VRRP 切换时间比堆叠组内的切换时间慢得多。如果要求亚秒级切换,有什么替代方案?
-
堆叠线缆通常使用两根以实现冗余。如果两根堆叠线缆同时故障,堆叠分裂后 VRRP 会发生什么变化?
-
跨设备 Eth-Trunk 的哈希不均问题在什么场景下最严重?如何从根本上解决?
下篇预告:第121篇:Smart Link与Monitor Link原理