AIDC 学习日志|第 15 天|EVPN 多归属故障收敛与撤销机制

本节概览

今天把第 14 天的 MAC Flapping 分层排障推进到故障收敛过程。核心内容包括:All-Active 成员链路故障、Single-Active 主备接管、Type 1/EAD 更新、Aliasing 清理、MAC/ESI 数据面刷新、DF 重新选举,以及 Mass Withdrawal 和 MAC Mobility 的区别。今天形成的关键判断是:DF 变化不等于 Single-Active 切换;Mass Withdrawal 处理多归属成员批量失效;MAC Mobility 处理单台主机位置变化。

上一课:\[AIDC学习日志-第14天-MAC-Flapping与EVPN多归属分层排障]

相关课程:\[AIDC学习日志-第13天-EVPN多归属命令验证与状态解读]

相关总览:\[AIDC知识总览-Underlay到VXLAN EVPN完整传输]

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

一、今日学习目标与完成情况

  • 建立 EVPN 多归属正常状态基线
  • 理解 All-Active 成员链路故障后的收敛过程
  • 区分成员链路故障与 Leaf 整机故障
  • 理解 Type 1 per-ES、Type 1 per-EVI/EAD 的撤销和更新
  • 理解 Aliasing 从双成员到单成员的变化
  • 理解 Leaf2 成为 DF 不等于 Leaf2 才开始转发已知单播
  • 区分 All-Active 与 Single-Active 的故障动作
  • 理解 Single-Active 中 Standby 到 Active 的接管
  • 区分 Mass Withdrawal、MAC Mobility、MAC Flapping 和 DF 重新选举
  • 能识别"控制面已更新、数据面仍残留旧出口"的间歇丢包
  • 尚未在真实 CloudEngine/VRP 设备上完成命令和收敛时间实测

今天完成的是理论和模拟状态判断,不等同于真实设备上的执行验证。不同 CloudEngine/VRP 版本的 EVPN 多归属显示字段和收敛行为可能存在差异,实际实验应以设备版本输出为准。

二、实验拓扑和正常基线

#mermaid-svg-QT0loeTp9mfvhFPA{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-QT0loeTp9mfvhFPA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QT0loeTp9mfvhFPA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QT0loeTp9mfvhFPA .error-icon{fill:#552222;}#mermaid-svg-QT0loeTp9mfvhFPA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QT0loeTp9mfvhFPA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QT0loeTp9mfvhFPA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QT0loeTp9mfvhFPA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QT0loeTp9mfvhFPA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QT0loeTp9mfvhFPA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QT0loeTp9mfvhFPA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QT0loeTp9mfvhFPA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QT0loeTp9mfvhFPA .marker.cross{stroke:#333333;}#mermaid-svg-QT0loeTp9mfvhFPA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QT0loeTp9mfvhFPA p{margin:0;}#mermaid-svg-QT0loeTp9mfvhFPA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QT0loeTp9mfvhFPA .cluster-label text{fill:#333;}#mermaid-svg-QT0loeTp9mfvhFPA .cluster-label span{color:#333;}#mermaid-svg-QT0loeTp9mfvhFPA .cluster-label span p{background-color:transparent;}#mermaid-svg-QT0loeTp9mfvhFPA .label text,#mermaid-svg-QT0loeTp9mfvhFPA span{fill:#333;color:#333;}#mermaid-svg-QT0loeTp9mfvhFPA .node rect,#mermaid-svg-QT0loeTp9mfvhFPA .node circle,#mermaid-svg-QT0loeTp9mfvhFPA .node ellipse,#mermaid-svg-QT0loeTp9mfvhFPA .node polygon,#mermaid-svg-QT0loeTp9mfvhFPA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QT0loeTp9mfvhFPA .rough-node .label text,#mermaid-svg-QT0loeTp9mfvhFPA .node .label text,#mermaid-svg-QT0loeTp9mfvhFPA .image-shape .label,#mermaid-svg-QT0loeTp9mfvhFPA .icon-shape .label{text-anchor:middle;}#mermaid-svg-QT0loeTp9mfvhFPA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QT0loeTp9mfvhFPA .rough-node .label,#mermaid-svg-QT0loeTp9mfvhFPA .node .label,#mermaid-svg-QT0loeTp9mfvhFPA .image-shape .label,#mermaid-svg-QT0loeTp9mfvhFPA .icon-shape .label{text-align:center;}#mermaid-svg-QT0loeTp9mfvhFPA .node.clickable{cursor:pointer;}#mermaid-svg-QT0loeTp9mfvhFPA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QT0loeTp9mfvhFPA .arrowheadPath{fill:#333333;}#mermaid-svg-QT0loeTp9mfvhFPA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QT0loeTp9mfvhFPA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QT0loeTp9mfvhFPA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QT0loeTp9mfvhFPA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QT0loeTp9mfvhFPA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QT0loeTp9mfvhFPA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QT0loeTp9mfvhFPA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QT0loeTp9mfvhFPA .cluster text{fill:#333;}#mermaid-svg-QT0loeTp9mfvhFPA .cluster span{color:#333;}#mermaid-svg-QT0loeTp9mfvhFPA 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-QT0loeTp9mfvhFPA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QT0loeTp9mfvhFPA rect.text{fill:none;stroke-width:0;}#mermaid-svg-QT0loeTp9mfvhFPA .icon-shape,#mermaid-svg-QT0loeTp9mfvhFPA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QT0loeTp9mfvhFPA .icon-shape p,#mermaid-svg-QT0loeTp9mfvhFPA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QT0loeTp9mfvhFPA .icon-shape .label rect,#mermaid-svg-QT0loeTp9mfvhFPA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QT0loeTp9mfvhFPA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QT0loeTp9mfvhFPA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QT0loeTp9mfvhFPA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 成员链路
成员链路
Spine1

Underlay
Spine2

Underlay
Leaf1

VTEP 3.3.3.3
Leaf2

VTEP 4.4.4.4
Leaf3

远端观察Leaf
Ethernet Segment

ESI 1001
服务器

Bond/LACP双上联

本节默认业务为:

text 复制代码
ESI:1001
业务:VNI 1010
Leaf1 VTEP:3.3.3.3
Leaf2 VTEP:4.4.4.4
Leaf3:远端发送和观察设备
服务器:双归属、LACP/Bond

All-Active 正常基线

text 复制代码
Leaf1、Leaf2 属于相同 ESI
Leaf1、Leaf2 都参与 VNI 1010
Type 1 per-ES:Leaf1、Leaf2
Type 1 per-EVI/EAD:Leaf1、Leaf2
Type 2:服务器MAC/IP存在
Aliasing:Leaf1 Valid,Leaf2 Valid
VTEP 3.3.3.3、4.4.4.4均可达
MAC表没有持续Flapping
Leaf1可能是DF,Leaf2可能是Non-DF

这里最容易混淆的点是:

text 复制代码
All-Active:
Leaf1、Leaf2都是可用的已知单播成员

DF:
主要是当前EVI向多归属下游交付BUM的角色

Non-DF:
不是故障,也不等于Standby

三、故障一:All-Active 成员链路故障

故障条件:

text 复制代码
Leaf1到服务器的成员链路Down
Leaf2到服务器的成员链路仍然Up
Leaf1到Spine的Underlay仍然正常
Leaf1的VTEP 3.3.3.3仍然可以Ping通
Leaf2的VTEP 4.4.4.4仍然可以Ping通

这不是 Leaf1 整机故障,而是:

text 复制代码
Leaf1的下行多归属成员链路故障

必须区分:

text 复制代码
Leaf1到服务器成员链路Down
≠
Leaf1 VTEP不可达
≠
Leaf1整机故障

1. 故障后的理想控制面变化

text 复制代码
服务器/Leaf侧发现成员链路失效
→ 更新Eth-Trunk/LACP成员状态
→ Leaf1发布成员失效或撤销
→ 远端Leaf收到Type 1/EAD变化
→ 更新ESI和当前EVI成员
→ Aliasing移除Leaf1
→ MAC/ESI数据面清理旧出口

注意这不是瞬时完成的单一动作,通常存在:

text 复制代码
物理检测时间
→ 本地状态处理时间
→ EVPN通告时间
→ BGP传播时间
→ 远端路由计算时间
→ 数据面安装时间

因此故障刚发生时,可能出现:

text 复制代码
Leaf1下行已经Down
但Leaf3仍暂时保留Leaf1
部分流量哈希到Leaf1
→ 间歇性丢包

2. Aliasing 变化

正常时:

text 复制代码
Aliasing:
Leaf1 Valid
Leaf2 Valid

收敛完成后:

text 复制代码
Aliasing:
Leaf1 Removed/Invalid
Leaf2 Valid

如果 Leaf3 仍把 Leaf1 当有效出口,应检查:

text 复制代码
Type 1 per-ES是否更新
Type 1 per-EVI/EAD是否撤销
Aliasing是否清理
MAC/ESI数据面是否刷新
实际流量是否仍哈希到Leaf1

3. Type 2 不一定立即消失

不能简单推断:

text 复制代码
Leaf1成员链路Down
→ Type 2必然立刻消失

Type 2主要描述:

text 复制代码
具体主机的MAC/IP位置

多归属成员的有效出口变化,还要依赖:

text 复制代码
Type 1/EAD
ESI成员状态
Aliasing
数据面出口

所以可能出现:

text 复制代码
Type 2主机信息仍存在
但Aliasing成员从Leaf1、Leaf2减少为Leaf2

4. DF 变化

假设故障前:

text 复制代码
Leaf1 = DF
Leaf2 = Non-DF

成员失效后:

text 复制代码
Leaf2可能成为当前EVI的新DF

但要加范围限定:

text 复制代码
只有当前EVI的DF选举结果发生变化时,
Leaf2才会成为新的DF。

Leaf2 成为 DF 主要影响:

text 复制代码
Broadcast
Unknown Unicast
Multicast

不能理解为:

text 复制代码
Leaf2成为DF
→ Leaf2才开始转发所有已知单播

在 All-Active 中,Leaf2 原本就拥有已知单播转发资格。

5. All-Active 故障时间线

Leaf3 Leaf2 Leaf1 服务器 Leaf3 Leaf2 Leaf1 服务器 #mermaid-svg-A6fb4dRuxq7JOCjU{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-A6fb4dRuxq7JOCjU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-A6fb4dRuxq7JOCjU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-A6fb4dRuxq7JOCjU .error-icon{fill:#552222;}#mermaid-svg-A6fb4dRuxq7JOCjU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-A6fb4dRuxq7JOCjU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-A6fb4dRuxq7JOCjU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-A6fb4dRuxq7JOCjU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-A6fb4dRuxq7JOCjU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-A6fb4dRuxq7JOCjU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-A6fb4dRuxq7JOCjU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-A6fb4dRuxq7JOCjU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-A6fb4dRuxq7JOCjU .marker.cross{stroke:#333333;}#mermaid-svg-A6fb4dRuxq7JOCjU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-A6fb4dRuxq7JOCjU p{margin:0;}#mermaid-svg-A6fb4dRuxq7JOCjU .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-A6fb4dRuxq7JOCjU text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-A6fb4dRuxq7JOCjU .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-A6fb4dRuxq7JOCjU .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-A6fb4dRuxq7JOCjU .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-A6fb4dRuxq7JOCjU .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-A6fb4dRuxq7JOCjU #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-A6fb4dRuxq7JOCjU .sequenceNumber{fill:white;}#mermaid-svg-A6fb4dRuxq7JOCjU #sequencenumber{fill:#333;}#mermaid-svg-A6fb4dRuxq7JOCjU #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-A6fb4dRuxq7JOCjU .messageText{fill:#333;stroke:none;}#mermaid-svg-A6fb4dRuxq7JOCjU .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-A6fb4dRuxq7JOCjU .labelText,#mermaid-svg-A6fb4dRuxq7JOCjU .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-A6fb4dRuxq7JOCjU .loopText,#mermaid-svg-A6fb4dRuxq7JOCjU .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-A6fb4dRuxq7JOCjU .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-A6fb4dRuxq7JOCjU .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-A6fb4dRuxq7JOCjU .noteText,#mermaid-svg-A6fb4dRuxq7JOCjU .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-A6fb4dRuxq7JOCjU .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-A6fb4dRuxq7JOCjU .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-A6fb4dRuxq7JOCjU .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-A6fb4dRuxq7JOCjU .actorPopupMenu{position:absolute;}#mermaid-svg-A6fb4dRuxq7JOCjU .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-A6fb4dRuxq7JOCjU .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-A6fb4dRuxq7JOCjU .actor-man circle,#mermaid-svg-A6fb4dRuxq7JOCjU line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-A6fb4dRuxq7JOCjU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 成员链路断开保留Leaf2成员检测成员失效发布Type 1/EAD成员变化更新ESI/EVI成员移除Leaf1的Aliasing出口刷新MAC/ESI数据面后续已知单播改发Leaf2当前EVI必要时参与DF重新选举

最终理想状态:

text 复制代码
Leaf1:
下行成员失效,不再是服务器有效出口

Leaf2:
继续承担已知单播
必要时成为当前EVI的DF

Leaf3:
删除Leaf1有效Aliasing出口
保留Leaf2

四、成员链路故障与整机故障的区别

项目 成员链路故障 Leaf整机故障
Leaf VTEP 通常仍可达 通常不可达
Leaf到服务器成员 Down 不可用
Underlay 可能完全正常 VTEP路径可能异常
Type 1 成员/EVI状态更新 成员和设备相关路径撤销
Type 2 主机信息可能暂时保留 相关主机路径可能批量撤销
Aliasing 移除故障成员 批量移除该Leaf出口
DF 可能重新选举 通常需要重新选举
优先排查 接入、LACP、ESI、EAD Underlay、VTEP、Type 1、Mass Withdrawal

不能因为 Leaf1 业务不通,就直接判断为 Leaf1 整机故障。

五、故障二:Single-Active 主备接管

改用 Single-Active:

text 复制代码
Leaf1 = Active
Leaf2 = Standby
Leaf1、Leaf2使用相同ESI
服务器使用双上联
两个VTEP都可达

发生:

text 复制代码
Leaf1到服务器的成员链路Down

1. 正常时 Leaf2 是否承载已知单播?

通常不能按 All-Active 的方式理解。

text 复制代码
Leaf1 Active:
正常承载业务

Leaf2 Standby:
等待接管,通常不作为正常活动已知单播出口

这里"通常"是为了保留设备实现差异;判断题场景中应按 Single-Active 主备逻辑处理。

2. 故障后的接管

#mermaid-svg-79hIEGyw0WLmqCHw{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-79hIEGyw0WLmqCHw .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-79hIEGyw0WLmqCHw .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-79hIEGyw0WLmqCHw .error-icon{fill:#552222;}#mermaid-svg-79hIEGyw0WLmqCHw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-79hIEGyw0WLmqCHw .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-79hIEGyw0WLmqCHw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-79hIEGyw0WLmqCHw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-79hIEGyw0WLmqCHw .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-79hIEGyw0WLmqCHw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-79hIEGyw0WLmqCHw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-79hIEGyw0WLmqCHw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-79hIEGyw0WLmqCHw .marker.cross{stroke:#333333;}#mermaid-svg-79hIEGyw0WLmqCHw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-79hIEGyw0WLmqCHw p{margin:0;}#mermaid-svg-79hIEGyw0WLmqCHw defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-79hIEGyw0WLmqCHw g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-79hIEGyw0WLmqCHw g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-79hIEGyw0WLmqCHw g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-79hIEGyw0WLmqCHw g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-79hIEGyw0WLmqCHw g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-79hIEGyw0WLmqCHw .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-79hIEGyw0WLmqCHw .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-79hIEGyw0WLmqCHw .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-79hIEGyw0WLmqCHw .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-79hIEGyw0WLmqCHw .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-79hIEGyw0WLmqCHw .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-79hIEGyw0WLmqCHw .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-79hIEGyw0WLmqCHw .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-79hIEGyw0WLmqCHw .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-79hIEGyw0WLmqCHw .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-79hIEGyw0WLmqCHw .edgeLabel .label text{fill:#333;}#mermaid-svg-79hIEGyw0WLmqCHw .label div .edgeLabel{color:#333;}#mermaid-svg-79hIEGyw0WLmqCHw .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-79hIEGyw0WLmqCHw .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-79hIEGyw0WLmqCHw .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-79hIEGyw0WLmqCHw .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-79hIEGyw0WLmqCHw .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-79hIEGyw0WLmqCHw .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-79hIEGyw0WLmqCHw .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-79hIEGyw0WLmqCHw #statediagram-barbEnd{fill:#333333;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-79hIEGyw0WLmqCHw .cluster-label,#mermaid-svg-79hIEGyw0WLmqCHw .nodeLabel{color:#131300;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-79hIEGyw0WLmqCHw .note-edge{stroke-dasharray:5;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-note text{fill:black;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram-note .nodeLabel{color:black;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagram .edgeLabel{color:red;}#mermaid-svg-79hIEGyw0WLmqCHw #dependencyStart,#mermaid-svg-79hIEGyw0WLmqCHw #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-79hIEGyw0WLmqCHw .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-79hIEGyw0WLmqCHw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Leaf1成员失效
Leaf2成功接管
Leaf2仍为Standby
更新成员和数据面出口
修复接管条件
ActiveLeaf1
Takeover
ActiveLeaf2
ServiceDown
Forwarding

正确过程:

text 复制代码
Leaf1失效
→ Leaf2检测故障
→ Leaf2由Standby切换为Active
→ EVPN成员状态和数据面出口更新
→ 远端改用Leaf2

如果 Leaf2 一直保持 Standby:

text 复制代码
没有新的活动出口
→ 业务中断

这不是双主。

双主要求:

text 复制代码
Leaf1和Leaf2都错误地认为自己是Active

3. Single-Active 中的残留出口

如果 Leaf3 看到:

text 复制代码
Leaf1 = Down
Leaf2 = Active
Type 1/EAD已经更新
Aliasing仍有Leaf1、Leaf2
MAC表仍保留Leaf1
Underlay两个VTEP都可达

说明:

text 复制代码
控制面成员信息部分收敛
但Aliasing/MAC数据面仍残留Leaf1

可能导致:

text 复制代码
部分哈希流量 → Leaf1失效出口 → 丢包
部分哈希流量 → Leaf2活动出口 → 正常

优先检查:

text 复制代码
1. Leaf1的Aliasing有效出口是否清理;
2. MAC/ESI数据面是否清理;
3. 旧Type 2或成员路径是否残留;
4. Single-Active活动成员状态是否同步到远端;
5. 最后复查Underlay。

六、Mass Withdrawal 与 MAC Mobility

1. Mass Withdrawal

Mass Withdrawal 处理的是:

text 复制代码
一个ES成员或Leaf失效,
需要批量撤销与该成员相关的大量路径

例子:

text 复制代码
Leaf1后面有500台服务器
Leaf1整机故障
远端不能逐条等待所有Type 2自然老化

没有批量撤销:

text 复制代码
大量旧Type 2或旧出口继续存在
→ 旧路径黑洞时间较长

使用成员撤销和 Mass Withdrawal:
#mermaid-svg-VZa70DYsunyPrI9Y{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-VZa70DYsunyPrI9Y .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VZa70DYsunyPrI9Y .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VZa70DYsunyPrI9Y .error-icon{fill:#552222;}#mermaid-svg-VZa70DYsunyPrI9Y .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VZa70DYsunyPrI9Y .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VZa70DYsunyPrI9Y .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VZa70DYsunyPrI9Y .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VZa70DYsunyPrI9Y .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VZa70DYsunyPrI9Y .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VZa70DYsunyPrI9Y .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VZa70DYsunyPrI9Y .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VZa70DYsunyPrI9Y .marker.cross{stroke:#333333;}#mermaid-svg-VZa70DYsunyPrI9Y svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VZa70DYsunyPrI9Y p{margin:0;}#mermaid-svg-VZa70DYsunyPrI9Y .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VZa70DYsunyPrI9Y .cluster-label text{fill:#333;}#mermaid-svg-VZa70DYsunyPrI9Y .cluster-label span{color:#333;}#mermaid-svg-VZa70DYsunyPrI9Y .cluster-label span p{background-color:transparent;}#mermaid-svg-VZa70DYsunyPrI9Y .label text,#mermaid-svg-VZa70DYsunyPrI9Y span{fill:#333;color:#333;}#mermaid-svg-VZa70DYsunyPrI9Y .node rect,#mermaid-svg-VZa70DYsunyPrI9Y .node circle,#mermaid-svg-VZa70DYsunyPrI9Y .node ellipse,#mermaid-svg-VZa70DYsunyPrI9Y .node polygon,#mermaid-svg-VZa70DYsunyPrI9Y .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VZa70DYsunyPrI9Y .rough-node .label text,#mermaid-svg-VZa70DYsunyPrI9Y .node .label text,#mermaid-svg-VZa70DYsunyPrI9Y .image-shape .label,#mermaid-svg-VZa70DYsunyPrI9Y .icon-shape .label{text-anchor:middle;}#mermaid-svg-VZa70DYsunyPrI9Y .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-VZa70DYsunyPrI9Y .rough-node .label,#mermaid-svg-VZa70DYsunyPrI9Y .node .label,#mermaid-svg-VZa70DYsunyPrI9Y .image-shape .label,#mermaid-svg-VZa70DYsunyPrI9Y .icon-shape .label{text-align:center;}#mermaid-svg-VZa70DYsunyPrI9Y .node.clickable{cursor:pointer;}#mermaid-svg-VZa70DYsunyPrI9Y .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-VZa70DYsunyPrI9Y .arrowheadPath{fill:#333333;}#mermaid-svg-VZa70DYsunyPrI9Y .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VZa70DYsunyPrI9Y .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VZa70DYsunyPrI9Y .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VZa70DYsunyPrI9Y .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VZa70DYsunyPrI9Y .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VZa70DYsunyPrI9Y .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-VZa70DYsunyPrI9Y .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VZa70DYsunyPrI9Y .cluster text{fill:#333;}#mermaid-svg-VZa70DYsunyPrI9Y .cluster span{color:#333;}#mermaid-svg-VZa70DYsunyPrI9Y 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-VZa70DYsunyPrI9Y .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-VZa70DYsunyPrI9Y rect.text{fill:none;stroke-width:0;}#mermaid-svg-VZa70DYsunyPrI9Y .icon-shape,#mermaid-svg-VZa70DYsunyPrI9Y .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VZa70DYsunyPrI9Y .icon-shape p,#mermaid-svg-VZa70DYsunyPrI9Y .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-VZa70DYsunyPrI9Y .icon-shape .label rect,#mermaid-svg-VZa70DYsunyPrI9Y .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VZa70DYsunyPrI9Y .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-VZa70DYsunyPrI9Y .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-VZa70DYsunyPrI9Y :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Leaf1/ES成员故障
Type 1/EAD撤销
Mass Withdrawal批量清理
移除Leaf1相关Aliasing出口
刷新MAC/ESI数据面
保留Leaf2等有效成员
多台主机业务快速恢复

核心:

text 复制代码
Mass Withdrawal不是只删除一台主机的MAC路由,
而是借助成员失效信息批量清理相关成员路径或出口。

2. MAC Mobility

MAC Mobility 处理的是:

text 复制代码
同一个MAC/IP主机从一个Leaf迁移到另一个Leaf

例子:

text 复制代码
旧位置:
MAC-C → Leaf2,序列号10

新位置:
MAC-C → Leaf3,序列号11

远端收到新旧 Type 2 后:

text 复制代码
比较MAC Mobility序列号
→ 选择更高序列号的新位置
→ 清理或抑制旧位置

远端Leaf Leaf3 Leaf2 主机MAC-C 远端Leaf Leaf3 Leaf2 主机MAC-C #mermaid-svg-iPS3t0dYUTdbjyJu{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-iPS3t0dYUTdbjyJu .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-iPS3t0dYUTdbjyJu .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-iPS3t0dYUTdbjyJu .error-icon{fill:#552222;}#mermaid-svg-iPS3t0dYUTdbjyJu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iPS3t0dYUTdbjyJu .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-iPS3t0dYUTdbjyJu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iPS3t0dYUTdbjyJu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iPS3t0dYUTdbjyJu .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-iPS3t0dYUTdbjyJu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iPS3t0dYUTdbjyJu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iPS3t0dYUTdbjyJu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iPS3t0dYUTdbjyJu .marker.cross{stroke:#333333;}#mermaid-svg-iPS3t0dYUTdbjyJu svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iPS3t0dYUTdbjyJu p{margin:0;}#mermaid-svg-iPS3t0dYUTdbjyJu .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-iPS3t0dYUTdbjyJu text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-iPS3t0dYUTdbjyJu .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-iPS3t0dYUTdbjyJu .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-iPS3t0dYUTdbjyJu .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-iPS3t0dYUTdbjyJu .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-iPS3t0dYUTdbjyJu #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-iPS3t0dYUTdbjyJu .sequenceNumber{fill:white;}#mermaid-svg-iPS3t0dYUTdbjyJu #sequencenumber{fill:#333;}#mermaid-svg-iPS3t0dYUTdbjyJu #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-iPS3t0dYUTdbjyJu .messageText{fill:#333;stroke:none;}#mermaid-svg-iPS3t0dYUTdbjyJu .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-iPS3t0dYUTdbjyJu .labelText,#mermaid-svg-iPS3t0dYUTdbjyJu .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-iPS3t0dYUTdbjyJu .loopText,#mermaid-svg-iPS3t0dYUTdbjyJu .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-iPS3t0dYUTdbjyJu .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-iPS3t0dYUTdbjyJu .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-iPS3t0dYUTdbjyJu .noteText,#mermaid-svg-iPS3t0dYUTdbjyJu .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-iPS3t0dYUTdbjyJu .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-iPS3t0dYUTdbjyJu .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-iPS3t0dYUTdbjyJu .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-iPS3t0dYUTdbjyJu .actorPopupMenu{position:absolute;}#mermaid-svg-iPS3t0dYUTdbjyJu .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-iPS3t0dYUTdbjyJu .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-iPS3t0dYUTdbjyJu .actor-man circle,#mermaid-svg-iPS3t0dYUTdbjyJu line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-iPS3t0dYUTdbjyJu :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 主机迁移到Leaf3 旧位置发送报文Type 2,序列号10新位置发送报文Type 2,序列号11比较序列号选择Leaf3的新位置后续流量发往Leaf3

MAC Mobility 关注:

text 复制代码
这一台主机现在在哪里?

Mass Withdrawal 关注:

text 复制代码
这个多归属成员整体失效,相关大量出口如何快速撤销?

3. 不要把所有MAC变化都叫MAC Mobility

现象 正确判断
MAC从Leaf2一次迁移到Leaf3,序列号递增 MAC Mobility
MAC在Leaf2、Leaf3之间持续来回变化 MAC Flapping
大量主机同时失去Leaf1出口 Mass Withdrawal
两台真实设备使用相同MAC MAC冲突/重复配置
Leaf1原DF失效,Leaf2接替BUM DF重新选举

持续变化示例:

text 复制代码
MAC-C:
Leaf2,序列号10
Leaf3,序列号11
Leaf2,序列号12
Leaf3,序列号13

这不是稳定迁移,而是 MAC Flapping,需排查:

text 复制代码
二层环路
服务器双活异常
ESI配置错误
虚拟机反复迁移
重复MAC
双主保护失效

七、四种机制的总对比

机制 解决的问题 主要信息 典型故障
Mass Withdrawal 批量撤销成员相关路径 Type 1/EAD、ESI成员 Leaf/ES成员故障
MAC Mobility 更新单台主机新位置 Type 2、序列号 主机/虚拟机迁移
MAC Flapping 识别位置持续反复变化 MAC学习历史、序列号变化 环路、双活、重复MAC
DF重新选举 重新决定BUM下游交付者 ESI + EVI/VNI DF成员失效
Aliasing更新 调整已知单播候选成员 Type 1 + Type 2 + Underlay 成员增删、出口失效
Single-Active接管 活动/备用成员切换 Active/Standby状态 活动成员故障

#mermaid-svg-unoBT0w4ZKfY7ghD{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-unoBT0w4ZKfY7ghD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-unoBT0w4ZKfY7ghD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-unoBT0w4ZKfY7ghD .error-icon{fill:#552222;}#mermaid-svg-unoBT0w4ZKfY7ghD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-unoBT0w4ZKfY7ghD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-unoBT0w4ZKfY7ghD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-unoBT0w4ZKfY7ghD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-unoBT0w4ZKfY7ghD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-unoBT0w4ZKfY7ghD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-unoBT0w4ZKfY7ghD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-unoBT0w4ZKfY7ghD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-unoBT0w4ZKfY7ghD .marker.cross{stroke:#333333;}#mermaid-svg-unoBT0w4ZKfY7ghD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-unoBT0w4ZKfY7ghD p{margin:0;}#mermaid-svg-unoBT0w4ZKfY7ghD .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-unoBT0w4ZKfY7ghD .cluster-label text{fill:#333;}#mermaid-svg-unoBT0w4ZKfY7ghD .cluster-label span{color:#333;}#mermaid-svg-unoBT0w4ZKfY7ghD .cluster-label span p{background-color:transparent;}#mermaid-svg-unoBT0w4ZKfY7ghD .label text,#mermaid-svg-unoBT0w4ZKfY7ghD span{fill:#333;color:#333;}#mermaid-svg-unoBT0w4ZKfY7ghD .node rect,#mermaid-svg-unoBT0w4ZKfY7ghD .node circle,#mermaid-svg-unoBT0w4ZKfY7ghD .node ellipse,#mermaid-svg-unoBT0w4ZKfY7ghD .node polygon,#mermaid-svg-unoBT0w4ZKfY7ghD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-unoBT0w4ZKfY7ghD .rough-node .label text,#mermaid-svg-unoBT0w4ZKfY7ghD .node .label text,#mermaid-svg-unoBT0w4ZKfY7ghD .image-shape .label,#mermaid-svg-unoBT0w4ZKfY7ghD .icon-shape .label{text-anchor:middle;}#mermaid-svg-unoBT0w4ZKfY7ghD .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-unoBT0w4ZKfY7ghD .rough-node .label,#mermaid-svg-unoBT0w4ZKfY7ghD .node .label,#mermaid-svg-unoBT0w4ZKfY7ghD .image-shape .label,#mermaid-svg-unoBT0w4ZKfY7ghD .icon-shape .label{text-align:center;}#mermaid-svg-unoBT0w4ZKfY7ghD .node.clickable{cursor:pointer;}#mermaid-svg-unoBT0w4ZKfY7ghD .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-unoBT0w4ZKfY7ghD .arrowheadPath{fill:#333333;}#mermaid-svg-unoBT0w4ZKfY7ghD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-unoBT0w4ZKfY7ghD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-unoBT0w4ZKfY7ghD .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-unoBT0w4ZKfY7ghD .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-unoBT0w4ZKfY7ghD .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-unoBT0w4ZKfY7ghD .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-unoBT0w4ZKfY7ghD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-unoBT0w4ZKfY7ghD .cluster text{fill:#333;}#mermaid-svg-unoBT0w4ZKfY7ghD .cluster span{color:#333;}#mermaid-svg-unoBT0w4ZKfY7ghD 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-unoBT0w4ZKfY7ghD .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-unoBT0w4ZKfY7ghD rect.text{fill:none;stroke-width:0;}#mermaid-svg-unoBT0w4ZKfY7ghD .icon-shape,#mermaid-svg-unoBT0w4ZKfY7ghD .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-unoBT0w4ZKfY7ghD .icon-shape p,#mermaid-svg-unoBT0w4ZKfY7ghD .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-unoBT0w4ZKfY7ghD .icon-shape .label rect,#mermaid-svg-unoBT0w4ZKfY7ghD .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-unoBT0w4ZKfY7ghD .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-unoBT0w4ZKfY7ghD .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-unoBT0w4ZKfY7ghD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 多归属成员/Leaf故障
Mass Withdrawal
DF重新选举
Aliasing清理
单台主机迁移
MAC Mobility
MAC持续来回跳变
MAC Flapping排障
活动成员故障
Single-Active接管

八、课堂问答与批改记录

本节保留今天课堂中的原始回答、批改和概念纠正。独立 CSDN 稿件不包含课堂问答。

第一组:All-Active 成员链路故障

故障前:

text 复制代码
Type 1 per-ES:
Leaf1 Valid
Leaf2 Valid

Type 1 per-EVI:
Leaf1 Valid
Leaf2 Valid

Aliasing:
Leaf1 Valid
Leaf2 Valid

DF:
Leaf1 = DF
Leaf2 = Non-DF

故障:

text 复制代码
Leaf1到服务器成员链路Down
Leaf1 VTEP仍可达
Leaf2 VTEP仍可达

问题 1:这是 Leaf1 整机故障,还是成员链路故障?

我的回答:成员链路故障。

批改:正确。VTEP仍可达,且只有下行成员异常,不能直接判断整机故障。

问题 2:Underlay 是否一定存在问题?

我的回答:不一定。

批改:正确。两个VTEP都可达,Underlay外层路径可以保持正常。

问题 3:收敛完成后,Aliasing中应该保留哪些成员?

我的回答:Leaf2。

批改:正确。Leaf1不再是有效服务器出口,Leaf2继续承担已知单播。

问题 4:Leaf2 是否需要从 Standby 切换为 Active?

我的回答:不用。

批改:正确。All-Active中Leaf2本来就是可用转发成员,不需要主备切换。

问题 5:如果收敛期间部分流量丢包,最可能是哪个状态还没有更新?

我的回答:Leaf3仍然保留Leaf1。

批改:正确。完整描述是:Leaf3的Type 1/EAD、Aliasing或MAC/ESI数据面仍残留Leaf1,哈希到Leaf1的流量会丢失。

第二组:Mass Withdrawal、MAC Mobility、MAC Flapping、DF

问题 1:Leaf1整机故障,后面有500台服务器,远端需要快速删除Leaf1相关出口。

我的回答:Mass Withdrawal。

批改:正确。通过成员撤销和批量清理减少逐条老化造成的黑洞窗口。

问题 2:服务器MAC-C从Leaf2迁移到Leaf3,新的Type 2序列号更高。

我的回答:MAC Mobility。

批改:正确。远端根据更高序列号选择新位置。

问题 3:MAC-C在Leaf2和Leaf3之间每几秒来回变化。

我的回答:MAC Flapping。

批改:正确。这不是一次正常迁移,应排查环路、重复MAC、双活或虚拟机反复迁移。

问题 4:Leaf1原来是DF,成员失效后Leaf2接替当前EVI的BUM转发。

我的回答:Single-Active。

批改:不准确。直接机制是 DF 重新选举。只有明确存在 Active/Standby 并发生 Standby 到 Active 接管,才能判断为 Single-Active 切换。

第三组:All-Active中的DF和已知单播

场景:

text 复制代码
Leaf1、Leaf2为All-Active
Leaf1成员链路故障
Leaf2继续转发已知单播
Leaf2成为当前EVI的DF

问题 1:是否发生 Single-Active 主备切换?

我的回答:否。

批改:正确。All-Active不是一主一备。

问题 2:是否发生 DF 重新选举?

我的回答:是的。

批改:正确。当前EVI的BUM责任可能从Leaf1转移到Leaf2。

问题 3:Leaf2成为DF后,是否只有Leaf2能转发已知单播?

我的回答:如果Leaf1故障,是的。

批改:因果关系不准确。Leaf2成为DF不决定已知单播。若Leaf1已经从Aliasing和数据面有效出口中移除,实际只剩Leaf2;如果Leaf1仍残留,部分流量仍可能错误哈希到Leaf1。已知单播由Type 2、Aliasing、MAC/ESI数据面和VTEP可达性共同决定。

问题 4:远端仍把Leaf1放在Aliasing中,优先查什么?

我的回答:MAC出口。

批改:方向正确,但应分层检查:

text 复制代码
Type 1/EAD是否撤销Leaf1
Aliasing是否移除Leaf1
MAC/ESI数据面是否清理
实际流量是否仍哈希到Leaf1

不能只看普通MAC表。

第四组:Single-Active残留出口

场景:

text 复制代码
Single-Active:
Leaf1 = Down
Leaf2 = Active

Leaf3:
Type 1/EAD已更新
Aliasing仍显示Leaf1、Leaf2
MAC表仍保留Leaf1

Underlay:
Leaf1、Leaf2的VTEP都可达

问题 1:控制面的哪部分已经收敛?

我的回答:Type 1/EAD。

批改:正确。远端已收到服务成员状态更新。

问题 2:哪些数据面状态还没有收敛?

我的回答:Aliasing、MAC表。

批改:基本正确。还包括实际有效出口集合和MAC/ESI转发表。

问题 3:为什么此时仍可能间歇性丢包?

我的回答:MAC表是否仍保留Leaf1。

批改:关键证据正确,但要补完整:Aliasing或MAC数据面仍保留Leaf1,哈希会把部分流量送到已失效出口,因而出现部分成功、部分丢包。

问题 4:应优先清理Leaf1的Aliasing,还是检查Underlay?

我的回答:优先清理Leaf1的Aliasing。

批改:正确。题目已说明VTEP可达,Underlay不是第一方向。

问题 5:更接近主备切换失败,还是控制面与数据面不同步?

我的回答:控制面与数据面不同步。

批改:正确。Leaf2已经是Active,主备接管完成;残留Leaf1属于控制面成员更新与数据面出口清理不同步。

九、今天的错误前提和修正

原判断 问题 更准确的判断
Leaf2接替DF就是Single-Active 把DF角色变化和主备模式混淆 直接机制是DF重新选举
All-Active中Leaf2成为DF后只有Leaf2能转发单播 把BUM角色扩大为已知单播角色 单播由Type 2、Aliasing、MAC数据面和VTEP决定
Type 2一定随成员链路立刻消失 混淆主机位置信息和成员出口状态 Type 2可能保留,Aliasing/成员出口先变化
MAC Mobility等于所有MAC位置变化 忽略持续跳变和批量失效 一次迁移是Mobility,持续来回是Flapping,成员批量失效是Mass Withdrawal
远端出口异常只看MAC表 忽略Type 1/EAD和Aliasing 应比较控制面成员、Aliasing、MAC/ESI数据面和实际出口
VTEP仍可达就说明业务完全正常 只验证Underlay 下行成员、VNI、MAC、LACP仍可能异常

十、完整故障排障主线

#mermaid-svg-OYJKLYGyo1Jgfkp0{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-OYJKLYGyo1Jgfkp0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .error-icon{fill:#552222;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .marker.cross{stroke:#333333;}#mermaid-svg-OYJKLYGyo1Jgfkp0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OYJKLYGyo1Jgfkp0 p{margin:0;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .cluster-label text{fill:#333;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .cluster-label span{color:#333;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .cluster-label span p{background-color:transparent;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .label text,#mermaid-svg-OYJKLYGyo1Jgfkp0 span{fill:#333;color:#333;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .node rect,#mermaid-svg-OYJKLYGyo1Jgfkp0 .node circle,#mermaid-svg-OYJKLYGyo1Jgfkp0 .node ellipse,#mermaid-svg-OYJKLYGyo1Jgfkp0 .node polygon,#mermaid-svg-OYJKLYGyo1Jgfkp0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .rough-node .label text,#mermaid-svg-OYJKLYGyo1Jgfkp0 .node .label text,#mermaid-svg-OYJKLYGyo1Jgfkp0 .image-shape .label,#mermaid-svg-OYJKLYGyo1Jgfkp0 .icon-shape .label{text-anchor:middle;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .rough-node .label,#mermaid-svg-OYJKLYGyo1Jgfkp0 .node .label,#mermaid-svg-OYJKLYGyo1Jgfkp0 .image-shape .label,#mermaid-svg-OYJKLYGyo1Jgfkp0 .icon-shape .label{text-align:center;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .node.clickable{cursor:pointer;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .arrowheadPath{fill:#333333;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-OYJKLYGyo1Jgfkp0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OYJKLYGyo1Jgfkp0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-OYJKLYGyo1Jgfkp0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .cluster text{fill:#333;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .cluster span{color:#333;}#mermaid-svg-OYJKLYGyo1Jgfkp0 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-OYJKLYGyo1Jgfkp0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-OYJKLYGyo1Jgfkp0 rect.text{fill:none;stroke-width:0;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .icon-shape,#mermaid-svg-OYJKLYGyo1Jgfkp0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .icon-shape p,#mermaid-svg-OYJKLYGyo1Jgfkp0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .icon-shape .label rect,#mermaid-svg-OYJKLYGyo1Jgfkp0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OYJKLYGyo1Jgfkp0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-OYJKLYGyo1Jgfkp0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-OYJKLYGyo1Jgfkp0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 成员链路Down
Leaf整机故障
主机迁移
MAC反复跳变
先记录正常基线
发生什么故障?
查接口/LACP/ESI/EAD
查VTEP/Underlay/Type1/Mass Withdrawal
查Type2/MAC Mobility序列号
查MAC Flapping/环路/双主
Type 1 per-ES/per-EVI
Type 2位置
MAC学习历史
Aliasing有效成员
DF/BUM角色
VTEP /32 Underlay
MAC/ESI/NVE数据面
实际流量与恢复时间

推荐记录的证据:

text 复制代码
1. 故障发生时间;
2. 故障前正常基线;
3. 成员接口和Eth-Trunk/LACP;
4. ESI、per-ES、per-EVI/EAD;
5. Type 2及MAC Mobility序列;
6. Aliasing成员;
7. DF状态;
8. VTEP /32与指定源Ping;
9. MAC/ESI/NVE数据面;
10. BUM和已知单播测试;
11. 修复、收敛和业务恢复时间。

十一、今日核心记忆卡

text 复制代码
成员链路故障:
Leaf VTEP可能仍可达,优先看接入、ESI、EAD、Aliasing

Leaf整机故障:
VTEP可能不可达,检查Underlay、Type 1、Mass Withdrawal

All-Active:
剩余成员继续转发,不需要Standby到Active切换

Single-Active:
活动成员故障,备用成员必须接管

Mass Withdrawal:
批量撤销成员相关路径

MAC Mobility:
更新单台主机迁移后的位置

MAC Flapping:
同一MAC持续在多个位置来回变化

DF重新选举:
改变当前EVI的BUM下游责任

Aliasing:
决定多个多归属成员能否作为已知单播候选出口

控制面更新:
不等于数据面已经清理旧出口

最重要的工程判断:

text 复制代码
DF变化 ≠ Single-Active切换
Mass Withdrawal ≠ MAC Mobility
MAC Mobility ≠ MAC Flapping
VTEP可达 ≠ 业务下行一定正常
控制面已更新 ≠ 数据面旧出口已清理

十二、下一课待完成

今天最后留下的四个复习场景尚未作答,下一课开始时继续:

text 复制代码
场景A:
Leaf1到服务器成员链路Down,但Leaf1 VTEP仍可达

场景B:
Leaf1整机故障,Leaf1 VTEP不可达

场景C:
Leaf1、Leaf2到服务器正常,但Peer-Link Down、Keepalive正常

需要判断:

text 复制代码
1. 场景A优先查成员接口、Underlay,还是两者都查?
2. 场景B除Type 1/Aliasing外,还必须检查什么?
3. 场景C最需要防止什么?
4. 场景C中Keepalive正常说明什么?

今日状态:第 15 天理论和模拟故障判断完成;上述四个场景题留作下一课复习,真实设备命令和收敛时间实验待后续完成。

相关推荐
国科安芯2 小时前
轨道供电韧性:ASP4644四通道降压架构在低轨卫星平台电源管理中的适用性分析
运维·网络·数据库·嵌入式硬件·架构·状态模式·低轨卫星星座
M78佐菲2 小时前
Linux学习笔记:进程
linux·笔记·学习·算法
少陽君3 小时前
用于InfiniBand网络的实时终端监控器——高速互连的htop
网络
点我头像干啥3 小时前
004:多个PDF文件合并
开发语言·pdf·php
我命由我123453 小时前
人脸识别 - 勒克斯(光线照射到物体表面上的明亮程度)
android·java·学习·java-ee·人脸识别·学习方法·android runtime
AC赳赳老秦4 小时前
企业级合规审计体系:用 OpenClaw 落地采集全链路留痕,自动生成合规审计报告
java·python·django·beautifulsoup·php·deepseek·openclaw
Logintern095 小时前
【每天学习一点点】MPI是什么?
学习·mpi·多机训练
fengci.5 小时前
提示词注入学习小结
学习
发量惊人的中年网工5 小时前
如何验证DDoS高防真的生效?从源站隐藏到正常访问的完整验收方法
运维·网络·数据库·ddos