PostgreSQL流复制搭建
PG的流复制类似于Oracle中的DG,利用WAL(Redo)日志传输属于物理复制,优点在于延迟较小
搭建步骤
环境信息
主库为已初始化好数据库PG实例,备库为已安装好软件但未初始化的数据库
ip | 角色 |
---|---|
192.168.56.39 | 主库 |
192.168.56.40 | 备库 |
主库需配置的参数
- wal_level 应设置为replica, or logical
- max_wal_senders 默认是10 , 不要设置为小于2
- synchronous_standby_names 如果使用同步复制,这里需要设置standby的名字
- wal_keep_segments 设置主库上wal的保留个数,防止WAL日志被删除但还未传送到备库上
- synchronous_commit 同步复制选项
- 设置为on,代表需要等待备库应用完事务日志并且数据刷到磁盘中,主库才可以返回成功
- 设置为remote_apply ,代表需要等待备库应用完事务日志,主库即可返回成功
- 设置为remote_write,代表需要等待备库将事务日志写入到磁盘中,主库即可返回成功
- 设置为local,代表事务日志写入到主库磁盘中,主库即可返回成功 // 在同步复制中不能设置为local
- pg_hba.conf 文件中需要添加repliaction 的权限这里注意,必须要配置replication权限
1
host replication all 0.0.0.0/0 trust
这里all 是不包括replication权限的1
host all all 0.0.0.0/0 trust
- hot_standby 设置为ON,这样备库可以供查询使用
使用pg_basebackup搭建基础备份
备库上使用pg_basebackup拉取主库数据,作为基础备份,数据库拉取到/pgdata目录下1
2[postgres@pg40 ~]$ pg_basebackup -D /pgdata/ -h 192.168.56.39 -R -X s -P
335994/335994 kB (100%), 1/1 tablespace
编辑recovery.conf文件
我们使用了-R参数,在拉取的备份文件中会自动生成recovery文件
1 | standby_mode = 'on' |
启动数据库
1 | pg_ctl start -D /pgdata/ |
监控流复制
在主库上查看
1 | postgres=# select * from pg_stat_replication ; |
如何判断实例为主库还是备库
使用pg_controldata查看
1 | [postgres@pg40 ~]$ pg_controldata |grep cluster |