主要分为两步
- 槽迁移计划
- 迁移数据
槽迁移计划
迁移数据
我们按照一个槽来举例,主要分为下面几个步骤
对目标节点执行命令,让目标节点准备导入槽的数据
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。