赞
踩
目录
repmgr
是一套开源工具,用于管理 PostgreSQL 服务器集群内的复制和故障转移。它通过设置备用服务器、监控复制以及执行故障转移或切换操作等管理任务的实用程序增强了 PostgreSQL 的内置复制功能。
整个repmgr文档 中使用了以下术语
repmgr是一套开源工具,用于管理 PostgreSQL 服务器集群内的复制和故障转移。它支持并增强 PostgreSQL 的内置流复制,该复制提供单个读/写主服务器和一个或多个包含主服务器数据库的近实时副本的只读备用服务器。它提供了两个主要工具:
用于执行管理任务的命令行工具,例如:
主动监视复制集群中的服务器并执行以下任务的守护程序:
为了有效地管理复制集群,repmgr需要将集群中服务器的信息存储在专用的数据库schema中。此架构由repmgr扩展自动创建,该扩展在初始化repmgr管理的集群 ( repmgr primary register
)的第一步中安装,并包含以下对象:
table
repmgr.events
:记录关注的事件repmgr.nodes
:复制集群中每个服务器的连接和状态信息repmgr.monitoring_history
: repmgrd写入的历史备用监控信息view
repmgr.nodes
,另外显示服务器上游节点的名称repmgr元数据模式可以存储在现有数据库或其自己的专用数据库中。请注意,repmgr 元数据模式不能保存在不属于repmgr管理的复制集群的数据库服务器上。
数据库用户必须可供repmgr访问该数据库并修改的权限。该用户不需要是超级用户,但是某些操作(例如repmgr扩展的初始安装)将需要超级用户连接(可以在需要时使用命令行选项指定 --superuser
)。
PostgreSQL:13.12
repmgr 5.3.3
CentOS Linux release 7.2.1511 (Core)
repmgr可以从操作系统的打包系统提供的二进制包或源代码安装。一般来说,我们建议使用二进制包,除非您的操作系统不可用。
repmgr 是在 Linux 和 OS X 上开发和测试的,但应该可以在 PostgreSQL 本身支持的任何类 UNIX 系统上运行。不支持 Microsoft Windows。
复制集群中的所有服务器必须运行相同的 PostgreSQL 主要版本,我们建议它们也运行相同的次要版本。
不需要repmgr的 专用系统用户;由于许多repmgr和 repmgrd操作需要直接访问 PostgreSQL 数据目录,因此这些命令应由postgres
用户执行。
repmgr必须安装在复制集群中的每台服务器上。如果从软件包安装 repmgr,软件包版本必须与 PostgreSQL 版本匹配。如果从源代码安装,repmgr必须针对相同的主要版本进行编译。
下表概述了repmgr版本支持的 PostgreSQL 版本。
repmgr 版本 | Supported? 是否维护 | Latest release 最新版本 | Supported PostgreSQL versions 支持的PostgreSQL版本 | Notes 注意 |
---|---|---|---|---|
repmgr 5.4 | (dev) | 5.4.1 (2023-07-04) | 9.4, 9.5, 9.6, 10, 11, 12, 13, 15 | |
repmgr 5.3 | YES | 5.4.1 (2023-07-04) | 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15 | PostgreSQL 15 supported from repmgr 5.3.3 |
repmgr 5.2 | NO | 5.2.1 (2020-12-07) | 9.4, 9.5, 9.6, 10, 11, 12, 13 | |
repmgr 5.1 | NO | 5.1.0 (2020-04-13) | 9.3, 9.4, 9.5, 9.6, 10, 11, 12 | |
repmgr 5.0 | NO | 5.0 (2019-10-15) | 9.3, 9.4, 9.5, 9.6, 10, 11, 12 | |
repmgr 4.x | NO | 4.4 (2019-06-27) | 9.3, 9.4, 9.5, 9.6, 10, 11 | |
repmgr 3.x | NO | 3.3.2 (2017-05-30) | 9.3, 9.4, 9.5, 9.6 | |
repmgr 2.x | NO | 2.0.3 (2015-04-16) | 9.0, 9.1, 9.2, 9.3, 9.4 |
这个命令的含义是下载一个文件然后执行 这个需要外网 ,生产数据库服务器一般没有外网 ,
- curl https://dl.enterprisedb.com/default/release/get/13/rpm | sudo bash
- yum list repmgr13
-
- yum install repmgr13 -y
如果服务器没有外网 只能使用源码安装
下载源码的地址 下面两个地址都可以 一个是官网上的下载地址,一个是gtihub的下载地址
wget https://github.com/EnterpriseDB/repmgr/archive/refs/tags/v5.3.3.tar.gz
// 我使用的这个
wget https://www.repmgr.org/download/repmgr-5.3.3.tar.gz
安装依赖
- yum check-update
- yum groupinstall "Development Tools" -y
- yum install -y yum-utils openjade docbook-dtds docbook-style-dsssl docbook-style-xsl
- yum-builddep postgresql96// 执行不了 没有postgresql96yum源
-
- 用以下命令替代
- yum install -y cmake make gcc zlib gcc-c++ perl readline readline-devel zlib // 自己安装pg13安装的依赖
-
- yum -y install yum-builddep flex libselinux-devel libxml2-devel libxslt-devel openssl-devel pam-devel readline-devel // 博客上的
下载源码包
wget https://www.repmgr.org/download/repmgr-5.3.3.tar.gz
解压安装repmgr(主备库都安装)
tar -zxvf repmgr-5.3.3.tar.gz
使用postgres用户安装
chown -R postgres:postgres /home/packet/repmgr-5.3.3
su - postgres
cd /home/packet/repmgr-5.3.3
./configure
make install
输出一下内容说明二进制命令安装到了目录'/usr/local/pgsql/bin/下
/bin/install -c -m 755 repmgr repmgrd '/usr/local/pgsql/bin/'
进入到目录中查看/usr/local/pgsql/bin/ 多了以下两个命令
可以通过repmgr --help 验证安装是否成功
参考我的博客只部署主库即可 【PG】PostgreSQL13主从流复制部署(详细可用)-CSDN博客
- // 创建用户 需要超级用户权限
- create user repmgr with superuser password 'repmgr' connection limit 10;
-
- // 创建元数据库
- create database repmgr owner repmgr;
-
- // repmgr会创建repmgr schema 来报错repmgr的元数据表,函数,视图等,建议设置用户repmgr的搜索路径如下
- ALTER USER repmgr SET search_path TO repmgr, "$user", public;
- # 允许用户 repmgr 通过local,127.0.0.1,10.79.21.网段连接到replication
- local replication repmgr trust
- host replication repmgr 127.0.0.1/32 trust
- host replication repmgr 10.79.21.0/24 trust
-
- # 允许用户 repmgr 通过local,127.0.0.1,10.79.21. 连接到repmgr schema
- local repmgr repmgr trust
- host repmgr repmgr 127.0.0.1/32 trust
- host repmgr repmgr 10.79.21.0/24 trust
如果之前postgres 没有密码 ,需要先设置一个密码 ,否则下面ssh拷贝公钥时会提示输入密码
- 使用postgres用户 ,在两台服务器上
-
- 在node1上
- ssh-keygen -t rsa
- ssh-copy-id postgres@10.79.21.29
- ssh postgres@10.79.21.29 date
-
- 在node2上
- ssh-keygen -t rsa
- ssh-copy-id postgres@10.79.21.30
- ssh postgres@10.79.21.30 date
-
- // 数据库免密登录 IP:port:schema?:user:passwd
- vim .pgpass
- 10.79.21.30:5432:repmgr:repmgr:repmgr
- 10.79.21.29:5432:repmgr:repmgr:repmgr
-
-
- 修改权限,只允许postgres用户读写
- chmod 600 .pgpass
repmgr.conf
不应存储在 PostgreSQL 数据目录中,因为在设置或重新初始化 PostgreSQL 服务器时它可能会被覆盖
vim repmgr.conf
- node_id=1
- node_name='node1'
- conninfo='host=10.79.21.30 port=5432 user=repmgr dbname=repmgr connect_timeout=2'
- data_directory='/home/storage/pgsql/data'
要使repmgr支持复制集群,主节点必须向repmgr注册。这将安装repmgr
扩展和元数据对象,并为主服务器添加元数据记录
repmgr -f /etc/repmgr.conf primary register
- $repmgr -f /etc/repmgr.conf primary register
- INFO: connecting to primary database...
- NOTICE: attempting to install extension "repmgr"
- NOTICE: "repmgr" extension successfully installed
- NOTICE: primary node record (ID: 1) registered
验证集群的状态,如下所示:
repmgr -f /etc/repmgr.conf cluster show
- $repmgr -f /etc/repmgr.conf cluster show
- ID | Name | Role | Status | Upstream | Location | Priority | Timeline | Connection string
- ----+-------+---------+-----------+----------+----------+----------+----------+------------------------------------------------------------------------
- 1 | node1 | primary | * running | | default | 100 | 1 | host=10.79.21.30 port=5432 user=repmgr dbname=repmgr connect_timeout=2
元数据表中的记录:
- repmgr=# select * from nodes;
- -[ RECORD 1 ]----+-----------------------------------------------------------------------
- node_id | 1
- upstream_node_id |
- active | t
- node_name | node1
- type | primary
- location | default
- priority | 100
- conninfo | host=10.79.21.30 port=5432 user=repmgr dbname=repmgr connect_timeout=2
- repluser | repmgr
- slot_name |
- config_file | /etc/repmgr.conf
在从节点上编辑配置文件 vim repmgr.conf
- node_id=2
- node_name='node2'
- conninfo='host=10.79.21.29 port=5432 user=repmgr dbname=repmgr connect_timeout=2'
- data_directory='/home/storage/pgsql/data'
使用参数--dry-run 检查是否可以克隆从库
repmgr -h 10.79.21.30 -U repmgr -d repmgr -f /etc/repmgr.conf standby clone --dry-run
- $repmgr -h 10.79.21.30 -U repmgr -d repmgr -f /etc/repmgr.conf standby clone --dry-run
- NOTICE: destination directory "/home/storage/pgsql/data" provided
- INFO: connecting to source node
- DETAIL: connection string is: host=10.79.21.30 user=repmgr dbname=repmgr
- DETAIL: current installation size is 116 MB
- INFO: "repmgr" extension is installed in database "repmgr"
- INFO: replication slot usage not requested; no replication slot will be set up for this standby
- INFO: parameter "max_wal_senders" set to 10
- NOTICE: checking for available walsenders on the source node (2 required)
- INFO: sufficient walsenders available on the source node
- DETAIL: 2 required, 10 available
- NOTICE: checking replication connections can be made to the source server (2 required)
- INFO: required number of replication connections could be made to the source server
- DETAIL: 2 replication connections required
- WARNING: data checksums are not enabled and "wal_log_hints" is "off"
- DETAIL: pg_rewind requires "wal_log_hints" to be enabled
- NOTICE: standby will attach to upstream node 1
- HINT: consider using the -c/--fast-checkpoint option
- INFO: would execute:
- pg_basebackup -l "repmgr base backup" -D /home/storage/pgsql/data -h 10.79.21.30 -p 5432 -U repmgr -X stream
- INFO: all prerequisites for "standby clone" are met
可以看到个warning ,将参数 wal_log_hints 设置为 on ,再次检查
如果检查没有问题 ,就可以进行克隆
repmgr -h 10.79.21.30 -U repmgr -d repmgr -f /etc/repmgr.conf standby clone
- $repmgr -h 10.79.21.30 -U repmgr -d repmgr -f /etc/repmgr.conf standby clone
- NOTICE: destination directory "/home/storage/pgsql/data" provided
- INFO: connecting to source node
- DETAIL: connection string is: host=10.79.21.30 user=repmgr dbname=repmgr
- DETAIL: current installation size is 116 MB
- INFO: replication slot usage not requested; no replication slot will be set up for this standby
- NOTICE: checking for available walsenders on the source node (2 required)
- NOTICE: checking replication connections can be made to the source server (2 required)
- INFO: checking and correcting permissions on existing directory "/home/storage/pgsql/data"
- NOTICE: starting backup (using pg_basebackup)...
- HINT: this may take some time; consider using the -c/--fast-checkpoint option
- INFO: executing:
- pg_basebackup -l "repmgr base backup" -D /home/storage/pgsql/data -h 10.79.21.30 -p 5432 -U repmgr -X stream
- NOTICE: standby clone (using pg_basebackup) complete
- NOTICE: you can now start your PostgreSQL server
- HINT: for example: pg_ctl -D /home/storage/pgsql/data start
- HINT: after starting the server, you need to register this standby with "repmgr standby register"
在主库上查看
SELECT * FROM pg_stat_replication;
可以看到
standy 上查看
SELECT * FROM pg_stat_wal_receiver;
使用以下命令注册从节点
repmgr -f /etc/repmgr.conf standby register
- $repmgr -f /etc/repmgr.conf standby register
- INFO: connecting to local node "node2" (ID: 2)
- INFO: connecting to primary database
- WARNING: --upstream-node-id not supplied, assuming upstream node is primary (node ID: 1)
- INFO: standby registration complete
- NOTICE: standby node "node2" (ID: 2) successfully registered
验证注册成功 repmgr -f /etc/repmgr.conf cluster show
- $repmgr -f /etc/repmgr.conf cluster show
- ID | Name | Role | Status | Upstream | Location | Priority | Timeline | Connection string
- ----+-------+---------+-----------+----------+----------+----------+----------+------------------------------------------------------------------------
- 1 | node1 | primary | * running | | default | 100 | 1 | host=10.79.21.30 port=5432 user=repmgr dbname=repmgr connect_timeout=2
- 2 | node2 | standby | running | node1 | default | 100 | 1 | host=10.79.21.29 port=5432 user=repmgr dbname=repmgr connect_timeout=2
repmgr - Replication Manager for PostgreSQL clusters
https://www.repmgr.org/docs/5.3/index.html
GitHub - EnterpriseDB/repmgr: A lightweight replication manager for PostgreSQL (Postgres)
参考
进阶数据库系列(十八):PostgreSQL 基于 repmgr 高可用架构实践_mingongge的博客-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。