最近想自己开发一个小系统,而我的电脑里还没有安装任何的开发相关的配套软件和环境,所以想着方便以后开发的原则,就想从头到尾搭建一个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值的节点,但是我一直没搞定,希望有知道的朋友评论里留言,不胜感激。