搞网络的人几乎每个项目都绕不开华为链路聚合技术。机房扩容、园区网改造、数据中心接入只要带宽不够用第一反应就是绑几条链路上去。Eth-Trunk这个词看着简单真正配置、排障、优化的时候坑其实不少。这篇就把链路聚合的原理、模式选型、哈希负载均衡、华为设备的具体配置到常见故障完整梳理一遍适合正在规划网络扩容、做链路冗余改造的运维和集成工程师参考。1. 链路聚合的底层逻辑带宽、冗余与负载均衡1.1 单链路瓶颈场景先从一个最常见的场景说起。某公司机房的服务器从千兆网卡升级到双口万兆上联交换机却只有两根千兆口业务高峰时期监控平台和数据库同步直接把链路打满延迟飙升、丢包不断。这时候你面临两个选择换更高端的交换机或者把现有端口利用起来。前者花钱后者动配置。链路聚合就是后者的核心方案。很多人以为链路聚合就是把几根网线插上、绑在一起就完事了实际远没有这么简单。物理层上多根独立链路如果同时承载流量没有协商机制的话交换机自己都会懵MAC表该怎么学广播报文往哪个口发万一出现环路怎么办所以链路聚合必须在控制层面有一套完整的协议逻辑把多个物理端口整合成一个逻辑接口来管理这就是Eth-Trunk存在的意义。1.2 链路聚合的三个核心收益链路聚合解决的痛点可以归纳为三个维度带宽叠加、链路冗余、负载分担。带宽叠加比较好理解4条千兆链路聚合成一个Eth-Trunk逻辑口理论带宽就是4Gbps流量可以同时走4条物理链路。链路冗余是指当其中某一条物理链路断开时流量自动切换到其余正常链路上业务不会中断切换时间通常在秒级甚至更快相比STP重新收敛的30秒乃至50秒体验差别非常明显。负载分担则是聚合的流量工程能力数据流按照一定规则被分配到不同的成员链路上保证每条物理链路都能被利用起来。这里要强调一个容易混淆的点多条链路聚合并不能让单条TCP会话突破单链路带宽上限。原因在于负载均衡的粒度是流而不是包。一个TCP连接的数据包只会走同一条成员链路否则会出现乱序重传严重影响性能。所以聚合带宽提升的是并发流量的总吞吐量而不是单流带宽。明白这一点后续做负载均衡策略时就能理解为什么哈希因子的选择这么重要。1.3 Eth-Trunk的逻辑接口与成员端口在华为设备上链路聚合的逻辑接口叫Eth-Trunk成员端口需要先加入Eth-Trunk再配置业务。逻辑接口和物理接口是两套编号体系比如interface Eth-Trunk 1里这个1是逻辑口编号而成员物理口GigabitEthernet0/0/1是它自己原有的接口编号两者没有任何冲突。创建Eth-Trunk后相当于在设备上增加了一个三层的逻辑接口但这个接口本身不做转发决策真正的数据转发是通过哈希算法选择成员口完成的。可以这样理解Eth-Trunk是公司前台客户数据帧来了之后由前台登记哈希计算再分配给不同业务员物理成员口去处理。前台本身不干活但所有调度逻辑都由它来定。2. 华为链路聚合的两种模式选型华为设备上Eth-Trunk有两种工作模式手工模式Manual和LACP模式静态LACP也叫链路聚合控制协议模式。这两种模式在工作原理和适用场景上有明显区别选错模式很容易导致对接失败或协商异常。2.1 手工模式的适用场景手工模式是最直接的聚合方式管理员手动把物理端口加入到Eth-Trunk中不涉及任何协商协议。两端设备只要配置一致链路就直接生效不依赖协议报文交互。手工模式的优势是简单、兼容性强尤其在对接一些不支持LACP的第三方设备、老设备时手工模式几乎是唯一选择。它不需要LACP报文交互所以不存在协商超时、报文被过滤的问题。缺点是缺乏自动感知能力如果对端设备没有正确配置聚合或者配置不一致本端无法通过协议发现只能靠流量异常或丢包来暴露问题。在华为设备上手工模式的典型场景是交换机之间互联、交换机与服务器网卡bond对接、或者临时应急链路扩容。只要两端配置能保持一致手工模式足够可靠。2.2 LACP模式的协商机制LACP模式则把聚合变成了有商有量的过程。华为的静态LACP基于IEEE 802.3ad标准启用后设备会周期性地向对端发送LACPDU报文报文中携带本端的系统优先级、系统MAC、端口优先级、端口号等信息。两端通过这些信息协商哪一端是主动端哪些成员口可以成为活动链路哪些作为备份链路。LACP模式有几个手工模式没有的优势。首先是活动链路的自动管理如果某条链路质量下降或物理断开LACP能快速感知并自动调整活动链路集合无需人工干预。其次是备份链路机制可以通过max active-linknumber限制活动链路数量多余的成员口处于Standby状态主用链路故障时备份链路上位这种机制对关键业务的冗余保障非常有用。第三是两端配置校验协议协商会比对双方的参数配置不一致时链路无法激活相当于多了一层检错机制。2.3 模式对比与选型建议对比项手工模式静态LACP模式协商报文无周期性发送LACPDU配置复杂度低中等对端兼容性高需要支持LACP链路自愈能力依赖物理检测协议级快速感知备份链路不支持支持典型场景第三方对接、简单互联核心链路、需要冗余的场景选型时我的建议很简单能上LACP就上LACP。只要两端设备都支持LACP模式在运维体验和稳定性上都优于手工模式。尤其是核心交换机之间、交换机到服务器的上联链路LACP的备份链路机制能显著降低故障影响。手工模式保留给设备对接、新老设备混跑、或者对端配置能力受限的场景。注意无论哪种模式两端必须配置一致。一端手工、一端LACP在华为设备上会导致链路无法正常聚合流量会因环路或MAC漂移出现严重问题。部署前先确认对端设备支持的聚合方式。3. 负载均衡哈希链路聚合性能的关键链路聚合配好了带宽也翻倍了结果业务流量还是慢甚至出现个别成员口流量跑满、其他成员口空闲的情况。这时候问题大概率出在负载均衡策略上。3.1 哈希因子选择原理华为设备的Eth-Trunk默认负载均衡方式是按照目的MAC地址进行哈希转发。也就是说设备查看数据帧的目的MAC计算出一个哈希值再根据哈希值映射到某一条成员链路上。这种方式在普通二层环境问题不大但在流量模型比较复杂的数据中心或园区核心默认策略往往不够用。哈希因子的选择本质上是选择数据流中哪些字段作为指纹。指纹区分度越高流量分布越均匀。华为设备支持的常见哈希因子包括源MAC地址src-mac目的MAC地址dst-mac源目MAC地址组合src-dst-mac源IP地址src-ip目的IP地址dst-ip源目IP地址组合src-dst-ip源目IP端口四元组src-dst-ip-port增强型哈希enhanced-profile可按报文特征自动选择默认dst-mac的问题在于如果网络中存在大量流量访问同一个目的MAC比如所有终端都访问一台服务器或一个网关哈希结果会大量映射到同一条链路上其他链路空闲聚合效果大打折扣。换成src-dst-mac或src-dst-ip后不同源主机产生的流量就能分散到不同链路。3.2 不同场景的哈希策略二层接入场景里流量模型是多对多的终端互访使用src-dst-mac效果通常不错。三层路由场景里不同网段的互访流量使用src-dst-ip更能体现流的差异化。到了数据中心场景服务器之间的东西向流量往往是固定的源目IP组合如果只是按IP哈希流量分布还是会集中这时候就需要使用包含端口号的四元组哈希尽量把不同会话分散到不同链路。我在实际项目中遇到过这样一个case某数据中心两台核心交换机之间做了4条10GE链路聚合业务流量跑起来后发现第1和第2条成员口流量接近打满第3和第4条口却只有20%的利用率。后来检查发现负载均衡哈希因子用的还是默认的dst-mac而该数据中心南北向流量全部汇聚到防火墙上行口目的MAC清一色是网关地址哈希结果自然高度集中。把哈希因子改成src-dst-ip-port后四根链路利用率迅速趋于均衡。3.3 负载不均的调整手段调整哈希因子的命令在华为设备上很简单[HUAWEI] interface Eth-Trunk 1 [HUAWEI-Eth-Trunk1] load-balance src-dst-ip但要注意修改负载均衡模式会影响所有经过该Eth-Trunk的现有流量会造成短暂的流量重分布相当于一次无感知的链路切换。生产环境操作前建议先确认业务低峰期或者提前做好应急预案。如果调整哈希因子后负载还是不均衡还有几个排查方向。第一流量特征本身过于集中比如少数几条大流量应用占了全部带宽这类场景无论怎么哈希都没法均衡只能考虑拆分业务或扩容。第二物理链路质量差异光模块速率不一致、双工模式不一致都会导致流量拥塞或丢包。第三对端设备哈希策略不一致两端负载均衡算法不同可能导致从本端看流量均衡但对端回程流量倾斜。另外提一下华为的高端设备比如数据中心级的框式交换机负载均衡通常支持更细粒度的增强哈希可以基于报文五元组甚至TCP标志位做哈希。配置方式和使用效果可以在具体设备型号的文档里确认核心思路依然是提升流的区分度。4. 华为设备Eth-Trunk配置实操理论说清楚了接下来就是实际配置。这里给出华为VRP平台上最常见的两种配置过程并标注我在操作中容易踩的小细节。4.1 手工模式配置步骤手工模式的配置逻辑是先创建Eth-Trunk逻辑接口再把物理口加入。[HUAWEI] system-view [HUAWEI] interface Eth-Trunk 1 [HUAWEI-Eth-Trunk1] mode manual // 默认就是manual可以省略 [HUAWEI-Eth-Trunk1] quit [HUAWEI] interface GigabitEthernet0/0/1 [HUAWEI-GigabitEthernet0/0/1] eth-trunk 1 [HUAWEI-GigabitEthernet0/0/1] quit [HUAWEI] interface GigabitEthernet0/0/2 [HUAWEI-GigabitEthernet0/0/2] eth-trunk 1 [HUAWEI-GigabitEthernet0/0/2] quit成员口加入完成后需要在Eth-Trunk接口上配置业务比如放行VLAN或配置IP地址[HUAWEI] interface Eth-Trunk 1 [HUAWEI-Eth-Trunk1] port link-type trunk [HUAWEI-Eth-Trunk1] port trunk allow-pass vlan 10 20 30 [HUAWEI-Eth-Trunk1] quit这段配置里有一个常见的坑成员口在加入Eth-Trunk之前如果已经配置过access口、trunk口或其他业务配置华为设备通常会拒绝加入提示Error: The port has been configured.。解决办法是把成员口恢复成默认配置再执行eth-trunk命令。反过来成员口加入Eth-Trunk后它的二层业务配置无法直接在物理口上生效必须在Eth-Trunk逻辑口下配置。批量添加成员口可以用简化命令[HUAWEI] interface Eth-Trunk 1 [HUAWEI-Eth-Trunk1] trunkport GigabitEthernet 0/0/1 to 0/0/4to关键字可以批量加入连续端口但要注意对端也必须是相同的端口组合否则链路对不上。4.2 LACP模式配置步骤LACP模式的配置同样从创建Eth-Trunk开始区别在于需要显式切换模式并配置活动链路数。[HUAWEI] interface Eth-Trunk 1 [HUAWEI-Eth-Trunk1] mode lacp-static [HUAWEI-Eth-Trunk1] max active-linknumber 2 [HUAWEI-Eth-Trunk1] quit [HUAWEI] interface GigabitEthernet0/0/1 [HUAWEI-GigabitEthernet0/0/1] eth-trunk 1 [HUAWEI-GigabitEthernet0/0/1] quit [HUAWEI] interface GigabitEthernet0/0/2 [HUAWEI-GigabitEthernet0/0/2] eth-trunk 1 [HUAWEI-GigabitEthernet0/0/2] quit [HUAWEI] interface GigabitEthernet0/0/3 [HUAWEI-GigabitEthernet0/0/3] eth-trunk 1 [HUAWEI-GigabitEthernet0/0/3] quit [HUAWEI] interface GigabitEthernet0/0/4 [HUAWEI-GigabitEthernet0/0/4] eth-trunk 1 [HUAWEI-GigabitEthernet0/0/4] quitmax active-linknumber 2的作用是把4条成员口中的活动链路限制为2条其余2条作为备份。当活动链路断开时备份链路自动接替。它的实现原理是设备在LACP协商时选出优先级最高的链路作为活动链路系统优先级和端口优先级决定谁被选中。默认情况下华为设备的系统优先级是32768。如果网络中有多台设备参与LACP协商可以手动调整[HUAWEI] lacp system-priority 100 [HUAWEI] interface Eth-Trunk 1 [HUAWEI-Eth-Trunk1] lacp preempt enable [HUAWEI-Eth-Trunk1] lacp preempt delay 10系统优先级数值越小设备越优先成为LACP的主动端。lacp preempt enable允许链路恢复后抢占回活动链路位置适合有主备链路偏好的场景比如希望主用板卡链路故障恢复后继续承载流量。LACP模式下Eth-Trunk的链路状态与会话数量也相关。可以通过least active-linknumber配置最小活动链路数[HUAWEI-Eth-Trunk1] least active-linknumber 2当活动链路数低于这个阈值时Eth-Trunk逻辑口会Down掉。这个特性常被用于保护那些需要保证最小带宽的业务场景。比如两条10GE捆绑作为心跳链路如果其中一条断了业务勉强还能跑但风险极高不如让逻辑口直接Down触发上层业务切换到其他链路避免在低带宽状态下运行导致连锁故障。4.3 配置下发的先后顺序华为链路聚合配置中顺序问题经常被人忽略但影响很大。我的经验是先建Eth-Trunk逻辑口再逐条添加成员口然后配置业务最后再连接对端物理线缆。如果先连线再配置或者先配置业务再添加成员口过程中可能产生临时环路或配置失败。另外配置保存前一定要做一次状态确认[HUAWEI] display eth-trunk 1 [HUAWEI] display eth-trunk 1 verbose第一行命令查看概要状态verbose会显示成员口的具体信息包括活动状态、接收到的LACP报文统计等。确认成员口数量、活动状态、两端模式一致后再保存配置。修改配置时也要注意从手工模式切换到LACP模式或者反过来必须先把成员口全部从Eth-Trunk中退出改完模式再加回去不能在带成员口的状态下直接切换模式。5. 常见故障与排查实录链路聚合配置完成不是终点排障才是日常。这里把我在生产环境里遇到过的典型问题和排查过程整理出来。5.1 成员口不UP成员口始终不UP是链路聚合配置初期最常见的故障。排查思路先物理后逻辑查看物理口状态display interface GigabitEthernet0/0/1确认光模块是否被识别、收发光功率是否正常。物理口都不亮聚合自然无从谈起。检查两端速率和双工模式是否一致。强制千兆全双工对接强制百兆半双工即使聚合逻辑正确链路也会异常。查看Eth-Trunk成员状态display eth-trunk 1。如果成员口一直处于Down状态但物理口本身是Up就需要看是不是成员口配置残留导致加入失败。一个隐蔽的坑成员口加入Eth-Trunk后物理口的端口类型仍然显示为原有的Access或Trunk配置但实际转发不受这些配置控制。如果后续有人对这些物理口做了shutdown、undo eth-trunk操作很容易导致业务中断。建议对成员口做统一命名规范比如在接口描述里备注Eth-Trunk1 member减少人为误操作。5.2 LACP协商不成功LACP协商失败的典型表现是接口始终无法进入活动状态display eth-trunk verbose里看不到对端信息或者LACP会话处于Down状态。排查顺序如下先确认两端模式一致。华为设备上常见问题是一端手工模式、一端LACP模式此时对端收不到LACPDU协商永远不成功。检查系统优先级配置。如果本端和对端都配置了不同的系统优先级并且设备支持抢占链路可能会在两端之间反复竞争表现为链路状态不稳定。查看LACP报文统计display lacp statistics。如果收包计数持续为0说明LACPDU报文被丢弃可能原因包括中间链路的VLAN过滤、端口隔离、或者物理层协商异常。经验接入交换机与核心交换机做LACP对接时建议将接入侧配置为主动模式并调低系统优先级让接入侧主导链路选举。这样可以避免两侧同时竞争导致的协商震荡。5.3 负载不均衡与链路利用率倾斜前面提到哈希因子是负载均衡的核心但实际项目中负载不均衡还有一种容易被忽视的原因成员口数量和哈希模值的关系。华为设备负载均衡的结果是把哈希值映射到不同的成员链路上当成员口数量不是2的幂次比如3条、5条、6条哈希取模的结果会偏向某些链路。这是算法固有特性尤其当流量以小流为主时偏差会更明显。解决思路有几种将成员口数量调整为2的幂次2、4、8这是最有效的办法选用更细粒度的哈希因子如四元组或增强哈希让散列更分散使用华为高端的增强负载均衡特性它可以基于报文的多种特征组合计算减少取模偏差另外排查负载问题时不要只看Eth-Trunk接口的总流量还要分别看每个成员口的流量[HUAWEI] display interface GigabitEthernet0/0/1 [HUAWEI] display interface GigabitEthernet0/0/2逐个成员口对比Input/Output速率就能快速定位是哪个口拥塞。如果所有口流量都不高但业务仍然卡顿问题大概率不在聚合链路上需要排查上层设备或业务自身瓶颈。5.4 对接第三方设备不兼容华为设备之间做链路聚合协议兼容性基本没有障碍。但华为设备与第三方交换机、服务器网卡聚合对接时问题就多了。常见的问题包括第三方设备聚合模式叫法不同比如有的叫Port Channel有的叫Bond0但本质都是LACP。对接时只要保证两端模式一致、活动链路数配置一致即可。部分服务器网卡驱动对LACP报文TTL或报文间隔有严格要求华为设备默认的LACP报文中携带的Actor信息如果被网卡视为无效协商也会失败。这种情况下最稳妥的方案是使用手工模式聚合。手工模式不依赖协议交互只要两端端口逐一对应配置即可。其次可以尝试调整LACP报文发送周期华为设备支持lacp timeout fast把报文周期从30秒缩短到1秒加快协商速度和故障感知。但注意fast模式会增加CPU和处理开销并不适合所有场景。5.5 故障排查速查表故障现象可能原因排查命令或动作成员口不UP物理链路故障、速率双工不一致display interface、检查光模块聚合口Down活动链路数低于least active-linknumberdisplay eth-trunk 1 verboseLACP协商失败模式不一致、LACP报文被过滤display lacp statistics、display eth-trunk verbose流量倾斜哈希因子不合理、成员口数非2幂次调整load-balance、调整成员口数量丢包但成员口UP对端哈希策略不一致对比两端负载均衡配置配置无法生效成员口残留配置、模式切换带成员口恢复端口默认配置后再加入6. 进阶跨设备链路聚合与业务承载策略链路聚合的初级玩法是把两台设备之间的多条链路捆绑。数据中心和大型园区网里还有更复杂的场景服务器双网卡分别连接到两台不同的交换机上此时单台交换机上的Eth-Trunk无法满足需求需要跨设备链路聚合。6.1 堆叠与Eth-Trunk的配合华为设备的跨设备链路聚合主流方案是先做堆叠CSS或iStack把两台物理交换机虚拟化成一台逻辑设备然后在堆叠系统上创建Eth-Trunk。这样服务器的两条物理链路分别接入堆叠的两台成员设备但对服务器网卡来说它看到的就是一个逻辑端口可以做标准的链路聚合对接。这种方案的优势很明显服务器到网络的上联链路不再有单点故障——一台交换机故障宕机另一台交换机的成员链路继续承载流量业务无感知。堆叠链路本身也可以使用Eth-Trunk比如两台设备之间的堆叠接口用多条高速链路捆绑既提升堆叠带宽也增强堆叠稳定性。配置跨设备聚合时需要注意堆叠分裂问题两台设备之间的堆叠链路断开两台设备都会认为自己还是主设备此时同一个Eth-Trunk可能会出现双主冲突。华为设备通常配合堆叠分裂检测机制使用检测到分裂后备用设备自动关闭自身的聚合接口。配置这类方案前建议先检查设备是否支持堆叠快速检测并开启相关功能。6.2 服务器双网卡的对接配置服务器bond与华为交换机Eth-Trunk的对接是数据中心里最频繁的操作。Linux服务器的双网卡绑定模式常见有mode 1active-backup、mode 2balance-xor、mode 4802.3ad动态链路聚合。其中只有mode 4是真正的LACP动态聚合需要交换机侧使用LACP模式并且开启对应的VLAN透传。mode 2是静态的基于xor的负载均衡对应交换机侧的手工模式。mode 1是主备模式交换机侧最省事但它不提供带宽叠加只提供冗余。实际配置中我踩过这样一个坑服务器网卡bound为mode 4交换机侧配置了静态LACP但网卡驱动里没有正确加载802.3ad模块导致LACPDU从未发出交换机协商一直停留在等待状态。排查了很久才发现是服务器驱动问题。所以对接服务器时先在服务器侧验证bond模式是否正确生效cat /proc/net/bonding/bond0确认MII Status、Bonding Mode等信息正常后再去交换机侧排查协商状态可以少走很多弯路。6.3 业务规划与配置维护链路聚合的最终效果不只取决于设备配置还取决于业务规划是否合理。我建议在部署前想清楚几个问题这条Eth-Trunk承载哪些VLAN不同业务是否需要在聚合链路上隔离聚合链路的流量流向是什么是南北向多还是东西向多这决定哈希因子的选择。链路故障时可接受的业务降级程度是多少是否要配置least active-linknumber做保护对端设备是否支持LACP如果支持活动链路数和优先级如何规划维护阶段建议定期执行display eth-trunk 1和display interface Eth-Trunk 1这两条命令检查成员口状态和流量分布。同时为Eth-Trunk配置接口描述比如Core-SW_to_Server-Bond0方便后续其他人维护时快速识别链路用途。7. 最后再叮嘱几个实际运维细节链路聚合不是一个配置完就能忘的功能它在运行期会不断暴露出各种隐藏问题这里再分享几个我个人的运维习惯。第一全局负载均衡模式修改后观察时间要拉长。有些问题不是立即出现的比如改动哈希因子后的流量再均衡可能需要几分钟甚至更长时间才能体现不要刚改完看一眼觉得没变化就回退。第二成员口替换时要特别小心。物理口故障后更换新端口如果直接插上去但配置里没有把新口加入Eth-Trunk业务其实就是降级状态。更换板卡或端口后务必再次确认display eth-trunk里的成员数量。第三配置备份的时机。链路聚合配置通常和VLAN、接口配置一起保存但很多时候工程师改完忘保存设备一重启聚合链路全断业务恢复变成灾难现场。操作完记一条save命令花不了几秒钟关键时刻能救命。链路聚合这个技术本身不复杂但它牵扯到物理层、二层协议、负载均衡算法、业务规划等多个层面任何一个环节出问题最终表象都是业务卡顿或断流。排查时不要只盯着设备配置物理链路质量、对端设备策略、业务流量模型都要纳入考虑。把这几个维度都吃透了华为链路聚合在你手里才会真正成为一件顺手趁手的工具。