故障切换模型

详细分析三种经典故障检测/恢复路径下,最差,最优,平均 RTO 的计算逻辑与结果

在 Patroni 高可用模型,有五条典型的故障路径,本节将分情况讨论每种情况下的时序模型与 RTO 计算方式

检测机制 检测主体 检测信号 典型故障 主要来源
被动检测 DCS (etcd) leader key TTL 到期 网络分区,节点崩溃,Patroni 宕机 ttl
主动探测 Patroni 领导者 pg_isready 失败 PG 进程崩溃 priamry_start_timeout
手动触发 运维人员 patronictl switchover/failover 主动切换命令,维护操作 haproxy_up
# 路径 常见故障 检测机制 关键参数 RTO 特点 发生概率
2 租约过期 节点宕机,Patroni 崩溃 TTL 过期 ttl 稳定可预测 中等
1 主动检测 PG 进程崩溃 loop_wait primary_start_timeout 可能最长(有恢复尝试) 中等
3 网络分区 主库 - DCS 网络中断,防火墙,交换机故障 TTL 过期 retry_timeout 与被动检测相同,但有降级时间点 罕见
4 看门狗 节点假活,Patroni 假活 硬件定时器 ttl / safety_margin 罕见
5 手动触发 switchover / failover 人工触发 haproxy options 最短最可控,由 HAProxy 决定 人工

检测到故障之后,恢复过程的 RTO 还需要包括恢复策略的耗时,以及 HAProxy 健康检查的耗时。

Patroni 故障按故障对象分类可以分为以下 10 类,按照检测路径不同,可以进一步归纳为五类,在本节内详细展开。

# 故障场景 描述 最终走哪条路径
1 PG 进程崩溃 crash、OOM killed 主动检测
2 PG 拒绝连接 max_connections 主动检测
3 PG 假活 进程在但无响应 主动检测 (检测超时)
4 Patroni 进程崩溃 kill -9、OOM 被动检测
5 Patroni 假活 进程在但卡住 Watchdog
6 节点宕机 断电、硬件故障 被动检测
7 节点假活 IO hang、CPU 饥饿 Watchdog
8 主库 ↔ DCS 网络中断 防火墙、交换机故障 网络分区
9 存储故障 磁盘坏、磁盘满、挂载失败 主动检测Watchdog
10 手动切换 Switchover/Failover 手动触发

过期故障

节点宕机,导致领导者租约过期触发集群领导竞选的故障路径

崩溃故障

PostgreSQL 主库进程崩溃,Patroni 存活并尝试重启,超时后触发故障切换的路径