2016-05-16 88 views
1

我正在構建網絡目錄存檔程序,使用celeryhttrack異步鏡像。我目前有一個由三臺服務器組成的集羣,每臺服務器有五個工作站。每個任務可能需要兩到六個小時才能執行。 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的管理插件的隊列標籤

enter image description here

我已經設置了隊列的截圖是backlogingest。所有其他人都由rabbitmq設置。我不確定如何解釋這些。

所以我不確定這裏發生了什麼。

+0

兔排隊呢?任務仍在經紀人中或消息已被消費?可能是預取你的問題http://docs.celeryproject.org/en/latest/configuration.html#std:setting-CELERYD_PREFETCH_MULTIPLIER –

+0

我認爲,這就是爲什麼我添加了'ACKS_LATE = True'和'PREFETCH_MULTIPLIER = 1'到配置。似乎沒有效果。可能不得不作爲經紀人切換到redis ... – Jason

+0

奇怪。我剛剛檢查了在職員工,他們都在一臺機器上。羣集中的其他兩臺服務器處於空閒狀態。 – Jason

回答

2

在聊天中討論後,我真的認爲你的問題是將RabbitMQ配置爲CELERY_RESULT_BACKEND,這看起來很清楚,這些隊列中有一些名稱UIIDs,其中一些消息未消耗大量消息。

這意味着任務正在將結果存儲回代理,但沒有人正在消耗導致RabbitMQ放慢速度並凍結。 這是即使在舊文檔中提到它被saing

舊AMQP後端(嚴重)模擬一個基於數據庫的後端。

對CELERY_RESULT_BACKEND使用noSQL或緩存系統。

但是,在較新版本中,這些消息應該自動過期,從而減少了在docs中寫入的兔子MQ的問題。

+0

文檔鏈接已損壞或已過期。 –

+0

謝謝,答案已經改變。 –

相關問題