1. Patroni处理流程图
2. Patroni处理流程图分析
patroni处理流程图主要包括如下几个模块。
2.1 run_cycle 模块
patroni处理流程图的主模块。
主模块可能调用 Node bootstrap模块、process_health_cluster模块、process_unhealth_cluster模块。
2.2 Node bootstrap 模块
描述了Patroni的初始化逻辑,通过判断$PGDATA目录是否为空触发,如果$PGDATA目录为空进入Node bootstrap处理模块。
Node bootstrap处理模块主要分两条线路走:
- 如果是leader节点,通过initdb初始化数据库,之后在dcs中持久化节点状态。
- 如果不是leader节点,则通过pg_basebackup或其它备份恢复命令部署一个备节点,之后在dcs中持久化节点状态。
2.3 process_health_cluster 模块
描述了Patroni集群健康时的处理逻辑,通过判断Patroni集群是否存在leader节点判断。
此模块主要分三条线路走:
- 如果不是leader节点,follow leader节点,之后在dcs中持久化节点状态。
- 如果是leader节点,并且数据库为master,在dcs中持久化节点状态。
- 如果是leader节点,并且数据库为slave,promote从库为主库,之后在dcs中持久化节点状态。
2.4 process_unhealth_cluster 模块
描述了Patroni集群不健康时的处理逻辑,通过判断Patroni集群是否存在leader节点判断。
此模块主要分三条线路走:
- 如果不是最健康的节点,follow其它节点,之后在dcs中持久化节点状态。
- 如果是最健康的节点,若成功获得leader锁并且数据库为 master,之后在dcs中持久化节点状态。
- 如果是最健康的节点,若获得leader锁失败并且数据库为slave,promote从库为主库,之后在dcs中持久化节点状态。
2.5 根据以上处理流程图,相应场景流程如下:
- 关闭备库实例,备库能够自动拉起,走的是 process_health_cluster 处理逻辑。
- 关闭主库实例,主库能够自动拉起,走的也是 process_health_cluster 处理逻辑。
- 停主库主机,触发主备切换,走的是 process_unhealth_cluster 处理逻辑。