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
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意