3. Leaf-Spine拓扑结构

Leaf-Spine 是数据中心网络中最经典的两级 CLOS 架构。理解它的关键,不是记住“叶子和脊”这两个名字,而是理解两级 CLOS 的数学本质:任意一个 Leaf 到任意一个 Spine 都有且仅有一条直连链路,任意两台接入设备之间的通信,最多经过“Leaf—Spine—Leaf”三跳。这种“全互联 + 固定跳数”的结构,把传统三层树形网络中的收敛比问题,转化为可计算的端口密度与带宽收敛比问题。

两级 CLOS 的结构本质

CLOS 网络最初用于电话交换,其核心思想是用多级小规模交换单元构建大规模无阻塞交换网络。在数据中心场景中,我们只使用两级:下层为 Leaf(叶交换机),上层为 Spine(脊交换机)。每一台 Leaf 都必须与每一台 Spine 相连,而 Leaf 之间不直连,Spine 之间也不直连。这个“只上下连、不左右连”的规则,是 Leaf-Spine 区别于传统树形网络的根本特征。

假设有 L 台 Leaf、S 台 Spine,每台 Leaf 有 P 个上行端口,每台 Spine 有 Q 个下行端口。全互联要求满足:

L × P = S × Q   (上行端口总数 = 下行端口总数)
每台 Leaf 上行端口数 P = S   (因为每台 Leaf 要连所有 Spine)
每台 Spine 下行端口数 Q = L (因为每台 Spine 要连所有 Leaf)

例如,一台 32 端口 100G 的交换机作为 Leaf,若拿出 4 个端口做服务器下行、28 个端口做上行,则最多可接 28 台 Spine;若 Spine 侧也是 32 端口,则每台 Spine 可下连 32 台 Leaf。于是该 Pod 内最大规模为 28 × 32 = 896 台 Leaf。这就是端口密度规划的基本算式。

两级 CLOS:Leaf 与 Spine 全互联结构 Spine 层(脊交换机,只做高速转发,不接服务器) Spine-1 Spine-2 Spine-3 Leaf 层(叶交换机,服务器接入点,做策略与网关) Leaf-1 Leaf-2 Leaf-3 服务器组 A 服务器组 B 服务器组 C 任意 Leaf 到任意 Spine 均有直连链路;Leaf 之间不直连,Spine 之间不直连

Leaf 层与 Spine 层的角色分工

Leaf 层是“接入与策略层”。服务器、存储、防火墙等终端设备全部接入 Leaf。Leaf 承担 VLAN/VXLAN 网关、ACL 策略、QoS 标记、ARP/ND 代答等边缘功能。由于每台 Leaf 只连接本机架或本列的服务器,它的下行端口数量决定了单 Leaf 的接入密度。例如一台 48 端口 25G + 8 端口 100G 的交换机,可下连 48 台 25G 服务器,上行 8 个 100G 端口连接 8 台 Spine,收敛比约为 48×25G : 8×100G = 1200G : 800G ≈ 1.5:1。

Spine 层是“高速转发层”。Spine 不接服务器,只负责 Leaf 之间的流量转发。它的角色是提供无阻塞的横向带宽,因此 Spine 的端口速率通常与 Leaf 上行速率一致,且数量要能覆盖所有 Leaf 的上行需求。Spine 上一般不配置复杂的策略,只运行路由协议(如 BGP)与 Leaf 建立对等体,实现 ECMP 等价多路径转发。

连接规则与端口密度规划

连接规则可以归纳为三条:第一,每台 Leaf 必须与每台 Spine 有一条物理链路;第二,Leaf 之间、Spine 之间不允许直连;第三,所有 Leaf 的上行端口数必须相同,所有 Spine 的下行端口数必须相同,否则会出现带宽不对称。这三条规则保证了任意两台服务器之间的路径跳数固定为 3 跳,且路径数量等于 Spine 数量,从而获得稳定的 ECMP 负载均衡效果。

端口密度规划的核心是确定三个参数:单 Leaf 下行端口数 D、单 Leaf 上行端口数 U、Spine 数量 S。它们满足 U = S,且单 Leaf 总端口数 ≥ D + U。若交换机总端口数为 N,则 D = N − S。例如 N=32、S=4,则 D=28,即每台 Leaf 可接 28 台服务器,整个架构可支持 4 台 Spine × 32 台 Leaf = 128 台 Leaf,总服务器接入量为 128 × 28 = 3584 台。

规划提示:收敛比 = (D × 下行速率) : (U × 上行速率)。若下行 25G、上行 100G,D=48、U=8,则收敛比 = 1200G : 800G = 1.5:1。若要求无阻塞,则需 D × 25G ≤ U × 100G,即 D ≤ 4U。实际规划中通常保留 1.5:1 到 3:1 的收敛比,以平衡成本与突发流量。

一个可复用的端口密度计算示例

假设某项目要求接入 2000 台 25G 服务器,选用 64 端口 100G 交换机,其中 Leaf 下行端口为 25G(通过 breakout 拆分),上行端口为 100G。若每台 Leaf 配置 48 个 25G 下行端口、8 个 100G 上行端口,则单 Leaf 接入 48 台服务器,需要 2000 ÷ 48 ≈ 42 台 Leaf。取整为 48 台 Leaf,则 Spine 数量 S = 8(因为每台 Leaf 上行 8 个端口)。每台 Spine 需要 48 个下行端口连接 48 台 Leaf,64 端口交换机满足要求。最终架构为 48 台 Leaf + 8 台 Spine,总链路数 = 48 × 8 = 384 条 100G 链路,任意两台服务器之间最多 3 跳,ECMP 路径数为 8。

参数 取值 说明
服务器数量 2000 台 25G 接入
单 Leaf 下行端口 48 个 25G 接入 48 台服务器
单 Leaf 上行端口 8 个 100G 连接 8 台 Spine
Leaf 数量 48 台 2000 ÷ 48 向上取整
Spine 数量 8 台 等于单 Leaf 上行端口数
收敛比 1.5:1 48×25G : 8×100G
ECMP 路径数 8 等于 Spine 数量

需要强调的是,上述数字属于教学示例中的合理假设,并非某个真实项目的实测结果。实际规划时还需考虑机柜空间、供电、光纤跳线长度、Spine 的堆叠或独立部署方式,以及是否采用 VXLAN 分布式网关等因素。但无论细节如何变化,两级 CLOS 的端口密度算式和“Leaf 全连 Spine”的连接规则始终是规划起点。

常见误区:不要为了增加带宽而在 Leaf 之间或 Spine 之间加直连链路。这样做会破坏 CLOS 的规则性,导致路径跳数不一致、ECMP 哈希不均,反而降低可预测性。横向扩展应通过增加 Spine 数量或提升端口速率来实现。