Heroku和Redistogo Nano上达到的最大客户端数

Heroku和Redistogo Nano上达到的最大客户端数,heroku,redis,celery,celerybeat,redistogo,Heroku,Redis,Celery,Celerybeat,Redistogo,我正在Heroku上使用celerybeat和RedisToGo Nano插件 有一个web dyno和一个worker dyno celerybeat worker设置为每分钟执行一项任务 问题是:每当我部署一个新的commit时,dynos就会重新启动,并且我会得到这个错误 2014-02-27T13:19:31.552352+00:00 app[worker.1]: Traceback (most recent call last): 2014-02-27T13:19:31.552352+

我正在Heroku上使用celerybeat和RedisToGo Nano插件

有一个web dyno和一个worker dyno

celerybeat worker设置为每分钟执行一项任务

问题是:每当我部署一个新的commit时,dynos就会重新启动,并且我会得到这个错误

2014-02-27T13:19:31.552352+00:00 app[worker.1]: Traceback (most recent call last):
2014-02-27T13:19:31.552352+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/celery/worker/consumer.py", line 389, in start
2014-02-27T13:19:31.552352+00:00 app[worker.1]:     self.reset_connection()
2014-02-27T13:19:31.552352+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/celery/worker/consumer.py", line 727, in reset_connection
2014-02-27T13:19:31.552352+00:00 app[worker.1]:     self.connection = self._open_connection()
2014-02-27T13:19:31.552352+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/celery/worker/consumer.py", line 792, in _open_connection
2014-02-27T13:19:31.552352+00:00 app[worker.1]:     callback=self.maybe_shutdown)
2014-02-27T13:18:23.864287+00:00 app[worker.1]:     self.on_connect()
2014-02-27T13:18:23.864287+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/redis/connection.py", line 263, in on_connect
2014-02-27T13:18:23.864287+00:00 app[worker.1]:     if nativestr(self.read_response()) != 'OK':
2014-02-27T13:18:23.864287+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/redis/connection.py", line 314, in read_response
2014-02-27T13:18:23.864287+00:00 app[worker.1]:     raise response
2014-02-27T13:18:23.864287+00:00 app[worker.1]: ResponseError: max number of clients reached
2014-02-27T13:19:31.552352+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 272, in ensure_connection
2014-02-27T13:19:31.552352+00:00 app[worker.1]:     interval_start, interval_step, interval_max, callback)
2014-02-27T13:19:31.552591+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/kombu/utils/__init__.py", line 218, in retry_over_time
2014-02-27T13:19:31.552591+00:00 app[worker.1]:     return fun(*args, **kwargs)
2014-02-27T13:19:31.552591+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 162, in connect
2014-02-27T13:19:31.552591+00:00 app[worker.1]:     return self.connection
2014-02-27T13:19:31.552591+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 617, in connection
2014-02-27T13:18:23.870811+00:00 app[worker.1]: [2014-02-27 13:18:23,870: ERROR/MainProcess] consumer: Connection to broker lost. Trying to re-establish the connection...
那些日志没完没了地继续着。直到我停止两个Dyno并重新启动它们

这已经成为一个问题,因为几乎每次部署新的提交时都会发生这种情况


你知道为什么会发生这种情况以及如何解决吗?

纳米redistogo计划将并发redis连接限制在10

使用的redis连接数将根据您的前端和芹菜工作者设置而有所不同。听起来您正在为生产堆栈使用=5个redis连接

当您部署新代码时,Heroku会产生一个全新的堆栈。这意味着您在部署时正在使用10个redis连接

有两种方法可以解决此问题:

  • 通过升级到更大的计划($$),增加允许的最大redistogo连接数
  • 减少堆栈使用的连接数(减少web工作人员使用的芹菜并发或redis连接)

这是一个资源枯竭的简单问题。我只需要支付更大的RedisToGo计划。

+1@Winfield可能是正确的,您可以发出
info
命令来获取当前连接的
客户端的数量,这样您就可以对照当前实例的限制进行检查。您用来发布
info
的连接也很重要。顺便说一下,我在redistogo工作,只是发电子邮件support@redistogo.com如果您需要帮助排除实例故障。有没有办法让redis/heroku在部署时关闭旧堆栈上的任何连接?问题是时间问题-新的dynos正在出现,而旧的dynos正在下降。特别是如果使用预引导进行零停机部署。确保在使用新连接和资源之前释放所有旧连接和资源的唯一方法是在部署期间关闭整个站点,我怀疑您是否希望这样做。