postresql同步流复制

目录

引言

异步流复制部署

同步流复制部署

同步流复制应用

主库参数配置

 备注


引言

1. 同步流复制:在同步流复制中,事务提交时会等待WAL记录被复制到指定数量的同步备机上。这样可以确保在同步从库发生故障时,事务的持久性得到保证。同步流复制可以通过设置synchronous_standby_names,synchronous_commit参数来配置。可以使用优先级或仲裁方式来选择同步备机。同步流复制会增加事务的响应时间和并发争用,因此需要谨慎使用以确保应用程序的性能。

2. 异步流复制:在异步流复制中,事务提交后,不需要等待WAL记录被复制到备机上。这样可以提高小事务的吞吐量,但也增加了数据丢失的风险。异步流复制适用于不需要强一致性保证的场景,如事件日志记录。

同步流复制和异步流复制的选择取决于应用程序对事务持久性和性能的要求。同步流复制提供了强一致性保证,但会增加事务的响应时间和并发争用。异步流复制提供了更高的吞吐量,但可能会导致数据丢失。

异步流复制部署

http://t.csdn.cn/mbgIB

同步流复制部署

同步复制的配置主要是在主库上配置参数 “synchronous_standby_names” ,该参数指定
多个Standby的名称        

影响同步复制的还有一个参数“synchronous_commit”,该参数可以取的值有以下几个

·remote_apply:WAL日志被传到备库并被apply,事务commit才返回。
·on:WAL日志被传到备库并被持久化(不必等其被apply),事务commit才返回。
·remote_write:WAL日志被传到备库的内存中(不必等其被持久化),事务commit才
返回。
·local:WAL日志被本地持久化后(不用管远程)事务commit就可以返回。
·off:不必等WAL日志被本地持久化,也不管是否传到远程,事务commit都可以立即
返回。
由上面说明即可联想到同步复制,        的可选值为“on”“remote_apply”
“remote_write”。

同步流复制应用

生产中为了保证数据安装,现在我需要配置一个集群,当预先的同步从库宕机了,另外的从库能迅速升级为同步从库,而保证数据的正常写入,使其生产运行不受影响。 

IP地址        数据库级别端口号路径数据库名
10.0.0.200主库15432/home/postgres/pgdata/datapostgres
10.0.0.199潜在从库15432/home/postgres/standby1postgres
10.0.0.198从库15432/home/postgres/standby2postgrs

主库参数配置

在主库中打开监听和IP白名单

max_wal_senders = 10
wal_level =  replica  或者使用logcial

min_wal_size=800MB
hot_standby = off  默认情况下是“off”   在从库启动后还会再次做介绍

synchronous_standby_names = 'standby1,standby1'

synchronous_commit = on

这里的0.0.0.0/0  允许所有访问数据库

创建具有replication的用户

create  user r1 with replication;

修改完以上参数后需要重新启动主库;

分别在两个从库执行备份
10.0.0.198主机


pg_basebackup -h 10.0.0.200 -U r1 -F p -P -X stream -R -D standby2/ -p 15432

10.0.0.199主机

pg_basebackup -h 10.0.0.200 -U r1 -F p -P -X stream -R -D standby1/ -p 15432

- -h:指定要连接的服务器的主机名或IP地址。
- -U:指定连接使用的用户名。
- -Fp:指定备份的格式。在这种情况下,备份以纯文本格式存储。
- -P:指定在备份过程中显示进度信息。
- -X stream:指定备份的流式传输方法。
- -R:指定包括所有必需的WAL文件以进行一致性备份。
- -D:指定备份存储的目录。

分别修改两个从库的参数/home/postgres/standby1/postgresql.auto.conf  增加application_name = standby1

/home/postgres/standby2/postgresql.auto.conf  增加application_name = standby2

 分别启动从库

pg_ctl -D /home/postgres/standby1 start
pg_ctl -D /home/postgres/standby2 start 

此时在主库使用视图pg_stat_replication 可以查看到两个从库的状态

postgres=# select  *  from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 1551
usesysid         | 35849
usename          | r1
application_name | standby2
client_addr      | 10.0.0.198
client_hostname  | 
client_port      | 54230
backend_start    | 2023-07-16 03:36:05.049714+08
backend_xmin     | 
state            | streaming
sent_lsn         | 0/2F0001C0
write_lsn        | 0/2F0001C0
flush_lsn        | 0/2F0001C0
replay_lsn       | 0/2F0001C0
write_lag        | 00:00:00.020258
flush_lag        | 00:00:00.020275
replay_lag       | 00:00:00.020298
sync_priority    | 2
sync_state       | potential
reply_time       | 2023-07-15 15:41:08.319377+08
-[ RECORD 2 ]----+------------------------------
pid              | 1552
usesysid         | 35849
usename          | r1
application_name | standby1
client_addr      | 10.0.0.199
client_hostname  | 
client_port      | 39346
backend_start    | 2023-07-16 03:36:05.066217+08
backend_xmin     | 
state            | streaming
sent_lsn         | 0/2F0001C0
write_lsn        | 0/2F0001C0
flush_lsn        | 0/2F0001C0
replay_lsn       | 0/2F0001C0
write_lag        | 00:00:00.0201
flush_lag        | 00:00:00.020134
replay_lag       | 00:00:00.020135
sync_priority    | 1
sync_state       | sync
reply_time       | 2023-07-15 15:41:08.285412+08

此时主库中synchronous_standby_names的设置顺序原因standby2为潜在同步从库。

 模拟同步从库standby1宕机

pg_ctl -D /home/postgres/standby1 stop

此时主库上可以看到standby2升级为了同步从库,而不影响生产的正产运行

 备注

关于synchronous_standby_names的值设置方法可以指定任意的多个从库为同步从库,其余为潜在,也可以指定所有的从库都为同步,不设定潜在从库。

synchronous_standby_names=‘any1(standby1,standby2,standby)’

synchronous_standby_names=‘first2(standby1,standby2,standby)’

本文中设定的方式为

synchronous_standby_names=‘standby1,standby2’

等同于synchronous_standby_names=‘first1(standby1,standby2)’

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值