AIDC 学习日志|第 22 天|All-Active/Single-Active 故障演练设计

本节概览

今天学习如何设计一套可验证的 EVPN 多归属故障演练。故障演练不能只看一次 Ping 或一个邻居状态,而要先建立故障前基线,再记录物理、聚合、多归属、控制面、数据面和应用层的时间变化。All-Active 成员故障通常保留其他有效路径;Single-Active 整机故障需要从 Active 切到 Standby;Peer-Link 故障则重点观察双主保护、Isolated、Disabled、DF 和 MAC Flapping。

上一课:\[AIDC学习日志-第21天-EVPN多归属故障演练与中断窗口定位]

路线图:\[AIDC网络工程师学习路线图]

一、今日目标与完成情况

  • 理解一次 Ping 的证据边界
  • 设计单成员、整机和 Peer-Link 三类故障演练
  • 建立故障检测、控制面收敛、数据面恢复和应用恢复的时间线
  • 区分 Underlay Loopback 探测与 Overlay 业务探测
  • 理解 All-Active 旧流与新流的不同影响
  • 理解 Single-Active 主备切换不能只看角色变化
  • 学会通过成员计数和多流测试区分哈希不均与成员未转发
  • 完成 5 个练习题并记录原回答、标准答案和解析
  • 尚未在真实 CloudEngine/VRP 设备上执行演练和测量实际收敛时间

二、故障演练的标准结构

#mermaid-svg-nV2MPAZ5kcLXogJn{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-nV2MPAZ5kcLXogJn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nV2MPAZ5kcLXogJn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nV2MPAZ5kcLXogJn .error-icon{fill:#552222;}#mermaid-svg-nV2MPAZ5kcLXogJn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nV2MPAZ5kcLXogJn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nV2MPAZ5kcLXogJn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nV2MPAZ5kcLXogJn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nV2MPAZ5kcLXogJn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nV2MPAZ5kcLXogJn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nV2MPAZ5kcLXogJn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nV2MPAZ5kcLXogJn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nV2MPAZ5kcLXogJn .marker.cross{stroke:#333333;}#mermaid-svg-nV2MPAZ5kcLXogJn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nV2MPAZ5kcLXogJn p{margin:0;}#mermaid-svg-nV2MPAZ5kcLXogJn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-nV2MPAZ5kcLXogJn .cluster-label text{fill:#333;}#mermaid-svg-nV2MPAZ5kcLXogJn .cluster-label span{color:#333;}#mermaid-svg-nV2MPAZ5kcLXogJn .cluster-label span p{background-color:transparent;}#mermaid-svg-nV2MPAZ5kcLXogJn .label text,#mermaid-svg-nV2MPAZ5kcLXogJn span{fill:#333;color:#333;}#mermaid-svg-nV2MPAZ5kcLXogJn .node rect,#mermaid-svg-nV2MPAZ5kcLXogJn .node circle,#mermaid-svg-nV2MPAZ5kcLXogJn .node ellipse,#mermaid-svg-nV2MPAZ5kcLXogJn .node polygon,#mermaid-svg-nV2MPAZ5kcLXogJn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nV2MPAZ5kcLXogJn .rough-node .label text,#mermaid-svg-nV2MPAZ5kcLXogJn .node .label text,#mermaid-svg-nV2MPAZ5kcLXogJn .image-shape .label,#mermaid-svg-nV2MPAZ5kcLXogJn .icon-shape .label{text-anchor:middle;}#mermaid-svg-nV2MPAZ5kcLXogJn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nV2MPAZ5kcLXogJn .rough-node .label,#mermaid-svg-nV2MPAZ5kcLXogJn .node .label,#mermaid-svg-nV2MPAZ5kcLXogJn .image-shape .label,#mermaid-svg-nV2MPAZ5kcLXogJn .icon-shape .label{text-align:center;}#mermaid-svg-nV2MPAZ5kcLXogJn .node.clickable{cursor:pointer;}#mermaid-svg-nV2MPAZ5kcLXogJn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nV2MPAZ5kcLXogJn .arrowheadPath{fill:#333333;}#mermaid-svg-nV2MPAZ5kcLXogJn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nV2MPAZ5kcLXogJn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nV2MPAZ5kcLXogJn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nV2MPAZ5kcLXogJn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nV2MPAZ5kcLXogJn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nV2MPAZ5kcLXogJn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nV2MPAZ5kcLXogJn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nV2MPAZ5kcLXogJn .cluster text{fill:#333;}#mermaid-svg-nV2MPAZ5kcLXogJn .cluster span{color:#333;}#mermaid-svg-nV2MPAZ5kcLXogJn 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-nV2MPAZ5kcLXogJn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nV2MPAZ5kcLXogJn rect.text{fill:none;stroke-width:0;}#mermaid-svg-nV2MPAZ5kcLXogJn .icon-shape,#mermaid-svg-nV2MPAZ5kcLXogJn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nV2MPAZ5kcLXogJn .icon-shape p,#mermaid-svg-nV2MPAZ5kcLXogJn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nV2MPAZ5kcLXogJn .icon-shape .label rect,#mermaid-svg-nV2MPAZ5kcLXogJn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nV2MPAZ5kcLXogJn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nV2MPAZ5kcLXogJn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nV2MPAZ5kcLXogJn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 故障前基线
受控制造故障
观察各层状态
记录业务影响
恢复故障
分层验证完全恢复

故障前基线至少包括:

text 复制代码
接口和错误计数正常
Eth-Trunk/LACP成员正常
ESI/EAD和多归属角色明确
EVPN邻居Established
VTEP/NVE可达
MAC/ARP稳定
已知单播、BUM和回程正常

没有基线时,故障后看到的异常可能原本就存在,无法证明是故障造成的。

三、三类演练场景

1. All-Active 单成员故障

text 复制代码
Leaf1、Leaf2均可转发
关闭Leaf1到服务器的一条成员链路

预期过程:

text 复制代码
物理接口Down
→ LACP成员退出或状态变化
→ Leaf1该成员不再是有效出口
→ ESI/EAD和Aliasing更新
→ Leaf2或其他有效成员继续承载部分/新建流
→ 命中故障成员的旧流可能丢包或重传

All-Active 的优势是故障后仍保留其他有效路径,但不能理解为"完全无感"。

2. Single-Active 整机故障

text 复制代码
Leaf1 = Active
Leaf2 = Standby
模拟Leaf1整机或关键业务路径故障

预期过程:

text 复制代码
Leaf1接口、VTEP或控制路径失效
→ Leaf2确认Active不可用
→ Leaf2切换为Active
→ LACP/Eth-Trunk和ESI状态更新
→ EVPN撤销或更新Leaf1路径
→ MAC/ARP/Aliasing和硬件转发表切换
→ 服务器和应用通过Leaf2恢复

不能只看到"Leaf2变成Active"就宣布业务恢复,还要确认新 Active 真正收发、MAC/ARP 正确、回程可达和应用恢复。

#mermaid-svg-6C21KtRykcdeft1f{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-6C21KtRykcdeft1f .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-6C21KtRykcdeft1f .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-6C21KtRykcdeft1f .error-icon{fill:#552222;}#mermaid-svg-6C21KtRykcdeft1f .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6C21KtRykcdeft1f .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-6C21KtRykcdeft1f .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6C21KtRykcdeft1f .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6C21KtRykcdeft1f .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-6C21KtRykcdeft1f .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6C21KtRykcdeft1f .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6C21KtRykcdeft1f .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6C21KtRykcdeft1f .marker.cross{stroke:#333333;}#mermaid-svg-6C21KtRykcdeft1f svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6C21KtRykcdeft1f p{margin:0;}#mermaid-svg-6C21KtRykcdeft1f .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-6C21KtRykcdeft1f .cluster-label text{fill:#333;}#mermaid-svg-6C21KtRykcdeft1f .cluster-label span{color:#333;}#mermaid-svg-6C21KtRykcdeft1f .cluster-label span p{background-color:transparent;}#mermaid-svg-6C21KtRykcdeft1f .label text,#mermaid-svg-6C21KtRykcdeft1f span{fill:#333;color:#333;}#mermaid-svg-6C21KtRykcdeft1f .node rect,#mermaid-svg-6C21KtRykcdeft1f .node circle,#mermaid-svg-6C21KtRykcdeft1f .node ellipse,#mermaid-svg-6C21KtRykcdeft1f .node polygon,#mermaid-svg-6C21KtRykcdeft1f .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-6C21KtRykcdeft1f .rough-node .label text,#mermaid-svg-6C21KtRykcdeft1f .node .label text,#mermaid-svg-6C21KtRykcdeft1f .image-shape .label,#mermaid-svg-6C21KtRykcdeft1f .icon-shape .label{text-anchor:middle;}#mermaid-svg-6C21KtRykcdeft1f .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-6C21KtRykcdeft1f .rough-node .label,#mermaid-svg-6C21KtRykcdeft1f .node .label,#mermaid-svg-6C21KtRykcdeft1f .image-shape .label,#mermaid-svg-6C21KtRykcdeft1f .icon-shape .label{text-align:center;}#mermaid-svg-6C21KtRykcdeft1f .node.clickable{cursor:pointer;}#mermaid-svg-6C21KtRykcdeft1f .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-6C21KtRykcdeft1f .arrowheadPath{fill:#333333;}#mermaid-svg-6C21KtRykcdeft1f .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-6C21KtRykcdeft1f .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-6C21KtRykcdeft1f .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6C21KtRykcdeft1f .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-6C21KtRykcdeft1f .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6C21KtRykcdeft1f .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-6C21KtRykcdeft1f .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-6C21KtRykcdeft1f .cluster text{fill:#333;}#mermaid-svg-6C21KtRykcdeft1f .cluster span{color:#333;}#mermaid-svg-6C21KtRykcdeft1f 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-6C21KtRykcdeft1f .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-6C21KtRykcdeft1f rect.text{fill:none;stroke-width:0;}#mermaid-svg-6C21KtRykcdeft1f .icon-shape,#mermaid-svg-6C21KtRykcdeft1f .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6C21KtRykcdeft1f .icon-shape p,#mermaid-svg-6C21KtRykcdeft1f .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-6C21KtRykcdeft1f .icon-shape .label rect,#mermaid-svg-6C21KtRykcdeft1f .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6C21KtRykcdeft1f .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-6C21KtRykcdeft1f .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-6C21KtRykcdeft1f :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Up
生效
未生效
Peer-Link Down
Keepalive
对端大概率存活
双主保护
Isolated/Disabled
两台Leaf可能同时转发
MAC Flapping
BUM重复
二层环路
BUM重复减少
部分已知单播可能中断

Keepalive Up 只能说明独立检测路径仍可判断对端大概率存活,不代表 Peer-Link、状态同步或业务数据面正常。

四、一次 Ping 为什么不够

一次 Ping 只能证明某一时刻、某个源到某个目的完成了一次往返。它不能证明切换期间没有丢包、业务持续稳定、去程和回程都正常,也不能证明其他 VNI、其他流、BUM 和应用层已经收敛。因此应采用连续 Ping、时间戳、设备日志、接口计数和应用探测共同判断。

五、分层观察和时间线

#mermaid-svg-lhmU5sGoeD4RlFFC{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-lhmU5sGoeD4RlFFC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lhmU5sGoeD4RlFFC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lhmU5sGoeD4RlFFC .error-icon{fill:#552222;}#mermaid-svg-lhmU5sGoeD4RlFFC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lhmU5sGoeD4RlFFC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lhmU5sGoeD4RlFFC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lhmU5sGoeD4RlFFC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lhmU5sGoeD4RlFFC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lhmU5sGoeD4RlFFC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lhmU5sGoeD4RlFFC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lhmU5sGoeD4RlFFC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lhmU5sGoeD4RlFFC .marker.cross{stroke:#333333;}#mermaid-svg-lhmU5sGoeD4RlFFC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lhmU5sGoeD4RlFFC p{margin:0;}#mermaid-svg-lhmU5sGoeD4RlFFC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-lhmU5sGoeD4RlFFC .cluster-label text{fill:#333;}#mermaid-svg-lhmU5sGoeD4RlFFC .cluster-label span{color:#333;}#mermaid-svg-lhmU5sGoeD4RlFFC .cluster-label span p{background-color:transparent;}#mermaid-svg-lhmU5sGoeD4RlFFC .label text,#mermaid-svg-lhmU5sGoeD4RlFFC span{fill:#333;color:#333;}#mermaid-svg-lhmU5sGoeD4RlFFC .node rect,#mermaid-svg-lhmU5sGoeD4RlFFC .node circle,#mermaid-svg-lhmU5sGoeD4RlFFC .node ellipse,#mermaid-svg-lhmU5sGoeD4RlFFC .node polygon,#mermaid-svg-lhmU5sGoeD4RlFFC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lhmU5sGoeD4RlFFC .rough-node .label text,#mermaid-svg-lhmU5sGoeD4RlFFC .node .label text,#mermaid-svg-lhmU5sGoeD4RlFFC .image-shape .label,#mermaid-svg-lhmU5sGoeD4RlFFC .icon-shape .label{text-anchor:middle;}#mermaid-svg-lhmU5sGoeD4RlFFC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lhmU5sGoeD4RlFFC .rough-node .label,#mermaid-svg-lhmU5sGoeD4RlFFC .node .label,#mermaid-svg-lhmU5sGoeD4RlFFC .image-shape .label,#mermaid-svg-lhmU5sGoeD4RlFFC .icon-shape .label{text-align:center;}#mermaid-svg-lhmU5sGoeD4RlFFC .node.clickable{cursor:pointer;}#mermaid-svg-lhmU5sGoeD4RlFFC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lhmU5sGoeD4RlFFC .arrowheadPath{fill:#333333;}#mermaid-svg-lhmU5sGoeD4RlFFC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lhmU5sGoeD4RlFFC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lhmU5sGoeD4RlFFC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lhmU5sGoeD4RlFFC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lhmU5sGoeD4RlFFC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lhmU5sGoeD4RlFFC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lhmU5sGoeD4RlFFC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lhmU5sGoeD4RlFFC .cluster text{fill:#333;}#mermaid-svg-lhmU5sGoeD4RlFFC .cluster span{color:#333;}#mermaid-svg-lhmU5sGoeD4RlFFC 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-lhmU5sGoeD4RlFFC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lhmU5sGoeD4RlFFC rect.text{fill:none;stroke-width:0;}#mermaid-svg-lhmU5sGoeD4RlFFC .icon-shape,#mermaid-svg-lhmU5sGoeD4RlFFC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lhmU5sGoeD4RlFFC .icon-shape p,#mermaid-svg-lhmU5sGoeD4RlFFC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lhmU5sGoeD4RlFFC .icon-shape .label rect,#mermaid-svg-lhmU5sGoeD4RlFFC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lhmU5sGoeD4RlFFC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lhmU5sGoeD4RlFFC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lhmU5sGoeD4RlFFC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 故障动作
物理接口/误码
LACP/Eth-Trunk
ESI/EAD/角色/DF
EVPN控制面
MAC/ARP/Aliasing/NVE
VNI/VRF/网关/回程
应用业务

建议记录 T0 故障发生、T1 设备检测、T2 LACP 或角色变化、T3 ESI/EAD 或 EVPN 路径变化、T4 MAC/ARP/Aliasing/硬件表更新、T5 Underlay 探测恢复、T6 Overlay 业务恢复、T7 应用恢复。

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

这是分析模型,不是固定的 30 秒或 60 秒。真实时间必须实测。

六、Underlay 与 Overlay 的证据边界

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

同子网业务失败时,优先检查 VLAN、BD、L2 VNI、NVE Peer、Type 2/MAC/ARP、二层出口和回程。跨子网业务失败时,再检查 Anycast Gateway、Tenant VRF、L3 VNI、Type 5/IP 前缀、三层路由和回程。

七、区分哈希不均和成员未转发

可能是正常哈希不均:所有成员处于 Collecting/Distributing,每个成员收发计数均增长,增加不同源、目的和端口的流后分布变化,没有成员被 Suspend、Inactive 或保护阻塞。

可能是成员没有实际转发:成员虽物理 Up 但未处于有效收发状态,某成员长期没有收发计数,多组流量都完全不命中该成员,Actor/Partner 或 Eth-Trunk 状态异常,或成员被保护机制限制。

验证方法是查看 Eth-Trunk 和 LACP 状态、查看每个成员的收发包/字节/错误计数,再用多组五元组流量测试。所有成员有计数但比例偏斜,可能是哈希分布;某成员长期无计数且状态异常,优先检查聚合或保护。

八、课堂问答、标准答案与解析

问题 1:All-Active 下,Leaf1 一条成员链路故障后,为什么旧流可能丢包,而新流可能正常?

我的回答:另一条 Leaf2 也在工作。

标准答案:All-Active 下 Leaf1 和 Leaf2 都可能是有效业务出口。某条链路故障后,Leaf2 或其他有效成员仍可承载新流;但原来已经按哈希选到故障成员的旧流,在出口撤销、重新哈希或 TCP 重传发生前,可能暂时丢包。

解析:

text 复制代码
旧流:原出口失效,需要重新选择或等待重传
新流:建立时可以避开失效成员

所以"Leaf2 仍工作"是正确原因,但不能推出"所有业务完全无感"。

问题 2:Single-Active 下,Leaf1 整机故障后,为什么不能只看 Leaf2 是否变成 Active?

标准答案:Leaf2 变成 Active 只证明角色切换发生,不能证明业务已经恢复。还要验证 Leaf2 Eth-Trunk/LACP 成员是否有效收发、ESI/EAD 是否更新、EVPN 路径是否撤销或重发布、MAC/ARP/Aliasing 是否指向 Leaf2、VTEP/NVE/VNI 是否正常、VRF 和回程是否可达,以及服务器 Bond 和应用是否恢复。

角色是多归属状态,业务还必须经过数据面、三层和应用层验证。

标准答案:

text 复制代码
1. 双主:两台Leaf可能都认为自己可以独立转发;
2. 二层环路:两个设备同时向同一多归属段转发;
3. MAC Flapping和BUM重复:同一MAC在两台Leaf之间跳变,广播/未知单播/组播可能被重复发送。

Keepalive Up 说明对端仍存活,因此 Peer-Link 断开时更需要保护,不能把 Keepalive Up 当成业务正常。

问题 4:EVPN 邻居仍 Established,但 MAC 表仍指向失效 Leaf,控制面和数据面分别可能存在什么问题?

控制面可能是 Type 1/EAD 撤销未完成、Type 2 未撤销或新路径未发布、Aliasing 仍保留旧候选出口,或者 EVPN 会话存在但相关路由未正确收敛。

数据面可能是本地 MAC 表残留旧出口、硬件转发表未及时编程、LACP/ESI 成员仍被错误视为有效,或保护状态导致新出口被限制。

关键边界:

text 复制代码
EVPN Established = 控制会话存在
MAC指向旧Leaf = 数据面出口异常
真正根因 = 可能来自控制面、聚合层、保护层或硬件更新

问题 5:设计一次单成员链路故障演练时,至少要记录哪几个时间点?

标准答案:

text 复制代码
T0:故障动作发生
T1:物理接口检测到Down
T2:LACP成员退出或状态变化
T3:ESI/EAD、EVPN或Aliasing发生变化
T4:MAC/ARP/硬件转发表更新
T5:Underlay探测恢复
T6:Overlay业务探测恢复
T7:应用或TCP业务恢复

至少要覆盖故障发生、物理检测、聚合/控制面变化、数据面更新和业务恢复。只记录 Ping 什么时候通,无法区分收敛阶段。

九、错误前提与修正

判断 问题类型 修正
Leaf2也在工作,所以旧流一定正常 结论过强 Leaf2可承载新流或部分流,旧流可能因原出口失效短时丢包
Leaf2变成Active就代表业务恢复 混淆角色与业务 还要验证LACP、EVPN、MAC/ARP、VTEP、VRF、回程和应用
双主保护没有生效只会影响广播 范围过窄 还会导致双主、环路、MAC Flapping和BUM重复
EVPN Established但MAC旧出口是控制面问题 跨层归因 表现是数据面异常,根因可能在控制面、LACP或保护层
只记录一次Ping恢复时间 证据不足 记录T0至T7的状态和连续探测结果

十、故障演练记录模板

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

十一、今日复习卡片

text 复制代码
一次Ping:只能证明一次瞬时往返
All-Active:保留其他有效路径,但旧流仍可能短时丢包
Single-Active:角色切换不等于业务恢复
Peer-Link Down + Keepalive Up:重点防双主
EVPN Established:只证明控制会话建立
MAC旧出口:数据面表现,根因可能来自多层
Underlay可达:不等于Overlay业务可达
成员都Up:还要看Collecting/Distributing和计数增长

十二、今日状态

第 22 天课程完成:能够设计 All-Active、Single-Active 和 Peer-Link 故障演练,写出分层预期现象、时间点和恢复证据;能够区分控制面状态、数据面出口和应用业务状态。下一课进入完整故障案例推理,要求根据一组设备输出逐步锁定根因。

相关推荐
龚寿生1 小时前
23-敏捷开发实战:从Scrum到看板的团队协作方法论
android·学习·scrum·敏捷流程
Android系统攻城狮1 小时前
Linux Gstreamer深度解析之gst_audio_channel_reorder_map调用流程与实战(十八)
linux·运维·服务器·音视频进阶·gstreamer音视频进阶
cc_yy_zh2 小时前
学习使用kali抓包
服务器·学习·php
wzdark2 小时前
基于启发式搜索的最优路径规划算法研究4
算法
盛世宏博智慧档案2 小时前
户外配电柜为什么要装POE供电以太网温湿度传感器?
服务器·网络·人工智能·监控·温湿度·配电柜
yunlaodacom2 小时前
AWS亚马逊云服务代理商:EC2和S3为什么建议放在同一Region?跨Region流量费和网络成本怎么规划
网络·云计算·aws
动词ing2 小时前
【学习笔记】数据结构栈与队列(栈先进后出+队列先进先出+括号匹配+消消乐模型)
数据结构·笔记·学习
新时代牛马2 小时前
Linux 防火墙:nftables 与iptables 兼容层
linux·运维·服务器