集群伸缩
伸缩原理
扩容集群
扩 容 集 群 { 准 备 新 节 点 加 入 集 群 迁 移 槽 跟 数 据 扩容集群 \begin{cases} 准备新节点& \\ 加入集群&\\ 迁移槽跟数据 \end{cases} 扩容集群⎩⎪⎨⎪⎧准备新节点加入集群迁移槽跟数据
准备新节点:
- 集群模式
- 配置与其他节点统一
- 启动后是孤儿节点
加入集群:
127.0.0.1:6379 >cluster meet 127.0.0.1:6385
也可以用redis-trib.rb来加入集群:redis-trib.rb add-node 127.0.0.1:6386
迁移槽跟数据
槽迁移计划
迁移数据:
① 对目标节点发送:cluster setlot {slot} importing {sourceNodeId} 命令让目标节点准备导入槽的数据
②对源节点发送:cluster setlot {slot} migrating {targetNodeId} 命令,让源节点准备迁出槽的数据;
③源节点循环执行:cluster getkeysinslot {slot} {count} 命令,每次获取“count”个属于槽的键;
④在源节点上执行:migrate {targetIp} {targetport} key0 {timeout}命令,把指定key迁移
⑤重复执行③④,直到槽下的所有键跟数据迁移到目标节点
⑥向集群内的所有主节点发送 cluster setlot {slot} node {targetNodeId} 命令,通知槽分配给目标节点;
收缩集群
总结
收缩与扩容的区别:在于在集群中加入/删除一个节点;若加入,将其余节点的槽平均迁移到新的节点;若删除(下线),将要下线的节点的槽迁移到其他节点;