PostgreSQL高可用方案
PG原生没有提供高可用程序,但官方文档中提到PG的高可用方案有很多种,有基于共享存储的,数据分片的和流复制技术的等等,完整列表可以参考文档 PostgreSQL Documentation.
![73c9d9e64b0f190d32292213bdac5573.png](https://img-blog.csdnimg.cn/img_convert/73c9d9e64b0f190d32292213bdac5573.png)
![7c7109a7131c61b630b771bedd832287.png](https://img-blog.csdnimg.cn/img_convert/7c7109a7131c61b630b771bedd832287.png)
Patroni是一个可以自定义的模板,搭配ZooKeeper,etcd,Consul或Kubernetes等DCS软件,用于快速部署PostgreSQL高可用环境。Patroni本身是用Python语言编写的。
Patroni负责集群环境数据库的启停,节点及实例的状态监控,流复制环境初始化或重建,主备切换等管理性的工作。它还负责将本地数据库的状态信息记录到etcd中。
![73c9d9e64b0f190d32292213bdac5573.png](https://img-blog.csdnimg.cn/img_convert/73c9d9e64b0f190d32292213bdac5573.png)
![7c7109a7131c61b630b771bedd832287.png](https://img-blog.csdnimg.cn/img_convert/7c7109a7131c61b630b771bedd832287.png)
etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。
它的作用与Oracle RAC环境的OCR和VoteDisk有些类似,Patroni负责将本地节点数据库信息记录至etcd, 同时也读取其它数据库节点的信息,这样就获取了其它节点数据库的状态。当主节点不可用时,Etcd负责选举出一个合适的节点作为新的主节点,Patroni再根据选举结果重新配置成员。为了避免脑裂问题,推荐Etcd集群至少为3个节点,本例是一个标准的3节点集群,同步复制状态下最多允许1个节点宕机。
所以采用Patrnoi+Etcd的高可用架构是这样的:
![]() |
本文实验环境:
3 virtual machine os version: CentOS Linux release 7.8.2003 (Core) pg version: 11.8 etcd Version: 3.3.11 patroni 1.6.5 Patroni网址:https://patroni.readthedocs.io/ etcd网址:https://etcd.io/ |
主机规划:
Hostname | IP Address | Software | Init Role |
bighouse1 | 10.0.2.21 | PostgreSQL,Patroni,Etcd | Master |
bighouse2 | 10.0.2.22 | PostgreSQL,Patroni,Etcd | Standby1 |
bighouse3 | 10.0.2.23 | PostgreSQL,Patroni,Etcd |