华为H3C实战 | 第5章 链路聚合与堆叠
📚 本系列共 43 篇(第 5 / 43 篇) · 第一卷 基础篇 —— 交换机的骨架
← 上一篇:第 4 章 STP / RSTP / MSTP 生成树 下一篇:第 6 章 三层接口与网关 →
本章导读:两条路空一条当备用太浪费,捆成一条四车道的大路才划算——这是链路聚合;两台交换机"焊"成一台、对外只有一个管理 IP,是堆叠(华为 iStack/CSS,H3C IRF)。两者都为可靠,但堆叠有死穴:割裂后冒出两个"组长"。
本章结构:
- 5.1 功能原理与业务场景 —— 聚合的带宽叠加与故障切换、堆叠的三大价值(简化管理/提高可靠/消除环路)与代价(风险集中)、割裂(Split)与 MAD 多主检测
- 5.2 华为设备配置详解 ——
Eth-Trunk+mode lacp-static、max active-linknumber、堆叠的两种写法(stack-port逻辑口 / 业务口堆叠)、“我到底要不要堆叠"三个自问 - 5.3 H3C 设备配置详解 ——
Bridge-Aggregation/Route-Aggregation、link-aggregation mode dynamic、IRF 的irf-port-configuration active两步 - 5.4 命令对照表 —— 聚合口名称、LACP 开关、成员口在哪一端配(华为在聚合口
trunkport,H3C 在成员口) - 5.5 配置验证 ——
display eth-trunk看 Selected/Unselect、display irf/display mad verbose看角色与双主检测 - 5.6 排错与故障树 —— 成员口 Unselect(模式不一致/参数不一致)、聚合口 up 但只有一条链有流量(单流哈希不均)、堆叠后双主
- 5.7 新手踩坑 —— 只在聚合口配 VLAN、改成员编号导致接口编号变化、堆叠合并时配置被覆盖
- 5.8 本章小结 —— 要点清单 + 自测题
重点提示:先回答 5.2 那三个问题再动手——“防一根线断"用聚合就够,“防一台设备坏"才需要堆叠。聚合口 up 但带宽没叠加,先看是不是单条大流(哈希是逐流的,不是逐包的);出现双主直接查 5.6 的 MAD 行。第一次堆叠别怕:备设备会重启一次、业务中断几十秒是正常的。 关联章节:聚合口上配 VLAN 见第 3 章;聚合口作为三层口做网关见第 6 章;堆叠/聚合之后的双机网关冗余见第 7 章;接 AP 的上行链路常用聚合与堆叠见第 19 章。
5.1 功能原理与业务场景
5.1.1 这功能是干嘛的(通俗版)
先说链路聚合。两条马路各两条车道,如果平时只开一条路,另一条路空着当备用——这就是「主备」思路,浪费了一半资源。更好的做法是:把两条路合并成一条四车道的大路,车流自动分配,哪条路坏了就少两条车道,但大路还在。链路聚合(Link Aggregation)就是这个意思:把 2~8 条物理链路捆绑成一条逻辑链路,带宽叠加、故障自动切换。
再说堆叠。两台交换机单独看是两台设备,各自要有管理 IP、各自跑一遍配置、各自升级软件。如果把它们「焊」成一台呢?对外看起来只有一个管理 IP、一套配置、一个 RIP,下面的终端无论接在哪台成员上,看起来都在同一台交换机里——这就是堆叠(Stacking)。华为叫 iStack(盒式)/ CSS(集群交换机系统,框式),H3C 叫 IRF(Intelligent Resilient Framework,智能弹性架构)。
堆叠的价值有三条:简化管理(一套配置管多台设备)、提高可靠性(一台成员坏了另一台顶上)、消除环路(成员之间的链路是「内部链路」,不参与 STP 计算,省掉了多余链路被阻塞的浪费)。代价是风险集中——堆叠系统一旦整体崩溃,影响面是一整组设备,而不是一台。
最需要警惕的是堆叠的固有风险:堆叠割裂(Split)。两台成员之间的堆叠链路断了,但两台成员都还活着,它们会各自认为自己才是「组长」,于是出现了两个配置完全相同、IP 相同的设备——网络里同时存在两个网关、两个 DHCP 服务器、两个 STP 根桥,轻则地址冲突,重则广播风暴。这就是「双主」现象。MAD(Multi-Active Detection,多主检测)就是专门用来检测并压制这种双主的保命机制。
5.1.2 在网络里怎么落地(设计视角)
先看链路聚合的典型组网。两台核心与两台接入之间做交叉互联,每条互联都是双链路聚合:
[CORE-SW1] [CORE-SW2]
│ ╲ ╱ │
│ ╲─── Eth-Trunk 10 (2×10G) ──╱ │
│ ╲ ╱ │
│ ╲ ╱ │
│ [ACC-SW1]════[ACC-SW2] │
│ (堆叠/IRF 为一台逻辑设备) │
│ │
[Eth-Trunk 11] [Eth-Trunk 12]
2×1G 上联 2×1G 上联
↓ ↓
[ACC-SW3] ── Eth-Trunk 20 ── [ACC-SW4]
在这个模型里,Eth-Trunk 起到了「带宽叠加 + 故障冗余」双重作用,而堆叠让 ACC-SW1 和 ACC-SW2 变成一台逻辑设备,对 CORE 侧来说就是「一个设备、两条聚合链路」。
链路聚合有两种工作模式:
手工负载分担模式(Manual Load Balance):所有成员口都参与转发,没有协议参与协商。配置简单,但对端必须也是手工模式,两边一旦参数不一致(比如一端把某个口配错了 VLAN),故障可能不会被及时发现。
LACP 模式:用 LACP(Link Aggregation Control Protocol,链路聚合控制协议)[34] 报文协商,报文里带系统优先级、端口优先级、活动状态等信息。两端通过协商确定哪些口是「活动口」、哪些是「备份口」,还能配置 M:N 模式(M 个活动口 + N 个备份口)。LACP 模式能发现半数故障:比如两端 VLAN 配置不一致,LACP 协商会发现参数不匹配而不选中成员口,从而避免「半个业务不通」的隐性故障。
用生活化的比喻:手工模式像两个人约好「我们都走这条路」,但谁也没确认对方是不是真的在路上;LACP 模式像两个人每隔几秒互相喊话「我在路上,你也在吗?」,有人掉队了立刻知道。
链路聚合的流量分配靠哈希算法。设备把每个报文按某些字段(源 MAC、目的 MAC、源 IP、目的 IP、源端口、目的端口等)算一个哈希值,再对成员口数量取模,决定从哪个成员口发出去。这里有个关键特性:同一「流」的报文永远走同一个成员口(否则会出现乱序)。所以「带宽叠加」是统计意义上的——如果两台服务器之间只有一条 TCP 连接,那么它只能用到 1 条成员的带宽。这是新手最容易产生的误解:「为什么我聚合了 4 条 10G,传文件只有 10G 的速度?」
堆叠的实现要点:堆叠的成员通过堆叠口(物理口)用专用线缆互联,运行时选举出一台主设备(Master),其余为备设备(Standby)或从设备(Slave)。主设备负责管理面(CLI、SNMP 等),所有成员共享同一份配置。成员编号(Member ID)是用来区分各成员的重要参数,接口编号的第一位就是成员编号。
堆叠割裂的判断与处置是现代园区网设计必须考虑的问题。下面这套「主备 + MAD」的组合是标准做法,本章后面会给出完整配置。
适用版本:华为 VRP V200R019 及以上(S5735/S5731/S6730 等盒式设备支持 iStack,S12700/S7700 等框式支持 CSS);H3C Comware V7(S5130S/S5560/S6850 等支持 IRF)。堆叠与 IRF 的成员数上限、堆叠口选择、MAD 检测方式的支持情况与型号强相关,务必查阅对应型号的配置指南。
5.2 华为设备配置详解
5.2.1 命令行基础速览(本章会用到的那几条)
链路聚合部分:
| 命令 | 在哪敲 | 干什么 |
|---|---|---|
interface Eth-Trunk 1 |
系统视图 | 创建/进入聚合口 |
mode lacp-static |
Eth-Trunk 视图 | 切换到 LACP 模式 |
mode manual load-balance |
Eth-Trunk 视图 | 手工模式(缺省) |
trunkport GigabitEthernet 0/0/1 to 0/0/3 |
Eth-Trunk 视图 | 批量加成员口 |
max active-linknumber 2 |
Eth-Trunk 视图 | 最大活动链路数(M:N) |
lacp priority 100 |
接口/Eth-Trunk 视图 | LACP 端口优先级 |
lacp system-priority 100 |
系统视图 | LACP 系统优先级 |
lacp preempt enable |
Eth-Trunk 视图 | 抢占 |
load-balance src-dst-ip |
Eth-Trunk 视图 | 负载分担哈希方式 |
display eth-trunk 1 |
任意视图 | 看聚合状态 |
堆叠部分:
| 命令 | 在哪敲 | 干什么 |
|---|---|---|
stack slot 0 priority 200 |
系统视图 | 设堆叠成员(槽位)优先级 |
stack slot 0 renumber 1 |
系统视图 | 改成员编号 |
interface stack-port 0/1 |
系统视图 | 进入堆叠口 |
display stack |
任意视图 | 看堆叠状态 |
5.2.2 完整配置模板
先给链路聚合的完整配置(两台交换机之间的 LACP 聚合 + trunk 承载 VLAN):
# 华为 CORE-SW1:创建 Eth-Trunk 1,LACP 模式,3 个成员口
system-view
sysname CORE-SW1
vlan batch 10 20 30 40
interface Eth-Trunk 1
description TO-ACC-SW1
mode lacp-static
load-balance src-dst-ip
# 承载业务 VLAN,按 trunk 配
port link-type trunk
port trunk allow-pass vlan 10 20 30 40
# 把 3 个物理口加进来
trunkport GigabitEthernet 0/0/1 to 0/0/3
quit
# 需要注意:成员口的配置会跟随 Eth-Trunk 口
interface GigabitEthernet0/0/1
description MEMBER-OF-ETH1
quit
interface GigabitEthernet0/0/2
description MEMBER-OF-ETH1
quit
interface GigabitEthernet0/0/3
description MEMBER-OF-ETH1
quit
quit
save
对端 ACC-SW1 的等价配置如下(两端的模式、VLAN、哈希方式必须一致):
# 华为 ACC-SW1:对端的等价配置
system-view
sysname ACC-SW1
vlan batch 10 20 30 40
interface Eth-Trunk 1
description TO-CORE-SW1
mode lacp-static
load-balance src-dst-ip
port link-type trunk
port trunk allow-pass vlan 10 20 30 40
trunkport GigabitEthernet 0/0/1 to 0/0/3
quit
quit
save
如果要配置 M:N 模式(3 个成员口,最多 2 个活动、1 个备份),额外加两条:
# 华为:限制最大活动链路为 2,并开启抢占
[HUAWEI] interface Eth-Trunk 1
[HUAWEI-Eth-Trunk1] max active-linknumber 2
[HUAWEI-Eth-Trunk1] lacp preempt enable
[HUAWEI-Eth-Trunk1] lacp preempt delay 30
再看堆叠。两台 S5735 堆叠为标准 iStack,成员 1 做主、成员 2 做备:
# ===== 设备 A(准备做成员 1,主设备)=====
system-view
# 设成员优先级(数值越大越优先成为主设备,缺省 100)
stack slot 0 priority 200
# 改成员编号为 1(缺省是 0)
stack slot 0 renumber 1
# 提示需要重启生效,先 quit 保存后重启
quit
save
reboot
第二台成员设备的配置,优先级保持缺省、成员编号改为 2:
# ===== 设备 B(准备做成员 2,备设备)=====
system-view
# 优先级保持缺省 100,专做备设备
stack slot 0 priority 100
# 改成员编号为 2
stack slot 0 renumber 2
quit
save
reboot
两台设备的成员编号配好后,接着要把物理口绑成逻辑堆叠口。华为 iStack 的堆叠口配置有两套写法,取决于设备型号和 VRP 版本,这就是「网上教程为什么老对不上」的原因:
写法一(老型号 / 经典 VRP):进入 interface stack-port <成员号>/<端口号> 逻辑堆叠口视图,用 port interface <物理口> enable 把物理口加进去:
# 华为:写法一(老型号,例:S5700-LI 系列的前代配置)
system-view
# 进入 0 号成员的第 1 个逻辑堆叠口
interface stack-port 0/1
# 把物理口 XGE0/0/1 变成该堆叠口的成员口
port interface XGigabitEthernet 0/0/1 enable
quit
# 第 2 个逻辑堆叠口接另一个方向
interface stack-port 0/2
port interface XGigabitEthernet 0/0/2 enable
quit
quit
save
写法二(新型号 / 业务口堆叠):先在物理口上开启「业务口作为堆叠口」的功能,再把它加入逻辑堆叠口。有的版本还要先执行 stack port interface <物理口> enable:
# 华为:写法二(新型号业务口堆叠)
system-view
# 可选:先显式开启该物理口的堆叠能力(部分版本支持,不支持就跳过)
stack port interface XGigabitEthernet 0/0/2 enable
# 进入逻辑堆叠口,把物理口加为成员
interface stack-port 0/1
port member-group interface XGigabitEthernet 0/0/2
quit
quit
save
⚠ 两条必须记住的规则:① 交叉连接——本端 stack-port 0/1 的成员口要接对端的 stack-port 0/2,不能 1 对 1、2 对 2,否则堆叠组不起来(官方文档写作「同一条链路上相连交换机的堆叠物理端口必须加入不同的堆叠端口」)。② 堆叠线缆在配置并保存完成后再插,先插线后配置会出现设备反复重启竞选的情况。另外,改成堆叠口时物理口上原有的业务配置会丢失,设备会弹 Warning: ... may cause configuration loss ... Continue? [Y/N],敲 y 前先确认这个口不跑业务。
⚠ 版本差异:port interface ... enable 与 port member-group interface 是两代写法,具体某个型号用哪一条,必须查该型号的《配置指南 - 堆叠配置》。判断方法:在 interface stack-port 0/1 视图下敲 port ?,能列出 interface 就是写法一,能列出 member-group 就是写法二。用错了会直接报错(Unrecognized command),不会静默失败,所以试一下就知道。
配置完成后验证:
# 华为:查看堆叠状态
<HUAWEI> display stack
5.2.3 逐行讲解
先讲 mode lacp-static。Eth-Trunk 缺省是手工负载分担模式,也就是不跑 LACP。要跑 LACP 必须显式 mode lacp-static。这里提示符里的 “static” 指的是「成员口由手工指定(不是动态协商加入)」,而 LACP 协议本身在跑——这就是为什么它叫「静态 LACP」。
| 命令 | 作用 | 新手常错 |
|---|---|---|
mode lacp-static |
切 LACP 模式 | 必须两端都是 LACP,一端 manual 一端 lacp 会导致成员口不选中 |
trunkport GigabitEthernet 0/0/1 to 0/0/3 |
批量加成员 | 成员口原先有配置的话会被 Eth-Trunk 覆盖,加之前先清 |
load-balance src-dst-ip |
按源目的 IP 哈希 | 只能影响本端出方向 |
max active-linknumber 2 |
最大活动数 | 只在 LACP 模式下有效 |
lacp preempt enable |
抢占 | 关掉时故障恢复后不抢回主用,可能长期偏离设计 |
port link-type trunk |
聚合口承载多 VLAN | 成员口上不要单独配,会冲突 |
链路聚合有几个成员口必须一致的硬性条件,不满足就不选中。这是排障时第一时间要查的:
| 约束项 | 说明 |
|---|---|
| 速率与双工 | 必须相同(1G 和 10G 不能混聚,部分型号支持混合速率但需特殊配置) |
| 接口类型(二层/三层) | 必须是同一类型(都二层或都三层) |
| VLAN 配置 | 二层口的 PVID、放行 VLAN 必须一致 |
| 流控配置 | 必须一致 |
| MTU/巨型帧 | 必须一致 |
| 端口隔离 | 必须一致 |
| 端口安全 | 必须一致 |
| STP 相关属性 | 端口优先级、开销等需一致,否则影响选路 |
| 不能是管理口 | MEth 口不能加入 |
这些条件不满足时,display eth-trunk 1 里该成员口会显示 Unselect 或者原因,比如 Different port VLAN、Different port speed 等。读到这个原因,问题基本就定位了。
关于 load-balance 哈希方式的选择,没有「最优解」,只有「最适合你的流量模型」:
| 哈希方式 | 适合场景 |
|---|---|
src-dst-mac |
二层转发为主、终端数量多(缺省常用) |
src-dst-ip |
三层转发为主、服务器间流量 |
src-ip |
单服务器多客户端(源 IP 多样) |
dst-ip |
多客户端访问单一服务器(目的 IP 集中) |
src-dst-ip-l4port |
有大量不同连接(如 Web 服务),能分散到更多成员口 |
配置方式是 load-balance <方式>(Eth-Trunk 视图)。两家都支持类似的选项。
堆叠部分要重点讲清楚三个参数:
- 成员编号(member ID / slot ID):区分各成员,接口编号第一位就是它。改编号后必须重启才生效,且重启前原编号对应的接口配置会「跟着走」——这是新手最容易踩的坑(改完编号后原来的
GigabitEthernet0/0/1变成了GigabitEthernet1/0/1,原配置可能丢失)。 - 优先级(priority):决定谁当主设备,数值越大越优先。主备要拉开差距,比如主 200、备 100,不要两个都是 200(那样又要比 MAC,结果不确定)。
- 堆叠口:用专用的堆叠口(物理口)互联。堆叠线缆的速率决定了成员间的流量能力,通常用万兆或专用堆叠线。
关于「堆叠能不能替代链路聚合」,答案是不能完全替代,各有分工:
| 对比项 | 链路聚合 | 堆叠 |
|---|---|---|
| 升级对象 | 逻辑链路 | 逻辑设备 |
| 管理面 | 每台设备独立管理 | 统一管理 |
| 带宽 | 多个成员口带宽叠加 | 成员间流量走堆叠口(可能成为瓶颈) |
| 故障域 | 单条链路故障 | 单台成员故障(整体不中断) |
| 配置复杂度 | 低 | 中高(需 MAD) |
| 割裂风险 | 无 | 有(需 MAD 检测) |
堆叠与链路聚合的选型决策
很多初学者会把「堆叠」和「链路聚合」混为一谈,因为它们都在解决「带宽与冗余」。但两者的抽象层次完全不同:
链路聚合解决的问题 堆叠解决的问题
┌──────────────────────────┐ ┌──────────────────────────┐
│ 一根逻辑链路 = 多条物理链路 │ │ 一台逻辑设备 = 多台物理设备 │
│ (数据面:带宽/冗余) │ │ (管理面:统一管理/简化) │
└──────────────────────────┘ └──────────────────────────┘
选型逻辑可以这样问自己三个问题:
第一个问题:我只是要「防一根线断了」吗? 那就用链路聚合,两条 1G 做聚合,断一条还有一条,最简单。
第二个问题:我是要「防一台交换机坏了」吗? 单台设备做链路聚合不能防设备故障(设备坏了所有链路都断了)。要防设备故障,必须有两个独立设备 + 冗余设计,这时候堆叠就有用:两台成员堆叠后,一台整个坏掉,另一台还在跑,只是带宽减半。但注意,堆叠并非唯一的办法——也可以用两台独立交换机 + 交叉互联 + STP 阻塞一条 + VRRP 做网关冗余(第 6 章),这就是「非堆叠方案」。
第三个问题:我管的是几台设备? 如果管理开销是痛点(十几台接入交换机各自升级、各自配 VLAN),堆叠能让「一次配置所有成员生效」,这个是链路聚合做不到的。
把这三个问题串起来,得到一张选型表:
| 需求 | 推荐方案 | 理由 |
|---|---|---|
| 只是链路冗余 | 链路聚合 | 成本最低 |
| 链路冗余 + 设备冗余 | 两台设备堆叠/IRF + 链路聚合 | 单点故障都可覆盖 |
| 链路冗余 + 设备冗余 + 免堆叠风险 | 两台独立设备 + 交叉链路 + STP(或 M-LAG) | 没有割裂风险,但管理复杂 |
| 管理面统一 | 堆叠/IRF | 一次配置、一次升级 |
| 大规模接入层 | 堆叠 2~4 台 + 上行聚合 | 兼顾管理与可靠 |
这里顺带提一个中间态技术:M-LAG(Multi-Chassis Link Aggregation Group,跨设备链路聚合)。它让两台独立设备在控制面上保持独立(不像堆叠那样合成一台),却在链路聚合层面表现为一个逻辑设备,从而结合了「设备冗余」和「没有堆叠割裂风险」两个优点。华为叫 M-LAG,H3C 叫 DRNI(Distributed Resilient Network Interconnect,分布式弹性网络互连)。它的配置比堆叠复杂得多,本章不展开,但你应该知道:当你听到「既要做堆叠式冗余又怕双主」的诉求时,答案就是 M-LAG/DRNI。
LACP 报文与协商过程
LACP 是一个慢协议,在以太网帧里用 0x8809 作为 EtherType,目的 MAC 是组播地址 01-80-c2-00-00-02,每 1 秒发一次(快模式)/30 秒一次(慢模式)。报文里的关键字段:
| 字段 | 含义 |
|---|---|
| Actor System ID | 本端系统(设备)ID = 系统优先级 + MAC |
| Actor Port ID | 本端端口 ID = 端口优先级 + 端口号 |
| Actor Port State | 本端端口状态(活动/超时/聚合/同步/收集/分发) |
| Partner System ID | 对端系统 ID(协商后得知) |
| Partner Port ID | 对端端口 ID |
| Oper Key | 聚合组标识(同一聚合组的成员 Oper Key 相同) |
协商的关键在于「Oper Key 匹配」:两端成员口的 Oper Key 相同,主控系统协商通过,端口才能进入 Selected。这解释了为什么「一端 LACP、一端手工」时,手工端不会响应 LACP,LACP 端的 Partner 字段为空、端口无法 Selected。
工程上还有一点:LACP 的端口优先级决定「谁是活动口」。M:N 模式下,只有优先级高的前 M 个口被选中,其余 N 个作为备份。优先级数值越小越优先,缺省 32768。这个与 STP 端口优先级的规则一致,容易记混的可以记住「小数字 = 高位」。
堆叠系统的启动与合并过程
理解堆叠怎么「长成一台设备」,对排障至关重要。一次正常的堆叠启动流程是这样的:
[1] 各成员上电,读自己的配置文件与成员编号
|
[2] 通过堆叠口互相发现(建立堆叠拓扑)
|
[3] 选举主设备(优先级高的胜出,平局比 MAC)
|
[4] 备设备重启(清空自己的运行状态)
|
[5] 主设备把配置同步给所有成员
|
[6] 系统稳态:一台逻辑设备,所有成员同步运行
|
[7] 出现新成员/堆叠链路变化 -> 重新合并(可能再触发备设备重启)
这个过程里有两处关键现象:
第一,备设备会重启一次。所以第一次堆叠时,两台设备的业务都会中断几十秒。这个过程是正常的,不要误以为出了故障而去拔线。
第二,堆叠合并时如果两侧配置不一致,主设备会更胜出(通常优先级高的配置赢),另一方的配置会丢失。这就是为什么堆叠前要先把两台设备清干净或配成一致,否则可能出现「合并后配置乱掉」。
堆叠的层次化升级流程(这是运维必须掌握的):升级整个堆叠系统时,不能简单 reboot 全部成员,而要按顺序:先升级备设备并重启 → 确认备设备正常 → 主备切换 → 再升级原主设备。这样过程中始终有一台成员在工作,业务中断时间从「几分钟」缩短到「一次切换」。具体命令在华为与 H3C 各有专门流程,请以厂商文档的「堆叠/IRF 升级指导」为准。
堆叠的风险设计:为什么需要 MAD
堆叠的核心风险是:控制面必须只有一个。一旦出现两个控制面(双主),问题会连锁放大:
| 双主带来的问题 | 具体表现 |
|---|---|
| IP 地址冲突 | 两个成员有相同的管理 IP、VLANIF 地址、VRRP 虚地址 |
| 网关双活 | 下挂终端的网关同时存在两个,ARP 应答冲突 |
| STP 双根 | 两套 STP 计算互相干扰 |
| DHCP 双服务器 | 客户端收到两份地址 |
| MAC 表混乱 | 同一 MAC 在两套系统里都有记录 |
MAD 的设计思想是:在双主发生时,不追求「让两个都工作」,而是「牺牲一个,保住另一个」。所以 MAD 的处置动作是关闭其中一台的全部业务端口,让网络退化成「单主」,确定性地保住业务。
这也带来一个工程观念:堆叠不是「不要中点」,而是「可控地接受中点」。只要堆叠链路的可靠性足够高(专用堆叠线、双归堆叠口),加上 MAD 兜底,风险就是可控的。
5.3 H3C 设备配置详解
5.3.1 命令行基础速览
H3C 的聚合命令体系与华为不同,聚合口叫 Bridge-Aggregation(二层)和 Route-Aggregation(三层),需要在创建后进入其接口视图配置:
| 命令 | 在哪敲 | 干什么 |
|---|---|---|
interface Bridge-Aggregation 1 |
系统视图 | 创建二层聚合口 |
link-aggregation mode dynamic |
聚合口视图 | 切 LACP 动态模式 |
port link-aggregation group 1 |
成员口视图 | 把物理口加入聚合组 |
link-aggregation selected-port maximum 2 |
聚合口视图 | 最大选中端口数 |
lacp preempt enable |
聚合口视图 | 抢占 |
lacp preempt delay 30 |
聚合口视图 | 抢占延迟 |
lacp priority 100 |
成员口视图 | LACP 端口优先级 |
lacp system-priority 100 |
系统视图 | LACP 系统优先级 |
link-aggregation global load-sharing mode |
系统视图 | 全局哈希方式 |
display link-aggregation summary |
任意视图 | 聚合汇总 |
display link-aggregation verbose |
任意视图 | 聚合详情 |
5.3.2 完整配置模板
链路聚合:
# H3C CORE-SW1:Bridge-Aggregation 1,LACP 动态模式
system-view
sysname CORE-SW1
vlan 10 20 30 40
# 创建二层聚合接口
interface Bridge-Aggregation 1
description TO-ACC-SW1
# 关键:H3C 缺省为静态(手工),要跑 LACP 必须显式配 dynamic
link-aggregation mode dynamic
port link-type trunk
port trunk permit vlan 10 20 30 40
quit
# 把物理口加入聚合组(在成员口视图下配)
interface GigabitEthernet1/0/1
port link-aggregation group 1
quit
interface GigabitEthernet1/0/2
port link-aggregation group 1
quit
interface GigabitEthernet1/0/3
port link-aggregation group 1
quit
# 全局负载分担方式(按源目的 IP)
link-aggregation global load-sharing mode source-ip destination-ip
quit
save force
M:N 模式:
# H3C:最多 2 个选中端口 + 抢占
[H3C] interface Bridge-Aggregation 1
[H3C-Bridge-Aggregation1] link-aggregation selected-port maximum 2
[H3C-Bridge-Aggregation1] lacp preempt enable
[H3C-Bridge-Aggregation1] lacp preempt delay 30
IRF 堆叠:
# ===== H3C 设备 A(拟做成员 1,主设备)=====
system-view
# 成员编号缺省为 1,若要保持 1 则不需要 renumber
# 设优先级,数值越大越优先(缺省 1)
irf member 1 priority 32
quit
save force
H3C 设备 B 的配置,重点是 irf member 1 renumber 2 后必须重启才生效:
# ===== H3C 设备 B(拟做成员 2,备设备)=====
system-view
# 改成员编号为 2,重启生效
irf member 1 renumber 2
# 提示 Warning: Renumbering the member ID may result in configuration change or loss. Continue? [Y/N]
quit
save force
reboot
重启后提示符已变成 <SW2>,此时再配置 IRF 端口(把两个万兆口绑到成员 2 的 1 号 IRF 口):
# ===== 重启后(提示符已变成 <SW2>),配置 IRF 端口 =====
# 先关闭用作 IRF 口的物理口
system-view
interface Ten-GigabitEthernet2/0/49
shutdown
quit
interface Ten-GigabitEthernet2/0/50
shutdown
quit
# 把两个万兆口绑到 IRF 端口 2/1(成员 2 的 1 号 IRF 口)
irf-port 2/1
port group interface Ten-GigabitEthernet2/0/49
port group interface Ten-GigabitEthernet2/0/50
quit
# 重新开启物理口
interface Ten-GigabitEthernet2/0/49
undo shutdown
quit
interface Ten-GigabitEthernet2/0/50
undo shutdown
quit
quit
save force
设备 A 侧要配置与成员 2 对接的 IRF 端口 1/2,配置步骤完全对称:
# ===== 设备 A 侧配置对应的 IRF 端口 =====
system-view
interface Ten-GigabitEthernet1/0/49
shutdown
quit
interface Ten-GigabitEthernet1/0/50
shutdown
quit
irf-port 1/2
port group interface Ten-GigabitEthernet1/0/49
port group interface Ten-GigabitEthernet1/0/50
quit
interface Ten-GigabitEthernet1/0/49
undo shutdown
quit
interface Ten-GigabitEthernet1/0/50
undo shutdown
quit
quit
save force
最后一步是激活 IRF 端口配置,这是 H3C IRF 最容易被漏掉的一步:
# ===== 最后一步:激活 IRF 端口配置(关键!)=====
# 在成员 2 上执行
<Sysname> system-view
[Sysname] irf-port-configuration active
MAD 检测(BFD MAD 方式,最常用)。官方配置的要点是:mad bfd enable 和 mad ip address 都配在 BFD MAD 专用 VLAN 的 VLAN 接口上,不是配在聚合口上:
# ===== H3C:BFD MAD 检测配置(官方配置指导写法)=====
# 前提:两台成员之间有一条专门用于 MAD 检测的链路
system-view
# 创建 BFD MAD 检测专用 VLAN
vlan 999
quit
# 把 MAD 链路两端的物理口加入该 VLAN
# 官方要求:该 VLAN 内只能包含 MAD 检测链路上的端口
vlan 999
port GigabitEthernet 1/0/23
port GigabitEthernet 2/0/23
quit
# BFD MAD 与生成树互斥,MAD 链路口要关闭 STP
interface GigabitEthernet1/0/23
undo stp enable
quit
interface GigabitEthernet2/0/23
undo stp enable
quit
# 在专用 VLAN 接口上使能 BFD MAD,并为每个成员配置同网段的不同 MAD IP
interface Vlan-interface 999
mad bfd enable
mad ip address 192.168.255.1 24 member 1
mad ip address 192.168.255.2 24 member 2
quit
quit
save force
⚠ 官方明确的三条限制,必须记住:① BFD MAD 专用 VLAN 接口下只能配 mad bfd enable 和 mad ip address,不要用 ip address 配普通地址;② 该 VLAN 里只放 MAD 链路端口,不要混入业务口;③ BFD MAD 与生成树功能互斥,MAD 链路口上不要开 STP(undo stp enable)。
5.3.3 逐行讲解
| H3C 命令 | 对应华为 | 差异要点 |
|---|---|---|
interface Bridge-Aggregation 1 |
interface Eth-Trunk 1 |
名称完全不同 |
link-aggregation mode dynamic |
mode lacp-static |
含义对应,名字不同 |
port link-aggregation group 1 |
trunkport ... 或成员口下 eth-trunk 1 |
H3C 在成员口视图配 |
link-aggregation selected-port maximum 2 |
max active-linknumber 2 |
名字不同 |
link-aggregation global load-sharing mode |
load-balance ...(Eth-Trunk 视图) |
H3C 是全局,华为是每聚合口 |
irf member 1 renumber 2 |
stack slot 0 renumber 2 |
IRF vs iStack 命名 |
irf member 1 priority 32 |
stack slot 0 priority 200 |
数值量级不同(H3C 缺省 1,华为缺省 100) |
irf-port 2/1 + port group interface |
interface stack-port |
结构不同 |
irf-port-configuration active |
无直接对应 | H3C 需要显式激活 IRF 端口 |
H3C 缺省是静态(手工)聚合模式,这一点和华为一致(华为缺省是 manual load-balance)。所以「要跑 LACP 必须显式配」这条规则两家通用。
irf-port-configuration active 这一步是 H3C IRF 最容易被漏掉的。它的作用是「让刚才配的 irf-port 绑定关系生效」,同时会触发成员合并。漏了这一步,display irf 里会显示 IRF 端口配置存在但状态不对,两台设备永远合不成一个 IRF。记住:IRF 端口配置是「先配绑定、再激活」,两步缺一不可。
IRF 优先级缺省值是 1,不像华为是 100。所以配置时要拉开差距,比如主 32、备 10。数值越大越优先。
MAD 检测的三种方式,这是 H3C IRF 设计的精华,必须分清:
| 方式 | 原理 | 需要什么 | 适用规模 |
|---|---|---|---|
| LACP MAD | 在有 LACP 聚合的链路上通过扩展 LACP 报文检测 | 上下行必须存在动态聚合链路 | 与上游设备有 LACP 的场景(常用) |
| BFD MAD | 在专用 VLAN 上通过 BFD 会话检测 | 专用 VLAN + 专用链路 + 专用 IP 地址 | 成员数不多,需专用接线 |
| ARP MAD | 通过 ARP 报文检测 | 广播域内的三层接口 | 无 LACP 链路的场景 |
BFD MAD 的专用 VLAN 和专用 IP 不能浪费在业务上,因为 MAD IP 地址是「逻辑地址」,两台成员各配一个,正常情况下只有主设备的那个能通。如果这个 VLAN 上跑了业务,MAD 触发时会引发地址冲突。
MAD 触发后的行为:检测到双主后,IRF 会把其中一台(通常是优先级低的那台)的业务端口全部关闭,只保留管理通道,避免两个「同一网段设备」同时活跃。这是「断臂求生」策略——牺牲一半设备的连通性,保住全网的确定性。恢复时需要人工介入,把断开的堆叠链路修好,然后 irf-port-configuration active 或者重启被限制的那台。
关于 LACP MAD 的配置骨架(供参考,需要上游设备配合):
# H3C:LACP MAD(在上行聚合口上使能 mad enable)
interface Bridge-Aggregation 1
link-aggregation mode dynamic
mad enable
quit
⚠ 版本差异:三种 MAD 方式的支持情况与型号、Comware 版本相关;LACP MAD 要求上游设备也支持扩展 LACP(华为称「跨厂商 LACP MAD」需上游支持,同厂商环境更简单)。跨厂商混编时,LACP MAD 往往不可用,需改用 BFD MAD。
聚合链路的双归与跨设备场景
工程上还有一种常见的「坑」:接入交换机做双上联到两台核心,每台上联各走一条链路。如果你希望「两条上联都同时用上」,就需要跨设备聚合——但两台核心是独立设备,它们不共享聚合信息,不能对一条链路做「跨设备聚合」。这时候有三种解法:
解法一:跨设备聚合(LACP)。让接入交换机配一个 Eth-Trunk,两条成员口分别接两台核心,两台核心上都配对应的 Eth-Trunk,并且在两台核心之间有一条 peer-link 或堆叠关系。这种方案在不同厂商里叫法不同:思科的 vPC、华为的 M-LAG、H3C 的 DRNI。没有这些技术支撑时,跨设备聚合无法正常工作。
解法二:STP 阻塞 + 单活。不做聚合,两条上联各是独立链路,由 STP 阻塞其中一条,另一条跑业务,故障时切换。简单可靠,但浪费一半带宽。
解法三:路由化。把上联链路改造成三层链路(不是聚合,而是各自配 IP 做 OSPF 等价路由),让路由协议来负载分担。这是在核心层常用的做法,在第 11 章 OSPF 展开。
理解这三条路,你就能回答「为什么我两条线上联两台核心,只有一条有流量」这个问题了——那不是配错了,而是 STP 在正常工作。
聚合与 STP 的交互
这里有一个常被问到的细节:Eth-Trunk 口在 STP 里是作为一个整体参与计算的。成员口不单独参与 STP,它们的状态由聚合口状态决定。这意味着:
- 聚合口在 STP 里只有一个开销,不会因为成员多而「更便宜」。
- 聚合口 down 掉的判定是「所有成员都 down」。
- 反过来,某个成员口 down 了,聚合口仍然 up,STP 也不会认为拓扑变化——这正是聚合的价值之一:成员口故障不触发 STP 收敛,业务无感切换。
再补一个实务要点:聚合口和 STP 边缘端口的关系。如果聚合口接的是服务器(服务器上有虚拟交换机),不要把这个聚合口配成边缘端口,因为服务器侧的虚拟交换机可能会发 BPDU。接服务器的聚合口应当作为普通 STP 端口,或者干脆在服务器侧关掉 STP(如果服务器不参与二层环路)。
5.4 华为 / H3C 命令对照表
| 功能 | 华为(VRP) | H3C(Comware V7) | 差异说明 |
|---|---|---|---|
| 创建聚合口 | interface Eth-Trunk 1 |
interface Bridge-Aggregation 1 |
名称不同;三层用 Route-Aggregation |
| 缺省模式 | mode manual load-balance |
静态(缺省) | 都缺省手工 |
| 切 LACP | mode lacp-static |
link-aggregation mode dynamic |
关键字完全不同 |
| 加成员口 | trunkport GigabitEthernet 0/0/1 to 0/0/3 |
成员口下 port link-aggregation group 1 |
华为在聚合口配,H3C 在成员口配 |
| 最大活动数 | max active-linknumber 2 |
link-aggregation selected-port maximum 2 |
名称不同 |
| 抢占 | lacp preempt enable |
lacp preempt enable |
相同 |
| 抢占延迟 | lacp preempt delay 30 |
lacp preempt delay 30 |
相同 |
| 端口优先级 | lacp priority 100 |
lacp priority 100 |
相同 |
| 系统优先级 | lacp system-priority 100 |
lacp system-priority 100 |
相同 |
| 哈希方式 | load-balance src-dst-ip(聚合口) |
link-aggregation global load-sharing mode source-ip destination-ip(全局) |
作用域不同 |
| 看聚合汇总 | display eth-trunk 1 |
display link-aggregation summary |
输出完全不同 |
| 看聚合详情 | display eth-trunk 1 |
display link-aggregation verbose |
同上 |
| 堆叠优先级 | stack slot 0 priority 200 |
irf member 1 priority 32 |
缺省值不同 |
| 改成员编号 | stack slot 0 renumber 1 |
irf member 1 renumber 2 |
都需重启 |
| 堆叠口 | interface stack-port 系列(视型号) |
irf-port 2/1 + port group interface |
结构不同 |
| 激活堆叠 | 一般重启后自动合并 | irf-port-configuration active |
H3C 需显式激活 |
| 看堆叠 | display stack |
display irf / display mad verbose |
命令不同 |
5.5 配置验证
链路聚合验证的第一步是看成员口是不是真的被选中了:
<HUAWEI> display eth-trunk 1
正常输出:
Eth-Trunk1's state information is:
WorkingMode: LACP
Preempt Enable, Preempt Delay: Disable
Hash arithmetic: According to SIP-XOR-DIP
Least Active-linknumber: 1 Max Active-linknumber: 8
Operating status: up
Number of Up Ports in Trunk: 3
PortName Status Weight
GigabitEthernet0/0/1 Up 1
GigabitEthernet0/0/2 Up 1
GigabitEthernet0/0/3 Up 1
关键读法:WorkingMode: LACP 说明 LACP 模式生效;Number of Up Ports in Trunk: 3 说明 3 个口都在;成员列表里每个口 Status 都是 Up。如果有口显示 Unselect 或 Down,就要查原因。
第二步:看 LACP 协商状态(这一步才能确认「对端也是 LACP」):
<HUAWEI> display eth-trunk 1 verbose
输出里每个成员口会显示 LAG ID、ActorPortPriority、PartnerPortNum 等信息。如果 Partner 字段为空,说明对端不是在跑 LACP——这是「一端 lacp、一端 manual」的典型特征。
第三步:确认带宽与流量分布:
<HUAWEI> display interface Eth-Trunk 1
看输出里的 Speed(成员带宽之和,或者显示每个成员的速率)与 InUti/OutUti(利用率)。如果只有 1 条链路有流量、其余为 0,而流量已经跑满,那就是哈希不均衡——换哈希方式(比如改成 src-dst-ip-l4port),或者接受单流上限。
堆叠验证:
<HUAWEI> display stack
正常输出(iStack):
Stack mode: Service-port
Stack topology type: Link
Stack system MAC: 00e0-fc12-3456
MAC switch delay time: 10 min
Stack reserved VLAN: 4090
Slot of the active management port: 1
Slot Role Priority MAC address Device name
--------------------------------------------------------------------------------
0 Master 200 00e0-fc12-3456 CORE-SW1
1 Standby 100 00e0-fc12-3457 CORE-SW1
成员 0 是主、成员 1 是备,这就是你要的结果。Slot 列是成员编号,注意华为的成员编号有时从 0 开始(stack slot 0),这与接口编号里的槽位号对应,配置时别搞混。
H3C 的验证命令:
<H3C> display link-aggregation summary
<H3C> display link-aggregation verbose
<H3C> display irf
<H3C> display irf topology
<H3C> display mad verbose
H3C display link-aggregation verbose 的输出重点看 Selected 与 Unselected:
Aggregate Interface: Bridge-Aggregation1
Creation Mode: Manual
Aggregation Mode: Dynamic
Loadsharing Type: Shar
System ID: 0x8000, 00e0-fc12-0001
Local:
Port Status Priority Oper-Key
GE1/0/1 S 32768 1
GE1/0/2 S 32768 1
GE1/0/3 U 32768 1
S = Selected(已选中,参与转发),U = Unselected(未选中)。有 U 就要查原因(通常是两端配置不一致)。
5.6 排错与故障树
| 症状 | 可能原因 | 排查命令 | 定位方法 |
|---|---|---|---|
| 聚合口不 up | 所有成员口都 down/未选中 | display eth-trunk 1 |
逐个查成员口状态与原因 |
| 聚合口 up 但只有一条链有流量 | 哈希不均(单流) | display interface Eth-Trunk 1 |
换哈希方式;多流才可能均 |
成员口 Unselect |
两端模式不一致(LACP vs 手工) | display eth-trunk 1 verbose |
两端统一 LACP |
成员口 Unselect |
成员口参数不一致(速率/VLAN/双工) | 对比两端 display port vlan、display interface |
逐项对齐 |
| 聚合后 STP 不转发 | 聚合口的 VLAN 与成员口不一致 | display eth-trunk 1、display stp brief |
只在聚合口配 VLAN,成员口不要单独配 |
| 堆叠后接口编号变了、配置丢失 | 改成员编号导致接口编号改变 | display stack、display current-configuration |
改编号前先备份配置,重启后核对 |
| IRF 合并不成功 | 漏 irf-port-configuration active / IRF 口配置不匹配 |
display irf |
两步都检查 |
| 堆叠后出现双主 | MAD 未配置或失效 | display mad verbose |
检查 MAD 链路与 BFD 会话 |
| 堆叠系统反复分裂 | 堆叠链路线缆/光模块不稳定 | display stack、日志 |
换堆叠线、换堆叠口 |
| 成员故障后整组不工作 | 主设备故障但备设备没接管 | display stack 看角色 |
检查优先级配置与堆叠链路 |
故障树(以「聚合不转发」为例):
Eth-Trunk 不转发
|
+-- 聚合口本身 up 吗?(display interface Eth-Trunk 1)
| +-- down -> 没有任何成员口选中 -> 往下看成员口
|
+-- 成员口选中了吗?(display eth-trunk 1 / display link-aggregation verbose)
+-- Unselect(模式不一致)-> 两端都改成 LACP
+-- Unselect(速率不同)-> 成员口速率统一
+-- Unselect(VLAN 不同)-> 成员口 VLAN 配置对齐
+-- Selected 但仍不通 -> 查聚合口的 VLAN / STP / MAC
5.7 新手踩坑与注意事项
- 一端 LACP、一端手工——症状:成员口一直 Unselect,业务只剩一条链;怎么避:两端模式必须一致。
- 成员口上单独配 VLAN——症状:有的口转有的口不转;怎么避:只在 Eth-Trunk/聚合口上配 VLAN,成员口跟随。
- 以为聚合就是「4×10G=40G」——症状:传大文件只有 10G;怎么避:单流只能走一个成员口,聚合带宽是统计值,需要多流才能叠加。
- 成员口速率不统一——症状:低速率的口不选中;怎么避:成员口必须同速率,跨速率聚合需要设备支持。
- 改堆叠成员编号后没重启——症状:编号没变;怎么避:
renumber必须重启生效,且重启前备份配置。 - 堆叠不配 MAD——症状:堆叠线断后双主、地址冲突、全网不通;怎么避:堆叠必配 MAD,且选对方式。
- BFD MAD 的 VLAN 被拿去跑业务——症状:MAD 触发时业务地址冲突;怎么避:MAD 用专用 VLAN、专用链路、专用网段。
- IRF 忘了
irf-port-configuration active——症状:配了 IRF 端口但不合并;怎么避:配完必须激活。 - 堆叠成员超过建议数量——症状:单点故障影响面剧增;怎么避:盒式堆叠一般 2~4 台,超过就重新设计架构。
- 堆叠系统统一升级时直接重启——症状:升级过程中业务长时间中断甚至不恢复;怎么避:按厂商的堆叠升级流程,先升备、再切换、再升主。
- 把聚合口当 Trunk 用了但成员口是 access——症状:部分 VLAN 丢;怎么避:聚合口和成员口的链路类型与 VLAN 必须一致。
5.8 本章小结
- 链路聚合:把多条物理链路绑成一条逻辑链路,带宽统计叠加、故障自动切换;手工模式简单但不感知对端参数,LACP 模式能协商、能发现配置不一致。
- 哈希决定分流:同一流永远走同一成员口,所以「聚合带宽」是统计值,单流不可能叠加。
- 成员口一致性:速率、双工、二层/三层、VLAN、MTU、流控必须一致,否则不选中。
- 堆叠/IRF:多台设备虚拟成一台,统一管理、消除环路、提升可靠性;代价是风险集中与割裂风险。
- MAD 是堆叠的保命绳:BFD MAD / LACP MAD / ARP MAD 三种,BFD MAD 最通用,需要专用 VLAN 与专用链路。
- 两家语法差异:
Eth-TrunkvsBridge-Aggregation、lacp-staticvsdynamic、stack slotvsirf member、irf-port-configuration active。
自测题
- 4 个万兆口做了 LACP 聚合,两台服务器之间传输大文件只有 10G 左右的速率,怎么解释?
- 聚合后
display eth-trunk 1显示有一个成员口Unselect,可能有哪些原因? - 堆叠割裂(双主)会造成什么问题?MAD 检测到双主之后会怎么处理?
- BFD MAD 的专用 VLAN 为什么不能承载业务?
- H3C IRF 配置完
irf-port绑定之后,还差哪一步才算生效?
- 因为链路聚合的负载分担是按「流」(哈希值)分配的,同一个 TCP 连接的报文哈希值相同,永远走同一个成员口,所以单条流只能用到 1 个成员口的带宽(10G)。要实现更大的带宽,需要有多个并发连接(多条流)或多源多目的地址的流量。可以尝试修改哈希方式(如加入四层端口
src-dst-ip-l4port),让不同连接的哈希更分散。 - 常见原因:两端聚合模式不一致(一端 LACP 一端手工);成员口速率或双工不一致;成员口的 VLAN 配置与聚合口或其他成员口不一致;成员口的 MTU、流控、端口隔离等属性不一致;成员口物理 down;该成员口被配置成了备份口(M:N 模式下的非活动口)。
- 割裂会造成网络里同时存在两台「同一配置」的设备:IP 地址冲突、网关双活导致 ARP 与转发紊乱、STP 出现两个根桥、DHCP 双服务器分配地址等,严重时形成广播风暴。MAD 检测到双主后,会关闭其中一台成员(通常优先级低的)的全部业务端口,只保留管理通道,避免两个活跃控制面同时存在。
- 因为 MAD IP 是基于专用逻辑接口的地址,正常情况下只有主设备的 MAD IP 活跃;一旦触发双主检测,两台设备都会激活自己的 MAD IP,如果该 VLAN 上还承载业务地址,就会发生地址冲突。因此必须使用独立的 VLAN、独立的链路和独立的网段。
- 还差
irf-port-configuration active(在系统视图执行),让 IRF 端口配置生效并触发成员合并。
关于本书:《华为 / H3C 网络设备典型功能配置详解》—— 面向国内高校/企业网络环境, 华为 VRP 与 H3C Comware 双厂商并排配置的实操教材,共 43 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录
本人保留对侵权者及其全家发动因果律武器的权利
版权提醒
如无特殊申明,本站所有文章均是本人原创。转载请务必附上原文链接:https://www.elliot98.top/post/huawei-h3c-book/05/。
如有其它需要,请邮件联系!版权所有,违者必究!