数据传输服务DTS(Data Transmission Service)支持Redis数据库的单向同步,适用于异地多活、数据异地容灾等多种应用场景。本文以ECS上的自建Redis同步至Redis实例为例,介绍数据同步作业的配置流程。

警告 完成数据同步作业的配置后,请勿变更源数据库或目标数据库的 架构类型(例如将主从架构变更为集群架构),否则会导致数据同步失败。

前提条件

  • 源Redis数据库的版本为2.8、3.0、3.2、4.0或5.0版本。
    说明 如需跨版本同步(仅支持从低版本同步到高版本)请提前确认兼容性。例如创建按量付费的Redis实例来测试,测试完成后可将该实例释放或转为包年包月。
  • 目标Redis实例的存储空间需大于源Redis数据库已使用的存储空间。
  • 当源Redis数据库为集群架构时,集群的每个节点必须能够执行psync命令,且连接的密码一致。

注意事项

  • DTS在执行全量数据初始化时将占用源库和目标库一定的资源,可能会导致数据库服务器负载上升。如果数据库业务量较大或服务器规格较低,可能会加重数据库压力,甚至导致数据库服务不可用。建议您在执行数据同步前谨慎评估,在业务低峰期执行数据同步。
  • 如果源库中的某些Key使用了过期(expire)策略,由于可能存在Key已过期但未被及时删除的情况,所以在目标库中查看到的Key数量(例如通过info命令查看)会比源库的Key数量少。
    说明 源和目标库中,未设置过期策略或未过期的Key数量是一致的。
  • 如果在源数据库的配置文件redis.conf中配置了bind参数,请将该参数的值设置为ECS的内网IP地址以保障DTS可以正常连接源数据库。
  • 为保障同步链路稳定性,建议将源Redis数据库的配置文件redis.confrepl-backlog-size参数的值适当调大。
  • 为保障同步质量,DTS会在源Redis数据库中插入一个key:DTS_REDIS_TIMESTAMP_HEARTBEAT,用于记录更新时间点。
  • 如果配置Redis集群间的数据同步,请勿在源集群中执行FLUSHDBFLUSHALL命令,否则将导致源和目标的数据不一致。
  • 如果目标库的数据逐出策略(maxmemory-policy)配置为noeviction以外的值,可能导致目标库的数据与源库不一致。关于数据逐出策略详情,请参见Redis数据逐出策略介绍
  • 同步期间,如自建Redis发生扩缩容(如增加或者减少分片)、规格变配(如扩大内存),则您需重新配置任务。且为保障数据一致性,建议重新配置任务前,先清空已同步至目标Redis的数据。
  • 同步期间,如自建Redis连接地址变化,则您需要提交工单进行处理,如果长时间未处理,自建Redis会重置AOF文件,届时您需重新配置任务。

支持的同步拓扑

  • 一对一单向同步
  • 一对多单向同步
  • 级联单向同步

关于各类同步拓扑的介绍及注意事项,请参见数据同步拓扑介绍

支持的同步命令

  • 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、PUBLISH
  • 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时支持)
说明
  • 对于通过EVAL或者EVALSHA调用Lua脚本,在增量数据同步时,由于目标端在执行脚本时不会明确返回执行结果,DTS无法确保该类型脚本能够执行成功。
  • 对于List,由于DTS在调用sync或psync进行重传时,不会对目标端已有的数据进行清空,可能导致出现重复数据。

操作步骤

  1. 购买数据同步实例,详情请参见购买数据同步作业
    说明 购买时,源实例和目标实例均选择为 Redis
  2. 登录数据传输控制台
  3. 在左侧导航栏,单击数据同步
  4. 同步作业列表页面顶部,选择同步的目标实例所属地域。选择地域
  5. 定位至已购买的数据同步实例,单击配置同步链路
  6. 配置数据同步的源实例及目标实例信息。同步源目实例信息配置
    类别 配置 说明
    同步作业名称 DTS会自动生成一个同步作业名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。
    源实例信息 实例类型 选择ECS上的自建数据库
    实例地区 购买数据同步实例时选择的源实例地域信息,不可变更。
    ECS实例ID 选择作为同步数据源的ECS实例ID。
    说明 当源Redis数据库为集群架构时,选择任一节点的Master所在的ECS实例ID。
    数据库类型 固定为Redis
    实例模式 根据源Redis数据库的架构选择单机版集群版
    端口 填入源Redis数据库的服务端口,默认为6379,本案例填入7000
    说明 当源Redis数据库为集群架构时,填入任一节点的Master的服务端口。
    数据库密码 填入连接源Redis数据库的密码。
    说明 非必填项,如果没有设置密码可以不填。
    目标实例信息 实例类型 选择Redis实例
    实例地区 购买数据同步实例时选择的目标实例地域信息,不可变更。
    实例ID 选择目标Redis实例ID。
    数据库密码 填入连接目标Redis实例的密码。
    说明 数据库密码格式为<user>:<password>。例如,Redis实例自定义的用户名为admin,密码为Rp829dlwa,则此处填入的数据库密码为admin:Rp829dlwa。
  7. 单击页面右下角的授权白名单并进入下一步
    说明 此步骤会将DTS服务器的IP地址,自动添加到源ECS实例的内网入方向规则和目标Redis实例的白名单中,用于保障DTS服务器能够正常连接源ECS实例和目标Redis实例。
  8. 配置目标已存在表的处理模式和同步对象。配置处理模式和同步对象
    配置 说明
    目标已存在表的处理模式
    • 预检查并报错拦截:检查目标库是否为空。如果待同步的目标库为空,则通过该检查项目;如果不为空,则在预检查阶段提示错误,数据同步作业不会被启动。
    • 忽略报错并继续执行:跳过目标库是否为空的检查项。
      警告 选择为 忽略报错并继续执行后,如果在同步过程中遇到目标库中的Key与源库中的Key相同,会将源库的数据覆盖写入目标库中,请谨慎选择。
    同步对象
    • 源库对象框中单击待同步的数据库,然后单击将其移动到已选择对象框。
    • 同步对象的选择粒度为库,暂不支持Key粒度的选择。
    映射名称更改

    如需更改同步对象在目标实例中的名称,请使用对象名映射功能,详情请参见库表列映射

    源表DMS_ONLINE_DDL过程中是否复制临时表到目标库
    如源库使用 数据管理DMS(Data Management Service)执行Online DDL变更,您可以选择是否同步Online DDL变更产生的临时表数据。
    • :同步Online DDL变更产生的临时表数据。
      说明 Online DDL变更产生的临时表数据过大,可能会导致同步任务延迟。
    • :不同步Online DDL变更产生的临时表数据,只同步源库的原始DDL数据。
      说明 该方案会导致目标库锁表。
    源、目标库无法连接重试时间
    当源、目标库无法连接时,DTS默认重试720分钟(即12小时),您也可以自定义重试时间。如果DTS在设置的时间内重新连接上源、目标库,同步任务将自动恢复。否则,同步任务将失败。
    说明 由于连接重试期间,DTS将收取任务运行费用,建议您根据业务需要自定义重试时间,或者在源和目标库实例释放后尽快释放DTS实例。
  9. 上述配置完成后单击页面右下角的下一步
  10. 配置同步初始化选项,当前固定为包含全量数据+增量数据Redis同步初始化
    说明
    • DTS会将源Redis实例中的存量数据同步至目标Redis实例中,并同步增量数据。
    • 如果跳出版本相关的报错提示,请您按照提示将源Redis实例升级至指定版本。关于升级版本方式,请参见升级大版本升级小版本
  11. 上述配置完成后,单击页面右下角的预检查并启动
    说明
    • 在同步作业正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动同步作业。
    • 如果预检查失败,单击具体检查项后的提示,查看失败详情。
      • 您可以根据提示修复后重新进行预检查。
      • 如无需修复告警检测项,您也可以选择确认屏蔽忽略告警项并重新进行预检查,跳过告警检测项重新进行预检查。
  12. 预检查对话框中显示预检查通过后,关闭预检查对话框,同步作业将正式开始。
  13. 等待同步作业的链路初始化完成,直至处于同步中状态。数据同步状态
    说明 您可以在 数据同步页面,查看数据同步作业的状态。