数据传输服务DTS(Data Transmission Service)支持Redis企业版实例间的双向同步,适用于异地多活、数据容灾等多种应用场景,本文介绍数据同步作业的配置流程。
本文通过控制台来完成配置,您也可以通过调用OpenAPI来完成配置,详情请参见调用OpenAPI配置Redis企业版实例间单向或双向数据同步。
前提条件
源和目标实例为阿里云Redis企业版实例(5.0版本)。
说明
- 云数据库Redis企业版(容量存储型)不支持做为源数据库,只能做为目标数据库。
- 云数据库Redis为企业版(持久内存型)为源数据库时,需要用户开启appendonly参数。
- 架构类型不限制,即支持集群版、标准版和读写分离版。
注意事项
- 双向数据同步时,正向数据同步作业会执行
全量数据初始化
和
增量数据同步
,反向数据同步作业仅执行增量数据同步。 警告 双向数据同步作业运行期间,请勿在两端数据库同时对同一个key执行修改或写入操作,否则可能会导致数据不一致。
- DTS在执行全量数据初始化时将占用源库和目标库一定的资源,可能会导致数据库服务器负载上升。如果数据库业务量较大或服务器规格较低,可能会加重数据库压力,甚至导致数据库服务不可用。建议您在执行数据迁移前谨慎评估,在业务低峰期执行数据同步。
- 请勿在源实例中执行
FLUSHDB
和FLUSHALL
命令,否则将导致源和目标的数据不一致。 - 若目标数据库内存不足,触发数据逐出时,由于云数据库Redis版的默认数据逐出策略(maxmemory-policy)为volatile-lru,会导致目标库与源库数据不一致的情况,但不会影响任务的正常运行。
为避免该情况发生,建议将目标库的数据逐出策略设置为noeviction,当目标库内存不足时,数据会写入失败,同时任务也会失败,但目标库不会因为数据逐出而丢失数据。
说明 关于数据逐出策略详情,请参见Redis数据逐出策略介绍。 - 如果源库中的某些Key使用了过期(expire)策略,由于可能存在Key已过期但未被及时删除的情况,所以在目标库中查看到的Key数量(例如通过info命令查看)会比源库的Key数量少。说明 源和目标库中,未设置过期策略或未过期的Key数量是一致的。
- 如果目标Redis实例没有开通直连访问,DTS将采用代理转发模式将数据写入目标实例。 说明 关于直连访问的开通方法,请参见开通直连访问。
- 同步期间,如源和目标Redis实例发生扩缩容(如增加或者减少分片)、规格变配(如扩大内存)、则您需重新配置任务。且为保障数据一致性,在重新配置任务前,建议先清空已同步至源和目标Redis的数据。
- 同步期间,如源和目标Redis实例的连接地址变化(如迁移可用区、经典网络切换专有网络),则您需要重新配置任务。
- 如双向同步任务的源实例或目标实例位于海外地域,则仅支持同地域的双向同步,不支持跨地域的双向同步。例如,支持日本地域间的双向同步,不支持日本地域与法兰克福地域间的双向同步。
- 源库单机版Redis同步到目标库集群版Redis的操作限制:由于集群cluster只允许单个命令操作单个slot,若在源库执行多Key操作时,Key不在同一个slot或涉及多个slot,则会出现以下报错:
建议在DTS同步过程中仅执行单Key操作,以免导致链路中断。CROSSSLOT Keys in request don't hash to the same slot
- 若目标实例的架构类型为集群版且某一个分片达到了内存上限,或目标实例的存储空间不足时,DTS任务会因内存溢出(Out of Memory)而失败。
- 若源或目标实例已开启透明数据加密TDE功能,则暂不支持通过DTS同步数据。
费用说明
同步类型 | 链路配置费用 |
---|---|
库表结构同步和全量数据同步 | 不收费。 |
增量数据同步 | 收费,详情请参见计费概述。 |
支持的同步命令
- 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
- SWAPDB(当源或目标实例的架构为集群版时不支持)
重要
- 不支持同步PUBLISH命令。
- 对于通过EVAL或者EVALSHA调用Lua脚本,在增量数据同步时,由于目标端在执行脚本时不会明确返回执行结果,DTS无法确保该类型脚本能够执行成功。
- 对于List,由于DTS在调用sync或psync进行重传时,不会对目标端已有的数据进行清空,可能导致出现重复数据。
数据库账号的权限要求
数据库 | 权限及授权方式 |
---|---|
源Redis实例 | 读写权限,关于授权方式,请参见创建与管理账号。 |
目标Redis实例 |
操作步骤
执行结果
等待一段时间后,两个同步作业的链路状态均会处于同步中。