主动故障检测
主动故障检测(Patroni 存活,PG 宕机)场景下的 RTO 计算逻辑与结果分析
RTO 时序图
故障模型
| 项目 | 最好 | 最坏 | 平均 | 说明 |
|---|---|---|---|---|
| 故障检测 | 0 |
loop |
loop / 2 |
最好:PG 恰好在 Patroni 检测前崩溃 最坏:PG 恰好在 Patorni 检测后崩溃 |
| 等待拉起 | 0 |
start |
start |
最好:PG 主库崩后瞬间拉起来了 最坏:等完 start 超时还没起来,释放租约 |
| 选举争抢 | 0 |
2 + loop |
1 + loop / 2 |
最好:直接拉起来了。 最坏,调 API 超时+完整循环 |
| 提升从库 | 0 |
1 |
0.1 |
通常很快,常数时间 |
| 健康检查 | 2 * fastinter |
inter + 2 * fastinter |
inter/2 + 2 * fastinter |
最好:检查前状态变化; 最坏:检查后瞬间状态变化 |
- 最好情况
- 全部赶上最好的情况,一瞬间挂了,瞬间检测到,原地直接把故障主库直接拉起来了。
- 平均情况
- 所有随机等待都取中间值,但仍然是 超时了还没拉起来
- 最差情况
- 刚检测完就挂了,等满启动超时还没拉起来释放租约,释放的时候从库也刚检测过,开始检测又卡在2秒状态查询超时上,同时撞上 HAProxy 最差情况。
四种模式计算结果(单位:秒,格式:min / avg / max)
| 阶段 | fast | norm | safe | wide |
|---|---|---|---|---|
| 故障检测 | 0 / 3 / 5 |
0 / 3 / 5 |
0 / 5 / 10 |
0 / 10 / 20 |
| 等待拉起 | 0 / 15 / 15 |
0 / 20 / 20 |
0 / 30 / 30 |
0 / 60 / 60 |
| 选举争抢 | 0 / 4 / 7 |
0 / 4 / 7 |
0 / 6 / 12 |
0 / 11 / 22 |
| 提升从库 | 0 / 0 / 1 |
0 / 0 / 1 |
0 / 0 / 1 |
0 / 0 / 1 |
| 健康检查 | 1 / 2 / 2 |
2 / 3 / 4 |
3 / 5 / 6 |
4 / 6 / 8 |
| 总计 | 1 / 24 / 30 |
2 / 30 / 37 |
3 / 46 / 59 |
4 / 87 / 111 |