on。
archive_command参数设置WAL归档命令,可以将WAL归档到本机目录,也可以归档到远程其他主机上,由于流复制的配置并不一定需要依赖配置归档命令,我们将归档命令暂且设置成伪归档命令/bin/date,后期如果需要打开归档直接配置归档命令即可。
max_wal_senders参数控制主库上的最大WAL发送进程数,通过pg_base_backup命令在主库上做基准备份时也会消耗WAL进程,此参数设置不能比max_connections参数值高,默认值为10,一个流复制备库通常只需要消耗流复制主库一个WAL发送进程。
wal_keep_segments参数设置主库pg_wal目录保留的最小WAL日志文件数,以便备库落后主库时可以通过主库保留的WAL进行追回,这个参数设置得越大,理论上备库在异常断开时追平主库的机率越大,如果归档存储空间充足,建议将此参数配置得大些,由于默认情况下每个WAL文件为16MB(编译时可通过--with-walsegsize参数设置WAL文件大小),因此pg_wal目录大概占用空间为wal_keep_segments参数值×16MB,这里为512×16MB=8GB,实际情况下pg_wal目录下的WAL文件数会比此参数的值稍大。
hot_standby参数控制数据库恢复过程中是否启用读操作,这个参数通常用在流复制备库,开启此参数后流复制备库支持只读SQL,但备库不支持写操作,主库上也设置此参数为on。
以上是流复制配置过程中主要的 postgresqI. conf参数,其他参数没有列出,主库和备库的 postgresqI. conf配置建议完全一致。
配置主库的pg_hba.conf文件,添加以下内容:
host replication repuser 192.168.231.131/24 md5
host replication repuser 192.168.231.132/24 md5
意思为允许repuser用户从外部地址通过密码连接任何数据库,配置两个信息是因为以后方便主备切换。
2.4 异步流复制
2.4.1拷贝数据文件形式部署流复制(方案一)
# chown -R pgsql:pgsql /var/run/postgresql/ --若开启postgresql数据库失败,报/var/run/postgresql/权限不足的情况下,请赋权
drwxr-xr-x. 2 pgsql pgsql 80 Aug 9 11:03 postgresql
$ pg ctl start
使用超级用户pgsql登录到数据库创建流复制用户 repuser,流复制用户需要有 REPLICATION 权限和 LOGIN 权限
[pgsql@pgsql ~]$ psql postgres
psql (10.9)
Type "help" for help.
postgres=# create user repuser replication login connection limit 5 encrypted password 'hufj123';
CREATE ROLE
postgres=# SELECT pg_start_backup('frans_bk1');
pg_start_backup
-----------------
0/2000028
(1 row)
pg_ start_ backup()函数在主库上发起一个在线备份
[pgsql@pgsql pg10]$ tar czvf pg_root.tar.gz pg_root --exclude=pg_root/pg_wal --主库将$PGDATA路径下的东西进行备份,将pg_wal排除在外是因为,备库会同步这些日志
[pgsql@pgsql pg10]$ scp pg_root.tar.gz pgsql@192.168.231.132:/database/pg10/ --将备份好的tar文件传到备库上去
备库操作:
[pgsql@pgstandby pg10]$ tar xvf pg_root.tar.gz --备库进行解压,在$PGDATA目录下
主库操作:
[pgsql@pgsql pg10]$ psql postgres
postgres=# SELECT pg_stop_backup(); --主库关闭备份,其实在备份好tar文件之后也可以进行关闭备份
NOTICE: pg_stop_backup complete, all required WAL segments have been archived
pg_stop_backup
----------------
0/2000130
(1 row)
[pgsql@pgstandby pg_root]$ cp /usr/pgsql-10/share/recovery.conf.sample $PGDATA/recovery.conf --备库拷贝一份recovery.conf文件
[pgsql@pgstandby pg_root]$ vi re