PostgreSQL-repmgr高可用搭建部署

repmgr是PGSQL比较常用的一个高可用插件了,主要是部署简单,管理方便,并且对数据库本身的侵入也是比较小的。目前和Patroni以及pgpool-II算是比较主流的高可用方式,下面我们来看看如何使用它。

repmgr官网:https://www.repmgr.org/

环境介绍

角色IP组件
Leader172.22.138.220postgresql v14、repmgr v5.3.3
standby1172.22.138.219postgresql v14、repmgr v5.3.3
standby2172.22.138.218postgresql v14、repmgr v5.3.3

repmgr与postgresql兼容版本

在这里插入图片描述

环境准备

搭建repmgr高可用架构,需要先部署好postgresql,无需部署流复制,因为流复制需要通过repmgr进行搭建。所以需要先在三个节点创建出postgresql实例。如果不知道如何搭建postgresql,可以查看我另外一篇文章,这里不再做搭建postgresql的操作。

https://blog.csdn.net/h_3369/article/details/141358564?spm=1001.2014.3001.5501

1.创建相关目录,并安装依赖包(所有节点执行)

root # mkdir /data/repmgr -p
root # chown -R postgres. /data/repmgr
root # yum check-update
root # yum install -y yum-utils openjade docbook-dtds docbook-style-dsssl docbook-style-xsl
root # yum  install -y  cmake make gcc zlib gcc-c++ perl readline readline-devel zlib 
root # yum -y install yum-builddep flex libselinux-devel libxml2-devel libxslt-devel openssl-devel pam-devel readline-devel

2.通过官网下载repmgr源码包,并进行解压(所有节点执行)

root # cd /opt
root # wget https://www.repmgr.org/download/repmgr-5.3.3.tar.gz
root # tar xf repmgr-5.3.3.tar.gz

3.使用postgres用户编译安装repmgr(所有节点执行)

root # chown -R postgres. /opt/repmgr-5.3.3
root # su - postgres
postgres # cd /opt/repmgr-5.3.3
postgres # ./configure
postgres # make && make install
#默认会安装到pgsql的bin目录下,安装完成后使用以下命令查看是否安装成功
postgres #repmgr --help
repmgr: replication management tool for PostgreSQL

Usage:
    repmgr [OPTIONS] primary {register|unregister}
    repmgr [OPTIONS] standby {register|unregister|clone|promote|follow|switchover}
    repmgr [OPTIONS] node    {status|check|rejoin|service}
    repmgr [OPTIONS] cluster {show|event|matrix|crosscheck|cleanup}
    repmgr [OPTIONS] witness {register|unregister}
    repmgr [OPTIONS] service {status|pause|unpause}
    repmgr [OPTIONS] daemon  {start|stop}
...

4.配置postgres用户的互信,三台节点相互配置。

#leader节点
postgres # ssh-keygen -t rsa
postgres # ssh-copy-id postgres@172.22.138.218
postgres # ssh-copy-id postgres@172.22.138.219
 
#standby1节点
postgres # ssh-keygen -t rsa
postgres # ssh-copy-id postgres@172.22.138.218
postgres # ssh-copy-id postgres@172.22.138.220

#standby2节点
postgres # ssh-keygen -t rsa
postgres # ssh-copy-id postgres@172.22.138.219
postgres # ssh-copy-id postgres@172.22.138.220

配置PGSQL

1.创建repmgr的用户和数据库,并授予管理员权限。(leader节点执行)

postgres=# create user repmgr with superuser password 'repmgr'  connection limit 20;
postgres=# create database repmgr owner repmgr;\
postgres=# alter user repmgr set search_path to repmgr, "$user", public;

2.修改postgresql.conf文件,增加shared_preload_libraries参数。这个参数用于指定在pgsql启动时预加载的共享库。‌这些共享库通常包含一些扩展模块,我们这里需要加载repmgr共享库。max_wal_senders是wal日志发送的最大进程数,影响着主库像从库投递wal日志时的性能。wal_log_hints这个参数,能够在wal日志中写入更多信息(记录特定提示位(hint-bit)的变化)。都是repmgr需要用到的参数。(leader节点执行)

postgres # vim /data/pgsql/data/postgresql.conf
...
shared_preload_libraries = 'repmgr'
max_wal_senders = 6
wal_log_hints = on
...

3.配置访问控制文件,在文件中加入repmgr用户(leader节点执行)

postgres # vim /data/pgsql/data/pg_hba.conf
local   repmgr        repmgr                                  trust
host    repmgr        repmgr      127.0.0.1/32           	  trust
host    repmgr        repmgr      0.0.0.0/0                	  trust

4.为repmgr用户编写.pgpass密码文件,实现免密登录。(所有节点执行)

postgres # vim /home/postgres/.pgpass
172.22.138.218:5432:repmgr:repmgr:repmgr
172.22.138.219:5432:repmgr:repmgr:repmgr
172.22.138.220:5432:repmgr:repmgr:repmgr

4…重启pgsql使配置文件生效。

root # systemctl restart postgresql

配置repmgr

1.编写repmgr配置文件,每个节点按照实际情况配置(所有节点按实际情况执行)

postgres # vim /data/repmgr/repmgr.conf
# leader节点
node_id=1
node_name='node1'
conninfo='host=172.22.138.220 port=5432 user=repmgr dbname=repmgr connect_timeout=2'
data_directory='/data/pgsql/data'
failover='automatic'
promote_command='/data/pgsql/base/bin/repmgr standby promote --config-file=/data/pgsql/remgr/remgr.conf --log-to-file'
follow_command='/data/pgsql/base/bin/repmgr standby follow --config-file=/data/pgsql/remgr/remgr.conf --log-to-file --upstream-node-id=%n'
monitoring_history=yes
connection_check_type=ping
reconnect_attempts=6
reconnect_interval=10
standby_disconnect_on_failover=true
repmgrd_pid_file='/data/repmgr/repmgrd.pid'
repmgrd_service_start_command='/data/pgsql/base/bin/repmgrd -f /data/pgsql/remgr/remgr.conf start'
repmgrd_service_stop_command='kill -9 `cat /data/pgsql/remgr/repmgrd.pid`'
log_level=INFO
log_file='/data/repmgr/repmgrd.log'
log_status_interval=10

# standby1节点
node_id=2
node_name='node2'
conninfo='host=172.22.138.219 port=5432 user=repmgr dbname=repmgr connect_timeout=2'
data_directory='/data/pgsql/data'
failover='automatic'
promote_command='/data/pgsql/base/bin/repmgr standby promote --config-file=/data/pgsql/remgr/remgr.conf --log-to-file'
follow_command='/data/pgsql/base/bin/repmgr standby follow --config-file=/data/pgsql/remgr/remgr.conf --log-to-file --upstream-node-id=%n'
monitoring_history=yes
connection_check_type=ping
reconnect_attempts=6
reconnect_interval=10
standby_disconnect_on_failover=true
repmgrd_pid_file='/data/repmgr/repmgrd.pid'
repmgrd_service_start_command='/data/pgsql/base/bin/repmgrd -f /data/pgsql/remgr/remgr.conf start'
repmgrd_service_stop_command='kill -9 `cat /data/pgsql/remgr/repmgrd.pid`'
log_level=INFO
log_file='/data/repmgr/repmgrd.log'
log_status_interval=10

# standby2节点
node_id=3
node_name='node3'
conninfo='host=172.22.138.218 port=5432 user=repmgr dbname=repmgr connect_timeout=2'
data_directory='/data/pgsql/data'
failover='automatic'
promote_command='/data/pgsql/base/bin/repmgr standby promote --config-file=/data/pgsql/remgr/remgr.conf --log-to-file'
follow_command='/data/pgsql/base/bin/repmgr standby follow --config-file=/data/pgsql/remgr/remgr.conf --log-to-file --upstream-node-id=%n'
monitoring_history=yes
connection_check_type=ping
reconnect_attempts=6
reconnect_interval=10
standby_disconnect_on_failover=true
repmgrd_pid_file='/data/repmgr/repmgrd.pid'
repmgrd_service_start_command='/data/pgsql/base/bin/repmgrd -f /data/pgsql/remgr/remgr.conf start'
repmgrd_service_stop_command='kill -9 `cat /data/pgsql/remgr/repmgrd.pid`'
log_level=INFO
log_file='/data/repmgr/repmgrd.log'
log_status_interval=10

2.注册主节点,将leader节点postgresql,接管到repmgr。(leader节点执行)

postgres # repmgr -f  /data/repmgr/repmgr.conf primary register
# 验证是否接管成功,查看集群状态。
postgres # repmgr -f  /data/repmgr/repmgr.conf.conf cluster show
 ID | Name  | Role    | Status    | Upstream | Location | Priority | Timeline | Connection string                                                        
----+-------+---------+-----------+----------+----------+----------+----------+---------------------------------------------------------------------------
 1  | node1 | primary | * running |          | default  | 100      | 1        | host=172.22.138.220 port=5432 user=repmgr dbname=repmgr connect_timeout=2

3.注册standby节点前需要先将从库的数据目录清空。才能从主库重新克隆。(standby节点执行)

root # systemctl stop postgresql
postgres # mkdir /tmp/bak
postgres # mv /data/pgsql/data/* /tmp/bak 

4.通过leader节点,克隆standby节点。(standby节点执行)

#检测是否有警告或者报错,如果没有去掉--dry-run执行。
postgres # repmgr -h 172.22.138.220 -U repmgr -d repmgr -f  /data/repmgr/repmgr.conf standby clone --dry-run
#执行克隆
postgres # repmgr -h 172.22.138.220 -U repmgr -d repmgr -f  /data/repmgr/repmgr.conf standby clone
#克隆完成,没有问题,启动postgresql从库实例
root # systemctl start postgresql

5.验证主从状态是否正常。(分节点执行)

#主库pgsql执行
postgres=# select * from pg_stat_replication;

#从库执行
postgres=# select * from pg_stat_wal_receiver;

6.使用repmgr命令注册从库所有节点。接管到高可用repmgr集群。(standby节点执行)

postgres # repmgr -f  /data/repmgr/repmgr.conf.conf standby register
#查看集群状态
postgres # repmgr -f  /data/repmgr/repmgr.conf.conf cluster show

repmgr后台启动

repmgr默认没有启动进程的状态下,是只搭建了一个流复制的,是没办法做到高可用的,所以我们需要再进行启动一下repmgr的进程。让他在后台进行检测。

#启动命令
repmgr -f /data/repmgr/repmgr.conf.conf  daemon start
#停止命令
repmgr -f /data/repmgr/repmgr.conf.conf  daemon stop
  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL是一个强大的开源数据库管理系统,而repmgr是一个用于实现高可用性的工具,可以帮助用户部署和管理PostgreSQL的复制集群。下面将介绍如何在CentOS 7上安装和部署repmgr实现PostgreSQL高可用性。 首先,需要在CentOS 7上安装PostgreSQLrepmgr。可以通过yum安装PostgreSQL,然后再通过源代码安装repmgr。安装完成后,需要在所有节点上创建用于复制的用户和用户组,并配置SSH免密登录。 接下来,在主节点上初始化repmgr并创建repmgr用户,然后再在备用节点上连接到主节点并完成初始化。 然后,在主节点上进行repmgr的配置,包括指定节点ID、设置连接信息等。同时,在备用节点上也需要进行repmgr的配置,指定备用节点的ID并设置连接信息。配置完成后,在主节点上执行repmgr standby clone命令将主节点的数据拷贝到备用节点。 最后,在所有节点上启动repmgr守护进程,并在主节点上执行repmgr cluster show命令检查集群状态。如果所有步骤都完成并且状态正常,那么repmgr的安装和部署就顺利完成了。 通过以上步骤,就可以在CentOS 7上安装和部署repmgr实现PostgreSQL高可用性。当主节点发生故障时,repmgr可以自动将备用节点提升为主节点,确保系统的持续可用性。同时,repmgr还提供了监控和管理PostgreSQL复制集群的功能,帮助用户更好地管理数据库系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值