基于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停一会儿再启动,两个节点身份就会再次互换回来


相关文章
|
1月前
|
JavaScript 算法 前端开发
【Docker项目实战】使用Docker部署paopao-ce微社区
【Docker项目实战】使用Docker部署paopao-ce微社区
218 84
【Docker项目实战】使用Docker部署paopao-ce微社区
|
2月前
|
运维 Cloud Native 开发者
Docker:现代化应用开发与部署的神器
Docker:现代化应用开发与部署的神器
190 101
|
21天前
|
存储 Docker Python
docker 部署 sftp
本文介绍SFTP服务的部署与配置,包括users.conf用户配置规则、Docker容器运行命令及上传目录权限说明,重点解析atmoz/sftp镜像的chroot机制与子目录映射,确保用户登录后正确访问/upload目录,并提供Python脚本实现文件上传示例。
72 12
docker 部署 sftp
|
22天前
|
运维 Linux 数据库
基于 Docker 部署 n8n 指南,新手一看就会
本教程详解如何通过 Docker 快速部署开源自动化工具 n8n,适合新手快速上手。内容涵盖官方部署步骤、常见难点及第三方一键部署方案,助你高效搭建自动化工作流平台。
383 6
|
13天前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
29天前
|
前端开发 JavaScript 应用服务中间件
在Docker部署的前端应用中使用动态环境变量
以上步骤展示了如何在 Docker 配置过程中处理并注入环墨遁形成可执行操作流程,并确保最终用户能够无缝地与之交互而无须关心背后复杂性。
89 13
|
1月前
|
存储 Kubernetes 持续交付
为什么Docker容器化改变了开发与部署?
为什么Docker容器化改变了开发与部署?
|
5月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
22天前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
112 1
Redis专题-实战篇二-商户查询缓存