本节概览
今天围绕"多归属业务是否真正恢复"进行验收训练,重点区分 All-Active 成员故障、Single-Active 主备切换、LACP 接入哈希和 Underlay ECMP 哈希。核心结论:All-Active 下另一台 Leaf 仍可承载业务,但故障成员上的旧流可能短时丢包;链路或成员 Up 不等于流量一定均匀;MAC 切到新 Leaf 也不等于应用和回程已经恢复。
一、今日目标与完成情况
- 验收 All-Active 成员故障后的业务状态
- 区分正常哈希不均与 LACP 成员故障
- 复习 ECMP 的等价下一跳条件
- 解释 Single-Active 主备切换期间的业务中断
- 从 MAC 出口继续向聚合、EVPN、三层和服务器侧排查
- 完成 5 个场景题并记录原回答和批改
- 尚未在真实 CloudEngine/VRP 设备上测量流量分布和切换时间
二、All-Active 成员故障的正确理解
All-Active 下,Leaf1 和 Leaf2 都可能承载服务器的已知单播。若 Leaf1 的一条成员链路故障:
text
Leaf2仍可能正常工作
→ 新流可选择剩余有效成员
→ 经过故障成员的旧流可能丢包/重传
→ 总可用带宽下降
→ 不一定所有业务同时中断
#mermaid-svg-ef3eUXOkQOhMqXZo{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-ef3eUXOkQOhMqXZo .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ef3eUXOkQOhMqXZo .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ef3eUXOkQOhMqXZo .error-icon{fill:#552222;}#mermaid-svg-ef3eUXOkQOhMqXZo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ef3eUXOkQOhMqXZo .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ef3eUXOkQOhMqXZo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ef3eUXOkQOhMqXZo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ef3eUXOkQOhMqXZo .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ef3eUXOkQOhMqXZo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ef3eUXOkQOhMqXZo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ef3eUXOkQOhMqXZo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ef3eUXOkQOhMqXZo .marker.cross{stroke:#333333;}#mermaid-svg-ef3eUXOkQOhMqXZo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ef3eUXOkQOhMqXZo p{margin:0;}#mermaid-svg-ef3eUXOkQOhMqXZo .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ef3eUXOkQOhMqXZo .cluster-label text{fill:#333;}#mermaid-svg-ef3eUXOkQOhMqXZo .cluster-label span{color:#333;}#mermaid-svg-ef3eUXOkQOhMqXZo .cluster-label span p{background-color:transparent;}#mermaid-svg-ef3eUXOkQOhMqXZo .label text,#mermaid-svg-ef3eUXOkQOhMqXZo span{fill:#333;color:#333;}#mermaid-svg-ef3eUXOkQOhMqXZo .node rect,#mermaid-svg-ef3eUXOkQOhMqXZo .node circle,#mermaid-svg-ef3eUXOkQOhMqXZo .node ellipse,#mermaid-svg-ef3eUXOkQOhMqXZo .node polygon,#mermaid-svg-ef3eUXOkQOhMqXZo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ef3eUXOkQOhMqXZo .rough-node .label text,#mermaid-svg-ef3eUXOkQOhMqXZo .node .label text,#mermaid-svg-ef3eUXOkQOhMqXZo .image-shape .label,#mermaid-svg-ef3eUXOkQOhMqXZo .icon-shape .label{text-anchor:middle;}#mermaid-svg-ef3eUXOkQOhMqXZo .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ef3eUXOkQOhMqXZo .rough-node .label,#mermaid-svg-ef3eUXOkQOhMqXZo .node .label,#mermaid-svg-ef3eUXOkQOhMqXZo .image-shape .label,#mermaid-svg-ef3eUXOkQOhMqXZo .icon-shape .label{text-align:center;}#mermaid-svg-ef3eUXOkQOhMqXZo .node.clickable{cursor:pointer;}#mermaid-svg-ef3eUXOkQOhMqXZo .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ef3eUXOkQOhMqXZo .arrowheadPath{fill:#333333;}#mermaid-svg-ef3eUXOkQOhMqXZo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ef3eUXOkQOhMqXZo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ef3eUXOkQOhMqXZo .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ef3eUXOkQOhMqXZo .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ef3eUXOkQOhMqXZo .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ef3eUXOkQOhMqXZo .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ef3eUXOkQOhMqXZo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ef3eUXOkQOhMqXZo .cluster text{fill:#333;}#mermaid-svg-ef3eUXOkQOhMqXZo .cluster span{color:#333;}#mermaid-svg-ef3eUXOkQOhMqXZo 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-ef3eUXOkQOhMqXZo .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ef3eUXOkQOhMqXZo rect.text{fill:none;stroke-width:0;}#mermaid-svg-ef3eUXOkQOhMqXZo .icon-shape,#mermaid-svg-ef3eUXOkQOhMqXZo .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ef3eUXOkQOhMqXZo .icon-shape p,#mermaid-svg-ef3eUXOkQOhMqXZo .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ef3eUXOkQOhMqXZo .icon-shape .label rect,#mermaid-svg-ef3eUXOkQOhMqXZo .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ef3eUXOkQOhMqXZo .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ef3eUXOkQOhMqXZo .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ef3eUXOkQOhMqXZo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 成员故障
服务器
接入侧哈希
Leaf1成员
Leaf2成员
旧流可能丢包
继续承载新流和部分业务
"另一台 Leaf 仍在工作"是正确原因,但不能推导为"完全没有业务影响"。影响范围取决于流量是否命中故障成员、是否发生重新哈希以及服务器和应用的重传机制。
三、链路都 Up 但流量不均
LACP 成员显示 Up,只说明物理和部分协商状态正常。只有在成员真正处于有效收发状态时,才可作为聚合转发路径。
即使所有成员都有效,流量仍可能不均:
text
流数量少
大流数量少
哈希输入分布集中
哈希算法粒度较粗
服务器端和交换机端采用不同的哈希字段
因此:
text
一条链路流量高 ≠ 一定故障
所有成员Up ≠ 一定均匀
判断顺序:
#mermaid-svg-DtCO4DBeyZc35ldB{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-DtCO4DBeyZc35ldB .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DtCO4DBeyZc35ldB .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DtCO4DBeyZc35ldB .error-icon{fill:#552222;}#mermaid-svg-DtCO4DBeyZc35ldB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DtCO4DBeyZc35ldB .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DtCO4DBeyZc35ldB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DtCO4DBeyZc35ldB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DtCO4DBeyZc35ldB .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DtCO4DBeyZc35ldB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DtCO4DBeyZc35ldB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DtCO4DBeyZc35ldB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DtCO4DBeyZc35ldB .marker.cross{stroke:#333333;}#mermaid-svg-DtCO4DBeyZc35ldB svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DtCO4DBeyZc35ldB p{margin:0;}#mermaid-svg-DtCO4DBeyZc35ldB .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DtCO4DBeyZc35ldB .cluster-label text{fill:#333;}#mermaid-svg-DtCO4DBeyZc35ldB .cluster-label span{color:#333;}#mermaid-svg-DtCO4DBeyZc35ldB .cluster-label span p{background-color:transparent;}#mermaid-svg-DtCO4DBeyZc35ldB .label text,#mermaid-svg-DtCO4DBeyZc35ldB span{fill:#333;color:#333;}#mermaid-svg-DtCO4DBeyZc35ldB .node rect,#mermaid-svg-DtCO4DBeyZc35ldB .node circle,#mermaid-svg-DtCO4DBeyZc35ldB .node ellipse,#mermaid-svg-DtCO4DBeyZc35ldB .node polygon,#mermaid-svg-DtCO4DBeyZc35ldB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DtCO4DBeyZc35ldB .rough-node .label text,#mermaid-svg-DtCO4DBeyZc35ldB .node .label text,#mermaid-svg-DtCO4DBeyZc35ldB .image-shape .label,#mermaid-svg-DtCO4DBeyZc35ldB .icon-shape .label{text-anchor:middle;}#mermaid-svg-DtCO4DBeyZc35ldB .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DtCO4DBeyZc35ldB .rough-node .label,#mermaid-svg-DtCO4DBeyZc35ldB .node .label,#mermaid-svg-DtCO4DBeyZc35ldB .image-shape .label,#mermaid-svg-DtCO4DBeyZc35ldB .icon-shape .label{text-align:center;}#mermaid-svg-DtCO4DBeyZc35ldB .node.clickable{cursor:pointer;}#mermaid-svg-DtCO4DBeyZc35ldB .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DtCO4DBeyZc35ldB .arrowheadPath{fill:#333333;}#mermaid-svg-DtCO4DBeyZc35ldB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DtCO4DBeyZc35ldB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DtCO4DBeyZc35ldB .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DtCO4DBeyZc35ldB .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DtCO4DBeyZc35ldB .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DtCO4DBeyZc35ldB .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DtCO4DBeyZc35ldB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DtCO4DBeyZc35ldB .cluster text{fill:#333;}#mermaid-svg-DtCO4DBeyZc35ldB .cluster span{color:#333;}#mermaid-svg-DtCO4DBeyZc35ldB 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-DtCO4DBeyZc35ldB .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DtCO4DBeyZc35ldB rect.text{fill:none;stroke-width:0;}#mermaid-svg-DtCO4DBeyZc35ldB .icon-shape,#mermaid-svg-DtCO4DBeyZc35ldB .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DtCO4DBeyZc35ldB .icon-shape p,#mermaid-svg-DtCO4DBeyZc35ldB .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DtCO4DBeyZc35ldB .icon-shape .label rect,#mermaid-svg-DtCO4DBeyZc35ldB .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DtCO4DBeyZc35ldB .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DtCO4DBeyZc35ldB .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DtCO4DBeyZc35ldB :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
否
是
否
是
是
否
发现流量不均
成员物理状态正常?
查接口、光模块、误码
LACP有效收发?
查Eth-Trunk、Actor/Partner、Suspend
流量样本是否足够?
增加不同源/目的/端口流
哈希分布是否长期集中?
评估哈希算法、流模型和大流拆分
视为正常动态分布
四、Underlay ECMP 再确认
Underlay 中有两条物理路径,不代表一定形成 ECMP。需要确认:
text
目标前缀和掩码一致
OSPF/BGP计算出的总Cost相等
下一跳都可递归到达
路由策略没有过滤或改变路径
设备支持并安装多条等价下一跳
#mermaid-svg-qPvMaiVw6To4Fc7v{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-qPvMaiVw6To4Fc7v .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-qPvMaiVw6To4Fc7v .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-qPvMaiVw6To4Fc7v .error-icon{fill:#552222;}#mermaid-svg-qPvMaiVw6To4Fc7v .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-qPvMaiVw6To4Fc7v .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-qPvMaiVw6To4Fc7v .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-qPvMaiVw6To4Fc7v .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-qPvMaiVw6To4Fc7v .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-qPvMaiVw6To4Fc7v .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-qPvMaiVw6To4Fc7v .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-qPvMaiVw6To4Fc7v .marker{fill:#333333;stroke:#333333;}#mermaid-svg-qPvMaiVw6To4Fc7v .marker.cross{stroke:#333333;}#mermaid-svg-qPvMaiVw6To4Fc7v svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-qPvMaiVw6To4Fc7v p{margin:0;}#mermaid-svg-qPvMaiVw6To4Fc7v .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-qPvMaiVw6To4Fc7v .cluster-label text{fill:#333;}#mermaid-svg-qPvMaiVw6To4Fc7v .cluster-label span{color:#333;}#mermaid-svg-qPvMaiVw6To4Fc7v .cluster-label span p{background-color:transparent;}#mermaid-svg-qPvMaiVw6To4Fc7v .label text,#mermaid-svg-qPvMaiVw6To4Fc7v span{fill:#333;color:#333;}#mermaid-svg-qPvMaiVw6To4Fc7v .node rect,#mermaid-svg-qPvMaiVw6To4Fc7v .node circle,#mermaid-svg-qPvMaiVw6To4Fc7v .node ellipse,#mermaid-svg-qPvMaiVw6To4Fc7v .node polygon,#mermaid-svg-qPvMaiVw6To4Fc7v .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-qPvMaiVw6To4Fc7v .rough-node .label text,#mermaid-svg-qPvMaiVw6To4Fc7v .node .label text,#mermaid-svg-qPvMaiVw6To4Fc7v .image-shape .label,#mermaid-svg-qPvMaiVw6To4Fc7v .icon-shape .label{text-anchor:middle;}#mermaid-svg-qPvMaiVw6To4Fc7v .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-qPvMaiVw6To4Fc7v .rough-node .label,#mermaid-svg-qPvMaiVw6To4Fc7v .node .label,#mermaid-svg-qPvMaiVw6To4Fc7v .image-shape .label,#mermaid-svg-qPvMaiVw6To4Fc7v .icon-shape .label{text-align:center;}#mermaid-svg-qPvMaiVw6To4Fc7v .node.clickable{cursor:pointer;}#mermaid-svg-qPvMaiVw6To4Fc7v .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-qPvMaiVw6To4Fc7v .arrowheadPath{fill:#333333;}#mermaid-svg-qPvMaiVw6To4Fc7v .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-qPvMaiVw6To4Fc7v .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-qPvMaiVw6To4Fc7v .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qPvMaiVw6To4Fc7v .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-qPvMaiVw6To4Fc7v .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qPvMaiVw6To4Fc7v .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-qPvMaiVw6To4Fc7v .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-qPvMaiVw6To4Fc7v .cluster text{fill:#333;}#mermaid-svg-qPvMaiVw6To4Fc7v .cluster span{color:#333;}#mermaid-svg-qPvMaiVw6To4Fc7v 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-qPvMaiVw6To4Fc7v .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-qPvMaiVw6To4Fc7v rect.text{fill:none;stroke-width:0;}#mermaid-svg-qPvMaiVw6To4Fc7v .icon-shape,#mermaid-svg-qPvMaiVw6To4Fc7v .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qPvMaiVw6To4Fc7v .icon-shape p,#mermaid-svg-qPvMaiVw6To4Fc7v .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-qPvMaiVw6To4Fc7v .icon-shape .label rect,#mermaid-svg-qPvMaiVw6To4Fc7v .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qPvMaiVw6To4Fc7v .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-qPvMaiVw6To4Fc7v .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-qPvMaiVw6To4Fc7v :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
是
否
Leaf1
路由表是否存在多个等价下一跳
Spine1
Spine2
只走最佳路径
Leaf2 VTEP
五、Single-Active 的中断来源
Single-Active 的故障不是只修改一个"主备标记",而是一连串状态变化:
text
Active故障
→ 故障检测
→ Standby接管
→ LACP/Eth-Trunk状态更新
→ ESI/EAD成员状态更新
→ EVPN路径撤销/重发布
→ MAC/ARP重新学习
→ 硬件转发表更新
→ 终端和应用重传
所以它通常比 All-Active 更容易产生明显业务中断,但实际时长必须测量,不能直接套用固定秒数。
六、MAC 已切换但应用仍不通
当 MAC 表已经从 Leaf1 切换到 Leaf2,仍应继续检查:
text
聚合层:Leaf2 Eth-Trunk/LACP成员是否可收发
多归属层:ESI/EAD、Aliasing、DF和保护状态
VXLAN层:Leaf2 VTEP、NVE、VNI和隧道
三层:VRF、网关、目标路由和回程
邻居层:ARP/ND是否存在且指向正确MAC
服务器侧:Bond状态、默认网关、主机防火墙和应用监听
text
MAC表切换是数据面观察结果
根因可能来自控制面、聚合层、保护层、Underlay或服务器侧
七、课堂问答与批改
问题 1:All-Active 下,Leaf1 一条成员链路故障,为什么不一定导致所有业务同时中断?
我的回答:另一台 Leaf2 也在工作。
批改:正确。All-Active 允许多个成员承载已知单播,Leaf2 或其他有效成员可继续工作。但经过故障成员的旧流可能短时丢包、重传或重新哈希,不能说完全没有影响。
问题 2:LACP 显示成员都 Up,但服务器只有一条链路有流量,可能是故障,还是也可能是哈希分布?
我的回答:也可能是哈希分布。
批改:正确。还要验证成员是否 Collecting/Distributing、流量样本是否足够、哈希字段是否集中,以及是否有成员被 Suspend 或保护性阻塞。
问题 3:Underlay 有两条物理路径,是否一定形成 ECMP?
我的回答:不一定。
批改:正确。必须满足等价前缀、等价 Cost、下一跳可达、策略允许和路由表安装多条下一跳等条件。
问题 4:Single-Active 切换时,为什么通常比 All-Active 更容易出现明显业务中断?
我的回答:需要主备切换。
批改:方向正确但不完整。Single-Active 的主业务整体从 Active 转移到 Standby,还要等待 LACP、ESI/EAD、EVPN、MAC/ARP 和硬件转发表收敛,因此同时受影响的流量更多。
问题 5:如果 MAC 表已经切换到 Leaf2,但应用仍然不通,还需要检查哪些层?
我的回答:数据层是否改到 Leaf2。
批改:这是必要检查,但题设已经说明 MAC 已切换,说明该项可能满足。应继续检查 Eth-Trunk/LACP、ESI/EAD、Aliasing、DF、VTEP/NVE、VNI、VRF、ARP、回程路由和服务器 Bond/应用状态。
八、验收清单
All-Active
text
1. 两台Leaf的Eth-Trunk和成员均有效;
2. 成员处于正常收发而非仅物理Up;
3. 多流量能够观察到合理分布;
4. 成员故障后新流绕过故障成员;
5. MAC、ESI、EAD和Aliasing更新;
6. BUM仍由正确DF控制;
7. 已知单播、跨子网和回程正常。
Single-Active
text
1. Active/Standby角色清晰;
2. Active故障后Standby成功接管;
3. LACP和ESI状态完成切换;
4. MAC/ARP/EVPN路径重新收敛;
5. 记录切换期间丢包、重传和中断时间;
6. 原Active恢复后避免来回震荡;
7. 新Active的去程和回程均正常。
九、错误前提与修正
| 我的判断 | 问题类型 | 更准确的判断 |
|---|---|---|
| Leaf2仍工作,所以所有业务不会中断 | 结论过强 | Leaf2可承载部分业务,故障成员上的旧流仍可能短时丢包 |
| 一条链路有流量可能是哈希分布 | 正确但需验证 | 还要确认LACP有效收发和流量样本,不可直接排除故障 |
| 两条物理路径不一定是ECMP | 正确 | 还需等价Cost、下一跳可达和路由表安装条件 |
| Single-Active需要主备切换 | 方向正确 | 还需包括LACP、ESI/EAD、EVPN和MAC/ARP收敛 |
| MAC是否切到Leaf2是主要检查 | 范围过窄 | 还要检查VXLAN、三层、回程、服务器和应用 |
十、今日复习卡片
text
All-Active成员故障:通常减少路径,不一定全网中断
单链路高流量:可能是哈希分布,也可能是成员状态异常
ECMP:必须有等价下一跳,物理多路径不是充分条件
Single-Active:主备切换加多层收敛,通常中断更明显
MAC切换:只证明数据面某项更新,不能替代业务验收
最终验收:LACP + ESI/EAD + Aliasing + VTEP/NVE + VRF/ARP + 回程 + 应用
十一、今日状态
第 20 天课程完成:能够解释多归属模式下的业务验收方法,区分正常哈希不均与 LACP 故障,并能从 MAC 出口继续向 EVPN、VXLAN、三层、回程和服务器侧排查。下一课进入多归属故障演练设计,学习如何用连续 Ping、流量统计和状态时间线定位中断窗口。