Docker 中redis集群扩容、缩容
适逢双十一等大型活动流量爆增时redis集群扛不住了,这个时候怎么办呢,不能说把redis停了,我再搭建一个5主5从集群吧,这个时候就需要用到redis自动扩容。
1、redis集群设计
redis官网有这么一段话,大概意思是 redis集群设计了16384个槽位,然后针对每个集群主节点,需要分配一些或者一个槽位,这样一来,最大就是可以有16384个集群主节点(一个槽位一个节点),但是因为redis集群超过1000个节点后,速度会变慢,所以就建议最大1000个集群主节点。
注意:这里说的是主节点
接上篇3主3配置,我们可以看到redis将16384个槽位平均分配到3个主节点
说到这里,大家知道怎么集群怎么扩容了吗,那就是将槽位再分配下呗。
2、新建6387、6388两个Redis容器节点
涉及命令:
docker run -d --name redis-node-7 --net host --privileged=true -v /usr/local/tool/volumn/redis/node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387;
docker run -d --name redis-node-8 --net host --privileged=true -v /usr/local/tool/volumn/redis/node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388;
命令选项这里就不说了,不懂的看下上篇
实例:
3、将新增的6387节点(空槽位)作为master节点加入原集群
进入任意节点(非6387、6388),执行命令
涉及命令:
#命令格式: redis-cli --cluster add-node 要新增的节点IP:Port 当前进入的节点IP:Port
redis-cli --cluster add-node 192.168.13.61:6387 192.168.13.61:6381
实例:
4、检查集群情况第1次
涉及命令:
redis-cli --cluster check 192.168.13.61:6381
实例:
5、重新分派槽位
进入任意节点(非6388),执行命令
涉及命令:
redis-cli --cluster reshard 192.168.13.61:6381
实例:
选择yes即可执行槽位重新分配
6、检查集群情况第2次
执行命令同4
实例:
7、为主节点6387分配从节点6388
涉及命令:
#格式 redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID
#新主机节点ID 可以通过redis-cli --cluster check 192.168.13.61:6381 查到
redis-cli --cluster add-node 192.168.13.61:6388 192.168.13.61:6387 --cluster-slave --cluster-master-id 351512dc4c50f36ac3ac9f3e334094e69fbef59f
实例:
8、检查集群情况第3次
执行命令同4
实例:
至此,redis扩容就实现了,轻松愉快的扛过活动,活动过后是不是得缩回3主3从呢?
9、删除6387从节点
进入任意节点(非6387),执行命令
涉及命令:
#格式 redis-cli --cluster del-node ip:端口 节点ID
redis-cli --cluster del-node 192.168.13.61:6388 d106683d0f11ca8f294133dbd696f41fc85f2cde
注意:必须先删除从节点,否则报错(主节点槽位需要被分配其他主节点后才可以删除)
实例:
10、将6387主节点槽位分给其他主节点
进入任意节点,执行命令
涉及命令:
#192.168.13.61:6381 可以为任意节点IP:Port
redis-cli --cluster reshard 192.168.13.61:6381
11、删除6387节点
涉及命令:
redis-cli --cluster del-node 192.168.13.61:6387 351512dc4c50f36ac3ac9f3e334094e69fbef59f
实例: