最近想自己开发一个小系统,而我的电脑里还没有安装任何的开发相关的配套软件和环境,所以想着方便以后开发的原则,就想从头到尾搭建一个redis cluster集群环境。一开始觉得这个搭建应该不难,网上有很多现成的资料而且有AI大模型的加持,所以理论上很快能搞定,可结果是我花了大概半天时间才算基本完成环境搭建,因此记录一下整个过程很有必要。

一、涉及软件及环境

序号
软件名称
版本号
1
Windows 11 家庭中文版
26100.4652
2
Docker Desktop
4.44.2 (202017)
3
Another Redis Desktop Manager
1.7.1
4
Git Bash
5.2.37

二、Docker Desktop下载&安装

这个就省略了,请参考《Docker Desktop里搭建Mysql 9.4主从复制的保姆级教程》相关内容。

三、Redis 8.2.1下载&安装

1、在Docker Desktop终端里输入“docker pull redis:latest”,下载最新的redis镜像,如下:
由于我已经下载了,所以这里没有出现下载进度界面,如果想跟我一样的话,请将latest替换成“8.2.1”
2、安装redis集群前的准备工作
  • 新建docker的挂载目录,我是在D:\Users\Docker
  • 在Docker文件夹下新建挂载目录下按照如下说明创建目录,如下:

3、新建一个共享的网络,以便整个redis集群公用
docker network create --subnet=172.20.0.0/16 redis-cluster-net
4、批量生成redis配置的脚本,脚本如下:
#!/bin/bash
for port in $(seq 7001 7006); do
mkdir -p ./${port}/conf
cat <<EOF > ./${port}/conf/redis.conf
port ${port}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
protected-mode no
bind 0.0.0.0
protected-mode no
EOF
done
将脚本保存为“redis-cnf-gen.sh”,放到“D:\Users\Docker\Volumes\redis-cluster”这个下面。
5、打开“Git Bash”,然后输入bash命令“/d/Users/Docker/Volumes/redis-cluster”,切换到这个目录
cd /d/Users/Docker/Volumes/redis-cluster
6、然后在Git Bash终端输入批量生成redis配置的脚本命令,如下
bash ./redis-cnf-gen.sh
界面如下:
生成的效果如下:
生成的配置目录结构如下:
7、容器部署
  • 编写启动6个Redis节点脚本,如下
for port in $(seq 7001 7006); do
docker run -d --name redis-${port} \
-p ${port}:${port} -p 1${port}:1${port} \
-v $(pwd)/${port}/conf:/etc/redis \
-v $(pwd)/${port}/data:/data \
--network redis-cluster-net \
--ip 172.20.0.$((port-6999)) \
redis:latest redis-server /etc/redis/redis.conf
done
  • 将上面的脚本保存为“docker-run-redis.sh”,放到“D:\Users\Docker\Volumes\redis-cluster”下
  • 在Git Bash终端里运行上面脚本,如下:
打开Docker Desktop主窗口,在Containers能看到刚启动的6个redis实例,不过都没有正常运行
点击第一个redis-7001的容器实例,查看日志,如下:
Starting Redis Server
1:C 21 Aug 2025 12:40:54.899 # Fatal error, can't open config file '/data/D:/Program Files/Git/etc/redis/redis.conf': No such file or directory
  • 上面出现的错误是由于Windows系统和Linux系统混用导致环境变化,造成路径解析错误。在每个节点目录出现混乱的目录如下:
  • 后来经过一番搜索实在没法解决这个问题,只能老老实实的一条命令一条命令的执行。方法如下:
  • 删除D:\Users\Docker\Volumes\redis-cluster下7001~7006的目录
  • 手动编写启动6个redis容器实例的脚本,如下:
docker run -d --name redis-7001 -p 7001:7001 -p 17001:17001  -v D:\\Users\\Docker\\Volumes\\redis-cluster\\7001\\conf\\redis.conf:/etc/redis/conf/redis.conf  -v D:\\Users\\Docker\\Volumes\\redis-cluster\\7001\\data:/data  --network redis-cluster-net     --ip 172.20.0.101   redis:latest redis-server /etc/redis/conf/redis.conf

docker run -d --name redis-7002 -p 7002:7002 -p 17002:17002  -v D:\\Users\\Docker\\Volumes\\redis-cluster\\7002\\conf\\redis.conf:/etc/redis/conf/redis.conf  -v D:\\Users\\Docker\\Volumes\\redis-cluster\7002\\data:/data  --network redis-cluster-net     --ip 172.20.0.102   redis:latest redis-server /etc/redis/conf/redis.conf

docker run -d --name redis-7003 -p 7003:7003 -p 17003:17003  -v D:\\Users\\Docker\\Volumes\\redis-cluster\\7003\\conf\\redis.conf:/etc/redis/conf/redis.conf  -v D:\\Users\\Docker\\Volumes\\redis-cluster\\7003\\data:/data  --network redis-cluster-net     --ip 172.20.0.103   redis:latest redis-server /etc/redis/conf/redis.conf

docker run -d --name redis-7004 -p 7004:7004 -p 17004:17004  -v D:\\Users\\Docker\\Volumes\\redis-cluster\\7004\\conf\\redis.conf:/etc/redis/conf/redis.conf  -v D:\\Users\\Docker\\Volumes\\redis-cluster\7004\\data:/data  --network redis-cluster-net     --ip 172.20.0.104   redis:latest redis-server /etc/redis/conf/redis.conf

docker run -d --name redis-7005 -p 7005:7005 -p 17005:17005  -v D:\\Users\\Docker\\Volumes\\redis-cluster\\7005\\conf\\redis.conf:/etc/redis/conf/redis.conf  -v D:\\Users\\Docker\\Volumes\\redis-cluster\\7005\\data:/data  --network redis-cluster-net     --ip 172.20.0.105   redis:latest redis-server /etc/redis/conf/redis.conf

docker run -d --name redis-7006 -p 7006:7006 -p 17006:17006  -v D:\\Users\\Docker\\Volumes\\redis-cluster\\7006\\conf\\redis.conf:/etc/redis/conf/redis.conf  -v D:\\Users\\Docker\\Volumes\\redis-cluster\\7006\\data:/data  --network redis-cluster-net     --ip 172.20.0.106   redis:latest redis-server /etc/redis/conf/redis.conf

温馨提示:如果不想夺走弯路,建议一条一条执行,全部复制执行会有问题。

  • 然后去docker desktop里批量删除刚才的6个容器实例,如下:
 
  • 打开docker desktop容器终端,拷贝上面的脚本,执行,如下:
  • 我们可以看到6个redis实例都成功运行了
8、集群初始化
  • ‌编写执行集群创建命令,如下:
docker exec -it redis-7001 redis-cli --cluster create 172.20.0.101:7001 172.20.0.102:7002 172.20.0.103:7003 172.20.0.104:7004 172.20.0.105:7005 172.20.0.106:7006 --cluster-replicas 1
  • 在docker desktop终端运行上面的命令,如下:
Could not connect to Redis at 172.20.0.101:7001: Connection refused
出现上面的错误,是由于上面的挂载命令有问题,我们可以到任意一个redis容器实例里,查看文件,如下:
看到这个明显是文件夹,而不是文件,我们希望是将配置文件挂载到这里。
  • 按照上面介绍里先批量删除所有的运行的容器实例
  • 再删除D:\Users\Docker\Volumes\redis-cluster下的7001-7006文件夹
  • 在Git Bash运行脚本“redis-cnf-gen.sh”
  • 然后在docker desktop终端里一条一条执行命令:
  • 检查redis-7001里的配置文件是否挂载成功,很明显已经是文件而不是文件夹,成功了。
  • 依次执行剩下的5条语句,成功运行,如下:
  • 继续在docker desktop终端执行创建集群命令:
在提示处输入“yes”,就完成整个集群创建了,出现如下信息代表成功了:
9、集群验证与测试
  • ‌集群状态检查,在docker desktop终端运行如下命令:
docker exec -it redis-7001 redis-cli -p 7001 cluster nodes
可以看到集群成功创建了,3主3从:101、102、103为主节点、104、105、106为从节点;
  • 数据读写测试
docker exec -it redis-7001 redis-cli -p 7001 -c 
> set foo bar
> get foo
执行窗口如下:
可以看到已经成功执行了redis的命令,设置foo的值为bar,并且跳转到103这个主节点上了。
  • 打开Another Redis Desktop Manager,配置redis连接,如下:
  • 点击展开按钮,如下:
  • 可以看到已经出现foo这个key值了,点击左侧foo这个值,右侧窗口出现值bar,如下:
至此,redis cluster集群3主3从已经成功搭建完成了。

四、总结

整体搭建过程相对mysql主从复制来说,要简单一些。遇到问题时候只要借助AI大模型搜索,基本上都能得到解决。这里主要的问题就是在WIndows下运行Git Bash命令时,会导致系统路径解析混乱,这个问题搞得我头大。
最后还有一个疑问,就是Another Redis Desktop Manager里如何配置Cluster?我只要把Cluster勾选上,就会出错,按理来说客户端会自动处理重定向到有Key值的节点,但是我一直没搞定,希望有知道的朋友评论里留言,不胜感激。

Docker Desktop里搭建Redis 8.2.1集群的保姆级教程的更多相关文章

  1. Docker中自动化搭建Hadoop2.6完全分布式集群

    这一节将在<Dockerfile完成Hadoop2.6的伪分布式搭建>的基础上搭建一个完全分布式的Hadoop集群. 1. 搭建集群中需要用到的文件 [root@centos-docker ...

  2. 【ELK】【docker】【elasticsearch】1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安装ik分词器

    系列文章:[建议从第二章开始] [ELK][docker][elasticsearch]1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安 ...

  3. C#两大知名Redis客户端连接哨兵集群的姿势

    前言 前面利用<Docker-Compose搭建Redis高可用哨兵集群>, 我们的思路是将Redis.Sentinel.Redis Client App链接到同一个网桥网络,这个网桥内的 ...

  4. redis安装、测试&集群的搭建&踩过的坑

    1 redis的安装 1.1   安装redis 版本说明 本教程使用redis3.0版本.3.0版本主要增加了redis集群功能. 安装的前提条件: 需要安装gcc:yum install gcc- ...

  5. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  6. 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  7. Redis 3.0.2集群搭建以及相关问题汇总

    Redis3 正式支持了 cluster,是为了解决构建redis集群时的诸多不便 (1)像操作单个redis一样操作key,不用操心key在哪个节点上(2)在线动态添加.删除redis节点,不用停止 ...

  8. 分布式缓存技术redis系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  9. 转:Redis 3.2.1集群搭建

    Redis 3.2.1集群搭建   一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2) ...

  10. redis高级应用(集群搭建、集群分区原理、集群操作)

    文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...

随机推荐

  1. AtCoder Beginner Contest 357-D

    Problem For a positive integer \(N\), let \(V_N\) be the integer formed by concatenating \(N\) exact ...

  2. 「Note」数论方向 - 数论基础

    0. 前置知识 0.1. 费马小定理 \[a ^{p-1}\equiv1\pmod p(p\in\mathbb P,a\perp p) \] 由此可以推出模意义下乘法逆元: \[a ^{-1}\equ ...

  3. 【中文】【吴恩达课后编程作业】Course 5 - 序列模型 - 第三周作业 - 机器翻译与触发词检测

    [中文][吴恩达课后编程作业]Course 5 - 序列模型 - 第三周作业 - 机器翻译与触发词检测 上一篇:[课程5 - 第三周测验]※※※※※ [回到目录]※※※※※下一篇:无 致谢: 感谢@e ...

  4. 从零开始学Flink:揭开实时计算的神秘面纱

    一.为什么需要Flink? 当你在电商平台秒杀商品时,1毫秒的延迟可能导致交易失败:当自动驾驶汽车遇到障碍物时,10毫秒的计算延迟可能酿成事故.这些场景揭示了一个残酷事实:数据的价值随时间呈指数级衰减 ...

  5. What is Good Code

    DRY:Don't repeat yourself 尽可能的不要有重复代码,同时意味着你要有足够多的抽象和思考,将相同的功能函数放在一个地方,不要重复. SRP:Single responsiblit ...

  6. ChunJun 1.16 Release版本即将发布,bug 捉虫活动邀您参与!

    亲爱的社区小伙伴们,历时数月,我们很高兴地宣布,ChunJun 即将迎来 1.16 Release 版本的正式发布.在新版本中,ChunJun 新增了一批常用功能,进行了多项功能优化和问题修复,并在用 ...

  7. PHP指定编码

    header("Content-type: text/html; charset=utf-8");

  8. Blazor学习之旅(6)路由系统

    大家好,我是Edison. Blazor 的路由系统就和 ASP.NET MVC的路由系统一样,可以为我们提供灵活的选项,可用于确保用户请求到达可处理它们并返回用户想要的信息的组件. 本篇,我们来了解 ...

  9. 好用的浏览器自动化扩展-automa

    好用的浏览器自动化扩展-automa 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/18932812 automa是一款基于浏览器的任务流编排工具,就是处理一 ...

  10. 前端开发系列051-基础篇之自定义事件和插槽(Vue)

    本文是早期学习Vue整理的一些阶段性总结,内容主要关于Vue框架中组件的事件传递和插槽. 一.组件通信(自定义事件) 组件间通信主要涉及到两方面的内容,即父组件(父级标签)向子组件传递数据以及子组件通 ...