集群伸缩
Redis 集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以下线部分节点进行缩容。
1、槽和数据与节点的对应关系
当主节点分别维护自己负责的槽和对应的数据,如果希望加入1个节点实现集群扩容时,需要通过相关命令把一部分槽和数据迁移给新节点。
对目标节点发送导入命令,让目标节点准备导入槽的数据。
2)对源节点发送导出命令,让源节点准备迁出槽的数据。
3)源节点循环执行迁移命令,将槽跟数据迁移到目标节点。redis-trib
提供了槽重分片功能,命令如下:
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。
迁移操作
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
主从节点设置
扩容之初我们把6397、6398节点加入到集群,节点6397迁移了部分槽和数据作为主节点,但相比其他主节点目前还没有从节点,因此该节点不具备故障转移的能力。
这时需要把节点6398作为6397的从节点,从而保证整个集群的高可用。使用 cluster replicate{masterNodeId}
命令为主节点添加对应从节点。
收缩集群
收缩集群意味着缩减规模,需要从现有集群中安全下线部分节点,下线节点过程如下
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。