标签
SQL Server
Redis
MySQL
其它
Oracle
外部链接
redis cluster 分布式集群之三( 集群伸缩)

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槽迁移计划

平均槽数量

image.png

数据迁移

image.png

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}命令,通知槽分配给目标节点

迁移流程图

image.png

3、收缩集群

流程图

image.png

1、下线迁移槽

image.png

2、忘记节点

执行命令:redis-cli>cluster forget {downNodeId}

image.png

说明:所有节点都要执行忘记节点

3、关闭节点

扫一扫手机看
点击排行
订阅号
...