跨云账号单向同步云数据库Tair(兼容Redis)实例

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

数据传输服务DTS(Data Transmission Service)支持跨云账号单向同步,适用于云账号间的资源迁移或合并、业务架构调整等多种应用场景。

前提条件

  • 云数据库Tair(兼容Redis)的引擎版本为4.0(社区版)或5.0(社区版、企业版)。

    说明

    目标云数据库Tair(兼容Redis)支持的版本为4.0或5.0版本,如需跨版本同步(仅支持从低版本同步到高版本)请提前确认兼容性。例如创建按量付费的云数据库Tair(兼容Redis)来测试,测试完成后可将该实例释放或转为包年包月。

  • 跨云账号同步Redis实例支持集群架构、标准架构和读写分离架构的经典版。

  • 跨云账号同步Redis实例不支持集群架构的云原生版,但是支持标准架构的云原生版。

  • 云数据库Tair(兼容Redis)的网络类型为专有网络。如果当前为经典网络,您可以切换网络类型,详情请参见切换为专有网络VPC

  • 源Redis实例的不支持SSL加密功能,所以需要处于关闭状态,详情请参见设置SSL加密

  • 目标云数据库Tair(兼容Redis)可用的存储空间需大于源云数据库Tair(兼容Redis)已使用的存储空间。

  • 由于Redis企业版扩展了Redis模块(Redis Modules),如果源Redis实例为企业版,为保障业务兼容性,要求目标Redis实例为Redis企业版。

  • 云数据库Tair(兼容Redis)为企业版(持久内存型)时,需要用户开启appendonly参数。

  • 云数据库Tair(兼容Redis)企业版(容量存储型)不支持做为源数据库,只能作为目标数据库。

背景信息

现有两个Redis实例分别属于不同的阿里云账号,由于业务需求,需要将云账号A下的Redis实例中的业务数据信息同步至云账号B下的Redis实例中(源端跨账号的同步实例)。

DTS支持的跨云账号单向同步云数据库Tair(兼容Redis)需要您按照如下步骤完成同步任务的配置。

步骤

说明

1、使用源库所属的阿里云账号登录阿里云控制台,完成RAM角色授权操作,详情请参见准备工作

配置RAM角色,将目标库所属的云账号设置为授信云账号,并授权其访问本账号的云资源。

2、使用目标库所属的阿里云账号(主账号)登录阿里云控制台,完成数据同步任务配置,详情请参见操作步骤

DTS支持跨云账号直接读取源Redis实例的信息。

注意事项

类型

说明

源库限制

  • 为保障同步质量,DTS会在源库中插入一个前缀为DTS_REDIS_TIMESTAMP_HEARTBEAT的Key用于记录更新时间点,如果源库为集群架构,DTS会在各个shard上均插入该Key。同步过程中会过滤该Key,同步任务结束,该Key就会过期。

  • 如果源库为只读实例或者DTS账号没有写(SETEX)权限,上报的延迟可能不准确。

  • 为保障同步链路稳定性,建议将配置文件redis.confrepl-backlog-size参数的值适当调大。

  • 源库需开启AOF日志。

  • 如果源库中的某些Key使用了过期(expire)策略,由于可能存在Key已过期但未被及时删除的情况,所以在目标库中查看到的Key数量(例如通过info命令查看)会比源库的Key数量少。

  • 源库单机版Redis同步到目标库集群版Redis的操作限制:由于集群cluster只允许单个命令操作单个slot,若在源库执行多Key操作时,Key不在同一个slot或涉及多个slot,则会出现以下报错:

    CROSSSLOT Keys in request don't hash to the same slot

    建议在DTS同步过程中仅执行单Key操作,以免导致链路中断。

  • 源库为储介质持久内存的Tair(云原生版)时,需要开启appendonly参数。

其他限制

  • 若源实例为自建Redis,则Slave和Master之间的复制超时时间参数repl-timeout建议使用config set repl-timeout 600命令设置为600秒。若源数据库数据量比较大,可以适当增大repl-timeout参数的值。

  • 同步期间,如源Redis发生扩缩容(如增加或者减少分片)、规格变配(如扩大内存),则您需重新配置任务。且为保障数据一致性,建议重新配置任务前,先清空已同步至目标Redis的数据。

  • 若源或目标实例为自建Redis,且在同步期间该自建Redis的连接地址发生变化,则需要重新配置任务。

  • 建议源和目标库版本保持一致,或者从低版本同步到高版本以保障兼容性。若为高版本同步至低版本,可能存在数据库兼容性问题。

  • 全量数据初始化时DTS将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升。建议在执行数据同步前评估源库和目标库的性能,同时建议业务低峰期执行数据同步。

  • 在DTS同步期间,不允许有除DTS外的数据写入目标库,否则会导致源库与目标库数据不一致。

  • 若目标实例的架构类型为集群版且某一个分片达到了内存上限,或目标实例的存储空间不足时,DTS任务会因内存溢出(Out of Memory)而失败。

  • 若目标数据库内存不足,触发数据逐出时,由于云数据库 Tair(兼容 Redis)的默认数据逐出策略(maxmemory-policy)为volatile-lru,会导致目标库与源库数据不一致的情况,但不会影响任务的正常运行。

    为避免该情况发生,建议将目标库的数据逐出策略设置为noeviction,当目标库内存不足时,数据会写入失败,同时任务也会失败,但目标库不会因为数据逐出而丢失数据。

    说明

    关于数据逐出策略详情,请参见Redis数据逐出策略介绍

  • 若源或目标实例已开启透明数据加密TDE功能,则暂不支持通过DTS同步数据。

  • 若在数据同步过程中出现包括但不限于以下情况,可能会使全量数据重新同步至目标端,从而导致数据不一致。

    • 源端或目标端Redis发生连接闪断,导致断点续传失败。

    • 源端或目标端Redis发生主备切换或故障切换。

    • 源端或目标端Redis的连接地址发生变化。

    • 修改DTS实例的同步对象。

  • 云数据库Tair(兼容Redis)实例已开启TLS(Transport Layer Security)加密功能,则必须以SSL安全连接的方式接入到DTS(不支持TLSv1.3)。当前暂不支持已开启SSL的云数据库Tair(兼容Redis)实例,以云实例的方式接入DTS。

  • 若实例运行失败,DTS技术支持人员将在8小时内尝试恢复该实例。在恢复失败实例的过程中,可能会对该实例进行重启、调整参数等操作。

    说明

    在调整参数时,仅会修改实例的参数,不会对数据库中的参数进行修改。可能修改的参数,包括但不限于修改实例参数中的参数。

费用说明

同步类型链路配置费用
库表结构同步和全量数据同步不收费。
增量数据同步收费,详情请参见计费概述

支持同步的SQL操作

版本类型

SQL操作

云数据库Tair(兼容Redis)社区版

  • APPEND

  • BITOP、BLPOP、BRPOP、BRPOPLPUSH

  • DECR、DECRBY、DEL

  • EVAL、EVALSHA、EXEC、EXPIRE、EXPIREAT

  • GEOADD、GETSET

  • HDEL、HINCRBY、HINCRBYFLOAT、HMSET、HSET、HSETNX

  • INCR、INCRBY、INCRBYFLOAT

  • LINSERT、LPOP、LPUSH、LPUSHX、LREM、LSET、LTRIM

  • MOVE、MSET、MSETNX、MULTI

  • PERSIST、PEXPIRE、PEXPIREAT、PFADD、PFMERGE、PSETEX

  • RENAME、RENAMENX、RESTORE、RPOP、RPOPLPUSH、RPUSH、RPUSHX

  • SADD、SDIFFSTORE、SELECT、SET、SETBIT、SETEX、SETNX、SETRANGE、SINTERSTORE、SMOVE、SPOP、SREM、SUNIONSTORE

  • ZADD、ZINCRBY、ZINTERSTORE、ZREM、ZREMRANGEBYLEX、ZUNIONSTORE、ZREMRANGEBYRANK、ZREMRANGEBYSCORE

  • SWAPDB、UNLINK(仅当源端Redis实例的版本为4.0时支持)

  • XADD、XCLAIM、XDEL、XAUTOCLAIM、XGROUP CREATECONSUMER、XTRIM

云数据库Tair(兼容Redis)企业版

  • APPEND

  • BITOP、BLPOP、BRPOP、BRPOPLPUSH

  • DECR、DECRBY、DEL

  • EVAL、EVALSHA、EXEC、EXPIRE、EXPIREAT

  • GEOADD、GETSET

  • HDEL、HINCRBY、HINCRBYFLOAT、HMSET、HSET、HSETNX

  • INCR、INCRBY、INCRBYFLOAT

  • LINSERT、LPOP、LPUSH、LPUSHX、LREM、LSET、LTRIM

  • MOVE、MSET、MSETNX、MULTI

  • PERSIST、PEXPIRE、PEXPIREAT、PFADD、PFMERGE、PSETEX

  • RENAME、RENAMENX、RPOP、RPOPLPUSH、RPUSH、RPUSHX

  • SADD、SDIFFSTORE、SELECT、SET、SETBIT、SETEX、SETNX、SETRANGE、SINTERSTORE、SMOVE、SPOP、SREM、SUNIONSTORE

  • UNLINK、ZADD、ZINCRBY、ZINTERSTORE、ZREM、ZREMRANGEBYLEX、ZUNIONSTORE、ZREMRANGEBYRANK、ZREMRANGEBYSCORE

  • XADD、XCLAIM、XDEL、XAUTOCLAIM、XGROUP CREATECONSUMER、XTRIM

说明
  • 不支持同步PUBLISH命令。

  • 对于通过EVAL或者EVALSHA调用Lua脚本,在增量数据同步时,由于目标端在执行脚本时不会明确返回执行结果,DTS无法确保该类型脚本能够执行成功。

  • 对于List,由于DTS在调用sync或psync进行重传时,不会对目标端已有的数据进行清空,可能导致出现重复数据。

准备工作

  1. 必需:获取源库和目标库所属阿里云账号的目标实例所属的阿里云账号(主账号)的账号ID

    说明

    若您已获取源库和目标库所属阿里云账号(主账号)的账号ID,则可跳过此步骤。

    1. 使用源库或目标库所属的阿里云账号(主账号)登录账号管理

    2. 可选:单击基本信息

    3. 查看并记录账号ID

  2. 创建RAM角色。

    1. 使用源实例所属的阿里云账号,登录RAM控制台

    2. 在左侧导航栏,选择身份管理 > 角色

    3. 角色页面,单击创建角色

    4. 创建角色面板,选择可信实体类型为阿里云账号,然后单击下一步创建角色

    5. 在弹出的对话框中,配置RAM角色信息。信任账号

      配置选项

      配置说明

      角色名称

      填写RAM角色名称,本示例填写ram-for-dts

      说明

      可以填写大写英文、小写英文、数字或短横线(-),长度不超过64个字符。

      备注(可选)

      填写RAM角色备注信息。

      选择信任的云账号

      选择为其他云账号,并填写目标实例所属的阿里云账号(主账号)的账号ID作为授信云账号。

    6. 单击完成

  3. 为创建好的RAM角色精确授权。

    1. 单击精确授权创建角色

    2. 权限管理页签,单击精确授权

      image

    3. 精确授权面板中,勾选选择权限类型系统策略

      image

    4. 输入策略名称下方的文本框中,输入AliyunDTSRolePolicy

    5. 单击确定

    6. 精确授权成功后,单击关闭

  4. 修改信任策略。

    1. (可选)角色页面,找到刚刚创建的RAM角色,单击对应的RAM角色名称。

      image

    2. 在RAM角色的基本信息页面,单击信任策略页签。

      image

    3. 信任策略页签中,单击编辑信任策略

    4. 将下述代码复制至策略框中。

      {
          "Statement": [
              {
                  "Action": "sts:AssumeRole",
                  "Effect": "Allow",
                  "Principal": {
                      "RAM": [
                          "acs:ram::<阿里云账号ID>:root"
                      ],
                      "Service": [
                          "<阿里云账号ID>@dts.aliyuncs.com"
                      ]
                  }
              }
          ],
          "Version": "1"
      }
    5. 将代码中两个<阿里云账号ID>替换为创建DTS任务的阿里云账号(主账号)ID。

    6. 单击保存信任策略

操作步骤

  1. 使用目标实例所属的阿里云账号(主账号),进入同步任务的列表页面。

    1. 登录DMS数据管理服务

    2. 在顶部菜单栏中,单击集成与开发

    3. 在左侧导航栏,选择数据传输(DTS) > 数据同步

  2. 同步任务右侧,选择同步实例所属地域。

    说明

    新版DTS同步任务列表页面,需要在页面左上角选择同步实例所属地域。

  3. 单击创建任务,配置源库及目标库信息。

    警告

    选择源和目标实例后,建议您仔细阅读页面上方显示的使用限制,否则可能会导致任务失败或数据不一致。

    类别

    配置

    说明

    任务名称

    DTS会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。

    源库信息

    选择DMS数据库实例

    您可以按实际需求,选择是否使用已有实例。

    • 如使用已有实例,下方数据库信息将自动填入,您无需重复输入。

    • 如不使用已有实例,您需要输入下方的数据库信息。

    数据库类型

    选择Tair/Redis

    接入方式

    选择云实例

    实例地区

    选择源Redis数据库所属地域。

    是否跨阿里云账号

    选择跨账号

    说明

    该功能支持跨站点互通,即中国站账号和国际站账号之间可以实现互通。

    跨阿里云账号

    填入源Redis数据库所属的阿里云账号ID。

    说明

    您可以使用源Redis数据库所属的阿里云账号登录账号管理页面来获取阿里云账号ID。

    获取云账号ID

    跨阿里云账号角色名

    填入准备工作中创建的RAM角色名称。

    实例ID

    选择源云数据库Tair(兼容Redis)实例ID。

    认证方式

    请根据实际情况选择密码登录免密登录,本示例选择密码登录

    说明

    若您选择免密登录,请确保Redis数据库已开启免密访问功能。云数据库Tair(兼容Redis)实例开启免密访问的方法,请参见开启专有网络免密访问

    数据库密码

    填入源云数据库Tair(兼容Redis)的账号和密码,根据选取的账号(需要具备读权限)填写密码,如果忘记密码,您可以重置密码,具体操作请参见修改或重置密码

    • 默认账号(即以实例ID命名的账号):直接填写密码即可。

    • 新创建的账号:密码格式为<自定义账号>:<密码>,例如:testaccount:Test1234。

    说明

    非必填项,如果没有设置密码可以不填。

    连接方式

    请根据实际情况选择非加密连接SSL安全连接

    说明

    若为自建Redis(接入方式不是云实例),且选择了SSL安全连接,您还需要上传CA 证书并填写CA 密钥

    目标库信息

    选择DMS数据库实例

    您可以按实际需求,选择是否使用已有实例。

    • 如使用已有实例,数据库信息将自动填入,您无需重复输入。

    • 如不使用已有实例,您需要输入下方的数据库信息。

    数据库类型

    选择Tair/Redis

    接入方式

    选择云实例

    实例地区

    选择目标云数据库Tair(兼容Redis)所属地域。

    是否跨阿里云账号

    本示例为源端跨账号的同步实例,此处选择不跨账号

    实例ID

    选择目标云数据库Tair(兼容Redis)实例ID。

    认证方式

    请根据实际情况选择密码登录免密登录,本示例选择密码登录

    说明

    若您选择免密登录,请确保Redis数据库已开启免密访问功能。云数据库Tair(兼容Redis)实例开启免密访问的方法,请参见开启专有网络免密访问

    数据库密码

    填入目标云数据库Tair(兼容Redis)实例的账号和密码,根据选取的账号(需具备读写权限)填写密码,如果忘记密码,您可以重置密码,具体操作请参见修改或重置密码

    • 默认账号(即以实例ID命名的账号):直接填写密码即可。

    • 新创建的账号:密码格式为<自定义账号>:<密码>,例如:testaccount:Test1234。

    连接方式

    请根据实际情况选择非加密连接SSL安全连接

    说明

    若为自建Redis(接入方式不是云实例),且选择了SSL安全连接,您还需要上传CA 证书并填写CA 密钥

  4. 配置完成后,单击页面下方的测试连接以进行下一步

    如果源或目标数据库是阿里云数据库实例(例如RDS MySQL云数据库MongoDB版等),DTS会自动将对应地区DTS服务的IP地址添加到阿里云数据库实例的白名单中;如果源或目标数据库是ECS上的自建数据库,DTS会自动将对应地区DTS服务的IP地址添加到ECS的安全规则中,您还需确保自建数据库没有限制ECS的访问(若数据库是集群部署在多个ECS实例,您需要手动将DTS服务对应地区的IP地址添加到其余每个ECS的安全规则中);如果源或目标数据库是IDC自建数据库或其他云数据库,则需要您手动添加对应地区DTS服务的IP地址,以允许来自DTS服务器的访问。DTS服务的IP地址,请参见DTS服务器的IP地址段

    警告

    DTS自动添加或您手动添加DTS服务的公网IP地址段可能会存在安全风险,一旦使用本产品代表您已理解和确认其中可能存在的安全风险,并且需要您做好基本的安全防护,包括但不限于加强账号密码强度防范、限制各网段开放的端口号、内部各API使用鉴权方式通信、定期检查并限制不需要的网段,或者使用通过内网(专线/VPN网关/智能网关)的方式接入。

  5. 配置任务对象及高级配置。

    配置

    说明

    同步类型

    固定选中增量同步。默认情况下,您还需要同时选中全量同步。预检查完成后,DTS会将源实例中待同步对象的全量数据在目标集群中初始化,作为后续增量同步数据的基线数据。

    说明

    只有云数据库Tair(兼容Redis)企业版才支持全量同步,其他均不支持。

    同步拓扑

    选择单向同步

    目标已存在表的处理模式

    • 预检查并报错拦截:检查目标端是否为空。如果待同步的目标端为空,则通过该检查项目;如果不为空,则在预检查阶段提示错误,数据同步作业不会被启动。

    • 忽略报错并继续执行:跳过目标库对象数据存在性检查的检查项。

      警告

      选择为忽略报错并继续执行后,如果在同步过程中遇到目标端的Key与源端中的Key相同,会将源端的数据覆盖写入目标端中,从而可能会导致目标端原有的数据丢失,请谨慎选择。

    源库对象

    源库对象框中单击待同步对象,然后单击向右将其移动至已选择对象框。

    说明

    同步对象的选择粒度为库,暂不支持Key粒度的选择。

    已选择对象

    若您需要指定接收数据的库(DB 0~DB 255)或通过前缀筛选待同步的数据,可以使用映射或过滤功能。在已选择对象框中右键单击待同步的库,然后在弹出的编辑Schema对话框中进行配置。更多信息,请参见库表列名映射设置过滤条件

    说明

    不支持批量映射。

  6. 单击下一步高级配置,进行高级配置。

    • 数据校验配置

      若您需要配置数据校验,请参见配置数据校验

    • 高级配置

      配置

      说明

      设置告警

      是否设置告警,当同步失败或延迟超过阈值后,将通知告警联系人。

      源库、目标库无法连接后的重试时间

      在同步任务启动后,若源库或目标库连接失败则DTS会报错,并会立即进行持续的重试连接,默认持续重试时间为720分钟,您也可以在取值范围(10~1440分钟)内自定义重试时间,建议设置30分钟以上。如果DTS在设置的重试时间内重新连接上源库、目标库,同步任务将自动恢复。否则,同步任务将会失败。

      说明
      • 针对同源或者同目标的多个DTS实例,如DTS实例A和DTS实例B,设置网络重试时间时A设置30分钟,B设置60分钟,则重试时间以低的30分钟为准。

      • 由于连接重试期间,DTS将收取任务运行费用,建议您根据业务需要自定义重试时间,或者在源和目标库实例释放后尽快释放DTS实例。

      源库、目标库出现其他问题后的重试时间

      在同步任务启动后,若源库或目标库出现非连接性的其他问题(如DDL或DML执行异常),则DTS会报错并会立即进行持续的重试操作,默认持续重试时间为10分钟,您也可以在取值范围(1~1440分钟)内自定义重试时间,建议设置10分钟以上。如果DTS在设置的重试时间内相关操作执行成功,同步任务将自动恢复。否则,同步任务将会失败。

      重要

      源库、目标库出现其他问题后的重试时间的值需要小于源库、目标库无法连接后的重试时间的值。

      是否限制全量迁移速率

      在全量同步阶段,DTS将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升。您可以根据实际情况,选择是否对全量同步任务进行限速设置(设置每秒查询源库的速率QPS每秒全量迁移的行数RPS每秒全量迁移的数据量(MB)BPS),以缓解目标库的压力。

      说明

      仅当同步类型选择了全量同步时才可以配置。

      是否限制增量同步速率

      您也可以根据实际情况,选择是否对增量同步任务进行限速设置(设置每秒增量同步的行数RPS每秒增量同步的数据量(MB)BPS),以缓解目标库的压力。

      环境标签

      您可以根据实际情况,选择用于标识实例的环境标签。本示例无需选择。

      延长目标库key的过期时间

      设置源库中的key迁移到目标库时额外延长的过期时间。为保障数据的一致性,如有使用到(包括但不限于)如下命令,都建议设置延长key的过期时间,建议设置为600秒。

      EXPIRE key seconds
      PEXPIRE key milliseconds
      EXPIREAT key timestamp
      PEXPIREAT key timestampMs

      配置ETL功能

      选择是否配置ETL功能。关于ETL的更多信息,请参见什么是ETL

  7. 保存任务并进行预检查。

    • 若您需要查看调用API接口配置该实例时的参数信息,请将鼠标光标移动至下一步保存任务并预检查按钮上,然后单击气泡中的预览OpenAPI参数

    • 若您无需查看或已完成查看API参数,请单击页面下方的下一步保存任务并预检查

    说明
    • 在同步作业正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动同步作业。

    • 如果预检查失败,请单击失败检查项后的查看详情,并根据提示修复后重新进行预检查。

    • 如果预检查产生警告:

      • 对于不可以忽略的检查项,请单击失败检查项后的查看详情,并根据提示修复后重新进行预检查。

      • 对于可以忽略无需修复的检查项,您可以依次单击点击确认告警详情确认屏蔽确定重新进行预检查,跳过告警检查项重新进行预检查。如果选择屏蔽告警检查项,可能会导致数据不一致等问题,给业务带来风险。

  8. 预检查通过率显示为100%时,单击下一步购买

  9. 购买页面,选择数据同步实例的计费方式、链路规格,详细说明请参见下表。

    类别

    参数

    说明

    信息配置

    计费方式

    • 预付费(包年包月):在新建实例时支付费用。适合长期需求,价格比按量付费更实惠,且购买时长越长,折扣越多。

    • 后付费(按量付费):按小时扣费。适合短期需求,用完可立即释放实例,节省费用。

    资源组配置

    实例所属的资源组,默认为default resource group。更多信息,请参见什么是资源管理

    链路规格

    DTS为您提供了不同性能的同步规格,同步链路规格的不同会影响同步速率,您可以根据业务场景进行选择。更多信息,请参见数据同步链路规格说明

    订购时长

    在预付费模式下,选择包年包月实例的时长和数量,包月可选择1~9个月,包年可选择1年、2年、3年和5年。

    说明

    该选项仅在付费类型为预付费时出现。

  10. 配置完成后,阅读并勾选《数据传输(按量付费)服务条款》

  11. 单击购买并启动,并在弹出的确认对话框,单击确定

    您可在数据同步界面查看具体任务进度。