从新手到高手 · 理论 + 实验
HANDBOOK · 实验手册

NVIDIA Cumulus 二层数据中心架构

一本用大白话讲透 Spine-Leaf 的实验手册:从数据中心的"为什么"到在 EVE-NG 上导入最新版 Cumulus Linux、搭出可运行的二层 Fabric,再到 MLAG、VxLAN、BGP EVPN 高级玩法。新手能照着做,老手能查细节。

适用平台:EVE-NG(社区版 / Pro) | 系统:NVIDIA Cumulus Linux 5.x(NVUE + ifupdown2) | 读者:网络工程师 / 在校学生 / 转型运维
📘 理论图解🧪 可复现实验🔧 基础 + 高级配置 🌐 VxLAN / EVPN⚡ MLAG 双活🤖 自动化入门

第零章 · 从新手到高手的学习路线图

这本手册不是让你一口气读完,而是像打游戏升级一样一层层往上爬。先看清自己在哪一级,再决定先读哪章。下面把整条路径拆成 5 个段位,每一段都标注了"你要能说出/做出来什么"。

1
LEVEL 1 · 小白

看懂架构

能画出 Spine-Leaf 长什么样,说清它比传统三层好在哪,知道 Leaf/Spine 各是干嘛的。

2
LEVEL 2 · 入门

跑起平台

在 EVE-NG 里装好环境、导入最新 Cumulus 镜像、启节点、连好线,能进命令行。

3
LEVEL 3 · 上手

二层 Fabric

用 VLAN + Trunk 搭出可通的二层 Spine-Leaf,配置 LACP 捆绑,能 ping 通并查表。

4
LEVEL 4 · 进阶

高可用与Overlay

配置 MLAG 双活、VxLAN 大二层、BGP EVPN 控制平面、Anycast 网关,理解 Underlay/Overlay。

5
LEVEL 5 · 高手

生产级 & 自动化

做综合排错、写 Ansible 批量下发、懂设计权衡,能把实验搬到真实设备。

怎么用这本手册? 每一章开头都有"本章目标"和"前置知识"。如果你是纯新手,建议按顺序从第 1 章读到第 7 章;如果你已经在用真机、只是想查 Cumulus 的某条命令,直接用左侧目录跳转即可。所有配置都给两种写法:nv(新 NVUE)和 net/文件(传统 ifupdown2),二选一即可。
你的现状建议路线预计耗时
完全没摸过交换机第1章吃透 → 第2章 → 第3章照做 → 第4章2~3 天
会配华为/思科传统交换机第1章速读 → 第2章(补 Cumulus 差异) → 第3章 → 第4、5章1~2 天
用过其它白盒/EOS,想学 Cumulus第2章 → 第3章(镜像部分) → 第5章高级半天~1 天
要备考/做 POC第4~6章精做实验,第7章查命令表按需

第一章 · 数据中心网络基础理论(先搞懂"为什么")

本章目标:能用一句话解释 Spine-Leaf;能画出拓扑;说清传统三层架构的三大痛点;理解二层/三层、VLAN、Trunk、ECMP、Overlay 这些词。读完你就能和同事"对得上频道"。

1.1 数据中心网络到底在干什么

数据中心(Data Center,简称 DC)简单来说,就是一堆服务器被塞进机房、连成一张网,对外提供网站、App、AI 训练、云存储等服务。你可以把它想象成一栋"服务器公寓":

数据中心网络的核心任务只有四个字:高带宽、低延迟、不丢包、好扩展。随着云计算和虚拟化的普及,服务器之间互相"串门"的流量(专业叫 东西向流量 / East-West Traffic)远远超过访客进出的流量(南北向流量 / North-South Traffic)。这一点,是后面所有架构设计的出发点。

比喻 南北向流量像"外卖小哥进出小区",东西向流量像"小区住户之间互相借酱油"。传统架构给"外卖"修了大马路,却让"借酱油"的人绕远路——这就是问题。

1.2 先认识几个"零件"名词

在画图之前,先把出场角色认全。这些是后面反复出现的词,建议先混个脸熟:

名词全称 / 英文大白话解释
机架Rack一个铁柜子,能竖着插几十台服务器和交换机,像书架。
机柜顶部交换机ToR, Top of Rack放在机架最上面的交换机,直接连本架所有服务器。它就是"Leaf(叶)"。
列头交换机EoR, End of Row老架构里放在一排机架尽头汇总的交换机,现在逐渐被 Leaf 取代。
叶片交换机Leaf贴近服务器的接入层,每个 Leaf 上联所有 Spine。也叫 ToR。
脊交换机Spine网络"骨干",只和 Leaf 相连,不直接接服务器。像高速公路枢纽。
接口Port / Interface交换机上的网口,Cumulus 里常叫 swp1swp2(switch port 的缩写)。
管理口Management / eth0专门用来远程登录、带外管理交换机的口,不跑业务流量。

1.3 传统三层架构:核心-汇聚-接入

在 Spine-Leaf 之前,企业网和数据中心普遍用"三层架构":接入层(Access)→ 汇聚层(Distribution)→ 核心层(Core)。它长得像一棵倒立的树:

核心 Core 汇聚 汇聚 接入 接入 接入 接入 传统三层:像一棵树,越往上越细、越容易堵
图 1-1 传统核心-汇聚-接入三层架构示意

它的三个致命问题,正是 Spine-Leaf 要解决的:

痛点现象后果
① 带宽"收敛比"大下层总带宽 > 上层上联带宽(比如 48 个万兆口汇聚到 4 个万兆上联,收敛比 12:1)高峰期拥堵,东西向流量要"爬树"绕远。
② 生成树阻塞端口二层用 STP 防环,会主动堵掉一半冗余链路明明有双上联,却只有一条能用,带宽浪费一半,故障切换慢(秒级)。
③ 扩展要"换大机器"核心不够了只能买更大的核心交换机(scale-up)贵、停机风险高、厂商锁定强。
重点 生成树协议 STP(Spanning Tree Protocol)是传统二层的"防环保险":它会在环形拓扑里挑一条路堵死,保证没有环路。代价是冗余链路被闲置。数据中心要的是"所有链路都干活",所以必须换思路。

1.4 Clos 网络:一个 1953 年的老点子

Spine-Leaf 不是新发明,它来自 1953 年电话工程师 Charles Clos 的"多级交换"论文。核心思想:用很多个小便宜的交换单元,拼成一个"任意两点之间都有多条等长路径"的无阻塞网络,而不是造一个超级大的交换核心。

放到数据中心里:

Spine1 Spine2 Leaf1 Leaf2 Leaf3 Spine-Leaf:每个 Leaf 连所有 Spine,任意两点多条等长路径
图 1-2 Spine-Leaf(叶脊)全互联架构示意

1.5 Spine-Leaf 凭什么"香"

对比项传统三层Spine-Leaf
东西向带宽差(要绕核心,收敛大)(Leaf 经 Spine 直连,可做到无阻塞)
链路利用率STP 堵一半全部可用,靠 ECMP 负载分担
扩展方式换更大核心(scale-up,贵)加 Leaf 或 Spine(scale-out,便宜灵活)
延迟跨区可能 3~4 跳任意服务器间固定 3 跳(Leaf-Spine-Leaf)
故障切换STP 秒级亚秒级,靠路由/等价多路径快速收敛
虚拟化友好一般极好,天然适合大二层 / VxLAN
ECMP 是什么? Equal-Cost Multi-Path,等价多路径。简单说:到同一个目的地有好几条"代价相同"的路,交换机就把流量"分摊"到这些路上(像多车道高速公路)。Spine-Leaf 里 Leaf 到每个 Spine 代价相同,天然形成 ECMP,把所有上联链路都用满。

1.6 二层 vs 三层:这本手册到底在讲"哪一层"

这是新手最容易迷糊的地方,必须讲清楚。网络分层的"二层/三层"指的是 OSI 模型的数据链路层(L2)网络层(L3)

二层(L2,交换)三层(L3,路由)
寻址MAC 地址(如 0a:00:27:..IP 地址(如 192.168.1.10
设备交换机(Switch)路由器 / 三层交换机(Router / L3 Switch)
广播域一个 VLAN 内广播可达隔离广播,靠路由跨网段
代表技术VLAN、Trunk、STP、LACP、VxLAN(数据面)OSPF、BGP、静态路由、Anycast 网关
典型表MAC 地址表路由表 / FIB

那么"二层数据中心"是什么意思?有两种常见理解,本手册覆盖两者:

一句话 本手册第 4 章先带你做"纯二层 Spine-Leaf"(最容易懂、最快跑通);第 5 章再升级到"三层 Underlay + VxLAN/EVPN 大二层"(生产级、可跨机房)。两层都讲,你才真正理解"二层数据中心"这句话。

1.7 必须掌握的 12 个核心术语(速查)

术语一句话手册里在哪讲
VLAN把一台交换机逻辑切成多个"广播小房间"4.5 / 5.2
Trunk一根线同时跑多个 VLAN 的"公交专用道"4.5
Access 口只属于一个 VLAN 的"私家车专用道",接服务器4.5
Bond / LACP把多根物理线绑成一根逻辑线,带宽叠加+冗余4.4 / 5.1
MLAG两台交换机"装成一台",下联服务器双活上联5.1
ECMP多条等价路分摊流量1.5 / 5.4
Underlay底层物理 IP 网络(Leaf-Spine 三层互联)5.3
Overlay在 Underlay 上"叠"出来的虚拟网络(VxLAN)5.2/5.3
VxLAN把二层帧装进 UDP 包,跨三层"搬运"大二层5.2
EVPN用 BGP 来"公告"谁在哪、怎么到(控制平面)5.3
Anycast 网关每个 Leaf 都用同一个网关 IP,服务器默认网关就近5.4
NVUECumulus 5.x 的新配置引擎(nv 命令)2.3 / 全文

1.8 小结与自测

🎯 看完这一章,你应该能回答:

  1. 用一句话说明 Spine-Leaf 相比传统三层好在哪?
  2. 为什么传统二层要用 STP,而 Spine-Leaf 不需要(或弱化)它?
  3. 二层靠什么地址转发?三层靠什么?各举一个代表协议。
  4. "二层数据中心"有哪两种理解?本手册分别在第几章做?

答不上来?回到对应小节再读一遍。能答上来,恭喜你已具备 LEVEL 1,可以进下一章了。

第二章 · NVIDIA Cumulus Linux 是什么(先认识你的"武器")

本章目标:搞懂 Cumulus 不是"一台交换机"而是"跑在白盒交换机上的 Linux 系统";记住它的几大组件(switchd / FRR / ifupdown2 / NVUE);会用 nvnet 两种配置方式;知道最新版 5.x 的变化与免费策略。

2.1 一句话定义:交换机里的 Linux

NVIDIA Cumulus Linux 是一个完整的网络操作系统(NOS,Network Operating System)。它把标准的 Debian Linux 装进交换机,让你能用管服务器的方式管交换机:apt 装软件、systemctl 管服务、bash 写脚本、python 做自动化。一句话——"把交换机变成一台长了很多网口的服务器"

转变思维 在思科/华为上你记的是私有命令;在 Cumulus 上,网络配置要么是 Linux 原生命令(ipbridge),要么是一个叫 nv/net 的配置工具。底层转发由专用芯片(ASIC)完成,但"控制面"就是普通 Linux 进程。

2.2 白盒交换机 + NOS:这场变革的本质

传统网络是"软硬一体、厂商锁定":买思科交换机就只能用它家的 OS 和它家的命令。Cumulus 代表的思路是"解耦(Disaggregation)":

角色传统模式白盒 + Cumulus 模式
硬件思科/华为/Arista 自有整机白盒交换机(裸金属,如 Edgecore、Delta、NVIDIA 自有)
芯片厂商定制商用 ASIC(NVIDIA Spectrum / Broadcom Trident/Jericho 等)
系统厂商私有 OS通用 NOS:Cumulus Linux
运维厂商工具链Linux 工具 + 开源生态(Ansible、NetBox、FRR…)
什么是"白盒(White Box / Bare Metal)"? 就是只卖硬件、不预装网络系统的交换机。它像攒好的"裸机电脑",你随便装 Cumulus、SONiC 或其它 NOS。这打破了锁定,价格也更低。本手册在 EVE-NG 里用的 Cumulus VX 就是 Cumulus 的虚拟机版——纯软件、不用真实硬件,专为实验和 CI 设计,转发用软件模拟,学配置 100% 够用。

2.3 Cumulus 的"五脏六腑":核心组件

理解组件,才能理解排错时该看哪里。Cumulus 5.x 的关键进程:

组件干什么类似业界
switchd硬件抽象守护进程,把 Linux 内核的"软件转发"翻译成 ASIC 的"硬件转发"。配置的桥梁。—(Cumulus 特有)
NVUEnv5.x 新配置引擎:用 nv set/get 改配置,nv config apply 生效。配置存为 YAML 结构化数据。类似 Arista eAPI、Juniper Junos 结构化配置
NCLUnet传统配置壳,net add/commit。底层写 /etc/network/interfaces 等文件。仍可用。思科式"配置会话"
ifupdown2Linux 网络接口管理工具,读取 /etc/network/interfaces 启停接口。Linux ifupdown 的增强版
FRRvtysh开源路由套件,提供 BGP/OSPF/IS-IS/PIM 等。Cumulus 的路由全靠它。Quagga 继任者,业界通用
clagd / mlagdMLAG(跨设备链路聚合)守护进程,让两台交换机像一台。思科 vPC、华为 M-LAG
BGP EVPN用 BGP 传递 VxLAN 控制信息(MAC/IP 可达性)。VXLAN 标准控制平面
运维/自动化 (bash, Ansible, Python) 配置层 NVUE / NCLU / ifupdown2 Linux 内核 (netdev, bridge, route) switchd(硬件抽象) ASIC 转发芯片 Cumulus 软件栈:配置 → 内核 → switchd → ASIC
图 2-1 Cumulus Linux 软件架构分层

2.4 两种配置方式:NVUE(新) vs NCLU/文件(传统)

Cumulus 5.x 同时支持两种写法,新手强烈建议学 NVUE,因为它结构清晰、可回滚、能直接出 YAML。但老教程和很多生产脚本仍用传统方式,所以两种都给你。

方式一:NVUE(推荐,nv 命令)

# 配置一个接口为 100G,并打描述
cumulus@leaf01:mgmt:~$ nv set interface swp1 link speed 100g
cumulus@leaf01:mgmt:~$ nv set interface swp1 description "to spine01"
# 查看当前未生效的候选配置
cumulus@leaf01:mgmt:~$ nv config show
# 应用配置(类似 commit)
cumulus@leaf01:mgmt:~$ nv config apply
# 持久化(写盘,重启不丢)
cumulus@leaf01:mgmt:~$ nv config save

方式二:NCLU(net 命令,写 /etc/network/interfaces)

cumulus@leaf01:~$ net add interface swp1
cumulus@leaf01:~$ net add interface swp1 alias "to spine01"
cumulus@leaf01:~$ net commit     # 类似 nv config apply
cumulus@leaf01:~$ net show interface

方式三:直接编辑文件(最底层)

cumulus@leaf01:~$ sudo nano /etc/network/interfaces
auto swp1
iface swp1
    alias to-spine01

cumulus@leaf01:~$ sudo ifup swp1   # 用 ifupdown2 启接口
别混着用 NVUE 和 ifupdown2 的配置文件是两套体系。官方建议:要么全程 NVUE,要么全程 ifupdown2。本手册实验统一用 NVUE 演示,并在关键处附注传统写法,避免你照着老教程踩坑。

2.5 最新版 5.x 的关键变化(你导的镜像就是它)

Cumulus Linux 5.x(截至本手册撰写,稳定线为 5.9~5.11 一带,请以 NVIDIA 官网最新为准)相比 4.x 有重大升级:

变化说明对你意味着
NVUE 成为默认配置范式结构化、可版本化、API 友好nv 就对了,未来都这么配
底层基于更新 Debian内核与工具链更新能用更新的 Linux 工具
MLAG 配置简化clag → 统一在 NVUE 下 nv set clag ...双活配置更直观
VxLAN/EVPN 全面 NVUE 化大二层 Overlay 配置收敛第 5 章直接 nv set nve/vxlan
免费使用NVIDIA 宣布 Cumulus Linux 对所有用户免费下载、学习、实验零授权成本
版本号在哪看? 登录后执行 nv show system(或 cat /etc/os-releasenet show version)即可看到版本。EVE-NG 导入时建议选 5.x 的最新 VX 镜像(文件名类似 cumulus-linux-5.x.0-vx-amd64.qcow2)。

2.6 许可与获取(免费,但支持另算)

注意 下载请认准官方或可信镜像源,校验文件哈希(SHA256),避免来历不明的镜像内置后门。实验室环境也建议断开不必要的外网。

2.7 在 EVE-NG 里它长啥样:Cumulus VX 节点

EVE-NG 把 Cumulus VX 当作一个虚拟机节点来跑(不是真实 ASIC,转发走软件/ virtio)。它和真机的配置命令 100% 一致,只有性能天差地别——但做实验、学命令完全够用。节点启动后有:

资源说明
管理口 eth0连 EVE-NG 的云/桥,用于你 SSH 登录(建议 p 一下就通)
业务口 swp1~swpN就是交换端口,拖线互联就是这些口
默认账号cumulus / cumulus(部分镜像首次需改密)
主机名默认 leaf01spine01 之类,可在实验里改
经验 真机 Cumulus 上你常用 sudo;EVE-NG 的 VX 镜像里 cumulus 用户通常已在 sudoers,配完直接 nv config apply 即可,不必每条加 sudo。

小结

✅ 记住三件事就够了:

  1. Cumulus = 跑在白盒交换机上的 Debian Linux,转发靠 ASIC,控制靠 Linux 进程。
  2. 5.x 用 NVUE(nv 配置;传统 net/ifupdown2 仍可用,但别混用。
  3. 软件免费,实验用 Cumulus VX 虚拟机镜像,命令与真机一致。

下一章我们就去 EVE-NG 把它装起来、连好线。准备好你的电脑和虚拟机环境。

第三章 · 搭舞台:EVE-NG 安装与导入最新版 Cumulus

本章目标:装好/用上 EVE-NG;把最新 Cumulus VX 镜像正确导入;创建你的第一个 Lab;添加节点、连线、启动、登进去。做完你就拥有了一个"随时可砸"的练习场。

3.1 EVE-NG 是什么,为什么选它

EVE-NG(Emulated Virtual Environment - Next Generation) 是一个"网络实验大沙盘":它在一台服务器/电脑的虚拟机(KVM/QEMU)里,同时跑很多网络设备(路由器、交换机、防火墙、甚至 Windows/Linux 主机),让你像搭乐高一样连线、做实验。它支持几乎所有主流厂商镜像。

版本特点学习建议
社区版(Community)免费,够用,Web 单机操作,无多用户/协同✅ 个人学习首选
学习版(Learning)付费,增加部分功能可选
专业版(Pro)/ 企业版多用户、HTML5 控制台池、鉴权团队/培训用
除 EVE-NG 外,GNS3、ContainerLab 也能跑 Cumulus VX。本手册以 EVE-NG 为例,因为它对"拖线搭拓扑"最友好、对新手门槛最低。ContainerLab 更适合自动化/CI 玩家,想进阶可之后了解。

3.2 部署 EVE-NG(三种姿势)

EVE-NG 本身是一个定制过的 Ubuntu 虚拟机,你把它跑在宿主机里即可。

方式适用要点
VMware Workstation / FusionWindows/macOS 个人电脑导入官方 .ova 模板最省事
VirtualBox免费,但性能略差开启 VT-x/AMD-V;网络用"桥接"
裸金属 / Proxmox / ESXi常驻服务器资源足,可跑大型拓扑
资源底线 社区版最低 4 vCPU + 8 GB RAM;要舒服地跑 2 台 Spine + 4 台 Leaf + 几台主机,建议 8 vCPU + 24 GB RAM 起步。每个 Cumulus VX 节点约吃 2 vCPU + 2~4 GB RAM。CPU 必须开嵌套虚拟化(VT-x / SVM),否则 KVM 起不来。

3.3 首次开机与基础设置

  1. 启动 EVE-NG 虚拟机,控制台出现初始化向导:设置 主机名、管理 IP(建议静态)、DNS、密码
  2. 默认 Web 管理地址即管理口 IP。浏览器打开 http://<EVE-IP>/
  3. 默认账号 admin / eve(社区版),首次登录建议改密。
  4. 客户端若用本地控制台,安装 TightVNC / RealVNC(HTML5 控制台则可直接用浏览器,更推荐)。
若你只想"用",其实不需要会 Linux;但后面导入镜像要走命令行(SFTP 上传 + 移动文件 + 修正权限),所以准备一个能 SSH 进 EVE-NG 的工具(如 PuTTY / Terminal)会方便很多。

3.4 获取最新版 Cumulus VX 镜像

Cumulus VX 是虚拟机格式(qcow2),文件名通常形如 cumulus-linux-5.x.0-vx-amd64.qcow2。获取渠道:

挑对格式 一定要下 VX(虚拟机版),不是给真实硬件用的 -amd64.bin 安装镜像。VX 是开箱即用的 qcow2,直接能当 EVE-NG 节点跑。

3.5 导入镜像到 EVE-NG(核心步骤)

EVE-NG 规定:每种设备的镜像放在 /opt/unetlab/addons/qemu/<模板目录名>/ 下,且文件必须重命名为 virtioa.qcow2。Cumulus 的模板目录名(不同 EVE-NG 版本略有差异)常见为 cumulus-5.xcumulusvx-5.x

# 1) 用 SFTP 把下载的 qcow2 传到 EVE-NG(以本机为例)
scp cumulus-linux-5.11.0-vx-amd64.qcow2 root@<EVE-IP>:/tmp/

# 2) SSH 登录 EVE-NG,创建该版本的镜像目录(目录名对应节点模板)
mkdir -p /opt/unetlab/addons/qemu/cumulus-5.11

# 3) 重命名为 EVE-NG 要求的名字
mv /tmp/cumulus-linux-5.11.0-vx-amd64.qcow2 \
   /opt/unetlab/addons/qemu/cumulus-5.11/virtioa.qcow2

# 4) 修正权限(EVE-NG 必做,否则节点起不来)
/opt/unetlab/wrappers/unl_wrapper -a fixpermissions
常见坑 ① 文件名不是 virtioa.qcow2 → 节点报错;② 忘执行 fixpermissions → 权限不对起不来;③ 目录名和 Web 里选的模板对不上 → 看不到该版本。若 Web 添加节点时列表里没有 Cumulus,先确认社区版模板是否包含(部分旧版需在 /opt/unetlab/html/templates 检查 cumulus.yml)。

3.6 创建你的第一个 Lab 与拓扑

  1. Web 左上角 Add new lab → 填名称(如 L2-Spine-Leaf-Basic)、选图标、点 Save。
  2. 进入 Lab,点顶部 Add Node(+ 图标) → 设备类型选 Cumulus(或 Cumulus VX)→ 版本选刚导入的 5.11
  3. 给节点命名(spine01spine02leaf01~leaf04)、设 RAM(建议 4096 MB)、CPU(2)、网卡数(按拓扑,每个 Leaf 至少 2 个上联口 + 1 个下联口)。重复添加,凑齐 6 台交换机的拓扑。
  4. Add Link(连线) 工具:先点起点设备的端口(如 leaf01 的 swp1),再点终点(spine01 的 swp1),即可连一条线。
  5. 全选节点 → Start 启动。等状态变绿,右键节点 Console 即可打开终端。
连线技巧 建议先画拓扑图再连:Leaf 的上联口(swp1、swp2…)连到各 Spine,Spine 不接服务器。端口编号在连线时 EVE-NG 会按设备显示,记不住就边连边在纸上标号。

3.7 怎么"登"进 Cumulus 节点

方式做法适用
Web Console(VNC)右键节点 → Console,浏览器里直接操作最省事,首登改密用
SSH(管理云)给节点 eth0 接一个 "Cloud/Manager" 网桥,宿主机直接 ssh cumulus@IP✅ 日常最舒服
Serial部分模板支持串口排错时用
让 SSH 好用起来: 在 Lab 里加一个 Network → Cloud(或 Management Cloud)节点,把它连到每个 Cumulus 的 eth0。这样 EVE-NG 会把 eth0 桥到宿主机网段,你就能用终端软件 SSH 登录,复制粘贴命令不再痛苦。(拓扑图里管理云通常单独画,不和业务 swp 口混。)

3.8 本章实验:搭好"基础二层"骨架

我们为后续所有实验定一个统一拓扑:2 个 Spine + 4 个 Leaf 的全互联(full-mesh)结构——每个 Leaf 双上联到两个 Spine,每个 Spine 下联全部 4 个 Leaf。第 4、5 章都基于它扩展。

Spine01 Spine02 Leaf01 Leaf02 Leaf03 Leaf04 主机A 主机B 主机C 主机D 基础骨架:4 Leaf 全互联 2 Spine(每 Leaf 双上联,每 Spine 连全部 4 Leaf)
图 3-1 基础实验拓扑:2 Spine + 4 Leaf 全互联 + 四台主机
节点角色上联口(连 Spine)下联主机口管理 IP(示例)
spine01swp1→leaf01, swp2→leaf02, swp3→leaf03, swp4→leaf0410.0.0.11
spine02swp1→leaf01, swp2→leaf02, swp3→leaf03, swp4→leaf0410.0.0.12
leaf01swp1→spine01, swp2→spine02swp10→主机A10.0.0.21
leaf02swp1→spine01, swp2→spine02swp10→主机B10.0.0.22
leaf03swp1→spine01, swp2→spine02swp10→主机C10.0.0.23
leaf04swp1→spine01, swp2→spine02swp10→主机D10.0.0.24
现在就做 按上面把 6 台交换机(2 Spine + 4 Leaf)和连线在 EVE-NG 里搭好、启动、用 Console 登进去、能看见 cumulus@... 提示符。第 4 章我们才开始真正配二层。搭不好的话,回 3.5~3.7 重看。

小结

✅ 本章产出:一个能跑的 EVE-NG 实验环境 + 已导入的 Cumulus 5.x 镜像 + 图 3-1 拓扑骨架。

下章开始"动真格":在 Leaf/Spine 上配接口、VLAN、Trunk、LACP,让四台主机在二层互相 ping 通。这就是 LEVEL 3 的起点。

第四章 · 基础实验:搭出能通的二层 Spine-Leaf

本章目标:在图 3-1 拓扑上,完成系统初始化 → 接口配置 → LACP 捆绑 → VLAN/Trunk → VLAN-aware Bridge → 让主机 A/B/C/D 在同一 VLAN 里二层互通。做完 = LEVEL 3。所有配置给 NVUE 写法,并附传统 ifupdown2 对照。

4.1 实验目标与思路

我们的核心任务是:让连在不同 Leaf 上的四台主机,像在同一台大交换机下一样二层互通。关键靠三点:

为什么用"VLAN-aware bridge"而不是给每个 VLAN 建一个独立 bridge?因为前者用一个逻辑桥承载全部 VLAN,配置简单、资源省,是 Cumulus 的推荐做法,也是生产标准。后文一律用这个模型。

4.2 系统初始化(每台设备都做)

先给每台设备设主机名、管理 IP、时区,避免后面一团乱。下面以 leaf01 为例,其它照改。

# NVUE 方式:设主机名 + 管理口 IP
cumulus@leaf01:mgmt:~$ nv set system hostname leaf01
cumulus@leaf01:mgmt:~$ nv set interface eth0 ip address 10.0.0.21/24
cumulus@leaf01:mgmt:~$ nv set interface eth0 ip gateway 10.0.0.1
cumulus@leaf01:mgmt:~$ nv config apply
cumulus@leaf01:mgmt:~$ nv config save

# 改密(首次登录建议做,VX 默认 cumulus/cumulus)
cumulus@leaf01:mgmt:~$ passwd cumulus

传统写法(编辑文件):

echo 'leaf01' | sudo tee /etc/hostname
# /etc/network/interfaces 里给 eth0 配地址
auto eth0
iface eth0
    address 10.0.0.21/24
    gateway 10.0.0.1
sudo ifreload -a
建议 给 spine01/leaf01/leaf02/leaf03 各设好主机名和管理 IP(参看 3.8 表格)。之后全程用 SSH 登录,复制命令比 Console 敲字快十倍。

4.3 接口配置:把 swp 口"打开"

Cumulus 里物理口叫 swp1swp2…。默认可能没启用或速度自适应。先确认接口状态、再按需配置。为做二层转发,交换口一般不配 IP(它们是二层口),只加入 bridge 即可。

# 查看所有接口状态
cumulus@leaf01:mgmt:~$ nv show interface
cumulus@leaf01:mgmt:~$ ip link show swp1

# 若需指定速率/双工(可选)
cumulus@leaf01:mgmt:~$ nv set interface swp1 link speed 10g
cumulus@leaf01:mgmt:~$ nv set interface swp1 link auto-negotiate on
cumulus@leaf01:mgmt:~$ nv config apply
二层交换口(接服务器、上联 Spine)通常不需要 IP 地址。只有管理口 eth0、以及后面"三层网关/Underlay"才会配 IP。新手常犯的错:给 swp 口乱配 IP,结果二层不通。记住:做二层的口,光加 bridge 就行,别配地址

4.4 链路聚合 LACP(Bond):把多根线变成一根

LACP(IEEE 802.3ad) 把多条物理链路绑成一个逻辑口 bond,实现带宽叠加 + 故障冗余:一根断了流量自动走另一根,不丢会话。两种典型用法:

用法场景本拓扑是否用
服务器双归到 Leaf主机两块网卡绑到 Leaf 两个口,高可用✅ 可练
Leaf 双上联 Spine(多 Spine)两个上联口绑成 bond,抗单链路故障✅ 本拓扑每个 Leaf 已双上联 spine01/spine02,可直接练

下面演示 leaf01 用 swp10+swp11 绑成 bond1 接主机 A 的双网卡(LACP 模式):

# NVUE:创建 bond1,成员 swp10、swp11,模式 lacp
cumulus@leaf01:mgmt:~$ nv set interface bond1 bond member swp10
cumulus@leaf01:mgmt:~$ nv set interface bond1 bond member swp11
cumulus@leaf01:mgmt:~$ nv set interface bond1 bond mode lacp
cumulus@leaf01:mgmt:~$ nv config apply
cumulus@leaf01:mgmt:~$ nv show interface bond1

传统 ifupdown2 写法:

auto bond1
iface bond1
    bond-slaves swp10 swp11
    bond-mode 802.3ad
    bond-miimon 100
    bond-lacp-rate 1
两端都要配 LACP 是协商协议:Leaf 这端配了 bond,主机那端也必须配 bonding(mode 4 / 802.3ad),否则对端不认、可能丢包。Linux 主机配法:/etc/network/interfaces 里建 bond0 同样设 802.3ad,或 nmcli 配置。验证:cat /proc/net/bonding/bond1 看 "MII Status: up" 和聚合成员。

4.5 VLAN 与 Trunk:二层转发的"分房"与"公交道"

这是二层最核心的两个概念,必须吃透:

概念大白话例子
VLAN把交换机逻辑切成多个"广播小房间",房间之间默认不通VLAN 10 = 办公区,VLAN 20 = 服务器区
Access 口只属于一个 VLAN 的口,接终端(主机/服务器)leaf01 的 swp10 设为 access vlan 10
Trunk 口同时承载多个 VLAN 的口,用于交换机之间互联leaf01 的 swp1 上联 Spine,透传 vlan 10,20
PVIDAccess 口给"没打标签"的帧默认归到的 VLAN进 swp10 的无标签帧 → VLAN 10
标签(Tag)是什么? VLAN 用 802.1Q 标签在帧头插一个 4 字节的 VLAN ID。Access 口收发的帧不带标签(主机不懂 VLAN);Trunk 口收发的帧带标签,告诉对端"这是 VLAN 几的"。交换机靠标签决定往哪转发。

4.6 核心配置:VLAN-aware Bridge(让全网联成二层)

现在把"积木"拼起来:建一个感知 VLAN 的桥,把各 Leaf 的两个上联口(swp1→spine01、swp2→spine02,都做 Trunk)和下联口(swp10→主机,Access)都挂上去。下面以 leaf01 为例,规划(leaf02~04 同理,下联主机 VLAN 可不同):

leaf01 端口角色VLAN 设置
swp1上联 spine01(Trunk)透传 vlan 10,20
swp2上联 spine02(Trunk)透传 vlan 10,20
swp10下联主机 A(Access)access vlan 10(pvid 10)
# ===== NVUE 配置 leaf01(双上联 2 个 Spine)=====
cumulus@leaf01:mgmt:~$ nv set bridge domain br_default
# 上联口 swp1、swp2 都做 trunk,允许 vlan 10/20
cumulus@leaf01:mgmt:~$ nv set interface swp1 bridge domain br_default
cumulus@leaf01:mgmt:~$ nv set interface swp1 bridge trunk vlans 10,20
cumulus@leaf01:mgmt:~$ nv set interface swp2 bridge domain br_default
cumulus@leaf01:mgmt:~$ nv set interface swp2 bridge trunk vlans 10,20
# 下联口 swp10 作为 access vlan 10
cumulus@leaf01:mgmt:~$ nv set interface swp10 bridge domain br_default
cumulus@leaf01:mgmt:~$ nv set interface swp10 bridge access 10
cumulus@leaf01:mgmt:~$ nv config apply
cumulus@leaf01:mgmt:~$ nv config save

传统 ifupdown2 写法(/etc/network/interfaces):

auto bridge
iface bridge
    bridge-ports swp1 swp2 swp10
    bridge-vlan-aware yes
    bridge-vids 10 20

auto swp10
iface swp10
    bridge-access 10

# swp1 作为 trunk 默认透传 bridge-vids 里的 vlan
两台 Spine 都要配 spine01 和 spine02 都要建 bridge,把各自连 4 个 Leaf 的口(swp1~swp4)都加进桥并 trunk vlan 10,20。Spine 是"纯二层中转",它不需要知道 VLAN 含义,只要把带标签的帧原样转发即可。用 shell 循环批量配更快(Cumulus 是 Linux,可直接用 bash):
# spine01 / spine02:swp1~swp4 各连一个 Leaf,全部加桥、trunk vlan 10,20
cumulus@spine01:mgmt:~$ nv set bridge domain br_default
cumulus@spine01:mgmt:~$ for p in swp1 swp2 swp3 swp4; do \
  nv set interface $p bridge domain br_default; \
  nv set interface $p bridge trunk vlans 10,20; done
# 2 个 Spine 全互联存在二层环,必须在桥上开生成树防环(详见 4.7)
cumulus@spine01:mgmt:~$ nv set bridge spanning-tree priority 4096   # spine01 设为根桥
cumulus@spine01:mgmt:~$ nv config apply && nv config save

# spine02 同样操作,优先级稍高(8192),不抢根桥即可
cumulus@spine02:mgmt:~$ nv set bridge domain br_default
cumulus@spine02:mgmt:~$ for p in swp1 swp2 swp3 swp4; do \
  nv set interface $p bridge domain br_default; \
  nv set interface $p bridge trunk vlans 10,20; done
cumulus@spine02:mgmt:~$ nv set bridge spanning-tree priority 8192
cumulus@spine02:mgmt:~$ nv config apply && nv config save

leaf02 / leaf03 / leaf04 照葫芦画瓢:两个上联口(swp1、swp2)都 trunk vlan 10,20,下联主机口(swp10)access 到对应 VLAN(例如 leaf02 主机在 vlan 20,leaf03/leaf04 主机在 vlan 10,随你定,只要同 VLAN 想互通就放同号)。

4.7 防环:2 个 Spine 全互联天然有环,必须处理

我们的基础拓扑是"4 个 Leaf 各双上联 2 个 Spine(全互联)",这会形成 Leaf1-Spine1-Leaf2-Spine2-Leaf1 之类的二层环路。如果不加任何防环机制,广播帧会在环里无限打转(广播风暴),MAC 表错乱,网络直接瘫痪。所以本拓扑必须在桥上开启生成树(STP)——这正是 4.6 里两台 Spine 配了 spanning-tree priority 的原因。常见三种解法:

方案原理适用
STP(生成树)堵掉一条冗余路防环,Cumulus 默认 MSTP纯二层、小规模;但浪费一半带宽(本实验用)
MLAG(第 5 章)两台 Spine 假装一台,Leaf 双活上联不环双 Spine 接入双活
VxLAN/EVPN(第 5 章)Underlay 跑三层路由,根本不存在二层环✅ 生产首选

我们在 4.6 已用最简方案(STP)把纯二层跑通了。查看 STP 状态,应看到一条冗余上联被置为 Discarding/Blocking:

# 查看生成树状态(两台的某条上联应处于阻塞态,证明环路被破)
cumulus@spine01:mgmt:~$ nv show bridge spanning-tree
cumulus@leaf01:mgmt:~$ nv show bridge spanning-tree
重要认知 生产级 Spine-Leaf 几乎不用纯二层 STP 来扩多 Spine,因为 STP 会堵掉一半冗余链路(带宽浪费、切换慢)。真正的做法是第 5 章的"三层 Underlay + VxLAN Overlay"——底层用路由(天然无环),上层用 VxLAN 还原大二层。第 4 章先用 STP 把"2 Spine + 4 Leaf 纯二层"跑通,是为了让你零基础上手并亲眼看环路危害,再自然过渡到生产方案。

4.8 验证与排错:怎么证明"通了"

配置完,按下面顺序排查。每一条都是"看一眼就知道哪里错"的利器。

想确认命令正常该看到
桥和 VLAN 成员nv show bridge / bridge vlan各口在正确 VLAN,trunk 口有 vid 10,20
接口是否 upip link show swp1状态 UP、有正确速率
MAC 表学到了没bridge fdb show能看到主机 MAC 挂在对应口
Bond 状态cat /proc/net/bonding/bond1MII Status: up,成员齐全
二层通断主机上 ping 同VLAN另一主机IP能通
抓包看标签sudo tcpdump -i swp1 -e vlantrunk 上有 802.1Q vlan 标签帧
# 示例:在 leaf01 上确认 swp1 是 trunk 且允许 vlan 10/20
cumulus@leaf01:mgmt:~$ bridge vlan show
port       vlan ids
swp1        1 PVID Egress Untagged
           10
           20
swp10       10 PVID Egress Untagged
br_default  1 PVID Egress Untagged
           10
           20
不通的 90% 原因 ① 忘了在 Spine 上也建桥加口;② Trunk 口允许的 VLAN 列表两边不一致(一边 10 一边只有 20);③ 主机 IP 不在同一网段/没关防火墙;④ Access 口 VLAN 配错。按 4.8 表格逐条核对,基本都能定位。

4.9 端到端实验:让四台主机二层互通

  1. 给四台主机配同 VLAN(如都 vlan 10)的 IP:主机A 192.168.10.11/24、主机B 192.168.10.12/24、主机C 192.168.10.13/24、主机D 192.168.10.14/24(想验证 VLAN 隔离,可把主机D 放 vlan 20,验证它 ping 不通 vlan 10)。
  2. 按 4.6 在 leaf01~04 和 spine01/spine02 配好 bridge + trunk/access,并确认两台 Spine 的生成树已开启(4.7)。
  3. 主机A ping 主机B(跨 leaf,经 2 个 Spine):ping 192.168.10.12。能通 = 二层 Spine-Leaf 大功告成。
  4. 在 leaf01 抓包:sudo tcpdump -i swp1 -n icmp,应看到 ICMP 经 trunk 转发;再看 nv show bridge spanning-tree 确认一条冗余上联被阻塞(STP 生效)。
  5. (进阶)把主机D 移到 vlan 20,验证它与 vlan 10 的主机二层不通(证明 VLAN 隔离生效),但同 vlan 20 的主机之间仍通。
里程碑 能完成 4.9,你已经拿下 LEVEL 3(二层 Fabric)!接下来第 5 章把它升级成"高可用 + 跨机房大二层"的生产级架构。

小结

✅ 本章你学会了:

  1. 系统初始化(主机名/管理 IP);
  2. 二层口不配 IP,只加 bridge;
  3. LACP Bond 把多链路绑一根;
  4. Access / Trunk / VLAN / PVID 的含义与配置;
  5. VLAN-aware Bridge 是 Cumulus 二层核心;
  6. 2 个 Spine 全互联有二层环,纯二层靠 STP 防环,生产用 MLAG/VxLAN;
  7. bridge vlan / bridge fdb / tcpdump 排错。

第五章 · 高级配置:从"能通"到"生产级"

本章目标:学会 MLAG 双活、VxLAN 大二层、BGP EVPN 控制平面、Anycast 网关,理解三层 Underlay 与二层 Overlay 的分层,并了解 QoS 与自动化。读完 = LEVEL 4,具备做 POC 的能力。命令以 NVUE 为主,关键处给传统对照。

版本提示 本章命令基于 Cumulus 5.x 的 NVUE。不同小版本参数名可能微调;配置前用 nv ? / nv set ... ? 确认。EVPN/VxLAN 是 Cumulus 的高阶特性,建议在理解了第 4 章后再啃。

5.0 先建立全局视角:三层 Underlay + 二层 Overlay

生产级"二层数据中心"的真相是:底层用三层 IP 互联(无环、靠路由),上层用 VxLAN 叠出大二层(可跨机房、可迁移)。记住这张"分层图":

Overlay 层:VxLAN 大二层(VLAN/广播域跨越机房) 控制平面:BGP EVPN(通告 MAC/IP 在哪) Underlay 层:Leaf-Spine 三层 IP(OSPF/BGP,负责可达) 数据走 Underlay 路由,二层"幻象"由 VxLAN+EVPN 在顶层重建
图 5-0 现代二层数据中心的"三明治"架构

下面 5.1~5.5 按"先打底(Underlay)→ 再叠层(VxLAN/EVPN)→ 收口(网关)"的顺序讲。

5.1 MLAG:两台交换机"装成一台"(双活上联)

MLAG(Multi-chassis Link Aggregation) 让两台 Leaf(或两台 Spine)对下联服务器表现为一台逻辑交换机:服务器的两根线分别接两台 Leaf,却绑成一个 bond,两条链路都 active、都转发,任何一台 Leaf 挂了流量不中断。这是消除"接入层单点故障"的标准解法。

角色作用
Peerlink两台 MLAG 交换机之间的直连"心跳+同步"链路(一般单独一根线或 bond)
Sys-MAC两台设备共用的虚拟系统 MAC,让对端服务器认为只连了一台
Backup IP管理网上的备份心跳地址(peerlink 断了仍能保活)
CLAG ID下联 bond 在两台设备上的"相同编号",表示"这是同一个双归口"

拓扑准备

把 leaf01、leaf02 做成 MLAG 对(称作一个 " rack / 双归组"),它们之间用 swp50 直连作 peerlink;服务器双网卡分别接 leaf01 的 swp10 和 leaf02 的 swp10,绑成 bond1(CLAG ID 1)。

NVUE 配置(leaf01 与 leaf02 对称,仅管理/备份 IP 不同)

# —— 在两台 leaf 上都要做 ——
# 1) peerlink:直连口组成 bond(这里用单口 swp50 演示,生产建议双口 bond)
cumulus@leaf01:mgmt:~$ nv set interface swp50
# 2) 配置 MLAG 域
cumulus@leaf01:mgmt:~$ nv set clag peer sys-mac 44:38:39:FF:00:00
cumulus@leaf01:mgmt:~$ nv set clag peer interface swp50
cumulus@leaf01:mgmt:~$ nv set clag backup destination 10.0.0.22   # 对端管理 IP
# 3) 下联服务器的双归口:两台都配相同 clag id=1
cumulus@leaf01:mgmt:~$ nv set interface bond1 bond member swp10
cumulus@leaf01:mgmt:~$ nv set interface bond1 clag id 1
cumulus@leaf01:mgmt:~$ nv config apply && nv config save
# —— leaf02 上对应配置(备份 IP 指向 leaf01)——
cumulus@leaf02:mgmt:~$ nv set clag peer sys-mac 44:38:39:FF:00:00
cumulus@leaf02:mgmt:~$ nv set clag peer interface swp50
cumulus@leaf02:mgmt:~$ nv set clag backup destination 10.0.0.21
cumulus@leaf02:mgmt:~$ nv set interface bond1 bond member swp10
cumulus@leaf02:mgmt:~$ nv set interface bond1 clag id 1
cumulus@leaf02:mgmt:~$ nv config apply && nv config save
# 验证 MLAG 状态(两台都应是 "peer state: ESTABLISHED")
cumulus@leaf01:mgmt:~$ nv show clag
cumulus@leaf01:mgmt:~$ clagctl status     # 传统查看工具
双 Spine 也同理 若 Spine 也要双活(避免单台 Spine 成为单点),把两台 Spine 配成 MLAG 对,Leaf 双上联到这对 Spine。这样整张网"处处双活"。但要注意:生产更流行用 VxLAN/EVPN 替代 Spine 层 MLAG,见 5.2~5.3。
易错点 ① 两台设备的 sys-mac 必须相同,backup IP 必须互为对方;② CLAG ID 在两边必须一致;③ peerlink 本身也要放 bridge 里(若承载业务 VLAN)。clagctl status 里出现 "ESTABLISHED" 才算成功。

5.2 VxLAN:把二层"装进"UDP,跨三层搬运

VxLAN(RFC 7348) 解决一个核心难题:二层广播域本来不能跨三层路由,但虚拟机迁移、多租户又需要"大二层"。办法是:把原始二层帧整个封装成一个 UDP 包(目的端口 4789),通过底层 IP 网络送到对端 VTEP,再解封装还原二层帧。于是"二层"被伪装成"三层流量"穿越网络。

术语含义
VTEPVxLAN 隧道端点(Tunnel End Point),就是做封装/解封装的设备,通常是 Leaf 的 loopback/SVI IP
VNIVxLAN Network Identifier,24 位,相当于 VxLAN 世界的"VLAN ID"(可达 1600 万)
Underlay承载 VxLAN UDP 包的底层 IP 网络(Leaf-Spine 三层)
OverlayVxLAN 解出来后的二层网络(对虚拟机/主机透明)
一句话类比: VxLAN 像"把一封信(二层帧)装进快递箱(UDP),写上收件 VTEP 地址,由 Underlay 物流(IP 路由)送到,收件方拆箱取信"。一个 VNI 就是一个"专属快递柜格"。

NVUE:在 Leaf 上启用 VxLAN 并绑定 VLAN↔VNI

# 设 VTEP 源地址(一般用 loopback,需 Underlay 可达)
cumulus@leaf01:mgmt:~$ nv set nve vxlan source-address 10.0.0.2
# 把本地 VLAN 10 映射到 VNI 10(二层域跨机房靠同一 VNI 打通)
cumulus@leaf01:mgmt:~$ nv set bridge domain 10 vlan 10
cumulus@leaf01:mgmt:~$ nv set bridge domain 10 vni 10
cumulus@leaf01:mgmt:~$ nv config apply
先有 Underlay VxLAN 不是凭空能通的——所有 VTEP 的源地址必须在 Underlay 三层互通(即各 Leaf 的 loopback 能互相 ping)。否则封装好的 UDP 包送不到对端。所以 5.2 之前必须先做 5.5 的 Underlay。

5.3 BGP EVPN:让各 VTEP "互通情报"

光有 VxLAN 还不够:Leaf B 怎么知道"MAC 地址 aa:bb:cc 其实在 Leaf A 后面"? 传统靠泛洪(浪费带宽)。现代做法是用 BGP EVPN 作为控制平面:每个 VTEP 用 BGP 把"我这儿有哪些 MAC/IP、对应哪个 VNI"作为路由通告出去,其它 VTEP 收下后建好转发表,精准转发、不泛洪。

角色说明
EVPN一种 BGP 地址族(L2VPN EVPN),专门传二层可达性
Route Distinguisher (RD)区分不同 VNI 的路由,避免冲突
Route Target (RT)控制哪些 VTEP 接收哪些 VNI 的路由(像"订阅")
Type 2 路由通告 MAC/IP 可达性(主机在哪)
Type 3 路由通告 VTEP 成员(用于 BUM 流量副本)

步骤 A:先搭 Underlay 三层(见 5.5),让各 Leaf loopback 通

步骤 B:在 Leaf 上起 BGP,启用 EVPN 地址族,并绑 VNI

# 以 leaf01(AS 65101)向 spine01(AS 65000)建 BGP,并开 EVPN
cumulus@leaf01:mgmt:~$ nv set router bgp local-as 65101
cumulus@leaf01:mgmt:~$ nv set router bgp neighbor 10.0.0.11 remote-as 65000
cumulus@leaf01:mgmt:~$ nv set router bgp neighbor 10.0.0.11 address-family l2vpn-evpn enable on
# 把 VNI 10 接入 EVPN,设 RD/RT
cumulus@leaf01:mgmt:~$ nv set evpn vni 10 rd 65101:10
cumulus@leaf01:mgmt:~$ nv set evpn vni 10 route-target 65101:10
cumulus@leaf01:mgmt:~$ nv config apply
# Spine 作为 RR(路由反射器)或纯中转,集中各 Leaf 的 EVPN 路由
cumulus@spine01:mgmt:~$ nv set router bgp local-as 65000
cumulus@spine01:mgmt:~$ nv set router bgp neighbor 10.0.0.21 remote-as 65101
cumulus@spine01:mgmt:~$ nv set router bgp neighbor 10.0.0.21 address-family l2vpn-evpn enable on
# 若用 RR:nv set router bgp address-family l2vpn-evpn neighbor ... route-reflector-client on
cumulus@spine01:mgmt:~$ nv config apply
# 验证:看 EVPN 路由、VNI 同步
cumulus@leaf01:mgmt:~$ nv show evpn vni
cumulus@leaf01:mgmt:~$ nv show bgp l2vpn evpn summary
cumulus@leaf01:mgmt:~$ net show bgp l2vpn evpn   # 传统查看
Spine 要不要跑 EVPN? 两种主流:① Spine 做 路由反射器(RR),只中转 EVPN 路由不学转发表;② 全互联(iBGP full-mesh)。小拓扑用 RR 最省事,Spine 当 RR,Leaf 都是 client。生产大网几乎都用 RR。

5.4 Anycast 网关:服务器"就近"出网,还能随便迁移

主机要跨网段/出网,得有默认网关。在 VxLAN 环境里,传统"网关在一台设备上"会有单点问题。解法:每个 Leaf 上都配同一个网关 IP + 同一个虚拟 MAC(Anycast)。主机无论挂在哪个 Leaf,默认网关都是"隔壁那个",ARP 也不会飘;主机迁移到别的 Leaf,网关地址不变,无缝衔接。

# 在每个 Leaf 上建相同的 SVI(vlan 接口)作为 anycast 网关
cumulus@leaf01:mgmt:~$ nv set interface vlan10 ip address-virtual 192.168.10.1/24 mac 44:38:39:BF:00:10
cumulus@leaf02:mgmt:~$ nv set interface vlan10 ip address-virtual 192.168.10.1/24 mac 44:38:39:BF:00:10
cumulus@leaf03:mgmt:~$ nv set interface vlan10 ip address-virtual 192.168.10.1/24 mac 44:38:39:BF:00:10
cumulus@leaf04:mgmt:~$ nv set interface vlan10 ip address-virtual 192.168.10.1/24 mac 44:38:39:BF:00:10
# (四台 Leaf 配置完全一样,这就是 anycast 的精髓)
为什么同 IP 不冲突 Anycast 网关靠"相同 IP + 相同虚拟 MAC"工作:主机 ARP 学到的网关 MAC 全网一致,发给本地 Leaf 即可,流量根本不会"跨 Leaf 去找网关"。每个 Leaf 各自扛自己下联主机的网关转发,互不干扰、无单点。

5.5 三层 Underlay:Leaf-Spine 跑路由打通底层

VxLAN/EVPN 的"地基"是 Underlay:给每个 Leaf-Spine 互联口配 IP,跑一个 IGP(OSPF 或 BGP),让各 Leaf 的 loopback(VTEP 源地址) 全网可达。这是一切的前提。

设计:互联口用 /31(点对点),每台设备一个 loopback

链路leaf 端 IPspine 端 IP
leaf01↔spine01 swp110.1.1.0/3110.1.1.1/31
leaf01↔spine02 swp210.1.1.2/3110.1.1.3/31
leaf02↔spine01 swp110.1.1.4/3110.1.1.5/31
leaf02↔spine02 swp210.1.1.6/3110.1.1.7/31
loopbackleaf01=10.0.0.21, leaf02=10.0.0.22spine01=10.0.0.11, spine02=10.0.0.12
# NVUE:leaf01 侧(双上联 2 个 Spine,各宣告进 OSPF 形成 ECMP)
cumulus@leaf01:mgmt:~$ nv set interface lo ip address 10.0.0.21/32
cumulus@leaf01:mgmt:~$ nv set interface swp1 ip address 10.1.1.0/31
cumulus@leaf01:mgmt:~$ nv set interface swp2 ip address 10.1.1.2/31
# 跑 OSPF 打通 Underlay(两个上联都进 OSPF,自动 ECMP 负载分担)
cumulus@leaf01:mgmt:~$ nv set router ospf router-id 10.0.0.21
cumulus@leaf01:mgmt:~$ nv set interface swp1 router ospf area 0.0.0.0
cumulus@leaf01:mgmt:~$ nv set interface swp2 router ospf area 0.0.0.0
cumulus@leaf01:mgmt:~$ nv config apply
# 验证:loopback 能 ping 通两个 Spine(证明 ECMP 双上联都通)
cumulus@leaf01:mgmt:~$ ping 10.0.0.11
cumulus@leaf01:mgmt:~$ ping 10.0.0.12
BGP unnumbered 更优雅: 现代 Cumulus 推荐 Leaf-Spine 用 BGP unnumbered(基于 IPv6 link-local + 扩展下一跳),不用算 IP 段、配置极简。入门先用 OSPF/静态 IP 理解,进阶再切 unnumbered。底层只要"loopback 互通 + 能建 BGP 邻居"即可。

5.6 QoS:给重要流量"插队"

数据中心里存储、语音、业务流量混跑,需要 QoS(服务质量) 保证关键流量不被挤掉。Cumulus 基于 Linux tc,按 DSCP(IP 头里的优先级标记) 映射到硬件队列。

# NVUE:信任入口 DSCP,并对某队列限速/设优先级(示例)
cumulus@leaf01:mgmt:~$ nv set qos trust ds
# 为特定 DSCP 设调度(示意:把 EF/46 放进高优先队列)
cumulus@leaf01:mgmt:~$ nv set qos dot1q map 46 traffic-class 7
cumulus@leaf01:mgmt:~$ nv config apply
cumulus@leaf01:mgmt:~$ nv show qos
原则 多数数据中心内网是"无拥塞"设计(带宽充足),QoS 主要用于突发缓冲利他拥塞通知(ECN),而不是粗暴限速。新手阶段了解"DSCP→队列"映射即可,别过早复杂化。

5.7 自动化:用 Ansible 批量管 Cumulus

Cumulus 是"Linux 交换机",天生适合自动化。最主流是用 Ansible:写好 Playbook,一条命令把上百台交换机的配置刷好。

# playbook 示例:用 NCLU 模块给一组 leaf 配 VLAN
- hosts: leafs
  become: true
  tasks:
    - name: 创建 vlan 10 并配 access
      nclu:
        commands:
          - add interface swp10 bridge access 10
        commit: true
    - name: 用 NVUE 模块设主机名风格
      nvue:
        commands:
          - set hostname {{ inventory_hostname }}
        apply: true
除了 Ansible,Cumulus 还提供 NVUE REST APIcurl localhost:8765/nvue/...)、Python SDK、以及官方 Terraform Provider。自动化是"从能手到高手"的分水岭——把第 4、5 章的手工命令,沉淀成可版本化、可重复的代码。

小结

✅ 本章你掌握了生产级二层的四大件:

  1. MLAG:双活上联,消除接入单点;
  2. VxLAN:二层帧装 UDP,跨三层扩成大二层;
  3. BGP EVPN:控制平面,精准通告 MAC/IP,替代泛洪;
  4. Anycast 网关:每 Leaf 同网关 IP,主机就近出网、可迁移;
  5. 底层靠 三层 Underlay(OSPF/BGP) 打通 loopback;
  6. 了解 QoS 与 Ansible 自动化入口。

下一章我们把这些串成一个完整可验证的综合实验,并系统讲排错套路。

第六章 · 综合实验:搭一个生产级二层 Fabric 并系统排错

本章目标:把第 4、5 章串起来,在"2 个 Spine + 4 个 Leaf"的基础结构上叠加 MLAG 双活 + VxLAN/EVPN + Anycast 网关,给出完整拓扑与配置清单;然后教你一套"分层排错法",遇到不通按图索骥。读完 = 可独立完成 POC(LEVEL 4→5 之间)。

6.1 综合拓扑:双活 + 大二层

本综合拓扑沿用第 3、4 章的"2 个 Spine + 4 个 Leaf"结构。区别在于:基础实验里 4 台 Leaf 各自独立双上联;生产级里把 leaf01+leaf02 配成 MLAG 对、leaf03+leaf04 配成另一对,下联服务器双归到这对 Leaf,实现接入层双活、无单点。

Spine01 Spine02 Leaf01 Leaf02 Leaf03 Leaf04 peerlink peerlink 主机A(双归) 主机B(双归) 双 Spine + 双 MLAG Leaf 对:处处双活,无单点
图 6-1 综合生产级拓扑(双 Spine + 双 Leaf 对 + MLAG + VxLAN/EVPN)
设备ASLoopback(VTEP)角色
spine016500010.0.0.11Spine / BGP RR
spine026500010.0.0.12Spine / BGP RR
leaf01/02(MLAG对)6510110.0.0.21(对共享 VTEP)Leaf 对,接主机A/B
leaf03/04(MLAG对)6510210.0.0.23(对共享 VTEP)Leaf 对,接主机C/D

6.2 配置清单(按层给关键命令,细节回看前章)

  1. Underlay(每台):loopback + 互联口 /31 + OSPF/BGP,确保各 loopback 互通(5.5)。
  2. MLAG(leaf01/02、leaf03/04 各一对):peerlink + sys-mac + backup IP + 下联 bond 的 clag id(5.1)。
  3. VxLAN(每台 leaf)nv set nve vxlan source-address <loopback>,VLAN↔VNI 映射(5.2)。
  4. BGP EVPN(每台):建邻居到 Spine(RR),开 l2vpn-evpn,绑 VNI 的 RD/RT(5.3)。
  5. Anycast 网关(每台 leaf):相同 SVI IP + 虚拟 MAC(5.4)。
  6. VLAN/Access/Trunk(每台 leaf):下联主机口 access 到 VLAN,上联口 trunk(4.5/4.6)。
# 快速校验清单(在任意 leaf 上)
cumulus@leaf01:~$ nv show clag            # MLAG ESTABLISHED?
cumulus@leaf01:~$ ping 10.0.0.11           # Underlay loopback 通?
cumulus@leaf01:~$ nv show bgp l2vpn evpn summary   # EVPN 邻居 Up?
cumulus@leaf01:~$ nv show evpn vni         # VNI 已同步?
cumulus@leaf01:~$ nv show bridge vlan      # 接口 VLAN 正确?

6.3 端到端验证(主机A ↔ 主机B 跨 Leaf 二层/三层通)

验证项操作预期
二层同 VLAN主机A ping 主机B(同网段)通,路径走 VxLAN 隧道
三层出网主机A ping 网关 192.168.10.1通(anycast 网关)
隧道建立nv show evpn vniVNI 10 状态 active,有 Remote VTEP
MAC 同步net show evpn mac vni 10能看到对端主机 MAC
BUM 正常主机A 发 ARP,主机B 能回ARP 经 Type3 路由复制送达

6.4 分层排错法:不通就从上往下查

网络排错最怕"乱戳"。坚持"自底向上、逐层验证",5 分钟定位 90% 问题。

查什么关键命令典型病
① 物理/链路口 up?线连对?ip link shownv show interface线松、口 down、速率不匹配
② 二层VLAN/Trunk/Bridge 对?bridge vlanbridge fdbtrunk VLAN 不一致、忘加桥
③ Underlayloopback 互通?ping lonv show ip routeIGP 没起、IP 配错
④ BGP邻居 Up?nv show bgp summaryAS 错、对端地址不可达
⑤ EVPN路由收发?nv show bgp l2vpn evpn没开 evpn 地址族、RT 不匹配
⑥ VxLANVNI/VTEP 对?nv show evpn vnisource-address 不可达、VNI 映射错
⑦ 网关anycast 生效?nv show interface vlan10虚拟 MAC 不一致、SVI 没起
最常见三类Underlay 没通就让 VxLAN 跑——必败,先 ping loopback;② EVPN 地址族没开——邻居是 Up 的但 VNI 同步不了;③ RT/RD 不一致——各 Leaf 的 VNI 路由互相不收。按上面 7 步走,基本都能锁定。
抓包神技 实在查不出,就在可疑口抓包:sudo tcpdump -i swp1 -n 'udp port 4789' 看 VxLAN 包是否进出;tcpdump -i swp1 -e vlan 看 trunk 标签。眼见为实。

6.5 监控与可观测性(了解即可)

第七章 · 从新手到高手:下一步怎么走

本章目标:给你一张"出师后的地图"——真实设备迁移注意事项、认证与社区、设计权衡、以及该继续学什么。配合第零章的段位表,你已经知道自己在哪、往哪去。

7.1 五段位回顾与对应能力

段位你已能下一步养成的习惯
L1 看懂画得出 Spine-Leaf,讲清优劣开始动手,别只看
L2 跑起EVE-NG + Cumulus 就绪熟悉 NVUE 思维
L3 二层VLAN/Trunk/Bridge 配通练排错节奏
L4 高级MLAG/VxLAN/EVPN/Anycast做综合实验、写文档
L5 高手自动化、设计权衡、真实设备沉淀代码库、带团队

7.2 从 EVE-NG 到真实白盒:注意事项

维度实验(VX)真实设备
转发软件模拟,性能低ASIC 硬件转发,线速
口名swp1…(逻辑)随硬件,需看 /etc/cumulus/ports.conf 映射
安装直接跑 qcow2需 ONIE 装系统到白盒
License免费软件免费,企业支持需订阅
踩坑随便砸注意断电、配置备份、变更窗口
ports.conf:真实硬件上,前面板口(如 eth0/以太网 1)到内部 swp 的映射在 /etc/cumulus/ports.conf 里定义。实验里 swp 是连续的,真机要先看这个文件确认"面板口 5 = swp5 还是 swp12"。

7.3 认证、文档与社区

7.4 常见设计权衡(高手思维)

问题选项 A选项 B怎么选
防环/扩 Spine纯二层 STPVxLAN/EVPN Overlay规模大、要迁移 → B(本书推荐)
接入双活MLAG单归 + ECMP要服务器双网卡不停机 → MLAG
Underlay 路由OSPFBGP unnumbered简单起步 OSPF;规模/eBGP → BGP
网关位置集中式(Spine)分布式 Anycast(Leaf)现代分布式 anycast 更优
管理手工 CLIAnsible/API≥10 台必上自动化

7.5 推荐继续深入的方向

ContainerLab

用容器搭网络拓扑,和 CI/CD 结合,自动化实验首选。

SONiC

另一主流开源 NOS,和 Cumulus 互补,拓宽白盒视野。

自动化栈

Ansible + NetBox + Git,把网络当代码(IaC)。

BGP 深度

EVPN、路由反射、unnumbered,路由功底决定上限。

可观测性

sFlow、gNMI、Streaming Telemetry + Grafana。

真实 POC

用白盒硬件跑一遍本手册,补上性能与运维经验。

最后一句 网络不是"背命令",是"懂原理 → 会搭 → 能排 → 敢自动化"。这本手册给你前两步的地基,后两步靠你在真实环境里摔打。祝你早日从 L1 打到 L5。

附录 · 速查表、术语与资源

附录 A · 常用命令速查表(NVUE / NCLU / Linux)

目的NVUE(推荐)NCLU(传统)Linux / 查看
设主机名nv set system hostname Xnet add hostname Xhostnamectl set-hostname X
配接口 IPnv set interface swp1 ip address 10.1.1.0/31net add interface swp1 ip address ...ip addr add ... dev swp1
看接口nv show interfacenet show interfaceip -br addr; ip link
建 bridgenv set bridge domain br_default(写 /etc/network/interfaces)bridge link
access vlannv set interface swp10 bridge access 10net add interface swp10 bridge access 10bridge vlan
trunk vlannv set interface swp1 bridge trunk vlans 10,20net add interface swp1 bridge trunk vlans 10 20bridge vlan show
建 bondnv set interface bond1 bond member swp10net add bond bond1 bond slaves swp10cat /proc/net/bonding/bond1
MLAGnv set clag peer sys-mac ...net add clag peer sys-mac ...clagctl status
VxLANnv set nve vxlan source-address 10.0.0.2(写 vxlan 接口)ip -d link show vxlanX
BGPnv set router bgp local-as 65101net add bgp autonomous-system 65101vtysh -c 'sh ip bgp sum'
EVPNnv set router bgp neighbor X addr-family l2vpn-evpn enable onnet add bgp l2vpn evpn neighbor Xnet show bgp l2vpn evpn
OSPFnv set router ospf router-id 10.0.0.21net add ospf router-id 10.0.0.21vtysh -c 'sh ip ospf neighbor'
应用配置nv config applynet commitifreload -a
保存配置nv config save(commit 即持久)copy running-config startup(vtysh)
抓包sudo tcpdump -i swp1 -n
版本nv show systemnet show versioncat /etc/os-release

附录 B · 术语中英对照表

术语英文一句话
叶脊架构Spine-Leaf每个 Leaf 全互联所有 Spine 的无阻塞网络
等价多路径ECMP多条等代价路径分摊流量
白盒交换机White Box / Bare Metal只卖硬件、不绑系统的交换机
网络操作系统NOS跑在交换机上的网络系统(如 Cumulus)
解耦Disaggregation硬件与软件分离,自由选 NOS
链路聚合LACP / Bond多链路绑一根,叠加带宽+冗余
跨设备链路聚合MLAG两台交换机对下联像一台,双活
虚拟局域网VLAN逻辑隔离的二层广播域
干线Trunk承载多 VLAN 的交换机互联口
感知 VLAN 的桥VLAN-aware Bridge单一桥承载多 VLAN(Cumulus 推荐)
虚拟扩展局域网VxLAN二层帧封装 UDP,跨三层扩二层
隧道端点VTEP做 VxLAN 封装/解封装的设备
以太网虚拟私有网络EVPN用 BGP 通告二层可达性的控制平面
任播网关Anycast Gateway每 Leaf 同网关 IP,主机就近出网
底层网络Underlay承载 Overlay 的三层 IP 基础网络
叠加网络Overlay在 Underlay 上叠出的虚拟二层网络
路由反射器Route Reflector (RR)集中中转 BGP 路由,避免全互联
生成树STP / MSTP堵端口防二层环(有带宽浪费)
配置引擎NVUECumulus 5.x 结构化配置(nv 命令)

附录 C · 推荐学习资源

附录 D · 版本与镜像说明

📘 手册到此结束。 你已拥有:理论图解(第1章)+ 武器认知(第2章)+ 实验平台(第3章)+ 基础二层(第4章)+ 高级特性(第5章)+ 综合实验与排错(第6章)+ 进阶地图(第7章)+ 速查附录。
最佳用法: 左手 EVE-NG 开着,右手翻对应章节,边读边敲。遇到命令差异,nv ? 永远是你最好的朋友。祝你早日把"二层数据中心"玩成肌肉记忆。

NVIDIA Cumulus 二层数据中心 Spine-Leaf 实验手册 · 理论 + 实验 · 自包含 HTML 版
内置自动目录 / 阅读进度 / 打印导出 · 建议用现代浏览器打开