之前介绍过《使用redis-migrae-tool迁移Redis集群的数据》,但是这个工具很久不更新了,于是就找到了阿里开源的Redis-Shake作为本次迁移的工具。

Redis-Shake简介

Redis-shake 是一个用于在两个 redis之 间同步数据的工具,满足用户非常灵活的同步、迁移需求。

安装部署

如果两个集群能通信,那么任意找一台机器部署即可,如果不能通信,那么需要在源集群和目标集群中都需要部署一个。

下载Redis-Shake

1
wget https://github.com/alibaba/RedisShake/releases/download/release-v2.0.3-20200724/redis-shake-v2.0.3.tar.gz

解压

1
2
mkdir redis-shake
tar -zxvf redis-shake-v2.0.3.tar.gz -C redis-shake

修改配置文件

本次迁移的两个集群分布是5.0.56.2.5,不过这个倒没有跨版本的问题。分别查看两个集群的master节点及端口

5.0.5集群

1
2
3
4
5
6
7
cluster nodes
8b33f273386c9504ef8bd10b005e24825b3b9596 10.10.100.197:7001@17001 master - 0 1628824461416 2 connected 5461-10922
06851aa134d50096d82a434eced9194233b5204e 10.10.100.197:7003@17003 slave 8b33f273386c9504ef8bd10b005e24825b3b9596 0 1628824461515 4 connected
a42297b65f7101fc9e4941ef8a0e65080d1b6338 10.10.100.197:7005@17005 slave 0aa20378d14e3ef0859815196cbafa67e1001d0e 0 1628824461515 6 connected
e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 10.10.100.197:7002@17002 master - 0 1628824460113 3 connected 10923-16383
fe355eed99100197f43d1216d1de82643dd496a5 10.10.100.197:7004@17004 slave e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 0 1628824460415 5 connected
0aa20378d14e3ef0859815196cbafa67e1001d0e 10.10.100.197:7000@17000 myself,master - 0 1628824461000 1 connected 0-5460

6.2.5集群

1
2
3
4
5
6
7
cluster nodes
c9ce81a1d93db0c7fc6c5f6d795949560e579840 10.40.80.18:7003@17003 slave 1924b7a138e3fa11309eef26832fe443be5a95ca 0 1628825002180 3 connected
1924b7a138e3fa11309eef26832fe443be5a95ca 10.40.80.18:7002@17002 master - 0 1628825001578 3 connected 10923-16383
447c5cfc918fde8fb64737dc8a6359f368083fb5 10.40.80.18:7005@17005 slave 2af9d5e1529aa6d03906e6848e4ee65aa8501e06 0 1628825001177 2 connected
2af9d5e1529aa6d03906e6848e4ee65aa8501e06 10.40.80.18:7001@17001 master - 0 1628825000574 2 connected 5461-10922
64d26b57e7a95c99bfa563f3d4191a5760216efa 10.40.80.18:7000@17000 myself,master - 0 1628825000000 1 connected 0-5460
271dc2158b0aefc5906b7b1ed2781a7f3999a385 10.40.80.18:7004@17004 slave 64d26b57e7a95c99bfa563f3d4191a5760216efa 0 1628825002582 1 connected

修改配置文件

1
vim redis-shake.conf

根据上面的信息填写如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 源:集群模式
source.type = cluster
# 源:master节点
source.address = 10.10.100.197:7000;10.10.100.197:7001;10.10.100.197:7002
# 源:密码 (没有就不填)
source.password_raw =

# 目标redis的类型,支持standalone,sentinel,cluster和proxy四种模式。
target.type = cluster
# 目标:master节点
target.address = 10.40.80.18:7000;10.40.80.18:7001;10.40.80.18:7002
# 目标:密码 (没有就不填)
target.password_raw =

主要改以上内容,至于其他配置及功能可以参考这个配置文件中的注释。

迁移Redis Cluster数据

在线迁移

在两个Redis集群之间是可以互相通信的情况下:

1
./redis-shake -type sync -conf redis-shake.conf 

如果出现sync rdb done表示全量数据同步完成,接着会同步增量数据,如果集群已经停止写操作,可以手动关闭。

离线迁移

如果两个集群互相不能通信,需要导出rdb文件即可。

在源集群中修改配置文件

1
2
3
4
5
6
7
8
9
vim redis-shake.conf

# 只需要填写如下信息
# 源:集群模式
source.type = cluster
# 源:master节点
source.address = 10.10.100.197:7000;10.10.100.197:7001;10.10.100.197:7002
# 源:密码 (没有就不填)
source.password_raw =

然后执行命令导出rdb文件,上传rdb文件到目标集群。

1
./redis-shake -type dump -conf redis-shake.conf

在目标集群中修改配置文件

1
2
3
4
5
6
7
8
9
10
11
vim redis-shake.conf

# 目标redis的类型,支持standalone,sentinel,cluster和proxy四种模式。
target.type = cluster
# 目标:master节点
target.address = 10.40.80.18:7000;10.40.80.18:7001;10.40.80.18:7002
# 目标:密码 (没有就不填)
target.password_raw =

#需要导入的rdb文件列表,用分号分隔
rdb.input = local_dump.0;local_dump.1;local_dump.2;local_dump.3

然后执行命令导入rdb文件

1
./redis-shake -type restore -conf redis-shake.conf