cover_image

乖乖,PG高可用咱不用主从流复制了,咱试试patroni

詹姆斯邦德007 IT 邦德
2024年05月16日 00:13
图片
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验,
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理

微信:jem_db
QQ交流群:587159446
公众号:IT邦德

@

  • 1.1 架构

  • 2.etcd介绍

  • 3.部署patroni

  • 4.watchdog

  • 5.集群运维

    • 5.1 查看集群内节点信息

    • 5.2 手动切换主备

    • 5.3 初始化节点

  • 6.总结


前言

Patroni用于构建高可用 PostgreSQL 集群的工具,本文做了详细的说明

1.1 架构

patroni+etcd提供了一系列的集群管理方案。
etcd负责集群状态信息的存放,用来联系各个节点,
patroni负责为集群提供高可用服务,
两者的集合为PostgreSQL集群提供了故障转移的高可用服务
,它不仅配置简单,而且功能丰富:
1.支持手动和自动故障转移
2.支持一主多从、级联复制
3.支持同步、异步模式
4.支持使用watchdog防止脑裂
图片

2.etcd介绍

Etcd是⼀款基于Raft算法和协议开发的分布式 key-value 数据库,基于Go语⾔编写,Patroni监控本地的PostgreSQL状态,并将相关信息写⼊Etcd,每个Patroni都能读写Etcd上的key,从⽽获取外地PostgreSQL数据库信息。当Etcd的leader节点不可⽤时,Etcd会⼀致性的选择⼀个合适的节点作为主节点,新的Etcd主节点将获取leader key,因此建议Etcd集群为三个以上且为奇数的节点。⼀个标准的3节点etcd集群,最⼤容许1个节点故障。

https://github.com/etcd-io/etcd
图片

3.部署patroni

1.在各个节点部署python3。
需要使用高版本的python来使用patroni服务
2.在各个节点上部署patroni。
安装必要的依赖包和patroni软件
图片

4.watchdog

使用watchdog为防止出现脑裂,如果Leader节点异常导致patroni进程无法及时更新watchdog,会在Leader key过期的前5秒触发重启。重启如果在5秒之内完成,Leader节点有机会再次获得Leader锁,否则Leader key过期后,由备库通过选举选出新的Leader。Patroni会在将PostgreSQL提升为master之前尝试激活watchdog。如果看watchdog激活失败并且watchdog模式是required那么节点将拒绝成为主节点。在决定参加领导者选举时,Patroni还将检查watchdog配置是否允许它成为领导者。在将PostgreSQL降级后(例如由于手动故障转移),Patroni将再次禁用watchdog。当 Patroni处于暂停状态时,watchdog也将被禁用。正常停止Patroni服务,也会将watchdog禁用。

图片

5.集群运维

5.1 查看集群内节点信息

patronictl -c /etc/patroni/patroni.yml list
图片

5.2 手动切换主备

选择某一可用的从节点,使其成为主节点角色
patronictl -c /etc/patroni/patroni.yml switchover
查看集群状态
patronictl -c /etc/patroni/patroni.yml list

5.3 初始化节点

当某一节点与主库不同步,或者节点异常运行时,
可以使用此方法初始化节点信息以重新加入集群。
patronictl -c /etc/patroni/patroni.yml reinit pgsql
1.选择以下需要添加的节点名称:pgsql_node2
2.你确定要重新初始化成员 pgsql_node2?[y/N]:y
3.成功:为成员pgsql_node3执行初始化

6.总结

Patroni用于构建高可用 PostgreSQL 集群的工具,它通过自动化的方式来管理主备切换、数据复制和集群健康检查。这篇文章将深入探讨 Patroni 的技术特性、应用场景及其优势,帮助你更好地理解和利用这一强大的 PostgreSQL 管理方案。


DBA · 目录
上一篇DBA老鸟,没用过这些数据库迁移工具,正常吗?下一篇某发布会大模型出现time.sleep(6)后,我捋了一下数据库的sleep...
继续滑动看下一个
IT 邦德
向上滑动看下一个