入职半年,公司做的产品之前前辈都用的是redis3,不过集群还是使用最新的redis5比较好。redis3和redis5在Spring当中只需要在配置中配置好就能用,无使用差异,所以可以大胆升级。

在升级时选用开源的redis-migrate-tool做数据迁移,但是这个工具太老,redis4及以上版本的支持太差。

所以我们使用阿里开源的redis-shake来做数据迁移,这里做的是将redis3的RDB文件取出,再转到redis5集群中。

Redis-Shake开源项目:传送门

Redis-Shake中文文档:传送门

Redis-Shake官方编译包:传送门(版本为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

将源RDB转移到新集群

使用相应平台对应的redis-shark工具,此处是在linux上做的操作,故选择redsi-sharke.linux。

-conf指定配置文件路径 -type指定操作类型,现在要将rdb“恢复”到新集群所有选择restore参数。

./redis-shake.linux -conf=redis-shake.conf -type=restore

若要检查源和目标是否数据统一,可选择阿里配套工具RedisFullCheck

项目地址: GitHub - alibaba/RedisFullCheck: redis-full-check is used to compare whether two redis have the same data. redis-full-check用于比较2个redis数据是否一致,支持单节点、主从、集群版、以及多种proxy,支持同构以及异构对比,redis的版本支持2.x-5.x。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐