使用须知
DRS全量+增量同步过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段(单增量和单全量任务则包含三个阶段)。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。
表4 使用须知
类型名称 |
使用和操作约定 |
任务启动前使用须知 |
- 源数据库参数要求:
- 源数据库的分区表触发器不可以设置为disable。
- 全量同步支持源库备机状态,但需要设置hot_standby_feedback为on;增量同步不支持源库备机状态。
- 若要做增量同步:
源数据库参数wal_level必须配置为logical;
源数据库中无主键表的replica identity属性必须为full;
源数据库的max_replication_slots参数值必须大于当前已使用的复制槽数量;
源数据库的max_wal_senders参数值必须等于或大于max_replication_slots参数值。
源数据库中表的主键列toast属性为main、external、extended时,其replica identity属性必须为full。
- 源数据库对象要求:
- 源库中不可以存在同名的触发器。
- 同步对象依赖和关联的对象也须一起同步,否则可能导致同步失败。
- 目标数据库参数要求:
- 目标数据库的block_size参数值必须大于或等于源库中的对应参数值。
- 目标数据库和源数据库的lc_monetary参数值一致。
- 若要做增量同步,且同步对象包含外键、触发器或事件触发器,则目标数据库的session_replication_role参数必须设置为replica,同步结束后,此参数需改为原来的值。
- 目标数据库对象要求:
- 其他使用须知:
- 模式名或表名映射时,为防止索引和约束名冲突,同步后表上的原索引名称将变为此格式:i_+哈希值+原索引名(可能被截断)+_key。其中哈希值由“原模式名_原表名_原索引名”计算得到。同理,表上的原约束名将变为:c_+哈希值+原约束名(可能被截断)+_key。
- 对于全量+增量和增量任务,启动前请确保源库中未启动长事务,启动长事务会阻塞逻辑复制槽的创建,进而引发任务失败。
- 对于全量+增量和增量任务,如果预校验存在“内部错误”且在任务未启动时结束,请参考PostgreSQL为源强制结束任务章节检查并删除流复制槽,防止源库中流复制槽残留。
- 对于全量+增量和增量任务,任务启动后,仅支持以下版本的源库发生主备倒换:源库为RDS for PostgreSQL 12.6及以上的小版本、RDS for PostgreSQL 13及以上版本的所有小版本。
- 若选择同步DDL,须注意源库执行DDL时,确保在目标库上是兼容的。
|
全量同步过程使用须知 |
- 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
- 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。
- 请勿在目标库做写入操作,否则可能导致数据不一致。
- 为保证同步任务正常和数据的一致性,如有以上诉求,建议在业务低峰期时重新创建DRS任务。
|
增量同步过程使用须知 |
- 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
- 请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。
- 请勿修改源数据库中表的replica identity属性,否则可能导致增量数据不一致或任务失败。
- 请勿在目标库做写入操作,否则可能导致数据不一致。
- 为保证同步任务正常和数据的一致性,如有以上诉求,建议在业务低峰期时重新创建DRS任务。
- 库级同步时,源库新增无主键表时,请务必同时将该无主键表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。
- 库级同步时,源库新增主键表时,如果主键列toast属性为main、external、extended时,请务必同时将该表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。
|
同步对比使用须知 |
- 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。
- 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。
- 不支持在全量同步过程中做对比。
- 不支持数据对比过程中做限速。
|
结束任务使用须知 |
- 任务正常结束:
- 将自动重置目标库序列值(自增序列值为源库序列值+安全余度,自减序列值为源库序列值-安全余度,安全余度默认为10000),若选择了同步用户,任务结束时将自动同步用户的成员关系。
- 全量实时同步任务结束时会对序列值进行比对,序列值采用逻辑一致性的判断原则,即自增序列当且仅当目标库对应序列值大于等于源库对应序列值,自减序列当且仅当目标库对应序列值小于等于源库对应序列值时,序列值判定为一致。
- 全量+增量实时同步任务正常结束时,将自动删除任务在源库创建的流复制槽。
- 全量+增量实时同步任务正常结束时,如果目标库session_replication_role值为replica,需手动将目标库session_replication_role参数值修改为原来的值。
- 任务强制结束:
- 需要手动刷新目标库中的序列值,可参考PostgreSQL为源强制结束任务章节的指导进行操作。
- 强制结束全量+增量实时同步任务,需要手动删除源库可能残留的复制槽,可参考PostgreSQL为源强制结束任务章节的指导进行操作。
- 强制结束全量+增量实时同步任务,如果目标库session_replication_role值为replica,需手动将目标库session_replication_role参数值修改为原来的值。
- 逻辑复制槽命名规则为“drs_唯一性标识”,其中唯一性标识需要将任务node id中的“-”替换为“_”获取。node id可在DRS任务同步日志页面查看task node id is ***日志找到。
|
常见故障排查 |
- 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。
|