核心交换机堆叠后 LACP 协商状态漂移导致 VLAN 单通的排查实录

核心交换机堆叠后 VLAN 间歇性单通,根因是成员重启后 LACP 协商状态漂移,部分链路处于 Collecting 但未 Distributing。

问题背景

某生产核心交换机采用两台 S6860 堆叠组成双主控平面,承载全网核心路由与 VLAN 间转发。堆叠成员 A(主)与成员 B(备)各上联 2 条 40G 光模块至上游核心,配置 LACP 动态聚合(mode active)。日常运行稳定。

2026-09-14 凌晨 03:17,成员 B 因风扇模块告警触发「热插拔重启」。重启完成后,监控发现 VLAN 10(办公网)与 VLAN 30(开发测试)出现间歇性单通:从成员 B 下联的服务器 ping 网关正常,但反向或跨 VLAN 访问时丢包率 15-40% 不等;成员 A 下联的服务器则完全正常。现象持续约 47 分钟后自行恢复。

故障现象

  1. 单通特征明显:成员 B 下联服务器 → 网关(VLAN 10 SVI)双向正常;但成员 B → 成员 A(跨堆叠链路)或成员 B → 上游核心方向,VLAN 10/30 的 TCP 连接经常超时,UDP 单向可达。
  2. LACP 状态异常display lacp 显示成员 B 的 Eth-Trunk 10 中,端口 GE1/0/25(上联 40G-1)处于 Selected、Collecting、Distributing,但 GE1/0/26(上联 40G-2)处于 Selected、Collecting、Not Distributing
  3. MAC 漂移告警:上游核心收到来自同一 MAC(成员 B 的系统 ID)在两个不同端口的 LACP PDU,触发 MAC 漂移告警。
  4. 恢复无规律:故障期间多次执行 shutdown/no shutdown 端口或重启 LACP 进程,状态短暂正常后再次漂移;最终在 04:04 自动恢复正常。

排查过程

步骤 1:确认物理链路与光模块

  • 成员 B 重启后所有端口 up,光功率正常(-2.3 dBm / -1.8 dBm),排除物理层。
  • display interface brief 显示 Eth-Trunk 10 的两个成员口均为 up,但 display eth-trunk 10 中「工作模式」显示 LACP,「链路状态」为 up,与预期一致。

步骤 2:抓 LACP PDU 对比协商状态

在成员 B 的两个上联口分别做 display packet capture interface

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 成员 B GE1/0/25(正常口)
Partner System ID:  00e0-fc12-3456
Actor Port Number:  0x8001
Actor State:        0x3d (Collecting|Distributing|Defaulted)
Partner State:      0x3d

# 成员 B GE1/0/26(异常口)
Partner System ID:  00e0-fc12-3456
Actor Port Number:  0x8002
Actor State:        0x3c (Collecting|Defaulted)   # 缺少 Distributing 位
Partner State:      0x3c

关键差异:GE1/0/26 的 Actor State 缺少 Distributing 标志位,导致该链路虽然被 LACP 选中(Selected),但不会向该端口发送数据(Not Distributing)。

步骤 3:检查堆叠成员重启后的配置同步

堆叠配置本应在成员重启后自动同步,但检查发现:

1
display stack configuration

成员 B 的 Eth-Trunk 10 配置中,lacp system-id 字段显示为默认值(由系统 MAC 生成),而成员 A 的配置中明确指定了 lacp system-id 00e0-fc00-0001

进一步 display current-configuration | section eth-trunk 发现:成员 B 的配置文件中 Eth-Trunk 10 的 mode lacp-static 配置在重启后丢失,回退到默认的 mode lacp-dynamic,导致两端协商参数不一致。

步骤 4:根因定位——堆叠配置漂移

  • 堆叠成员 B 重启时,配置文件同步机制因风扇告警中断,部分配置(包括 Eth-Trunk 的 LACP mode)未正确加载。
  • 成员 A 仍使用 lacp-static + 显式 system-id,成员 B 回退到 lacp-dynamic + 默认 system-id,导致 LACP 协商状态漂移。
  • 部分链路因状态不一致被 LACP 置为 Not Distributing,形成单通。

解决方案

  1. 立即恢复配置:在成员 B 上重新执行 Eth-Trunk 10 的完整 LACP 配置(含 mode lacp-staticlacp system-id),强制触发重新协商。
  2. 验证状态一致:确认两个成员口的 Actor/Partner State 均包含 Distributing 标志位,MAC 漂移告警清除。
  3. 固化配置同步检查:在堆叠配置中增加「配置一致性巡检」脚本,每日 02:00 执行 display current-configuration | diff 并告警。
  4. 修改 LACP 超时策略:将上游核心的 LACP timeoutfast 改为 slow,降低因成员重启导致的瞬态协商失败概率。

根因分析

根本原因:堆叠成员重启后,配置文件同步机制中断,导致 Eth-Trunk 的 LACP mode 配置漂移,从 lacp-static 回退到 lacp-dynamic,与对端(成员 A + 上游核心)协商参数不一致,部分链路被 LACP 置为 Not Distributing,形成 VLAN 单通。

触发条件:成员 B 风扇模块告警触发「热插拔重启」+ 配置同步窗口被中断。

为什么只影响部分 VLAN:LACP 状态漂移仅发生在成员 B 的上联链路,VLAN 10/30 的流量恰好走该路径,而成员 A 的链路正常,故只出现间歇性单通。

预防措施

  1. 堆叠配置一致性门禁:在 Zabbix/云监控中增加「堆叠配置 diff」告警项,任意成员配置与主控不一致立即短信告警。
  2. LACP 状态基线监控:对核心 Eth-Trunk 的每个成员口增加「Actor State 中 Distributing 位」监控,缺失即告警。
  3. 配置版本化与回滚:堆叠配置变更前先 save 并打标签,成员重启后若配置漂移可快速回滚。
  4. 风扇模块告警阈值收紧:将风扇转速告警阈值从 30% 提升至 50%,避免低级别告警触发不必要的成员重启。
  5. 定期演练堆叠成员重启:每季度执行一次「计划内成员重启 + 配置一致性验证」,检验配置同步机制的健壮性。

总结

本次故障的本质是堆叠成员重启后的配置同步失败,导致 LACP 协商状态漂移,形成单通。排查过程通过抓取 LACP PDU 对比 Actor State 标志位,精准定位到「Distributing 位缺失」这一关键异常,最终通过重新下发配置收敛。

经验教训

  • 堆叠/集群类设备,重启后的配置一致性是比链路状态更重要的监控项。
  • LACP 的 Not Distributing 状态是典型的「链路 up 但业务不通」场景,需纳入基线监控。
  • 真实项目中「热插拔重启」往往伴随配置漂移,建议在变更窗口增加「配置一致性验证」这一道门禁。

延伸阅读

使用 Hugo 构建
主题 StackJimmy 设计