我正在构建网络目录存档程序,使用celery和httrack异步镜像。我目前有一个由三台服务器组成的集群,每台服务器有五个工作站。每个任务可能需要两到六个小时才能执行。 RabbitMQ被用作代理,在rpc通道上有一些反向链接。芹菜 - 工作人员不接受新任务
我会为每个服务器芹菜以下配置:
# Celery init script for ingestion workers
# Set _BIN, _CHDIR, _LOGFILE and _OPTS for the enviroment used.
# This specific configuration is for ingest PROD 2 only
# Define worker nodes to start
CELERYD_NODES="ingest_prod_2_1 ingest_prod_2_2 ingest_prod_2_3 ingest_prod_2_4 ingest_prod_2_5"
# Absolute path to celery executable
CELERY_BIN="/home/ubuntu/.virtualenvs/proj2.7/bin/celery"
CELERYD_CHDIR="/home/ubuntu/project/proj"
# App instance used
CELERY_APP="ingest.tasks"
#Log file location
CELERYD_LOG_FILE="/home/ubuntu/project/logs/django/%N.log"
CELERYD_LOG_LEVEL="DEBUG"
CELERYD_PID_FILE="/home/ubuntu/project/celery_%N.pid"
CELERYD_ACKS_LATE=True
CELERYD_PREFETCH_MULTIPLIER=1
# Celery options, define broker backtalk
CELERYD_OPTS="-b amqp://user:[email protected]/vhost -Q long_task_queue -c 1 -Ofair"
# Workers should run as an unprivileged user and create dirs if missing
CELERYD_USER="ubuntu"
CELERYD_GROUP="ubuntu"
CELERY_CREATE_DIRS=1
对于压力测试的锻炼,我把200个任务的任务队列。起初,所有工作人员都很活跃,但是很快毕竟两个服务器上的工作人员在完成初始任务后没有完成任务。只有一台服务器继续运行,所有五名员工都在运行现在,两天后,一台服务器只有一个活动工人,其他人都闲置。其结果是,代替在〜附近150项任务执行时,我只看到40.
这是`芹菜-A ingest.tasks检查活性“结果:
-> [email protected]_1: OK
- empty -
-> [email protected]_2: OK
- empty -
-> [email protected]_3: OK
- empty -
-> [email protected]_1: OK
- empty -
-> [email protected]_2: OK
- empty -
-> [email protected]_3: OK
- empty -
-> [email protected]_1: OK
- empty -
-> [email protected]_2: OK
- empty -
-> [email protected]_3: OK
- empty -
-> [email protected]_1: OK
- empty -
-> [email protected]_2: OK
- empty -
-> [email protected]_3: OK
- empty -
-> [email protected]_1: OK
* {u'args': u"[u'url', 35637]", u'time_start': 464085.760026547, u'name': u'ingest.tasks.html.download', u'delivery_info': {u'priority': None, u'redelivered': False, u'routing_key': u'backlog.#', u'exchange': u'celery'}, u'hostname': u'[email protected]_3', u'acknowledged': True, u'kwargs': u'{}', u'id': u'083b575c-8e52-4426-90a5-e9a6ceb117a4', u'worker_pid': 28807}
-> [email protected]_2: OK
- empty -
-> [email protected]_3: OK
- empty -
这是一个RabbitMQ的管理插件的队列标签
我已经设置了队列的截图是backlog
和ingest
。所有其他人都由rabbitmq设置。我不确定如何解释这些。
所以我不确定这里发生了什么。
兔排队呢?任务仍在经纪人中或消息已被消费?可能是预取你的问题http://docs.celeryproject.org/en/latest/configuration.html#std:setting-CELERYD_PREFETCH_MULTIPLIER –
我认为,这就是为什么我添加了'ACKS_LATE = True'和'PREFETCH_MULTIPLIER = 1'到配置。似乎没有效果。可能不得不作为经纪人切换到redis ... – Jason
奇怪。我刚刚检查了在职员工,他们都在一台机器上。群集中的其他两台服务器处于空闲状态。 – Jason