入职半年,公司做的产品之前前辈都用的是redis3,不过集群还是使用最新的redis5比较好。redis3和redis5在Spring当中只需要在配置中配置好就能用,无使用差异,所以可以大胆升级。
在升级时选用开源的redis-migrate-tool做数据迁移,但是这个工具太老,redis4及以上版本的支持太差。
所以我们使用阿里开源的redis-shark来做数据迁移,这里做的是将redis3的RDB文件取出,再转到redis5集群中。
Redis-Shark开源项目:传送门
Redis-Shark中文文档:传送门
Redis-Shark官方编译包:传送门(版本为1.6,截至2019.12月1.6为最新版)
以下使用的是redis-shake-1.6.24.tar.gz
解压
由于是官方编译好的包,直接解压后就能使用,极为方便。
tar -xf redis-shake-1.6.24.tar.gz
原官方中文文档中有配置示例,此工具的配置都极为简单,这里只讲将集群的RDB文件转到另一集群的配置过程。
此句话是对文章的补充,之前的方案是先准备好rdb文件,但其实不用,在官方github上有直接将现有集群中的数据备份成rdb的过程,很简单,各位可移步参考,有时间我再补充到文章里.
首先进入解压出的文件夹中,将已有的配置文件备份一个出来,作为配置的参考。
cd redis-shake-1.6.24
cp cp redis-shake.conf redis-shake.conf.bak
redis-shark.conf配置如下,添加更多的配置需要仔细阅读redis-shark.conf.bak(之前复制出来的备份配置文件)。
其中source.rdb.input需要配置所有源Redis-Cluster的rdb文件路径,复制到做操作的机器上。
而target.address需要将新集群的所有地址和端口号配置上去。
source.rdb.input只需要配置Master节点的数据文件.
# 默认即可
id = redis-shake
# 源库类型redis-cluster集群
source.type = cluster
# 源库rdb存放路径
source.rdb.input = /mnt/redis_rdb/52-7002/dump.rdb;/mnt/redis_rdb/53-7002/dump.rdb;/mnt/redis_rdb/54-7002/dump.rdb
# 有密码就设置
# source.password_raw: 12345
# 目标库类型redis-cluster
target.type = cluster
# 目标库集群的所有节点
target.address = 10.20.52.52:7003;10.20.52.52:7004;10.20.52.53:7003;10.20.52.53:7004;10.20.52.54:7003;10.20.52.54:7004
# 有密码就设置
# target.password_raw: 12345
使用相应平台对应的redis-shark工具,此处是在linux上做的操作,故选择redsi-sharke.linux。
-conf指定配置文件路径 -type指定操作类型,现在要将rdb“恢复”到新集群所有选择restore参数。
./redis-shake.linux -conf=redis-shake.conf -type=restore
若要检查源和目标是否数据统一,可选择阿里配套工具RedisFullCheck
项目地址: https://github.com/alibaba/RedisFullCheck