9

RedisToGo Nanoアドオンを使用してHerokuでセロリビートを使用しています

1 つの Web dyno と 1 つのワーカー dyno があります

celerybeat ワーカーは、毎分タスクを実行するように設定されています。

問題は次のとおりです。新しいコミットをデプロイするたびに、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を停止して再起動するまで。

新しいコミットがデプロイされるたびに発生するため、問題になっています。

なぜこれが起こっているのか、これを解決する方法はありますか?

4

1 に答える 1

10

nano redistogo プランは、同時 redis 接続を10に制限します。

使用される redis 接続の数は、フロントエンドとセロリ ワーカーの設定によって異なります。本番スタックに5 つ以上の redis 接続を使用しているようです。

新しいコードをデプロイすると、Heroku はまったく新しいスタックを作成します。これは、デプロイ時に>= 10 の redis 接続を使用していることを意味します。

これを修正するには、次の 2 つの方法があります。

  • より大きなプラン ($$$) にアップグレードして、許可される redistogo 接続の最大数を増やします
  • スタックで使用される接続の数を減らします (Web ワーカーが使用するセロリの同時実行数または Redis 接続を減らします)。

これは、リソースの枯渇という単純な問題です。より大きな RedisToGo プランの料金を支払うだけです。

于 2014-02-27T16:43:07.860 に答える