redis5.x数据迁移

集群搭建参考我上片文章
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 内部IP PORT 角色
10.74.20.13 192.168.3.6 7000 master
10.74.20.13 192.168.3.6 7001 master
10.74.20.13 192.168.3.6 7002 master
10.74.20.13 192.168.3.6 7003 slave 是port 7002的从节点
10.74.20.13 192.168.3.6 7004 slave 是port 7000的从节点
10.74.20.13 192.168.3.6 7005 slave 是port 7001的从节点

新reids地址如下:

外部IP 内部IP PORT
10.74.20.13 192.168.3.6 7000
10.74.20.13 192.168.3.6 7001
10.74.20.13 192.168.3.6 7002
10.74.20.13 192.168.3.6 7003
10.74.20.13 192.168.3.6 7004
10.74.20.13 192.168.3.6 7005

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

外部IP 内部IP PORT 角色
10.74.20.14 192.168.3.7 8000 master
10.74.20.14 192.168.3.7 8001 slave 是port 8000的从节点
10.74.20.14 192.168.3.7 8002 mater
10.74.20.14 192.168.3.7 8003 slave 是port 8002的从节点
10.74.20.14 192.168.3.7 8004 master
10.74.20.14 192.168.3.7 8005 slave 是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

redis5.x数据迁移
在新redis机器10.74.20.14 的redis客户端命令行查看
redis5.x数据迁移
通过上面,可以看出新机器已经加入进集群,但是并没有分配hash槽位数据

步骤二:重新分配哈希槽

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

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

redis5.x数据迁移
执行后的结果如下
在redis集群的任意一个redis的客户端上执行如下命令:

CLUSTER NODES

redis5.x数据迁移

设置主从

先加入一台新的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

由于当时做实验,没有截图,后面补上的。红线划掉的不要纠结,那是我后面把旧机器关闭,留下的,不想给大家产生争议。
redis5.x数据迁移

步骤三

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

步骤四

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

SHUTDOWN

步骤五

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

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

redis5.x数据迁移

CLUSTER NODES

redis5.x数据迁移

随便查询几个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

上一篇:# Redis5+(6.0.9) CentOS 7.6+ 安装及其主从哨兵配置(1主2从3哨兵)搭建


下一篇:Redis5种基本数据结构底层实现