Docker的3主3从redis集群配置(扩容和缩容配置)

3主3从redis集群配置

1、关闭防火墙+启动docker后台服务

bash 复制代码
systemctl start docker

2、新建6个docker容器redis实例

bash 复制代码
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

如果运行成功,效果如下:

命令分步解释

bash 复制代码
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端口号

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

进入容器

bash 复制代码
docker exec -it redis-node-1 /bin/bash

构建主从关系

//注意,进入docker容器后才能执行一下命令,且注意自己的真实IP地址

redis-cli --cluster create 192.168.xx.xx:6381 192.168.xx.xx:6382 192.168.xx.xx:6383 192.168.xx.xx:6384 192.168.xx.xx:6385 192.168.xx.xx:6386 --cluster-replicas 1

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

·

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

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

·链接进入6381作为切入点,查看节点状态

bash 复制代码
cluster info
bash 复制代码
·cluster nodes

·主从容错切换迁移案例

·1、数据读写存储

·启动6机构成的集群并通过exec进入

·对6381新增两个key

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

加入参数-c,优化路由

·查看集群信息

bash 复制代码
redis-cli --cluster check 192.168.xx.xx:6381

·2、容错切换迁移

·主6381和从机切换,先停止主机6381

·6381主机停了,对应的真实从机上位

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

·再次查看集群信息

·先还原之前的3主3从

中间需要等待一会儿,docker集群重新响应。

bash 复制代码
先启6381
docker start redis-node-1
再停6385
docker stop redis-node-5
再启6385
docker start redis-node-5

·主从机器分配情况以实际情况为准

·查看集群状态

bash 复制代码
redis-cli --cluster check 自己IP:6381

·主从扩容案例

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

bash 复制代码
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
bash 复制代码
docker ps

进入6387容器实例内部

bash 复制代码
docker exec -it redis-node-7 /bin/bash

将新增的6387节点(空槽号)作为master节点加入原集群

将新增的6387作为master节点加入集群

redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381

6387 就是将要作为master新增节点

6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群

·检查集群情况第1次

bash 复制代码
redis-cli --cluster check 真实ip地址:6381

·重新分派槽号

重新分派槽号

命令:

redis-cli --cluster reshard IP地址:端口号

bash 复制代码
redis-cli --cluster reshard 192.168.xx.xx:6381

·检查集群情况第2次

redis-cli --cluster check 真实ip地址:6381

·槽号分派说明

为什么6387是3个新的区间,以前的还是连续?

重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387

·为主节点6387分配从节点6388

命令:redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

redis-cli --cluster add-node 192.168.111.147:6388 192.168.111.147:6387 --cluster-slave --cluster-master-id e4781f644d4a4e4d4b4d107157b9ba8144631451-------这个是6387的编号,按照自己实际情况

·检查集群情况第3次

bash 复制代码
redis-cli --cluster check 192.168.xx.xx:6382

主从缩容案例

目的:6387和6388下线

·检查集群情况1获得6388的节点ID

bash 复制代码
redis-cli --cluster check 192.168.xx.xx:6382

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

命令:redis-cli --cluster del-node ip:从机端口 从机6388节点ID

bash 复制代码
redis-cli --cluster del-node 192.168.xx.xx:6388 5d149074b7e57b802287d1797a874ed7a1a284a8
bash 复制代码
redis-cli --cluster check 192.168.xx.xx:6382

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

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

bash 复制代码
redis-cli --cluster reshard 192.168.xx.xx:6381

·检查集群情况第二次

bash 复制代码
redis-cli --cluster check 192.168.xx.xx:6381

4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了,不然要输入3次,一锅端

·将6387删除

命令:redis-cli --cluster del-node ip:端口 6387节点ID

bash 复制代码
redis-cli --cluster del-node 192.168.xx.xx:6387 e4781f644d4a4e4d4b4d107157b9ba8144631451

·检查集群情况第三次

bash 复制代码
redis-cli --cluster check 192.168.xx.xx:6381

笔记来源:Docker

相关推荐
宠友信息1 小时前
多端数据互通场景下Spring Boot仿小红书源码结构设计
数据库·spring boot·redis·缓存·架构
长不胖的路人甲2 小时前
Redis 缓存的数据持久化方案讲解
数据库·redis·缓存
长不胖的路人甲2 小时前
Redis 单线程为什么速度很快
数据库·redis·缓存
彦为君2 小时前
算法思维与经典智力题
java·前端·redis·算法
ejinxian3 小时前
微虚拟机 smolvm 与Docker 容器比较
运维·docker·容器·smolvm
彦为君4 小时前
Redis最新版本特性
java·数据库·redis·算法·bootstrap
爱码少年4 小时前
Docker如何一次查看多个容器日志
运维·docker·容器
长不胖的路人甲4 小时前
Redis 数据删除策略
数据库·redis·spring
蜀道山老天师4 小时前
K8s 数据存储全解析:从 EmptyDir 到 PV/PVC
云原生·容器·kubernetes
尽兴-5 小时前
Redis 为什么快?
数据库·redis·内存