New replication mode: async, write, fsync, replay

PostgreSQL 9.1的同步复制事务需要等待同步复制节点的 xlog flush ACK 才可以结束事务(即等待xlog写入磁盘)。

而异步复制事务不需要standby的ACK。

在2012-01的commitFest中有一个关于新的复制模式的主题, 目前已经处于commited状态。

这个patch允许在standby节点的recovery.conf配置文件,加入了1个replication_mode参数,可选的参数值为,async, write, fsync, replay.

1. async

顾名思义代表这个standby是异步standby。

2. write

代表primary节点需要等待standby节点将接收到的xlog写入内存。

3. fsync

代表primary节点需要等待standby节点将接收到的xlog写入磁盘。

4. replay

代表primary节点需要等待standby节点将接收到的xlog完成恢复。

在write, fsync, replay模式下面,standby增加了一个XLogRecPtr消息,分别用来发送当前已经写入内存,磁盘,或完成恢复的location。

 只有当primary接收到的XLogRecPtr中的location大于主节点正在等待的COMMIT location时,才可返回success给客户端。

还记不记得9.1的同步复制同一时刻只支持一台节点成为sync standby节点,其他的都是异步复制节点。

所以又有一个patch是关于quorum的。

在主节点的postgresql.conf参数中增加了一个quorum参数,默认等于0。记录的是需要收到ACK的STANDBY节点个数。

当系统中存在多个sync standby节点时,主节点必须接收到大于或等于quorum配置的个数个sync standby节点的replication ACK,事务才可返回给客户端success消息。

quorum个数大于当前系统中sync standby个数时以sync standby个数为准。

系统中没有sync standby节点但是配置的quorum>0时不受影响。

【小结】

1. 由于write模式返回的是xlog写入内存的位置,比flush到磁盘快很多,因此带来同步复制的性能增强,当然也带来了少许风险,如主节点和sync standby节点同时DOWN机是有风险的。

性能提升如下 : 

synchronous_commit = on

tps = 424.510843 (including connections establishing)

tps = 420.767883 (including connections establishing)

tps = 419.715658 (including connections establishing)

tps = 428.810001 (including connections establishing)

tps = 337.341445 (including connections establishing)

synchronous_commit = write

tps = 550.752712 (including connections establishing)

tps = 407.104036 (including connections establishing)

tps = 455.576190 (including connections establishing)

tps = 453.548672 (including connections establishing)

tps = 555.171325 (including connections establishing)

2. quorum 参数降低了上面提到的风险问题,因为可以允许多个同步复制standby节点。

【参考】

http://archives.postgresql.org/message-id/AANLkTilgyL3Y1jkDVHX02433COq7JLmqicsqmOsbuyA1%40mail.gmail.com 

http://archives.postgresql.org/message-id/CAHGQGwFmB7PvDvoRWPq6dQ1TZzd81pi7xZoTwJXXgPQfdapJ+g@mail.gmail.com

时间: 2024-11-02 08:02:09

New replication mode: async, write, fsync, replay的相关文章

PostgreSQL HOT STANDBY using log shipping

PostgreSQL HOT STANDBY by log shipping 测试:一.准备硬件1. 主节点硬件配置DISK : 146GB*6MEM : 14GBCPU : 2.83GHz*82. standby节点硬件配置DISK : 146GB*4MEM : 8GBCPU : 2.0GHz*8 二.准备环境1. 系统Red Hat Enterprise Linux Server release 5.5 (Tikanga) x642. 时钟同步8 * * * * /usr/sbin/ntpd

PostgreSQL 9.0 流复制介绍

PostgreSQL9提供了一个非常兴奋的功能,hot-standby,功能与ORACLE 11G的ACTIVE STANDBY类似.并且增加了流复制的功能,这个与oracle 的standby redo log功能类似,大大的缩短了备份库与主库的事务间隔. HOT-STANDBY可以提供容灾,恢复的同时可以把数据库打开,提供查询功能.以前的版本恢复的时候是不能打开的. 首先看一张postgreSQL的高可用,负载均衡,复制特征矩阵图 这里有一个很好的特性 Slaves accept read-

数据库内核月报 - 2015 / 09-PgSQL · 特性分析 · clog异步提交一致性、原子操作与fsync

本文分为三节,分别介绍clog的fsync频率,原子操作,与异步提交一致性. PostgreSQL pg_clog fsync 频率分析 分析一下pg_clog是在什么时候需要调用fsync的? 首先引用wiki里的一段pg_clog的介绍 Some details here are in src/backend/access/transam/README: 1. "pg_clog records the commit status for each transaction that has b

PostgreSQL 9.4 BDR(Bi-Directional Replication), LLSR(Logical Log Stream Replication)

非常感谢2ND团队的辛勤付出, PostgreSQL 9.4的逻辑流复制模块BDR已经小有所成, 本文将演示一下bdr的使用. bi-directional replication顾名思义, 就是互相复制的意思(也称为逻辑流复制), 同样需要利用WAL, 目前为单进程, 以后可能会改进到多进程, 不过即使单进程, 也比目前的其他第三方复制快很多(如slony-I, londiste3).  目前BDR逻辑流复制的最小粒度为数据库级别, 而PG9.0以来的物理流复制是整个集群级别的. 注意目前BD

oracle中db replay设置scale_up_multiplier不生效

db replay设置scale_up_multiplier不生效 设置scale_up_multiplier: BEGIN DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY (scale_up_multiplier => 10); END; 但是设置之后,在DBA_WORKLOAD_REPLAYS.SCALE_UP_MULTIPLIER检查发现,这个值始终是1. 这是因为scale_up_multiplier不支持基于object id的同步.当synchronizati

ZFS (sync, async) R/W IOPS / throughput performance tuning

本文讨论一下zfs读写IOPS或吞吐量的优化技巧, (读写操作分同步和异步两种情况). 影响性能的因素 1. 底层设备的性能直接影响同步读写 iops, throughput. 异步读写和cache(arc, l2arc) 设备或配置有关. 2. vdev 的冗余选择影响iops, through. 因为ZPOOL的IO是均分到各vdevs的, 所以vdev越多, IO和吞吐能力越好. vdev本身的话, 写性能 mirror > raidz1 > raidz2 > raidz3 , 

MySQL Engine Features InnoDB Based Physical Replication

Not long ago, we were invited to the Percona Live 2016 meeting in the USA to share our recent findings on MySQL replication, which is InnoDB-based physical replication. Many friends sent private messages to me after the meeting to complain that the s

Mysql group replication复制原理

前言:          Mysql版本5.7.17推出Mysql group replication(组复制),相对以前传统的复制模式(异步复制模式async replication 及半同步复制模式semi-sync replication),一个主,对应一个或多个从,在主数据库上执行的事务通过binlog复制的方式传送给slave,slave通过 IO thread线程接收将事务先写入relay log,然后重放事务,即在slave上重新执行一次事务,从而达到主从事务一致的效果,如下图为两

PostgreSQL HOT STANDBY using Stream replication

案例解析二.PostgreSQL HOT STANDBY by stream replication 测试:一.准备硬件1. 主节点硬件配置DISK : 146GB*6MEM : 14GBCPU : 2.83GHz*82. standby节点硬件配置DISK : 146GB*4MEM : 8GBCPU : 2.0GHz*8 二.准备环境1. 系统Red Hat Enterprise Linux Server release 5.5 (Tikanga) x642. 时钟同步8 * * * * /u