Docker中搭建Redis三主三从集群

本文详细介绍了如何在Docker环境下搭建3主3从的Redis集群,确保高可用性和数据安全性。当主机宕机时,从机能够自动接管并保持数据不丢失。随后,文章演示了如何进行集群的扩容,将规模扩大到4主4从,通过添加新节点和重新分配槽位实现。最后,还展示了如何进行集群缩容,包括移除从机和主机的步骤,确保操作过程的灵活性。
摘要由CSDN通过智能技术生成

前言

安装Redis请参考
本文按照3个主机,3个从机的架构进行搭建,当其中任何一个主机挂掉以后,他所对应的从机都会上位,成为主机,接替他的工作,并且数据也不会丢失,当挂掉的主机复机以后,将不会再是主机,而是作为从机,若是还想让其恢复主机的身份,那么可以将刚才上位的从机停止,再重启

搭建步骤

  • 此处按照3主3从的架构搭建
    1.新建6个docker容器redis实例
docker run -d --name redis-node-1 --net host --privileged=true -v /myredisdata/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 /myredisdata/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 /myredisdata/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 /myredisdata/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 /myredisdata/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 /myredisdata/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

上诉命令解释:
docker run:创建并运行docker容器实例
-d:后台运行
--name redis-node-6:容器名称
--net host:使用宿主机的IP和端口,默认
--privileged=true:获取宿主机root用户权限
-v /myredisdata/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台机器构建集群关系

进入容器

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

构建集群关系
获取IP

ifconfig

在这里插入图片描述
将IP替换到如下命令中,执行

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

出现如下界面执行成功
在这里插入图片描述
输入yes,同意本次分配,分配结果如下
在这里插入图片描述
3.进入6381端口下的redis,查看集群状态

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

进入redis客户端

## 此处的 -c 参数的作用是,优化路由,
##避免在不加当前参数直接连接redis的情况下,存入数据时,因为存在哈希槽分配,
##从而导致不是该哈希槽内的数据无法存入,指定 -c 以后,不是该哈希槽内的数据,
##在存储时,就会从定向到指定哈希槽内

 redis-cli -p 6381 -c

查看集群状态

 cluster info

在这里插入图片描述
查看节点状态

cluster nodes

在这里插入图片描述

默认分配的节点关系为:(此处的节点关系由系统分配,所以每一次可能都不一样)

主机(Master)从机(Slave)
端口号6381端口号6485
端口号6382端口号6486
端口号6383端口号6484

-集群扩容
对之前的3主3从进行扩容,扩容到4主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

2.进入6387容器实例内部

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

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

## 将新增的6387作为master节点加入集群
## redis-cli --cluster add-node 自己实际IP地址:本次添加的节点端口号  自己实际IP地址:目标集群节点的端口号


redis-cli --cluster add-node 172.31.126.115:6387 172.31.126.115:6381

出现如下界面表示执行成功
在这里插入图片描述
4.查看集群情况,此时的6387是没有槽位的

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

在这里插入图片描述

5.重新分配槽位

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

在这里插入图片描述
输入yes同意本次分配
6.再次查看集群情况

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

在这里插入图片描述
注意:此处6387的槽位,并不是按照每个主机4096个槽位重新均等分配,因为重新分配成本太高,所以前3个主机各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387,所以会出现图中的3个区间

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

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

redis-cli --cluster add-node 172.31.126.115:6388 172.31.126.115:6387 --cluster-slave --cluster-master-id 3d6a4344dd6d80bc2eb1971a183817a9d15c5d72

出现如下界面扩容成功
在这里插入图片描述

  • 集群缩容
    对集群进行缩容时,应该先删除从机,再删除主机

1.移除从机

# redis-cli --cluster del-node ip:从机端口 从机6388节点ID
 
redis-cli --cluster del-node 172.31.126.115:6388  001092b879da488f2944d23e2bc37c1ac08a1114

2.将6387的槽号清空,重新分配

redis-cli --cluster reshard 172.31.126.115:6381

在这里插入图片描述
3.删除6387节点

# redis-cli --cluster del-node ip:端口 6387节点ID
 
redis-cli --cluster del-node 172.31.126.115:6387  3d6a4344dd6d80bc2eb1971a183817a9d15c5d72
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亿只王菜菜

各位爷,赏口饭吃吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值