由于PolarDB分布式版 自身不提供Binlog以及其他的一些限制,在业务设计、运维变更、数据质量以及业务开发时,会受到如下规范的约束,请您在实际使用中注意。

概览

业务设计规范

  • 表都需要有主键,否则可能会造成数据不一致(造成目标库有重复数据)。
  • 因为PolarDB分布式版 的GSI全局二级索引(Global Secondary Index)具有异步特性,不推荐您使用该功能。如果您仍选择使用该功能,DTS只能保证最终数据的一致性。
  • 数据库不支持混合模式,即unit模式和copy模式混合的同步链路。
    说明 unit模式是多地用户分别在各自地域读写本地域的数据,且本地域的数据会和中心数据双向同步。copy模式是指此集群数据在中心数据库写入,完成后全量同步到各个单元。
  • 如果是使用底层MySQL进行链路配置,PolarDB分布式版 间双向同步,业务表不支持使用FLOAT、DOUBLE类型字段,需要改为decimal类型。如果为PolarDB分布式版 间单向同步、迁移或订阅,则允许使用这两种数据类型。
  • DTS不支持同步、迁移或订阅PolarDB分布式版 中存储过程、触发器、函数、视图、事件等对象。
  • 不支持PolarDB分布式版 的结构初始化,需要在目标库手动创建好对应的库表等对象。
  • PolarDB分布式版 留够足够支撑业务增长的容量。
  • PolarDB分布式版 实例下挂载的MySQL版本为5.7和8.0,则不支持直接订阅该PolarDB分布式版 实例,需要对该实例下的多个MySQL配置单独的数据订阅任务来实现对PolarDB分布式版 数据的订阅和消费。

数据库架构规范

  • 一个PolarDB分布式版 实例使用到的RDS MySQL实例,不能再被其他PolarDB分布式版 实例使用。
  • PolarDB分布式版 间的同步或迁移,两端对应的RDS MySQL实例需保持对等部署,比如源PolarDB分布式版 使用了4个RDS MySQL实例,目标PolarDB分布式版 也需要使用4个规格配置相同的RDS MySQL实例。
  • 源和目标PolarDB分布式版 的分库分表规则需要保持一致,否则DTS同步或迁移任务无法建立。
  • 只能同步、迁移或订阅PolarDB分布式版 实例的业务表,无法同步、迁移或订阅该实例的元数据表和系统表。

运维变更规范

变更类型具体变更影响及应对规范
PolarDB分布式版 方面分库分表变化(如变更分库分表键、或变更分库分表数量)场景。暂不支持,需按如下步骤重新创建任务:
  1. 停止并删除原先的DTS任务。
  2. 待源库变更完成后,清空目标库已经同步或迁移的数据。
  3. PolarDB分布式版 下的多个RDS MySQL实例单独配置到目标库的同步或迁移任务。
存储层实例个数发生变化场景(如扩容、热点表迁移等)。
存储层方面存储层实例级别的规格变更、切换等。不影响DTS任务。
参数修改。源库和目标库的参数需一致。存储层实例级别参数修改只允许做向下兼容的参数修改,即新参数不会影响老参数的行为和数据。
说明 如不确认需联系数据库专家服务组。
存储层实例内备份恢复策略、开启审计、诊断等。对当前实例有效,不涉及有复制关系的其他实例。
DTS任务方面DDL操作。如果是配置PolarDB分布式版 下的多个RDS MySQL到目标库的DTS任务,受限于MySQL的实现逻辑,执行DDL操作可能会导致DTS任务延迟。
库表级别的DDL操作新增表。不支持,需要按照如下步骤操作:
  1. 在目标库执行建表DDL操作之后,在源库执行同样的建表DDL操作。
  2. 修改同步任务,将新表分别加入到同步对象中。
上述操作全部完成后建表操作才算正式完成,业务才可以写入。如果是基于表级别的同步,在源和目标的存储层实例上需要把新增的表加到同步队列里。
增加字段、增加二级索引、删除索引、修改索引(二级索引改成唯一索引除外)。
  • 如果是基于PolarDB分布式版 级别配置任务,需要您先在目标库先做对应的DDL操作,然后再去源库执行对应的DDL操作。
  • 如果是基于PolarDB分布式版 下挂载的RDS MySQL实例配置的任务,DTS会自动更新对应的新增字段,增加二级索引、删除索引、修改索引(二级索引改成唯一索引除外)的操作。
除上述操作以外的其他DDL操作。禁止此类DDL操作。
切流操作
说明 切流操作是指,通过DTS将数据从源库同步或迁移至目标库后,您将业务流量从源库切换至目标库。
正常的切流。DTS提供的延迟检测功能判断无延时后,您才能进行安全切流,否则会产生数据质量问题。
满足恢复点目标RPO(Recovery Point Objective)的异常切流。
说明 RPO代表故障恢复后业务允许丢失的数据量,可用时间表示。
警告 异常切流是指源实例或者源实例所在的数据中心发生故障时进行的切流操作。这类操作都是有损操作,例如导致数据不一致或任务失败。
在出现故障(如网络中断、机房批量设备故障或互联网数据中心IDC故障),且DTS任务存在延迟的情况下,此时如更新至目标库的最后一条数据的时间与故障发生时的时间之差小于RPO(如5分钟),则可以业务优先恢复为准则切流。切流后可能有5分钟以内的数据质量问题,需要您的业务开发配合订正,确保数据的一致性。
不满足RPO的异常切流。源端执行大量DDL操作、网络、目的库性能等问题,可能会导致DTS任务存在延迟,此时如刚好遇到机房故障,且同步或迁移至目标库的最后一条数据的时间戳与故障发生时的时间戳之差大于RPO(如5分钟),那么切流需要非常谨慎,建议您暂时不要执行切流操作,选择等待机房恢复正常。如果遇到异常切流,会存在延时窗口内的数据质量问题,需要您的业务开发配合订正,确保数据的一致性。

数据质量风险声明

一些变更或切流操作可能会导致源库和目标库结构不一致等数据质量问题,具体示例如下:

  • 当源实例主备之间存在数据延迟时,新写入主库的数据未能及时更新至备库。此时,如源实例进行主备切换,DTS会使用源实例的备库作为源数据库进行数据同步、迁移或订阅,从而导致丢失未能及时更新至备库的部分数据。
  • 在断网、业务切流后,如DTS任务恢复正常,会自动启动重试机制,重新同步、迁移或订阅故障发生前一段时间的数据,以避免目标库数据丢失。在这种情况下,如目标表缺少主键,会导致源目库数据不一致;如目标表存在主键,则在重试机制过程中源目库数据不一定能保持一致,但在重试结束后数据将保持一致。
  • 网络问题或业务DDL,导致DTS任务延时。
  • 源库变更、目标库性能、任何原因使表结构不一致等问题导致DTS任务延时或中断。

阿里云无法解决以上问题,需要您重构链路或者自行调整源库和目标库。

业务开发的数据质量工作

  • 请您慎重执行所有的DDL操作,所有的DDL操作都要经过驻场同学的确认,以遵守上述日常DDL变更规范。
  • 请勿在程序代码中直接进行DDL操作。