Patroni 流程整理目录-初始化
Patroni 流程整理目录-初始化
2. 初始化
数据库的初始化在Postgresql
类的__init__
函数中,在这个函数中对当前的数据库做了一系列的调整,初始化一系列实例、设置一些配置信息,查看状态和更新信息等等。而将节点加入集群或者初始化集群时,则是调用ha
类中的函数进行初始化,如post_bootstrap
函数则是对初始化数据库之后在进行一些设定,而bootstrap
函数则是实际对集群状态进行检查从而对当前节点进行正常初始化的函数,在bootstrap函数中有三个重要的函数调用,分别为bootstrap_standby_leader
、bootstrap
、clone
,这三个函数是实际初始化的实现函数,针对不同的情况使用不同的函数。
-
bootstrap_standby_leader
:初始化一个备用集群的领导者节点。在这个函数中会获取一个集群成员,然后对这个成员进行克隆操作(调用
clone
函数),然后异步等待克隆操作完成,设置当前角色为standby_leader
,最后返回初始化结果即克隆结果。 -
bootstrap
:初始化一个新的集群。这个函数是
bootstrap.py
的bootstrap
函数,在这个函数中首先从配置字典中获取pg_hba
和method
配置项,然后判断是使用自定义的初始化方法还是默认的初始化方法,最后执行初始化并且启动节点,返回初始化结果。 -
clone
:从现有节点克隆。在这个函数先判断是否为备用集群(备用集群或从节点),是的话继续判断当前的克隆类型是不是
RemoteMember
,不是就进行转换为RemoteMember
,接着重置回滚状态,开始引导克隆操作,调用bootstrap.py
的clone
函数,克隆成功后获取集群信息并选择要跟随的节点,最后启动跟随操作;若是克隆失败就回情况 pg 的数据库目录。
初始化数据库的流程图如下所示:

2.1 初始化主库
初始化主库则是使用bootstrap.py
的bootstrap
,在这个方法中判断是使用用户提供的初始化方法还是默认的初始化方法,默认初始化方法则是使用initdb
命令来进行主库的初始化。
初始化主库的流程图如下所示:

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

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

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统