作者:徐田原
一、背景概述
关于PosgreSQL高可用管理套件,PG生态圈提供许多人气比较高的开源高可用和故障转移工具,比如Patroni、Repmgr、PAF、Stolon等。下面重点给大家推荐关于repmgr这款精简易用的流复制工具。个人觉得,repmgr与声名远扬的ORACLE ADG逻辑复制工具非常类似。它的功能强大,安装和配置简单,有很强的可操控性。下面也会介绍两种异构数据库不用的复制方式的工具。
repmgr是一个2ndQuadrant开发的一款复制的开源工具套件,用于管理PostgreSQL服务器集群中的复制和故障转移。最初,它主要是为了简化流副本的管理,后来发展成为一个完整的故障转移管理套件。它通过设置备用服务器,监视复制以及执行管理任务(如故障转移或手动切换操作)的工具,增强了PostgreSQL内置的热备份功能。Repmgr体系架构如下:
在入门repmgr之前务必需要了解的组件功能模块:
1.1 Repmgrd 守护进程
它主动监视复制集群中的服务器并执行以下任务:
监控和记录集群复制性能
通过检测主服务器故障并提升最合适的备用服务器来执行故障转移
将有关群集中事件的通知提供给用户定义的脚本,该脚本可以执行诸如通过电子邮件发送警报等任务
repmgrd 根据本地数据库角色不同,其功能也不同: 主库:repmgrd仅监控本地数据库,负责自动恢复、同异步切换 备库:repmgrd监控本地数据库和主数据库,负责自动切换、复制槽删除
1.2 Repmgr命令管理
用于执行管理任务的命令行工具,主要有以下方面作用:
设置备用服务器
将备用服务器升级为主服务器
切换主服务器和备用服务器
显示复制群集中的服务器状态
1.3 用户和元数据
为了有效地管理复制集群,repmgr提供专用数据库存储和管理有关repmgr集群服务的相关信息。此模式在部署repmgr服务时,由repmgr扩展自动创建,该扩展在初始化repmgr -administered集群(repmgr主寄存器)的第一步中安装,包含以下对象:
1、表
repmgr.events:记录感兴趣的事件 repmgr.nodes:复制群集中每个服务器的连接和状态信息 repmgr.monitoring_history:repmgrd写入的历史备用监视信息
2、视图
repmgr.show_nodes:基于表repmgr.nodes,另外显示服务器上游节点的名称 repmgr.replication_status:启用repmgrd的监视时,显示每个备用数据库的当前监视状态。 repmgr元数据模式可以存储在现有的数据库或在自己的专用数据库。
请注意,repmgr元数据模式不能驻留在不属于repmgr管理的复制集群的数据库服务器上。 数据库用户必须可供repmgr访问此数据库并执行必要的更改。 此用户不需要是超级用户,但是某些操作(如初始安装repmgr扩展)将需要超级用户连接(可以使用命令行选项–superuser在需要时指定 )。
二、安装部署
2.1 环境准备
安装环境需要注意以下要求:
服务主机名主机IP操作系统部署版本主节点lightdb1192.168.127.135CentOS 8.4pg13.3 repmgr-5.2.1备节点1lightdb2192.168.127.136CentOS 8.4pg13.3 repmgr-5.2.1备节点
2lightdb3192.168.127.137CentOS 8.4pg13.3 repmgr-5.2.1见证节点lightdb4192.168.127.138CentOS 8.4pg13.3 repmgr-5.2.1连接池1lightdb5192.168.127.126CentOS 8.4pgpool-II-4.2.2连接池2lightdb6192.168.127.127CentOS 8.4pgpool-II-4.2.2
版本要求:repmgr必须安装在复制群集中的每台服务器上。如果从软件包安装repmgr,则软件包版本必须与PostgreSQL版本匹配。如果从源安装,则必须针对相同的主版本编译repmgr。
环境依赖:repmgr有一些必要的依赖项,以使其能够最佳地运行,并且应该为系统提供某些最低限度的功能。本案例是在Centos7.X操作系统使用repmgr最新5.1的版本。在生产环境,可以选择根据实际情况选择操作系统和对应的repmgr和PostgreSQL版本。 如果是Rehat的操作系统系统可通过安装相应的RPM来添加PostgreSQL存储库:https://yum.postgresql.org/repopackages.php,也可以通过源码来进行安装。
通信配置:建议repmgr通过配置SSH免密在节点之间进行通信,方便运维操作。但如果您企业对主机互信有特定的安全要求和约束,可以使用配置管理来管理服务器密钥,比如Ansible、Puppet或Salt等。
2.2 安装步骤
步骤1:配置主机hosts文件vim /etc/hosts,添加主机ip和name
192.168.127.135 lightdb1
192.168.127.136 lightdb2
192.168.127.137 lightdb3
192.168.127.138 lightdb4
192.168.127.126 lightdb5
192.168.127.127 lightdb6
[root@localhost ~]# hostnamectl set-hostname lightdb1
[root@localhost ~]# hostname
lightdb1
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# cat >> /etc/hosts << EOF
> 192.168.127.135 lightdb1
> 192.168.127.136 lightdb2
> 192.168.127.137 lightdb3
> 192.168.127.138 lightdb4
>192.168.127.126 lightdb5
>192.168.127.127 lightdb6
> EOF
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
[root@localhost ~]# setenforce 0
[root@localhost ~]# dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
CentOS Linux 8 - AppStream 688 kB/s | 8.1 MB 00:12
CentOS Linux 8 - BaseOS 674 kB/s | 3.6 MB 00:05
CentOS Linux 8 - Extras 16 kB/s | 9.8 kB 00:00
pgdg-redhat-repo-latest.noarch.rpm 3.0 kB/s | 12 kB 00:03
Dependencies resolved.
===========================================================================================================================================================================
Package Architecture Version Repository Size
===========================================================================================================================================================================
Installing:
pgdg-redhat-repo noarch 42.0-18 @commandline 12 k
Transaction Summary
========================