4. 虚拟底盘架构原理

虚拟底盘(Virtual Chassis,VC)是 Juniper 在 QFX 系列交换机上实现控制平面统一、数据平面多路径转发的核心技术。它的基本思想是:把两台到多台物理交换机通过专用链路互联,逻辑上合并成一台“虚拟交换机”,对外呈现单一管理 IP、单一配置文件和统一的控制平面。运维人员登录任意一台成员设备,看到的都是一致的接口命名、路由表和转发表,而底层多台机箱则共同承担转发任务。

理解 VC 的关键在于区分三个层面:成员角色决定谁做主控、谁做备份;选举算法决定角色如何产生;虚拟底盘端口(VCP)与链路聚合决定成员之间如何互联、流量如何分布。下面按这三个层面展开。

成员角色与优先级

VC 中的每台物理交换机称为一个成员(member),拥有唯一的成员 ID(通常为 0~9)。成员角色分为两类:

  • 主控成员(Master):运行控制平面,负责路由计算、配置管理、向所有成员下发转发表,并对外提供管理接口。
  • 备份成员(Backup):同步主控的配置与状态,随时准备接管;在主控故障时成为新的主控。
  • 线卡成员(Linecard):只负责本地端口的数据转发,不参与控制平面运算。

角色由“优先级 + 成员 ID”共同决定。优先级取值范围为 0~255,数值越大越优先;当优先级相同时,成员 ID 较小者优先。例如成员 0 优先级 200、成员 1 优先级 100,则成员 0 成为主控。若两者优先级都为 128,则成员 0 因 ID 更小而当选。优先级可以在配置中显式设置:

set virtual-chassis member 0 priority 200
set virtual-chassis member 1 priority 100
set virtual-chassis member 2 priority 50

需要强调的是,优先级只影响选举结果,不改变成员 ID。成员 ID 一旦确定,通常不建议随意更改,因为它与接口命名(如 ge-0/0/1 中的第一个 0 即成员 ID)直接绑定。

主备选举算法

VC 的选举不是简单的“先到先得”,而是一个确定性的比较过程。当 VC 形成或主控失效时,所有成员参与选举,比较顺序如下:

  1. 比较优先级,数值大者胜出;
  2. 优先级相同,比较成员 ID,数值小者胜出;
  3. 若成员 ID 也相同(通常不会发生),则比较 MAC 地址,较小者胜出。

选举结果产生后,主控成员会向其他成员同步配置和转发表。备份成员保持热待机状态,线卡成员则只保留本地转发能力。整个选举过程通常在数秒内完成,具体时间取决于 VC 规模、VCP 链路状态和配置同步量。

优先级设置建议:主控候选设备设置较高优先级(如 200),备份设备设置中等优先级(如 100),纯线卡设备设置较低优先级(如 50),避免线卡设备意外成为主控。

虚拟底盘端口与链路聚合

成员之间通过虚拟底盘端口(VCP)互联。VCP 可以是专用 VC 端口,也可以是普通 10G/40G/100G 端口转换而来。VCP 的物理连接方式决定了 VC 的带宽和可靠性。常见拓扑包括环形和链形,其中环形拓扑因为任意单点故障仍能保持连通,是推荐做法。

在数据平面上,多个 VCP 可以捆绑成链路聚合组(LAG),形成一条逻辑高带宽链路。这样做的价值有两点:一是提升成员间转发带宽,二是当某条 VCP 链路故障时,流量自动切换到剩余链路,避免控制平面分裂。配置示例如下:

set interfaces xe-0/0/0 ether-options 802.3ad ae0
set interfaces xe-1/0/0 ether-options 802.3ad ae0
set interfaces ae0 aggregated-ether-options lacp active
set interfaces ae0 unit 0 family ethernet-switching

这里把成员 0 的 xe-0/0/0 和成员 1 的 xe-1/0/0 捆绑为 ae0,并启用 LACP。需要注意,VCP 链路聚合与普通业务链路聚合在配置上类似,但 VCP 承载的是控制平面和跨成员转发流量,因此对稳定性和带宽更敏感。

虚拟底盘成员角色与 VCP 链路聚合示意 成员 0(主控 Master) 优先级:200 成员 ID:0 角色:控制平面 + 转发 xe-0/0/0 → ae0 成员 1(备份 Backup) 优先级:100 成员 ID:1 角色:热待机 + 转发 xe-1/0/0 → ae0 成员 2(线卡 Linecard) 优先级:50 成员 ID:2 角色:仅本地转发 ge-2/0/1(业务口) VCP VCP 链路聚合组 ae0(LACP Active) 成员 0 与成员 1 的 VCP 捆绑为逻辑高带宽链路 选举结果:成员 0 为主控 比较顺序:优先级(200 > 100 > 50)→ 成员 ID(0 < 1 < 2) 主控故障时,成员 1 按优先级顺序接管

故障切换行为

VC 的故障切换分为两类:主控故障切换和成员故障切换。

当主控成员发生硬件故障、断电或软件崩溃时,备份成员会检测到心跳丢失,随即触发重新选举。由于备份成员已经同步了配置和转发表,切换后业务中断时间通常较短,但具体取决于协议收敛速度。切换完成后,新的主控会重新计算转发表并下发到所有线卡成员。此时原主控的接口状态变为 down,相关流量由剩余成员接管。

当某个线卡成员故障时,主控会感知到该成员离线,并将其从转发表中移除。如果该成员上存在业务链路聚合,流量会自动切换到其他成员上的等价链路。需要注意的是,如果故障成员恰好是 VCP 链路的一端,且 VC 采用链形拓扑,则可能导致 VC 分裂为两个独立部分。因此,环形拓扑配合链路聚合是更稳妥的设计。

VC 分裂(split-brain)是虚拟底盘最需要防范的故障场景。当成员之间所有 VCP 链路同时中断时,双方都可能认为自己是主控,导致配置冲突和转发异常。建议启用 VCP 链路聚合,并在设计时保证任意单点故障不会切断所有成员间通路。

为了观察 VC 状态和故障切换结果,可以使用以下命令:

show virtual-chassis status
show virtual-chassis vc-port
show virtual-chassis protocol adjacency

其中 show virtual-chassis status 会显示每个成员的 ID、角色、优先级和状态;show virtual-chassis vc-port 用于确认 VCP 链路是否 up;show virtual-chassis protocol adjacency 则用于检查成员之间的控制协议邻接关系是否正常。通过这些输出,可以快速判断 VC 是否健康、选举结果是否符合预期、以及故障切换后角色是否已正确转移。

综合来看,虚拟底盘架构的核心在于“统一控制、分布转发”。成员角色和优先级决定了控制平面的归属,选举算法保证了角色产生的确定性,VCP 与链路聚合提供了成员间可靠的互联通道,而故障切换行为则决定了系统在异常情况下的恢复能力。理解这四者的关系,是设计和运维 QFX 高可用交换架构的基础。