RedisShake是一个开源的Redis迁移工具,可以用于在线迁移和离线迁移(通过备份文件导入)。当你需要迁移部署在其他云厂商上的 Redis集群数据时,如果无法进行在线迁移,你可以选择离线迁移的方式。
在线迁移
在线迁移主要适用于自建Redis Cluster集群迁移到DCS Redis的场景,且两端集群实例能够网络连通,或者有一台中转服务器能够连通两端集群实例。
在线迁移有多种模式,如果SYNC、PSYNC命令未被禁用,建议采用sync_reader模式,否则可使用scan_reader模式,具体见RedisShake官方社区。
1、在DCS控制台创建Redis实例。
注意新创建的Redis实例容量不能小于源端Redis实例的实际使用容量。
2、准备一台云服务器,并安装RedisShake。
RedisShake需既能访问源端缓存实例,也能访问目标端DCS 缓存,需要绑定弹性公网IP
3、获取源集群和目标集群的ip地址。
如果源实例或者目标实例是proxy模式架构,则获取proxy ip即可。
4、编辑RedisShake配置文件。
编辑redis-shake工具配置文件shake.toml,补充迁移双方信息,及迁移模式。
[sync_reader]
cluster = false # set to true if source is a redis cluster
address = "ip:port" # when cluster is true, set address to one of the cluster node
username = "" # keep empty if not using ACL
password = "" # keep empty if no authentication is required
tls = false
sync_rdb = true # set to false if you don't want to sync rdb
sync_aof = true # set to false if you don't want to sync aof
[scan_reader]
cluster = false # set to true if source is a redis cluster
address = "ip:port" # when cluster is true, set address to one of the cluster node
username = "" # keep empty if not using ACL
password = "" # keep empty if no authentication is required
ksn = false # set to true to enabled Redis keyspace notifications (KSN) subscription
tls = false
dbs = [] # set you want to scan dbs such as [1,5,7], if you don't want to scan all
[redis_writer]
cluster = false # set to true if target is a redis cluster
address = "ip:port" # when cluster is true, set address to one of the cluster node
username = "" # keep empty if not using ACL
password = "" # keep empty if no authentication is required
tls = false
5、在线迁移,同步数据。
使用如下命令同步源Redis集群和目标Redis集群数据:
./redis-shake shake.toml
执行日志中出现如下信息,代表全量数据同步完成,进入增量同步阶段:
syncing aof
执行日志出现如下信息时,代表增量同步无新增内容,可手动停止同步:
read_count=[0], read_ops=[0.00], write_count=[0], write_ops=[0.00], src-x, syncing aof, diff=[0]
6、迁移后验证。
数据同步结束后,可使用Redis-cli工具连接DCS 实例,通过dbsize查看key数量,确认数据是否完整导入。
如果数据不完整,可使用flushall或者flushdb命令清理实例中的缓存数据后重新同步。
7、清理RedisShake配置文件。
离线迁移(备份文件导入)
与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景。
1、在DCS控制台创建缓存实例。
注意新创建的Redis实例容量不能小于源端Redis实例的实际使用容量。
2、准备一台云服务器,并安装RedisShake。
RedisShake既能访问源端缓存实例,也能访问目标端DCS 缓存,需要绑定弹性公网IP
3、导出RDB文件。
使用如下命令导出RDB文件:
./redis-cli -h {redis_address} -p {redis_port} -a {password} --rdb {output.rdb}
执行命令后回显"Transfer finished with success.",表示文件导出成功。
4、将导出的RDB文件(含多个)上传到云服务器上。
5、编辑RedisShake配置文件。
编辑redis-shake工具配置文件shake.toml,补充迁移双方信息,及迁移模式。
[rdb_reader]
filepath = "/tmp/dump.rdb"
[redis_writer]
cluster = false # set to true if target is a redis cluster
address = "ip:port" # when cluster is true, set address to one of the cluster node
username = "" # keep empty if not using ACL
password = "" # keep empty if no authentication is required
tls = false
6、在线迁移,同步数据。
使用如下命令同步源Redis集群和目标Redis集群数据:
./redis-shake shake.toml
执行日志中出现如下信息,代表同步完成:
all done
7、迁移后验证。
数据同步结束后,可使用redis-cli工具连接DCS 实例,通过dbsize查看Key数量,确认数据是否完整导入。
如果数据不完整,可使用flushall或者flushdb命令清理实例中的缓存数据后重新同步。
8、清理RedisShake配置文件。