redis集群扩容以及收缩

2,421 阅读1分钟

集群扩容

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}