Patroni 流程整理目录-初始化

Patroni 流程整理目录-初始化

2. 初始化

数据库的初始化在Postgresql类的__init__函数中,在这个函数中对当前的数据库做了一系列的调整,初始化一系列实例、设置一些配置信息,查看状态和更新信息等等。而将节点加入集群或者初始化集群时,则是调用ha类中的函数进行初始化,如post_bootstrap函数则是对初始化数据库之后在进行一些设定,而bootstrap函数则是实际对集群状态进行检查从而对当前节点进行正常初始化的函数,在bootstrap函数中有三个重要的函数调用,分别为bootstrap_standby_leaderbootstrapclone,这三个函数是实际初始化的实现函数,针对不同的情况使用不同的函数。

  • bootstrap_standby_leader:初始化一个备用集群的领导者节点。

    在这个函数中会获取一个集群成员,然后对这个成员进行克隆操作(调用clone函数),然后异步等待克隆操作完成,设置当前角色为standby_leader,最后返回初始化结果即克隆结果。

  • bootstrap:初始化一个新的集群。

    这个函数是bootstrap.pybootstrap函数,在这个函数中首先从配置字典中获取pg_hbamethod配置项,然后判断是使用自定义的初始化方法还是默认的初始化方法,最后执行初始化并且启动节点,返回初始化结果。

  • clone:从现有节点克隆。

    在这个函数先判断是否为备用集群(备用集群或从节点),是的话继续判断当前的克隆类型是不是RemoteMember,不是就进行转换为RemoteMember,接着重置回滚状态,开始引导克隆操作,调用bootstrap.pyclone函数,克隆成功后获取集群信息并选择要跟随的节点,最后启动跟随操作;若是克隆失败就回情况 pg 的数据库目录。

初始化数据库的流程图如下所示:

2.1 初始化主库

初始化主库则是使用bootstrap.pybootstrap,在这个方法中判断是使用用户提供的初始化方法还是默认的初始化方法,默认初始化方法则是使用initdb命令来进行主库的初始化。

初始化主库的流程图如下所示:

2.2 初始化备库

初始化备库则是依赖于ha.pybootstrap.py中的clone函数来实现的,在bootstrap.py中的clone函数中则是调用create_replica来创建副本,然后根据结果来进行一些_post_restore恢复前的操作,确保该节点的数据库可用。

初始化备库的流程图如下所示:

而关于bootstrap.py中的clone函数的流程图如下所示:

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