博客
关于我
PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别 应用场景分析
阅读量:795 次
发布时间:2023-03-03

本文共 1413 字,大约阅读时间需要 4 分钟。

PostgreSQL 9.6 同步多副本与remote_apply事务同步级别

作者

digoal

日期

2016-10-06

标签

PostgreSQL , 9.6 , 同步多副本 , remote_apply , 全同步


背景

在金融级应用场景中,2个副本通常是不够的。用户可能需要多个副本来满足高可用性和数据一致性的需求。例如,一主四从的配置中,主库之外还有2个需要同步的副本,其余副本可以为异步的备用副本。在这种情况下,读写分离是常见的做法,以扩展读的能力。

在PostgreSQL 9.6版本中,同步复制的机制得到了显著增强,特别是在remote_apply事务同步级别方面。这一改进使得事务提交过程更加严格一致,适用于异地读写分离场景。


同步多副本配置方法

参数配置

syncrhonous_standby_names 参数用于配置同步副本的名称。支持以下两种写法:

  • num_sync (standby_name [, ...])

    • num_sync 是一个数字,表示需要同步的副本数量。
    • standby_name 是备用节点的名称,需出现在recovery.conf文件中的application_name字段中,可以使用*表示所有备用节点。

    例如:

    2 (s1, s2, s3, s4)

    这表示2个副本被配置为同步副本,其余节点为异步副本。

    如果未提供num_sync,默认配置为1个同步副本。

  • standby_name [, ...]

    • 这是旧版本的兼容方式,相当于num_sync=1
  • 事务同步级别说明

    syncrhonous_commit 参数用于配置事务的同步级别。可选值包括:onremote_applyremote_writelocaloff。默认值为on,建议在金融级应用中保留默认设置。

    事务提交时的行为:

    • on:提交事务会等待WAL记录在主库及其所有同步副本上持久化到磁盘。
    • remote_apply:提交事务会等待WAL记录在主库及其所有同步副本上已被应用(即可读状态)。
    • remote_write:提交事务会等待WAL记录在主库上持久化,但不等待同步副本写入磁盘。
    • local:提交事务会等待WAL记录在主库上持久化,不等待同步副本。
    • off:提交事务不会等待WAL记录持久化,可能导致数据丢失风险。

    remote_apply事务同步级别配置方法

    syncrhonous_commit 参数也可用于配置事务的同步级别。通过以下命令可以在会话或本地级别调整:

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

    小结

    可靠性

    通过合理配置synchronous_standby_namessynchronous_commit,可以实现高度可靠的事务同步。

    读写分离的读一致性保证

    synchronous_commit=remote_apply时,事务提交后生成的REDO记录必须在所有同步副本上已被应用(可读状态),才能返回给客户端成功结果。这样可以确保主库和同步副本的数据一致性。

    切换时延

    在主库切换时,配置synchronous_commit=remote_apply可以显著降低切换延迟。备用节点在激活时无需等待REDO应用,可以快速切换为主库角色。

    转载地址:http://anxfk.baihongyu.com/

    你可能感兴趣的文章
    PHP文件锁
    查看>>
    php文本框输入制定文本,php – 当用户没有向文本框输入任何内容时...
    查看>>
    PHP时间戳和日期相互转换操作总结
    查看>>
    php时间戳知识点,php 时间戳函数总结与示例
    查看>>
    PHP查找数组中最大值与最小值
    查看>>
    php查最大值,在PHP数组中查找最大值
    查看>>
    php标签筛选,关于PHP CodeIgniter框架中通过<a>标签和url做多条件分类筛选
    查看>>
    php根据年月日计算年龄
    查看>>
    RabbitMQ - 单机部署(超详细)
    查看>>
    php检查注册,PHP检查注册的电子邮件地址是一个’school.edu’地址
    查看>>
    php模拟发送GET和POST请求
    查看>>
    php模板引擎smarty
    查看>>
    php正则表达式的特殊字符含义
    查看>>
    PHP水仙花问题解法之一
    查看>>
    php没有解析是怎么回事,linux下php文件没有被剖析怎么办?_后端开发
    查看>>
    php注册页面实现注册后跳转页面
    查看>>
    PHP消息队列的实现方式与详解,值得一看
    查看>>
    PHP混合Go协程并发
    查看>>
    php源码中如何添加滚动公告,给WordPress网站添加滚动公告的方法
    查看>>
    php漏洞tips
    查看>>