主动故障检测

主动故障检测(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 最好:检查前状态变化;
最坏:检查后瞬间状态变化
最好情况
全部赶上最好的情况,一瞬间挂了,瞬间检测到,原地直接把故障主库直接拉起来了。
2fastinter2 * fastinter
平均情况
所有随机等待都取中间值,但仍然是 超时了还没拉起来
loop+start+1.1+inter/2+2fastinterloop + start + 1.1 + inter/2 + 2 * fastinter
最差情况
刚检测完就挂了,等满启动超时还没拉起来释放租约,释放的时候从库也刚检测过,开始检测又卡在2秒状态查询超时上,同时撞上 HAProxy 最差情况。
loop2+start+3+inter+2fastinterloop * 2 + start + 3 + inter + 2 * fastinter

四种模式计算结果(单位:秒,格式: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