Docker部署Redis集群:保姆级教程,按步骤就能跑起来

前置准备


在开始 Docker部署Redis集群 之前,请确保满足以下条件:



  • 一台Linux服务器:推荐 CentOS 7 或 Ubuntu 20.04+,已安装 Docker 和 docker-compose。

  • 网络通畅:服务器能正常访问互联网,用于拉取 Redis 镜像。

  • 端口规划:Redis 集群每个节点使用两个端口——主端口(如 6379)和集群总线端口(主端口+10000,如 16379)。本文采用6节点(3主3从),端口范围 6379~6384 和 16379~16384,请确保这些端口在防火墙中放行。

  • 工作目录:创建统一目录 /data/redis-cluster,用于存放配置文件和持久化数据。


分步操作


1. 拉取 Redis 镜像


docker pull redis:7.0

使用 Redis 7 稳定版,兼容集群特性。


2. 创建 Docker 网络


节点间需要相互通信,创建一个独立网络:


docker network create redis-cluster-net

3. 准备节点配置和目录


为每个节点创建独立文件夹和配置:


mkdir -p /data/redis-cluster/node{1..6}/{conf,data}

每个节点下的 redis.conf 内容示例(以 node1 为例,端口为 6379):


port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

注意:node2 的 port 改为 6380,以此类推到 6384。

4. 编写 docker-compose.yml


/data/redis-cluster 下创建 docker-compose.yml,完整定义6个服务:


version: '3'
services:
redis-node1:
image: redis:7.0
container_name: redis-node1
ports:

  • "6379:6379"
  • "16379:16379"

volumes:

  • ./node1/conf/redis.conf:/usr/local/etc/redis/redis.conf
  • ./node1/data:/data

networks:

  • redis-cluster-net

command:
["redis-server", "/usr/local/etc/redis/redis.conf"]

redis-node2:
image: redis:7.0
container_name: redis-node2
ports:

  • "6380:6380"
  • "16380:16380"

volumes:

  • ./node2/conf/redis.conf:/usr/local/etc/redis/redis.conf
  • ./node2/data:/data

networks:

  • redis-cluster-net

command:
["redis-server", "/usr/local/etc/redis/redis.conf"]

… 类似定义 node3~node6,端口分别 6381~6384、16381~16384

networks:
redis-cluster-net:
external: true


5. 启动容器


cd /data/redis-cluster
docker-compose up -d

检查所有容器是否正常运行:


docker-compose ps

6. 初始化集群


进入任意节点容器(如 node1),使用 redis-cli --cluster create 命令:


docker exec -it redis-node1 redis-cli --cluster create \
redis-node1:6379 redis-node2:6380 redis-node3:6381 \
redis-node4:6382 redis-node5:6383 redis-node6:6384 \
--cluster-replicas 1

参数 --cluster-replicas 1 表示每个主节点分配一个从节点,共3主3从。系统会自动分配槽位并打印计划,确认后输入 yes

避坑指南



  • 端口冲突:确保宿主机的 6379~6384 和 16379~16384 未被占用。

  • 网络不通:务必使用同一 Docker 网络,容器名解析依赖该网络。

  • 配置文件权限redis.conf 文件必须可读,数据目录可写。

  • 数据残留:如果之前运行过集群,需要先清空 data 目录下的持久化文件,否则初始化会报 ERR Slot 0 is already busy

  • 容器重启策略:生产环境建议在 docker-compose.yml 中添加 restart: always


效果验证



  1. 查看集群节点信息


   docker exec -it redis-node1 redis-cli -p 6379 cluster nodes

输出应显示所有节点角色(master/slave)和槽位分配。



  1. 查看集群状态


   docker exec -it redis-node1 redis-cli -p 6379 cluster info

cluster_state:ok 表示正常。



  1. 写入和读取测试


   docker exec -it redis-node1 redis-cli -c -p 6379 set foo bar
docker exec -it redis-node1 redis-cli -c -p 6379 get foo

-c 启用集群模式,自动重定向到正确节点。



  1. 故障转移测试(可选):停掉一个主节点(如 node1),观察从节点是否自动晋升:


   docker stop redis-node1
docker exec -it redis-node2 redis-cli -p 6380 cluster nodes

可以看到原 node1 的从节点变成 master。


高频问题解答


Q1: 是否需要手动指定主从关系?

不需要,--cluster-replicas 1 自动分配。


Q2: 如何扩容节点?

使用 redis-cli --cluster add-node 添加新节点,然后执行 --cluster rebalance 重新分配槽位。


Q3: 数据持久化是否影响性能?

开启 AOF 或 RDB 会有 IO 开销,生产环境建议使用 SSD,并根据业务调整持久化策略。


Q4: 节点无法加入集群,提示 Connection refused

检查端口映射、网络和防火墙。容器间必须能通过容器名相互 ping 通。


Q5: 如何彻底重置集群?

删除所有容器和持久化数据目录,重新执行步骤 4-6。


---


如果你正在处理 Docker部署Redis集群,建议先按本文步骤完整执行,再根据自己的环境做微调;

遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
Docker与虚拟机对比:实战演示哪个更适合你
下一篇
服务器被挖矿病毒处理:服务器CPU飙到100%?可能是挖矿病
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意