基于Postgre 14的主备复制和主备切换

环境信息

系统版本: windows 10
版本:PostgreSQL14
主机IP: 192.168.10.101
备库IP:192.168.10.102

主库操作

  1. 设置pg_hba.conf添加以下:
host				all				all				0.0.0.0/0				md5  
host 		replication 		postgres 		192.168.10.102/32 			md5   #这句话的意思允许从数据库连接主数据库去拖wal日志数据
  1. 设置主库的postgresql.conf
wal_level = hot_standby #主从设置为热血模式,流复制必选
max_wal_senders = 3 #流复制允许连接进程
archive_mode = on

备注:仅列出主要参数,其它参数根据实际情况设置。

  1. 重载配置文件
pg_ctl reload -D $PGDATA 				 #$PGDATA为postgre下data文件地址

备库操作

  1. 使用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 复制方式直接追赶主库。

  1. 设置从库 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'
  1. 重新启动从节点
  2. 验证主从
select pg_is_in_recovery();   #f代表主库 t代表备库
select client_addr,sync_state from pg_stat_replication  #可以查询主库下面有多少个备库

主备切换

  1. 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

  1. 切换实例
  • 主库操作:关闭主库,模拟主库故障:
systemctl stop postgresql
  • 备库操作:激活备库
select pg_promote(true,60);
  • 验证
select pg_is_in_recovery();   #f代表主库 t代表备库
  1. 原主库修复后,原备库降为备库
  • 新增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
上一篇:波士顿房价


下一篇:vue----router.go/push&location.href