Redis 集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的状况下,能够为集群添加节点进行扩容也能够下线部分节点进行缩容。node
当主节点分别维护本身负责的槽和对应的数据,若是但愿加入1个节点实现集群扩容时,须要经过相关命令把一部分槽和数据迁移给新节点。
对目标节点发送导入命令,让目标节点准备导入槽的数据。
2)对源节点发送导出命令,让源节点准备迁出槽的数据。
3)源节点循环执行迁移命令,将槽跟数据迁移到目标节点。redis-trib
提供了槽重分片功能,命令以下:3d
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。
迁移操做code
redis-trib.rb reshard ip:6379
打印出集群每一个节点信息后,reshard 命令须要确认迁移的槽数量,这里咱们根据节点个数输入对应的值:
输入某个节点的节点 ID 做为目标节点,目标节点只能指定一个:
What is the receiving node ID xxxx
以后输入源节点的 ID,这里分别输入相应的节点 ID 最后用 done 表示结束:
数据迁移以前会打印出全部的槽从源节点到目标节点的计划,确认计划无误后输入 yes 执行迁移工做
redis-trib 工具会打印出每一个槽迁移的进度:
查看节点的信息cluster-node
输入 redis-trib.rb rebalance ip:port
主从节点设置
扩容之初咱们把639七、6398节点加入到集群,节点6397迁移了部分槽和数据做为主节点,但相比其余主节点目前尚未从节点,所以该节点不具有故障转移的能力。blog
这时须要把节点6398做为6397的从节点,从而保证整个集群的高可用。使用 cluster replicate{masterNodeId}
命令为主节点添加对应从节点。图片
收缩集群意味着缩减规模,须要从现有集群中安全下线部分节点,下线节点过程以下ip