从ECS上的Twemproxy Redis集群同步至Redis实例
更新时间:2020-05-12 10:09:29
阿里云数据库Redis版是兼容开源Redis协议标准、提供内存加硬盘混合存储的数据库服务,基于高可靠双机热备架构及可平滑扩展的集群架构,可充分满足高吞吐、低延迟及弹性变配的业务需求。通过数据传输服务DTS(Data
Transmission Service),您可以将Twemproxy Redis同步至阿里云Redis实例。
前提条件
- 阿里云Redis实例的存储空间需大于源Twemproxy Redis数据库已使用的存储空间。
- 源Twemproxy Redis集群中的每个Master节点必须能够执行
psync
命令。
同步原理介绍
DTS通过同步Twemproxy Redis集群中的每个Redis-Server来实现集群的整体同步,您需要为每个Redis-Server创建一个对应的数据同步作业。

Twemproxy Redis集群环境介绍
在本案例中,Twemproxy Redis集群具备两个Redis-Server,每个Redis-Server采用一主一从的架构,详情请参见下图。

注意事项
- DTS在执行全量数据初始化时将占用源库和目标库一定的资源,可能会导致数据库服务器负载上升。如果数据库业务量较大或服务器规格较低,可能会加重数据库压力,甚至导致数据库服务不可用。建议您在执行数据同步前谨慎评估,在业务低峰期执行数据同步。
- 为保障同步链路稳定性,建议将源集群的配置文件redis.conf中
repl-backlog-size
参数的值适当调大。 - 为保障同步质量,DTS会在源集群中插入一个key:
DTS_REDIS_TIMESTAMP_HEARTBEAT
,用于记录更新时间点。 - 请勿在源集群中执行
FLUSHDB
和FLUSHALL
命令,否则将导致源和目标的数据不一致。 - 如果目标库的数据逐出策略(
maxmemory-policy
)配置为noeviction
以外的值,可能导致目标库的数据与源库不一致。关于数据逐出策略详情,请参见Redis数据逐出策略介绍。 - 目标阿里云Redis实例支持的版本为2.8、4.0或5.0版本,如需跨版本同步(仅支持从低版本同步到高版本)请提前确认兼容性。例如创建按量付费的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、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
说明
- 对于通过EVAL或者EVALSHA调用Lua脚本,在增量数据同步时,由于目标端在执行脚本时不会明确返回执行结果,DTS无法确保该类型脚本能够执行成功。
- 对于List,由于DTS在调用sync或psync进行重传时,不会对目标端已有的数据进行清空,可能导致出现重复数据。
操作步骤
执行结果
本案例的Twemproxy Redis集群具备两个Redis-Server,所以创建两个数据同步作业。如下图所示,这两个数据同步作业完成同步初始化后,已经都处于同步中状态。

本案例同步的数据库为DB0,通过DMS登录Redis集群后与源Twemproxy Redis集群进行对比,Key总数源Twemproxy Redis集群一致。

