ARTICLE DETAIL

资讯详情

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

LACP链路聚合实战:从原理到华为华三与Linux team配置

LACP链路聚合实战:从原理到华为华三与Linux team配置 如果你管过几台服务器和交换机多半遇到过这种场景服务器明明接了两根千兆网线到交换机业务高峰时网卡还是被顶满一根线跑到950Mbps另一根线却几乎闲着。交换机上查看端口两个口各跑各的完全没有协作。这时候你就明白单纯把网线插满没用得让它们“团结”起来——这就是链路聚合。而LACP就是让链路聚合从“手动分配”进化到“自动协商”的那套标准协议。这篇文章只聊实操从LACP是什么、为什么用到华为、华三交换机上的配置再到Linux 8下team动态链路聚合的完整步骤全程按真实项目实施经验来讲。不管你是刚接触网络的运维新人还是准备在eNSP里练手的学生都能照着落地。1. 什么是LACP链路聚合先把概念彻底讲透1.1 链路聚合把多根物理线缆“合并”成一条逻辑链路链路聚合英文叫Link Aggregation核心思想很简单将交换机上的多个物理端口“捆绑”成一个逻辑端口。比如服务器有两个千兆电口分别连接到交换机的两个端口配置成链路聚合后这两个物理口对外表现为一个逻辑口带宽上限从1Gbps变成2Gbps而且任意一根线断了另一根还能继续工作不会直接断网。这个概念在不同厂商里有不同的叫法华为叫Eth-Trunk华三叫Link Aggregation或聚合组思科叫EtherChannelLinux里叫bonding或team。叫法不同底层逻辑一致——把多个物理成员口放进一个逻辑组由组统一收发流量。但这里有一个关键问题链路聚合不是把两根线一插就算完事它需要两个前提条件。第一对端设备必须也把对应的端口加入同一个聚合组否则流量会乱。第二成员端口的参数必须一致包括速率、双工模式、VLAN配置、端口类型等。如果这些不一致聚合就是建不起来的。现实中很多聚合失败就死在这些“看起来不起眼”的参数上。1.2 LACP让交换机之间“自己谈”的协议LACP全称Link Aggregation Control Protocol链路聚合控制协议定义在IEEE 802.3ad标准里后来被802.1AX继承。它的作用是让两台设备之间通过交换LACPDULink Aggregation Control Protocol Data Unit链路聚合控制协议数据单元报文自动协商哪些端口可以加入聚合组哪些端口不行。没有LACP的年代配置链路聚合主要靠手工——管理员在两端分别手动指定哪几个端口属于同一个聚合组。这种方式叫静态聚合优缺点都很明显配置简单、稳定可靠但一旦一端忘记配置或者端口参数不匹配链路状态不会自动纠正排障全靠人肉对照配置。有了LACP之后情况就变了。两端设备周期性地发送LACPDU报文报文里携带本端口的系统优先级、端口优先级、操作Key等信息。对端收到后根据这些信息判断端口是否匹配、是否可以聚合在一起。如果匹配就协商成功端口进入聚合状态如果不匹配就保持独立状态。整个过程不需要人为干预配置好LACP模式后设备自己完成协商。我常跟同事说静态聚合是“包办婚姻”配置好就绑死LACP是“自由恋爱”双方谈得来才在一起。实际项目里只要对端设备支持LACP我几乎一律推荐动态LACP因为它的容错性和可维护性远好于静态聚合。1.3 静态聚合和动态LACP的区别很多新手分不清这两个词这里放一张对照表一眼就能看明白对比项静态聚合手工模式动态LACP协商机制不协商两端手动配置通过LACPDU报文自动协商配置复杂度两端必须完全一致只需配置模式自动匹配故障感知依赖物理链路状态通过LACPDU超时检测更灵敏对端要求任意设备对端必须支持LACP适用场景对端设备不支持LACP主流场景推荐使用补一句华为设备上静态聚合对应的命令是link-aggregation mode manual动态LACP对应的是link-aggregation mode lacp-staticLACP模式里还分主动和被动这个后面细说。2. 为什么非要做链路聚合三个扎扎实实的理由2.1 带宽叠加解决单点瓶颈最直接的理由就是带宽。服务器两根千兆网口如果只走一根线理论吞吐上限就是1Gbps实际还得打八折能跑满950Mbps就不错了。业务一上来典型的情况是网卡利用率飙到99%CPU的软中断也跟着爆应用响应变慢。配置链路聚合后两根线同时工作整条逻辑链路的带宽变成2Gbps。对万兆交换机来说4个10GE口绑一起就是40Gbps服务器的吞吐能力直接跨一个量级。这个收益在存储集群、备份系统、视频推流这类高带宽场景里尤其明显。但注意链路聚合不是“把两个人的力量简单相加”这么理想化。它的带宽提升取决于负载均衡算法如果流量特征不适合哈希分布实际效果会打折扣。后面我会专门讲负载均衡这个坑。2.2 链路冗余断了也能扛链路聚合的另一大价值是冗余。当聚合组里有4个成员口其中1根物理线缆被误拔、交换机单端口故障、或者光纤被老鼠咬断流量会自动切换到剩余成员口上整个逻辑链路不会中断。对业务来说这等同于无感知的故障切换。这个特性在高可用架构里是刚需。数据库主从、虚拟化集群、存储网络的服务器接入几乎不可能容忍单点链路故障。使用链路聚合后即使一根线出问题业务连接不会被重置顶多带宽缩水。我自己经历过一次凌晨接到告警核心交换机一个万兆口光模块老化导致频繁闪断。但因为服务器端口做了LACP聚合4个口中只挂了1个其余3个自动承接流量业务零中断。那一夜基本是睡过去的只白天换了模块。这就是链路冗余的价值。2.3 负载均衡流量自动分发第三个收益很多人会忽略链路聚合本身自带负载均衡能力。设备会根据配置的哈希算法将不同流比如按源MAC、目的MAC、源IP、目的IP的组合分散到不同成员链路上。这不仅提升了整体利用率也让运维少了一件事不用手工决定哪台服务器走哪根线。只要哈希算法选得合适流量分布相对均匀整条逻辑链路就像一个大的转发池单个流可能还是占一条链路但多个流会分散到不同链路上。不过请记住一个残酷的现实LACP的负载均衡粒度是“流”而非“包”一条TCP连接只会走其中一条链路不可能被拆到多条链路上并发传输。所以“把一条TCP连接跑到2Gbps”这种想法从原理上就不成立。想提升单流带宽老老实实升端口速率或者上多路径TCP之类的高级方案。这是几乎所有新手都会误解的一点。3. LACP的工作原理报文的协商过程3.1 LACPDU里到底放了什么LACP的工作基础是LACPDU报文这个报文每隔一定时间周期就会从参与聚合的端口发出。报文里最关键的信息有三个系统优先级和系统MAC用来唯一标识发送报文的设备优先级小者成为聚合组的“主”设备在主设备上协商结果生效。端口优先级和端口号用来标识发出报文的端口若设备间出现端口的选路冲突端口优先级决定了谁更占优。操作Key相当于端口的“属性标签”表示该端口的管理状态、速率、双工模式、VLAN信息等集合。只有两端操作Key匹配的端口才能聚合。你可以把LACPDU理解成“相亲简历”系统优先级是家庭背景端口优先级是个人条件操作Key是三观速率、VLAN这些参数。双方简历不匹配相亲就黄了端口就不会加入聚合组。3.2 主动模式与被动模式谁先开口说话LACP协商里有个容易混乱的地方主动Active和被动Passive模式。华为、华三、思科的实现基本一致主动模式设备主动发送LACPDU报文积极促成协商。被动模式设备不主动发报文只被动响应对方发来的报文。所以两端都配成被动模式时谁都不先开口协商永远不会成功。这个坑我亲眼见过不止一次——两个新入职的同事把两端都设成Passive看了半小时状态永远是Down最后发现是两边都不开口。常规推荐做法两端都配置为Active主动模式。这也是大多数厂商默认推荐的配置一个主动一个被动也行但两端都主动最稳协商速度最快。3.3 协商成功的完整流程以两端都是主动模式为例整个协商过程大概是这样的两端端口启用后各自周期性发送LACPDU宣告自己的系统优先级、端口优先级、操作Key。收到对端报文后设备将本端端口属性与对端报文中的操作Key进行比对判断双方是否具备聚合条件。系统优先级较高数值小的设备作为主端负责最终决定哪些端口可以聚合。协商成功后端口进入聚合状态对外表现为一个逻辑口转发平面开始启用负载均衡。整个流程是自动完成的因此在配置正确的情况下你几乎看不到中间过程只有“配完聚合起来了”这一个结果。但在排障时理解这个流程非常有帮助协商卡在哪一步问题就出在哪个环节。后面故障排查部分我会展开。4. 华为交换机配置LACPeNSP能练生产环境也通用4.1 华为链路聚合的相关概念Eth-Trunk华为设备上链路聚合接口叫Eth-Trunk。配置时先创建Eth-Trunk逻辑接口然后把物理接口加入其中最后设置聚合模式。Eth-Trunk分为二层和三层两种二层Eth-Trunk用于接入交换机的二层业务成员口是二层口三层Eth-Trunk用于路由口或VLANIF口上成员口是三层口。实际项目里服务器接入用得最多的是二层Eth-Trunk。华为的聚合模式有两种手工模式manual和LACP模式lacp-static。手工模式就是前面说的静态聚合LACP模式就是动态协商。华为文档里LACP模式叫“lacp-static”有点误导它对应的正是动态LACP不是某种静态模式。4.2 配置步骤LACP动态模式下面用一个实际场景演示两台华为交换机对接GE0/0/1和GE0/0/2要做成Eth-Trunk 1模式为LACP。先看第一台交换机的配置system-view interface Eth-Trunk 1 link-aggregation mode lacp-static trunkport GigabitEthernet 0/0/1 trunkport GigabitEthernet 0/0/2 quit再看第二台交换机system-view interface Eth-Trunk 1 link-aggregation mode lacp-static trunkport GigabitEthernet 0/0/1 trunkport GigabitEthernet 0/0/2 quit注意几个细节第一物理口加入Eth-Trunk前不需要手动改物理口的工作模式华为会自动将成员口属性调整成与Eth-Trunk一致。但如果物理口上已有配置比如port link-type trunk建议先清理干净再加入否则可能报错。第二两端Eth-Trunk编号不需要一致。只要协商参数匹配本端叫Eth-Trunk 1、对端叫Eth-Trunk 2也能聚合成功。当然规范起见项目里我一般都让两端编号一致方便排查。第三如果Eth-Trunk要承载VLAN业务要在Eth-Trunk接口上配置端口类型。典型配置interface Eth-Trunk 1 port link-type trunk port trunk allow-pass vlan 10 20 30这样聚合口就带上了指定VLAN的透传。4.3 配置LACP的系统优先级和端口优先级在某些场景下你需要主动控制哪些端口被选中成为活动成员。比如4个口聚合但只想让其中2个口处于活跃转发状态其余2个作为备份。此时就要用系统优先级和端口优先级来干预。配置系统优先级数值越小越优先interface Eth-Trunk 1 lacp system-priority 100配置端口优先级interface GigabitEthernet 0/0/1 lacp priority 100 quit interface GigabitEthernet 0/0/2 lacp priority 100 quit interface GigabitEthernet 0/0/3 lacp priority 200 quit interface GigabitEthernet 0/0/4 lacp priority 200 quit这样优先级高的GE0/0/1和GE0/0/2先被选为活动口GE0/0/3和GE0/0/4作为备份口。当活动口出现故障时备份口自动顶上。这个机制在需要“预留带宽”或“冗余但不想让所有端口都转发”的场景里很实用。4.4 验证命令配置完成后用下面的命令验证display eth-trunk 1 display lacp statistics display interface Eth-Trunk 1关键看“Current Active Ports”的数量、端口状态是否为Selected以及两端协商是否正常。如果端口状态显示为Unselected基本可以断定协商失败下一步进入排查流程。5. 华三交换机配置链路聚合一套命令走天下5.1 华三聚合的基本概念华三交换机里链路聚合的配置思路和华为差不多但命令风格略有差异。华三的关键概念是聚合组Link Aggregation Group配置时先创建聚合接口再把物理口加入。华三聚合分两种模式静态聚合模式对应命令link-aggregation mode static动态聚合模式对应命令link-aggregation mode dynamic和华三的其他特性一样动态聚合模式就是基于LACP的协商模式。华三设备上二层聚合组和三层聚合组需要分别用Bridge-Aggregation和Route-Aggregation接口创建这一点和华为不一样。5.2 二层动态链路聚合配置实例场景华三交换机作为接入层下联服务器双网口需要动态LACP聚合。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这段配置里有两个容易出错的地方提醒一下第一华三的物理口加入聚合组时不需要再指定模式因为模式是定义在聚合接口上的第二如果物理口已存在port link-type配置建议在加入聚合组前删除否则可能出现冲突报错。华三的报错信息有时候比较隐晦经常是“Failed to add port”这时候优先检查物理口上是否有多余配置。5.3 三层链路聚合配置实例当聚合用于三层转发比如交换机之间跑路由协议或服务器用路由模式接入时需要创建三层聚合口system-view interface Route-Aggregation 1 link-aggregation mode dynamic ip address 192.168.1.1 24 quit interface GigabitEthernet 1/0/1 port link-aggregation group 1 quit interface GigabitEthernet 1/0/2 port link-aggregation group 1 quit配置完后同样可以用以下命令验证display link-aggregation summary display link-aggregation verbose重点关注聚合组状态是否为“S”Selected如果两个端口都显示为“U”Unselected基本就是协商失败。华三的display link-aggregation verbose输出里还能看到LACP协商的详细信息排查时重点看对端系统ID和端口状态。5.4 华三和华为在LACP参数上的差异提醒虽然LACP是标准协议但厂商实现上有几个细微差异跨厂商对接时要特别注意系统优先级和端口优先级的默认值不完全一样。华为默认系统优先级是32768华三默认也是32768思科则是1。对接思科时如果使用优先级选路需要手动调整。LACPDU发送周期默认值可能不同但标准范围内都能协商成功一般不用改。华三有“聚合负载分担”的算法配置华为也有但要确保两端选路算法一致否则流量分布虽然不影响协商却可能造成实际负载不均。跨厂商对接我踩过一次坑华为与某国产交换机对接LACP两端都显示协商成功端口也是Selected但业务流量就是不通。最后查了半天发现是两端在半双工/全双工协商上出现隐性问题华为口显示全双工对端却被强制成了半双工。把对端端口手工指定为全双工后问题解决。6. Linux 8配置team动态链路聚合不只是bonding6.1 为什么用team而不是bondingLinux上实现链路聚合老办法是bondingbond0、bond1新办法是team。RHEL/CentOS 8系列已经将team作为推荐的链路聚合方案原因是team相比bonding有几个明显优势team支持更丰富的运行状态检查方式包括LACP、Ethtool、ARP Ping等。team的配置基于JSON结构化程度高排障方便。team在逻辑上把“负载均衡策略”和“链路管理”分离可扩展性更强。当然bonding并没有被废弃系统里仍然支持只是RHEL 8文档已经明确推荐新部署使用team。如果对端是华为或华三交换机并且配了LACP动态模式Linux这边的team也要采用LACP运行态配置使用runner lacp。6.2 在RHEL 8/CentOS 8上配置team的完整步骤下面我按真实操作顺序给出一套完整的配置步骤。前提是系统已经安装好teamd软件包没有的话执行dnf install teamd。第一步确认网卡名称。执行ip link show找到两块物理网卡假设是ens1f0和ens1f1。第二步创建team接口配置文件。RHEL 8使用NetworkManager管理网络优先使用nmcli命令创建teamnmcli connection add type team con-name team0 ifname team0 config {device: team0, runner: {name: lacp}, link_watch: {name: ethtool}, ports: {}}第三步将物理网卡添加到team中nmcli connection add type team-slave con-name team0-port1 ifname ens1f0 master team0 nmcli connection add type team-slave con-name team0-port2 ifname ens1f1 master team0第四步给team配置IP地址。如果你的team是二层聚合比如做桥接端口可以不需要IP如果是三层接入则执行nmcli connection modify team0 ipv4.addresses 192.168.10.10/24 ipv4.method manual nmcli connection modify team0 ipv4.gateway 192.168.10.1 nmcli connection modify team0 ipv4.dns 114.114.114.114第五步启用所有连接nmcli connection up team0 nmcli connection up team0-port1 nmcli connection up team0-port2第六步验证状态teamdctl team0 state输出里会显示team的运行状态包括端口数量和LACP信息。如果看到类似“active port: ens1f0”的信息说明聚合成功。也可以用ip link show team0和ethtool team0确认逻辑接口状态。6.3 team配置里的几个关键点第一点如果对端交换机配置的是静态聚合手工模式Linux team的runner应该配置为activebackup而不是lacp。很多人不知道这一点直接把交换机改成静态聚合、Linux这边还跑lacp结果协商永远起不来。第二点LACP模式下team的链路监控建议使用ethtool默认值即可。如果使用ARP Ping方式要确保对端地址可达且监控的是聚合口而非成员口否则误判链路状态。第三点当Linux对接华为交换机时华为侧建议配置为LACP主动模式Linux侧默认就是主动模式两端协商顺畅。如果华为侧配成了被动模式协商也能成功但依赖Linux侧主动发送报文不建议这样做两端主动模式最稳。第四点我在生产环境里遇到过team口流量不均的情况比如netperf测试时其中一块网卡流量很高另一块很低。这不是配置错误而是LACP哈希算法按源目IP/MAC分配流的固有特性。team的lacp runner默认使用源MAC和目的MAC做哈希对于点对点单流测试结果就是只有一条链路在跑。想改善可以换runner为lacp下的hash策略但单流带宽依旧无法突破单链路物理上限。7. 常见问题与排查技巧实录7.1 华为/华三设备上的聚合故障排查先给出一个万能排查顺序物理层→配置层→协商层→数据面。物理层查线缆、光模块和端口UP状态配置层查两端模式是否一致、成员口参数是否匹配协商层用display命令看LACP状态数据面用ping和流量测试验证转发。我整理了一个高频问题速查表基本覆盖日常运维会踩的坑故障现象可能原因排查方法端口状态UUnselected两端模式不匹配检查一端LACP另一端静态或两端都是被动模式协商失败但物理口UP成员口速率/双工不一致强制两端速率双工一致聚合口状态UP但业务不通VLAN配置不一致检查Eth-Trunk和成员口的trunk permitted VLAN单根线流量高另一根低负载均衡算法与流量特征不匹配调整哈希算法为源IP目的IP组合切换设备后聚合不恢复两端系统优先级/端口优先级配置不一致检查优先级参数保持两端规划一致华三报“Failed to add port”物理口已有其他配置清理物理口配置后再加入聚合组7.2 Linux侧team的排障思路Linux侧排障先确认三件事第一teamd进程是否正常运行。执行systemctl status teamd或ps -ef | grep teamd。teamd挂了所有端口全部失效。第二物理口是否被NetworkManager正确接管。执行nmcli device status查看两个物理口主连接是否为team0-port1和team0-port2。如果显示“disconnected”或“unmanaged”说明从属关系没建立。第三协商状态。执行teamdctl team0 state dump查看ports段里每个成员的link状态如果显示up但聚合不成功十有八九是对端交换机配置问题。我在Linux对接华为交换机时遇到过一个非常隐蔽的坑team口成员是两块不同型号的网卡支持的特性不同结果协商时报错“link_watch: ethtool failed”。后来用ethtool ens1f0和ethtool ens1f1对比发现其中一块网卡不支持某些pause参数把team的ethtool link_watch配置删掉改用arp_ping就解决了。7.3 跨厂商对接时的经典坑跨厂商做LACP最大的问题是厂商对“默认行为”的理解不同。举一个典型例子华为的LACP模式下端口默认被动等待协商如果对端是思科思科默认主动发报文问题不大。但如果两端都按自家默认配置一个被动一个被动协商就完全起不来。所以跨厂商对接前我建议先把双方的LACP模式都明确配成Active主动再对比系统优先级、端口优先级、操作Key匹配情况。用命令逐项核对两端参数不要靠猜。第二个经典坑是VLAN处理不一致。华为的Eth-Trunk作为二层口时成员口会自动同步VLAN配置但有些厂商的设备不会。跨厂商聚合后业务VLAN没有放通聚合口状态正常但ping不通。排查时先看两端聚合口上允许的VLAN列表再单独测试允许VLAN内的互通。第三个经典坑是STP生成树协议对聚合口的影响。在某些厂商设备上聚合端口依然参与STP计算如果拓扑里有环路STP会阻塞某些成员口导致聚合组“部分端口Selected、部分端口Discarding”。处理办法是将聚合口配置为STP边缘端口或者调整STP优先级确保聚合口快速进入转发状态。7.4 我的几条实操心得第一配置LACP之前检查网卡和交换机端口的速率、双工模式强制一致不要依赖自动协商。生产环境中自动协商出现问题的概率不高但一旦出问题故障定位成本极高。第二成员端口不要超过16个。虽然标准允许更多端口参与协商但很多设备实现上最多支持8个活动成员多余的只能作为备份。设计聚合带宽时按8条物理链路封顶计算比较稳妥。第三命名规范要提前定好。华为Eth-Trunk、华三Bridge-Aggregation、Linux team0在项目文档里建立一张映射表标明哪台设备的哪个聚合口对应哪条业务链路。不然半年之后你回来看配置根本分不清Eth-Trunk 10和Eth-Trunk 20是干嘛用的。第四LACP的链路检测存在盲区。它靠LACPDU超时判断链路故障如果线缆物理连接正常但转发异常比如光模块劣化LACPDU可能依旧能通聚合不会切换。这时候需要结合链路质量监控或者开启设备侧的误码检测功能人为将劣化链路down掉。8. 从配置到运维一次真实项目的复盘建议最后分享一点个人体会。链路聚合本身不是高深技术但它处在服务器接入的最前沿一旦配置出问题业务影响面非常大。我在项目里通常的做法是“三查三测”查物理层、查配置层、查协商状态测连通性、测带宽、测故障切换。测故障切换这步很多人会忽略。配置完LACP后手动拔掉一根网线观察业务是否中断、剩余链路是否自动承接流量、告警是否正常触发。这十几分钟的操作价值比你配置完直接走人高得多。我见过太多“配置正常但一拔线就断片”的案例基本都是没有做过故障切换演练。关于工具选型如果是新项目建议优先选动态LACP模式这是主流方向。如果对端设备很老不支持802.3ad那也没办法用静态聚合凑合但心里要清楚它的局限。如果是在模拟器里练习华为eNSP对LACP的支持够用适合练手跑通流程华三的HCL模拟器也有聚合配置实验功能上足够理解LACP协商机制。如果你正准备学习网络技术或者刚接手一批设备不妨先从一条链路的聚合配置开始。把Eth-Trunk、Bridge-Aggregation、team这三种实现都亲手配一遍再和真实的物理交换机对接一次你会发现LACP没那么多玄学。配置对了协商就是一秒钟的事配置错了状态字会告诉你问题多半出在你不愿意查的那一项参数上。
返回列表