heroku - 重新启动 Heroku Dynos 会导致 Redis SSL 连接错误 5 分钟,直到自行解决

标签 heroku redis celery kombu

大约 1 个月前,我开始在 Heroku 上托管 Redis/Celery/Python(Dash) 应用程序。这次它工作得完美无缺,但是在我的最新更新中,我的数据存储凭据发生了变化,并且以某种方式引入了新的错误。

每次我重新启动 dyno 时都会发生这种情况,因为我收到以下错误大约 5 分钟。

错误是: kombu.exceptions.OperationalError: Error 8 connecting to ec2-44-208-193-34.compute-1.amazonaws.com:19130. EOF occurred in violation of protocol (_ssl.c:1129).

不知何故,大约 5 分钟后,错误自行解决并消失。

我的代码看起来像

celery_app = Celery(
    __name__,
    broker = "rediss://:*@ec2-44-208-193-34.compute-1.amazonaws.com:19130/0",
    backend = "rediss://:*@ec2-44-208-193-34.compute-1.amazonaws.com:19130/1",
         broker_use_ssl = {
        'ssl_cert_reqs': ssl.CERT_NONE
     },
     redis_backend_use_ssl = {
        'ssl_cert_reqs': ssl.CERT_NONE
     }
)

有人知道可能导致这种情况的原因以及如何预防吗?

最佳答案

检查您的 Heroku addon is running 是哪个 Redis 版本,v6 进行了更改,耗尽最大连接池不会导致“达到最大客户端数量”类型的错误,而是导致 TLS 错误。

当部署发生时,现有的测功机正在使用一些基线加上连接流量计数,而替换测功机尝试选取新的测功机,但被 Redis 拒绝。

它在一段时间后自行修复的原因是 Redis 的 timeout 设置,默认情况下通常为 300 秒。 300 秒后所有旧的 dyno 连接都会被清理,然后所有超过最大客户端数的 TLS 连接问题都会消失。

您可以降低超时来减少错误发生的持续时间,但更好的解决办法是通过 Redis 计划增加最大连接数,或减少 Celery 正在使用的连接数(这是一个复杂的主题),希望是 thisthis 有帮助。

令人沮丧的是,如果您查看 Redis 统计数据,Heroku 根本不会报告您超出了限制。它没有显示您突然尝试将客户端连接加倍或更多的迹象。这是一种误导,因为它从未真正被打开过,而是被彻底拒绝,速度如此之快,以至于没有被考虑在内。更糟糕的是,当该错误是资源耗尽问题时,它很难被掩盖为 SSL 问题。

关于heroku - 重新启动 Heroku Dynos 会导致 Redis SSL 连接错误 5 分钟,直到自行解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73022890/

相关文章:

django - 创建用于域重定向的 htaccess 文件(部署在 Heroku 中的 Django 应用程序)

ruby-on-rails - 如何增加 Heroku 30s h12 超时

redis - 重新同步期间 redis client-output-buffer-limit 的行为

python - 即使主要任务失败也运行和弦回调

python - celery 在子流程上的重要减速

python - 将任务签名设置为 celery 中多链的起始任务

ssl - 您如何使用 Namecheap 和 Heroku 强制使用 HTTPS?

ruby-on-rails - Heroku rake Assets :precompile failed to compile Rails app

php - 如果端口更改,redis-server 不工作

c# - Stackexchange Redis - 如何对大量记录进行分页