环境信息
系统版本: windows 10
版本:PostgreSQL14
主机IP: 192.168.10.101
备库IP:192.168.10.102
主库操作
- 设置pg_hba.conf添加以下:
host all all 0.0.0.0/0 md5
host replication postgres 192.168.10.102/32 md5 #这句话的意思允许从数据库连接主数据库去拖wal日志数据
- 设置主库的postgresql.conf
wal_level = hot_standby #主从设置为热血模式,流复制必选
max_wal_senders = 3 #流复制允许连接进程
archive_mode = on
备注:仅列出主要参数,其它参数根据实际情况设置。
- 重载配置文件
pg_ctl reload -D $PGDATA #$PGDATA为postgre下data文件地址
备库操作
- 使用pg_basebackup 生产备库
pg_basebackup -h 192.168.10.101 -U postgres -F p -P -R -Xs -v -D $PGDATA
备注:这时表空间目录,$PGDATA 目录已经复制过来了,这里使用了 -X 参数,在备份完成之后,会到主库上收集 pg_basebackup 执行期间产生的 WAL 日志,在 9.2 版本之后支持 -Xs 即stream 形式,这种模式不需要收集主库的 WAL 文件,而能以 stream 复制方式直接追赶主库。
- 设置从库 postgresql.conf
primary_conninfo = 'host=192.168.10.101 port=5432 user=postgres password=123456'
recovery_target_timeline = latest # 默认
hot_standby_feedback = on #可选,查询冲突时向主反馈
max_connections = 1000 # 大于等于主节点,正式环境应当重新考虑此值的大小
hot_standby = on #在备份的同时允许查询
max_standby_streaming_delay = 30s #可选,流复制最大延迟
wal_receiver_status_interval = 10s
hot_standby_feedback = on
3.编辑standby.signal文件
standby_mode = 'on'
- 重新启动从节点
- 验证主从
select pg_is_in_recovery(); #f代表主库 t代表备库
select client_addr,sync_state from pg_stat_replication #可以查询主库下面有多少个备库
主备切换
- pg12开始新增了一个pg_promote()函数,让我们可以通过SQL命令激活备库。
pg_promote()语法:
pg_promote(wait boolean DEFAULT true, wait_seconds integer DEFAULT 60)
两个参数:
wait: 表示是否等待备库的 promotion 完成或者 wait_seconds 秒之后返回成功,默认值为 true。
wait_seconds: 等待时间,单位秒,默认 60
- 切换实例
- 主库操作:关闭主库,模拟主库故障:
systemctl stop postgresql
- 备库操作:激活备库
select pg_promote(true,60);
- 验证
select pg_is_in_recovery(); #f代表主库 t代表备库
- 原主库修复后,原备库降为备库
- 新增standby.signal文件
standby_mode = 'on'
- 数据同步
- 先删除postgres下data目录
pg_basebackup -h 192.168.10.101 -U postgres -F p -P -R -D "C:\Program Files\PostgreSQL\14\data"
- 启动主库
systemctl start postgresql