PostgreSQL 高可用 Repmgr 源码安装与部署

1 背景知识

1.1 Repmgr 集群规划

IP 地址 操作系统版本 角色 主机名
192.168.10.228 VIP VIP
192.168.10.229 Alma Linux 8.8 PostgreSQL Master node1
192.168.10.230 Alma Linux 8.8 PostgreSQL Standby node2
192.168.10.231 Alma Linux 8.8 PostgreSQL Standby node3
192.168.10.232 Alma Linux 8.8 witness node4

1.2 搭建步骤简介

1、安装 PostgreSQL 数据库
2、准备 Repmgr环境准备
3、安装 Repmgr 源码安装与部署

2 安装 PostgreSQL 数据库

请参考 PostgreSQL15
已完成 PostgreSQL 数据库安装,快照为 DB_INSTALL


3 PGPOOL-II操作系统环境

请参考 Repmgr环境准备

快照为 Repmgr ENV


4 Repmgr 安装

Warning

无特殊说明,以下操作需要在所有节点下执行。

4.1 配置 repmgr 安装目录

与 PostgreSQL 数据库安装在一起。

4.2 下载repmgr源码

su - postgres 
cd /soft
wget https://www.repmgr.org/download/repmgr-5.4.1.tar.gz
tar -zxf repmgr-*.tar.gz
cd repmgr-*/

4.3 编译并执行安装

./configure && make && make install

5 Repmgr 配置

5.1 node1

5.1.1 编辑 /etc/repmgr.conf 文件

su - root 
vi /etc/repmgr.conf

5.1.2 repmgr.conf 参数配置

# general
node_id=1
node_name=node1
conninfo='host=node1 user=repmgr dbname=repmgr port=5432 connect_timeout=2'
connection_check_type='ping'
data_directory='/usr/local/pgsql/data'
use_replication_slots=true
replication_user='repmgr'
replication_type='physical'
pg_bindir='/usr/local/pgsql/bin'
#auto failover
failover='automatic'
promote_command='repmgr standby promote  --log-to-file'
follow_command='repmgr standby follow  --log-to-file --upstream-node-id=%n'
# monitor
monitoring_history=true
monitor_interval_secs=1
reconnect_attempts=2
reconnect_interval=2
location='location1'

# pid
repmgrd_pid_file='/usr/local/pgsql/run/hamgrd.pid'

#log
log_level=INFO
log_status_interval=10
log_file='/usr/local/pgsql/log/repmgrd.log'

5.1.3 将脚本拷贝到其他节点

#root>
scp /etc/repmgr.conf node2:/etc/
scp /etc/repmgr.conf node3:/etc/
scp /etc/repmgr.conf node4:/etc/

5.1.4 5.2 加载repmgr 插件

1、更改参数并加载插件。

#postres>
 psql  -U postgres
ALTER SYSTEM set shared_preload_libraries='repmgr';
\c - postgres
CREATE EXTENSION repmgr;
\c repmgr
 CREATE EXTENSION repmgr;
\c template1
CREATE EXTENSION repmgr;

2、重启数据库。

#postgres>
pg_ctl restart 

5.2 node2

以下是需要修改的参数。
1、node_id
2、node_name
3、conninfo

#root>
vi /etc/repmgr.conf

5.3 node3

#root>
vi /etc/repmgr.conf

以下是需要修改的参数。
1、node_id
2、node_name
3、conninfo

5.4 node4

5.4.1 以下是需要修改的参数

#root>
vi /etc/repmgr.conf

1、node_id
2、node_name
3、conninfo

5.4.2 5.2 加载repmgr 插件

1、更改参数并加载插件。

#postgres>
 psql  -U postgres
ALTER SYSTEM set shared_preload_libraries='repmgr';
\c - postgres
CREATE EXTENSION repmgr;
 \c repmgr
CREATE EXTENSION repmgr;
\c template1
CREATE EXTENSION repmgr;

2、重启数据库。

pg_ctl restart 

6 节点注册

6.1 node1 注册节点

1、将本节点注册为 master .

#postgres>
repmgr primary register

2、查看集群状态。

#postgres>
 repmgr cluster show

6.2 node2 流复制搭建,并加入集群。

1、搭建node2 备库。

#postgres>
repmgr -h node1 -U repmgr -d repmgr standby clone

2、启动数据库

#postgres>
pg_ctl -D $PGDATA start

3、将node2 节点注册为备节点

#postgres>
repmgr standby register

4、查看集群状态。

#postgres>
repmgr cluster show

6.3 node3流复制搭建

1、搭建node3 备库。

#postgres>
repmgr -h node1 -U repmgr -d repmgr standby clone

2、启动数据库

#postgres>
pg_ctl -D $PGDATA start

3、node3 节点注册为备节点

#postgres>
repmgr standby register

4、查看集群状态。

#postgres>
repmgr cluster show

6.4 node4 注册 witness 节点

1、注册 witness 节点。

#postgres>
repmgr witness register -hnode1 -Urepmgr -drepmgr --force

2、查看集群状态。

#postgres>
repmgr cluster show

7 配置repmgrd 守护进程

Note

repmgrd 守护进程可以自动实现故障恢复和故障转移。

7.1 配置定时任务

Warning

在所有节点上执行。这里为了防止主备切换并没有开启自动开机启动。

1、编辑 contab 文件。

#postgres>
crontab -e

2、配置定时任务计划。

#postgres>
*/1 * * * * /usr/local/pgsql/bin/repmgrd -p /usr/local/pgsql/run/hamgrd.pid

7.2 查看集群状态

#postgres>
repmgr service status ;

到此为止:打快照为 Repmgr Cluster

Warning

确认所有服务都已经启动之后再进行操作。

8 验证自动故障切换

8.1 关闭 node1 master 服务

#postgres>
pg_ctl stop

8.2 将故障主机加入集群

#postgres>
repmgr node rejoin -d 'host=node1 dbname=repmgr user=repmgr' --force-rewind --verbose

8.3 查看集群状态

#postgres>
repmgr service  show

到此所有的 repmgr 操作都已完成;