Patroni + Etcd 实现高可用之四: Patroni处理流程图(ha_loop_diagram.png)

背景

前三篇博客分别介绍了Patroni + Etcd的安装部署、高可用测试、参数配置,如下:

第一篇博客涉及到Patroni的初始化逻辑,第二篇博客主要介绍了Patroni在各种高可用场景下的处理结果。

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的初始化逻辑,通过判断$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 处理逻辑。

参考

最后推荐和张文升共同编写的《PostgreSQL实战》,本书基于PostgreSQL 10 编写,共18章,重点介绍SQL高级特性、并行查询、分区表、物理复制、逻辑复制、备份恢复、高可用、性能优化、PostGIS等,涵盖大量实战用例!

购买链接:https://item.jd.com/12405774.html

PostgreSQL实战
感谢支持!
0%