1. 链路聚合与LACP协议的核心逻辑拆解很多刚接触网络设备的朋友第一次听到“链路聚合”这四个字,脑子里冒出来的画面可能是把几根网线捆在一起,觉得带宽就直接翻倍了。这个直觉不能说错,但只对了一半。链路聚合真正解决的问题,是在增加带宽的同时提供链路冗余,并且保证数据转发过程中不会因为多根线并行而出现环路、乱序这些要命的问题。而LACP协议,就是让两台设备之间自动协商、自动维护这条聚合链路的“协调员”。我先把这件事的本质讲清楚。假设你有一台接入层交换机和一台核心交换机,中间只拉了一根千兆线。现在接入层下面挂了五十台终端,高峰期流量跑满了千兆,用户开始喊卡。最直接的办法是换万兆端口,但万兆光模块、万兆板卡、光纤跳线的成本摆在那里,不是每个项目都批得下来。这时候如果设备上还有空闲的千兆口,把四根千兆线捆成一条逻辑链路,理论带宽就变成了四千兆,而且其中一根线断了,另外三根还能继续跑,业务不中断。这就是链路聚合最朴素的价值。但问题来了:如果只是把四根线插上去,不做任何协商,交换机会怎么处理?答案是生成树协议会把其中三根口阻塞掉,实际还是只有一根线在工作。更糟糕的是,如果两端设备对哪些口属于同一个聚合组的理解不一致,还可能形成环路,广播风暴瞬间就能把网络打瘫。LACP的作用就是让两端设备通过交换LACPDU报文,确认“我们俩都认为这几个口是一组的”,并且持续监控每个成员口的状态。一旦某个成员口出问题,LACP会把它从聚合组里踢出去,流量自动切换到剩余成员口上。这里要区分两个概念:静态链路聚合和动态链路聚合。静态聚合就是管理员在两端手工指定哪些口属于同一个聚合组,不跑LACP协议。这种方式配置简单,但有个致命问题——如果一端配置了聚合,另一端忘了配,或者两端对成员口的定义不一致,就可能出环路。动态聚合就是跑LACP协议,两端通过报文协商,只有协商成功的口才会加入聚合组,安全性高很多。华为交换机上,静态聚合用mode manual,动态聚合用mode lacp-static,这个后面会详细讲。那LACP协议具体是怎么工作的?它通过周期性地发送LACPDU(Link Aggregation Control Protocol Data Unit)报文来维护链路状态。报文中携带了系统优先级、系统MAC、端口优先级、端口号等关键信息。两端设备根据这些信息选举出一个“主动端”,由主动端来决定哪些端口可以加入聚合组。选举规则是先比系统优先级,数值小的优先;如果系统优先级相同,再比系统MAC,数值小的优先。主动端确定后,它会根据端口优先级和端口号来决定成员口的活跃状态。端口优先级数值小的优先,如果相同则端口号小的优先。这个选举机制在实际项目中有个很实用的场景:当两台交换机之间的聚合链路中,有些口是千兆、有些口是百兆时,你可以通过调整端口优先级,让千兆口优先成为活跃口,百兆口作为备份。这样正常运行时流量都走千兆口,千兆口故障时才切换到百兆口,虽然带宽降了但业务不至于断。这个技巧在老旧设备混用的网络里特别管用。还有一个容易被忽略的点:LACP的报文发送周期。华为交换机默认是30秒发送一次LACPDU,这个叫“慢速报文”。有些场景下需要改成1秒发送一次,叫“快速报文”。比如对收敛时间要求很高的金融交易网络,30秒的检测周期意味着链路故障后可能要等30秒才能切换,这显然不可接受。改成快速报文后,1秒内就能检测到故障并完成切换。但快速报文会增加CPU负担,所以不是所有场景都适合,得根据实际需求权衡。2. 华为交换机LACP配置的实操要点与避坑指南2.1 聚合组与成员口的绑定逻辑在华为交换机上配置LACP,第一步是创建Eth-Trunk接口。这个Eth-Trunk接口是一个逻辑接口,你可以把它当成一个物理口来用——配IP地址、配VLAN、配QoS策略都行。创建命令很简单:interface Eth-Trunk 1 mode lacp-static这两行命令的意思是:创建一个编号为1的Eth-Trunk接口,工作模式为动态LACP。注意这里的编号范围,不同型号的华为交换机支持的Eth-Trunk数量不一样,接入层设备一般支持几十个,核心层设备能支持上百个。规划的时候要留有余量,别把编号用满了。创建完Eth-Trunk接口后,需要把物理口加进去。有两种方式:一种是在物理口视图下执行eth-trunk 1,另一种是在Eth-Trunk视图下执行trunkport GigabitEthernet 0/0/1。我个人的习惯是用后者,因为一次性可以把多个口都加进去,效率高。比如:interface Eth-Trunk 1 trunkport GigabitEthernet 0/0/1 to 0/0/4这条命令把0/0/1到0/0/4四个口一次性加入Eth-Trunk 1。但这里有个坑:加入Eth-Trunk的物理口不能预先配置任何业务。如果某个口上已经配了IP地址、VLAN或者ACL,加入Eth-Trunk时会报错。正确的做法是先把物理口的配置清掉,再加入聚合组。我见过不少新手在这个地方卡住,反复检查LACP配置却找不到问题,其实就是物理口上有残留配置。还有一个细节:华为交换机上,物理口加入Eth-Trunk后,它的很多配置会自动继承Eth-Trunk接口的配置。比如你在Eth-Trunk上配了port link-type trunk和port trunk allow-pass vlan 10 20,那么所有成员口都会自动变成Trunk模式并允许VLAN 10和20通过。但有些配置不会自动继承,比如STP相关的参数、风暴抑制等,需要手动在Eth-Trunk上配置。这个继承关系一定要搞清楚,否则会出现“明明在物理口上配了却不起作用”的情况。2.2 LACP优先级与抢占机制的实际应用LACP的优先级分为系统优先级和端口优先级两个层级。系统优先级决定了哪端是主动端,端口优先级决定了哪些口是活跃口。华为交换机上,系统优先级的默认值是32768,取值范围是0到65535,数值越小优先级越高。端口优先级的默认值也是32768,取值范围一样。在什么场景下需要调整这些优先级?我举一个实际项目中的例子。某园区网有两台核心交换机做堆叠,接入交换机通过两条上行链路分别连接到两台核心。接入交换机上创建了一个Eth-Trunk,两个成员口分别连到两台核心。这时候如果核心交换机的系统优先级相同,LACP选举出来的主动端可能是其中一台,所有流量都走那台核心。如果那台核心的CPU负载已经很高了,就会出问题。这时候可以把另一台核心的系统优先级调低,让它成为主动端,流量就会切换到负载较低的那台核心上。配置命令如下:lacp priority 100这条命令在系统视图下执行,把本设备的LACP系统优先级设为100。注意这个命令是全局生效的,会影响设备上所有Eth-Trunk的LACP选举。如果只想调整某个Eth-Trunk的优先级,需要在Eth-Trunk视图下配置:interface Eth-Trunk 1 lacp priority 100端口优先级的调整类似,在物理口视图下执行:interface GigabitEthernet 0/0/1 lacp priority 100这里有个经验之谈:端口优先级不要随便调。因为LACP的活跃口选举是按端口优先级从小到大排的,如果你把某个口的优先级调得很低,它就会成为活跃口。但如果这个口的物理质量不好(比如光衰大、误码率高),反而会影响业务。所以调整端口优先级之前,一定要确认这个口的物理层质量是OK的。关于抢占机制,华为交换机默认是非抢占模式。什么意思?假设Eth-Trunk 1有三个成员口,其中口1和口2是活跃口,口3是备份口。现在口1故障了,口3自动变成活跃口。过了一会口1恢复了,在非抢占模式下,口1会变成备份口,口3继续做活跃口。如果开启了抢占模式,口1恢复后会重新抢回活跃口的位置,口3退回备份状态。抢占模式怎么开?interface Eth-Trunk 1 lacp preempt enable lacp preempt delay 30lacp preempt delay 30的意思是延迟30秒再抢占。为什么要延迟?因为口刚恢复的时候可能还不稳定,如果立刻抢占,可能刚切过去又断了,来回震荡对业务影响更大。延迟30秒可以让口先稳定运行一段时间,确认没问题了再切换。这个延迟时间可以根据实际情况调整,一般10到60秒都合理。2.3 负载分担模式的选型与配置链路聚合的负载分担模式决定了流量如何在各个成员口之间分配。华为交换机支持多种负载分担模式,包括基于源MAC、目的MAC、源IP、目的IP、源端口、目的端口以及它们的组合。默认情况下,华为交换机的负载分担模式是src-dst-mac,也就是根据源MAC和目的MAC的哈希值来选口。这个默认值在大多数场景下够用,但在某些特定场景下需要调整。比如你的网络里有一台服务器,它的MAC地址固定,所有访问它的流量源MAC可能不同但目的MAC都是这个服务器的MAC。如果按src-dst-mac分担,哈希结果可能总是落在同一个成员口上,其他成员口闲着,聚合带宽根本没利用起来。这时候改成src-dst-ip就更合理,因为不同客户端的源IP不同,哈希结果会分散到不同成员口上。配置命令如下:interface Eth-Trunk 1 load-balance src-dst-ip华为交换机支持的负载分担模式比较丰富,我整理了一个表格供参考:负载分担模式适用场景注意事项src-dst-mac通用场景,接入层到汇聚层同源同目的MAC的流量会走同一个口src-dst-ip三层转发场景,服务器集群需要设备支持三层转发src-ip客户端访问服务器,源IP分散目的IP相同的流量可能不均dst-ip服务器回包给客户端源IP相同的流量可能不均src-dst-port需要更细粒度分担的场景对设备性能有一定要求这里要提醒一点:负载分担模式是全局生效的,不是每个Eth-Trunk单独配。也就是说,你在Eth-Trunk 1上配了load-balance src-dst-ip,设备上所有Eth-Trunk都会用这个模式。所以调整之前要评估对现网其他聚合链路的影响。还有一个实际经验:负载分担的效果很难做到绝对均匀。因为哈希算法本身是概率性的,流量特征不同,分担比例可能从3:7到5:5不等。如果你发现某个成员口的流量明显高于其他口,先别急着怀疑配置有问题,这很可能是流量特征导致的。可以用display interface Eth-Trunk 1查看各成员口的流量统计,如果长期严重不均,再考虑调整负载分担模式。3. LACP协议在典型网络场景中的落地实践3.1 接入层到汇聚层的双上行聚合这是最常见的LACP应用场景。接入交换机放在楼层弱电间,汇聚交换机放在机房,中间拉两根或四根网线。接入交换机上创建Eth-Trunk,把上行口加进去;汇聚交换机上对应创建Eth-Trunk,把下行口加进去。两端都跑LACP动态聚合。这个场景的配置要点有几个。第一,两端Eth-Trunk的编号可以不同,LACP协商不依赖编号,只依赖系统MAC和端口信息。但为了管理方便,建议两端用相同的编号。第二,两端成员口的数量要一致,如果一端配了4个口,另一端只配了2个口,LACP协商会部分成功,但活跃口数量以少的那端为准。第三,两端的工作模式必须一致,一端是lacp-static,另一端也必须是lacp-static,如果一端是manual,另一端是lacp-static,协商会失败。我经手过一个案例:某办公楼接入交换机双上行到汇聚,配置完成后发现只有一根线在跑流量,另一根完全没流量。检查LACP状态发现,两端协商是成功的,两个口都是活跃状态。那为什么流量只走一个口?后来查负载分担模式,发现是src-dst-mac,而那个楼层的终端MAC地址分布比较集中,哈希结果总是落在同一个口上。改成src-dst-ip后,两个口的流量就均衡了。这个案例说明,LACP协商成功不等于负载均衡生效,还要关注负载分担模式是否匹配流量特征。3.2 服务器双网卡聚合接入服务器通过双网卡接入交换机,也是LACP的典型应用。服务器端需要配置bonding,模式选择4(802.3ad动态聚合),交换机端配置Eth-Trunk。这个场景比交换机之间的聚合要复杂一些,因为涉及到服务器操作系统的配置。以Linux服务器为例,配置bonding的步骤大致如下:# 创建bond接口 ip link add bond0 type bond mode 802.3ad # 设置LACP速率 echo fast > /sys/class/net/bond0/bonding/lacp_rate # 添加物理网卡 ip link set eth0 down ip link set eth1 down ip link set eth0 master bond0 ip link set eth1 master bond0 ip link set bond0 up交换机端的配置和普通Eth-Trunk一样,关键是LACP速率要匹配。服务器端如果配了lacp_rate fast,交换机端也要配快速报文,否则协商可能出问题。华为交换机上配置快速报文的命令是:interface Eth-Trunk 1 lacp timeout fast这个场景最常见的坑是服务器端和交换机端的聚合模式不匹配。服务器端bonding模式4对应的是动态LACP,如果交换机端配成了静态聚合,协商就会失败。表现是服务器只能通一个网卡,另一个网卡虽然物理UP但无法转发流量。排查的时候先在交换机上看display eth-trunk 1,如果成员口状态是Unselected,基本就是协商没成功。3.3 跨设备聚合的进阶玩法华为交换机支持跨设备链路聚合,也就是M-LAG(Multi-Chassis Link Aggregation)。这个技术允许两台独立的交换机组成一个逻辑设备,接入交换机可以同时连接到这两台交换机,形成跨设备的聚合链路。相比传统的堆叠方案,M-LAG的优点是两台交换机可以独立升级、独立重启,不会因为一台设备的维护导致整个聚合组中断。M-LAG的配置比普通LACP复杂得多,需要配置DFS组、Peer-Link、双归接入等。这里不展开讲具体命令,但要说清楚一个核心概念:M-LAG的LACP协商是两台交换机分别和接入交换机进行的,但两台交换机之间会通过Peer-Link同步LACP状态。接入交换机看到的是一个逻辑上的聚合组,实际上它的LACPDU报文被两台交换机分别处理。这个场景的注意事项是:Peer-Link的带宽要足够。因为两台交换机之间的Peer-Link不仅要承载协议报文,还要在故障时承载跨设备流量。如果Peer-Link带宽不足,一旦其中一台交换机故障,所有流量涌向Peer-Link,可能导致拥塞。一般建议Peer-Link的带宽不低于聚合链路总带宽的1.5倍。4. LACP常见故障排查与实战避坑手册4.1 LACP协商失败的典型原因LACP协商失败是新手最常遇到的问题。表现是Eth-Trunk接口起不来,或者成员口状态一直是Unselected。排查的时候按以下顺序检查:第一,两端工作模式是否一致。一端lacp-static,另一端manual,协商肯定失败。这个是最低级但也最容易犯的错误,因为华为交换机的Eth-Trunk默认模式是manual,创建的时候如果不加mode lacp-static,就变成静态聚合了。第二,成员口的物理状态是否UP。如果物理口是DOWN的,LACP报文发不出去,协商自然失败。用display interface GigabitEthernet 0/0/1查看物理口状态,确认是UP还是DOWN。第三,成员口是否被STP阻塞。如果Eth-Trunk接口没有正确配置STP,或者STP优先级有问题,成员口可能被阻塞。用display stp interface Eth-Trunk 1查看STP状态。第四,两端系统优先级和MAC是否冲突。如果两端设备的系统优先级和MAC完全相同(比如两台设备是同一批次出厂的,MAC地址很接近),LACP选举可能出问题。这种情况比较罕见,但确实遇到过。第五,中间是否有传输设备。如果两台交换机之间经过了光传输设备、微波设备等,这些设备可能对LACPDU报文做处理,导致协商失败。LACPDU是二层报文,目的MAC是固定的组播地址,有些传输设备会过滤或修改这类报文。我整理了一个排查速查表:故障现象可能原因排查命令解决方法Eth-Trunk起不来两端模式不一致display eth-trunk 1统一改为lacp-static成员口Unselected物理口DOWNdisplay interface检查光模块、网线协商成功但流量不均负载分担模式不匹配display eth-trunk 1调整load-balance频繁震荡物理链路质量差display interface检查光衰、误码一端活跃一端备份系统优先级不一致display lacp调整lacp priority4.2 链路震荡的排查思路链路震荡是指成员口频繁地在活跃和备份状态之间切换。这个问题的危害很大,因为每次切换都会导致流量短暂中断,业务可能表现为丢包、卡顿。震荡的原因通常有三个:一是物理链路质量差。光模块光衰过大、网线接触不良、水晶头氧化,都会导致链路时断时续。LACP检测到链路DOWN就切换,链路恢复又切回来,来回震荡。排查方法是看接口的错包统计,用display interface GigabitEthernet 0/0/1查看CRC错误、丢包计数。如果错包数持续增长,基本可以确定是物理层问题。二是LACP超时时间设置不合理。如果配了快速报文(1秒超时),但对端设备处理能力不足,可能来不及响应,导致LACP超时。表现是成员口每隔几秒就切换一次。解决方法是改回慢速报文(30秒超时),或者检查对端设备的CPU利用率。三是STP和LACP的交互问题。在某些配置下,STP可能会把Eth-Trunk的成员口阻塞,导致LACP报文无法通过。这种情况需要检查STP配置,确保Eth-Trunk接口的STP状态是Forwarding。4.3 跨厂商设备对接的注意事项虽然本文主要讲华为交换机,但实际项目中经常遇到华为交换机和别的厂商设备对接的情况。跨厂商LACP对接有几个坑:第一,LACP报文的发送周期可能不同。华为默认30秒,有些厂商默认1秒。如果两端周期不一致,协商可能成功但状态不稳定。建议两端都配成相同的周期。第二,负载分担模式的支持范围不同。华为支持的某些负载分担模式,其他厂商可能不支持。对接时建议用最通用的src-dst-mac模式。第三,LACP的系统优先级取值范围可能不同。华为是0到65535,有些厂商是1到65535。如果一端配了0,另一端可能不识别。建议用默认值或中间值。第四,M-LAG等高级特性不互通。华为的M-LAG和其他厂商的类似技术(如某厂商的vPC)不能直接对接,需要走标准LACP。这个在规划阶段就要确认清楚。4.4 日常维护与监控建议LACP链路配好之后不是就没事了,日常维护要做几件事:定期检查成员口状态。用display eth-trunk 1 verbose查看每个成员口的详细状态,包括LACP协商状态、活跃状态、收发包统计。如果发现某个口长期没有流量,可能是负载分担问题,也可能是这个口有问题。监控LACP报文收发计数。用display lacp statistics eth-trunk 1查看LACPDU的收发计数。如果发送计数正常但接收计数为0,说明对端没有回LACPDU,协商有问题。配置告警。华为交换机支持LACP状态变化的告警,可以在网管系统上配置Trap接收。这样一旦成员口状态变化,网管能第一时间知道,不用等用户报障。变更前先备份配置。LACP相关的配置变更(比如调整优先级、修改负载分担模式)可能会短暂中断业务,建议在业务低谷期操作,并且提前备份配置文件。我个人在实际操作中的体会是,LACP本身的技术原理并不复杂,但实际项目中的问题往往出在细节上——物理链路质量、两端配置一致性、负载分担模式匹配度,这些才是决定聚合链路是否稳定的关键。配置命令敲下去只是开始,后续的监控和调优才是真正体现功力的地方。还有一个小技巧:如果条件允许,在正式割接前先用测试仪或者两台测试交换机做一遍LACP协商测试,确认配置无误后再上现网,能避免很多不必要的麻烦。
1. 链路聚合与LACP协议的核心逻辑拆解很多刚接触网络设备的朋友第一次听到“链路聚合”这四个字,脑子里冒出来的画面可能是把几根网线捆在一起,觉得带宽就直接翻倍了。这个直觉不能说错,但只对了一半。链路聚合真正解决的问题,是在增加带宽的同时提供链路冗余,并且保证数据转发过程中不会因为多根线并行而出现环路、乱序这些要命的问题。而LACP协议,就是让两台设备之间自动协商、自动维护这条聚合链路的“协调员”。我先把这件事的本质讲清楚。假设你有一台接入层交换机和一台核心交换机,中间只拉了一根千兆线。现在接入层下面挂了五十台终端,高峰期流量跑满了千兆,用户开始喊卡。最直接的办法是换万兆端口,但万兆光模块、万兆板卡、光纤跳线的成本摆在那里,不是每个项目都批得下来。这时候如果设备上还有空闲的千兆口,把四根千兆线捆成一条逻辑链路,理论带宽就变成了四千兆,而且其中一根线断了,另外三根还能继续跑,业务不中断。这就是链路聚合最朴素的价值。但问题来了:如果只是把四根线插上去,不做任何协商,交换机会怎么处理?答案是生成树协议会把其中三根口阻塞掉,实际还是只有一根线在工作。更糟糕的是,如果两端设备对哪些口属于同一个聚合组的理解不一致,还可能形成环路,广播风暴瞬间就能把网络打瘫。LACP的作用就是让两端设备通过交换LACPDU报文,确认“我们俩都认为这几个口是一组的”,并且持续监控每个成员口的状态。一旦某个成员口出问题,LACP会把它从聚合组里踢出去,流量自动切换到剩余成员口上。这里要区分两个概念:静态链路聚合和动态链路聚合。静态聚合就是管理员在两端手工指定哪些口属于同一个聚合组,不跑LACP协议。这种方式配置简单,但有个致命问题——如果一端配置了聚合,另一端忘了配,或者两端对成员口的定义不一致,就可能出环路。动态聚合就是跑LACP协议,两端通过报文协商,只有协商成功的口才会加入聚合组,安全性高很多。华为交换机上,静态聚合用mode manual,动态聚合用mode lacp-static,这个后面会详细讲。那LACP协议具体是怎么工作的?它通过周期性地发送LACPDU(Link Aggregation Control Protocol Data Unit)报文来维护链路状态。报文中携带了系统优先级、系统MAC、端口优先级、端口号等关键信息。两端设备根据这些信息选举出一个“主动端”,由主动端来决定哪些端口可以加入聚合组。选举规则是先比系统优先级,数值小的优先;如果系统优先级相同,再比系统MAC,数值小的优先。主动端确定后,它会根据端口优先级和端口号来决定成员口的活跃状态。端口优先级数值小的优先,如果相同则端口号小的优先。这个选举机制在实际项目中有个很实用的场景:当两台交换机之间的聚合链路中,有些口是千兆、有些口是百兆时,你可以通过调整端口优先级,让千兆口优先成为活跃口,百兆口作为备份。这样正常运行时流量都走千兆口,千兆口故障时才切换到百兆口,虽然带宽降了但业务不至于断。这个技巧在老旧设备混用的网络里特别管用。还有一个容易被忽略的点:LACP的报文发送周期。华为交换机默认是30秒发送一次LACPDU,这个叫“慢速报文”。有些场景下需要改成1秒发送一次,叫“快速报文”。比如对收敛时间要求很高的金融交易网络,30秒的检测周期意味着链路故障后可能要等30秒才能切换,这显然不可接受。改成快速报文后,1秒内就能检测到故障并完成切换。但快速报文会增加CPU负担,所以不是所有场景都适合,得根据实际需求权衡。2. 华为交换机LACP配置的实操要点与避坑指南2.1 聚合组与成员口的绑定逻辑在华为交换机上配置LACP,第一步是创建Eth-Trunk接口。这个Eth-Trunk接口是一个逻辑接口,你可以把它当成一个物理口来用——配IP地址、配VLAN、配QoS策略都行。创建命令很简单:interface Eth-Trunk 1 mode lacp-static这两行命令的意思是:创建一个编号为1的Eth-Trunk接口,工作模式为动态LACP。注意这里的编号范围,不同型号的华为交换机支持的Eth-Trunk数量不一样,接入层设备一般支持几十个,核心层设备能支持上百个。规划的时候要留有余量,别把编号用满了。创建完Eth-Trunk接口后,需要把物理口加进去。有两种方式:一种是在物理口视图下执行eth-trunk 1,另一种是在Eth-Trunk视图下执行trunkport GigabitEthernet 0/0/1。我个人的习惯是用后者,因为一次性可以把多个口都加进去,效率高。比如:interface Eth-Trunk 1 trunkport GigabitEthernet 0/0/1 to 0/0/4这条命令把0/0/1到0/0/4四个口一次性加入Eth-Trunk 1。但这里有个坑:加入Eth-Trunk的物理口不能预先配置任何业务。如果某个口上已经配了IP地址、VLAN或者ACL,加入Eth-Trunk时会报错。正确的做法是先把物理口的配置清掉,再加入聚合组。我见过不少新手在这个地方卡住,反复检查LACP配置却找不到问题,其实就是物理口上有残留配置。还有一个细节:华为交换机上,物理口加入Eth-Trunk后,它的很多配置会自动继承Eth-Trunk接口的配置。比如你在Eth-Trunk上配了port link-type trunk和port trunk allow-pass vlan 10 20,那么所有成员口都会自动变成Trunk模式并允许VLAN 10和20通过。但有些配置不会自动继承,比如STP相关的参数、风暴抑制等,需要手动在Eth-Trunk上配置。这个继承关系一定要搞清楚,否则会出现“明明在物理口上配了却不起作用”的情况。2.2 LACP优先级与抢占机制的实际应用LACP的优先级分为系统优先级和端口优先级两个层级。系统优先级决定了哪端是主动端,端口优先级决定了哪些口是活跃口。华为交换机上,系统优先级的默认值是32768,取值范围是0到65535,数值越小优先级越高。端口优先级的默认值也是32768,取值范围一样。在什么场景下需要调整这些优先级?我举一个实际项目中的例子。某园区网有两台核心交换机做堆叠,接入交换机通过两条上行链路分别连接到两台核心。接入交换机上创建了一个Eth-Trunk,两个成员口分别连到两台核心。这时候如果核心交换机的系统优先级相同,LACP选举出来的主动端可能是其中一台,所有流量都走那台核心。如果那台核心的CPU负载已经很高了,就会出问题。这时候可以把另一台核心的系统优先级调低,让它成为主动端,流量就会切换到负载较低的那台核心上。配置命令如下:lacp priority 100这条命令在系统视图下执行,把本设备的LACP系统优先级设为100。注意这个命令是全局生效的,会影响设备上所有Eth-Trunk的LACP选举。如果只想调整某个Eth-Trunk的优先级,需要在Eth-Trunk视图下配置:interface Eth-Trunk 1 lacp priority 100端口优先级的调整类似,在物理口视图下执行:interface GigabitEthernet 0/0/1 lacp priority 100这里有个经验之谈:端口优先级不要随便调。因为LACP的活跃口选举是按端口优先级从小到大排的,如果你把某个口的优先级调得很低,它就会成为活跃口。但如果这个口的物理质量不好(比如光衰大、误码率高),反而会影响业务。所以调整端口优先级之前,一定要确认这个口的物理层质量是OK的。关于抢占机制,华为交换机默认是非抢占模式。什么意思?假设Eth-Trunk 1有三个成员口,其中口1和口2是活跃口,口3是备份口。现在口1故障了,口3自动变成活跃口。过了一会口1恢复了,在非抢占模式下,口1会变成备份口,口3继续做活跃口。如果开启了抢占模式,口1恢复后会重新抢回活跃口的位置,口3退回备份状态。抢占模式怎么开?interface Eth-Trunk 1 lacp preempt enable lacp preempt delay 30lacp preempt delay 30的意思是延迟30秒再抢占。为什么要延迟?因为口刚恢复的时候可能还不稳定,如果立刻抢占,可能刚切过去又断了,来回震荡对业务影响更大。延迟30秒可以让口先稳定运行一段时间,确认没问题了再切换。这个延迟时间可以根据实际情况调整,一般10到60秒都合理。2.3 负载分担模式的选型与配置链路聚合的负载分担模式决定了流量如何在各个成员口之间分配。华为交换机支持多种负载分担模式,包括基于源MAC、目的MAC、源IP、目的IP、源端口、目的端口以及它们的组合。默认情况下,华为交换机的负载分担模式是src-dst-mac,也就是根据源MAC和目的MAC的哈希值来选口。这个默认值在大多数场景下够用,但在某些特定场景下需要调整。比如你的网络里有一台服务器,它的MAC地址固定,所有访问它的流量源MAC可能不同但目的MAC都是这个服务器的MAC。如果按src-dst-mac分担,哈希结果可能总是落在同一个成员口上,其他成员口闲着,聚合带宽根本没利用起来。这时候改成src-dst-ip就更合理,因为不同客户端的源IP不同,哈希结果会分散到不同成员口上。配置命令如下:interface Eth-Trunk 1 load-balance src-dst-ip华为交换机支持的负载分担模式比较丰富,我整理了一个表格供参考:负载分担模式适用场景注意事项src-dst-mac通用场景,接入层到汇聚层同源同目的MAC的流量会走同一个口src-dst-ip三层转发场景,服务器集群需要设备支持三层转发src-ip客户端访问服务器,源IP分散目的IP相同的流量可能不均dst-ip服务器回包给客户端源IP相同的流量可能不均src-dst-port需要更细粒度分担的场景对设备性能有一定要求这里要提醒一点:负载分担模式是全局生效的,不是每个Eth-Trunk单独配。也就是说,你在Eth-Trunk 1上配了load-balance src-dst-ip,设备上所有Eth-Trunk都会用这个模式。所以调整之前要评估对现网其他聚合链路的影响。还有一个实际经验:负载分担的效果很难做到绝对均匀。因为哈希算法本身是概率性的,流量特征不同,分担比例可能从3:7到5:5不等。如果你发现某个成员口的流量明显高于其他口,先别急着怀疑配置有问题,这很可能是流量特征导致的。可以用display interface Eth-Trunk 1查看各成员口的流量统计,如果长期严重不均,再考虑调整负载分担模式。3. LACP协议在典型网络场景中的落地实践3.1 接入层到汇聚层的双上行聚合这是最常见的LACP应用场景。接入交换机放在楼层弱电间,汇聚交换机放在机房,中间拉两根或四根网线。接入交换机上创建Eth-Trunk,把上行口加进去;汇聚交换机上对应创建Eth-Trunk,把下行口加进去。两端都跑LACP动态聚合。这个场景的配置要点有几个。第一,两端Eth-Trunk的编号可以不同,LACP协商不依赖编号,只依赖系统MAC和端口信息。但为了管理方便,建议两端用相同的编号。第二,两端成员口的数量要一致,如果一端配了4个口,另一端只配了2个口,LACP协商会部分成功,但活跃口数量以少的那端为准。第三,两端的工作模式必须一致,一端是lacp-static,另一端也必须是lacp-static,如果一端是manual,另一端是lacp-static,协商会失败。我经手过一个案例:某办公楼接入交换机双上行到汇聚,配置完成后发现只有一根线在跑流量,另一根完全没流量。检查LACP状态发现,两端协商是成功的,两个口都是活跃状态。那为什么流量只走一个口?后来查负载分担模式,发现是src-dst-mac,而那个楼层的终端MAC地址分布比较集中,哈希结果总是落在同一个口上。改成src-dst-ip后,两个口的流量就均衡了。这个案例说明,LACP协商成功不等于负载均衡生效,还要关注负载分担模式是否匹配流量特征。3.2 服务器双网卡聚合接入服务器通过双网卡接入交换机,也是LACP的典型应用。服务器端需要配置bonding,模式选择4(802.3ad动态聚合),交换机端配置Eth-Trunk。这个场景比交换机之间的聚合要复杂一些,因为涉及到服务器操作系统的配置。以Linux服务器为例,配置bonding的步骤大致如下:# 创建bond接口 ip link add bond0 type bond mode 802.3ad # 设置LACP速率 echo fast > /sys/class/net/bond0/bonding/lacp_rate # 添加物理网卡 ip link set eth0 down ip link set eth1 down ip link set eth0 master bond0 ip link set eth1 master bond0 ip link set bond0 up交换机端的配置和普通Eth-Trunk一样,关键是LACP速率要匹配。服务器端如果配了lacp_rate fast,交换机端也要配快速报文,否则协商可能出问题。华为交换机上配置快速报文的命令是:interface Eth-Trunk 1 lacp timeout fast这个场景最常见的坑是服务器端和交换机端的聚合模式不匹配。服务器端bonding模式4对应的是动态LACP,如果交换机端配成了静态聚合,协商就会失败。表现是服务器只能通一个网卡,另一个网卡虽然物理UP但无法转发流量。排查的时候先在交换机上看display eth-trunk 1,如果成员口状态是Unselected,基本就是协商没成功。3.3 跨设备聚合的进阶玩法华为交换机支持跨设备链路聚合,也就是M-LAG(Multi-Chassis Link Aggregation)。这个技术允许两台独立的交换机组成一个逻辑设备,接入交换机可以同时连接到这两台交换机,形成跨设备的聚合链路。相比传统的堆叠方案,M-LAG的优点是两台交换机可以独立升级、独立重启,不会因为一台设备的维护导致整个聚合组中断。M-LAG的配置比普通LACP复杂得多,需要配置DFS组、Peer-Link、双归接入等。这里不展开讲具体命令,但要说清楚一个核心概念:M-LAG的LACP协商是两台交换机分别和接入交换机进行的,但两台交换机之间会通过Peer-Link同步LACP状态。接入交换机看到的是一个逻辑上的聚合组,实际上它的LACPDU报文被两台交换机分别处理。这个场景的注意事项是:Peer-Link的带宽要足够。因为两台交换机之间的Peer-Link不仅要承载协议报文,还要在故障时承载跨设备流量。如果Peer-Link带宽不足,一旦其中一台交换机故障,所有流量涌向Peer-Link,可能导致拥塞。一般建议Peer-Link的带宽不低于聚合链路总带宽的1.5倍。4. LACP常见故障排查与实战避坑手册4.1 LACP协商失败的典型原因LACP协商失败是新手最常遇到的问题。表现是Eth-Trunk接口起不来,或者成员口状态一直是Unselected。排查的时候按以下顺序检查:第一,两端工作模式是否一致。一端lacp-static,另一端manual,协商肯定失败。这个是最低级但也最容易犯的错误,因为华为交换机的Eth-Trunk默认模式是manual,创建的时候如果不加mode lacp-static,就变成静态聚合了。第二,成员口的物理状态是否UP。如果物理口是DOWN的,LACP报文发不出去,协商自然失败。用display interface GigabitEthernet 0/0/1查看物理口状态,确认是UP还是DOWN。第三,成员口是否被STP阻塞。如果Eth-Trunk接口没有正确配置STP,或者STP优先级有问题,成员口可能被阻塞。用display stp interface Eth-Trunk 1查看STP状态。第四,两端系统优先级和MAC是否冲突。如果两端设备的系统优先级和MAC完全相同(比如两台设备是同一批次出厂的,MAC地址很接近),LACP选举可能出问题。这种情况比较罕见,但确实遇到过。第五,中间是否有传输设备。如果两台交换机之间经过了光传输设备、微波设备等,这些设备可能对LACPDU报文做处理,导致协商失败。LACPDU是二层报文,目的MAC是固定的组播地址,有些传输设备会过滤或修改这类报文。我整理了一个排查速查表:故障现象可能原因排查命令解决方法Eth-Trunk起不来两端模式不一致display eth-trunk 1统一改为lacp-static成员口Unselected物理口DOWNdisplay interface检查光模块、网线协商成功但流量不均负载分担模式不匹配display eth-trunk 1调整load-balance频繁震荡物理链路质量差display interface检查光衰、误码一端活跃一端备份系统优先级不一致display lacp调整lacp priority4.2 链路震荡的排查思路链路震荡是指成员口频繁地在活跃和备份状态之间切换。这个问题的危害很大,因为每次切换都会导致流量短暂中断,业务可能表现为丢包、卡顿。震荡的原因通常有三个:一是物理链路质量差。光模块光衰过大、网线接触不良、水晶头氧化,都会导致链路时断时续。LACP检测到链路DOWN就切换,链路恢复又切回来,来回震荡。排查方法是看接口的错包统计,用display interface GigabitEthernet 0/0/1查看CRC错误、丢包计数。如果错包数持续增长,基本可以确定是物理层问题。二是LACP超时时间设置不合理。如果配了快速报文(1秒超时),但对端设备处理能力不足,可能来不及响应,导致LACP超时。表现是成员口每隔几秒就切换一次。解决方法是改回慢速报文(30秒超时),或者检查对端设备的CPU利用率。三是STP和LACP的交互问题。在某些配置下,STP可能会把Eth-Trunk的成员口阻塞,导致LACP报文无法通过。这种情况需要检查STP配置,确保Eth-Trunk接口的STP状态是Forwarding。4.3 跨厂商设备对接的注意事项虽然本文主要讲华为交换机,但实际项目中经常遇到华为交换机和别的厂商设备对接的情况。跨厂商LACP对接有几个坑:第一,LACP报文的发送周期可能不同。华为默认30秒,有些厂商默认1秒。如果两端周期不一致,协商可能成功但状态不稳定。建议两端都配成相同的周期。第二,负载分担模式的支持范围不同。华为支持的某些负载分担模式,其他厂商可能不支持。对接时建议用最通用的src-dst-mac模式。第三,LACP的系统优先级取值范围可能不同。华为是0到65535,有些厂商是1到65535。如果一端配了0,另一端可能不识别。建议用默认值或中间值。第四,M-LAG等高级特性不互通。华为的M-LAG和其他厂商的类似技术(如某厂商的vPC)不能直接对接,需要走标准LACP。这个在规划阶段就要确认清楚。4.4 日常维护与监控建议LACP链路配好之后不是就没事了,日常维护要做几件事:定期检查成员口状态。用display eth-trunk 1 verbose查看每个成员口的详细状态,包括LACP协商状态、活跃状态、收发包统计。如果发现某个口长期没有流量,可能是负载分担问题,也可能是这个口有问题。监控LACP报文收发计数。用display lacp statistics eth-trunk 1查看LACPDU的收发计数。如果发送计数正常但接收计数为0,说明对端没有回LACPDU,协商有问题。配置告警。华为交换机支持LACP状态变化的告警,可以在网管系统上配置Trap接收。这样一旦成员口状态变化,网管能第一时间知道,不用等用户报障。变更前先备份配置。LACP相关的配置变更(比如调整优先级、修改负载分担模式)可能会短暂中断业务,建议在业务低谷期操作,并且提前备份配置文件。我个人在实际操作中的体会是,LACP本身的技术原理并不复杂,但实际项目中的问题往往出在细节上——物理链路质量、两端配置一致性、负载分担模式匹配度,这些才是决定聚合链路是否稳定的关键。配置命令敲下去只是开始,后续的监控和调优才是真正体现功力的地方。还有一个小技巧:如果条件允许,在正式割接前先用测试仪或者两台测试交换机做一遍LACP协商测试,确认配置无误后再上现网,能避免很多不必要的麻烦。