Redis 集群扩容和缩容
2019-11-27 本文已影响0人
_str_
集群的伸缩
这里也是使用的docker部署的扩容就是在之前集群的compose中加入了两个容器作为一主和一从 下面是compose
中添加的容器信息 详细集群部署查看Redis集群部署-docker集群
redis-clu-m4:
image: redis-ruby:latest
container_name: redis-clu-m4
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
redis-clu-s4:
image: redis-ruby:latest
container_name: redis-clu-s4
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
添加节点(扩容)
-
准备节点
image
添加一个新的节点为主节点
redis-trib.rb add-node new_host:new_port existing_host:existing_port
// new_host:new_port 为新添加的节点信息
// existing_host:existing_port 集群中任意节点的信息
添加一个新节点为主节点
再次检查节点信息找到添加的节点id
查找节点ID
添加一个新的从节点到之前的主节点下
redis-trib.rb add-node --slave --master-id 主节点的 ID new_host:new_port existing_host:existing_port
主节点 ID 可以使用如下命令查看,此命令还同时输出了各个节点的角色
redis-trib.rb check host:port
// host:port 为集群中任意节点的信息
添加从节点
分配槽数
[root@3604a0ecd95c /]# redis-trib.rb reshard 172.29.0.3:6379
分配槽数
添加成功
查看信息
节点缩容
image.png槽迁移
image.png
节点缩容算法思想
比如有12个槽数 删除节点前有四个master 平均分配槽数是3
现在删除一个master节点 需要吧一个槽分别给还存在的节点
计算方法为 要删除的节点槽数 除 还存在的节点数量
具体操作
redis-trib.rb reshard --from 下线节点 ID --to 集群中的任意主节点 ID --slots 迁移到槽数 之前使用的主节点 IP:端口
操作实例
[root@3604a0ecd95c /]# redis-trib.rb reshard --from fab2f87703848c21fa08260095a33148af7c8864 --to 1c8055980ddfc89db5599dc6304d29315cdba6e7 --slots 4096 172.29.0.4:6379
检查节点信息
image.png
删除从节点
删除从节点
查看删除后的信息
image.png
删除主节点
image.png
注意,这里必须先删除从节点在删除主节点,不然会发生主节点移除后从节点代替主节点的情况 删除的时候会发生错误
使用rebalance来平均分配将槽数给到ip为4的主节点
[root@3604a0ecd95c /]# redis-trib.rb rebalance 172.29.0.4:6379
image.png
因为只需要给其他两个主节点均分两份就可以了 自己也有一份 这就有了上图只有两个出现
假如主节点服务停止后会发生如下情况
先来查看一下节点信息
image.png
将172.29.0.2的redis服务手动停止后会发生错误
image.png再次开启服务
假如你还需要变成原来的 只需要将现在的主的服务给停掉在启动就会回到原来的状态