怎么在PostgreSQL中将流复制异步转为同步

  介绍

这期内容当中小编将会给大家带来有关怎么在PostgreSQL中将流复制异步转为同步,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

非常重要的synchronous_commit参数

流复制的同步方式,有主库配置文件PostgreSQL。相依,中的synchronous_commit控制着,所以理解该参数的配置十分重要。

单实例环境

参数值说明优点缺点或当地当事务提交时,细胞膜先写入细胞膜缓冲再写到细胞膜文件(落盘)中。设置为在表示提交事务时需要等待本地犯下最终落盘后,才向客户端返回成功。非常安全数据库性能有损耗掉当事务提交时,不需要等待细胞膜先写入细胞膜缓冲再写到细胞膜文件(落盘)中。提升数据库性能数据库宕机是最新提交的少量事务可能丢失

流复制环境

参数值说明优点缺点remote_write当主库提交事务后,需等待备库接收主库发送的细胞膜日志流并写入WAL缓冲,就向客户端返回成功只有主库的细胞膜是落盘的事务响应时间快在当主库提交事务后,需等待备库接收主库发送的细胞膜日志流并写入细胞膜缓冲以及写入细胞膜文件,就向客户端返回成功,主备库细胞膜均落盘,有两份持有化文件保护事务响应时间相对较慢remote_apply当主库提交事务后,需等待备库接收主库发送的细胞膜日志流并写入细胞膜缓冲以及写入细胞膜文件,同时备库应用之后,就向客户端返回成功数据保护最好影响事务性能

查看同步情况

在主库执行以下SQL, sync_state字段为异步表示异步同步方式

postgres=#, select  usename ,, application_name ,, client_addr, sync_state 得到pg_stat_replication;   |,usename  application_name  |, client_addr  |, sync_state    - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   |,repuser  walreceiver  |, 192.168.56.102  |异步   (1,行)

配置同步复制

主库配置postgresql。参看文件

(postgres@pg01 数据),美元vi  postgresql.conf    synchronous_commit =,   时间=synchronous_standby_names  & # 39; walreceiver& # 39;

synchronous_commit:开篇提到的那个重要参数!

synchronous_standby_names:这里的名字填写,刚刚查询到的application_name。

重启主库服务

[root@pg01  PG_12_201909212] #, service  postgresql-12 重新启动   Stopping  postgresql-12 服务:,,,,【,OK 】   Starting  postgresql-12 服务:,,,,(,OK )

再次查看主库字典

postgres=#, select  usename ,, application_name ,, client_addr, sync_state 得到pg_stat_replication;   |,usename  application_name  |, client_addr  |, sync_state    - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   ,repuser  |, walreceiver  |, 192.168.56.102  |,同步

数据保护测试

关闭备库。模拟备库宕机无法正常接收细胞膜

[root@pg02  ~] #, service  postgresql-12 停止   Stopping  postgresql-12 服务:,,,,(,OK )

主库尝试进行DML操作

盾=#,insert  into  t1  select  *,得到t1;   Cancel  request 发送   警告:,canceling  wait  for  synchronous  replication  due 用user 请求   细节:,,transaction  has  already  committed ,, but  might  not  have  been  replicated 用,备用。   INSERT  0, 8

由于备库已关闭,无法接受从主库传来的细胞膜,根据同步规则,主库需要一直等待主库接收到细胞膜的消息。

手动进行了取消,数据库报错。说明在等待备库reguest相应的。

所以,同步同步模式虽然可以很好的保护数据,但同时也带来了性能的影响,需慎重

<强>补充:PostgreSQL流复制数据同步检查

<>强如何分辨主、备

看进程

主库——walwriter

[root@pg01  PG_12_201909212] #, ps  ef |, grep 细胞膜   postgres  21157, 21151, 0, 15:57  ?,, 00:00:00  postgres:, walwriter ,,,,,,,,   postgres  21168, 21151, 0, 15:57  ?,, 00:00:00  postgres:, walsender  repuser  192.168.56.102 (38473), streaming  0/2A0001C0

备库——walreceiver

怎么在PostgreSQL中将流复制异步转为同步