1、伸缩原理
槽和数据在节点之间的移动
2、扩容集群
2.1、准备新节点
2.1.1集群模式
2.1.2配置和其它节点同意
2.2.3启动后是孤儿节点
2.2、加入集群
方法:cluster meet加入集群
作用:为它迁移槽和数据、作为从节点负责故障转移
使用redis-trib.rb去加入集群:
命令redis-trib.rb add-node new_host:new_port existing_host:existing_port --save --master-id<arg>
例如:redis-trib.rb add-node 127.0.0.1:6385 127.0.0.1:6379
建议使用redis-trib.rb能避免新节点已经加入了其它集群造成故障,解释:因为redis-trib.rb会检测新节点是否加入过其它集群,是不是一个孤儿节点。
2.3、迁移槽和数据
2.3.1槽迁移计划
平均槽数量

数据迁移

2.3.2数据数据过程
a、对目标节点发送:cluster setslot {slot} importing {source NodeId}命令,让目标节点准备导入槽的数据
b、对源节点发送:cluster setslot {slot} migrating {target NodeId}命令,让源节点准备迁出槽的数据
c、源节点循环执行:cluster getkeysinslot {slot} {count} 命令,每次获取count个属于槽的键
d、在源节点上执行:migrate {targetIp} {targetPort} key 0 {timeout}命令,把指定key迁移
说明:第三步是个死循环,每次第三步都会执行第四步,第四步是判定是否还有要迁移的数据,通过timeout超时来决定超时状态,返回0时则结束四循环,无数据了
e、重发执行步骤3和4,直到槽下所有的键数据迁移到目标节点
f、向集群内所有主节点发送:cluster setslot {slot} node {targetNodeId}命令,通知槽分配给目标节点
迁移流程图

3、收缩集群
流程图

1、下线迁移槽

2、忘记节点
执行命令:redis-cli>cluster forget {downNodeId}

说明:所有节点都要执行忘记节点
3、关闭节点