集群扩容
1.比如加入两个集群,用6379meet两个新实例
redis-cli -p 6379
cluster meet 127.0.0.1:7001
cluster meet 127.0.0.1:7002
在任意节点查看是否刚才两个节点加进来了
cluster nodes
2.加入集群的作用
2.1 为它迁移槽和数据实现扩容
2.2 作为从节点负责故障转移
3.使用redis-trib.rb加入集群
./redis-trib.rb add-node new_host:new_port existing_host:existing_port --slave --master-id
e.g
redis-trib.rb add-node 127.0.0.1:7001 127.0.0.1:6379
建议使用redis-trib.rb,能够避免新节点已加入了其他集群,造成故障
4.迁移槽
用16384个槽去平均节点
5.迁移数据
1.对目标节点发送:cluster setslot {slot} importing {sourceNodeId},让目标节点准备导入槽的数据
2.对源节点发送:cluster setslots {slot} migrating {targetNodeId},让源节点准备迁出槽的数据
3.源节点循环执行:cluster getkeysinslot {slot} {count}命令,每次获取count个属于槽的键
4.在源节点上执行:migrate {targetId} {targetPort} key 0 {timeout} 命令把指定key迁移
5.重复执行步骤3-4知道槽下所有的键数据迁移到目标节点
6.向集群内所有主节点发送:cluster setslot {slot} node {targetNodeId}命令,通知槽分配给目标节点
6.使用redis-trib.rb迁移数据
./redis-trib.rb reshard 任意一个分配了槽的主节点(127.0.0.1:6379)
集群收缩
收缩集群步骤分为 下线迁移槽——忘记节点——关闭节点

1.下线迁移槽
./redis-trib.rb reshard --from {下线节点的nodeId} --to {迁移节点的nodeId} --slots {槽个数} {下线节点的host:port}
2.忘记节点。如果忘记的节点有从节点,首先需要删除从节点
./redis-trib.rb del-node 127.0.0.1:6379 {从节点nodeId}
./redis-trib.rb del-node 127.0.0.1:6379 {忘记节点的nodeId}