I celerybeat mit RedisToGo Nano-Addon auf Heroku bin mitMaximale Kunden erreicht auf Heroku und Redistogo Nano
Es gibt eine Web-dyno und ein Arbeiter dyno
Die celerybeat Arbeiter in jeder Minute eine Aufgabe auszuführen, eingestellt.
Das Problem ist: Jedes Mal, wenn ich eine neue einsetzen begehen, dynos neu zu starten, und ich erhalte diese Störung
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...
und diese Protokolle gehen endlos. bis ich beide Dynos stoppe und sie neu starte.
Es ist ein Problem geworden, weil es fast jedes Mal passiert, wenn ein neues Commit bereitgestellt wird.
Irgendwelche Ideen, warum dies geschieht und wie man das löst?
+1 @Winfield ist wahrscheinlich richtig, Sie können den Befehl 'info' ausgeben, um die Anzahl der momentan' connected_clients' zu erhalten, die Sie gegen das Limit Ihrer aktuellen Instanz überprüfen können. die Verbindung, die Sie zum Ausgeben von 'info' verwenden, zählt ebenfalls. Ich arbeite übrigens bei redistogo nur per E-Mail an [email protected], wenn Sie Hilfe bei der Fehlerbehebung Ihrer Instanz benötigen. – mogramer
Gibt es eine Möglichkeit, redis/heroku beim Deploy alle Verbindungen auf dem alten Stack zu schließen? – Erik
Das Problem ist Timing - Ihre neuen Dynos kommen auf, während die alten untergehen. Vor allem, wenn Sie den Preboot für Zero-Downtime-Bereitstellungen verwenden. Der einzige Weg, um sicherzustellen, dass alle alten Verbindungen und Ressourcen freigegeben werden, bevor die neuen verwendet werden, besteht darin, die gesamte Site während der Deploy-Vorgänge herunterzufahren - und ich bezweifle, dass Sie das wollen. – Winfield