Docker部署Redis集群零基础教程:手把手从搭建到验证

很多新手在学Redis集群时,第一反应就是直接装Redis然后配哨兵、配分片,步骤多还容易出错。

其实用Docker部署Redis集群是更快的选择:环境隔离、快速重建、配置统一管理。

今天这篇文章就带你从零开始,用Docker部署一个6节点的Redis集群(3主3从),所有命令全部贴出来,你复制粘贴就能跑通。


前置准备


环境检查



  • 一台Linux服务器(我用的是CentOS 7.9,Ubuntu 20.04/22.04 也完全兼容)

  • 已安装Docker和docker-compose(没装?看下面的秒装命令)

  • 服务器至少有 2核4G 内存(Redis集群最低要求,测试环境1核2G也能用但别跑生产)


安装Docker和docker-compose


如果你还没装Docker,运行这两条命令(CentOS/Ubuntu通用):


# 安装Docker
curl -fsSL https://get.docker.com | bash -s docker

启动Docker并设置开机自启

systemctl start docker && systemctl enable docker

安装docker-compose(独立版本,避免依赖冲突)

curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose


检查是否装好:


docker --version      # 返回 Docker version 20.x.x 即可
docker-compose --version # 返回 docker-compose version 1.x.x

创建专用目录


所有操作集中在一个目录,方便管理:


mkdir -p /opt/redis-cluster
cd /opt/redis-cluster

分步操作


第一步:编写docker-compose.yml配置


用你喜欢的编辑器(vim/nano)创建文件 docker-compose.yml,内容如下:


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

  • "6371:6379"
  • "16371:16379"

command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --appendonly yes
volumes:

  • ./data/node1:/data

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

  • "6372:6379"
  • "16372:16379"

command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --appendonly yes
volumes:

  • ./data/node2:/data

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

  • "6373:6379"
  • "16373:16379"

command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --appendonly yes
volumes:

  • ./data/node3:/data

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

  • "6374:6379"
  • "16374:16379"

command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --appendonly yes
volumes:

  • ./data/node4:/data

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

  • "6375:6379"
  • "16375:16379"

command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --appendonly yes
volumes:

  • ./data/node5:/data

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

  • "6376:6379"
  • "16376:16379"

command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --appendonly yes
volumes:

  • ./data/node6:/data

重点说明



  • --cluster-enabled yes 开启集群模式,--cluster-config-file nodes.conf 用于存储集群拓扑。

  • 每个容器暴露两个端口:637x 是Redis服务端口,1637x 是集群总线端口(节点间通信)。

  • 使用 appendonly yes 开启持久化,生产环境强烈建议开启。


第二步:启动所有Redis容器


/opt/redis-cluster 目录下执行:


docker-compose up -d

等待30秒左右让容器完全启动

查看是否全部运行:


docker-compose ps

应该看到6个容器,状态都是 Up

第三步:创建集群(将6个节点连接起来)


找一个容器执行集群创建命令。

一般选第一个节点 redis-node1 作为入口:


docker exec -it redis-node1 redis-cli --cluster create \
你的服务器IP:6371 \
你的服务器IP:6372 \
你的服务器IP:6373 \
你的服务器IP:6374 \
你的服务器IP:6375 \
你的服务器IP:6376 \
--cluster-replicas 1

注意:将 你的服务器IP 替换为实际公网IP或内网IP。如果在本机测试,可以用 127.0.0.1

执行后会出现一个分配方案确认提示,输入 yes 回车。

如果一切顺利,你会看到类似输出:


>>> Performing Cluster Check (using node 127.0.0.1:6371)
M: xxxx... 127.0.0.1:6371
....
[OK] All 16384 slots covered

恭喜!Docker部署Redis集群已经成功。


第四步:测试集群功能


进入任意一个节点,尝试写入key并验证重定向:


docker exec -it redis-node1 redis-cli -c

-c 表示集群模式,会自动重定向

127.0.0.1:6371> set name hello
-> Redirected to slot [5798] located at 127.0.0.1:6373
OK
127.0.0.1:6373> get name
"hello"
127.0.0.1:6373> exit


说明集群自动分配了slot,数据可以跨节点正确读写。


避坑指南


❌ 常见坑1:端口冲突


如果宿主机已经占用了6371-6376或16371-16376,启动会报 port is already allocated

检查:


netstat -tulpn | grep 637

如果有占用,修改 docker-compose.yml 里的端口映射(例如改成 6381-6386)

❌ 常见坑2:创建集群时节点不可达


报错 [ERR] Node 172.17.0.2:6379 is not reachable

原因:容器之间用默认bridge网络,分配的IP是172.x.x.x,但集群创建命令里写了宿主机IP。解决办法:将命令里的IP改为容器实际IP。

可以先查容器IP:


docker inspect redis-node1 | grep IPAddress

得到 172.17.0.2 之类的

然后用容器IP代替宿主IP重新创建集群。

或者更简单:创建前将所有节点的 protected-mode no 并设置 bind 0.0.0.0,但生产环境不建议。

推荐使用host网络模式(本文未展开,后续可专文讲)。


❌ 常见坑3:磁盘空间不足


Redis AOF文件会占空间,如果data目录挂载在系统盘(比如root分区),很容易撑满。

提前检查:df -h,确认 /opt 所在分区有足够空间(至少5G)。


高频问题解答


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


直接使用宿主机IP + 映射端口即可,例如 redis-cli -h 你的服务器IP -p 6371 -c

一定要加 -c 参数,否则写key时会报 MOVED 错误。


Q2:我只想部署3个主节点,不需要从节点,怎么办?


--cluster-replicas 1 改为 --cluster-replicas 0,并且只写3个节点IP和端口。

注意:3主集群没有高可用,单点故障会导致整个集群不可用。


Q3:创建集群时提示 All nodes must be empty


因为你之前可能用这些容器存储过数据(比如测试过单机模式)。解决:清空每个节点的数据:


rm -rf /opt/redis-cluster/data/*
docker-compose down
docker-compose up -d

再重新创建集群。


Q4:如何扩展节点到更多个?


修改docker-compose.yml添加新容器,启动后再用 redis-cli --cluster add-node 加入集群,具体步骤可后续专文展开。


效果验证


最后再检查一遍关键的落脚点:



  1. 容器状态docker-compose ps 全部 Up。

  2. 集群信息docker exec -it redis-node1 redis-cli cluster info,输出中 cluster_state:ok

  3. slot覆盖docker exec -it redis-node1 redis-cli cluster slots,看到16384个slot全部被主节点覆盖。

  4. 数据读写:像测试步骤那样写入key并读取,确认正常。


如果你刚接触Docker和Redis,建议先按本文步骤完整执行一遍,再根据自己的环境(比如IP、端口、持久化策略)做微调。

遇到报错优先回到避坑指南和第4步的验证方法检查,大部分问题都能快速定位。Docker部署Redis集群并没有想象中那么复杂,关键是把每一步搞懂,就能轻松运维。


如果这篇文章帮助到你了,欢迎收藏、转发给需要的朋友。

后续我还会出Docker集群监控、扩容、备份等专题教程,关注不走丢。

分享到:
上一篇
新手必看:Linux软件安装yum apt从入门到实战
下一篇
零基础也能上手的服务器监控工具推荐与配置教程
1
系统公告

泽御云五一特惠活动🔥

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