Docker系列七——3主3从redis集群安装

一、新建6个docker容器实例

1.1 架构图

在这里插入图片描述

2.1新建命令

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

在这里插入图片描述

二、构建集群关系

2.1 进入容器创建集群

进入容器:

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

创建集群:

redis-cli --cluster create 192.168.136.133:6381 192.168.136.133:6382 192.168.136.133:6383 192.168.136.133:6384 192.168.136.133:6385 192.168.136.133:6386 --cluster-replicas 1
#cluster-replicas 1 表示为每个master节点创建一个slave,即123为主,456为从

如图:6381对应6385,6382对应6386,6384对应6383
在这里插入图片描述
hash槽分配完成代表创建成功
在这里插入图片描述

2.2 进入reids查看集群状态

redis-cli -p 6381
cluster info

在这里插入图片描述

cluster nodes

在这里插入图片描述

三、测试

3.1 单机连接报错

单机连接导致部分key值无法存入,原因是在集群环境中每个节点分配了hash槽,当key值hash之后的结果落在其他主机的槽上时,就会报找不到其他主机的错
在这里插入图片描述
改成集群连接之后再看下

redis-cli -p 6381 -c

在这里插入图片描述

3.2 检查集群状态

进入容器

redis-cli --cluster check 192.168.136.133:6381

在这里插入图片描述

3.3 主从容错切换迁移

#停止node1
docker stop redis-node-1
docker exec -it redis-node-2 /bin/bash
#容器内部
redis-cli -p 6382 -c
cluster nodes

在这里插入图片描述
如图:1号宕机,5号切换为master

恢复1号机

#启动node1
docker start redis-node-1
docker exec -it redis-node-2 /bin/bash
#容器内部
redis-cli -p 6382 -c
cluster nodes

在这里插入图片描述
5号机还是主,1号机还是从;将5号机停止再启动,恢复1为主,5为从。

docker stop redis-node-5
docker start redis-node-5

3.4 主从扩容

3.4.1 新建新主机加入集群
# 新建两个容器6387,6388
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
# 进入容器,将6387作为master加入集群 
docker exec -it redis-node-7 /bin/bash
redis-cli --cluster add-node 192.168.136.133:6387 192.168.136.133:6381
# 检查集群状态
redis-cli --cluster check 192.168.136.133:6381

在这里插入图片描述
如图:6387已加入集群,但是尚未分配槽号

3.4.2 新主机分配槽号
# 重新分配槽号
redis-cli --cluster reshard 192.168.136.133:6381

在这里插入图片描述
分配4096个槽位给6387,需要提供节点ID;4096=16384/4(主节点数);
all模式:将所有节点用作哈希槽的源节点
重新检查集群状态:
在这里插入图片描述
发现原来的新主机的槽位不是连续的,他是从其他三个主机分别获取了大约1364个槽位,达到每个主机节点的槽位都是4096。这样做的原因是重新分配hash槽的速度会更快,完全重分配成本太高。

3.4.3 新主机添加从节点
redis-cli --cluster add-node 192.168.136.133:6388 192.168.136.133:6387 --cluster-slave --cluster-master-id f3b1c4ee14462809ad4b0506e8d027011bcf28f4 #6387主机ID

添加完之后再次检查集群,已成功添加
在这里插入图片描述

3.5 主从缩容

#删除6388
redis-cli --cluster del-node 192.168.136.133:6388 83af4c6288965982bcfbc8721596d1a7228798d7 #6388节点ID
#重新分配6377的槽位
redis-cli --cluster reshard 192.168.136.133:6381
redis-cli --cluster check 192.168.136.133:6381

将1365个槽位从6387转移到6381,如图:
在这里插入图片描述
再将1366个槽位转移到6382,1365个槽位转移给6383
查看集群状态
在这里插入图片描述

#删除6387
redis-cli --cluster del-node 192.168.136.133:6387 f3b1c4ee14462809ad4b0506e8d027011bcf28f4 
redis-cli --cluster check 192.168.136.133:6381

再次查看集群状态
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值