docker安装redis集群--分布式存储案例(二)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: docker安装redis集群--分布式存储案例

3.新建6个redis容器实例


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 run : 创建并运行docker容器实例

--name redis-node-x : 容器的名称

--net host :使用宿主机的IP和端口

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

-v /data/redis/share/redis-node-x:/data :挂载容器数据卷,宿主机地址:docker内部地址

redis:6.0.8 :redis镜像和版本号

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

--appendonly yes : 开启持久化

--port xxxx : 设置redis端口


运行完上面这些命令后,运行docker ps -a 可以查看当前的6个redis容器实例:


c9c9085f1b9f48b98797b14e23ef37d7.png


如果和我一样的话,那就没有问题了。


4.进入容器redis-node-1,并未6台机器构建构建集群关系


其实不一定要进入一号容器,其他几号redis容器也可以。

进入容器:


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


构建主从关系:

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

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


--cluster-replicas 1 表示为每个master创建一个slave节点,集群关联一比一,1主1从对半分。

我们运行后,会有如下显示,会发现哈希槽分区已经帮我们弄好了:


48646e2b72c64ed78042f44e9e341a07.png


之后会让我们选择yes或者no我们选择yes:


b92859927a24407f858db836d0a1b521.png


会看到,redis分配的6381、6382、6383号机为主,而分配6384,6385,8386号机为从。

到这里,如果OK的话,那3主3从就搞定了。


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


进入6381容器


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


进入redis客户端:


redis-cli -p 6381


然后在redis里面查看集群信息:


cluster info


1cb8c0700ba3446b946084690bf80998.png


查看集群的主从信息,显示各台的主从关系:


cluster nodes


下面显示6381的从服务器为6384。6382的从服务器为6385。6383的从服务器为6386。主从关系非常清晰。


ad5c983015244acea5b2b49af6875187.png


但是这还没有完呢


六.主从容错切换迁移案例


我们上面虽然搭建好了3主3从的redis,但是我们只知道他们名下是怎么挂的,我们还需要学习一下这个集群的数据读写存储和容错切换迁移。我们set一个值以后,集群能不能共享数据?而且我们也知道槽位被分为3段的,这3段代表3个主机,那到底key存进来以后他存在哪里?又怎么在集群里面数据共享呢?我们还要考虑到,如果master1主机宕机了,slave1从机会不会补位?主从架构,主机宕机了,要求从机能够补位。这就是我们的俩个要考虑到的需求。


1.数据读写存储


启动6机构成的集群,并通过exec命令进入(多开几个命令窗口)

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


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


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


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


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


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


2.对6381号机新增2个key

进入6381号redis:


redis-cli -p 6381


并可以看到keys没有任何东西:


87eccb3f882b4f558da307e57aceca08.png


我们参数新增一个key和value:

set name lily

6af26f46c8a74823909dc93b3455eae9.png


会发现它报错了,没有存进去,显示要移动到6382号槽位。这是为什么呢?

因为我们的键name被redis集群计算出的hash对应的是5798,1号槽位存储的hash最大值是5460,超过5460就会被要求移动到2号机或其他号机。

相关文章
|
3月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
317 2
|
3月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
253 6
|
2月前
|
关系型数据库 数据库 PostgreSQL
docker 安装 Postgres 17.6
本文介绍如何通过Docker安装和配置PostgreSQL 17.6。内容包括拉取镜像、导出配置文件、运行容器并挂载数据与配置文件目录,以及进入容器使用psql操作数据库的完整步骤,便于持久化管理和自定义配置。
348 3
docker 安装 Postgres 17.6
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
332 5
|
1月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
328 2
|
2月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
206 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
2月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
6月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
下一篇
oss云网关配置