3. 数据中心网络设计原则
数据中心网络设计的第一性问题不是“选什么协议”,而是“流量模型是什么”。传统园区网以南北向流量为主,客户端访问服务器,路径相对固定;而现代数据中心以东西向流量为主,虚拟机迁移、分布式存储、微服务调用让服务器之间的通信量远超出口流量。叶脊(Spine-Leaf)架构正是为这种流量模型设计的:任意两台叶交换机之间最多经过一台脊交换机,跳数固定为二,路径时延可预测,带宽可以横向叠加。
叶脊架构的结构与转发逻辑
叶脊架构由两层设备组成。Leaf(叶)交换机负责接入服务器、存储和防火墙等终端,Spine(脊)交换机只负责高速转发,不接终端。每台 Leaf 必须与每一台 Spine 建立一条上行链路,形成 Full-Mesh 的 CLOS 拓扑。假设有 L 台 Leaf、S 台 Spine,每台 Leaf 上行 m 条链路,则 Leaf 的上行总带宽为 m×链路速率,而任意 Leaf 到任意 Leaf 的可达路径数为 S(若每 Leaf 到每 Spine 一条链路)。
转发时,Leaf 收到目的 MAC 或 IP 后,通过 ECMP(等价多路径)在 S 条上行链路中哈希选路。哈希因子通常包括源 IP、目的 IP、源端口、目的端口和协议号,即五元组。这里有一个工程上极易踩坑的点:如果只按目的 IP 哈希,同一对服务器之间的多条 TCP 流会被压到同一条上行链路,其他链路空闲,ECMP 形同虚设。因此实际部署中必须启用五元组哈希,并在 Leaf 上确认哈希算法配置。
以一台 32 端口 100G 的 Leaf 为例:若下行接 24 台服务器(每台 25G 双上行),上行用 8 个 100G 端口接 8 台 Spine,则下行收敛比为 24×25G÷(8×100G)=600G÷800G≈0.75:1,属于无收敛设计;若上行只用 4 个 100G 端口,则收敛比为 600G÷400G=1.5:1,即 1.5 倍收敛。收敛比的定义是“下行总带宽÷上行总带宽”,数值越大表示超订越严重。
VXLAN EVPN 解决什么问题
叶脊架构解决了物理路径问题,但没有解决二层扩展问题。传统 VLAN 只有 12 位,最多 4094 个,且二层域受 STP 限制,无法跨越多台 Leaf 灵活延伸。VXLAN 用 24 位 VNI 把二层网络扩展到约 1600 万个分段,并通过 UDP 封装在 IP 网络上传输,底层是三层可达即可,不再依赖 STP 阻塞链路。
VXLAN 的封装格式为:外层以太头 | 外层 IP 头 | UDP 头(目的端口 4789)| VXLAN 头(含 24 位 VNI)| 原始以太帧。VTEP(VXLAN Tunnel Endpoint)负责封装和解封装,通常就是 Leaf 交换机上的 NVE 接口。问题在于:VTEP 如何知道某个 MAC 或 IP 在哪个远端 VTEP 后面?早期用 Flood-and-Learn,靠组播泛洪学习,规模一大就不可控。EVPN 用 BGP 作为控制平面,把 MAC/IP 映射通过 MP-BGP 的 EVPN 地址族发布出去,VTEP 之间不再泛洪,而是直接查表建立隧道。
EVPN 的关键路由类型包括:Type 2(MAC/IP 通告)用于主机 MAC 和 ARP 信息同步,Type 3(IMET)用于 VTEP 自动发现和 BUM 流量转发,Type 5(IP 前缀)用于三层外部路由引入。实际配置中,Leaf 作为 VTEP,Spine 作为 BGP 路由反射器(RR),Leaf 与 Spine 之间建立 iBGP EVPN 邻居。一个典型片段如下:
interface nve1
no shutdown
source-interface loopback0
member vni 10100
ingress-replication protocol bgp
!
router bgp 65001
neighbor 10.0.0.1 remote-as 65001
neighbor 10.0.0.1 update-source loopback0
address-family l2vpn evpn
neighbor 10.0.0.1 send-community extended
neighbor 10.0.0.1 route-reflector-client
判断 EVPN 是否正常,可以查看 show bgp l2vpn evpn summary 确认邻居状态,用 show nve peers 确认 VTEP 对等体是否 Up,再用 show bgp l2vpn evpn 检查 Type 2 路由是否学到了远端 MAC。如果 NVE 对等体 Up 但主机不通,优先检查 VNI 是否在两端都正确映射、VLAN 与 VNI 的映射关系是否一致。
传统三层架构与叶脊的对比
传统三层架构是“接入—汇聚—核心”的树形结构,接入交换机双上行到汇聚,汇聚再上行到核心。它的主要问题是:STP 会阻塞冗余链路,实际可用带宽只有设计带宽的一部分;跨汇聚的东西向流量必须绕行核心,路径不固定;扩展时受 STP 收敛时间和 MAC 表规模限制。叶脊架构用 ECMP 替代 STP,所有上行链路都参与转发,没有阻塞端口;用 BGP EVPN 替代泛洪,控制平面可扩展;用固定二跳替代不确定路径,时延可预测。
可扩展性与收敛比设计
叶脊架构的可扩展性体现在两个方向。横向扩展:增加 Spine 可以增加 Leaf 之间的路径数和总带宽,但每台 Leaf 的上行端口数有限,Spine 数量受 Leaf 上行端口数约束。纵向扩展:增加 Leaf 可以接入更多服务器,但 Spine 的端口数决定了 Leaf 的最大数量。设计时先确定服务器接入密度和上行带宽需求,再反推 Spine 数量和链路速率。
收敛比的选择取决于业务类型。计算节点之间需要大量东西向通信的分布式存储或 HPC 场景,通常采用 1:1 或接近 1:1 的无收敛设计;普通业务接入可以采用 3:1 甚至 5:1 的收敛比,但必须确认突发流量不会导致上行拥塞。判断收敛比是否合理,可以在 Leaf 上行接口上观察 show interface ethernet 1/1 的输出速率和丢弃计数,如果持续出现 output discards,说明上行带宽不足或哈希不均。
最后需要明确:叶脊架构、VXLAN EVPN 和收敛比不是三个独立选项,而是一套组合设计。叶脊提供物理拓扑和 ECMP 转发,VXLAN EVPN 提供二层扩展和控制平面,收敛比决定这套架构能承载多少东西向流量。迁移或升级时,先确认现有流量模型和收敛比现状,再决定是扩容 Spine、增加上行链路,还是引入 EVPN 替换 Flood-and-Learn,每一步都应以实际接口速率和路由表项为判断依据。