过期故障
节点宕机,导致领导者租约过期触发集群领导竞选的故障路径
在 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 | 手动触发 |