redis cluster 集群redis5.xj数据迁移

集群搭建参考我上片文章
https://blog.csdn.net/sinat_36759535/article/details/106605884

现在网上大都是基于3.x和4.x的迁移方案;他们通常是使用唯品会开源的redis-migrate-tool实现
但是我亲测,在两个redis cluster都是5.x的情况下,迁移是失败的。
https://github.com/tanruixing88/redis-migrate-tool

redis5.x集群数据迁移方案如下:
最终方案如下
1.将要创建新集群的redis服务一个一个加入旧redis集群中,
2.将旧redis集群的master槽位移动到新加入集群的redis机器中
3.将旧集群的redis服务一个一个关闭

旧redis集群如下:
旧redis集群是三主三从

外部IP内部IPPORT角色
10.74.20.13192.168.3.67000master
10.74.20.13192.168.3.67001master
10.74.20.13192.168.3.67002master
10.74.20.13192.168.3.67003slave 是port 7002的从节点
10.74.20.13192.168.3.67004slave 是port 7000的从节点
10.74.20.13192.168.3.67005slave 是port 7001的从节点

新reids地址如下:

外部IP内部IPPORT
10.74.20.13192.168.3.67000
10.74.20.13192.168.3.67001
10.74.20.13192.168.3.67002
10.74.20.13192.168.3.67003
10.74.20.13192.168.3.67004
10.74.20.13192.168.3.67005

数据迁移后redis集群结果如下:
新redis集群数据迁移后也是三主三从

外部IP内部IPPORT角色
10.74.20.14192.168.3.78000master
10.74.20.14192.168.3.78001slave 是port 8000的从节点
10.74.20.14192.168.3.78002mater
10.74.20.14192.168.3.78003slave 是port 8002的从节点
10.74.20.14192.168.3.78004master
10.74.20.14192.168.3.78005slave 是port 8004的从节点

一:将新redis加入集群中

在旧redis集群中,找个redis客户端执行下面命令

**步骤一:**先加入一台redis机器

# redis-cli --cluster add-node 新机器IP:port 集群中的一台机器IP:port
/usr/local/redis/bin/redis-cli --cluster add-node 10.74.20.14:8000 10.74.20.13:7000

在这里插入图片描述
在新redis机器10.74.20.14 的redis客户端命令行查看
在这里插入图片描述
通过上面,可以看出新机器已经加入进集群,但是并没有分配hash槽位数据

步骤二:重新分配哈希槽

原理是:把原redis集群的一个master角色的redis槽位的数据迁移到该新加入的redis服务中
下面用颜色标注出对应的关系

#redis-cli --cluster reshard 新机器IP:port
 /usr/local/redis/bin/redis-cli --cluster reshard 10.74.20.14:8000

在这里插入图片描述
执行后的结果如下
在redis集群的任意一个redis的客户端上执行如下命令:

CLUSTER NODES

在这里插入图片描述

设置主从

先加入一台新的redis机器

# redis-cli --cluster add-node 新机器IP:port 集群中的一台机器IP:port
/usr/local/redis/bin/redis-cli --cluster add-node 10.74.20.14:8001 10.74.20.13:7000

指定8001从节点的主节点ID,这里我们填写8000服务节点ID

# cluster replicate 
cluster replicate f0462a41c86a7fb736be72f0db20775163296701

查看集群

CLUSTER NODES

由于当时做实验,没有截图,后面补上的。红线划掉的不要纠结,那是我后面把旧机器关闭,留下的,不想给大家产生争议。
在这里插入图片描述

步骤三

按照上面的步骤一道步骤二,把全部新redis机器加入集群,把master数据迁移,并且设置好对应从节点。

步骤四

把旧redis集群中的每个redis实例关闭
进入每个旧redis集群机器中执行

SHUTDOWN

步骤五

验证集群是否OK
进入新集群,登录任意一个redis客户端
执行

# 进入客户端
 /usr/local/redis/bin/redis-cli -p 8002 -c
 CLUSTER INFO

在这里插入图片描述

CLUSTER NODES

在这里插入图片描述

随便查询几个key,看能不能查看,这里有个小主意点,如果是slave节点,理论上也可以从slave节点查到数据,但是集群模式下默认会去mater节点拿数据。如果想数据在slave上有的话直接拿,先执行readonly 再执行get xx 就可直接从slave节点拿到数据

参考文档:
https://blog.csdn.net/QwQNightmare/article/details/105030277
https://blog.51cto.com/phpme/2447995
https://blog.csdn.net/jo_andy/article/details/97291190

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值