• 售前

  • 售后

热门帖子
入门百科

PostgreSQL 流复制异步转同步的操作

[复制链接]
此人正在学习 显示全部楼层 发表于 2021-10-26 12:48:15 |阅读模式 打印 上一主题 下一主题
非常重要的synchronous_commit参数
流复制的同步方式,有主库设置文件postgresql.conf,中的synchronous_commit控制着。所以理解该参数的设置十分重要。
单实例环境

      参数值      阐明      长处      缺点                  on 或 local      当变乱提交时,WAL先写入WAL buffer 再写到 WAL文件(落盘)中。设置为on表现提交变乱时必要等待当地WAL终极落盘后,才向客户端返回成功。      非常安全      数据库性能有损耗              off      当变乱提交时,不必要等待WAL先写入WAL buffer 再写到 WAL文件(落盘)中。      提拔数据库性能      数据库宕机是最新提交的少量变乱可能丢失    流复制环境

      参数值      阐明      长处      缺点                  remote_write      当主库提交变乱后,需等待备库吸收主库发送的WAL日志流并写入WAL buffer, 就向客户端返回成功      只有主库的WAL是落盘的      变乱相应时间快              on      当主库提交变乱后,需等待备库吸收主库发送的WAL日志流并写入WAL buffer 以及写入WAL文件, 就向客户端返回成功      主、备库WAL均落盘,有两份持有化文件掩护      变乱相应时间相对较慢              remote_apply      当主库提交变乱后,需等待备库吸收主库发送的WAL日志流并写入WAL buffer 以及写入WAL文件, 同时备库apply之后, 就向客户端返回成功      数据掩护最好      影响变乱性能    查看同步环境

在主库实行以下SQL , sync_state字段为async表现异步同步方式
  1. postgres=# select usename , application_name , client_addr,sync_state from pg_stat_replication;
  2. usename | application_name | client_addr | sync_state
  3. ---------+------------------+----------------+------------
  4. repuser | walreceiver | 192.168.56.102 | async
  5. (1 row)
复制代码
设置同步复制

主库设置postgresql.conf文件
  1. [postgres@pg01 data]$ vi postgresql.conf
  2. synchronous_commit = on
  3. synchronous_standby_names = 'walreceiver'
复制代码
synchronous_commit : 开篇提到的谁人重要参数!
synchronous_standby_names: 这里的name填写,刚刚查询到的application_name。
重启主库服务
  1. [root@pg01 PG_12_201909212]# service postgresql-12 restart
  2. Stopping postgresql-12 service:    [ OK ]
  3. Starting postgresql-12 service:    [ OK ]
复制代码
再次查看主库字典
  1. postgres=# select usename , application_name , client_addr,sync_state from pg_stat_replication;
  2. usename | application_name | client_addr | sync_state
  3. ---------+------------------+----------------+------------
  4. repuser | walreceiver | 192.168.56.102 | sync
复制代码
数据掩护测试

关闭备库。模拟备库宕机无法正常吸收WAL
  1. [root@pg02 ~]# service postgresql-12 stop
  2. Stopping postgresql-12 service:    [ OK ]
复制代码
主库尝试进行DML利用
  1. dong=# insert into t1 select * from t1;
  2. Cancel request sent
  3. WARNING: canceling wait for synchronous replication due to user request
  4. DETAIL: The transaction has already committed locally, but might not have been replicated to the standby.
  5. INSERT 0 8
复制代码
由于备库已关闭,无法继承从主库传来的WAL,根据同步规则,主库必要不绝等待主库吸收到WAL的消息。
手动进行了cancel, 数据库报错。阐明在等待备库reguest相应。
所以,sync同步模式固然可以很好的掩护数据,但同时也带来了性能的影响,需慎重
补充:PostgreSQL 流复制数据同步查抄
怎样分辨主、备
看进程

主库 – walwriter
  1. [root@pg01 PG_12_201909212]# ps -ef| grep wal
  2. postgres 21157 21151 0 15:57 ?  00:00:00 postgres: walwriter         
  3. postgres 21168 21151 0 15:57 ?  00:00:00 postgres: walsender repuser 192.168.56.102(38473) streaming 0/2A0001C0
复制代码
备库 – walreceiver
  1. [root@pg02 ~]# ps -ef | grep wal
  2. postgres 13383 13369 0 14:08 ?  00:00:01 postgres: walreceiver streaming 0/2A0001C0   
复制代码
函数方法

一句话判断哪个是主库、哪个是备库,返回的值:
f 为主库
t 为备库
  1. postgres=# select pg_is_in_recovery();
  2. pg_is_in_recovery
  3. -------------------
  4. f
  5. (1 row)
复制代码
那我这个就是主库喽~
查抄流复制同步环境

先确定主库传到哪儿了
在确定备库吸收到哪儿了
末了确定备库应用到哪儿了
查抄主库传输

确定主库传到什么位置了
  1. postgres=# select pg_current_wal_lsn();
  2. pg_current_wal_lsn
  3. --------------------
  4. 0/2A0001C0
  5. (1 row)
复制代码
查抄备库规复

确定备库吸收到哪儿了
  1. postgres=# select pg_last_wal_receive_lsn();
  2. pg_last_wal_receive_lsn
  3. -------------------------
  4. 0/2A0001C0
  5. (1 row)
复制代码
确定备库应用到哪儿了
  1. postgres=# select pg_last_wal_replay_lsn();
  2. pg_last_wal_replay_lsn
  3. ------------------------
  4. 0/2A0001C0
  5. (1 row)
复制代码
最近变乱应用的时间
  1. postgres=# select pg_last_xact_replay_timestamp();
  2. pg_last_xact_replay_timestamp
  3. -------------------------------
  4. 2020-03-05 15:20:22.125688+08
  5. (1 row)
复制代码
以上为个人经验,希望能给各人一个参考,也希望各人多多支持脚本之家。如有错误或未思量完全的地方,望不吝见教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作