故障转移
故障转移把服务责任交给健康节点。本文讲解触发、写入隔离、业务验证和演练。
1. 面试核心
先记住这几条,再读正文- 失联与写入权。 心跳超时只能说明失联,写入权需由仲裁或隔离机制决定。
- 旧主隔离。 fencing 由资源端拒绝旧持有者写入,阻止双主修改。
- 接管条件。 接管节点的数据位置和容量决定切换风险。卡 · 综合题
- 恢复验证。 端到端探针与数据核对共同验证业务恢复。
- 控制面依赖。 预置接管资源可减少故障期间对控制面的依赖。卡 · 控制面依赖与预置资源
2. 触发条件
进程退出、节点故障和网络分区需要不同判断。性能退化与依赖失败也应纳入检测。
检测可组合多点探测、用户错误率和复制状态。节点租约、共识状态与变更记录提供额外证据。连续失败阈值减少误判,恢复迟滞减少反复切换。
3. Fencing
失联旧主仍可运行,并继续收到客户端请求。新主接管前,需要隔离旧主的写入能力。
fencing token 是递增的写入凭证。资源端记录已接受的新 token,并拒绝旧 token。只有生成 token 而无资源端检查,无法阻止迟到写入。
断电、存储访问隔离也可撤销写入能力。租约方案还需明确过期判断与时钟假设。共识日志中的任期规则见Raft。
4. 接管前的数据检查
备节点接管前应确认:
- 复制位置满足本次恢复目标。
- 日志和关键数据通过完整性校验。
- 应用版本与数据库结构兼容。
- 缓存、索引和必要状态已经就绪。
- 目标节点具有足够的安全吞吐。
异步复制需要核对最后安全位置。主节点不可达时,监控中的旧延迟值不足以证明零丢失。未知边界应结合业务流水恢复后核对。
5. 流量切换
写入权切换完成后,再开放目标写入流量。探测流量用于验证新路径,随后按容量扩大范围。旧路径继续拒绝越权写入。
DNS TTL、客户端缓存与长连接影响切换速度。控制面记录只反映配置状态。多个用户位置的探针用于验证实际路径。
5.1 控制面依赖与预置资源
故障期间,创建实例或修改基础设施的 API 也会受影响。若接管必须临时申请资源,恢复时间会依赖这些操作。
关键副本、路由入口和权限应提前配置。已有资源先承接约定的核心流量。扩容完成后,再恢复其他负载。预置范围由容量需求和成本决定。
演练时可额外阻断资源创建操作。若核心路径仍能恢复,就有证据支持该接管方案。
6. 恢复验证
业务验证需要覆盖完整路径。测试账户应能创建、查询和更新业务记录。消息发布、消费和回调也应继续推进。
库存、账务和状态机用业务不变量核对。异步积压还需观察最老任务年龄。探针数据应有独立标识,验证后可以清理。
7. 故障演练
演练明确故障假设、范围、指标和停止条件。首次在预生产验证自动化。生产演练按实例、可用区和地域逐步扩大。
场景包括节点退出、网络隔离和复制暂停。还需覆盖慢磁盘、依赖延迟和备用容量不足。达到停止阈值后,恢复注入并执行接管预案。
8. Runbook
运行手册记录前置检查、命令、预期结果和超时。每一步有负责人和失败处理方式。故障区域之外也需具备工具和访问权限。
让非作者执行演练,能发现隐含步骤。拓扑、证书或版本改变后,相关步骤需重新验证。
9. Failback
原主恢复后先作为落后副本处理。权威数据以当前主节点为准。旧主追平并校验后,才具备回切条件。
回切是一项独立变更。时机取决于容量、性能和维护窗口。新主稳定运行时,可继续保留当前拓扑。
10. 演练评估
演练分别记录发现、决策、接管和业务验证耗时。实际恢复时间与恢复点用来对照 RTO/RPO。
权限阻塞、人工等待和数据差异进入整改清单。每项问题注明负责人、期限和复测条件。故障注入撤销后,也需确认积压清理完成。
11 · 面试题卡片
11.1 怎样设计并验证数据库主备故障转移
出现公司:暂无已核验的公开来源(本站自测)
题型:综合题
考察重点
- 故障检测、仲裁和 fencing。
- 复制位置、RPO、接管容量与流量切换。
- 业务验证、failback 和演练复盘。
参考回答
可靠故障转移需要明确写入裁决,并验证业务结果。
失联检测结合多点探测、用户错误和复制状态。新主接管前完成旧主隔离、数据位置和容量检查。
切流后用端到端探针与数据对账确认恢复。原主追平后再评估回切。演练需覆盖网络分区和落后副本。实际耗时、恢复点及遗留差异用于检验方案。
11.2 故障转移依赖临时扩容时,有什么恢复风险?
出现公司:暂无已核验的公开来源(本站自测)
考察重点:控制面可用性、预置容量与核心流量。
相关内容:控制面依赖与预置资源。
参考回答
临时扩容会把恢复时间绑定到控制面操作。
故障期间,资源申请和配置接口也会失效。预置副本、路由与权限可减少这类依赖。已有容量先保障核心流量,扩容后再恢复其他负载。