首页
/ 使用Docker Compose部署django-redis项目的高可用Redis环境

使用Docker Compose部署django-redis项目的高可用Redis环境

2025-07-10 04:22:02作者:宣聪麟

前言

在现代Web开发中,缓存系统是提升应用性能的关键组件。django-redis作为Django框架中最受欢迎的Redis缓存后端,为开发者提供了强大的缓存功能。本文将详细介绍如何使用Docker Compose为django-redis项目搭建一个包含Redis主节点和Sentinel的高可用环境。

环境架构概述

这个Docker Compose配置定义了一个包含两个服务的Redis高可用环境:

  1. Redis主节点服务:提供基础的键值存储功能
  2. Redis Sentinel服务:监控Redis主节点,实现自动故障转移

这种架构能够确保当主Redis节点出现故障时,系统可以自动进行故障检测和转移,保证服务的持续可用性。

详细配置解析

Redis主节点配置

redis:
  image: redis:latest
  container_name: redis-primary
  command: redis-server --enable-debug-command yes --protected-mode no
  ports:
    - 6379:6379
  healthcheck:
    test: redis-cli ping
    interval: 5s
    timeout: 5s
    retries: 5

关键配置说明:

  1. 镜像选择:使用官方Redis的最新镜像,确保获得最新的功能和安全更新
  2. 容器命名:明确命名为redis-primary,便于识别和管理
  3. 启动命令
    • --enable-debug-command yes:启用DEBUG命令,便于开发和调试
    • --protected-mode no:禁用保护模式,允许远程连接(生产环境应谨慎使用)
  4. 端口映射:将容器内的6379端口映射到宿主机,这是Redis的默认端口
  5. 健康检查:每5秒执行一次ping命令检查Redis服务状态,最多重试5次

Redis Sentinel配置

sentinel:
  image: redis:latest
  container_name: redis-sentinel
  depends_on:
    redis:
      condition: service_healthy
  entrypoint: "redis-sentinel /redis.conf --port 26379"
  ports:
    - 26379:26379
  volumes:
    - "./sentinel.conf:/redis.conf"
  healthcheck:
    test: redis-cli -p 26379 ping
    interval: 5s
    timeout: 5s
    retries: 5

关键配置说明:

  1. 依赖关系:通过depends_on确保Sentinel服务只在Redis主节点健康时启动
  2. 入口点:指定使用redis-sentinel命令启动,并加载配置文件
  3. 端口映射:将Sentinel的默认端口26379映射到宿主机
  4. 配置文件挂载:通过卷挂载方式提供Sentinel配置文件
  5. 健康检查:检查Sentinel服务是否正常运行

配置文件准备

要使这个配置完全工作,你需要在项目目录中准备一个sentinel.conf文件。典型的Sentinel配置应该包含以下内容:

sentinel monitor mymaster redis 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

这个配置告诉Sentinel:

  • 监控名为"mymaster"的主Redis服务
  • 主节点位于redis容器(由Docker Compose网络解析)的6379端口
  • 需要2个Sentinel同意才能判定主节点失效
  • 5000毫秒无响应认为节点下线
  • 故障转移超时设置为10000毫秒
  • 故障转移时允许1个从节点同时同步新主节点

与django-redis集成

在Django项目的settings.py中,你可以这样配置django-redis来使用这个高可用环境:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "sentinel://sentinel:26379/mymaster/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.SentinelClient",
            "SENTINELS": [("sentinel", 26379)],
        }
    }
}

这种配置方式使得django-redis能够通过Sentinel自动发现Redis主节点,并在主节点故障时自动切换到新的主节点。

部署与验证

  1. 启动服务:

    docker-compose up -d
    
  2. 验证Redis主节点:

    docker exec -it redis-primary redis-cli ping
    
  3. 验证Sentinel:

    docker exec -it redis-sentinel redis-cli -p 26379 ping
    
  4. 查看Sentinel监控状态:

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

生产环境建议

  1. 安全配置:为Redis和Sentinel设置密码认证
  2. 持久化:配置Redis的RDB或AOF持久化
  3. 资源限制:为容器设置适当的内存和CPU限制
  4. 日志收集:配置日志驱动或挂载日志卷
  5. 监控告警:集成Prometheus等监控系统

总结

通过这个Docker Compose配置,我们为django-redis项目搭建了一个简单但功能完整的高可用Redis环境。这种架构不仅适用于开发和测试环境,经过适当增强后也可以满足生产环境的基本需求。理解这个配置的工作原理将帮助你更好地管理和优化Django应用中的Redis缓存服务。