当前位置: 首页 > article >正文

Patroni官方给出的流程图

Patroni官方给出的流程图可以将整个流程划分为以下几个主要部分:

  1. 节点启动流程:这是Patroni初始化和启动的过程,包括数据库的初始化以及在分布式协调服务(如etcd)中持久化节点状态。

  2. 节点拉起流程:当一个节点被创建或加入集群时,它会执行一系列操作以确保其能够正常运行并与其他节点同步。这包括从其他节点拉取必要的数据和配置信息。

  3. 处理健康集群流程:Patroni会持续监控集群的健康状态,一旦检测到主节点故障,它会自动执行故障恢复操作,将其中一个从节点晋升为主节点。

  4. 处理不健康集群流程:如果某个节点出现故障,Patroni会通过watchdog机制进行探测,并在必要时重置该节点的状态,以保证集群的一致性和高可用性。

此外,Patroni的处理逻辑还包括run_cycle模块,这是主循环模块,负责调用各个子模块来执行具体的任务。这些模块共同工作,确保Patroni能够在各种高可用场景下稳定运行。

Patroni在节点启动流程中具体如何初始化数据库和持久化节点状态?

Patroni在节点启动流程中初始化数据库和持久化节点状态的方式如下:

  1. 初始化模板:Patroni使用预定义的初始化模板来初始化数据库集群。这些模板位于roles/postgres/templates/目录下,有四种预定义好的初始化模板可供选择。

  2. 数据目录重初始化:如果需要重新初始化指定节点上的PostgreSQL数据目录,可以通过调用REST API中的POST /reinitialize命令来实现。该命令仅允许在副本上执行,并会删除现有的数据目录并启动pg_basebackup或其他替代的副本创建方法。

  3. 自动或手动恢复:当主数据库(Primary)故障时,Patroni可以将一个从库(Standby)提升为主数据库,而旧的主数据库则降级为从库。此外,如果一个故障的PostgreSQL被抢救过来,它能够重新自动或手动加入集群。

  4. 状态持久化与共享:Patroni利用etcd作为节点间信息共享的工具,以确保所有节点能够同步并维护一致的状态。当持有key的节点出现故障时,其他节点可以创建新的key值,从而产生新的主节点。

Patroni的节点拉起流程中,是如何确保新加入的节点能够正确同步数据和配置信息的?

在Patroni的节点拉起流程中,确保新加入的节点能够正确同步数据和配置信息主要依赖于其与etcd或Consul等分布式配置系统(DCS)的交互。具体来说:

  1. 使用etcd进行状态同步:Patroni会将同步的状态记录到etcd中,以确保集群中的所有节点都能保持一致的同步状态。

  2. 通过DCS管理关键参数:Patroni通过分布式配置系统(如etcd或Consul)来管理关键参数,例如max_connectionswal_level等,这些参数需要在主库和副本间保持一致。这样可以确保新加入的节点在配置上与现有节点保持一致。

  3. 连接到Consul代理:每个节点上的Patroni首先连接到Consul代理以加入集群。只有在这之后,它才会决定节点是主节点还是副本节点,并开始同步数据和配置信息。

在处理健康集群流程中,Patroni是如何检测主节点故障并执行故障恢复操作的?

在处理健康集群流程中,Patroni通过检测主节点的异常状态来执行故障恢复操作。具体来说,当Patroni检测到主节点出现故障时,它会根据预设的策略进行故障转移和恢复操作。Patroni使用etcd作为分布式配置存储(DCS),其中包含集群信息,如配置、健康和当前状态。在检测到主节点故障后,Patroni会尝试重新选举一个新的主节点,并将其他节点切换为备库状态,以确保集群的高可用性。

此外,Patroni还提供了暂停模式下的功能,允许在手动操作如主版本升级或故障恢复时限制自动操作,以防止冲突。在暂停模式下,如果Patroni检测到“并行”主节点,它会发出警告,但不会在没有leader锁的情况下降级主节点。如果集群中没有leader锁,则运行中的主节点将获取该锁。如果有多个主节点,第一个获得锁的主节点获胜。

在某些情况下,如果需要恢复一个异常的数据库节点,只需重启Patroni节点并改变时间线即可。这表明Patroni具有一定的灵活性和容错能力,能够应对各种故障场景并快速恢复集群的正常运行。

对于不健康集群流程,Patroni的watchdog机制是如何工作的,以及它是如何重置故障节点状态的?

Patroni的watchdog机制在不健康集群流程中起着关键作用,其主要功能是监控和管理PostgreSQL集群的状态。当集群中的节点出现故障时,watchdog会介入并采取相应的措施来恢复系统的正常运行。

Patroni的watchdog机制通过定期更新Leader key及其TTL(生存时间)来保持集群的健康状态。默认情况下,Patroni每10秒执行一次loop_wait操作,以确保系统能够及时响应任何潜在的问题。如果Leader节点异常导致Patroni进程无法及时更新Leader key,则watchdog会在Leader key过期前的安全裕度时间内触发重启操作。这个安全裕度时间是根据配置参数设置的,例如在默认配置下,safety_margin为5秒,因此整个HA循环至少有15秒的时间来完成任务,然后系统才会被强制重置。

此外,当Patroni处于暂停状态时,watchdog会被禁用,以避免不必要的重启或干扰。正常停止Patroni服务也会禁用watchdog,以防止意外重启。

在故障转移过程中,如果由于手动故障转移或其他原因导致PostgreSQL降级,Patroni将再次禁用watchdog,以确保系统的平稳过渡。一旦选举出新的领导者,watchdog将重新启用,并继续监控集群的状态。

如果Patroni本身无法工作,watchdog将尝试重新启动系统。如果系统仍然无法正常工作,且watchdog模式被设置为required,则该节点将不能成为领导者。这种机制确保了即使在极端情况下,集群也能维持其高可用性和稳定性。

Patroni的run_cycle模块具体负责哪些任务,它是如何调用各个子模块来执行这些任务的?

Patroni的run_cycle模块是其核心执行流程的一部分,负责在每个执行周期中定义守护进程应该执行的任务。这个模块通过调用各个子模块来完成这些任务。

具体来说,run_cycle模块首先会调用self.ha.run _cycle函数。这一步骤确保了Patroni能够处理高可用性相关的逻辑,比如节点的启动、健康检查以及集群状态的更新等。

此外,根据不同的情况,run_cycle还可能调用其他子模块,如Node bootstrap模块、process_health_cluster模块和process_unhealth_cluster模块。这些模块分别负责节点的初始化、处理健康的集群状态以及处理不健康的集群状态。

在每次执行完所有逻辑后,run_cycle会等待一段时间(由loop_wait参数配置),然后进入下一次循环。这种循环机制保证了Patroni能够持续监控和管理PostgreSQL数据库的高可用性。

总结来说,Patroni的run_cycle模块通过调用多个子模块来执行其任务,包括但不限于高可用性管理、节点初始化、健康检查和集群状态更新等。

https://raw.githubusercontent.com/zalando/patroni/master/docs/ha_loop_diagram.png

https://zhuanlan.zhihu.com/p/159009358


http://www.kler.cn/a/320015.html

相关文章:

  • SUN的J2EE与微软的DNA
  • [0242-07].第09节:SpringBoot中简单功能分析
  • 【Linux】Mysql部署步骤
  • 非安全函数
  • 本地部署Web-Check网站检测与分析利器并实现远程访问实时监测
  • Outlook 无网络连接[2604] 错误解决办法
  • Linux 进程间通信(共享内存+消息队列)
  • 嵌入式程序设计经验 创建复位函数
  • 2024必备中英互译利器全知道
  • 每天一道面试题(18):Redis 和 MySQL 如何保证数据一致性
  • 【病毒分析】phobos家族Elbie变种加密器分析报告
  • C语言 | Leetcode C语言题解之第436题寻找右区间
  • 华为HarmonyOS地图服务 5 - 利用UI控件和手势进行地图交互
  • Go语言设计的一些优点及缺陷
  • 语音音频(wav)声纹识别-技术实现-python
  • Debian与Ubuntu:深入解读两大Linux发行版的历史与联系
  • react crash course 2024(5) useState钩子
  • mac终端打开报complete 13 command not found compdef异常处理以及命令补全功能实现
  • 详细分析SpringMvc中HandlerInterceptor拦截器的基本知识(附Demo)
  • java知识:什么是GC?GC调优思路又有哪些
  • C++深入学习string类成员函数(1):默认与迭代
  • 聚观早报 | 小米新车规划曝光;北京汽车官宣更换标志
  • Django后台管理复杂模型
  • 【JVM】类加载机制
  • leetcode-189:轮转数组
  • 阿尔兹海默症患者出行随身助手设计_kaic