流复制同步异步转换

作者:瀚高PG实验室(Highgo PG Lab)-Chrisx

介绍

数据库流复制支持同步和异步方式,同步方式能提供最大保护,异步方式能提供最大可用。同步方式在网络异常或备库宕机情况下,主库操作也会受影响,事务操作会出现等待状态。当出现以上场景时,我们总是希望进行降级,将同步转为异步,避免主库hang住。

  • 如果实在无法保持所要求数量的同步后备,那么应该减少synchronous_standby_names中指定的事务提交应该等待其回应的同步后备的数量(或者禁用),并且在主服务器上重载配置文件。

  • 即便当同步复制被启用时,个体事务也可以被配置为不等待复制,做法是将synchronous_commit参数设置为local或off。

基于以上描述,可以实现流复制同步异步转换操作。必要时,可直接将同步复制降级为异步复制。

同步异步转换

修改synchronous_standby_names,然后reload生效。也就是说转换过程不需要重启服务器,这一点非常方便的。

  • 同步流复制,synchronous_standby_names指定需要启用同步复制策略的备用服务器
  • 异步流复制,synchronous_standby_names为空

示例

alter system set synchronous_standby_names='standby12';
select pg_reload_conf();

此时关闭备库,主库执行insert,主库hang住

alter system set synchronous_standby_names='';
select pg_reload_conf();

此时insert就执行成功了

同步复制不等待

修改synchronous_commit参数设置为local或off,reload生效。即使为同步复制,主库事务也无需等待。此种情况也可以看做是另一种“同步转异步”

示例

alter system set synchronous_standby_names='standby12';
alter system set synchronous_commit=local;
select pg_reload_conf();

此时关闭备库,主库执行insert,主库不受影响。但是注意

DETAIL:  The transaction has already committed locally, but might not have been replicated to the standby.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值