RedisShake是一款开源的Redis迁移工具,支持Cluster集群的在线迁移与离线迁移(备份文件导入)。DCS Cluster集群与Redis Cluster集群设计一致,数据可平滑迁移。
本文以Linux系统环境为例,介绍如何使用Redis-Shake工具进行Cluster集群数据迁移。
约束与限制
使用RedisShake工具将自建的Redis Cluster在线迁移到DCS Cluster集群,需要源Redis与目标Redis网络连通,或者通过一台中转云主机连通两端的Cluster集群实例。
前提条件
如果您还没有目标Redis,请先创建目标Redis,具体操作请参考创建实例。
如果您已有目标Redis,则不需要重复创建,为了对比迁移前后数据及预留足够的内存空间,建议在数据迁移之前清空目标实例数据,清空操作请参考清空实例数据。如果没有清空实例数据,数据迁移后,目标Redis与源Redis实例重复的数据迁移后会被覆盖,源Redis没有、目标Redis有的数据会保留。
已创建弹性云主机ECS。
ECS请选择与DCS Cluster集群实例相同虚拟私有云、子网和安全组,并且需要绑定弹性公网IP。
自建的源Redis Cluster集群如果是在本地或者其他云厂商的服务器上自建,需要允许被公网访问。
获取源Redis和目标Redis节点信息
1. 分别连接源端和目标端Redis。连接Redis的方法请参考使用redis-cli连接Redis实例。
2. 在线迁移Cluster集群时需要将Cluster集群各个节点数据分别迁移。执行如下命令分别查询源端和目标Cluster集群的所有节点的IP地址与端口:
redis-cli -h {redis_address} -p {redis_port} -a {redis_password} cluster nodes
{redis_address}为Redis的连接地址,{redis_port}为Redis的端口,{redis_password}为Redis的连接密码。
在命令返回的结果中,获取所有master节点的IP端口。


配置RedisShake工具
1. 登录弹性云主机ECS。
2. 在ECS中执行以下命令下载RedisShake。本文以下载4.3.2版本为例,您可以根据实际需要下载其他RedisShake版本。
wget https://github.com/tair-opensource/RedisShake/releases/download/v4.3.2/redis-shake-v4.3.2-linux-amd64.tar.gz
3. 执行命令解压RedisShake文件。
mkdir redis-shake-v4.3.2
tar -C redis-shake-v4.3.2 -xzvf redis-shake-v4.3.2-linux-amd64.tar.gz
4. 执行命令进入解压后的文件目录。
cd redis-shake-v4.3.2
5. 编辑RedisShake工具配置文件shake.toml,补充源端与目标端信息。
vim shake.toml
修改内容如下:
[sync_reader]
#源端实例是Redis Cluster集群时,配置为true
cluster = true
#源端Cluster集群任意一个节点的IP地址与端口
address = {redis_ip}:{redis_port}
#如果无密码,本项不填
password = {source_redis_password}
[redis_writer]
#目标端实例是Redis Cluster集群时,配置为true
cluster = true
#目标端Cluster集群任意一个节点的IP地址与端口
address = {redis_ip}:{redis_port}
#如果无密码,本项不填
password = {target_redis_password}
修改后按下Esc键退出编辑模式,输入:wq!按回车键保存配置并退出编辑界面。
在线迁移数据
使用如下命令同步源Redis集群和目标Redis集群数据:
./redis-shake shake.toml
执行日志中出现如下信息,代表全量数据同步完成,进入增量同步阶段:
syncing aof
执行日志出现如下信息时,代表增量同步无新增内容,可手动停止同步(Ctrl + C):
write_ops=[0.00], src-*, syncing aof, diff=[0]
图 RedisShake在线迁移示意图
迁移后验证
1. 数据同步结束后,连接DCS Cluster集群,连接Redis的方法请参考使用redis-cli连接Redis实例。
2. 通过info命令查看Keyspace中的Key数量,确认数据是否完整导入。
如果数据不完整,可使用flushall或者flushdb命令清理目标实例中的缓存数据后重新迁移。
3. 迁移验证完成后,建议及时清理RedisShake配置文件中的配置。