NVIDIA Cumulus 二层数据中心架构
一本用大白话讲透 Spine-Leaf 的实验手册:从数据中心的"为什么"到在 EVE-NG 上导入最新版 Cumulus Linux、搭出可运行的二层 Fabric,再到 MLAG、VxLAN、BGP EVPN 高级玩法。新手能照着做,老手能查细节。
第零章 · 从新手到高手的学习路线图
这本手册不是让你一口气读完,而是像打游戏升级一样一层层往上爬。先看清自己在哪一级,再决定先读哪章。下面把整条路径拆成 5 个段位,每一段都标注了"你要能说出/做出来什么"。
看懂架构
能画出 Spine-Leaf 长什么样,说清它比传统三层好在哪,知道 Leaf/Spine 各是干嘛的。
跑起平台
在 EVE-NG 里装好环境、导入最新 Cumulus 镜像、启节点、连好线,能进命令行。
二层 Fabric
用 VLAN + Trunk 搭出可通的二层 Spine-Leaf,配置 LACP 捆绑,能 ping 通并查表。
高可用与Overlay
配置 MLAG 双活、VxLAN 大二层、BGP EVPN 控制平面、Anycast 网关,理解 Underlay/Overlay。
生产级 & 自动化
做综合排错、写 Ansible 批量下发、懂设计权衡,能把实验搬到真实设备。
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 训练、云存储等服务。你可以把它想象成一栋"服务器公寓":
- 服务器 = 住户,各自有"门牌号"(IP 地址)和"名字"(主机名)。
- 交换机 = 楼道里的"接线员/电梯系统",负责把数据从一个服务器送到另一个。
- 网络 = 整栋楼的"交通系统",决定数据包怎么走最快、不堵车、不迷路。
数据中心网络的核心任务只有四个字:高带宽、低延迟、不丢包、好扩展。随着云计算和虚拟化的普及,服务器之间互相"串门"的流量(专业叫 东西向流量 / 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 里常叫 swp1、swp2(switch port 的缩写)。 |
| 管理口 | Management / eth0 | 专门用来远程登录、带外管理交换机的口,不跑业务流量。 |
1.3 传统三层架构:核心-汇聚-接入
在 Spine-Leaf 之前,企业网和数据中心普遍用"三层架构":接入层(Access)→ 汇聚层(Distribution)→ 核心层(Core)。它长得像一棵倒立的树:
它的三个致命问题,正是 Spine-Leaf 要解决的:
| 痛点 | 现象 | 后果 |
|---|---|---|
| ① 带宽"收敛比"大 | 下层总带宽 > 上层上联带宽(比如 48 个万兆口汇聚到 4 个万兆上联,收敛比 12:1) | 高峰期拥堵,东西向流量要"爬树"绕远。 |
| ② 生成树阻塞端口 | 二层用 STP 防环,会主动堵掉一半冗余链路 | 明明有双上联,却只有一条能用,带宽浪费一半,故障切换慢(秒级)。 |
| ③ 扩展要"换大机器" | 核心不够了只能买更大的核心交换机(scale-up) | 贵、停机风险高、厂商锁定强。 |
1.4 Clos 网络:一个 1953 年的老点子
Spine-Leaf 不是新发明,它来自 1953 年电话工程师 Charles Clos 的"多级交换"论文。核心思想:用很多个小便宜的交换单元,拼成一个"任意两点之间都有多条等长路径"的无阻塞网络,而不是造一个超级大的交换核心。
放到数据中心里:
- 把"核心"拆成多个 Spine(脊),彼此不互连;
- 每个 Leaf(叶) 都-full mesh(全互联)地连到每一个 Spine;
- 于是任意两个 Leaf 下的服务器之间,都有
Leaf→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 |
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 |
那么"二层数据中心"是什么意思?有两种常见理解,本手册覆盖两者:
- 狭义(纯二层 Fabric):Leaf 和 Spine 之间全部跑二层(Trunk 透传 VLAN),整张网是一个大二层域。好处是简单、服务器迁移不限位置;缺点是要靠 VxLAN 才能跨机房扩大,且大二层广播要控制。
- 广义(现代叠加网):Underlay 用三层 IP 互联(Leaf-Spine 跑 BGP/OSPF 打通底层),Overlay 用 VxLAN+EVPN 在三层之上"叠"出一层大二层。这是当今生产环境的主流,也叫"三层 Underlay + 二层 Overlay"。
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 |
| NVUE | Cumulus 5.x 的新配置引擎(nv 命令) | 2.3 / 全文 |
1.8 小结与自测
🎯 看完这一章,你应该能回答:
- 用一句话说明 Spine-Leaf 相比传统三层好在哪?
- 为什么传统二层要用 STP,而 Spine-Leaf 不需要(或弱化)它?
- 二层靠什么地址转发?三层靠什么?各举一个代表协议。
- "二层数据中心"有哪两种理解?本手册分别在第几章做?
答不上来?回到对应小节再读一遍。能答上来,恭喜你已具备 LEVEL 1,可以进下一章了。
第二章 · NVIDIA Cumulus Linux 是什么(先认识你的"武器")
本章目标:搞懂 Cumulus 不是"一台交换机"而是"跑在白盒交换机上的 Linux 系统";记住它的几大组件(switchd / FRR / ifupdown2 / NVUE);会用 nv 和 net 两种配置方式;知道最新版 5.x 的变化与免费策略。
2.1 一句话定义:交换机里的 Linux
NVIDIA Cumulus Linux 是一个完整的网络操作系统(NOS,Network Operating System)。它把标准的 Debian Linux 装进交换机,让你能用管服务器的方式管交换机:apt 装软件、systemctl 管服务、bash 写脚本、python 做自动化。一句话——"把交换机变成一台长了很多网口的服务器"。
ip、bridge),要么是一个叫 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…) |
2.3 Cumulus 的"五脏六腑":核心组件
理解组件,才能理解排错时该看哪里。Cumulus 5.x 的关键进程:
| 组件 | 干什么 | 类似业界 |
|---|---|---|
| switchd | 硬件抽象守护进程,把 Linux 内核的"软件转发"翻译成 ASIC 的"硬件转发"。配置的桥梁。 | —(Cumulus 特有) |
NVUE(nv) | 5.x 新配置引擎:用 nv set/get 改配置,nv config apply 生效。配置存为 YAML 结构化数据。 | 类似 Arista eAPI、Juniper Junos 结构化配置 |
NCLU(net) | 传统配置壳,net add/commit。底层写 /etc/network/interfaces 等文件。仍可用。 | 思科式"配置会话" |
| ifupdown2 | Linux 网络接口管理工具,读取 /etc/network/interfaces 启停接口。 | Linux ifupdown 的增强版 |
FRR(vtysh) | 开源路由套件,提供 BGP/OSPF/IS-IS/PIM 等。Cumulus 的路由全靠它。 | Quagga 继任者,业界通用 |
| clagd / mlagd | MLAG(跨设备链路聚合)守护进程,让两台交换机像一台。 | 思科 vPC、华为 M-LAG |
| BGP EVPN | 用 BGP 传递 VxLAN 控制信息(MAC/IP 可达性)。 | VXLAN 标准控制平面 |
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 启接口
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-release、net show version)即可看到版本。EVE-NG 导入时建议选 5.x 的最新 VX 镜像(文件名类似 cumulus-linux-5.x.0-vx-amd64.qcow2)。2.6 许可与获取(免费,但支持另算)
- 软件本身免费:Cumulus Linux / Cumulus VX 可免费下载、用于实验和生产。
- 企业支持订阅:要官方 TAC、长期支持(LTS)、高级功能 SLA,需购买 NVIDIA 企业支持。个人学习不需要。
- 获取渠道:NVIDIA 官网 Cumulus Linux 下载页、EVE-NG 社区镜像仓库、或《网络之路》等镜像站。第 3 章手把手教你导入。
2.7 在 EVE-NG 里它长啥样:Cumulus VX 节点
EVE-NG 把 Cumulus VX 当作一个虚拟机节点来跑(不是真实 ASIC,转发走软件/ virtio)。它和真机的配置命令 100% 一致,只有性能天差地别——但做实验、学命令完全够用。节点启动后有:
| 资源 | 说明 |
|---|---|
| 管理口 eth0 | 连 EVE-NG 的云/桥,用于你 SSH 登录(建议 p 一下就通) |
| 业务口 swp1~swpN | 就是交换端口,拖线互联就是这些口 |
| 默认账号 | cumulus / cumulus(部分镜像首次需改密) |
| 主机名 | 默认 leaf01、spine01 之类,可在实验里改 |
sudo;EVE-NG 的 VX 镜像里 cumulus 用户通常已在 sudoers,配完直接 nv config apply 即可,不必每条加 sudo。小结
✅ 记住三件事就够了:
- Cumulus = 跑在白盒交换机上的 Debian Linux,转发靠 ASIC,控制靠 Linux 进程。
- 5.x 用 NVUE(
nv) 配置;传统net/ifupdown2仍可用,但别混用。 - 软件免费,实验用 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 控制台池、鉴权 | 团队/培训用 |
3.2 部署 EVE-NG(三种姿势)
EVE-NG 本身是一个定制过的 Ubuntu 虚拟机,你把它跑在宿主机里即可。
| 方式 | 适用 | 要点 |
|---|---|---|
| VMware Workstation / Fusion | Windows/macOS 个人电脑 | 导入官方 .ova 模板最省事 |
| VirtualBox | 免费,但性能略差 | 开启 VT-x/AMD-V;网络用"桥接" |
| 裸金属 / Proxmox / ESXi | 常驻服务器 | 资源足,可跑大型拓扑 |
3.3 首次开机与基础设置
- 启动 EVE-NG 虚拟机,控制台出现初始化向导:设置 主机名、管理 IP(建议静态)、DNS、密码。
- 默认 Web 管理地址即管理口 IP。浏览器打开
http://<EVE-IP>/。 - 默认账号
admin/eve(社区版),首次登录建议改密。 - 客户端若用本地控制台,安装 TightVNC / RealVNC(HTML5 控制台则可直接用浏览器,更推荐)。
3.4 获取最新版 Cumulus VX 镜像
Cumulus VX 是虚拟机格式(qcow2),文件名通常形如 cumulus-linux-5.x.0-vx-amd64.qcow2。获取渠道:
- 官方:NVIDIA Cumulus Linux 下载页(搜索 "Cumulus VX download"),选 VX / KVM 版本。
- 镜像社区:EVE-NG 官方论坛的镜像索引、或国内《网络之路》等可信镜像站。
-amd64.bin 安装镜像。VX 是开箱即用的 qcow2,直接能当 EVE-NG 节点跑。3.5 导入镜像到 EVE-NG(核心步骤)
EVE-NG 规定:每种设备的镜像放在 /opt/unetlab/addons/qemu/<模板目录名>/ 下,且文件必须重命名为 virtioa.qcow2。Cumulus 的模板目录名(不同 EVE-NG 版本略有差异)常见为 cumulus-5.x 或 cumulusvx-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 与拓扑
- Web 左上角 Add new lab → 填名称(如
L2-Spine-Leaf-Basic)、选图标、点 Save。 - 进入 Lab,点顶部 Add Node(+ 图标) → 设备类型选 Cumulus(或 Cumulus VX)→ 版本选刚导入的
5.11。 - 给节点命名(
spine01、spine02、leaf01~leaf04)、设 RAM(建议 4096 MB)、CPU(2)、网卡数(按拓扑,每个 Leaf 至少 2 个上联口 + 1 个下联口)。重复添加,凑齐 6 台交换机的拓扑。 - 用 Add Link(连线) 工具:先点起点设备的端口(如 leaf01 的
swp1),再点终点(spine01 的swp1),即可连一条线。 - 全选节点 → Start 启动。等状态变绿,右键节点 Console 即可打开终端。
3.7 怎么"登"进 Cumulus 节点
| 方式 | 做法 | 适用 |
|---|---|---|
| Web Console(VNC) | 右键节点 → Console,浏览器里直接操作 | 最省事,首登改密用 |
| SSH(管理云) | 给节点 eth0 接一个 "Cloud/Manager" 网桥,宿主机直接 ssh cumulus@IP | ✅ 日常最舒服 |
| Serial | 部分模板支持串口 | 排错时用 |
eth0。这样 EVE-NG 会把 eth0 桥到宿主机网段,你就能用终端软件 SSH 登录,复制粘贴命令不再痛苦。(拓扑图里管理云通常单独画,不和业务 swp 口混。)3.8 本章实验:搭好"基础二层"骨架
我们为后续所有实验定一个统一拓扑:2 个 Spine + 4 个 Leaf 的全互联(full-mesh)结构——每个 Leaf 双上联到两个 Spine,每个 Spine 下联全部 4 个 Leaf。第 4、5 章都基于它扩展。
| 节点 | 角色 | 上联口(连 Spine) | 下联主机口 | 管理 IP(示例) |
|---|---|---|---|---|
| spine01 | 脊 | — | swp1→leaf01, swp2→leaf02, swp3→leaf03, swp4→leaf04 | 10.0.0.11 |
| spine02 | 脊 | — | swp1→leaf01, swp2→leaf02, swp3→leaf03, swp4→leaf04 | 10.0.0.12 |
| leaf01 | 叶 | swp1→spine01, swp2→spine02 | swp10→主机A | 10.0.0.21 |
| leaf02 | 叶 | swp1→spine01, swp2→spine02 | swp10→主机B | 10.0.0.22 |
| leaf03 | 叶 | swp1→spine01, swp2→spine02 | swp10→主机C | 10.0.0.23 |
| leaf04 | 叶 | swp1→spine01, swp2→spine02 | swp10→主机D | 10.0.0.24 |
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 上的四台主机,像在同一台大交换机下一样二层互通。关键靠三点:
- 上联口做 Trunk:Leaf↔Spine 的线要能透传所有业务 VLAN;
- 下联口做 Access:Leaf 接主机的口划入指定 VLAN;
- VLAN-aware 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
4.3 接口配置:把 swp 口"打开"
Cumulus 里物理口叫 swp1、swp2…。默认可能没启用或速度自适应。先确认接口状态、再按需配置。为做二层转发,交换口一般不配 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
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
/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 |
| PVID | Access 口给"没打标签"的帧默认归到的 VLAN | 进 swp10 的无标签帧 → VLAN 10 |
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
# 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
4.8 验证与排错:怎么证明"通了"
配置完,按下面顺序排查。每一条都是"看一眼就知道哪里错"的利器。
| 想确认 | 命令 | 正常该看到 |
|---|---|---|
| 桥和 VLAN 成员 | nv show bridge / bridge vlan | 各口在正确 VLAN,trunk 口有 vid 10,20 |
| 接口是否 up | ip link show swp1 | 状态 UP、有正确速率 |
| MAC 表学到了没 | bridge fdb show | 能看到主机 MAC 挂在对应口 |
| Bond 状态 | cat /proc/net/bonding/bond1 | MII Status: up,成员齐全 |
| 二层通断 | 主机上 ping 同VLAN另一主机IP | 能通 |
| 抓包看标签 | sudo tcpdump -i swp1 -e vlan | trunk 上有 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
4.9 端到端实验:让四台主机二层互通
- 给四台主机配同 VLAN(如都 vlan 10)的 IP:主机A
192.168.10.11/24、主机B192.168.10.12/24、主机C192.168.10.13/24、主机D192.168.10.14/24(想验证 VLAN 隔离,可把主机D 放 vlan 20,验证它 ping 不通 vlan 10)。 - 按 4.6 在 leaf01~04 和 spine01/spine02 配好 bridge + trunk/access,并确认两台 Spine 的生成树已开启(4.7)。
- 主机A ping 主机B(跨 leaf,经 2 个 Spine):
ping 192.168.10.12。能通 = 二层 Spine-Leaf 大功告成。 - 在 leaf01 抓包:
sudo tcpdump -i swp1 -n icmp,应看到 ICMP 经 trunk 转发;再看nv show bridge spanning-tree确认一条冗余上联被阻塞(STP 生效)。 - (进阶)把主机D 移到 vlan 20,验证它与 vlan 10 的主机二层不通(证明 VLAN 隔离生效),但同 vlan 20 的主机之间仍通。
小结
✅ 本章你学会了:
- 系统初始化(主机名/管理 IP);
- 二层口不配 IP,只加 bridge;
- LACP Bond 把多链路绑一根;
- Access / Trunk / VLAN / PVID 的含义与配置;
- VLAN-aware Bridge 是 Cumulus 二层核心;
- 2 个 Spine 全互联有二层环,纯二层靠 STP 防环,生产用 MLAG/VxLAN;
- 用
bridge vlan/bridge fdb/tcpdump排错。
第五章 · 高级配置:从"能通"到"生产级"
本章目标:学会 MLAG 双活、VxLAN 大二层、BGP EVPN 控制平面、Anycast 网关,理解三层 Underlay 与二层 Overlay 的分层,并了解 QoS 与自动化。读完 = LEVEL 4,具备做 POC 的能力。命令以 NVUE 为主,关键处给传统对照。
nv ? / nv set ... ? 确认。EVPN/VxLAN 是 Cumulus 的高阶特性,建议在理解了第 4 章后再啃。5.0 先建立全局视角:三层 Underlay + 二层 Overlay
生产级"二层数据中心"的真相是:底层用三层 IP 互联(无环、靠路由),上层用 VxLAN 叠出大二层(可跨机房、可迁移)。记住这张"分层图":
下面 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 # 传统查看工具
clagctl status 里出现 "ESTABLISHED" 才算成功。5.2 VxLAN:把二层"装进"UDP,跨三层搬运
VxLAN(RFC 7348) 解决一个核心难题:二层广播域本来不能跨三层路由,但虚拟机迁移、多租户又需要"大二层"。办法是:把原始二层帧整个封装成一个 UDP 包(目的端口 4789),通过底层 IP 网络送到对端 VTEP,再解封装还原二层帧。于是"二层"被伪装成"三层流量"穿越网络。
| 术语 | 含义 |
|---|---|
| VTEP | VxLAN 隧道端点(Tunnel End Point),就是做封装/解封装的设备,通常是 Leaf 的 loopback/SVI IP |
| VNI | VxLAN Network Identifier,24 位,相当于 VxLAN 世界的"VLAN ID"(可达 1600 万) |
| Underlay | 承载 VxLAN UDP 包的底层 IP 网络(Leaf-Spine 三层) |
| Overlay | VxLAN 解出来后的二层网络(对虚拟机/主机透明) |
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
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 # 传统查看
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 的精髓)
5.5 三层 Underlay:Leaf-Spine 跑路由打通底层
VxLAN/EVPN 的"地基"是 Underlay:给每个 Leaf-Spine 互联口配 IP,跑一个 IGP(OSPF 或 BGP),让各 Leaf 的 loopback(VTEP 源地址) 全网可达。这是一切的前提。
设计:互联口用 /31(点对点),每台设备一个 loopback
| 链路 | leaf 端 IP | spine 端 IP |
|---|---|---|
| leaf01↔spine01 swp1 | 10.1.1.0/31 | 10.1.1.1/31 |
| leaf01↔spine02 swp2 | 10.1.1.2/31 | 10.1.1.3/31 |
| leaf02↔spine01 swp1 | 10.1.1.4/31 | 10.1.1.5/31 |
| leaf02↔spine02 swp2 | 10.1.1.6/31 | 10.1.1.7/31 |
| loopback | leaf01=10.0.0.21, leaf02=10.0.0.22 | spine01=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
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
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
curl localhost:8765/nvue/...)、Python SDK、以及官方 Terraform Provider。自动化是"从能手到高手"的分水岭——把第 4、5 章的手工命令,沉淀成可版本化、可重复的代码。小结
✅ 本章你掌握了生产级二层的四大件:
- MLAG:双活上联,消除接入单点;
- VxLAN:二层帧装 UDP,跨三层扩成大二层;
- BGP EVPN:控制平面,精准通告 MAC/IP,替代泛洪;
- Anycast 网关:每 Leaf 同网关 IP,主机就近出网、可迁移;
- 底层靠 三层 Underlay(OSPF/BGP) 打通 loopback;
- 了解 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,实现接入层双活、无单点。
| 设备 | AS | Loopback(VTEP) | 角色 |
|---|---|---|---|
| spine01 | 65000 | 10.0.0.11 | Spine / BGP RR |
| spine02 | 65000 | 10.0.0.12 | Spine / BGP RR |
| leaf01/02(MLAG对) | 65101 | 10.0.0.21(对共享 VTEP) | Leaf 对,接主机A/B |
| leaf03/04(MLAG对) | 65102 | 10.0.0.23(对共享 VTEP) | Leaf 对,接主机C/D |
6.2 配置清单(按层给关键命令,细节回看前章)
- Underlay(每台):loopback + 互联口 /31 + OSPF/BGP,确保各 loopback 互通(5.5)。
- MLAG(leaf01/02、leaf03/04 各一对):peerlink + sys-mac + backup IP + 下联 bond 的 clag id(5.1)。
- VxLAN(每台 leaf):
nv set nve vxlan source-address <loopback>,VLAN↔VNI 映射(5.2)。 - BGP EVPN(每台):建邻居到 Spine(RR),开 l2vpn-evpn,绑 VNI 的 RD/RT(5.3)。
- Anycast 网关(每台 leaf):相同 SVI IP + 虚拟 MAC(5.4)。
- 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 vni | VNI 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 show、nv show interface | 线松、口 down、速率不匹配 |
| ② 二层 | VLAN/Trunk/Bridge 对? | bridge vlan、bridge fdb | trunk VLAN 不一致、忘加桥 |
| ③ Underlay | loopback 互通? | ping lo、nv show ip route | IGP 没起、IP 配错 |
| ④ BGP | 邻居 Up? | nv show bgp summary | AS 错、对端地址不可达 |
| ⑤ EVPN | 路由收发? | nv show bgp l2vpn evpn | 没开 evpn 地址族、RT 不匹配 |
| ⑥ VxLAN | VNI/VTEP 对? | nv show evpn vni | source-address 不可达、VNI 映射错 |
| ⑦ 网关 | anycast 生效? | nv show interface vlan10 | 虚拟 MAC 不一致、SVI 没起 |
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 监控与可观测性(了解即可)
- sFlow / gNMI:采集流量与遥测,接 Prometheus/Grafana。
- SNMP:传统网管轮询,Cumulus 内置 snmpd。
- NVUE 状态命令:日常排错用
nv show ...比翻日志快。 - 日志:
journalctl -u switchd、journalctl -u frr看守护进程。
第七章 · 从新手到高手:下一步怎么走
本章目标:给你一张"出师后的地图"——真实设备迁移注意事项、认证与社区、设计权衡、以及该继续学什么。配合第零章的段位表,你已经知道自己在哪、往哪去。
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 | 免费 | 软件免费,企业支持需订阅 |
| 踩坑 | 随便砸 | 注意断电、配置备份、变更窗口 |
/etc/cumulus/ports.conf 里定义。实验里 swp 是连续的,真机要先看这个文件确认"面板口 5 = swp5 还是 swp12"。7.3 认证、文档与社区
- 官方文档:NVIDIA Cumulus Linux User Guide(最权威,命令以它为据)。
- 认证:NVIDIA 认证体系(含数据中心网络方向),可作为能力背书。
- 社区:EVE-NG 论坛(镜像/排错)、Cumulus GitHub、厂商技术博客、国内网络技术社区。
- 实验室:NVIDIA 提供在线 Cumulus 实验环境(Air 等),无硬件也能练真机命令。
7.4 常见设计权衡(高手思维)
| 问题 | 选项 A | 选项 B | 怎么选 |
|---|---|---|---|
| 防环/扩 Spine | 纯二层 STP | VxLAN/EVPN Overlay | 规模大、要迁移 → B(本书推荐) |
| 接入双活 | MLAG | 单归 + ECMP | 要服务器双网卡不停机 → MLAG |
| Underlay 路由 | OSPF | BGP unnumbered | 简单起步 OSPF;规模/eBGP → BGP |
| 网关位置 | 集中式(Spine) | 分布式 Anycast(Leaf) | 现代分布式 anycast 更优 |
| 管理 | 手工 CLI | Ansible/API | ≥10 台必上自动化 |
7.5 推荐继续深入的方向
ContainerLab
用容器搭网络拓扑,和 CI/CD 结合,自动化实验首选。
SONiC
另一主流开源 NOS,和 Cumulus 互补,拓宽白盒视野。
自动化栈
Ansible + NetBox + Git,把网络当代码(IaC)。
BGP 深度
EVPN、路由反射、unnumbered,路由功底决定上限。
可观测性
sFlow、gNMI、Streaming Telemetry + Grafana。
真实 POC
用白盒硬件跑一遍本手册,补上性能与运维经验。
附录 · 速查表、术语与资源
附录 A · 常用命令速查表(NVUE / NCLU / Linux)
| 目的 | NVUE(推荐) | NCLU(传统) | Linux / 查看 |
|---|---|---|---|
| 设主机名 | nv set system hostname X | net add hostname X | hostnamectl set-hostname X |
| 配接口 IP | nv set interface swp1 ip address 10.1.1.0/31 | net add interface swp1 ip address ... | ip addr add ... dev swp1 |
| 看接口 | nv show interface | net show interface | ip -br addr; ip link |
| 建 bridge | nv set bridge domain br_default | (写 /etc/network/interfaces) | bridge link |
| access vlan | nv set interface swp10 bridge access 10 | net add interface swp10 bridge access 10 | bridge vlan |
| trunk vlan | nv set interface swp1 bridge trunk vlans 10,20 | net add interface swp1 bridge trunk vlans 10 20 | bridge vlan show |
| 建 bond | nv set interface bond1 bond member swp10 | net add bond bond1 bond slaves swp10 | cat /proc/net/bonding/bond1 |
| MLAG | nv set clag peer sys-mac ... | net add clag peer sys-mac ... | clagctl status |
| VxLAN | nv set nve vxlan source-address 10.0.0.2 | (写 vxlan 接口) | ip -d link show vxlanX |
| BGP | nv set router bgp local-as 65101 | net add bgp autonomous-system 65101 | vtysh -c 'sh ip bgp sum' |
| EVPN | nv set router bgp neighbor X addr-family l2vpn-evpn enable on | net add bgp l2vpn evpn neighbor X | net show bgp l2vpn evpn |
| OSPF | nv set router ospf router-id 10.0.0.21 | net add ospf router-id 10.0.0.21 | vtysh -c 'sh ip ospf neighbor' |
| 应用配置 | nv config apply | net commit | ifreload -a |
| 保存配置 | nv config save | (commit 即持久) | copy running-config startup(vtysh) |
| 抓包 | — | — | sudo tcpdump -i swp1 -n |
| 版本 | nv show system | net show version | cat /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 | 堵端口防二层环(有带宽浪费) |
| 配置引擎 | NVUE | Cumulus 5.x 结构化配置(nv 命令) |
附录 C · 推荐学习资源
- NVIDIA Cumulus Linux 官方用户指南:命令与特性的权威出处,遇到不确定的参数先查它。
- EVE-NG 官方文档与论坛:镜像导入、节点模板、fixpermissions 等操作细节。
- RFC 7348(VxLAN)、RFC 7432(EVPN):想深挖协议原理读原文。
- NVIDIA Cumulus 在线实验(Air):浏览器里直接操作真机级环境,无需本地装。
- FRR 项目文档:BGP/OSPF 路由套件详解。
- 书籍/博客:《计算机网络(谢希仁)》《TCP/IP 详解》、各厂商"数据中心网络设计"白皮书。
附录 D · 版本与镜像说明
- 本手册命令基于 NVIDIA Cumulus Linux 5.x(NVUE 时代)。导入时请在 EVE-NG 选 Cumulus VX 的 5.x qcow2 镜像。
- 不同 5.x 小版本参数名可能微调,配置前用
nv set ... ?确认,以设备实际为准。 - 软件本身免费;企业技术支持需单独订阅。实验环境建议校验镜像 SHA256。
- 若你的 EVE-NG 节点列表没有 Cumulus 模板,确认社区版是否包含,或按官方说明添加
cumulus.yml模板。
最佳用法: 左手 EVE-NG 开着,右手翻对应章节,边读边敲。遇到命令差异,
nv ? 永远是你最好的朋友。祝你早日把"二层数据中心"玩成肌肉记忆。
NVIDIA Cumulus 二层数据中心 Spine-Leaf 实验手册 · 理论 + 实验 · 自包含 HTML 版
内置自动目录 / 阅读进度 / 打印导出 · 建议用现代浏览器打开