跳到正文
Lutong's Homepage

华为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 新手踩坑与注意事项

  1. 一端 LACP、一端手工——症状:成员口一直 Unselect,业务只剩一条链;怎么避:两端模式必须一致。
  2. 成员口上单独配 VLAN——症状:有的口转有的口不转;怎么避:只在 Eth-Trunk/聚合口上配 VLAN,成员口跟随。
  3. 以为聚合就是「4×10G=40G」——症状:传大文件只有 10G;怎么避:单流只能走一个成员口,聚合带宽是统计值,需要多流才能叠加。
  4. 成员口速率不统一——症状:低速率的口不选中;怎么避:成员口必须同速率,跨速率聚合需要设备支持。
  5. 改堆叠成员编号后没重启——症状:编号没变;怎么避:renumber 必须重启生效,且重启前备份配置。
  6. 堆叠不配 MAD——症状:堆叠线断后双主、地址冲突、全网不通;怎么避:堆叠必配 MAD,且选对方式。
  7. BFD MAD 的 VLAN 被拿去跑业务——症状:MAD 触发时业务地址冲突;怎么避:MAD 用专用 VLAN、专用链路、专用网段。
  8. IRF 忘了 irf-port-configuration active——症状:配了 IRF 端口但不合并;怎么避:配完必须激活。
  9. 堆叠成员超过建议数量——症状:单点故障影响面剧增;怎么避:盒式堆叠一般 2~4 台,超过就重新设计架构。
  10. 堆叠系统统一升级时直接重启——症状:升级过程中业务长时间中断甚至不恢复;怎么避:按厂商的堆叠升级流程,先升备、再切换、再升主。
  11. 把聚合口当 Trunk 用了但成员口是 access——症状:部分 VLAN 丢;怎么避:聚合口和成员口的链路类型与 VLAN 必须一致。

5.8 本章小结

  • 链路聚合:把多条物理链路绑成一条逻辑链路,带宽统计叠加、故障自动切换;手工模式简单但不感知对端参数,LACP 模式能协商、能发现配置不一致。
  • 哈希决定分流:同一流永远走同一成员口,所以「聚合带宽」是统计值,单流不可能叠加。
  • 成员口一致性:速率、双工、二层/三层、VLAN、MTU、流控必须一致,否则不选中。
  • 堆叠/IRF:多台设备虚拟成一台,统一管理、消除环路、提升可靠性;代价是风险集中与割裂风险。
  • MAD 是堆叠的保命绳:BFD MAD / LACP MAD / ARP MAD 三种,BFD MAD 最通用,需要专用 VLAN 与专用链路。
  • 两家语法差异:Eth-Trunk vs Bridge-Aggregation、lacp-static vs dynamic、stack slot vs irf member、irf-port-configuration active。

自测题

  1. 4 个万兆口做了 LACP 聚合,两台服务器之间传输大文件只有 10G 左右的速率,怎么解释?
  2. 聚合后 display eth-trunk 1 显示有一个成员口 Unselect,可能有哪些原因?
  3. 堆叠割裂(双主)会造成什么问题?MAD 检测到双主之后会怎么处理?
  4. BFD MAD 的专用 VLAN 为什么不能承载业务?
  5. H3C IRF 配置完 irf-port 绑定之后,还差哪一步才算生效?
  1. 因为链路聚合的负载分担是按「流」(哈希值)分配的,同一个 TCP 连接的报文哈希值相同,永远走同一个成员口,所以单条流只能用到 1 个成员口的带宽(10G)。要实现更大的带宽,需要有多个并发连接(多条流)或多源多目的地址的流量。可以尝试修改哈希方式(如加入四层端口 src-dst-ip-l4port),让不同连接的哈希更分散。
  2. 常见原因:两端聚合模式不一致(一端 LACP 一端手工);成员口速率或双工不一致;成员口的 VLAN 配置与聚合口或其他成员口不一致;成员口的 MTU、流控、端口隔离等属性不一致;成员口物理 down;该成员口被配置成了备份口(M:N 模式下的非活动口)。
  3. 割裂会造成网络里同时存在两台「同一配置」的设备:IP 地址冲突、网关双活导致 ARP 与转发紊乱、STP 出现两个根桥、DHCP 双服务器分配地址等,严重时形成广播风暴。MAD 检测到双主后,会关闭其中一台成员(通常优先级低的)的全部业务端口,只保留管理通道,避免两个活跃控制面同时存在。
  4. 因为 MAD IP 是基于专用逻辑接口的地址,正常情况下只有主设备的 MAD IP 活跃;一旦触发双主检测,两台设备都会激活自己的 MAD IP,如果该 VLAN 上还承载业务地址,就会发生地址冲突。因此必须使用独立的 VLAN、独立的链路和独立的网段。
  5. 还差 irf-port-configuration active(在系统视图执行),让 IRF 端口配置生效并触发成员合并。

关于本书:《华为 / H3C 网络设备典型功能配置详解》—— 面向国内高校/企业网络环境, 华为 VRP 与 H3C Comware 双厂商并排配置的实操教材,共 43 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录