交换机堆叠后链路聚合失败?多半是你忽视了这一点

内容分享2周前发布
0 0 0

服务器走的还是单链路,iperf跑出来的带宽只到一条网卡的水平,而且交换机日志里不断报MAC漂移,聚合口显示有端口处于Unselected状态。简单说,想要的20Gbps没实现,网络还出现丢包和地址飘移。

交换机堆叠后链路聚合失败?多半是你忽视了这一点

先看现象:两块S6730通过堆叠线连成一个逻辑体,服务器两块网卡分别插到堆叠的不同成员上,网卡配置的是bond(LACP)。按理来说应该能把两根物理链路绑成一条20G的聚合链路,但实际运行中发现多个异常:display eth-trunk里有端口显示Unselected;用display mac-address查到同一MAC在两个物理端口上同时出现或来回变动;iperf测速只跑出单链路带宽;系统日志出现MAC Flapping相关信息;有的端口被STP阻断。看着像是聚合没真正生效,反而引发了环路和不稳定的交换行为。

具体配置上,目的是把服务器的两块网卡做成Eth-Trunk到交换机。堆叠后交换机端配置了接口聚合,列如interface Eth-Trunk 1 port link-type trunk port trunk allow-pass vlan 10 20 mode lacp,然后把两台交换机的相应物理端口都加入到Eth-Trunk上,成员端口类似于GigabitEthernet 1/0/1 eth-trunk 1和GigabitEthernet 2/0/1 eth-trunk 1。服务器端是Linux bond,/etc/network/interfaces里写成bond0,bond-mode 4(LACP),bond-slaves eth0 eth1。按流程,这样配置并不算错,但关键点在于“跨物理成员的聚合”是否被底层支持和正确协同。

交换机堆叠后链路聚合失败?多半是你忽视了这一点

诊断步骤按倒序来讲比较直观:先看聚合口状态。display eth-trunk 1的输出正常时会把两个物理端口都标为Selected。如果看到Unselected,一般有几类问题:堆叠本身没有正常建立(用display stack检查是否成环或成员状态异常);两端LACP协商方向不同(一边active一边passive导致无法形成);物理链路属性不一致(速率、双工);接口上有被过滤的VLAN或端口安全策略阻止。接着查MAC表,display mac-address | include <服务器MAC>应该只出现一条并指向Eth-Trunk1。如果能看到同一MAC在两个物理口各自存在,那就是MAC漂移,说明交换机没有把这两口当成同一聚合组处理。最后用流量工具验证,若iperf多线程也只能跑出单链路速率,说明并未实现多路复用。

回溯缘由要把大环境说清楚:堆叠把几台交换机在控制面上合并成“一台逻辑设备”,但每台成员机仍有独立的转发芯片和物理口。普通的静态聚合(mode on)或单纯用LACP在两台不同物理设备的端口上并不能保证成员间有同步机制,交换机不知道“这两条线是连向同一台服务器”的实际。没有额外的跨设备协同机制,可能出现STP阻塞某条链路以避免环路、也可能出现两台成员各自学习MAC造成漂移,流量反而聚焦到一条链路上。

交换机堆叠后链路聚合失败?多半是你忽视了这一点

设备厂商对此有不同的解决路径。若能用堆叠(像CSS/iStack)且堆叠稳定,那么华为这些型号可以直接支持跨成员的Eth-Trunk,配置好LACP后一般会成功——堆叠内部会把两个物理口在逻辑上当成一个聚合组的一部分。但如果由于距离、机型或其它缘由无法做物理堆叠,就需要用专门的多机箱聚合机制(M-LAG / vPC等),这类方案通过peer-link或控制面协同同步FDB/MAC表,保证两台独立交换机在聚合上有一致的视图。华为的M-LAG示例涉及创建dfs-group、配置peer-link为一个Eth-Trunk并将服务器端口绑定到同一dfs-group和m-lag编号上,控制面会交换必要的信息,达到跨机箱聚合的效果。

常见排查清单(按发现到成因的倒序思路走):

交换机堆叠后链路聚合失败?多半是你忽视了这一点

– 看display eth-trunk口状态,确认端口是否被标为Selected。

– 查display stack确认堆叠成员状态和主备关系是否正常。

– 检查两端LACP配置是否匹配(模式、速率、双工、MTU)。

– 用display mac-address确认服务器MAC是否只在聚合口出现一次。

– 用iperf或等效工具验证实际吞吐量是否接近预期。

– 查交换机日志是否有MAC Flapping或链路上下线记录。

– 若没有堆叠,确认是否启用了M-LAG/vPC或等效机制,并检查peer-link是否健康。

举个更具体的场景说明:两台S6730通过堆叠线连成CSS环,display stack能看到Master和Standby两个成员。服务器双网卡插在G1/0/1和G2/0/1,交换机配置了Eth-Trunk 1,mode lacp。正常状态下display eth-trunk 1会输出两条Selected端口记录;display mac-address | include 只会有一条指向Eth-Trunk1;iperf多线程测试可以接近两条链路带宽。不过如果堆叠线其中一侧断了,或LACP参数对不上,display eth-trunk会把某个端口标为Unselected,MAC表出现两条记录,流量掉回一端口甚至出现STP阻塞,最后导致丢包和不稳定。

有时候问题出在服务器端:Linux的bond配置如果没有启用LACP或bond-mode配置不当,也会导致交换侧无法协商出有效聚合。/etc/network/interfaces里要把bond-mode设为4,bond-miimon等参数按需调好,确保内核端发起正确的LACP协商包。

技术点一句话提示:跨物理机箱做聚合不是单靠把端口绑在一起就行,必须有底层的协同机制(堆叠或M-LAG/vPC),聚合提议用LACP而非静态模式,而且务必通过端口Selected状态、MAC表唯一性和流量测试来验证是否真正生效。

原创:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...