docker高级(redis集群三主三从)

1. 新建6个docker容器redis实例

powershell 复制代码
docker run -d --name redis-node-1 --net host --privileged=true -v /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 /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 /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 /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 /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 /redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

·命令分步解释

docker run

创建并运行docker容器实例

--name redis-node-6

容器名字

--net host

使用宿主机的IP和端口,默认

--privileged=true

获取宿主机root用户权限

-v /redis/share/redis-node-6:/data

容器卷,宿主机地址:docker内部地址

redis:6.0.8

redis镜像和版本号

--cluster-enabled yes

开启redis集群

--appendonly yes

开启持久化

--port 6386

redis端口号

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

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

构建主从关系

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

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

powershell 复制代码
redis-cli --cluster create 192.168.111.147:6381 192.168.111.147:6382 192.168.111.147:6383 192.168.111.147:6384 192.168.111.147:6385 192.168.111.147:6386 --cluster-replicas 1

执行过程中输入yes,回车

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

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

powershell 复制代码
redis-cli -p 6381

cluster info

cluster nodes


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

·数据读写存储

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

·对6381新增两个key

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

powershell 复制代码
set name orange

加入参数-c,优化路由

powershell 复制代码
#退出
exit
#-c登录
redis-cli -p 6381 -c

#插入数据
set k1 v1

·查看集群信息

powershell 复制代码
redis-cli --cluster check 192.168.111.147:6381

·容错切换迁移

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

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

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

·再次查看集群信息

powershell 复制代码
#停止redis-node1
docker stop redis-node-1

#进入reids-node2容器
docker exec -it redis-node2 /bin/bash

#查看集群
redis-cli -p 6382 -c

cluster nodes

前后对比

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

每次案例下面挂的从机以实际情况为准,具体是几号机器就是几号

先还原之前的3主3从

powershell 复制代码
docker start redis-node-1

docker stop redis-node-4

docker start redis-node-4

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

4、主从扩容案例

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

powershell 复制代码
docker run -d --name redis-node-7 --net host --privileged=true -v /redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
powershell 复制代码
docker run -d --name redis-node-8 --net host --privileged=true -v /redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

·进入6387容器实例内部

powershell 复制代码
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的码头从而找到组织加入集群

powershell 复制代码
redis-cli --cluster add-node 192.168.5.20:6387  192.168.5.20:6381

·检查集群情况第1次

powershell 复制代码
redis-cli --cluster check 192.168.2.20:6381

·重新分派槽号

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

powershell 复制代码
redis-cli --cluster reshard 192.168.5.20:6381

·检查集群情况第2次

powershell 复制代码
redis-cli --cluster check 192.168.2.20: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

powershell 复制代码
redis-cli --cluster add-node 192.168.5.20:6388 192.168.5.20:6387  --cluster-slave  --cluster-master-id
e4781f644d4a4e4d4b4d107157b9ba8144631451

e4781f644d4a4e4d4b4d107157b9ba8144631451-------这个是6387的编号,按照自己实际情况

·检查集群情况第3次

powershell 复制代码
redis-cli --cluster check 192.168.111.147:6382

5、主从缩容案例

·目的:6387和6388下线

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

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

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

powershell 复制代码
redis-cli --cluster del-node 192.168.111.147:6388 5d149074b7e57b802287d1797a874ed7a1a284a8

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

powershell 复制代码
redis-cli --cluster reshard 192.168.111.147:6381

检查集群情况第二次

·将6387删除

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

powershell 复制代码
redis-cli --cluster del-node 192.168.111.147:6387 e4781f644d4a4e4d4b4d107157b9ba8144631451


#检查集群
redis-cli --cluster check 192.168.111.147:6381

没有了6387

6、设置redis集群密码

powershell 复制代码
登录redis
docker exec -it redis-node-1 /bin/bash
redis-cli -p 6381 -c
powershell 复制代码
#设置密码
config set requirepass 'password'  

#设置从节点连接主节点的密码
config set masterauth 'password'	
相关推荐
!!!5251 小时前
华为云镜像加速器
docker·容器·华为云
xidianjiapei0012 小时前
Kubernetes的Ingress 资源是什么?
云原生·容器·kubernetes
sszdzq4 小时前
Docker
运维·docker·容器
dmy4 小时前
docker 快速构建开发环境
后端·docker·容器
逻各斯5 小时前
redis中的Lua脚本,redis的事务机制
java·redis·lua
土豆沒加5 小时前
K8S的Dashboard登录及验证
云原生·容器·kubernetes
终端行者7 小时前
kubernetes1.28部署mysql5.7主从同步,使用Nfs制作持久卷存储,适用于centos7/9操作系统,
数据库·容器·kubernetes
2401_897930067 小时前
linux系统如何配置host.docker.internal
linux·docker·eureka
阿桢呀8 小时前
Redis实战篇《黑马点评》5
数据库·redis·缓存
Kerwin要坚持日更9 小时前
一文讲解Redis中的主从复制
数据库·redis·缓存