接上篇:
搭建RO
您可以通过以下两种方式来搭建RO node。
使用initdb来搭建RO
主要步骤是使用initdb初始化RO的本地存储目录,然后修改配置文件,启动实例。具体请参考只读节点部署。
备份RW的本地存储目录来搭建RO
这里使用备份RW的本地存储目录。下面通过polar_basebakcup来演示:
1. polar_basebackup --host=[主节点所在IP] --port=5432 -D /home/postgres/replica1 -X stream --progress --write-recovery-conf -v
完成polar_basebackup命令后,我们可以看到/home/postgres/replica1中存在一个polar_shared_data,搭建RO时不需要它,将它删除:
1. rm -rf /home/postgres/replica1/polar_shared_data
打开/home/postgres/replica1/postgresql.conf,修改如下配置项:
1.
2. port=5433
3. polar_hostid=2
4. polar_enable_shared_storage_mode=on
5. polar_disk_name='nvme0n1'
6. polar_datadir='/nvme0n1/shared_data/'
7. polar_vfs.localfs_mode=off
8. shared_preload_libraries='$libdir/polar_vfs,$libdir/polar_worker'
9. polar_storage_cluster_name='disk'
10. logging_collector=on
11. log_line_prefix='%p\t%r\t%u\t%m\t'
12. log_directory='pg_log'
13. listen_addresses='*'
14. max_connections=1000
15. synchronous_standby_names=''
打开/home/postgres/replica1/recovery.conf,使用以下配置项替换文件中的所有内容:
1. polar_replica='on'
2. recovery_target_timeline='latest'
3. primary_slot_name='replica1'
4. primary_conninfo='host=[主节点所在IP] port=5432 user=postgres dbname=postgres application_name=replica1'
最后,启动只读节点:
1. $HOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl start -D $HOME/replica1
检查只读节点能否正常运行:
1. $HOME/tmp_basedir_polardb_pg_1100_bld/bin/psql \
2. -p 5433 \
3. -d postgres \
4. -c 'select version();'
5. version
6. --------------------------------
7. PostgreSQL 11.9 (POLARDB 11.9)
8. (1 row)
搭建Standby
您可以使用全量备份集搭建Standby,这里推荐使用polar_basebackup进行搭建,下面介绍搭建流程。
使用polar_basebakcup对实例作全量备份
1. polar_basebackup --host=[主节点所在IP] --port=5432 -D /home/postgres/standby --polardata=/nvme0n2/shared_data/ --polar_storage_cluster_name=disk --polar_disk_name=nvme0n2 --polar_host_id=3 -X stream --progress --write-recovery-conf -v
提示
注意:这里是构建共享存储的Standby,首先您需要找一台机器部署好PolarDB及其文件系统PolarFS,且已经搭建好了共享存储nvme0n2,具体操作请参考准备块设备与搭建文件系统。
备份完成后如下图所示:
提示
如果您没有共享存储设备,则不需要指定--polar_storage_cluster_name,--polar_disk_name,--polar_host_id参数。
下面我们简单介绍下其他形态的PolarDB备份:
1. -- 单节点本地备份
2. polar_basebackup -D /polardb/data-standby -X stream --progress --write-recovery-conf -v
3. --共享存储本地备份
4. polar_basebackup -D /polardb/data-standby --polardata=/polardb/data-local -X stream --progress --write-recovery-conf -v
5. -- 共享存储写入pfs
6. polar_basebackup -D /polardb/data-standby --polardata=/nvme7n1/data --polar_storage_cluster_name=disk --polar_disk_name=nvme7n1 --polar_host_id=3
检查备份是否正常
查看本地目录:
查看共享存储目录:
修改postgresql.conf
将参数修改为如下所示:
1. polar_hostid = 3
2. polar_disk_name = 'nvme0n2'
3. polar_datadir = '/nvme0n2/shared_data'
4. polar_storage_cluster_name = 'disk'
5. synchronous_standby_names=''
在主库中创建复制槽
1. psql --host=[主节点所在IP] --port=5432 -d postgres -c 'SELECT * FROM pg_create_physical_replication_slot('standby1');'
2. slot_name | lsn
3. -----------+-----
4. standby1 |
5. (1 row)
修改Standby本地目录配置
在Standby的本地存储目录中recovery.conf文件中增加如下参数:
1. recovery_target_timeline = 'latest'
2. primary_slot_name = 'standby1'
启动Standby
1. $HOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl start -D $HOME/standby
验证Standby
1. psql --host=[master所在IP] --port=5432 -d postgres -c "create table t(t1 int primary key, t2 int);insert into t values (1, 1),(2, 3),(3, 3);"
2. CREATE TABLE
3. INSERT 0 3
1. psql --host=[standby所在IP] --port=5432 -d postgres -c ' select * from t;'
2. t1 | t2
3. ----+----
4. 1 | 1
5. 2 | 3
6. 3 | 3
7. (3 rows)
按时间点恢复
可以参考PostgreSQL按时间点恢复PITR。其原理如图所示,使用备份集加上归档日志,可以恢复出任意历史时刻的PolarDB实例: