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
查看创建好的容器:
docker ps
进入到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
输入yes下一步
即可创建成功,查看集群状态
root@6227bdcd5198:/data# redis-cli -c -p 6381
设置一个值,看是哪个主机处理的
第二、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
可以看到redis7已经加入,下一步重新分配哈希槽,
redis-cli --cluster reshard 172.19.62.94:6381
输入4096平均分配,并输入redis7容器ID,输入all,回车
输入yes,并回车,分配完毕
重新查看集群状态,主机redis7已经被加了进来,并已经分配了哈希槽
下一步添加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
第三、集群缩容
我们先将4号从节点删除,也就是redis8,
redis-cli --cluster del-node 172.19.62.94:6388 5399830ba01a7e5cc0fd89de7651e3a49c9b845c
将4号主机redis7所有的4096个哈希槽都给redis1主机:
redis-cli --cluster reshard 172.19.62.94:6381
下一步输入yes
完成后删除redis7主节点:
redis-cli --cluster del-node 172.19.62.94:6387 00cb0aae2ba6aa10847ff7ead7ddf721afbaf40d
检查集群状态:
又回到了原来的3主3从的集群。