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

需要翻墙才能打开。

为了方便查阅,下载到本地并上传到博客中,图片内容较多,可下载到本地查阅。

Patroni处理流程图分析

patroni处理流程图主要包括三个模块,如下:

  • run_cycle: patroni处理流程图的主模块,主模块可能调用 Node bootstrap模块、process_health_cluster模块、process_unhealth_cluster模块。
  • Node bootstrap: 描述了Patroni的初始化逻辑,通过判断 P G D A T A 目录是否为空触发,如果 PGDATA目录是否为空触发,如果 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 处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值