Patroni处理流程图
241112-Patroni处理流程图
原文链接:
https://zhuanlan.zhihu.com/p/159009358
Patroni处理流程图
Patroni的处理逻辑如何呢?patroni官方给出了处理流程图 ha_loop_diagram.png,如下
https://raw.githubusercontent.com/zalando/patroni/master/docs/ha_loop_diagram.png
需要FQ才能打开。
为了方便查阅,下载到本地并上传到博客中,图片内容较多,可下载到本地查阅。

Patroni处理流程图分析
patroni处理流程图主要包括三个模块,如下:
- run_cycle: patroni处理流程图的主模块,主模块可能调用 Node bootstrap模块、process_health_cluster模块、process_unhealth_cluster模块。
- Node bootstrap: 描述了Patroni的初始化逻辑,通过判断$PGDATA目录是否为空触发,如果$PGDATA目录为空进入Node bootstrap处理模块。Node bootstrap处理模块主要分两条线路走:1)如果是leader节点,通过initdb初始化数据库,之后在dcs中持久化节点状态。2)如果不是leader节点,则通过
pg_basebackup
或其它备份恢复命令部署一个备节点,之后在dcs中持久化节点状态。 - process_health_cluster: 描述了Patroni集群健康时的处理逻辑,通过判断Patroni集群是否存在leader节点判断,此模块主要分三条线路走:1)如果不是leader节点,follow leader节点,之后在dcs中持久化节点状态。2)如果是leader节点,并且数据库为master,在dcs中持久化节点状态。3)如果是leader节点,并且数据库为slave,promote从库为主库,之后在dcs中持久化节点状态。
- process_unhealth_cluster: 描述了Patroni集群不健康时的处理逻辑,通过判断Patroni集群是否存在leader节点判断,此模块主要分三条线路走:1)如果不是最健康的节点,follow其它节点,之后在dcs中持久化节点状态。2)如果是最健康的节点,若成功获得leader锁并且数据库为 master,之后在dcs中持久化节点状态。3)如果是最健康的节点,若获得leader锁失败并且数据库为slave,promote从库为主库,之后在dcs中持久化节点状态。
根据以上处理流程图,根据 Patroni + Etcd 实现高可用之二: 高可用测试 中的高可用场景进行推导,例如:
- 关闭备库实例,备库能够自动拉起,走的是 process_health_cluster 处理逻辑。
- 关闭主库实例,主库能够自动拉起,走的也是 process_health_cluster 处理逻辑。
- 停主库主机,触发主备切换,走的是 process_unhealth_cluster 处理逻辑。
合集:
Patroni-Citus
标签:
patroni-citus
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统