流复制-物理复制

流复制

1、物理复制,基于WAL日志的实例级复制

2、其核心原理是主库将WAL日志流发送给备库,备库接收到WAL日志后进行重做

3、只能复制整个PostgreSQL实例,能对DDL操作进行复制

4、主库可读可写,备库只允许查询

5、大版本必须一致

6、根据同步方式分为异步流复制和同步流复制

相关配置

wal_level = replica

  • wal_level 控制wal日志的输出级别,有minial、replica、logical三种

  • minial 记录的wal日志最少,除了记录异常关闭需要恢复时的wal信息外,其它操作都不记录

  • replica 会记录支持wal归档、复制和备库中启用只读查询等操作所需要的wal信息

  • logical 记录的wal日志最多,包含了逻辑复制所需的wal信息

  • 开启流复制至少需要replica,replica也是默认模式

  • 重启生效

archive_mode = on

  • off 表示不开启归档

  • on 表示启用归档并需要配置archive_command参数,将wal日志归

  • always 正常情况下和on一样,在存档恢复或待机模式下也被启用

  • 重启生效

archive_command 设置归档命令

  • 本机归档 archive_command = 'cp %p /data/pgsql/13/archive_wals/%f' 

  • 远程归档 archive_command = 'scp %p postgres@192.168.1.100:/walbackup/%f'

  • %p 包含完整路径信息的wal日志文件名

  • %f 不包含完整路径信息的wal日志文件名

  • 无需重启,reload即可

max_worker_processes = 8

  • the maximum number of background processes ,默认值8

max_wal_senders 主库上最大wal sender进程数

  • 默认值10,不能超过max_connection

  • pg_basebackup备份时会消耗此进程

  • 通常一个流复制备库消耗主库一个wal sender进程

host_standby = on

  • 开启后备库支持只读SQL

  • 12之后此值默认为on

wal_keep_segments = 512

  • 主库保留wal数量,异步同步

  • 13中无此配置项

synchronous_commit

  • on:表示本地 wal fsync,同步standby wal fsync,即两份持久化的wal日志

  • remote_apply:表示本地wal fsync,同步standby wal fsync并且应用完成,延迟最高

  • remote_write:表示本地WAL fsync,同步standby WAL 异步write完成。一份持久化,备库的WAL可能还在OS CACHE中

  • local:表示本地WAL fsync

  • off:表示本地WAL写到walbuffer中即返回客户端事务提交成功的ACK,为异步提交

异步流复制

 

指主库上提交事务时不需要等待备库接收WAL日志并写入到备库WAL日志文件时返回成功,

对于12及以上,recovery.conf己经取消,此文件中的参数合并到 postgresql.conf,

若 recovery.conf 存在,数据库无法启动

新增 recovery.signal 标识文件,表示数据库处于 recovery 模式

新增加 standby.signal 标识文件,表示数据库处于 standby 模式

一、基础环境,两台机器安装postgresql13-server软件,并初始化

二、主节点配置

1、postgresql.conf

wal_level = replica

archive_mode = on

archive_command = 'cp %p /data/pgsql/13/archive_wals/%f'

 

max_worker_processes = 16

max_wal_senders = 10

host_standby = on

synchronous_commit = on

2、创建同步用户

create user repuser with login replication password 'repuser';

3、pg_hba.conf  添加

host    replication     repuser 192.168.17.130/32        md5

三、备节点配置

1、创建~/.pgpass

192.168.17.120:5432:replication:repuser:repuser

chmod 0600 ~/.pgpass

2、拷贝数据文件,使用pg_basebackup命令

/usr/pgsql-13/bin/pg_basebackup -R -D /var/lib/pgsql/13/data -Fp -Xs -v -P -h 192.168.17.120 -p 5432 -U repuser

  • -D, --pgdata=DIRECTORY 指定备份写到那个目录

  • -F, --format=p|t  指定输出的格式p 为plain ,t tar压缩文件

  • -r, --max-rate=RATE maximum transfer rate to transfer data directory(in kB/s, or use suffix "k" or "M")

  • -R, --write-recovery-conf 在备份时生成 standby.signal 文件, postgresql.auto.conf 文件中添加 primary_conninfo 参数信息

  • -S, --slot=SLOTNAME replication slot to use

  • -T, --tablespace-mapping=OLDDIR=NEWDIR relocate tablespace in OLDDIR to NEWDIR

  • -x, --xlog  包含恢复是需要的WAL

  • -X, --xlog-method=fetch|stream include required WAL files with specified method

  • --xlogdir=XLOGDIR location for the transaction log directory

  • -z, --gzip  与tar输出模式配合使用,表明输出的tar备份经过gzip压缩

  • -Z, --compress=0-9  压缩级别,数字越大越耗cpu

3、启动备节点

systemctl start postgresql13-server

四、查询状态

1、查询状态(主库)

select state,sync_state from pg_stat_replication;

streaming   async 

  • async代表异步复制

  • sync  代表同步复制

2、主备库查询

select * from pg_is_in_recovery();

t是备库,f是主库

同步流复制

在异步复制基础上操作

一、配置主节点

1、postgresql.conf

synchronous_standby_names = 'pgslave001'

2、重新加载配置文件

pg_ctl reload

二、配置备节点

1、postgresql.conf

primary_conninfo = 'host=192.168.17.120 port=5432 user=repuser application_name=pgslave001'

2、重启库

systemctl restart postgresql13-server

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值