RedisCluster 如何迁移数据

2022-06-24 14:09:16 浏览数 (1)

主要分为两步

  1. 槽迁移计划
  2. 迁移数据

槽迁移计划

迁移数据

我们按照一个槽来举例,主要分为下面几个步骤

对目标节点执行命令,让目标节点准备导入槽的数据

2.对源节点执行命令,让源节点准备迁出槽的数据

代码语言:javascript复制
cluster setslot <slot> migrating <target_node_id>

3.源节点循环执行命令,获取到count个数据槽的数据

代码语言:javascript复制
cluster getkeysinslot <slot> <count>

4.在源节点执行命令,把可以迁移过去

代码语言:javascript复制
migrate <target_Ip> <target_port>  key 0 <timeout>

5.重复执行3,4步骤直到槽下的数据到目标节点

6.向集群中的其他主节点执行命令,通知槽已经分配给了目标节点

代码语言:javascript复制
cluster setslot <slot> node <target_node_id>

整体流程如下

前面有介绍过手动迁移槽的过程,但是过程繁琐,容易出错,所以我们也可以用redis-cli自动迁移槽

代码语言:javascript复制
redis-trib.rb reshard host:port --from <arg> --to <arg> --slots <arg> --yes --timeout <arg> --pipeline <arg>
参数说明:
host:port:必传参数,集群内任意节点地址,用来获取整个集群信息。
--from:制定源节点的id,如果有多个源节点,使用逗号分隔,如果是all源节点变为集群内所有主节点,在迁移过程中提示用户输入。
--to:需要迁移的目标节点的id,目标节点只能填写一个,在迁移过程中提示用户输入。
--slots:需要迁移槽的总数量,在迁移过程中提示用户输入。
--yes:当打印出reshard执行计划时,是否需要用户输入yes确认后再执行reshard。
-timeout:控制每次migrate操作的超时时间,默认为60000毫秒。
--pipeline:控制每次批量迁移键的数量,默认为10。

0 人点赞