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

升级后Heroku Redis运行Celery Worker报Connection reset by peer错误

问题描述

Heroku Redis实例此前运行正常,升级后启动Celery Worker时报错如下:

[2021-07-23 11:06:08,135: ERROR/MainProcess] consumer: Cannot connect to redis://:**@ec2-54-***-***-*.eu-west-1.compute.amazonaws.com:*****//: Error while reading from socket: (104, 'Connection reset by peer').
Trying again in 12.00 seconds... (6/100)

已更新所有相关组件到最新版本,删除原有Redis实例重建后问题仍然存在。

解决方案
  • 优先检查Heroku Redis TLS强制配置:升级后的Heroku Redis默认开启强制TLS连接,Celery默认使用非TLS方式连接Redis会被服务端主动断开,触发Connection reset by peer报错。
    修正方式有两种:

    1. 修改Redis连接字符串前缀,将redis://改为rediss://(多一个s代表走TLS通道)
    2. 在Celery配置中新增TLS相关参数,示例如下:
    import os
    # broker配置
    BROKER_URL = os.environ.get("REDIS_URL")
    BROKER_USE_SSL = {"ssl_cert_reqs": None}
    # 结果后端配置(如果用Redis做结果存储)
    RESULT_BACKEND = os.environ.get("REDIS_URL")
    RESULT_BACKEND_TRANSPORT_OPTIONS = {"ssl_cert_reqs": None}
    

    命令行临时启动测试可以直接执行:
    celery -A 你的项目名 worker --broker=rediss://:**@ec2-54-***-***-*.eu-west-1.compute.amazonaws.com:*****//?ssl_cert_reqs=none

  • 检查可信IP白名单配置:如果你使用的是付费版Heroku Redis,默认开启了可信源访问限制,需要将运行Celery的服务IP添加到Heroku Redis的可信IP列表中,本地测试需要添加本地公网IP,Heroku Dyno运行需要添加对应Dyno的出口IP段,也可以临时关闭可信源限制验证是否是该问题导致。

  • 验证连接可用性:本地安装redis-cli后执行以下命令测试Redis服务连通性:
    redis-cli -u 你的REDIS_URL --tls ping
    正常会返回PONG,如果该命令执行报错则说明是网络或Redis实例本身的问题,反之则确认是Celery配置问题。

  • 检查依赖版本兼容性:确认redis-py版本≥3.5.3,Celery版本≥5.0,低版本依赖对新的Heroku Redis TLS协议适配存在缺陷,会引发连接异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:45:03