ARTICLE DETAIL

资讯详情

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

华三交换机静态链路聚合从原理到排错:聚合口、选中口与负载均衡全解析

华三交换机静态链路聚合从原理到排错:聚合口、选中口与负载均衡全解析 最近帮一个朋友处理他们机上两台华三交换机的链路聚合配置本身不复杂倒是排查一条成员链路始终无法选中的过程花了不少时间。正好把静态链路聚合这件事从头到尾捋一遍从原理到配置、从验证到排错给刚接触华三交换机或者对聚合原理还比较模糊的朋友做个完整参考。以我自己的经验很多人一说链路聚合就想到LACP动态聚合对静态链路聚合反而有些轻视。但在实际的园区网、接入层、服务器上联这些场景里静态聚合的使用频率相当高尤其对端是老设备、傻瓜设备或者干脆就是防火墙、服务器网卡做bonding静态聚合往往是更省心的选择。这篇文章全部基于华三H3C交换机的实际操作核心配置命令在Comware V7、V5常见版本上都能跑个别细节版本不同会有差异我会在相应位置提醒。1. 先想明白静态链路聚合到底在解决什么问题1.1 两个真实场景带宽不够用与单点故障先说带宽。假设一台服务器双千兆网卡上联接入交换机单根网线的带宽上限就是1Gbps业务流量一上来峰值飙到八九百兆链路就开始排队、丢包。这时候把服务器两块网卡做bonding交换机侧把两个口做成一个逻辑口两条物理链路同时工作理论带宽翻倍到2Gbps这是最典型的应用场景。再说冗余。有一种更常见的状况两台交换机之间只有一根光纤连接这根光纤一断底下所有设备全部脱网。尤其是核心到汇聚、汇聚到接入这种关键链路单点故障是运维事故的主要来源。做链路聚合之后两根甚至四根物理链路同时工作任何一根断了流量自动切换到其余链路上业务基本无感。我把这两种需求合并到一个场景里说公司有三层架构汇聚层到核心层之间跑着办公网、监控网、服务器网好几个VLAN原来一根千兆上联高峰期明显卡顿而且这根链路一断全网瘫痪。解决方案就是在汇聚和核心之间配一个静态链路聚合组两根千兆上联既解决带宽又解决冗余。这就是我朋友那个环境的情况也是绝大部分中小型网络的标准解法。1.2 静态聚合和动态LACP怎么选华三交换机上链路聚合分为静态聚合和动态聚合两种模式。动态聚合走LACP协议成员端口之间通过交换LACPDU报文协商对端设备必须同样支持LACP而且模式要匹配静态聚合不跑协议只要两端都做了相同配置直接把多条物理链路捆绑成一个逻辑链路使用。那什么时候必须用静态我总结几个典型场景对端是老旧设备或非网管设备不支持LACP但有多口链路可以捆绑对端是服务器、存储设备网卡bonding模式配置为static如mode1主备或mode2负载均衡对端不跑LACP对端是防火墙、上网行为管理这类安全设备有些设备出于简化考虑只支持静态Trunk纯二层环境不想引入协议交互希望行为简单可控。静态聚合的劣势也很明显它不感知对端状态如果对端某条链路物理上没有down但逻辑上有故障比如对端光模块老化、对端口配置异常交换机这边无法自动感知并摘除这条链路可能导致丢包。所以生产环境里如果两端设备都支持我更倾向于用动态聚合但一旦涉及跨厂商、老设备、服务器boding静态往往是唯一选择。这里有个容易被忽略的点华三交换机的Bridge-Aggregation接口默认是动态聚合模式一定要手动敲成static否则你物理口加进去之后会发现状态跟预期不一致或者对端动不动就协商不上。2. 华三静态聚合的运行机制必须先搞懂选中口和参考端口2.1 Bridge-Aggregation的逻辑存在方式华三的二层链路聚合逻辑口叫Bridge-Aggregation三层路由聚合口叫Route-Aggregation。我们配置交换机互联、服务器上联这类场景用的绝大多数是Bridge-Aggregation。可以这样理解Bridge-Aggregation是一个虚拟出来的逻辑接口它对上层VLAN、STP、路由来说就是一个普通接口和物理口一样支持dot1q、trunk、access、三层IP等配置。你在聚合口上配置完VLAN、trunk这些业务参数后物理成员口只要加入聚合组业务配置就自动生效物理口上不需要再单独配置。这个设计给运维带来了极大方便配置业务的时候只需要管一个聚合口而不是一堆物理口。但反过来说它也让不少新手踩坑——在物理口上配置了trunk、VLAN再加入聚合组结果发现这些配置不生效或者被清掉因为业务配置应该在聚合口上做成员口的配置以聚合口为准。2.2 成员口为什么会被选不中这是静态聚合最核心的概念。一个聚合组里物理成员口不是简单加入就完事华三会根据一系列规则在成员口之间选举参考端口Reference Port其他成员口再和参考端口做一致性比较满足条件的成为选中口Selected不满足的成为非选中口Unselected。Unselected端口不会转发业务流量。选参考端口的规则大致是优先选择端口优先级高的数值小的、优先选择up状态的、优先选择端口号小的。静态聚合虽然没有LACP报文协商但这个参考端口机制依然存在只是它不会去和对端协商完全基于本端配置和状态做判断。成员口要成为Selected需要满足这些关键条件端口是up状态速率和双工方式一致端口的VLAN配置access / trunk / hybrid以及允许的VLAN与参考端口一致端口加入的聚合组号正确端口没有被其他特性占用比如已经做了端口镜像的源口、已经单独配了业务端口没有配置静态MAC、端口安全等和聚合冲突的特性。实际操作中最常见导致Unselected的原因就是速率/双工不一致以及VLAN配置不一致。尤其是光纤场景一根光纤是千兆另一根因为光模块问题降速成百兆这两根线放到同一个聚合组里降速的那个端口几乎必然Unselected因为速率和参考端口不一致。2.3 流量怎么在多条链路间哈希链路聚合的负载均衡不是简单地第一条流走第一根线第二条流走第二根线而是基于哈希算法。华三交换机会提取报文的某些字段比如源MAC、目的MAC、源IP、目的IP、源端口、目的端口等计算一个哈希值再根据哈希值把流量映射到某条成员链路上。默认情况下华三交换机对不同报文的哈希维度有默认规则二层报文按源MAC和目的MAC哈希三层报文按源IP和目的IP哈希四层报文按端口等哈希。如果实际场景中负载不均衡可以手动修改哈希模式比如[H3C] link-aggregation load-sharing mode source-ip destination-ip把哈希维度改为只按源IP和目的IP计算。这里有个容易让人困惑的地方哈希是按流来分的一条TCP连接的所有报文哈希结果一样会固定走同一条物理链路不会一条连接同时在两条链路上。所以如果业务只有一条大流量连接比如一个FTP大文件下载带宽最多还是只有单链路那么大聚合带宽的优势主要体现在多用户、多并发场景。这一点必须跟业务方解释清楚否则对方会拿单线程测速软件测出来只有1Gbps然后说聚合没生效。2.4 基本命令结构梳理华三静态聚合的配置步骤可以归纳为四步创建聚合接口并设置模式为static把需要聚合的物理口加入聚合组在聚合口上配置业务trunk、VLAN等检查状态并保存配置。对应的核心命令如下interface Bridge-Aggregation 1 link-aggregation mode static quit interface GigabitEthernet1/0/1 port link-aggregation group 1 quit interface GigabitEthernet1/0/2 port link-aggregation group 1 quit interface Bridge-Aggregation 1 port link-type trunk port trunk permit vlan 10 20 30这套命令逻辑清晰但实际配置中细节非常多下面完整走一遍。3. 配置实操从物理口到聚合口的完整命令流程3.1 配置前的规划与准备工作动手之前先把信息理清楚避免配置到一半发现聚合组号冲突或者VLAN规划对不上。需要确认的信息包括使用哪几个物理口做聚合确认这些口没有被业务占用聚合组号华三交换机上聚合组号就是索引号一般从1开始编号如果有多个聚合组区分业务用途即可比如1号给上联核心、2号给服务器VLAN规划哪些VLAN需要放行对端设备类型如果对端也是华三两边配置方式一致如果对端是华为、思科或其他厂商要注意兼容性。我建议在配置前先把聚合口和对端互联口的互联地址、放通VLAN写成一张小表尤其是VLAN列表两边必须完全一致。否则链路聚合起来却不通VLAN排查起来很痛苦。3.2 创建聚合口并设置为静态模式进入系统视图创建Bridge-Aggregation 1然后将模式修改为static。system-view interface Bridge-Aggregation 1 link-aggregation mode static不同版本有个小差异部分Comware V5版本创建后默认为静态模式而Comware V7默认是动态模式。我建议不管什么版本都显式执行link-aggregation mode static这条命令让配置明确落在配置文件里避免默认模式不同带来的坑。执行完之后可以用display link-aggregation summary看一眼聚合组的当前状态这时成员口还没加进去聚合组是空的这属于正常状态。3.3 把物理端口加入聚合组接下来把两个物理口加入聚合组。华三的命令是在物理口视图下执行port link-aggregation group。interface GigabitEthernet1/0/1 port link-aggregation group 1 quit interface GigabitEthernet1/0/2 port link-aggregation group 1 quit这里有几条很重要的注意事项。第一如果物理口之前配置过access、trunk、hybrid、port link-type这类命令加入聚合组时部分版本会提示配置与聚合口冲突或者这些配置会被清除以聚合口配置为准。所以加入聚合组之前不需要在物理口上做任何业务配置保持默认即可。第二物理口的shutdown状态会影响端口能否成为Selected。如果物理口是shutdown的尽管它加入了聚合组状态还是Unselected业务流量不会走这条链路。很多人在配置完发现只有一根线在跑检查了半天最后发现另一根口是shutdown状态或者干脆光纤没插。第三加入聚合组的命令在不同版本上有差异Comware V5是port link-aggregation group 1Comware V7同样支持但如果是华为交换机命令是eth-trunk 1两者命令不同但思路一致。同时搞华三和华为设备的朋友最容易在这个命令上打磕绊。3.4 在聚合口上配置业务trunk、VLAN一个都不能少回到聚合口视图配置业务参数。以下以典型的汇聚到核心互联为例假设放通VLAN 10、20、30。interface Bridge-Aggregation 1 port link-type trunk port trunk permit vlan 10 20 30如果你的环境里需要放通所有VLAN可以简写成port trunk permit vlan all但生产环境不建议这样干放通所有VLAN可能把不必要的广播扩散到整个二层域带来安全和性能隐患。宁可多敲几行把该放通的VLAN写清楚。如果聚合口用于接服务器且服务器跑的是access接口那就把聚合口配置成access并指定PVIDinterface Bridge-Aggregation 1 port link-type access port access vlan 10注意这里不能再回到物理口上去敲port access vlan或port trunk permit相关的命令物理口上这些配置不生效即使生效了也会被聚合口覆盖。对于三层互联场景如果聚合口要配IP地址需要使用Route-Aggregation或者把Bridge-Aggregation配置为三层口。不过绝大多数交换机静态聚合用于二层场景这里不展开三层聚合的细节。3.5 保存配置与一致性核对配置完成后一定要保存配置。save force华三Comware V7的保存命令是save forceV5也是save。不保存的话设备一重启聚合配置全部丢失最郁闷的是等你赶到机房发现配置丢了还不知道为什么。保存之后建议把running-config和startup-config对比一下也可以直接display current-configuration interface Bridge-Aggregation 1确认聚合口配置完整。然后重点核对下面几个点两端设备的聚合模式一致都是static或者都对端允许静态聚合两端放通的VLAN一致两端成员口数量一致比如对端做了4口聚合本端只做了2口流量和冗余效果都达不到预期两端互联物理口的光模块类型、速率一致。4. 验证和状态解读如何确认聚合真正生效4.1 display link-aggregation summary最直接的全局状态配置完成后第一个要执行的命令是display link-aggregation summary。[H3C] display link-aggregation summary Aggregation Interface Type: BAGG - Bridge-Aggregation, RAGG - Route-Aggregation Aggregation Mode: S - Static, D - Dynamic Loadsharing Type: Shar - Loadsharing, NonS - Non-Loadsharing Actor System ID: 0x8000, 000f-e200-0300 AGG AGG Partner Selected Unselected Share Interface Mode Ports Number Ports Number Ports Number Type -------------------------------------------------------------------------------- BAGG1 S 2 2 0 Shar关注几个关键字段AGG Interface是BAGG1说明是二层聚合口AGG Mode是S说明是静态模式如果是D则是动态LACP模式Selected Ports Number是2说明两个成员口都成功选中Unselected Ports Number是0说明没有端口被晾在一边Share Type是Shar说明负载均衡类型两个成员口都处于负载分担状态。如果Unselected Ports Number大于0说明有成员口没有正常参与转发需要进一步用display link-aggregation verbose定位原因。4.2 display link-aggregation verbose查看成员口细节和参考端口verbose输出提供的信息更细强烈建议配置完成后执行一次因为很多潜在问题在summary里看不出来。[H3C] display link-aggregation verbose Loadsharing Type: Shar -- Loadsharing, NonS -- Non-Loadsharing Port Status: S -- Selected, U -- Unselected Flags: A -- LACP_Timeout, B -- LACP_Port_Number, C -- Aggregation_ID, D -- Oper_Key, E -- Partner_System_ID, F -- Partner_Port_Number, G -- Partner_Oper_Key, H -- MAC_Address Aggregate Interface: Bridge-Aggregation1 Creation Mode: Static Loadsharing Type: Shar System ID: 0x8000, 000f-e200-0300 Local: Port Status Priority Index Oper-Key Flag GE1/0/1 S 32768 1 1 {ACDEFG} GE1/0/2 S 32768 2 1 {ACDEFG} Remote: ...Local部分列出了每个成员口的状态Status是S代表Selected可以转发流量U代表Unselected不可转发Oper-Key是聚合组Key同一个聚合组的成员口Key值相同如果不同说明加入的聚合组不一致Priority是端口聚合优先级默认32768。看到两个口都是S说明聚合组工作正常。如果某个口是U就需要看后面的章节按照排查流程去找原因。4.3 通过流量统计验证负载均衡配置正确不代表负载均衡效果符合预期第二层验证是基于流量统计看的。华三交换机支持在接口上查看报文统计分别对两个成员口执行display interface GigabitEthernet1/0/1和display interface GigabitEthernet1/0/2看收发字节数。更直观的方法是看聚合口本身的统计以及各成员口的Input/Output速率。如果两个成员口同时有流量且数量接近说明哈希负载均衡在工作如果所有流量都压在一个口上另一个口几乎无流量说明哈希不均或者业务流太单一。这里给新手一个提醒用打流软件测试聚合带宽一定要开多线程多连接单线程永远只能跑满一条物理链路。这是哈希机制的天然限制不是配置问题。我第一次给客户验证聚合带宽时用单线程iperf测出950Mbps客户直接说聚合没生效我解释了老半天哈希原理然后用4线程去打流直接跑到1.9Gbps问题才算解释清楚。负载不均衡时的调整思路是修改全局哈希模式例如[H3C] link-aggregation load-sharing mode destination-ip source-ip改成更细粒度的模式比如加入端口维度[H3C] link-aggregation load-sharing mode destination-ip source-ip destination-port source-port具体命令在不同版本上有所差异配置前建议先执行link-aggregation load-sharing mode ?看下当前版本支持的选项。4.4 对端设备的状态检查链路聚合是两端配合的事情只看本端状态是不够的。如果对端是华三或华为设备用对应对端命令查看聚合状态如果对端是服务器Linux下用cat /proc/net/bonding/bond0查看bonding状态Windows下在网络适配器属性里看teaming状态。实际运维中经常出现一种不对称现象本端聚合口一切正常两个成员口都是Selected但对端只配置了一个物理口或者聚合模式不匹配结果就是本端看出去Member口全亮实际业务异常或只能走一条链路。这种问题只盯着本端看永远发现不了必须两端对查。5. 故障排查实录一条链路Unselected的完整排查链路5.1 场景还原两个成员口一个Selected一个Unselected回到文章开头说的那次故障。组网很简单汇聚交换机到核心交换机之间做了静态链路聚合两个千兆口配置完成后display link-aggregation summary看到GE1/0/1是SelectedGE1/0/2是Unselected业务流量全部走GE1/0/1聚合效果完全没有体现出来。这种部分成员口不选中的故障是最常见的聚合故障按下面的顺序排查基本能覆盖90%的原因。5.2 排查第一层物理层状态第一步先看物理层有些问题在物理层就已经注定没戏了。[H3C] display interface GigabitEthernet1/0/2重点看几个字段Current state是否为UP如果是Administratively DOWN说明端口被shutdown了Speed是否为1000Mbps如果成了100Mbps或者10Mbps说明速率协商有问题或者光模块/网线质量不行Duplex mode是否为FULL如果成了半双工必然连聚合的门都进不了Input/Output的错误计数是否有大量CRC错误或碰撞。我那次排查的第一步就发现了关键线索GE1/0/2显示的速率只有100Mbps而GE1/0/1是1000Mbps。速率不一致华三交换机在选举参考端口后速率不同的端口会被直接判为Unselected。为什么千兆口会协商到100M检查发现这跟线缆和光模块有关那根跳线的纤芯衰减严重设备在反复协商后自动降速到一个稳定工作的速率。把跳线换了之后GE1/0/2的速率恢复正常到1000Mbps。5.3 排查第二层聚合状态与配置对比如果物理层速率双工一切正常还是Unselected就进入配置层面的排查。执行display link-aggregation verbose查看Unselected端口的具体情况然后对比Selected和Unselected两个端口的配置差异。常见的配置原因有这些两个物理口VLAN配置不一致。比如一个口是默认access vlan 1另一个口之前被改过access vlan 10加入聚合组后配置存在差异华为和H3C都会因为VLAN配置不一致把端口判为Unselected一个口配置了端口安全、端口镜像、DHCP Snooping绑定等特性与聚合冲突一个口的端口优先级被手工修改过导致参考端口选择偏好异常端口的入方向或出方向速率限制配置不同端口加入了错误的聚合组号。解决方法也很直接从聚合组中移除不一致的物理口将配置恢复默认华三用undo命令逐条清或者直接用default命令恢复再重新加入聚合组。interface GigabitEthernet1/0/2 undo port link-aggregation group 1 default port link-aggregation group 1default命令会把接口配置恢复出厂状态包括VLAN配置、速率双工配置是个很省事的处理方式。但要注意这个命令会清掉该口之前的所有配置生产环境操作前先确认这个口没有别的业务。5.4 排查第三层对端配置与模式一致性本端都正常却仍然Unselected需要怀疑对端。历史上遇到过两种典型情况。第一种对端设备做了聚合但聚合模式不匹配。比如本端是静态聚合对端配的是动态LACP两端协商不上状态就会异常。LACP的语言和静态聚合的语言不同你的1在对端眼里可能是0两边说不通。解决办法是两边改一致要么都用静态要么都用动态。第二种对端物理端口本身有问题。经常出现的是对端某个口的transceiver或光模块松动或者对端端口shutdown了。本端看着光纤插着、端口up但对端根本没起来。这种问题交换机的聚合命令不会告诉你只能用display interface和display transceiver逐口查。5.5 找到根因速率降级引发的参考端口比较失败那次故障最终的根因就是我上面说的第一层问题GE1/0/2这根链路因为光纤老化、衰减过大协商速率降到了100Mbps而参考端口GE1/0/1是1000Mbps两个端口速率不一致GE1/0/2被判定为Unselected。把这个案例总结一下可以归纳出一个通用排查链路照着走就行display link-aggregation summary确认故障范围哪个聚合组、几个Selected、几个Unselecteddisplay interface检查Unselected端口的物理状态up/down、速率、双工、CRC错误display link-aggregation verbose查看端口聚合属性和Key值是否在同一聚合组、Oper-Key是否一致逐项对比参考端口和Unselected端口的配置差异VLAN、端口特性、速率约束等检查对端设备对应端口的物理状态和聚合配置用default恢复端口默认配置后重新加入聚合组观察状态是否恢复。这套流程我后来写成了一张A4纸贴在自己工位上遇到聚合问题先按这个走一遍基本能定位到根因而不是靠直觉东敲一个命令西敲一个命令。6. 施工收尾与长期运维的几个土经验6.1 扩容加口时的正确姿势聚合组配好之后后期可能会遇到带宽不够需要加成员口的情况。很多人直接在聚合组里加物理口加完就完事这其实有个隐患。如果直接在现有的聚合组里加新口新口加入瞬间会参与哈希然后一部分流量会重新分布到这个新口上。在线业务可能会经历一次轻微抖动。对于核心链路这种抖动虽然秒级但依然可能引发监控告警或者业务闪断。更稳妥的做法是提前规划好把新口先加入一个临时的聚合组做测试确认端口物理状态、线缆质量、速率协商都没问题再从临时聚合组移除加入正式聚合组。这个操作对在线业务影响最小。interface GigabitEthernet1/0/3 port link-aggregation group 100 quit interface GigabitEthernet1/0/3 undo port link-aggregation group 100 port link-aggregation group 1 quit6.2 备份配置、巡检脚本与监控项链路聚合配置完记得做配置备份。华三设备可以通过TFTP、FTP、USB等方式把配置导出也可以直接在设备上用display current-configuration截图存档。建议在聚合调整、版本升级、割接前后各备份一次。日常巡检时重点看这四项display link-aggregation summary里的Selected和Unselected数量每个成员口的Input/Output速率和错误包计数物理口光模块的收发光功率特别是收发功率是否在正常阈值内聚合口的Discard计数如果Discard持续增长说明某条成员链路可能不稳定正在发生频繁切换。有条件的话把这几项接入监控平台设置告警阈值。很多聚合故障不是瞬间爆发的光模块功率劣化是一个缓慢过程等它彻底到速率降级或者端口down的时候业务已经受了影响。提前监控至少在劣化阶段就能收到告警。6.3 跨设备聚合时千万不要做的事最后提醒一个容易出大事故的坑不要在两台没有做虚拟化IRF/CSS的独立交换机之间跨设备聚合还自以为是在玩高可用。曾经见过一个案例有人用两台独立的接入交换机把服务器的两根网线分别接到两台设备上配置了同一个聚合组号自认为是做了冗余结果一台交换机重启另一台的聚合状态直接乱掉服务器整个断网。跨设备链路聚合跨设备Eth-Trunk、跨设备BAGG必须基于IRF虚拟化或者专用的M-LAG机制先把两台设备虚拟成一台逻辑设备让成员接口在系统内部看到的是同一个聚合组才能真正实现跨设备冗余。在普通独立设备之间不要试图跨设备聚合老老实实做STP或者VRRP、双上联才是正确方向。6.4 最后再吐槽一个文档里不会写的细节华三模拟器HCL做实验的时候链路聚合的很多配置命令可以敲但如果你用的是模拟器自带的虚拟交换机部分物理行为模拟不出来比如速率协商降级、光模块衰减这类问题在模拟器里怎么折腾都复现不了。所以模拟器上验证配置语法没问题但真实排错经验还得靠真机积累。另外有不少朋友同时接触华三和华为设备两边命令容易串。华三是Bridge-Aggregation、port link-aggregation group华为是Eth-Trunk、eth-trunk。我在配置华三设备时偶尔会顺手敲出eth-trunk然后被命令行报错提醒现在已经养成习惯了敲命令之前先确认当前登录的是哪个品牌的设备。链路聚合本身不是高深技术但它是网络稳定性的基石。很多看起来莫名其妙的网络抖动、丢包、带宽不达标问题追到根上往往就是聚合配置不规范或者某条成员链路质量劣化。把静态聚合的原理和排错链路吃透能省下大量半夜进机房的痛苦时间。
返回列表