2012-04-11 21 views
2

我有興趣爲我正在使用的應用程序使用Celery。這一切似乎都很簡單,但如果我有多個負載平衡的應用程序服務器,我有點困惑我需要做什麼。所有文檔都假定代理將與應用程序在同一臺服務器上。目前,我的所有應用程序服務器都位於Amazon ELB的後面,任務需要能夠來自其中的任何一個。有關在具有多個負載平衡的Django應用程序服務器中使用芹菜的問題

這就是我想我需要做的事:

  • 在一個單獨的實例
  • 配置每個應用程序實例運行代理服務器連接到該代理服務器
  • 每個應用程序實例也將是是一個芹菜工作(運行 芹菜)?

我唯一的牛肉是:如果我的經紀人實例死亡會發生什麼?我可以運行2個經紀人實例嗎?

任何提示或信息關於如何在像我這樣的設置將不勝感激。我確定我錯過了某些東西或不瞭解某些東西。

回答

1

你是正確的所有點。

如何使可靠經紀人:使聚集的RabbitMQ安裝,如下所述: http://www.rabbitmq.com/clustering.html

+0

謝謝您的回答,並鏈接到集羣的信息!不過,我決定爲我的經紀人使用亞馬遜的SQS服務,而不是處理運行我自己的rabbitmq羣集。原來Celery已經建立了SQS支持。看到這個問題:http://stackoverflow.com/questions/8048556/celery-with-amazon-sqs – 2012-04-14 17:29:08

2

以供將來參考,對於那些誰更願意堅持使用RabbitMQ的...

您可以創建一個RabbitMQ的來自2個或更多實例的集羣。將這些實例添加到您的ELB並將您的芹菜工作者指向ELB。只要確保你連接正確的端口,你應該全部設置。不要忘記讓你的RabbitMQ機器互相交談來運行集羣。這對我的生產非常有效。

這裏有一個例外:如果你需要安排任務,你需要一個celerybeat進程。出於某種原因,我無法將celerybeat連接到ELB,並且不得不直接連接到其中一個實例。我打開了一個關於它的問題,它應該被解決(尚未測試)。請記住,celerybeat本身只能存在一次,所以這已經是單點故障。

+0

你是如何配置的,以便在60秒後ELB不會中斷連接? [2013-07-17 11:03:40,395:ERROR/MainProcess] consumer:無法連接到amqp:// usr @ elburl:5672/vhost:套接字已關閉。 在2.00秒內再次嘗試... – moodh 2013-07-17 11:06:32

+2

我正在使用TCP健康檢查,而不是HTTP。使用rabbimq端口。適合我。 – zvikico 2013-07-17 11:17:18

+0

我切換到rabbitmq端口的TCP健康檢查。當broker_url違反ELB時,我的芹菜工人仍然在1分鐘內超時。你是如何配置芹菜的?我嘗試使用BROKER_HEARTBEAT,但沒有運氣。 :/ – moodh 2013-07-17 11:20:58