我正在構建網絡目錄存檔程序,使用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