数据复制服务 DRS-将PostgreSQL同步到GaussDB分布式版:使用须知

时间:2024-05-20 18:33:42

使用须知

DRS全量+增量同步过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段(单全量任务则包含三个阶段)。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。

表4 使用须知

类型名称

使用和操作约定

任务启动前须知

  • 源数据库参数要求
    • 源数据库的分区表触发器不可以设置为disable。
    • 全量同步支持源库备机状态,但需要设置hot_standby_feedback为on;增量同步不支持源库备机状态。
    • 若要做增量同步:
      源数据库的“pg_hba.conf” 文件中包含如下的配置:
      host replication all 0.0.0.0/0 md5

      源数据库参数wal_level必须配置为logical。

      源数据库需提前安装test_decoding插件。

      源数据库中无主键表的replica identity属性必须为full。

      源数据库的max_replication_slots参数值必须大于当前已使用的复制槽数量。

      源数据库的max_wal_senders参数值必须等于或大于max_replication_slots参数值。

      源数据库中表的主键列toast属性为main、external、extended时,其replica identity属性必须为full。

  • 源数据库对象要求:
    • 同步对象依赖和关联的对象也须一起同步,否则可能导致同步失败。
      说明:

      常见的关联关系:主外键关联表、表继承子表引用父表、表分区子分区表引用分区表、表自增列引用序列等。

  • 目标数据库参数要求:
    • 目标数据库参数max_prepared_transactions须大于源数据库。
    • 目标数据库参数max_worker_processes须大于源数据库。
    • 目标数据库参数max_locks_per_transaction须大于源数据库。
    • 目标数据库参数max_connections须大于源数据库。
    • 目标数据库和源数据库的lc_monetary参数值必须一致。
  • 目标数据库对象要求
    • 目标数据库的字符集必须与源数据库一致。
    • 目标数据库的时区设置必须与源数据库一致。
    • 同步的表要禁用外键,因为DRS并行回放会使得不同表之间的写入顺序和源库不一致,可能会触发外键约束限制,造成同步失败。
    • 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。

      目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。

      目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。

  • 其他使用须知
    • 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。
    • 暂不支持级联单向同步,例如从实例A同步到实例B,再从实例B同步到实例C。
    • 分区表只同步主表,转为普通表同步到目标库,分区表的数据将集中写入主表。
    • 模式名或表名映射时,为防止索引和约束名冲突,同步后表上的原索引名称将变为此格式:i_+哈希值+原索引名(可能被截断)+_key。其中哈希值由“原模式名_原表名_原索引名”计算得到。同理,表上的原约束名将变为:c_+哈希值+原约束名(可能被截断)+_key。
    • 对于全量+增量和增量任务,启动任务前,请确保源库中未启动长事务,源库启动长事务会阻塞逻辑复制槽的创建,进而引发任务失败。
    • 对于全量+增量和增量任务,任务启动后,仅支持以下版本的源库发生主备倒换:源库为RDS for PostgreSQL 12.6及以上的小版本、RDS for PostgreSQL 13及以上版本的所有小版本。
    • DRS全量同步表结构时,源库中的character、character varying类型长度在目标库会按照字节长自动扩大(因为目标库为字节长),默认扩大4倍,最大长度为10485760。
    • DRS全量同步表结构时,目标库存在与某用户名称同名的schema,用其他用户进行同步表结构到schema时,需要使用grant [role] to [role]的方式为此用户赋权,否则可能因为无法创建表结构而导致同步失败。
    • 对象名同步到目标库后不进行大小写转换。
    • 源数据库的唯一索引是表达式索引时,全量同步阶段目标数据库GaussDB分布式可能会因为无法创建该索引而导致任务失败。

全量同步过程须知

  • 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
  • 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。
  • 请勿在目标库做写入操作,否则可能导致数据不一致。

增量同步过程须知

  • 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
  • 请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。
  • 请勿修改源数据库中表的replica identity属性,否则可能导致增量数据不一致或任务失败。
  • 请勿在目标库做写入操作,否则可能导致数据不一致。
  • 库级同步时,源库新增无主键表时,请务必同时将该无主键表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。
  • 库级同步时,源库新增主键表时,如果主键列toast属性为main、external、extended时,请务必同时将该表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。

同步对比使用须知

  • 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。
  • 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。
  • 不支持在全量同步过程中做对比。
  • 不支持数据对比过程中做限速。

结束任务须知

  • 正常结束任务:
    • 全量+增量实时同步任务正常结束时,将自动删除任务在源库创建的流复制槽。
  • 强制结束任务
    • 强制结束全量+增量实时同步任务,需要手动删除源库可能残留的复制槽,可参考PostgreSQL为源强制结束任务章节的指导进行操作。
    • 逻辑复制槽命名规则为“drs_唯一性标识”,其中唯一性标识需要将任务node id中的“-”替换为“_”获取。node id可在DRS任务同步日志页面查看task node id is ***日志找到。
support.huaweicloud.com/realtimesyn-drs/drs_04_0455.html