2017-02-03 43 views
1

我在Docker運行Celery和RabbitMQ Gunicorn。芹菜如何發現新的節點?

我的問題是這樣的:我明白芹菜是專爲分佈式處理而設計的。我沒有看到任何文檔,假設我在同一局域網上有幾臺機器/節點,他們如何發現彼此? RabbitMQ扮演一個角色嗎?芹菜實例是否以某種方式發現對方?有沒有合適的主機列表?如果是這樣,我該如何編輯它?

此外,假設我將只使用一個節點來處理HTTP請求,那麼是否仍然需要在所有節點上運行gunicorn?我問這是因爲在gunicorn start命令中,它有一個工人數量的設置。而且,該設置僅適用於該節點,還是作爲所有連接節點的最大總數?

編輯: 第一個答案後,我開始研究這個。似乎我需要某種網絡設置,無論是羣集還是橋接等。我應該澄清,我使用docker-compose來提出解決方案,並且我看到正常的swarm設置不起作用,而且我有如果我沿着這條路線使用稍微不同的東西。

要明確:我需要一種方式,我可以在不同的主機加入芹菜工人,讓他們能夠與「主」的主機進行通信,這樣我可以增加系統的容量。如果有人可以提供一個清晰的流程來實現這一目標或鏈接,這將是最有幫助的。

我希望我已經表達清楚,請讓我知道如果您需要任何進一步的信息。

謝謝!

回答

0

我明白芹菜是專爲分佈式處理而設計的。什麼 我根本看不到任何文檔,假設我在同一個局域網上有幾臺機器/節點,他們如何發現彼此? RabbitMQ 是否發揮作用?芹菜實例是否以某種方式發現對方? 有沒有合適的主機列表?如果是這樣,我該如何編輯它?

Celery是一個分佈式任務隊列,使用消息代理系統(如RabbitMQ)工作。

本質上發生了什麼,所有的芹菜工人連接一個共享隊列,如RabbitMQ。主人通過將其推入隊列來派遣工作。連接到隊列的工作人員也將工作從隊列中拉出,然後嘗試執行。一旦完成(成功或其他),它將把結果推回隊列,然後主站可以查詢隊列。

鑑於此架構,您不需要添加主機列表,他們「自動檢測」工作。您只需啓動它們並確保它們可以與隊列通話。

來自另一個SO答案的稍微更詳細的解釋。

Link to the architecture with a diagram

此外,假設我將只使用一個節點來處理HTTP 請求,那麼是否仍然需要在所有節點上運行gunicorn?我要求 這是因爲在gunicorn start命令中,它有一個 工人的設置。而且,該設置是否僅適用於該節點,即 或者是所有連接節點的最大總數?

不,您不需要在所有節點上運行guicorn,只需要通過python爲HTTP請求提供服務即可。芹菜工人不需要guicorn。 guicorn中的worker設置是指HTTP偵聽器池中的工作者數量。這是獨立的,獨立的,不受芹菜使用的工人影響。

+0

Hi @ffledgling,謝謝你的回答,我現在比以前知道更多。儘管我有幾個澄清問題。你說的話:「你不需要添加主機列表,他們」自動檢測「工作,只需要啓動它們並確保它們可以與隊列通話。」我該怎麼做呢?這是我原來的職位的基本要素。我假設某處我告訴芹菜實例,哪個文件?是否有我需要遵循的特定格式?我沒有檢查你發佈的鏈接,它的信息豐富,但沒有提供實際的配置示例。 再次感謝! – Bruce