Docker化Django项目用SentinelClient连Redis遇加载卡顿及主节点未找到错误
Django Redis Sentinel 连接问题排查与修复
核心配置错误分析
你遇到的MasterNotFoundError和加载卡顿问题,根源在于两处配置错误:
1. Sentinel 地址格式错误
你的SENTINELS配置里加了redis://前缀,这是错误的。Sentinel 连接不需要 URL 格式,直接填主机名(Docker 服务名)和端口即可:
SENTINELS = [ ('redis-sentinel', 26379), # 去掉 redis:// 前缀 ]
2. LOCATION 配置错误
使用SentinelClient时,LOCATION不是具体的主节点地址,而是哨兵集群监控的主节点名称(比如默认的mymaster,取决于你的 Redis 哨兵配置)。你现在填的redis://redis-queue-1:6379是主节点的直接地址,哨兵找不到这个名称的主节点,所以抛出MasterNotFoundError。
修正后的完整配置示例
假设你的哨兵监控的主节点名称是mymaster,修正后的settings.py配置如下:
DJANGO_REDIS_CONNECTION_FACTORY = 'django_redis.pool.SentinelConnectionFactory' SENTINELS = [ ('redis-sentinel', 26379), ] CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'mymaster', # 替换为你的哨兵监控的主节点名称 'OPTIONS': { 'SENTINELS': SENTINELS, 'CLIENT_CLASS': 'django_redis.client.SentinelClient', 'CONNECTION_POOL_CLASS': 'redis.sentinel.SentinelConnectionPool', }, } }
验证主节点名称
不确定主节点名称的话,进入 Redis Sentinel 容器执行以下命令查看:
redis-cli -p 26379 sentinel masters
输出里的name字段就是你需要填到LOCATION的值。
额外注意事项
- 确保 Docker 网络中,Django 容器能正常访问 Sentinel 容器(你用服务名
redis-sentinel能连通,这点应该没问题) - 确认哨兵集群已经正确监控主节点,且主节点处于正常运行状态
内容的提问来源于stack exchange,提问作者Ahsan
相关产品推荐
相关产品推荐

