Docker redis集群扩容缩容

如果此时以redis-cli -p 端口号的方式进入了某个主节点,尝试存入某个key,但是其哈希值不在该节点的哈希槽范围内,则会报如下错误:

解决方法就是以redis-cli -p 端口号 -c进入:

此时,存储ok,并且会跳转到另外一个主机。

上述redis集群的容错机制是:若主节点挂了,从节点会上位,如果主机点恢复,则会变为从机。

接下来介绍扩容:

首先再创建两个实例:

docker run -p 6387:6379 -p 16387:16379 --name redis7 --privileged=true -v /tmp/redis/data7/:/data -d redis --cluster-enabled yes --appendonly yes

docker run -p 6388:6379 -p 16388:16379 --name redis8 --privileged=true -v /tmp/redis/data8/:/data -d redis --cluster-enabled yes --appendonly yes

进入redis7容器,执行如下命令使其加入集群:

redis-cli --cluster add-node 新加入节点的ip:6379 原集群中某个主机的ip:6379

如果不清楚ip,可以通过cat /etc/hosts查看。接下来重新划分哈希槽:

redis-cli --cluster reshard 集群中某个主节点的ip:6379

这里以redis1容器的ip 172.0.0.2为例,如下图:

输入上述命令后,首先会问你移多少个槽,为了均分,需要移4096个槽位给新加入的节点,然后输入接受节点的id,即新加入节点在集群中的id,然后会问你从哪儿移槽位,这里我们选择所有的节点,输入all:

接下来可能还会有一个确认项,输入yes即可 ,完成分配后,重新检查集群信息:

可以发现,新加入的节点已经分配了4096个槽位(分成了三段),其他三个主节点的槽位都有减少。接下来进入从机redis8容器,执行如下命令使其加入集群并成为redis7的从机:

redis-cli --cluster add-node 从机ip:6379 主机ip:6379 --cluster-slave --cluster-master-id 主机在集群中的id

然后查看集群信息,发现集群已经变为四主四从:

接下来介绍缩容:

首先从集群中删除redis8从机节点 :

redis-cli --cluster del-node 从机ip:6379 从机在集群中的id

在删除redis7主机之前,需要重新分配槽位,即把redis7的4096个槽位分给其他节点,这里全部分给redis1节点:

redis-cli --cluster del-node 主机ip:6379 主机在集群中的id

然后查看集群信息:

可以看到集群已经变为三主三从

经验分享 程序员 微信小程序 职场和发展