redis cluster手工迁移槽

2023年 8月 15日 24.9k 0

手动迁移槽如此繁琐的操作,主要是理解一下整体的迁移流程,手动操作一次。

存在如下redis cluster环境:

查看cluster中所有key:

redis-cli -a 123456 -p 6480 -c --cluster call 127.0.0.1:6481 keys *

目前:

6486存在槽位:0-133 2730-2762 8192-8224

6480存在槽位:2763-5460

6482存在槽位:134-2729 5461-8191 10923-16383

6481存在槽位:8225-10922

name该key在6482中的5798槽位,想要将该槽位迁移到6486,步骤如下:

① 让6486节点准备导入槽5798数据:

注意:该操作需要登陆到6486执行,因为需要告诉6486将要导入该槽,但是下面的id为6482的id,因为该槽在6482上。

cluster setslot 5798 importing b83ff768941be3b3fc51c606d582bbdd833c935d //该id为6482的id

确认槽5798的状态:

cluster nodes

② 让6482节点准备导出槽数据:

注意:该操作需要登录到6482节点执行,因为该槽位在该节点上。

cluster setslot 5798 migrating 411180dee264b453bc230dbbf3a4ae35fdc0e2f1 //该id为6486的id

确认槽5798的导出状态开启:

cluster nodes

③ 批量获取5798槽对应的键:

注意:此操作要在6482节点上执行,因为此时槽位还在6482节点上,如果在其他节点执行则会返回(empty array)信息

cluster getkeysinslot 5798 200

可以看到只有一个name key

④ 迁移该key(此处只迁移了一个key):

注意:也需要在6482节点执行,原理同上。

migrate 127.0.0.1 6486 name 0 5000 auth 123456

查看name这个key

返回ASK转向错误,引导用户找到正确节点

此时5798槽还是处于导出的状态:

需要在所有主节点上通知该槽已经指派给了6486。

⑤ 更新5798槽信息:

在所有主节点执行(包括6486):

cluster setslot 5798 node 411180dee264b453bc230dbbf3a4ae35fdc0e2f1

如下:

127.0.0.1:6480> cluster setslot 5798 node 411180dee264b453bc230dbbf3a4ae35fdc0e2f1

127.0.0.1:6481> cluster setslot 5798 node 411180dee264b453bc230dbbf3a4ae35fdc0e2f1

127.0.0.1:6482> cluster setslot 5798 node 411180dee264b453bc230dbbf3a4ae35fdc0e2f1

127.0.0.1:6486> cluster setslot 5798 node 411180dee264b453bc230dbbf3a4ae35fdc0e2f1

再次查看槽位信息:

发现该槽位已经转移到了6486上。

补充:

1、

migrate 127.0.0.1 6486 name 0 5000 auth 123456

因为只迁移了一个key,所以迁移一个key的命令如下:

migrate host port key dbid timeout [copy | replace | auth password | auth2 username password]

迁移多个key的命令如下:

migrate host port "" dbid timeout [copy | replace | auth password | auth2 username password] keys ke1,key2,key3....,keyn

其中:

dbid:为数据库id,因为只有一个库所以为0;

timeout : 控制每次migrate操作的超时时间,默认为60000毫秒;

key:所迁移的key的名字;

"" :代表迁移多个key,后面的keys后面跟的是需要批量迁移的key的名字。

2、

现在比较简单了,可以直接使用命令来迁移。

redis-cli -a 123456 --cluster reshard 127.0.0.1:6386

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论