在单机docker compose中部署redis哨兵集群需配置1主2从redis实例和3个哨兵,各服务独立端口、配置与数据目录,共用自定义网络,通过健康检查顺序启动,验证故障转移与自动恢复能力。

在单机环境下用 Docker Compose 部署 Redis 哨兵(Sentinel)高可用集群,核心是模拟多节点行为:启动 1 个主节点、2 个从节点、3 个哨兵进程,全部运行在同一台机器的不同端口上。关键在于网络隔离、配置独立、角色明确,避免端口冲突和配置混淆。
准备三个 Redis 实例(1 主 + 2 从)
每个 Redis 实例需独立配置文件,指定角色、端口、持久化路径和复制关系:
-
redis-master.conf:不设
slaveof,启用 AOF,绑定0.0.0.0,端口6379 -
redis-slave1.conf:添加
slaveof redis-master 6379,端口6380,AOF 开启 -
redis-slave2.conf:同样设置
slaveof redis-master 6379,端口6381
注意:所有实例使用 redis:7-alpine 镜像,通过 volumes 挂载各自配置和数据目录,确保配置生效且数据不丢失。
部署三个独立 Sentinel 实例
哨兵不托管数据,只监控 Redis 节点。每个 Sentinel 需单独配置,监听同一组主从节点:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 配置中写明
sentinel monitor mymaster redis-master 6379 2(quorum=2 表示至少 2 个哨兵同意才故障转移) - 三个 Sentinel 分别监听不同端口(如
26379、26380、26381),挂载各自配置和工作目录 - 必须在
docker-compose.yml中将所有 Redis 和 Sentinel 容器置于同一自定义网络(如redis-sentinel-net),确保容器名可解析
编写 docker-compose.yml 文件
定义 6 个服务,按依赖顺序启动(建议加 depends_on + 健康检查):
- 先起
redis-master,再起两个redis-slave(它们会自动连接主节点) - 三个
redis-sentinel服务基于官方镜像,命令为redis-sentinel /usr/local/etc/redis/sentinel.conf - 每个服务映射宿主机端口(如
"6379:6379"),方便本地测试;哨兵端口也映射,便于 telnet 连接验证 - 所有容器共享同一 network,并声明
external: false让 Compose 自动创建
启动后执行 docker-compose up -d,稍等 10 秒,用 docker-compose exec redis-sentinel1 redis-cli -p 26379 sentinel master mymaster 查看主节点状态。
验证与日常操作要点
高可用是否生效,重点验证故障转移流程:
- 手动停掉
redis-master:docker-compose stop redis-master - 等待约 30 秒(哨兵默认 down-after-milliseconds=30000),执行
sentinel masters mymaster,观察addr字段是否变为某个从节点的地址(如redis-slave1:6380) - 原主节点重启后,会自动变成新主的从节点 —— 这是哨兵自动完成的,无需人工干预
- 客户端连接时,不要直连 Redis 地址,而应使用哨兵发现机制:连接任意一个哨兵,执行
SENTINEL get-master-addr-by-name mymaster获取当前主节点再连接
不复杂但容易忽略:哨兵配置里必须有 sentinel down-after-milliseconds、sentinel failover-timeout 等参数,否则默认值可能导致切换过慢或失败。










