Failover 101
文章目录
前言
在现代分布式系统中,高可用(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 流程:
- 通过 Heartbeat 或监控机制检测主节点状态;
- 发现主节点失联或故障;
- 启动选举流程,选出新的主节点(如果有);
- 更新路由、DNS 或元数据,让流量切换到新的节点;
- 旧主恢复后可转为备用节点。
属性与指标
关注 Failover 机制的几个关键属性:
-
故障检测时间(Detection Time) 从主节点出问题到被检测出来所花的时间。
-
切换时间(Failover Time) 从检测到故障,到新节点接管服务的总时间。
-
数据一致性(Consistency Level) 尤其是状态数据同步是否完成,是否会丢数据或乱序。
-
切换策略(Failover Strategy) 是主动触发(手动)、还是自动;是热备、冷备还是半热备。
-
是否幂等(Idempotency) 系统能否容忍重复 Failover 请求,避免“抖动”或震荡。
-
Fencing 机制 避免旧主恢复后与新主竞争,导致脑裂(Split-Brain)问题。
类型
按触发方式分类
-
手动 Failover 人工介入后切换,如通过运维命令行控制,适用于重要系统。
-
自动 Failover 系统自主判断并切换,无需人工干预,常用于业务高可用场景。
按备份方式分类
-
热备(Hot Standby) 备用节点实时同步,随时准备接管,切换迅速。
-
冷备(Cold Standby) 备用节点不运行,出故障后再启动,延迟较高。
-
半热备(Warm Standby) 节点运行但不处理业务,请求发生后才加载数据并接管。
按系统组件分类
-
数据库 Failover MySQL、PostgreSQL、MongoDB 都支持主备切换。
-
存储系统 Failover 如 Ceph、HDFS 在 DataNode 或 OSD 故障后自动切换。
-
服务层 Failover Kubernetes、Istio 等支持服务实例异常时自动重调度。
-
网络/负载均衡 Failover 如 Nginx、HAProxy 的 upstream 健康检查机制。
Failover 与程序关系
Failover 在分布式架构中起到兜底和容灾作用:
-
服务发现与流量切换 当节点切换后,客户端或负载均衡器需及时更新地址。
-
数据一致性与恢复 对于强一致性系统,需要在 failover 前完成数据同步或确认。
-
状态恢复 Stateful 服务需要在新主节点恢复原有 session 或数据上下文。
-
选主协议配合 常与 Raft、Paxos、Zookeeper 协作实现 leader 选举与 fencing。
开发中应考虑:
- 系统是否能正确感知故障;
- 切换流程是否清晰、可重复、自动化;
- 是否支持观察和控制 failover(如运维介入);
- 是否有 fallback 与回滚机制。
常见支持 Failover 的系统与组件
系统/组件 | Failover 支持方式 | 特点 |
---|---|---|
Redis Sentinel | 主从架构自动切换 | 简单、部署容易 |
MySQL MGR | 多主复制,支持自动选主 | 强一致性,适合金融场景 |
MongoDB ReplicaSet | 自动选举主节点 | 写操作自动切换主库 |
etcd | Raft 协议内置自动 failover | 用于配置中心、高可用 |
Kubernetes | Pod 和 Node 层级调度容灾 | 结合 probe 探测 |
Consul | 服务失联后剔除并重新发现 | 健康检查集成 |
文章作者 沉风网事
上次更新 2018-10-25