docker部署redis集群需选对网络模式、配好节点发现、挂载持久化路径;核心是使用自定义桥接网络固定ip、启用--cluster-enabled yes、挂载nodes.conf文件,并用redis-cli --cluster create显式初始化3主3从节点。

用 Docker 搭集群,核心是选对模式、配好网络、管住数据。不是装完 Docker 就能自动集群,得明确目标:是跑 Redis 这类有原生集群协议的组件?还是用 Swarm 编排多个服务?或是对接 K8s?三者配置逻辑完全不同。
先选准集群类型再动手
别一上来就写 docker-compose.yml。先问自己三个问题:
- 要部署的是单个有集群能力的中间件(比如 Redis、Milvus、RabbitMQ)?→ 重点配节点发现、槽分配、持久化路径
- 要统一调度多个微服务(比如 JeePlatform + MySQL + Redis)?→ 用 Docker Swarm,靠 service + overlay 网络实现跨主机通信
- 要长期支撑复杂业务、需自动扩缩容和精细权限?→ 直接上 Kubernetes,Docker 只当底层运行时
Swarm 模式:三步搭稳基础集群
适合中小团队快速落地,不用额外学新工具。关键动作就三步:
-
初始化管理节点:在主服务器执行
docker swarm init --advertise-addr 192.168.1.100(IP 必须是其他节点能直连的地址) -
加入工作节点:把上一步输出的
docker swarm join --token xxx 192.168.1.100:2377复制到其他机器运行 -
建服务并联网:用
docker stack deploy -c docker-compose.yml myapp,其中 compose 文件里必须声明networks为overlay类型,且服务要加deploy: replicas: 3
注意:所有节点防火墙必须开放 2377(管理)、7946(节点发现)、4789(overlay 流量)端口;/etc/hosts 要互相解析主机名。
中间件原生集群:以 Redis 为例的关键配置
Redis 自己管分片和主从,Docker 只负责起容器,但容易卡在“节点互相找不到”。避坑要点:
- 用自定义桥接网络(如
docker network create redis-net --subnet=172.20.0.0/16),给每个容器固定 IP(ipv4_address: 172.20.0.11),避免 DNS 不稳定 - 启动命令里必须带
--cluster-enabled yes和--cluster-config-file nodes.conf,且nodes.conf要挂载到宿主机,否则重启后集群元数据丢失 - 初始化集群时,用
redis-cli --cluster create命令显式指定全部 6 个节点 IP+端口(3 主 3 从),不能只连一个节点等它自动发现
持久化与安全不能省
集群跑起来只是开始,生产环境必须加固:
-
数据不丢:Redis 开 AOF(
--appendonly yes),MySQL 挂载卷到宿主机或 NFS,Milvus 的 etcd/minio 数据目录全映射出来 -
通信加密:Swarm overlay 网络启用
--opt encrypted;Redis 集群节点间走 TLS(需挂证书文件) -
资源可控:在 compose 或 service 中设
deploy.resources.limits,防止单个服务吃光内存拖垮整个集群
不复杂但容易忽略











