我应该使用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文件。我想解开这个。