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 处理逻辑。
posted @   零の守墓人  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示