ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

华为二层LACP链路聚合配置详解:原理、命令与故障排查

华为二层LACP链路聚合配置详解:原理、命令与故障排查 做园区网接入或者数据中心布线链路聚合是绕不开的基础操作。我经常被问到华为设备上LACP链路聚合到底怎么配尤其是两台交换机之间做二层互联或者交换机接服务器双网卡的时候。很多朋友一看eth-trunk命令会敲但遇到协商不成功、流量不均、故障切换不恢复就抓瞎。这篇文章就把华为设备上二层LACP聚合的配置思路、命令细节、验证方法和常见坑一次性讲清楚适合刚接触华为交换机的网络工程师也适合用eNSP做实验或在准备HCIE认证的朋友参考。1. 为什么要用二层LACP聚合先把原理说清楚1.1 链路聚合解决什么问题链路聚合的核心是把多条物理链路捆绑成一个逻辑链路对外看起来是一个接口。这种技术最常见的三个价值是带宽扩展、链路冗余、负载分担。带宽扩展很好理解两条千兆链路聚合成一条逻辑口理论上转发能力接近2Gbps链路冗余是指其中一条物理链路断开时流量自动切到其他成员链路业务不中断负载分担是指流量会根据哈希算法分布在多条成员链路上避免一条链路打满而另一条闲着。在网络设计中聚合口还能简化STP拓扑因为多条物理口被当成一个逻辑口参与生成树计算不会因为两条链路互连而产生环路。1.2 手工模式与LACP模式的区别华为交换机Eth-Trunk支持两种主要模式手工负载分担模式和LACP模式。手工模式就是把成员接口直接加入Eth-Trunk两端设备都配置好链路就能聚合不管对端是不是华为设备只要对端也做了类似手工聚合。缺点是设备不会主动检测对端是否真的支持聚合如果对端物理口没加入聚合组或者配置错误本地可能依然显示链路是Up的但业务不通。LACP模式则通过LACP协议Link Aggregation Control ProtocolIEEE 802.3ad与对端自动协商。设备之间交换LACPDU报文协商出哪些链路可以作为活动成员哪些链路作为备份成员甚至可以在多台设备之间形成M:N备份关系。相比手工模式LACP模式更智能能自动感知对端配置是否匹配配置错了通常能从协商状态里看出来。华为设备上LACP模式对应的命令是mode lacp-static很多老工程师习惯叫“静态LACP”。注意这里的“静态”不是指链路固定而是指Eth-Trunk接口配置是静态的LACP协议本身是动态协商的。在华为CE系列交换机上还有LACP动态模式但绝大多数S系列二层/三层交换机用的是lacp-static所以我的经验是以S系列为主。1.3 二层聚合和三层聚合的场景划分链路聚合本身不分二三层但Eth-Trunk接口可以工作在二层也可以工作在三层。二层聚合就是Eth-Trunk接口作为二层交换口使用可以配置Access、Trunk或Hybrid属性核心用途是交换机之间互联、交换机接服务器、或接入层到汇聚层的多条链路捆绑。比如两台交换机需要透传多个VLAN用两条或多条物理链路做二层聚合比单条链路更可靠同时避免生成树阻塞链路。三层聚合则是Eth-Trunk接口作为路由口使用直接配置IP地址通常用于三层互联、VRF环境或数据中心东西向流量。判断条件很简单如果聚合口上要配IP就是三层聚合如果聚合口上要放VLAN、配trunk就是二层聚合。实际配置中很多人会混淆的一点是成员接口本身是二层口还是三层口。如果成员接口先被undo portswitch切换成了三层口再想加入二层Eth-Trunk就会报错。所以做二层聚合之前要确保成员口是二层口这是一个非常关键的细节。2. 配置前的规划五个参数先想明白2.1 Eth-Trunk编号与成员口选择华为设备上一个Eth-Trunk接口由编号唯一标识例如Eth-Trunk 1、Eth-Trunk 10。编号范围不同型号不一样S5720系列一般支持0到511框式设备范围更大。两端设备的Eth-Trunk编号不需要完全一致因为LACP协商不依赖这个编号它只看系统优先级、系统MAC、端口优先级、端口号、操作Key这些信息。但强烈建议统一编号比如两端都用Eth-Trunk 10这样后期维护看配置时不用猜。成员口选择有几个硬性要求同一聚合组内的成员口必须属于同一类型都是千兆口或都是万兆口速率和双工模式尽量一致。华为多数设备允许不同速率成员口加入聚合但在LACP模式下速率不一致会导致低速率链路被降级为备份或者无法加入活动链路反而容易踩坑。所以规划阶段就把速率统一不要指望用不同速率的口做负载均衡。2.2 对端是什么设备交换机、服务器还是堆叠二层LACP聚合最常见的是交换机到交换机对端可以是华为、思科、H3C等任何支持LACP的设备配置思路一样。这里要注意LACP模式两端的角色可以是Active/Passive或Active/Active华为S系列mode lacp-static相当于主动协商对端如果是思科可以配置channel-group 1 mode active或mode passive只要一端主动就能协商起来。交换机对接服务器时服务器网卡必须启用LACP模式Windows下叫TeamingLinux下叫bond/team的802.3ad模式。此时交换机端通常也是mode lacp-static。如果服务器网卡用的是静态聚合比如Linuxbonding mode1做主备或mode2做负载均衡但不跑LACP那交换机端就不能用LACP模式要改成手工负载分担模式mode manual load-balance否则协商永远起不来。对接堆叠设备时聚合口如果涉及跨框成员口需要注意堆叠系统内部处理是否有特殊约束。我的建议是凡是涉及跨设备/跨框聚合先看产品文档中关于Eth-Trunk的跨框支持说明再决定成员口的分布。2.3 二层属性设计Access还是Trunk二层Eth-Trunk的VLAN属性只需要在Eth-Trunk逻辑接口上配置成员口不需要也不能单独配置VLAN。原因很简单成员口加入Eth-Trunk后二层转发行为由逻辑口统一控制。如果在成员口上单独配了VLAN或port link-type命令可能被拒绝或者在部分型号上会有警告业务流量会变得不可预测。接口类型的选择要看需求。交换机互联和服务器多VLAN接入建议用Trunk因为可以放通多个VLAN灵活度最高如果聚合口只承载一个VLAN且对端不需要带Tag也可以配Access但我不推荐在这种场景下用Access因为后续扩VLAN又得改配置不如一开始就规划好Trunk口放通所有需要的VLAN。Hybrid口当然也能做聚合但Hybrid的VLAN收发规则比较绕多人维护时容易出问题。为了避免排查困难我个人的经验是二层聚合接口要么用Trunk要么用Access少用Hybrid。2.4 LACP优先级与活动链路上限LACP协商过程中两台设备会比较系统优先级和端口优先级数值越小优先级越高。这个机制决定了哪一端有权决定哪些链路成为活动链路哪些链路进入备份状态。系统LACP优先级在系统视图下配置命令是lacp priority默认32768接口LACP优先级在接口视图下配置命令也是lacp priority默认同样是32768。当两端都使用默认优先级时会比较系统MAC地址MAC小的优先级高。为了让一端稳定掌握协商主导权可以在核心侧或汇聚侧把系统优先级调低比如设为100。活动链路上限对应命令max active-linknumber默认情况下Eth-Trunk中所有成员链路都是活动链路配置这个参数后只有优先级最高的若干条链路会作为活动链路参与转发其余成员链路作为备份。配合least active-linknumber可以设置最小活动链路数当活动链路数低于该值时Eth-Trunk会Down用来触发上层业务切换。2.5 负载分担策略选择链路聚合的负载分担不是把每个包轮流往链路上发而是通过哈希算法选择成员链路。哈希因子可以是源MAC、目的MAC、源IP、目的IP、源目IP、源目MAC等。如果聚合口主要承载二层流量可以用load-balance src-mac或dst-mac如果承载三层流量建议用src-dst-ip这样不同IP会话能被更均匀地分配到不同成员链路上。有一种错误观念是配置了链路聚合就一定能打满总带宽。实际上如果只有一条大象流比如单个大文件传输哈希因子固定的话所有数据包很可能都命中同一条成员链路其他链路闲着。所以规划时一定要结合业务流量模型选择负载分担方式。3. 华为LACP二层聚合配置实操从零开始敲命令3.1 创建Eth-Trunk并切到LACP模式登录设备后进入系统视图创建Eth-Trunk接口system-view interface Eth-Trunk 10创建完之后立刻检查这个接口是三层口还是二层口。华为S系列交换机通常默认支持portswitch但CE系列或部分框式设备默认接口是三层口如果当前Eth-Trunk默认是三层口需要先执行portswitch然后再配置模式mode lacp-static这里要特别说一句mode lacp-static必须在Eth-Trunk接口视图下配置不是在成员口下配。如果你在物理接口下敲mode lacp-static设备会报错。另外如果你之前用的是手工模式现在要改成LACP模式直接改模式会中断业务因为Eth-Trunk需要重新协商所有成员链路会短暂Down。生产环境操作前一定要评估中断窗口。3.2 配置二层属性与VLAN假设这个Eth-Trunk用于交换机互联透传VLAN 10和20配置如下port link-type trunk port trunk allow-pass vlan 10 20如果对端Trunk口PVID需要调整比如VLAN 10作为默认VLAN可以执行port trunk pvid vlan 10但两端PVID要一致否则VLAN 10的未标记帧会在对端被重新打Tag产生转发异常。如果你对接的是服务器网卡服务器网卡通常发出的是带Tag的流量那交换机口依然是Trunk放通对应VLAN如果服务器网卡发的是untagged流量则交换机口要配Access或Trunk PVID模式。这一点很多人忽略导致聚合协商成功但业务不通。3.3 把成员口加入聚合组有两种方法把物理口加入Eth-Trunk。第一种在Eth-Trunk接口视图下批量添加trunkport GigabitEthernet 0/0/1 to 0/0/2第二种在物理接口视图下分别添加interface GigabitEthernet 0/0/1 eth-trunk 10 quit interface GigabitEthernet 0/0/2 eth-trunk 10 quit两种方式效果一样。我的习惯是用物理接口下eth-trunk命令因为批量命令如果中间有一个口状态不对整个命令会失败不容易定位。另外在加入Eth-Trunk之前物理接口上如果原本有配置比如单独配了VLAN、stp、speed等建议先清掉或者确保这些配置不影响Eth-Trunk。某些型号在接口配置了与Eth-Trunk冲突的VLAN时eth-trunk命令会直接拒绝。3.4 调整LACP优先级与超时参数可选为了让核心交换机掌握协商主动权把核心侧系统优先级改低lacp priority 100这里要注意命令是在系统视图下执行的不是Eth-Trunk视图。配置完后可以查看本端系统LACP优先级。然后在Eth-Trunk接口视图下配置活动链路上限和最小活动链路数interface Eth-Trunk 10 max active-linknumber 2 least active-linknumber 1如果希望故障链路恢复后能自动抢占回高优先级链路可以开启LACP抢占lacp preempt enable默认情况下LACP抢占是开启还是关闭各版本略有差异。我在现网里遇到过故障恢复后链路没有切回最优成员口的情况排查下来就是没开抢占。所以如果需要主备链路具备自动回切能力务必显式配置这个命令。LACP超时时间默认是慢速超时对端长期收不到报文也不会快速切换如果业务要求快速感知链路故障可以在Eth-Trunk接口下配置lacp timeout fast。不过两端超时时间要匹配否则可能出现一端频繁重置聚合组的问题。3.5 配置负载分担在Eth-Trunk接口视图下配置load-balance src-dst-ip如果你的业务主要是二层MAC寻址也可以换成load-balance src-dst-mac注意负载分担模式的配置在不同产品上位置不同有些交换机要求在系统视图或Eth-Trunk接口视图下都能配置但生效粒度不同。配置完成后可以通过display load-balance eth-trunk 10查看当前生效的负载分担方式。3.6 完整配置示例下面是一个典型的两台S5720交换机二层LACP聚合配置互联使用两条千兆口透传VLAN 10和20。核心侧sysname Core-Switch lacp priority 100 interface Eth-Trunk 10 mode lacp-static port link-type trunk port trunk allow-pass vlan 10 20 max active-linknumber 2 least active-linknumber 1 lacp preempt enable load-balance src-dst-ip quit interface GigabitEthernet 0/0/1 eth-trunk 10 quit interface GigabitEthernet 0/0/2 eth-trunk 10 quit汇聚或接入侧sysname Access-Switch interface Eth-Trunk 10 mode lacp-static port link-type trunk port trunk allow-pass vlan 10 20 load-balance src-dst-ip quit interface GigabitEthernet 0/0/1 eth-trunk 10 quit interface GigabitEthernet 0/0/2 eth-trunk 10 quit注意两端系统LACP优先级可以不同但并不是必须一端设低如果不设设备也可以通过比较系统MAC决定谁主导但主导结果往往不符合预期所以建议显式规划。3.7 对接服务器和堆叠的配置要点服务器双网卡做LACP聚合时交换机端配置基本同上但要看服务器网卡驱动要求。以Linux bonding为例如果使用mode4802.3ad交换机端必须配LACP模式如果使用mode2xor交换机端要用手工负载分担模式。有些服务器网卡在LACP协商成功后还会要求交换机端开启LLDP否则网卡驱动认为链路异常。这一点我在戴尔和惠普服务器上都遇到过所以对接服务器前最好确认驱动文档。对接堆叠时如果成员口分布在不同堆叠成员设备上Eth-Trunk的跨框转发能力依赖于堆叠链路带宽。规划时不要把两个成员口放在同一块板卡上否则堆叠链路会成为瓶颈。4. 验证与日常维护display命令怎么读4.1 查看Eth-Trunk协商状态配置完成后用display eth-trunk 10查看聚合组整体状态display eth-trunk 10正常输出会包含工作模式、负载分担方式、成员口列表以及每个成员口的状态。关键看Status字段常见的是Selected和Unselected。Selected表示该成员链路已成为活动链路可以转发流量Unselected表示该链路是备份或者协商未成功。如果看到所有成员口都是Unselected那基本可以断定LACP协商出了问题。优先检查两端模式是否都是LACP模式、物理口是否都加入了正确的Eth-Trunk、接口up/down状态是否正常。4.2 查看LACP统计和协议细节需要更细的LACP信息时用display eth-trunk 10 verbose可以看到系统优先级、端口优先级、操作Key、Actor和Partner信息。对比两端报文里的Partner信息能快速定位是系统优先级不一致还是端口属性不匹配。查看LACP报文收发统计display lacp statistics eth-trunk 10如果LACP发送报文一直增加但接收报文始终为0说明对端没有协商响应常见原因是物理链路不通、对端模式不对、或报文被中间设备过滤。如果接收报文不断增加但状态不变为Selected可能是两端允许的VLAN或接口属性不匹配。4.3 测试故障切换和负载效果业务割接前一定要做故障演练。最直接的办法是手动shutdown一条成员链路interface GigabitEthernet 0/0/1 shutdown正常情况下另一条成员链路会迅速承接全部流量display eth-trunk 10中该口状态变为Unselected或Down其他活动成员仍为Selected逻辑口持续转发。恢复后如果你配置了抢占原成员口会重新变为Selected。负载效果可以用display interface Eth-Trunk 10查看逻辑口的流量速率再结合各物理口的display interface GigabitEthernet 0/0/1查看单口速率。如果有一个物理口速率接近打满其他口速率很低说明负载分担方式不适合当前流量模型需要调整哈希因子。5. 常见故障与排查思路实录5.1 协商失败成员口一直Unselected这类问题十有八九出在模式不匹配上。我曾帮朋友排查过一起交换机间二层聚合不通的案例两端都配置了mode lacp-static成员口也都加入了但display查看时所有口都是Unselected。最后发现是其中一端Eth-Trunk被设成了三层口先执行了undo portswitch把端口切换成了三层模式。问题解决的方法就是在Eth-Trunk接口下重新执行portswitch把它变回二层口然后再配置Trunk属性。如果两端都是二层口仍然协商失败继续检查物理层状态包括光模块是否兼容、光衰是否过大、双工模式是否一致。LACP报文是低速协议链路只要有一点点不稳定报文反复丢失协商就会一直震荡。5.2 协商成功但业务不通Eth-Trunk显示Selected成员口都是活动状态但业务VLAN不通问题通常不在聚合本身而在二层属性配置。用Trunk口时必须检查两端放通的VLAN列表是否一致。比较隐蔽的是PVID不匹配比如一端Trunk PVID是VLAN 10另一端PVID是VLAN 1那么不带Tag的帧会被错误归类表现为通一个VLAN断一个VLAN。还有一种情况是确实做了二层聚合但VLAN配置却配在了成员口上不是Eth-Trunk逻辑口上。比如在GE0/0/1下执行port link-type trunk、port trunk allow-pass vlan 10看起来好像放通了实际转发时Eth-Trunk逻辑口没有放通该VLAN流量还是不通。记住一个原则二层Eth-Trunk的所有二层属性都只配在Eth-Trunk口上成员口只负责物理承载。5.3 流量不均或单链路打满流量不均不是故障而是哈希效果不理想。比如两台交换机之间跑了一堆HTTP流量但源目IP都比较集中src-dst-ip哈希自然不均。这时候可以把负载分担方式调成src-dst-mac有时反而更均衡。如果是三条链路聚合但业务流量主要是单条的FTP大流那无论如何都只能在一条链路上跑因为LACP按流哈希不按包轮询。这一点要向业务方解释清楚链路聚合不会把单个TCP连接的包拆到多条链路上那是不同粒度的技术。5.4 替换成员口后聚合不恢复现网常见操作是某块板卡故障换了一块新板卡把物理口接回但Eth-Trunk一直不恢复。检查下来发现新板卡的口被默认配置成了Access口或者被单独放到了别的VLAN加入Eth-Trunk时配置被拒绝。解决方法是先把新口的默认配置清掉再执行eth-trunk 10。另外如果更换的接口速率、光模块类型和原接口不一致LACP协商也不会通过需要确保接口参数保持一致。5.5 问题排查速查表现象排查点常见处理所有成员口Unselected两端LACP模式、物理口UP状态、Eth-Trunk接口二三层属性统一模式确认物理链路正常清除三层配置协商成功但VLAN不通放通VLAN列表、PVID、Eth-Trunk逻辑口二层属性对比两端配置检查PVID把VLAN配置移到Eth-Trunk口流量集中一条链路负载分担方式、业务流分布调整load-balance因子确认是否单条大流主备切换后不恢复LACP抢占、链路恢复状态、优先级开启lacp preempt enable检查接口UP状态频繁UP/Down震荡光模块、双工模式、LACP超时时间检查光衰、统一双工模式配置匹配的超时时间对接服务器不通服务器网卡bond模式、交换机模式、LLDP使用LACP对应802.3ad必要时开LLDP6. 最后再分享几个配置习惯关于二层LACP聚合我在现网踩过不少坑最后说几个自己的配置习惯。第一所有聚合口在割接前一定先执行display eth-trunk 10确认两端活动成员数量一致再拔线或者接线。这个动作看着简单但能避免绝大多数人为误操作。第二配置LACP模式前先看设备默认工作模式。不同型号、不同版本对Eth-Trunk的默认模式可能不同有的默认手工负载分担有的默认是三层口。敲命令前用display eth-trunk 10看一次比事后排障省时间。第三二层聚合口的VLAN规划一定要文档化。什么VLAN走哪条聚合链路PVID是多少两端放通列表是什么这些信息如果不记半年后你自己都说不清楚为什么当初这么配。等到机房线路调整时一张清晰的聚合口规划表能救命。第四如果业务允许把系统LACP优先级和接口LACP优先级一起规划。核心侧优先级调低接入侧保持默认这样出现链路竞争时核心侧能稳定主导活动链路选择不会因为硬件MAC不同导致协商结果飘忽不定。第五故障演练不能省。每次交付前把成员口逐条shutdown再恢复确认业务切换时间在可接受范围内。链路聚合的价值不是配置完那一刻而是故障发生时的那一秒。能做到主动断链不丢业务这套配置才算真正合格。
返回列表