【Postgresql源码分析之一】主备同步复制介绍

本文介绍了PostgreSQL中同步复制的基本概念及其配置方法。同步复制能够提高数据一致性,通过配置synchronous_standby_names和synchronous_commit参数来实现。文章还探讨了不同设置下同步复制的工作原理及其实现细节。
摘要由CSDN通过智能技术生成

postgresql主备热备

postgresql支持主机和备机以及级联之间的热备,即通过先进行一次基础备份,让其拥有相同的基础数据,然后通过传输XLOG日志的方式,在备机或者级联备机上REDO模拟主机上的操作,保证他们之间数据的一致性。目前热备传输方式有下面两种;
异步复制(async):主机上产生xlog日志,只需要将该xlog日志发送给备机就返回给客户端结果,不关心备机是否接收到该日志
同步复制(sync):主机上产生xlog日志后,不仅仅需要将其发给备机,还要等待备机的响应才告诉客户端已经执行完成,否则一直等待备机的执行,阻塞事物。
从上面的介绍中,同步复制可以保证主备之间数据的一致性。但是需要说明的是,即使是同步复制模式,也不能完全保证主备之间数据的一致性。因为目前的同步方式是传输XLOG日志,这必然需要在主机上先commit产生xlog日志,如果备机宕机后将主机重启,这条操作在主机上是存在的(已经commit的事物无法回滚),而备机是不存在的。

下面主要说明下同步复制的实现方式。

同步复制配置

Postgresql 9.1版本开始,数据库支持同步复制方式,增加数据的可靠性。配置同步复制方式比较简单,只需要配置下面两个参数即可。

synchronous_standby_names 

    指定用逗号分隔的备用名称列表,可以支持同步复制。 任何一个时间将至多有一个活跃同步备用(在最新的pg9.6中已经支持同个同步备); 这个备用服务器确认收到他们的数据后,等待提交事务将被允许进行,同步待机是此列表中第一个备用。 之后出现在此列表中的其它备用服务器带来潜在的同步备用。 如果无论出于何种原因当前同步待机断开,那么它会立即被下一个最高优先级的替换。 指定多个备用名可以有非常高的可用性

synchronous_commit 

     如果设置synchronous_standby_names, 该参数控制是否事务提交将等待它的WAL记录被复制到备用服务器。 当设置on的时候, 提交将等待直到回复当前同步备库表明它已收到事务提交记录,并刷新到磁盘。 这确保事务不会丢失,除非主库和备库遭受他们的数据库存储崩溃。 当设置为remote_write,事务将等待 直到当前同步备库的答复表明它已经收到事务的提交记录,并且写入到备用操作系统, 但是数据并不一定在备库中达到稳定存储。 即使PostgreSQL备库实例崩溃,但并非备库遭受操作系统级的崩溃,此设置足以 确保数据的保存。

当同步复制使用时, 通常是明智的,要么等待本地刷新到磁盘和WAL记录的复制,要么 允许异步提交事务。然而,该设置local可用于 希望等待本地刷新到磁盘上的事务,而不是同步复制。 如果不设置synchronous_standby_names, 设置on,remote_writelocal 提供相同的同步级别:事务提交只能等待本地刷新到磁盘。

该参数可以在任何时候被改变;对于任何事务的行为 是由该设置提交生效时确定的。 因此,它是可能的,并且有用的, 有一些事务同步提交,其他的异步提交。 例如,为了使单一多语句事务异步提交,缺省是相反的, 在事务中发出SET LOCAL synchronous_commit TO OFF命令。


同步复制的代码,相对比较简单,在后面的博客中将分别介绍,同步复制的实现方式,以及在最新的PG9.6版本中支持多个同步备机的代码。

     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值