为一组消费者节点管理celeryconfig文件有哪些最佳实践?

时间:2015-06-12 09:45:50

标签: celery django-celery

我应该使用Ansible模板还是一些集中配置管理服务?

如果是Ansible,那么将队列和其他芹菜配置定义为变量的最佳做法是什么?

这是我用于其中一个节点的示例celeryconfig文件。对于其他节点,我希望能够调整不同的参数。

from kombu import Exchange, Queue
import celery
import djcelery

# required by celery
CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']

CELERY_QUEUES = (
    # .... #
    )

CELERY_ROUTES = {
    # .... #
    }

CELERY_CREATE_MISSING_QUEUES = True

CELERY_IGNORE_RESULT = True

CELERY_DISABLE_RATE_LIMITS = True

CELERY_ACKS_LATE = True

CELERY_TASK_RESULT_EXPIRES = 1

CELERYD_MAX_TASKS_PER_CHILD = 300

CELERYD_PREFETCH_MULTIPLIER = 1

这是我的芹菜启动脚本:

#!/bin/bash

NAME="app"                                  # Name of the application
DJANGODIR= ##path to Django project directory
USER=user                                    # the user to run as
GROUP=user                                       # the group to run as
NUM_WORKERS=3                                     # how many worker processes should Gunicorn spawn
DJANGO_SETTINGS_MODULE=app.settings             # which settings file should Django use
LOGFILE=/var/log/celery.log

echo "Starting $NAME celery"

# Activate the virtual environment
cd $DJANGODIR
source #path to virtual env #
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
export PYTHON_EGG_CACHE= ####

# queues to be consumed dependent on server
exec python manage.py celery multi start {{ workers }} -l INFO -c {{ concurrency }} --logfile=$LOGFILE  --pidfile=/tmp/celery%n.pid --app=hod_app.celery.cod -Q {{ queues }} -Ofair

我已经定义了ansible角色以及设置服务器的任务。清单文件包含3种类型的主机:production,staging,consumer_nodes。

用于consumer_nodes的ansible命令如下:

ansible-playbook -i /tmp/hosts $path_to_hosts/app.yml --tags deploy --extra-vars "branch=$branch server=$server_parameter queues=$queues"

我指定要在命令本身中使用的队列,所以我觉得这是问题,因为现在它是可管理的,但是将来如果我必须调整一些其他设置,那么这个方法看起来很脏。

我还有一个group vars文件,其中我已经指定了一些celery设置,但每次添加一个节点都需要更新vars文件。我想解开这个。

0 个答案:

没有答案