docker 第8.2章 复杂安装-redis集群 docker 第8.2章 复杂安装-redis集群

2023-05-08

一、集群算法

redis 第11章 集群算法

二、主从集群配置

首选安装 redis:docker 第7.3章 常规安装-安装redis

新建 6 个

docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
docker ps

https://file.lulublog.cn/images/3/2023/05/oJsX1FPxP1V7wuJXvipNJ1DRlBBjvI.jpg

命令分步解释:

  • docker run:创建并运行docker容器实例

  • --name redis-node-6:容器名字

  • --net host:使用宿主机的IP和端口,默认

  • --privileged=true:获取宿主机 root 用户权限

  • -v /data/redis/share/redis-node-6:/data:容器卷,宿主机地址:docker内部地址

  • redis:6.0.8:redis镜像和版本号

  • --cluster-enabled yes:开启 redis 集群

  • --appendonly yes:开启持久化

  • --port 6386:redis端口号

进入容器 redis-node-1并为 6 台机器构建集群关系

进入容器

docker exec -it redis-node-1 /bin/bash

构建主从关系

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

--cluster-replicas 1 表示为每个 master 创建一个 slave 节点

01.jpg

一切 OK 的话,3 主 3 从搞定

链接进入 6381 作为切入点,查看集群状态

redis-cli -p 6381
cluster info

https://file.lulublog.cn/images/3/2023/05/AJL2wJP0cGCc2992lCAYogy0O9Ja2c.jpg

cluster nodes

https://file.lulublog.cn/images/3/2023/05/o0ZyLaTnbtL5ClF7bncC7VaGY0c5aC.jpg

exit

三、主从容错切换迁移案例

对 6381 新增两个 key,防止路由失效加参数 -c 并新增两个 key

redis-cli -p 6381
set k1 v1
exit
redis-cli -p 6381 -c
set k1 v-cluser1
set k2 v-cluser2
exit

https://file.lulublog.cn/images/3/2023/05/tHt6BBVLeVPz4b6YzPz0VLnN6X4YUL.jpg

redis-cli -p 6381 -c
get k1
get k2
exit

https://file.lulublog.cn/images/3/2023/05/l3jpj85Jj3wSWJUzWQ3Jfups8c0W5S.jpg

redis-cli -p 6382 -c
get k1
get k2
exit

https://file.lulublog.cn/images/3/2023/05/VRUVZ9Ug5IDV9uRZwwERUW61JwpEXg.jpg

查看集群信息

redis-cli --cluster check ip:6381
exit

https://file.lulublog.cn/images/3/2023/05/HhhI3isvVVKxZ31VHE0LTKTTH4UN1S.jpg

容错切换迁移:主 6381 和从机切换,先停止主机 6381,6381主机停了,对应的真实从机上位。

6381 作为 1 号主机分配的从机以实际情况为准,具体是几号机器就是几号

docker stop redis-node-1
docker exec -it redis-node-2 /bin/bash
redis-cli -p 6382 -c
cluster nodes
exit
exit

https://file.lulublog.cn/images/3/2023/05/pNmen89E4buQfi499B9naz88URnFRR.jpg

6381 宕机了,6386上位成为了新的 master。

备注:本次测试 6381 为主下面挂从 6386。每次案例下面挂的从机以实际情况为准,具体是几号机器就是几号。

恢复 6381 的 master,6386 的 slave。

备注:主从机器分配情况以实际情况为准。

docker start redis-node-1
docker stop redis-node-6
docker exec -it redis-node-1 /bin/bash
redis-cli -p 6381 -c
cluster nodes
exit
exit

https://file.lulublog.cn/images/3/2023/05/zu4Qz1Z53a3IGGfMpa3ZJjUBjA24Mz.jpg

docker start redis-node-6
docker exec -it redis-node-1 /bin/bash
redis-cli -p 6381 -c
cluster nodes
exit
exit

https://file.lulublog.cn/images/3/2023/05/E3ee3Mi35JInCmn85XG05IMCPJJnNX.jpg

四、主从扩容案例

新建 6387、6388 两个节点+新建后启动+查看是否 8 节点

docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/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 /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
docker ps

https://file.lulublog.cn/images/3/2023/05/EgyyZYYrtB1J8rabZkYYJt1yYjyArY.png

进入 6387 容器实例内部,将新增的 6387 节点(空槽号)作为 master 节点加入原集群

docker exec -it redis-node-7 /bin/bash
redis-cli --cluster add-node IP:6387 IP:6381

https://file.lulublog.cn/images/3/2023/05/wtUVsREu6W3eu66Jbee36uIveEesZE.jpg

第一次检查集群情况

redis-cli --cluster check IP:6381

https://file.lulublog.cn/images/3/2023/05/xKfV5kP0bpBfRntVbk0035KP57vzpB.jpg

暂时没有槽号,重新分派槽号

redis-cli --cluster reshard IP:6381
4096
9c12cf267ae08ef371b54bd077dde89093d7b8c1-------这个是6387的编号,按照自己实际情况
all
yes

备注:16384/master台数=16384/4=4096

https://file.lulublog.cn/images/3/2023/05/RM5X8gCngo88nFlEi3877XO7Kxq551.jpg

第二次检查集群情况

redis-cli --cluster check IP:6381

https://file.lulublog.cn/images/3/2023/05/RWyPUD3Pqvw9wZ4QZ2PZg04vUG9cyQ.jpg

槽号分派说明:为什么 6387 是 3 个新的区间,以前的还是连续?重新分配成本太高,所以前 3 家各自匀出来一部分,从 6381/6382/6383 三个旧节点分别匀出 1364 个坑位给新节点 6387。

为主节点6387分配从节点6388

redis-cli --cluster add-node IP:6388 IP:6387 --cluster-slave --cluster-master-id 6387节点ID

https://file.lulublog.cn/images/3/2023/05/E8V05kz5K9x5UVd555ZKu1K9nvwzK6.jpg

第三次检查集群情况

redis-cli --cluster check IP:6381

https://file.lulublog.cn/images/3/2023/05/Rk9H2KAbMbvk3dcVhP9eCa42WW59M9.jpg

这里得到的 6388 的节点ID:3ce43009eb53a9ce30499f908598a99452b97b74

五、主从缩容案例

目的:6387 和 6388 下线

将 6388 删除 从集群中将 4 号从节点 6388 删除

redis-cli --cluster del-node IP:6388 6388节点ID

https://file.lulublog.cn/images/3/2023/05/MbmGl788dMFGaA8Z2m84bLM8MsfqQ9.jpg

第一次检查集群情况

redis-cli --cluster check IP:6381

检查一下发现,6388 被删除了,只剩下 7 台机器了

https://file.lulublog.cn/images/3/2023/05/GQIqiKL2kM5klrQ5iWrCiBhHcQLqkr.jpg

将 6387 的槽号清空,重新分配,本例将清出来的槽号都给 6381

redis-cli --cluster reshard IP:6381
4096
0b9f807f3adb20b993fdcd04781eb5fcdbbc24fa-------这个是6381的编号,按照自己实际情况
9c12cf267ae08ef371b54bd077dde89093d7b8c1-------这个是6387的编号,按照自己实际情况
done
yes

第二次检查集群情况

redis-cli --cluster check IP:6381

4096 个槽位都指给 6381,它变成了 8192 个槽位,相当于全部都给 6381 了

https://file.lulublog.cn/images/3/2023/05/X0unzh77Q17n830bWgeKwZgHk7b778.jpg

将 6387 删除

redis-cli --cluster del-node IP:6387 6387节点ID

https://file.lulublog.cn/images/3/2023/05/SuZeg76mvmceEb6B0I0XmUHHee7AJx.jpg

第三次检查集群情况

redis-cli --cluster check IP:6381

发现 6387 已经删除成功

https://file.lulublog.cn/images/3/2023/05/KaxJx94P9X0jk8Ll2VK81vPV42z2V1.jpg

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开微信扫一扫,即可进行扫码打赏哦

阅读 352

docker文章

带到手机上看