RedisShake是一款开源的Redis迁移工具,支持Cluster集群的在线迁移与离线迁移(备份文件导入)。当部署在其他云厂商Redis服务上的Cluster集群数据,无法在线迁移时,可以选择离线迁移。
本文以Linux系统环境为例,介绍如何使用Redis-Shake工具进行Cluster集群数据离线迁移。
离线迁移(备份文件导入)
与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移。
- 在DCS控制台创建Cluster集群实例。
注意集群的内存规格不能小于源端Cluster集群。
- 分别获取源端与目标端Cluster集群的Master节点IP地址与端口。
redis-cli -h {redis_address} -p {redis_port} -a {redis_password} cluster nodes
在命令返回的结果中,获取所有master节点的IP端口,如下如所示:
说明安装了Redis后,自带redis-cli命令。如CentOS下安装Redis:yum install redis
- 准备一台云主机,并安装RedisShake
RedisShake需要能访问目标端DCS Cluster集群,也需要绑定弹性公网IP,以便将备份文件上传到云主机。
建议使用弹性云主机(ECS),且ECS与DCS Cluster集群实例配置相同虚拟私有云、子网与安全组。
Redis-Shake工具可下载release版本,解压缩后即可使用。(此处以下载Redis-Shake v2.1.2为例,您可以根据实际需要选择其他Redis-Shake版本。)
说明如果源端集群部署在数据中心内网,则需在内网服务器上安装RedisShake,并参考下述步骤进行数据导出,然后将数据文件上传到云主机。
- 导出RDB文件
编辑redis-shake工具配置文件redis-shake.conf,补充源端与目标端所有master节点的连接信息:
source.type = cluster
#如果无密码,本项不填
source.password_raw = {source_redis_password}
#源Cluster集群所有master节点的IP地址与端口,以分号分隔
source.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:{masterN_port}
导出源Redis集群的RDB格式备份文件
./redis-shake -type dump -conf redis-shake.conf
执行日志中出现如下信息时导出备份文件完成:
execute runner[*run.CmdDump] finished!
- 导入RDB文件
a. 将导出的RDB文件(含多个)上传到与云主机上。云主机与目标端DCS Cluster集群实例的网络连通。
b. 编辑RedisShake配置文件。
编辑redis-shake工具配置文件redis-shake.conf,补充源端与目标端所有master节点的连接信息:
target.type = cluster
#如果无密码,本项不填
target.password_raw = {target_redis_password}
#目标Cluster集群所有master节点的IP地址与端口,以分号分隔
target.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:{masterN_port}
#需要导入的rdb文件列表,用分号分隔
rdb.input = local_dump.0;local_dump.1;local_dump.2;local_dump.3
保存并退出文件编辑。
c. 使用如下命令导入rdb文件到目标Cluster集群:
./redis-shake -type restore -conf redis-shake.conf
执行日志中出现如下信息时导入备份文件完成:
Enabled http stats, set status (incr), and wait forever.
- 迁移后验证
数据同步结束后,可使用redis-cli工具连接DCS Cluster集群,通过info命令查看Keyspace中的Key数量,确认数据是否完整导入。
如果数据不完整,可使用flushall或者flushdb命令清理实例中的缓存数据后重新同步。