教学文章
Technology Exchange
热门课程
400电话

免费咨询热线
400-090-9964

教学文章

PolarDB for PostgreSQL 备份并恢复一个 Replica 节点

时间:2023-08-28 来源:

PolarDB for PostgreSQL 备份并恢复一个 Replica 节点

基础备份可用于搭建一个新的 Replica(RO)节点。如前文所述,一个正在运行中的 PolarDB for PostgreSQL 实例的数据文件分布在各计算节点的本地存储和存储节点的共享存储中。下面将说明如何使用 polar_basebackup 将实例的数据文件备份到一个本地磁盘上,并从这个备份上启动一个 Replica 节点。

PFS 文件系统挂载

首先,在将要部署 Replica 节点的机器上启动 PFSD 守护进程,挂载到正在运行中的共享存储的 PFS 文件系统上。后续启动的 Replica 节点将使用这个守护进程来访问共享存储。

sudo /usr/local/polarstore/pfsd/bin/start_pfsd.sh -p nvme1n1 -w 2

备份数据到本地存储

运行如下命令,将实例 Primary 节点的本地数据和共享数据备份到用于部署 Replica 节点的本地存储路径 /home/postgres/replica1 下:

polar_basebackup \

--host=[Primary节点所在IP] \

--port=[Primary节点所在端口号] \

-D /home/postgres/replica1 \

-X stream --progress --write-recovery-conf -v

将看到如下输出:

polar_basebackup: initiating base backup, waiting for checkpoint to complete

polar_basebackup: checkpoint completed

polar_basebackup: write-ahead log start point: 0/16ADD60 on timeline 1

polar_basebackup: starting background WAL receiver

polar_basebackup: created temporary replication slot "pg_basebackup_359"

851371/851371 kB (100%), 2/2 tablespaces

polar_basebackup: write-ahead log end point: 0/16ADE30

polar_basebackup: waiting for background process to finish streaming ...

polar_basebackup: base backup completed

备份完成后,可以以这个备份目录作为本地数据目录,启动一个新的 Replica 节点。由于本地数据目录中不需要共享存储上已有的共享数据文件,所以删除掉本地数据目录中的 polar_shared_data/ 目录:

rm -rf ~/replica1/polar_shared_data

重新配置 Replica 节点

重新编辑 Replica 节点的配置文件 ~/replica1/postgresql.conf:

-polar_hostid=1

+polar_hostid=2

-synchronous_standby_names='replica1'

重新编辑 Replica 节点的复制配置文件 ~/replica1/recovery.conf:

polar_replica='on'

recovery_target_timeline='latest'

primary_slot_name='replica1'

primary_conninfo='host=[Primary节点所在IP] port=5432 user=postgres dbname=postgres application_name=replica1'

Replica 节点启动

启动 Replica 节点:

pg_ctl -D $HOME/replica1 start

Replica 节点验证

在 Primary 节点上执行建表并插入数据,在 Replica 节点上可以查到 Primary 节点插入的数据:

$ psql -q \

-h [Primary节点所在IP] \

-p 5432 \

-d postgres \

-c "CREATE TABLE t (t1 INT PRIMARY KEY, t2 INT); INSERT INTO t VALUES (1, 1),(2, 3),(3, 3);"

$ psql -q \

-h [Replica节点所在IP] \

-p 5432 \

-d postgres \

-c "SELECT * FROM t;"

t1 | t2

----+----

1 | 1

2 | 3

3 | 3

(3 rows)

版权所有@北京神脑资讯技术有限公司(CUUG,中国UNIX用户协会) Copyright ALL Rights Reserved 京ICP备11008061号-1

CUUG旗下网站:www.cuug.com.cn www.cuug.com oracle.cuug.com bbs.cuug.com www.cuug.net

电话:010-59426307 010-59426319 邮政编码:100089

地址:北京市海淀区北清路164号28-38号院