You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Docker Compose部署含Redis Stack模块的Redis Sentinel?

使用Docker Compose部署带Redis Stack模块的Redis Sentinel集群

架构说明

我们将部署包含1个主节点、2个从节点和3个哨兵节点的集群:

  • 主节点采用redis/redis-stack-server镜像(内置Redis Search、Redis JSON等Stack模块)
  • 从节点基于同镜像,自动同步主节点的模块与数据
  • 哨兵节点使用官方redis镜像,配置规则监控主节点状态

Docker Compose配置文件

创建docker-compose.yml文件,内容如下:

version: '3.8'

services:
  # Redis 主节点(带Stack模块)
  redis-master:
    image: redis/redis-stack-server:latest
    container_name: redis-master
    ports:
      - "6379:6379"
      - "8001:8001" # Redis Insight 控制台端口
    volumes:
      - redis-master-data:/data
    command: redis-server --port 6379 --appendonly yes --loadmodule /opt/redis-stack/lib/redisearch.so --loadmodule /opt/redis-stack/lib/rejson.so
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 3

  # Redis 从节点1
  redis-slave-1:
    image: redis/redis-stack-server:latest
    container_name: redis-slave-1
    ports:
      - "6380:6379"
    volumes:
      - redis-slave-1-data:/data
    command: redis-server --port 6379 --appendonly yes --slaveof redis-master 6379 --loadmodule /opt/redis-stack/lib/redisearch.so --loadmodule /opt/redis-stack/lib/rejson.so
    depends_on:
      redis-master:
        condition: service_healthy

  # Redis 从节点2
  redis-slave-2:
    image: redis/redis-stack-server:latest
    container_name: redis-slave-2
    ports:
      - "6381:6379"
    volumes:
      - redis-slave-2-data:/data
    command: redis-server --port 6379 --appendonly yes --slaveof redis-master 6379 --loadmodule /opt/redis-stack/lib/redisearch.so --loadmodule /opt/redis-stack/lib/rejson.so
    depends_on:
      redis-master:
        condition: service_healthy

  # Sentinel 节点1
  redis-sentinel-1:
    image: redis:latest
    container_name: redis-sentinel-1
    ports:
      - "26379:26379"
    volumes:
      - ./sentinel.conf:/etc/redis/sentinel.conf
    command: redis-sentinel /etc/redis/sentinel.conf
    depends_on:
      redis-master:
        condition: service_healthy
      redis-slave-1:
        condition: service_started
      redis-slave-2:
        condition: service_started

  # Sentinel 节点2
  redis-sentinel-2:
    image: redis:latest
    container_name: redis-sentinel-2
    ports:
      - "26380:26379"
    volumes:
      - ./sentinel.conf:/etc/redis/sentinel.conf
    command: redis-sentinel /etc/redis/sentinel.conf
    depends_on:
      redis-master:
        condition: service_healthy
      redis-slave-1:
        condition: service_started
      redis-slave-2:
        condition: service_started

  # Sentinel 节点3
  redis-sentinel-3:
    image: redis:latest
    container_name: redis-sentinel-3
    ports:
      - "26381:26379"
    volumes:
      - ./sentinel.conf:/etc/redis/sentinel.conf
    command: redis-sentinel /etc/redis/sentinel.conf
    depends_on:
      redis-master:
        condition: service_healthy
      redis-slave-1:
        condition: service_started
      redis-slave-2:
        condition: service_started

volumes:
  redis-master-data:
  redis-slave-1-data:
  redis-slave-2-data:

哨兵配置文件(sentinel.conf)

在同一目录下创建sentinel.conf文件,内容如下:

port 26379
dir /tmp
sentinel monitor mymaster redis-master 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

配置说明:

  • sentinel monitor mymaster redis-master 6379 2:监控名为mymaster的主节点,需至少2个哨兵同意才触发故障转移
  • down-after-milliseconds:主节点无响应5秒后标记为不可用
  • failover-timeout:故障转移超时时间10秒
  • parallel-syncs:故障转移后同时同步数据的从节点数量

部署步骤

  1. 将上述两个文件(docker-compose.yml和sentinel.conf)放在同一目录
  2. 启动集群:
    docker-compose up -d
    
  3. 查看容器运行状态:
    docker-compose ps
    

验证部署

  1. 检查主节点的Stack模块是否加载:

    docker exec -it redis-master redis-cli module list
    

    输出需包含search和ReJSON模块

  2. 验证从节点主从同步状态:

    docker exec -it redis-slave-1 redis-cli info replication
    

    查看master_link_status字段值应为up

  3. 检查哨兵集群状态:

    docker exec -it redis-sentinel-1 redis-cli -p 26379 sentinel master mymaster
    

    输出会显示主节点信息及哨兵集群状态

  4. 测试故障转移:
    停止主节点容器:

    docker stop redis-master
    

    等待几秒后,查看哨兵选出的新主节点:

    docker exec -it redis-sentinel-1 redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
    

    输出会显示新主节点的IP和端口


内容的提问来源于stack exchange,提问作者nadavtsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:05:39