PG14 主从流复制(异步)

  1. 安装主库
  2. 安装从库,然后停止服务,删除从库的数据文件夹下面的所有文件,默认为安装目录下的 data 文件夹。
 --linux系统下注意data目录权限
 chown -R postgres:postgres /home/postgresql
 chmod 750 -R /home/postgresql
  1. 修改主库的配置文件postgresql.conf
listen_addresses = '*' #监听所有连接
wal_level = replica # 设置流复制模式至少设置为replica
max_wal_senders= 10 # 最大WAL发送进程数,需大于等于从库个数且比max_connections小。 
max_connections = 1000    #最大连接数,从库的max_connections必须要大于主库的
archive_mode = on #开启归档模式,配合archive_command参数将WAL发送到归档目录
archive_command = 'copy "%p" "D:\\Pg_Backup\\pg_wal\\%f"'
#其他设置
shared_buffers = 4GB
synchronous_commit = local #提交事务时需等待相应WAL数据写入本地WAL日志文件
max_wal_size = 10GB
min_wal_size = 100MB
archive_timeout = 60	
max_replication_slots = 10 #复制槽的最大个数
wal_keep_size = 800	#设置保留的 WAL 日志大小,以 MB 为单位。
max_slot_wal_keep_size=8000 #允许复制插槽保留的WAL的最大磁盘空间
hot_standby = on   #在备份的同时允许查询
effective_cache_size = 12GB
shared_preload_libraries = 'pg_stat_statements' #扩展 SQL语句的统计信息,例如执行时间和频率

4. 主库创建用户,用于复制(非必须,也可以用已有用户)

CREATE ROLE replica login replication encrypted password '123';

5. 修改主库pg_hba.conf 允许访问

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    replication     replica            192.168.10.222/24        md5
或者
host    replication     all             0.0.0.0/0            	password

6. 主库重启

7. 从库主机上执行一下命令(基础备份数据),同步后data目录会和主库一致

pg_basebackup -D "D:\Program Files\PostgreSQL\14\data" -h 172.28.117.184 -p 5432 -U postgres -X stream -P -R -v
-h 指定连接的数据库的主机名或IP地址,这里就是主库的ip
-U 指定连接的用户名,此处是我们刚才创建的专门负责流复制的repl用户
-F 指定生成备份的数据格式,支持p(plain原样输出)或者t(tar格式输出)
-X 表示备份开始后,启动另一个流复制连接从主库接收WAL日志,有 f(fetch)和s (stream)两种方式,建议使用s方式
-P 表示显示数据文件、表空间传输的近似百分比 允许在备份过程中实时的打印备份的进度
-v 表示启用verbose模式,命令执行过程中会打印各阶段日志,建议启用
-R 表示会在备份结束后自动生成recovery.conf文件,这样也就避免了手动创建(pg12之后已经没有这个文件,recovery.conf文件里的内容已经填充到了postgresql.auto.conf)
-D 指定把备份写到哪个目录,这里尤其要注意一点就是做基础备份之前从库的数据目录(/data/postgresql/data)目录需要手动清空
-l 表示指定个备份的标识,运行命令后可以看到进度提示

8. 从库修改同步后data目录下的standby.signal 文件,增加standby_mode = on,声明是从库

9. 从库修改postgresql.conf

max_standby_streaming_delay = 30s #此参数定义了备库当遇到复制冲突,WAL 应用中的最大允许延迟,如果冲突的查询在max_standby_streaming_delay指定的时间之后仍然在运行,PostgreSQL将强行取消查询
wal_receiver_status_interval = 10s #多久向主报告一次从的状态,当然从每次数据复制都      会向主报告状态,这里只是设置最长的间隔时间,默认值为 10 秒,备用服务器设置
hot_standby_feedback = on #可选,查询冲突时向主反馈,减少复制冲突

10,启动从库

11,主库查看复制状态

select * from pg_stat_replication;

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部