零基础玩转Docker部署Redis集群:手把手操作指南

前置准备


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



  • 已安装 Docker(版本 >= 19.03)和 docker-compose

  • 服务器开放以下端口(可根据实际调整):

  • Redis节点端口:6379-6384(6个节点)

  • 集群总线端口:16379-16384(每个节点端口+10000)

  • 建议使用 Ubuntu 20.04+CentOS 7+ 操作系统。

  • 磁盘空间充足(每个节点至少 100MB)。

  • 已经配置好防火墙策略,允许内部节点通信。


小知识:Redis集群至少需要 6个节点(3主3从),Docker能快速创建这些容器。

分步操作


第一步:创建网络和目录


在宿主机上执行以下命令创建专用网络和目录:


docker network create redis-cluster-net
mkdir -p /data/redis-cluster/{node1,node2,node3,node4,node5,node6}

第二步:编写 docker-compose.yml


/data/redis-cluster/ 目录下创建 docker-compose.yml 文件,内容如下:


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

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

volumes:

  • ./node1:/data

networks:

  • redis-cluster-net

command:
redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

redis-node2:
image: redis:7.2
container_name: redis-node2
ports:

  • "6380:6379"
  • "16380:16379"

volumes:

  • ./node2:/data

networks:

  • redis-cluster-net

command:
redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

redis-node3:
image: redis:7.2
container_name: redis-node3
ports:

  • "6381:6379"
  • "16381:16379"

volumes:

  • ./node3:/data

networks:

  • redis-cluster-net

command:
redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

redis-node4:
image: redis:7.2
container_name: redis-node4
ports:

  • "6382:6379"
  • "16382:16379"

volumes:

  • ./node4:/data

networks:

  • redis-cluster-net

command:
redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

redis-node5:
image: redis:7.2
container_name: redis-node5
ports:

  • "6383:6379"
  • "16383:16379"

volumes:

  • ./node5:/data

networks:

  • redis-cluster-net

command:
redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

redis-node6:
image: redis:7.2
container_name: redis-node6
ports:

  • "6384:6379"
  • "16384:16379"

volumes:

  • ./node6:/data

networks:

  • redis-cluster-net

command:
redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

networks:
redis-cluster-net:
external: true


第三步:启动所有容器


进入目录并执行:


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

检查容器是否全部运行:


docker ps | grep redis-node

应该看到6个容器全部为 Up 状态。


第四步:创建集群


选择一个容器作为操作节点(例如 redis-node1),进入容器并创建集群:


docker exec -it redis-node1 redis-cli --cluster create \
172.x.x.x:6379 172.x.x.x:6379 172.x.x.x:6379 172.x.x.x:6379 172.x.x.x:6379 172.x.x.x:6379 \
--cluster-replicas 1

注意:将 172.x.x.x 替换为容器实际的IP地址。获取方式:docker inspect redis-node1 | grep "IPAddress"。或者直接使用容器名称(因为它们在同一个网络内)。推荐使用容器名称:redis-node1:6379 redis-node2:6379 ...

命令示例(使用容器名称):


docker exec -it redis-node1 redis-cli --cluster create \
redis-node1:6379 redis-node2:6379 redis-node3:6379 \
redis-node4:6379 redis-node5:6379 redis-node6:6379 \
--cluster-replicas 1

执行后,Redis会分配哈希槽,并自动设置主从关系。

出现确认提示时输入 yes


第五步:验证集群状态


连接任意节点,使用 cluster infocluster nodes 检查:


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

看到 cluster_state:ok 表示集群部署成功。


避坑指南



  1. 端口冲突:宿主机上如果已经运行了Redis或其他服务占用了6379等端口,请在 docker-compose.yml 中修改映射端口(如 6380:6379 改为 6390:6379)。

  2. 容器无法互相通信:必须将所有容器加入到同一个自定义网络(如 redis-cluster-net),不要使用默认 bridge。

  3. 创建集群时IP错误:如果使用 --cluster create 时 IP 填写错误,会导致集群创建失败。建议直接用容器名称,Docker会解析。

  4. 数据持久化:每个节点配置了 --appendonly yes,数据存放在挂载的宿主机目录。如果卷挂载权限问题,可以 chown -R 999:999 /data/redis-cluster/*(Redis 容器用户 uid 为 999)。


高频问题解答


Q1:Docker部署Redis集群后,外部程序如何连接?


外部程序需要连接集群中的 任意一个节点,并使用集群模式驱动。

连接地址可以是宿主机的任意映射端口(例如 宿主机IP:6379)。

因为Redis集群会自动重定向。


Q2:如何增加节点或重新分片?


先添加新容器(参考上述步骤),然后使用 redis-cli --cluster add-node--cluster reshard 命令。

详细可参考Redis官方文档。


Q3:为什么创建集群时提示“Node is not empty”?


每个Redis节点启动后,如果之前的数据目录中有旧的 nodes.confappendonly.aof,会导致冲突。

解决:清空对应的数据目录(如 /data/redis-cluster/node1/ 下的所有文件)再重启容器。


效果验证


执行以下命令写入测试数据:


docker exec -it redis-node1 redis-cli -c -p 6379 set mykey "Hello Redis Cluster"
docker exec -it redis-node1 redis-cli -c -p 6379 get mykey

如果能正常写入和读取,说明Docker部署Redis集群已经成功运行。


另外,可以在任意节点执行 cluster nodes,看到有三主三从,且哈希槽分配均匀,没有 fail 状态,即完全正常。


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

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

分享到:
上一篇
Linux软件安装yum apt:新手必看:Linux软件安
下一篇
服务器监控工具推荐:新手也能轻松上手的Netdata实战
1
系统公告

泽御云五一特惠活动🔥

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