Задать вопрос
STLEON
@STLEON
In Console We Trust. Code hard. Or die.

Может ли Celery писать результат в бд на другом хосте?

Ситуация такая. Есть сервер (server1) с django, субд mysql и Celery (+django-celery). Также на данном сервере запущено несколько воркеров.

Одно задание (task0) стартует по расписанию, делает запрос через django orm, получает данные, разбивает их на отдельные части и отправляет на обработку (task2) другим воркерам с помощью брокера rabbitmq. Они получают данные из очереди, делают с данными определенные манипуляции и сохраняют результаты-объекты в бд.

На одном сервере все работает замечательно, вопрос в следующем.

Если мне понадобится установить воркеры на другой машине (server2), то им по-сути нужен будет доступ к базе данных, которая на server1.

Правильно ли я понимаю, что надо будет клонировать весь проект на server2, поменять айпи дня подключения к бд в settings.py, и запустить воркеров? Это выглядит все не очень заманчиво, может есть какой-то другой способ?

Читал это:
If you want to store task results in the Django database then you still need to install the django-celery library for that (alternatively you can use the SQLAlchemy result backend).

Пробовал локально запускать воркеров, но в бд нигде не появлялись результаты выполнения задач.
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler',

Пока острой задачи в переезде воркеров на другой сервер не стоит, но интересуюсь на будущее.

Спасибо!
  • Вопрос задан
  • 3051 просмотр
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
Сам недавно разворачивал Celery. Пока тоже всё крутится на одном сервере.
  1. Ваша БД, с которой работает django-проект, и celery result backend - вещи разные. Последнее - это, грубо говоря, хранилище для значений, которые вы можете вернуть из отложенного задания. А БД проекта - это БД проекта, хотя и может так же выполнять функцию result backend'а. Кстати, вы можете вообще не использовать result backend, если не вам не требуется что-то возвращать из заданий.
  2. Рабочие процессы вашего django-проекта и celery-воркеры - одно и то же, только запущенное через разные точки входа. Для веба - это, скорее всего, wsgi.py, для celery, к примеру, celery.py.
  3. Чтобы запустить воркеры на 2м сервере (вместо 1го или в дополнение к нему), вам нужно будет развернуть ваш проект на нем, и сделать всё то же самое, что и на 1м сервере, чтобы заработали celery-воркеры.
  4. помимо подключения в БД, вам также нужно будет озаботиться подключением к брокеру и result backend'у (если используете его). В самом простом случае, как мне видится, никаких IP не надо будет менять - зачем, если сервер БД у вас один, и находится на 1м сервере. Ну разве что вместо 127.0.0.1 нужно будет прописать нормальный адрес.
Ответ написан
Комментировать
oshikuru
@oshikuru
Python-разработчик, не брезгую js / html / css
Все будет работать замечательно. В идеале еще и бд вынести на отдельную машину. И к ней подключаться как с одного сервера, так и с другого.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы