上一篇【PostgreSQL部署|基于Stream复制的手工主从切换】总结了通过手工的方式来实现主从切换,对于了解其切换原理有很大帮助,但实际生产不会通过手工方式进行切换,而是要有配套的工具,本文将采用目前较流行的patroni工具+etcd工具,方案完整成熟。
本文将包含安装部署、切换测试两部分内容,安装只是实现了功能,参数均未做细致调整,这将是下一篇要补充的内容。
1. 简介
1.1 Patroni
Patroni是一个基于Python可创建自己的自定义、高可用性解决方案的模板,并且 可实现最大的可访问性、分布式存储配置,如ZooKeeper,etcd,Consul或Kubernetes。希望在数据中心或其他任何地方快速部署HA PostgreSQL的数据库工程师,DBA,DevOps和SRE工程师,希能能够发现它有作用。
我们将 Patroni 称为“模板”,因为它远非达到一个可以满足所有需求的或即插即用的复制系统。它将有自己的警告。有很多方法可以使用PostgreSQL运行高可用性;有关列表,请参阅 PostgreSQL 文档。
目前支持的PostgreSQL版本:9.3到14。
1.2 etcd
Etcd是一款基于Raft算法和协议开发的分布式 key-value 数据库,基于Go语言编写,Patroni监控本地的PostgreSQL状态,并将相关信息写入Etcd,每个Patroni都能读写Etcd上的key,从而获取外地PostgreSQL数据库信息。
当Etcd的leader节点不可用时,Etcd会一致性的选择一个合适的节点作为主节点,新的Etcd主节点将获取leader key,因此建议Etcd集群为三个以上且为奇数的节点,不建议部署在同一个机房,有条件话尽量部署在三个机房。
一个标准的3节点etcd集群,最大容许1个节点故障。
2. 安装部署
2.1 环境列表
本次部署涉及的软件版本:
部署软件名称 | 版本 | 下载地址 |
---|---|---|
操作系统 | Centos 7.6 | 13.6 |
数据库 | PostgreSQL 13.6 | 13.6 |
Python | 3.6.8 | |
Patroni | 2.1.3 | |
Etcd | etcd-v3.5.2 |
说明中包含了要安装的组件。
IP地址 | 操作系统 | 数据库版本 | 角色 | 说明 |
---|---|---|---|---|
192.168.56.180 | Centos 7.6 | 13.6 | 主 | PostgreSQL、Patroni、etcd |
192.168.56.181 | Centos 7.6 | 13.6 | 从 | PostgreSQL、Patroni、etcd |
192.168.56.182 | Centos 7.6 | 13.6 | 从 | PostgreSQL、Patroni、etcd |
步骤2.2-
2.2 关闭防火墙
systemctl stop firewalld.service systemctl disable firewalld.service复制
2.3 安装epel源
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm复制
2.4 安装Python
如果默认已经安装好了python3,可忽略此步骤,高版本理论都可以
wget -c https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz ./configure make make install复制
2.5 安装Etcd
2.5.1 三台均做
mkdir /data cd /data wget -c https://github.com/etcd-io/etcd/releases/download/v3.5.2/etcd-v3.5.2-linux-amd64.tar.gz tar -zxf etcd-v3.5.2-linux-amd64.tar.gz mv etcd-v3.5.2-linux-amd64 /opt/etcd-v3.5.2复制
2.5.2 参数配置-节点192.168.56.180
cat > /opt/etcd-v3.5.2/start_etcd.sh<<eof etcd="" --name="" etcd_digops01="" \="" --initial-advertise-peer-urls="" http:="" 192.168.56.180:2380="" --listen-peer-urls="" --listen-client-urls="" 192.168.56.180:2379,http:="" 127.0.0.1:2379="" --advertise-client-urls="" 192.168.56.180:2379="" --initial-cluster-token="" etcd-cluster-digops="" --initial-cluster="" --initial-cluster-state="" new="" --enable-v2="" eof=""< pre="">复制