4、主备模式(Active-Backup)原理:链路监控与故障切换机制

主备模式(Active-Backup,简称 AB)是 Bonding 技术中最基础、最可靠的冗余模式。其核心思想是:同一时间只有一张物理网卡(Active)承担数据收发任务,其余网卡(Backup)处于待命状态。当 Active 链路发生故障时,系统立即将流量切换到 Backup 网卡,从而实现链路级的高可用。

4.1 主备模式的工作模型

在 Active-Backup 模式下,Bonding 驱动对外呈现一个虚拟的网络接口(bond0),内部绑定多张物理网卡。驱动通过特定的监控机制判断链路状态,并决定由哪张网卡作为 Active 成员。

关键特征:
  • MAC 地址一致性:所有成员网卡共享同一个 MAC 地址(通常取自第一个 Active 网卡),避免交换机 MAC 表抖动。
  • 无负载均衡:所有流量仅通过 Active 网卡收发,Backup 网卡不参与数据转发。
  • 切换粒度:切换以物理网卡为单位,切换时间取决于链路监控机制和驱动响应速度。
Active-Backup 主备模式架构图 网络协议栈 Bonding 驱动 (bond0) eth0 (Active) 链路状态: UP eth1 (Backup) 链路状态: STANDBY eth2 (Backup) 链路状态: STANDBY 数据流仅走 Active 网卡 说明: Active 网卡(eth0)承载所有收发流量;Backup 网卡(eth1、eth2)保持待命, 不参与数据转发。当 Active 链路故障时,Bonding 驱动从 Backup 中选择一个接管。

4.2 链路监控机制

Bonding 驱动提供了两种链路监控方式,用于检测 Active 网卡的链路状态是否正常。监控机制的选择直接影响故障检测的时效性和切换延迟。

监控方式 原理 检测粒度 适用场景
MII 监控 轮询读取物理网卡的 MII(Media Independent Interface)状态寄存器,获取 Link Up/Down 信号 毫秒级(通常 100ms 轮询间隔) 直连物理链路故障检测,如网线断开、交换机端口 down
ARP 监控 通过发送 ARP 请求并等待响应,验证链路层以上的可达性 秒级(通常 1s 轮询间隔) 需要检测三层连通性的场景,如交换机故障、上游路由不可达
性能建议:在 DPDK 主备切换测试中,推荐使用 MII 监控。因为 MII 监控直接读取硬件寄存器,不经过网络协议栈,延迟更低、开销更小。ARP 监控虽然能检测更上层的故障,但会引入额外的网络流量和更长的检测延迟。

4.3 故障切换流程

当 Bonding 驱动检测到 Active 网卡链路故障时,会触发完整的切换流程。理解这一流程对于分析切换延迟至关重要。

Active-Backup 故障切换流程图 正常状态:Active 工作 链路故障发生 驱动检测到链路 Down 选择 Backup 网卡 切换完成:新 Active 接管 T0 T1 T2 T3 T4 切换延迟 = T4 - T0 = 检测延迟 (T2-T1) + 决策延迟 (T3-T2) + 切换执行延迟 (T4-T3) MII 监控下典型延迟:50ms ~ 200ms;ARP 监控下典型延迟:1s ~ 3s

4.4 切换延迟的组成

主备切换延迟并非单一数值,而是由多个阶段累积而成。在 DPDK 环境下,由于绕过内核协议栈,切换延迟的组成略有不同。

延迟阶段 描述 典型耗时(MII) DPDK 环境差异
检测延迟 从链路故障发生到驱动确认链路 Down 的时间 100ms(轮询间隔) DPDK 轮询模式可能更快检测到链路状态变化
决策延迟 驱动从 Backup 列表中选择新 Active 网卡的时间 < 1ms 基本一致,取决于 Backup 网卡数量
切换执行延迟 更新 MAC 地址映射、重置网卡队列、刷新 ARP 表的时间 10ms ~ 50ms DPDK 需额外处理 rte_eth_dev 的重新绑定
流量恢复延迟 从切换完成到第一个数据包成功收发的时间 0ms ~ 10ms DPDK 应用需重新配置 RX/TX 队列
重要提示:在 DPDK 环境中,Bonding 驱动(rte_eth_bond)的切换逻辑与内核 Bonding 不同。DPDK 的 Bonding PMD 使用用户态轮询线程监控链路状态,不依赖内核中断。这意味着 DPDK 的检测延迟可能更短,但切换执行阶段需要应用层配合重新配置端口,否则可能导致数据包丢失。

4.5 主备模式的优缺点对比

维度 优点 缺点
可靠性 切换逻辑简单,不易出现脑裂或环路 单网卡承载所有流量,存在带宽瓶颈
兼容性 对交换机无特殊要求,无需配置 LACP 不支持负载均衡,带宽利用率低
切换速度 MII 监控下切换延迟可控,适合高可用场景 ARP 监控下切换延迟较大,不适合毫秒级故障恢复
DPDK 适配 DPDK Bonding PMD 原生支持,API 清晰 切换时需要应用层配合,增加开发复杂度

4.6 内核 Bonding 与 DPDK Bonding 的切换差异

在 DPDK 主备切换延迟测试中,必须区分内核 Bonding 和 DPDK Bonding 的切换行为差异,否则测试结果可能产生误导。

对比项 内核 Bonding DPDK Bonding (rte_eth_bond)
监控线程 内核线程,受调度延迟影响 用户态轮询线程,可绑定到特定 CPU 核心
链路检测 通过 MII 寄存器或 ARP 包 通过 rte_eth_link_get_nowait() 轮询
切换触发 内核自动完成,对应用透明 驱动通知应用,应用需调用 rte_eth_bond_active_slaves_get() 确认
数据面中断 切换期间可能丢包,取决于内核处理速度 应用可控制切换时机,减少丢包窗口
延迟可预测性 受系统负载影响较大 通过 CPU 隔离和轮询模式,延迟更稳定
测试要点:在进行 DPDK 主备切换延迟测试时,建议同时监控以下指标:
  • 链路状态变化时间戳(通过 rte_eth_link_get)
  • 切换完成时间戳(通过 rte_eth_bond_active_slaves_get 返回值变化)
  • 数据面丢包计数(通过 rte_eth_stats 的 imissed 字段)
  • 应用层感知到的流量中断时间(通过硬件时间戳或 PTP 同步)