原生 PostgreSQL 流复制原理为备库不断从主库同步数据,并在备库应用每个 Wal 日志记录。主要包括异步流复制同步流复制两种模式。

PostgreSQL 在 AppCenter 集群管理控制台支持变更主备库的数据同步模式,并定制半同步复制可自动切换同步流模式,确保业务运行流畅性。

  • 异步流复制

    异步留复制指主库在执行完事务后,立即返回结果,未判断备库是否接收和处理事务。在主库异常,而备库未接收到数据,强行主从切换后,可能造成数据丢失。

  • 同步流复制

    同步流复制指当主库执行完一个事务,且所有备库执行完事务后,才返回结果。若有多个备库,需要等待所有备库执行完事务才返回,保障数据完全同步,数据零丢失。

    同步流复制模式下,若备库异常无法完成数据同步,将导致主库事务受阻,故同步流复制对业务正常运行有一定影响。

  • 半同步复制

    PostgreSQL 半同步复制指在开启同步流复制前提下,从节点异常无法完成数据同步时,主库将自动切换为异步流复制模式,确保业务不受阻塞。备库恢复正常后,主库恢复同步流复制。

说明

PostgreSQL 同步流复制中备库是指 standby 节点。

PostgreSQL 集群主实例和只读实例支持数据同步模式情况如下:

  • 主实例支持半同步模式

    • 2 主实例集群:半同步模式。允许一个节点故障,此时集群无法故障转移,不会影响 primary 节点读写。

    • 3 主实例集群:增强半同步模式。允许一个节点宕机,为了保证数据的强一致性,两节点宕机会阻塞主节点写入,此时集群只读。

    建议使用 3 主实例集群。

  • 只读实例,可以设置同步/异步。

    • synchronous_readonly 参数控制只读实例同步模式。

      • sync:只读实例同步。

      • async:只读实例异步(默认)。

    建议设置只读实例为 async。

本小节主要介绍如何变更 PostgreSQL 节点数据同步模式。

前提条件

  • 已获取管理控制台登录账号和密码,且已获取集群操作权限。

  • 已升级至 PostgreSQL 高可用版-V2.0.0 及以上版本。

操作步骤

  1. 登录管理控制台。

  2. 选择产品与服务 > 数据库与缓存 > 关系型数据库 PostgreSQL,进入集群管理页面。

  3. 选择目标集群,点击目标集群 ID,进入集群详情页面。

  4. 点击配置参数页签,进入集群配置参数管理页面。

  5. 点击修改属性,公共参数进入可编辑状态。

  6. 设置synchronous_readonly参数为先写入内存,后写入硬盘fsync参数设置为true

    • async:先写入内存,后写入硬盘,表示异步流复制模式。

    • sync:同步写入内存和硬盘,表示同步流复制模式。

      设置同步流复制模式后,需开启半同步复制模式才生效。

    数据同步方式
  7. 确认参数信息无误后,点击保存,返回参数列表页面。