zoukankan      html  css  js  c++  java
  • PostgreSQL 9.6 同步多副本、remote_apply记录

    摘自:https://yq.aliyun.com/articles/61274

    同步多副本配置方法

    参数配置如下

    synchronous_standby_names (string)

    支持两种写法

    num_sync ( standby_name [, ...] )  
    
    standby_name [, ...]  
    

    num_sync 数字,表示同步的副本数。

    没有写num_sync的格式兼容以前的配置,表示1个副本。

    standby_name是standby配置在recovery.conf中的application_name,可以使用*代替所有standby。

    例子

    2 (s1, s2, s3, s4)
    

    表示2个副本为同步standby,其他为异步standby。

    事物提交时,确保XLOG已同步到任意2个副本(前面两个是同步节点,后面2个是替补,当前面两个中任意的节点出问题,后面的会依次替补上)。

    通过参数synchronous_commit (enum)配置事务的同步级别。

    如果要配置事务或者会话级别的参数,通过以下语法

    SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }
    

    也就是说,用户可以根据实际的业务需求,对不同的事务,设置不同的同步级别。

    目前支持的同步级别如下

    事务提交或回滚时,会产生一笔事务结束的commit/rollback redo record,在REDO的地址系统中,用LSN表示。  
    
    on,     
        事务commit或rollback时,等待其redo在primary、以及同步standby(s)已持久化(>=其lsn)。  
    
    remote_apply,      
        事务commit或rollback时,等待其redo在primary、以及同步standby(s)已持久化(>=其lsn)。 并且其redo在同步standby(s)已apply(>=其lsn)。    
    
    remote_write, 
        事务commit或rollback时,等待其redo在primary已持久化;  其redo在同步standby(s)已调用write接口(写到OS, 但是还没有调用持久化接口如fsync)(>=其lsn)。    
    
    local, 
        事务commit或rollback时,等待其redo在primary已持久化;
    
    off
        事务commit或rollback时,等待其redo在primary已写入wal buffer,不需要等待其持久化;
    

    手册说明

    1. 可靠性

    结合synchronous_standby_names与synchronous_commit的设置,可以实现非常灵活的事务级别可靠性的要求。

    2. 读写分离的读一致性保证

    当synchronous_commit=remote_apply时,这个事务产生的REDO必须要在sync standby(s)已apply,才返回给客户端事务结束。

    这类事务,事务结束后发起的读请求,在primary以及sync standby可以做到读写完全一致。

    牺牲写事务的RT,获得在多借点的读事务的完全一致。

    3. 切换时延

    当设置了synchronous_commit=remote_apply事务同步复制级别时,可以降低切换延迟。

    备库在激活时,不需要apply redo,可以迅速的激活成为主库

  • 相关阅读:
    RMQ Tarjan的Sparse-Table算法
    POJ3461一道kmp题,字符串Hash也可
    hdu3294 Manacher算法模板
    SQL复制数据表及表结构
    Delphi ResourceString的用法
    锐浪报表 Grid++Report 一维码无法固定条形码打印宽度
    Delphi中点击网页弹出的Alert对话框的确定按钮
    Delphi实现获取句柄并发送消息的方法(FindWindow、FindWindowEx、EnumChildWindows、SendMessage)
    Delphi 常用API 函数列表
    Delphi WinAPI 消息函数 SendMessage函数和 PostMessage的区别
  • 原文地址:https://www.cnblogs.com/kuang17/p/8309392.html
Copyright © 2011-2022 走看看