Docker部署Redis集群部署、扩容、缩容 &解决 Waiting for the cluster to join

redis除了占用的端口(默认为6379)之外,还会占用部署的端口+10000的端口作为集群总线端口,需要将这个端口也在防火墙中开放出去,否则redis集群部署一直卡在Waiting for the cluster to join

第一、3主3从redis集群搭建

本次在wsl的centos环境中,使用docker创建6个redis容器,redis1容器除了绑定6381端口,还需要绑定16381端口,其它容器也一样要绑定,如下:

docker run -itd -p 6381:6381 -p 16381:16381 --name redis1 --privileged=true -v /tmp/redis/node1:/data redis --cluster-enabled yes --appendonly yes --port 6381
docker run -itd -p 6382:6382 -p 16382:16382 --name redis2 --privileged=true -v /tmp/redis/node2:/data redis --cluster-enabled yes --appendonly yes --port 6382
docker run -itd -p 6383:6383 -p 16383:16383 --name redis3 --privileged=true -v /tmp/redis/node3:/data redis --cluster-enabled yes --appendonly yes --port 6383
docker run -itd -p 6384:6384 -p 16384:16384 --name redis4 --privileged=true -v /tmp/redis/node4:/data redis --cluster-enabled yes --appendonly yes --port 6384
docker run -itd -p 6385:6385 -p 16385:16385 --name redis5 --privileged=true -v /tmp/redis/node5:/data redis --cluster-enabled yes --appendonly yes --port 6385
docker run -itd -p 6386:6386 -p 16386:16386 --name redis6 --privileged=true -v /tmp/redis/node6:/data redis --cluster-enabled yes --appendonly yes --port 6386

image.png

查看创建好的容器:

docker ps


image.png

进入到redis1容器:

docker exec -it redis1 /bin/bash

创建Redis集群,172.19.62.94为wsl本机IP

redis-cli --cluster create 172.19.62.94:6381 172.19.62.94:6382 172.19.62.94:6383 172.19.62.94:6384 172.19.62.94:6385 172.19.62.94:6386 --cluster-replicas 1

image.png

输入yes下一步

image.png

即可创建成功,查看集群状态

image.png

root@6227bdcd5198:/data# redis-cli -c -p 6381

image.png

设置一个值,看是哪个主机处理的

image.png

第二、3主3从集群扩容到4主4从

增加2台redis容器:

docker run -itd -p 6387:6387 -p 16387:16387 --name redis7 --privileged=true -v /tmp/redis/node7:/data redis --cluster-enabled yes --appendonly yes --port 6387
docker run -itd -p 6388:6388 -p 16388:16388 --name redis8 --privileged=true -v /tmp/redis/node8:/data redis --cluster-enabled yes --appendonly yes --port 6388

进入redis7号容器:

docker exec -it redis7 /bin/bash

添加主节点redis7到集群,并检查集群状态

redis-cli --cluster add-node 172.19.62.94:6387 172.19.62.94:6381
redis-cli --cluster check 172.19.62.94:6381

image.png

可以看到redis7已经加入,下一步重新分配哈希槽,

redis-cli --cluster reshard 172.19.62.94:6381

image.png

输入4096平均分配,并输入redis7容器ID,输入all,回车

image.png

输入yes,并回车,分配完毕

image.png

重新查看集群状态,主机redis7已经被加了进来,并已经分配了哈希槽

image.png

下一步添加redis8 slave节点,挂在redis7节点下面,并查看状态:

redis-cli --cluster add-node 172.19.62.94:6388 172.19.62.94:6387 --cluster-slave --cluster-master-id 00cb0aae2ba6aa10847ff7ead7ddf721afbaf40d
redis-cli --cluster check 172.19.62.94:6381

image.png

第三、集群缩容

我们先将4号从节点删除,也就是redis8,

redis-cli --cluster del-node 172.19.62.94:6388 5399830ba01a7e5cc0fd89de7651e3a49c9b845c

image.png将4号主机redis7所有的4096个哈希槽都给redis1主机:

redis-cli --cluster reshard 172.19.62.94:6381

image.png

下一步输入yes

image.png

完成后删除redis7主节点:

redis-cli --cluster del-node 172.19.62.94:6387 00cb0aae2ba6aa10847ff7ead7ddf721afbaf40d

image.png

检查集群状态:

image.png

又回到了原来的3主3从的集群。