
刚接手公司网络设备的时候我第一件搞明白的事就是 H3C 交换机上的端口聚合。当时两台接入交换机之间用了四根网线互联以为带宽能直接翻四倍结果跑起来发现不仅速度没变还时不时丢包。后来一查才知道不配置端口聚合的话冗余链路会被生成树协议阻塞住白瞎了这几根线。端口聚合Link AggregationH3C 里通常叫 Bridge-Aggregation就是把多条物理链路捆绑成一条逻辑链路让带宽可以叠加同时还能提供链路冗余。这篇文章我会从原理讲起再到静态、动态两种配置实操最后附上我踩过的坑和排查命令适合刚入门数通或者正在准备交换机割接的朋友参考。1. 端口聚合原理为什么 H3C 交换机需要聚合1.1 不聚合会怎样聚合解决了什么当两台交换机之间存在多条物理链路时如果这些链路没有做聚合二层交换网络很容易出现环路。生成树协议STP为了防环会把多余的链路阻塞掉只留下一条主链路转发流量。这意味着你明明插了四根线实际只有一根在工作剩余三根都在后台“听候发落”。更关键的是STP 的收敛时间通常要几十秒某条链路断开后网络要等拓扑收敛才能恢复业务影响非常大。端口聚合相当于把多根物理线缆“合并成一根逻辑线缆”。对 STP 来说它看到的只是一个逻辑接口自然不存在环路对转发平面来说流量可以从多根物理链路上同时走带宽接近线性叠加。这样一来不仅解决了环路问题还把冗余链路变成了可用带宽实属交换机互联场景里的基础操作。这个逻辑其实很像高速公路收费站单根车道车多了就排队当你把几条车道合并成一个收费广场虽然入口和出口还是固定的但中间可以通过多个通道同时过车。端口聚合的负载分担算法决定每辆车走哪条车道。1.2 静态聚合和动态聚合有什么区别H3C 交换机支持两种主流链路聚合模式静态聚合和动态聚合。静态聚合的管理方式是“手工指定”你告诉交换机哪几个物理口必须绑在一起交换机就无条件把它们组成一个聚合口不向对端发送任何协商报文。配置简单直接适合对端设备不支持 LACP 或需要完全掌控的场景。动态聚合基于 IEEE 802.3ad 标准后来的 802.1AX通过交换 LACPLink Aggregation Control Protocol数据单元协商成员端口。两端设备会交换系统优先级、端口优先级、操作 Key 等信息然后共同决定哪些端口可以被选入聚合组。动态聚合的好处是更标准、更灵活成员端口的增减可以由协议自动协商对端配置错误时也更容易暴露问题。简单对比静态聚合是“我说了算”动态聚合是“双方商量着来”。生产环境里如果对端是服务器网卡做 bonding我一般推荐用动态 LACP因为服务器侧驱动对 802.3ad 的支持比较完整如果是交换机互联且两端都是 H3C静态聚合也能跑得很稳。1.3 哪些场景会用到端口聚合端口聚合最常见的场景有三个交换机之间的上联互连、服务器双网卡绑定、以及出口设备的链路冗余。接入交换机到汇聚交换机通常用两根或四根千兆/万兆光纤上联配成聚合口一方面增加带宽另一方面防止单一链路断掉引起整机脱管。服务器双网卡 bonding服务器网卡 team 或 bonding 后要求交换机侧看到的是一个聚合口。这里需要严格匹配模式交换机配置静态服务器就配静态交换机配 LACP服务器就配 802.3ad。出口路由器或防火墙与交换机相连为了保证出口链路可靠性同样可以做外联聚合。不过要注意设备间速率和协商参数的匹配否则问题更隐蔽。在实际项目里聚合口还有一个看不见的好处它可以避免 STP 阻塞导致的带宽浪费。很多只有一台汇聚交换机的小网络会下意识把多根线直接互联结果发现带宽不叠加原因就是没做聚合。理解了这一点你就知道端口聚合不是“锦上添花”而是大流量路径的必备。2. 配置前环境准备与参数规划避免后续踩坑2.1 物理链路与接口状态检查配置端口聚合前我建议先花五分钟确认物理链路没问题。最直观的命令是display interface brief检查所有准备加入聚合组的物理口状态是不是 UP。如果物理口是 DOWN后面配置再怎么敲都白搭。注意检查速率和双工模式。聚合组要求成员端口的速率和双工必须一致正常情况下协商结果都是千兆全双工。但如果你用了劣质网线或者光模块不兼容可能协商成百兆甚至出现 CRC 错包这种问题在聚合配置后极难排查。我的习惯是先把成员口单独建 VLAN 测通确认每根物理链路都能正常转发后再做聚合。光模块和光纤类型也要看好单模多模不能混用长距离链路要关注光功率。如果你手里只有一根跳纤能通另外一根光模块亮红灯那先修链路而不是硬配聚合。2.2 登录方式、Comware 版本与调试工具H3C 交换机目前主流的操作系统是 Comware V7但不少老设备还在跑 V5。V5 和 V7 的底层命令基本一致但有些细节不同比如部分 V7 设备聚合口必须先在系统视图下用interface Bridge-Aggregation创建再在物理口下绑定V5 上部分机型可以不加 Bridge-Aggregation 直接port link-aggregation group创建过程更宽松。配置前先确认版本。调试工具我用得最多的是 SecureCRT原因是它支持多标签页、可以自动记录日志。配置完聚合后随手把命令粘贴到日志文件里出了问题能回看。H3C 官方模拟器 HCL 也可以练手但它依赖 VirtualBox经常遇到设备启动失败的问题后面我会单独讲。2.3 聚合编号、VLAN 和负载分担策略规划配置前要规划好聚合组编号、成员口数量、链路类型和放通 VLAN。聚合组编号在不同设备上范围不同常见是 1 到 255 或更多。编号本身没有特殊含义但建议全网统一规划比如上联机房 A 用 1、机房 B 用 2方便后续排障。注意已经被创建但没有完全删除的聚合接口会占用编号尤其是实验配置太多后聚合口“满了”的报错经常就是这个原因。链路类型方面如果聚合口要当 trunk 用两侧都必须放通同样的 VLAN 列表如果只是接服务器用 access 即可。放通 VLAN 时建议明确列出不要图省事直接permit vlan all在部署经验不足的网络里容易把广播域意外扩大。负载分担策略也要在规划阶段定。默认情况下 H3C 会根据报文特征做哈希但不同流量模型合适的方式不一样。如果 VLAN 多、目的 IP 多建议用源目 IP 哈希如果主要是二层流量则用源目 MAC 哈希。这个后面实操会提到。2.4 实验环境HCL 模拟器启动失败的常见原因在 HCL 里做端口聚合实验时很多人会遇到“设备启动失败”的提示。这里我提一下经验后面也有详细排查。HCL 设备启动依赖 VirtualBox 虚拟化环境最常见的几个原因一是 Windows 的 Hyper-V 和 VirtualBox 冲突二是 CPU 虚拟化没开三是 HCL 版本和 VirtualBox 版本不匹配。处理办法是关闭 Hyper-V、重新安装匹配版本的 VirtualBox、以管理员身份运行 HCL。解决了模拟器启动问题再练习聚合配置会顺手很多。3. 静态端口聚合配置实操H3C 常用命令拆解3.1 创建二层聚合接口并配置链路类型假设我在 S5560 交换机上配置一个静态聚合聚合口编号为 1成员口是 GigabitEthernet 1/0/1 和 1/0/2上联需要跑 VLAN 10、20 的 trunk。先进入系统视图创建 Bridge-Aggregation 1并直接配置链路类型和放通 VLANsystem-view sysname SW-CORE interface Bridge-Aggregation 1 port link-type trunk port trunk permit vlan 10 20 quit这里有个重要细节聚合口的配置是所有成员口共享的。也就是说你只需要在聚合口上配置 trunk 和 permit vlan物理成员口不需要也不会单独保留这些配置。很多人在物理口下面也敲一遍port link-type trunk其实没必要。3.2 将物理接口加入聚合组接下来进入两个物理口分别绑定到聚合组 1interface GigabitEthernet 1/0/1 port link-aggregation group 1 quit interface GigabitEthernet 1/0/2 port link-aggregation group 1 quit执行完这两步聚合口应该就能起来了。port link-aggregation group 1是加入聚合组的命令静态模式下默认采用静态聚合不需要额外声明link-aggregation mode static在部分版本里它本身就是默认值。需要注意的是物理口下的配置如果和聚合口不一致绑定会失败或者被聚合口覆盖。在 Comware V7 上执行绑定命令后物理口原有的大多数二层配置会被自动清除由聚合口统一接管。如果之前物理口已经配置了 access 或 trunk建议先undo port link-type清掉再绑定能减少不少提示报错。3.3 对端交换机的聚合配置端口聚合必须两端同时配置否则链路协商不正。如果对端也是 H3C 交换机配置思路一样只要把同样的 Bridge-Aggregation 创建出来并把对应的物理口加入组里。两端聚合组编号不需要一致编号只是一个本地概念但两端成员口数量要匹配并且物理链路的连接关系要一一对应。这里最容易翻车的是对端只配置了一根物理口的聚合另一端却绑了两根结果只有一根能选中另一根显示 Unselected。遇到这种情况还是要回到聚合组内成员口对应的物理连接去查。3.4 验证静态聚合是否成功配置完不要直接以为完事需要验证。最常用的验证命令有两个display link-aggregation summary display interface Bridge-Aggregation 1display link-aggregation summary的输出里会有一个关键状态叫 Selected 和 Unselected。Selected 表示该成员口已被成功选入聚合组参与转发Unselected 则说明端口没被选中。正常情况下两个成员口都应该是 Selected。display interface Bridge-Aggregation 1会显示聚合口的带宽比如Aggregate Interface: Bridge-Aggregation1、Description:等字段。如果两个千兆口聚合成功聚合口总带宽通常显示为 2000 Mbps。看到这个数字基本可以确定带宽叠加成功了。3.5 保存配置聚合配置完成后记得保存否则设备重启后配置就丢了。H3C 设备保存命令是save force确认弹窗直接按回车。我通常先display current-configuration检查一遍再保存。save force在保存之前还可以顺手做一次连通性测试从终端去 ping 一下对端网关或者用display mac-address看看聚合口有没有学习到对端 MAC。确认业务正常后再保存是最稳妥的顺序。4. 动态 LACP 聚合配置实操与服务器 bonding 对接4.1 LACP 的协商过程动态聚合更依赖协议协商。启用 LACP 后端口会周期性发送 LACPDU报文里携带系统优先级、系统 MAC、端口优先级、端口号、操作 Key 等信息。对端收到后会把这些信息组合成一个选择算法决定哪些端口可以聚合、哪个端口作为备份。这个过程可以理解成两个人在互相喊话“我的编号是 A支持的带宽是千兆运行 Key 是 5你那边对得上吗”如果双方信息匹配端口就进入 Selected 状态如果不匹配端口保持 Unselected流量不转发。4.2 配置动态聚合组的完整步骤动态聚合和静态配置的差别只有一个link-aggregation mode dynamic。在聚合口上先声明动态模式再绑定物理口system-view interface Bridge-Aggregation 1 link-aggregation mode dynamic port link-type trunk port trunk permit vlan 10 20 quit interface GigabitEthernet 1/0/1 port link-aggregation group 1 quit interface GigabitEthernet 1/0/2 port link-aggregation group 1 quit注意第二步如果先创建的是静态聚合口后面要修改为动态需要先执行undo link-aggregation mode或者直接删除聚合接口重新建。实际配置时要看具体版本但顺序通常都是“先定模式再绑成员”。对端同样要配置动态模式。如果一端动态、一端静态LACP 会协商失败聚合口可能直接起不来或者只能选中部分成员口。4.3 LACP 优先级与超时时间调整在同一条物理链路上如果两端都希望主动发送 LACPDU就会涉及优先级的比较。系统优先级默认 32768数值越小优先级越高。可以用lacp system-priority调整例如lacp system-priority 100端口优先级默认 32768通过lacp port-priority可以调整。当系统优先级相同端口优先级更优的端口会被优先选中。LACP 超时时间用来决定链路故障的检测速度。短超时lacp timeout short或同系列命令约为 3 秒长超时约为 90 秒。如果你希望链路切换快一些尤其是和服务器 bonding 对接时通常建议对端使用短超时。不过修改前先确认服务器驱动是否支持不然频繁交互反而会带来问题。4.4 动态聚合的验证和误区验证动态聚合是否成功除了display link-aggregation summary还可以关注display link-aggregation verbose里的 LACP 信息比如LACP Timeout、System ID等。很多人容易把“动态”和“自动”搞混动态聚合不等于可以随意接任何端口它只是由协议自动协商但前提是端口配置要匹配。另外LACP 有两种工作模式Active 主动模式和 Passive 被动模式。H3C 默认是 Active即主动发送 LACPDU如果对端服务器配置成 Passive且主动端不发送报文协商就建立不起来。好在绝大多数 H3C 的link-aggregation mode dynamic都是 Active这一点在实际对接时反而比较省心。5. 负载分担与高级调优让带宽真正叠加5.1 默认负载分担和按流量调整端口聚合的带宽不是简单“平分”而是通过哈希算法把不同数据流分配到不同成员口上。H3C 默认的负载分担模式因设备型号而异有些按目的 MAC有些按源目 MAC。如果聚合后流量分布严重不均就要手动调整。常用命令是link-aggregation load-sharing mode source-destination-ip这条命令一般在系统视图下配置部分设备也支持在聚合口视图下配置。配置后交换机会根据源 IP 和目的 IP 的组合哈希给数据流分配链路。如果流量大多是同一对 IP 之间的长连接这种模式其实也均衡不了因为哈希结果通常固定流量会固定走某一条链路。要理解哈希的粒度一个 TCP 连接的所有报文会始终走同一条物理链路否则会导致乱序。5.2 三层互联时的聚合口配置如果聚合口不是用来做二层 trunk而是跑三层路由需要把 Bridge-Aggregation 的链路模式切换成三层或者在支持 Route-Aggregation 的机型上直接创建三层聚合接口。例如interface Bridge-Aggregation 1 port link-mode route ip address 192.168.1.1 255.255.255.0 quit配置后再把物理口加入聚合组逻辑上它就是一个三层接口。这时要注意物理口本身不能配置 IP所有 IP、路由策略、ACL 都统一在聚合口上维护。做三层互联时负载分担模式选择 IP 哈希比 MAC 哈希更合理因为跨三层转发时 MAC 可能是不变的网关 MAC哈希容易集中。5.3 聚合口与 IRF 堆叠的配合在 H3C 的中大型网络里经常能看到 IRF 堆叠。堆叠后的多台物理设备逻辑上成为一台设备这时聚合口可以跨成员设备部署也就是“跨设备链路聚合”。配置方式并不复杂先完成 IRF 堆叠然后在逻辑设备上创建一个 Bridge-Aggregation把分布在两台物理交换机上的端口都加入同一个聚合组。这样即使其中一台物理设备的某块板卡故障流量也能通过另一台设备走聚合口继续转发并不中断。跨设备聚合和单机聚合的主要区别在于对端设备看到的始终是一个逻辑聚合口它感知不到后端的物理分布。这种设计对服务器双网卡 bonding 特别友好因为服务器的两个网卡可以分别接到两台物理交换机上却在逻辑上认为是在同一个交换机上。5.4 服务器 bonding 与交换机的对接细节服务器 Linux bonding 常用模式 802.3ad对应交换机侧的动态 LACPWindows 的 NIC Teaming 也有类似选项。配置时双方要协商一致服务器侧设置“LACP 模式主动”交换机侧用link-aggregation mode dynamic一般就能成功。有一个容易踩坑的点是链路聚合的“速率”不一致。如果服务器一个网卡是千兆、另一个是万兆强行把两个口绑成一个聚合口虽然有可能配置成功但哈希负载会失衡万兆口相对千兆口更容易被打满而千兆口处于低负载。这种情况下建议要么统一速率要么利用 H3C 的增强负载均衡方式尽量让流量与链路带宽成比例。可惜很多低端型号并不支持这种加权负载均衡所以最稳妥还是一开始规划好。6. 常见问题与排查技巧聚合口起不来怎么办6.1 聚合口起不来成员口显示 Unselected最典型的故障现象是display link-aggregation summary里有成员口一直是 Unselected。排查思路按下面顺序走物理状态display interface brief看成员口是否 UP。光模块、网线没插好是常事。对端配置对端是不是和本端一样的聚合模式如果一端静态、一端动态协议根本协商不上。VLAN 配置两端放通 VLAN 不一致聚合口即使 UP业务 VLAN 也不通。成员口对应关系物理连线有没有交叉A 交换机的 1/0/1 应该对应对端交换机的 1/0/1如果接成了 1/0/2聚合算法根据端口号匹配不上可能就会选不中。在真正干活之前可以把成员口临时做成独立口分别在两端配置同样的 IP 互相 ping确认每根物理链路都是通的。这样聚合出问题的时候至少可以排除物理层故障。6.2 带宽没有叠加或流量严重不均明明聚合成功Selected 状态正常但跑业务时带宽还是不高这是另一个高频问题。原因多半是哈希因子和流量模型不匹配。比如四根千兆口聚合成 4G 逻辑带宽但如果你只有一个用户访问一个服务器这一条会话只会被哈希到其中一条物理链路上所以实际带宽顶多还是千兆。这不是聚合配置错误而是单流带宽本身就无法超过单链路。要验证聚合的整体性能建议用 iperf 多线程测试或者同时发起多路业务流量。还有检查display link-aggregation summary中成员口的速率是否都是千兆全双工。只要有一个口协商成百兆它成了瓶颈聚合带宽就会异常。6.3 修改成员端口配置时被拒绝在 Comware V7 上把物理口加入聚合组后物理口不再是独立可配置的接口。如果你想改这个物理口的 vlan 属性系统会提示错误让你到聚合口上去配置。这不是设备故障而是聚合口的“接管”机制。如果一定要修改某个成员口的端口级描述或单独属性只能先解除绑定配置完成后再重新加入聚合组interface GigabitEthernet 1/0/1 undo port link-aggregation group description TO-SERVER-01 port link-aggregation group 1注意这种操作会导致该成员口短暂中断转发在业务高峰期不要随意操作。大多数情况下VLAN、ACL、QoS 这类转发属性都应该在聚合口上统一改不需要也不能在物理口下单独处理。6.4 配置不生效接口配置可能被覆盖有时候配好了验证发现聚合口上没有生效大概率是你在物理口上敲了配置但聚合口接管时把这些配置清掉了。H3C 的设计思路是成员口的转发配置统一由聚合口下发物理口最多保留 shutdown、description 这类端口级属性。所以检查配置时display current-configuration interface Bridge-Aggregation 1看到的一定是完整配置而display current-configuration interface GigabitEthernet 1/0/1里看不到 VLAN 属性。这不是 bug不要反复往物理口里加配置浪费时间。6.5 聚合口号码被占用提示“聚合口满了”热词里能看到“h3c 聚合口满了”这其实是很多人的共同困扰。设备能创建的聚合组数量是有限的比如某些低端交换机只支持 8 个或 16 个聚合组。以前实验配置没删除后来正式配置时就申请不到编号系统会报“聚合口满了”之类的错误。解决办法是查看已有聚合接口并清理display link-aggregation summary display current-configuration | include bridge-aggregation undo interface Bridge-Aggregation 1undo interface Bridge-Aggregation 1会删除整个聚合口同时把成员口从组里解放出来。做清理之前一定确认这个聚合口没有在跑业务否则删除瞬间流量全部中断。6.6 HCL 模拟器启动失败及聚合实验环境的避坑H3C 官方模拟器 HCL 对新手练习端口聚合很方便但“设备启动失败”很常见。我在使用中总结的情况主要是VirtualBox 版本不匹配、Hyper-V 没有关闭、CPU 虚拟化未开启。建议先卸载旧版 HCL 和 VirtualBox重新安装固定组合检查 Windows 功能里的 Hyper-V 是否关闭启动 HCL 时用管理员权限。如果还不行可以先查看虚拟化是否开启再调整 BIOS 里的 Intel VT-x/AMD-V。实验环境跑通后聚合配置命令和真实设备基本一致练习价值很高。6.7 端口聚合配置命令速查表平时排障最怕记错命令这里整理一张速查表方便直接对照使用。表中命令基于 H3C Comware V5/V7 常见写法具体型号请以官方文档为准。操作目的命令创建聚合接口interface Bridge-Aggregation 1配置动态模式link-aggregation mode dynamic配置链路类型port link-type trunk允许指定 VLANport trunk permit vlan 10 20将物理口加入聚合组port link-aggregation group 1配置负载分担模式link-aggregation load-sharing mode source-destination-ip查看聚合摘要display link-aggregation summary查看聚合详情display link-aggregation verbose删除聚合接口undo interface Bridge-Aggregation 1保存配置save force速查表里的命令顺序其实就是一次完整配置的执行顺序。只要你按“创建聚合口 - 配置模式 - 配置 VLAN - 添加成员口 - 验证 - 保存”这个套路走大部分问题都能避免。7. 我的几个实际配置习惯7.1 配置前先备份和验证单链路我在实际项目里有过几次深夜割接的教训现在养成一个习惯任何聚合配置开始前先把display current-configuration的结果保存到本地再开始改。这样操作失误还能一键还原。同时我会先确认聚合里的每一根物理链路在独立状态下都是通的。不要想着“先绑上再测”如果链路本身有问题聚合起来后故障点会变得非常隐蔽排查成本翻倍。7.2 配置中分清聚合口和物理口的边界第一次做聚合时先只配置一个成员口测试通了以后再加另一个。虽然在生产环境会想一次把所有口都绑上但分步操作能明显减少“一股脑错了不知道哪根线有问题”的情况。聚合口和物理口的配置边界一定要分清。进入物理口只想做port link-aggregation group其他 vlan 属性一律在聚合口上改。这个习惯能避免很多莫名其妙的配置覆盖问题。7.3 配置后做业务验证并留下记录维护时多利用display link-aggregation verbose这个命令它比 summary 显示更多细节比如每个成员口的选中原因、LACP 状态。遇到问题先截图保存再动手修改。配置保存前一定做一次业务验证哪怕只是从终端 ping 一下网关。端口聚合配置本身不复杂但一旦链路切换影响面往往是一大片网络。谨慎操作比速度快更重要。最后再分享一个小技巧聚合口两端建议记录各自设备的聚合组编号和成员口列表贴在机柜标签上后面维护的人会非常感谢你。