基于docker部署redis多主多从集群

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 在docker中部署redis多主多从集群,准备部署三对一主一从服务,共6个

在docker中部署redis多主多从集群,准备部署三对一主一从服务,共6个


首先获取镜像

这里使用的是6.0.8版本


docker pull redis:6.0.8


启动六个容器

docker run -d --name redis-node1 --net host --privileged=true -v /usr/local/redis/node1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6371
docker run -d --name redis-node2 --net host --privileged=true -v /usr/local/redis/node2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6372
docker run -d --name redis-node3 --net host --privileged=true -v /usr/local/redis/node3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6373
docker run -d --name redis-node4 --net host --privileged=true -v /usr/local/redis/node4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6374
docker run -d --name redis-node5 --net host --privileged=true -v /usr/local/redis/node5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6375
docker run -d --name redis-node6 --net host --privileged=true -v /usr/local/redis/node6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6376

命令说明:


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


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


-v /usr/local/redis/node1:/data : 挂载容器数据卷


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


--appendonly yes : 开启持久化


构建主从关系

进入一个容器


docker exec -it redis-node1 /bin/bash

执行下面命令,下面命令中ip换成实际ip(记得打开6个容器使用的端口,以及每个端口+10000的端口,因为redis集群通信使用的端口是主端口+10000。我这里就打开了6371到6376 以及 16371到16376 几个端口)


--cluster-replicas 1  表示1主1从分配


redis-cli --cluster create 111.111.111.111:6371 111.111.111.111:6372 111.111.111.111:6373 111.111.111.111:6374 111.111.111.111:6375 111.111.111.111:6376 --cluster-replicas 1

执行后出现下面内容,显示主从对应关系,可以看到是3主3从,如果同意配置输入yes回车



yes之后出现下面内容表示成功



使用查看集群状态命令同样可以看到上面描述的对应关系等内容,如下


redis-cli --cluster check 111.111.111.111:6371


查看集群信息

同样使用docker exec命令进入容器1


连接redis客户端


redis-cli -p 6271

查看信息


cluster info

可以看到已知节点为6个



查看节点信息


cluster nodes

可以看到三个主节点和三个从节点的ip和端口,从对应的编码来看,4号从机挂在1号主机,5号从机挂在2号主机,6号从机挂在3号主机。这个对应关系不是固定的,可能下次部署的时候对应关系就不是这样了




测试数据读写

同样docker exec进入容器1


使用集群模式连接redis1(普通的单机版连接方式连接之后,存数据可能会出现error情况,原因是存的key计算的hash值跟16383取余之后,不在当前redis节点的存储范围)


后面加个-c就表示以集群方式连接


redis-cli -p 6371 -c

set一个k1 v1 ,会提示重定向到6373所在节点,因为k1计算出来的12706槽位在6373节点范围




宕机切换迁移

当一个主机宕机的时候,从机应该上位为主机


docker stop redis-node1 把6371节点停掉,之后稍等一会儿,等集群内部发心跳通知


进入6372容器,连接6372,查看集群状态



可以看到6371节点已经是fail了,并且之前他的从节点6374上位成了主节点


并且之前存的数据也是可以正常访问的


再次启动6371节点后,查看节点状态,发现6374依旧是master节点,6371变成了slave节点


如果希望还是恢复成原来的6371为主节点,可以把6374停一会儿再启动,两个节点身份就会再次互换回来


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
0
0
0
11
分享
相关文章
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
50 5
|
18天前
|
Ubuntu下部署及操作Docker技巧
以上就是在Ubuntu下部署及操作Docker的具体步骤。但这只是冰山一角,Docker的魅力远不仅如此。你可以将其视为存放各种工具的小箱子,随时随地取用,极大地提升工作效率。你也可以私人订制,适应不同的开发环境,就像一个拥有各种口味冰淇淋的冰箱,满足各种各样的需求。好了,现在你已经掌握了基本的Docker运用技巧,快去尝试使用吧!记住,沉浸在探索中,你会找到无尽的乐趣和满满的收获。
81 23
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
82 10
大模型文件Docker镜像化部署技术详解
大模型文件Docker镜像化部署技术详解
194 2
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作
教你在 Kubernetes 上部署 Redis 高可用集群?
教你在 Kubernetes 上部署 Redis 高可用集群?
398 0
Redis高可用之主从复制、哨兵、cluster集群
Redis高可用之主从复制、哨兵、cluster集群
293 0
下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等