AIDC 学习日志|第 21 天|EVPN 多归属故障演练与中断窗口定位

今天学习如何设计 EVPN 多归属故障演练,并用连续探测、设备状态、流量计数器和时间线定位中断窗口。核心结论:一次 Ping 只能证明一个时刻的可达性;Underlay Loopback 可达不等于 VXLAN 业务可达;LACP 成员都 Up 也不等于流量一定均匀。故障分析必须把物理层、聚合层、控制面、数据面和应用层分开记录。

一、今日目标与完成情况

  • 理解单次 Ping 的证据边界
  • 设计单成员、整机和 Peer-Link 三类故障演练
  • 建立检测、收敛、转发表和应用恢复时间线
  • 区分 Underlay 探测与 Overlay 业务探测
  • 用计数器和多流量验证判断哈希不均还是成员故障
  • 完成 5 个练习题并记录原回答和批改
  • 尚未在真实 CloudEngine/VRP 设备上执行故障演练和测量实际毫秒数

二、一次 Ping 的证据边界

text 复制代码
一次 Ping 只能证明某一时刻、某个源到某个目的完成了一次往返。
它不能证明切换期间没有丢包、业务持续稳定、去程和回程都正常,
也不能证明其他VNI、其他流、BUM和应用层已经收敛。

因此至少需要连续 Ping、时间戳、设备日志和流量统计配合。

三、故障演练的分层观察

#mermaid-svg-YrlTgwyA3eRvxunU{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-YrlTgwyA3eRvxunU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YrlTgwyA3eRvxunU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YrlTgwyA3eRvxunU .error-icon{fill:#552222;}#mermaid-svg-YrlTgwyA3eRvxunU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YrlTgwyA3eRvxunU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YrlTgwyA3eRvxunU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YrlTgwyA3eRvxunU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YrlTgwyA3eRvxunU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YrlTgwyA3eRvxunU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YrlTgwyA3eRvxunU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YrlTgwyA3eRvxunU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YrlTgwyA3eRvxunU .marker.cross{stroke:#333333;}#mermaid-svg-YrlTgwyA3eRvxunU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YrlTgwyA3eRvxunU p{margin:0;}#mermaid-svg-YrlTgwyA3eRvxunU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-YrlTgwyA3eRvxunU .cluster-label text{fill:#333;}#mermaid-svg-YrlTgwyA3eRvxunU .cluster-label span{color:#333;}#mermaid-svg-YrlTgwyA3eRvxunU .cluster-label span p{background-color:transparent;}#mermaid-svg-YrlTgwyA3eRvxunU .label text,#mermaid-svg-YrlTgwyA3eRvxunU span{fill:#333;color:#333;}#mermaid-svg-YrlTgwyA3eRvxunU .node rect,#mermaid-svg-YrlTgwyA3eRvxunU .node circle,#mermaid-svg-YrlTgwyA3eRvxunU .node ellipse,#mermaid-svg-YrlTgwyA3eRvxunU .node polygon,#mermaid-svg-YrlTgwyA3eRvxunU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YrlTgwyA3eRvxunU .rough-node .label text,#mermaid-svg-YrlTgwyA3eRvxunU .node .label text,#mermaid-svg-YrlTgwyA3eRvxunU .image-shape .label,#mermaid-svg-YrlTgwyA3eRvxunU .icon-shape .label{text-anchor:middle;}#mermaid-svg-YrlTgwyA3eRvxunU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YrlTgwyA3eRvxunU .rough-node .label,#mermaid-svg-YrlTgwyA3eRvxunU .node .label,#mermaid-svg-YrlTgwyA3eRvxunU .image-shape .label,#mermaid-svg-YrlTgwyA3eRvxunU .icon-shape .label{text-align:center;}#mermaid-svg-YrlTgwyA3eRvxunU .node.clickable{cursor:pointer;}#mermaid-svg-YrlTgwyA3eRvxunU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YrlTgwyA3eRvxunU .arrowheadPath{fill:#333333;}#mermaid-svg-YrlTgwyA3eRvxunU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YrlTgwyA3eRvxunU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YrlTgwyA3eRvxunU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YrlTgwyA3eRvxunU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YrlTgwyA3eRvxunU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YrlTgwyA3eRvxunU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YrlTgwyA3eRvxunU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YrlTgwyA3eRvxunU .cluster text{fill:#333;}#mermaid-svg-YrlTgwyA3eRvxunU .cluster span{color:#333;}#mermaid-svg-YrlTgwyA3eRvxunU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YrlTgwyA3eRvxunU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YrlTgwyA3eRvxunU rect.text{fill:none;stroke-width:0;}#mermaid-svg-YrlTgwyA3eRvxunU .icon-shape,#mermaid-svg-YrlTgwyA3eRvxunU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YrlTgwyA3eRvxunU .icon-shape p,#mermaid-svg-YrlTgwyA3eRvxunU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YrlTgwyA3eRvxunU .icon-shape .label rect,#mermaid-svg-YrlTgwyA3eRvxunU .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YrlTgwyA3eRvxunU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YrlTgwyA3eRvxunU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YrlTgwyA3eRvxunU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 制造故障
物理接口与错误计数
LACP/Eth-Trunk成员
ESI/EAD与多归属角色
BGP EVPN控制面
MAC/ARP/Aliasing数据面
VTEP/NVE/VNI业务面
应用与回程

"是否全栈错误"不是可执行的排障结论,必须具体记录物理接口、LACP/Eth-Trunk、ESI/EAD、Active/Standby、DF、保护状态、EVPN Type 1/Type 2、Aliasing、MAC/ARP、VTEP/NVE/VNI、业务流和回程。

四、Underlay 探测与 Overlay 业务探测

Underlay Loopback Ping 成功,主要证明 Leaf 之间的 Loopback 路由和底层三层路径基本可达,不能直接证明 NVE、VNI、BD、EVPN MAC/IP 或业务转发正常。

同子网跨 VNI 失败,优先检查:

text 复制代码
VLAN → BD → L2 VNI映射
NVE Peer
远端MAC/Type 2
ARP广播或代理ARP
二层出口和回程

跨子网跨 VNI 失败,在 Underlay 和 Overlay 基本可达后继续检查 Anycast Gateway、Tenant VRF、L3 VNI、Type 5 或相关 IP 前缀、三层路由和回程。

五、三类故障演练

演练场景 主要观察 常见业务表现
单条成员链路 Down 接口、LACP、ESI/EAD、Aliasing 部分旧流丢包,新流绕过故障成员
Active Leaf 整机故障 VTEP、Underlay、EVPN撤销、角色切换 更大范围中断,等待备用接管
Peer-Link Down + Keepalive Up 双主、Isolated、Disabled、DF、MAC Flapping BUM可能被抑制,部分已知单播可能中断

六、用时间线定位中断窗口

应用 数据面 EVPN控制面 Leaf设备 探测端 应用 数据面 EVPN控制面 Leaf设备 探测端 #mermaid-svg-iFcxhZZUC61T9oYY{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-iFcxhZZUC61T9oYY .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-iFcxhZZUC61T9oYY .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-iFcxhZZUC61T9oYY .error-icon{fill:#552222;}#mermaid-svg-iFcxhZZUC61T9oYY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iFcxhZZUC61T9oYY .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-iFcxhZZUC61T9oYY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iFcxhZZUC61T9oYY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iFcxhZZUC61T9oYY .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-iFcxhZZUC61T9oYY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iFcxhZZUC61T9oYY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iFcxhZZUC61T9oYY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iFcxhZZUC61T9oYY .marker.cross{stroke:#333333;}#mermaid-svg-iFcxhZZUC61T9oYY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iFcxhZZUC61T9oYY p{margin:0;}#mermaid-svg-iFcxhZZUC61T9oYY .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-iFcxhZZUC61T9oYY text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-iFcxhZZUC61T9oYY .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-iFcxhZZUC61T9oYY .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-iFcxhZZUC61T9oYY .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-iFcxhZZUC61T9oYY .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-iFcxhZZUC61T9oYY #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-iFcxhZZUC61T9oYY .sequenceNumber{fill:white;}#mermaid-svg-iFcxhZZUC61T9oYY #sequencenumber{fill:#333;}#mermaid-svg-iFcxhZZUC61T9oYY #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-iFcxhZZUC61T9oYY .messageText{fill:#333;stroke:none;}#mermaid-svg-iFcxhZZUC61T9oYY .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-iFcxhZZUC61T9oYY .labelText,#mermaid-svg-iFcxhZZUC61T9oYY .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-iFcxhZZUC61T9oYY .loopText,#mermaid-svg-iFcxhZZUC61T9oYY .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-iFcxhZZUC61T9oYY .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-iFcxhZZUC61T9oYY .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-iFcxhZZUC61T9oYY .noteText,#mermaid-svg-iFcxhZZUC61T9oYY .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-iFcxhZZUC61T9oYY .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-iFcxhZZUC61T9oYY .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-iFcxhZZUC61T9oYY .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-iFcxhZZUC61T9oYY .actorPopupMenu{position:absolute;}#mermaid-svg-iFcxhZZUC61T9oYY .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-iFcxhZZUC61T9oYY .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-iFcxhZZUC61T9oYY .actor-man circle,#mermaid-svg-iFcxhZZUC61T9oYY line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-iFcxhZZUC61T9oYY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} T0记录故障前连续探测T1检测接口或成员变化T2发布ESI/EAD或路径变化T3更新MAC/Aliasing/转发表T4 Ping开始恢复T5验证TCP或实际业务

text 复制代码
检测时间 = T1 - T0
控制面收敛 = T2/T3 - T1
数据面恢复 = T4 - T3
应用恢复 = T5 - T4

这是分析模型,不是固定秒数。真实时间必须由日志、抓包、连续 Ping 和业务探测测量。

七、区分哈希不均与成员没有转发

可能是正常哈希不均:

text 复制代码
所有成员均Collecting/Distributing
每个成员都有收发计数增长
增加不同源、目的和端口流后分布逐渐变化
没有成员被Suspend或保护性阻塞

可能是成员未实际转发:

text 复制代码
成员虽显示Up,但不在有效收发状态
某成员长期无收发计数
不同流量反复测试仍完全不命中该成员
LACP Actor/Partner或Eth-Trunk状态异常
成员被Suspend、Inactive或多归属保护限制

验证步骤是:查看 Eth-Trunk 成员和 LACP 收发状态;查看各成员接口收发字节、包数和错误计数;使用多组源 IP、目的 IP、端口生成多条流;比较各成员计数是否都增长。所有成员有计数但比例偏斜,优先分析哈希分布;某成员始终无计数且状态异常,优先查聚合或保护。

八、课堂问答与批改

问题 1:为什么一次 Ping 成功不能证明故障切换已经完成?

我的回答:显示不完全,不知道是什么原因。

批改:正确方向。一次 Ping 只提供单个时间点和单个路径的证据,无法展示切换期间的丢包数量、持续时间、去回程差异、其他业务流状态或应用恢复状态。必须结合连续探测、时间戳和设备状态。

问题 2:单条服务器成员链路故障时,应该同时观察哪些状态?

我的回答:是否全栈错误。

批改:需要改成可执行的分层清单:物理接口、LACP/Eth-Trunk、ESI/EAD、Active/Standby 或保护状态、EVPN Type 1/Type 2、Aliasing、MAC/ARP、VTEP/NVE/VNI、业务流和回程。排障不能只写"全栈"。

问题 3:Underlay Loopback Ping 一直成功,但跨 VNI 业务 Ping 失败,优先怀疑哪一层?

我的回答:三层。

批改:范围不够。Underlay 已基本可达,优先进入 Overlay 服务层:同子网检查 BD/L2 VNI、NVE、MAC/ARP 和 Type 2;跨子网再检查 Anycast Gateway、Tenant VRF、L3 VNI、IP 路由和回程。

我的回答:广播重复消失,但部分已知单播暂时中断。

批改:正确。这个现象可能说明双主保护已经限制了一侧成员:BUM 重复被抑制,但有效单播出口减少,导致部分业务暂时中断。还要确认 Leaf 角色、Peer-Link、保护解除条件和 MAC 是否重新学习。

问题 5:两条 LACP 成员都 Up,但流量长期集中在一条链路,如何区分正常哈希不均和成员实际没有转发?

我的回答:不知道。

标准方法:检查成员是否 Collecting/Distributing,观察每个成员的收发计数,并用多组五元组流量重复测试。所有成员都有计数但比例偏斜,可能是正常哈希或流量模型集中;某成员长期无计数且状态异常,则优先怀疑 LACP/Eth-Trunk 或保护阻塞。

九、故障演练记录模板

text 复制代码
实验名称:
工作模式:All-Active / Single-Active
故障对象:
故障动作:
T0 故障发生:
T1 物理状态变化:
T2 LACP/ESI状态变化:
T3 EVPN路径变化:
T4 MAC/ARP/Aliasing变化:
T5 Underlay探测恢复:
T6 Overlay业务恢复:
T7 应用恢复:
丢包数量和最长连续丢包:
是否出现MAC Flapping:
是否出现BUM重复:
最终根因和证据:
残余风险:

十、错误前提与修正

我的判断 问题类型 更准确的判断
一次 Ping 显示不完全 方向正确但不具体 用连续探测和时间线记录丢包、收敛和恢复阶段
是否全栈错误 不可执行表述 按物理、聚合、多归属、控制面、数据面和应用层逐项验证
跨 VNI 失败优先查三层 范围过宽 同子网先查 L2 VNI/BD,跨子网再查 L3 VNI/VRF/路由/回程
广播恢复但单播中断 正确现象 可能是双主保护限制成员,仍需验证角色和数据面
不知道如何判断哈希不均 知识缺口 看LACP有效状态、成员计数和多流测试结果

十一、今日复习卡片

text 复制代码
一次Ping:单点证据,不是完整验收
连续探测:记录丢包数量和中断窗口
Underlay Loopback可达:不等于Overlay业务可达
同子网跨VNI:优先L2 VNI/BD/NVE/MAC/ARP
跨子网跨VNI:检查网关、L3 VNI、VRF、路由和回程
成员都Up:仍需确认Collecting/Distributing和计数增长
计数都有但比例偏斜:可能是哈希分布
某成员无计数且状态异常:优先查LACP或保护阻塞

十二、今日状态

第 21 天课程完成:能够设计多归属故障演练,使用分层状态和时间线定位中断窗口,并能区分 Underlay 探测、Overlay 业务和应用恢复。下一课继续做一套完整的 All-Active/Single-Active 故障演练题,要求写出预期现象、验证命令类别和最终根因证据。

相关推荐
wuyk5551 小时前
从零吃透 MQTT 通信|第 5 章 MQTT 心跳保活机制深度优化,断线检测与智能自动重连
c语言·开发语言·stm32·学习
幼儿园蛋小黄1 小时前
基于 TCP 的嵌入式网络通信学习总结
网络协议·学习·tcp/ip
~kiss~1 小时前
大模型的四类Cache - KV, Prefix, Prompt and Semantic Caching
学习
Ray Wang2 小时前
RAG学习
学习
啊阿狸不会拉杆2 小时前
《计算机网络-自顶向下方法》5.1 概述 读书笔记
网络·计算机网络·智能路由器
励志不掉头发的内向程序员2 小时前
【LibreCAD 2D架构】从鼠标点击到图形创建:RS_ActionDrawLine交互流程与状态机解析
开发语言·c++·qt·学习·系统架构·计算机外设·交互
Polevne2 小时前
C# 上位机UDP/TCP连接外部设备
网络·tcp/ip·udp
木井巳2 小时前
【网络原理】TCP/IP 协议栈
网络·网络协议·tcp/ip·udp
Htr_2 小时前
Reflexio 使用指南:让 AI 智能体从每次交互中持续学习
人工智能·学习·交互