前言

在现代分布式系统中,高可用(High Availability) 是基本要求。而高可用的核心能力之一就是:当系统组件出现故障时,是否能自动切换到备份节点或副本继续提供服务。这个自动切换过程,正是“Failover”。

无论是数据库、存储、消息队列,还是服务网关,Failover 机制都被广泛应用。


定义

Wiki 定义如下:

In computing, failover is the capability to switch over automatically to a redundant or standby system, server, hardware component or network upon the failure or abnormal termination of the previously active application, server, or system component.

一句话:Failover 是故障时自动切换到备份节点继续服务的机制。


工作原理

一句话:系统监测主节点是否存活,若异常则自动切换到可用备份节点继续提供服务。

一个典型的 Failover 流程:

  1. 通过 Heartbeat 或监控机制检测主节点状态;
  2. 发现主节点失联或故障;
  3. 启动选举流程,选出新的主节点(如果有);
  4. 更新路由、DNS 或元数据,让流量切换到新的节点;
  5. 旧主恢复后可转为备用节点。

属性与指标

关注 Failover 机制的几个关键属性:

  1. 故障检测时间(Detection Time) 从主节点出问题到被检测出来所花的时间。

  2. 切换时间(Failover Time) 从检测到故障,到新节点接管服务的总时间。

  3. 数据一致性(Consistency Level) 尤其是状态数据同步是否完成,是否会丢数据或乱序。

  4. 切换策略(Failover Strategy) 是主动触发(手动)、还是自动;是热备、冷备还是半热备。

  5. 是否幂等(Idempotency) 系统能否容忍重复 Failover 请求,避免“抖动”或震荡。

  6. Fencing 机制 避免旧主恢复后与新主竞争,导致脑裂(Split-Brain)问题。


类型

按触发方式分类

  1. 手动 Failover 人工介入后切换,如通过运维命令行控制,适用于重要系统。

  2. 自动 Failover 系统自主判断并切换,无需人工干预,常用于业务高可用场景。

按备份方式分类

  1. 热备(Hot Standby) 备用节点实时同步,随时准备接管,切换迅速。

  2. 冷备(Cold Standby) 备用节点不运行,出故障后再启动,延迟较高。

  3. 半热备(Warm Standby) 节点运行但不处理业务,请求发生后才加载数据并接管。

按系统组件分类

  1. 数据库 Failover MySQL、PostgreSQL、MongoDB 都支持主备切换。

  2. 存储系统 Failover 如 Ceph、HDFS 在 DataNode 或 OSD 故障后自动切换。

  3. 服务层 Failover Kubernetes、Istio 等支持服务实例异常时自动重调度。

  4. 网络/负载均衡 Failover 如 Nginx、HAProxy 的 upstream 健康检查机制。


Failover 与程序关系

Failover 在分布式架构中起到兜底和容灾作用:

  1. 服务发现与流量切换 当节点切换后,客户端或负载均衡器需及时更新地址。

  2. 数据一致性与恢复 对于强一致性系统,需要在 failover 前完成数据同步或确认。

  3. 状态恢复 Stateful 服务需要在新主节点恢复原有 session 或数据上下文。

  4. 选主协议配合 常与 Raft、Paxos、Zookeeper 协作实现 leader 选举与 fencing。

开发中应考虑:

  • 系统是否能正确感知故障;
  • 切换流程是否清晰、可重复、自动化;
  • 是否支持观察和控制 failover(如运维介入);
  • 是否有 fallback 与回滚机制。

常见支持 Failover 的系统与组件

系统/组件 Failover 支持方式 特点
Redis Sentinel 主从架构自动切换 简单、部署容易
MySQL MGR 多主复制,支持自动选主 强一致性,适合金融场景
MongoDB ReplicaSet 自动选举主节点 写操作自动切换主库
etcd Raft 协议内置自动 failover 用于配置中心、高可用
Kubernetes Pod 和 Node 层级调度容灾 结合 probe 探测
Consul 服务失联后剔除并重新发现 健康检查集成