2016-04-15 217 views
0

我已經設置了一個RabbitMQ集羣,它有3個節點:rabbit1,rabbit2和rabbit3,每個節點都在docker容器中運行。RabbitMQ集羣不會選出新的主節點

所有隊列在三個節點之間鏡像,rabbit1是主節點。當我停止rabbit2或rabbit3的容器時,剩下的兩個節點工作正常。如果我有一個隊列中的3條消息,這些消息仍然存在於rabbit1和另一個仍在運行的節點上。

但是,如果我停止rabbit1,則會清空rabbit2和rabbit3的隊列,直到我再次啓動rabbit1。如果我向rabbit2或rabbit3發送消息,則收到該消息但未保存到隊列中;而當rabbit1啓動並且我發送了一些信息給rabbit2/rabbit3時,消息被保存並正確同步。

是否有任何方式或任何配置,我需要考慮,以便主機關閉時消息不從奴隸清空,但奴隸選擇一個新的主人,或至少保存消息保存? 非常感謝您提前。

回答

0

設置羣集是一回事,但您還需要配置隊列鏡像。默認情況下,不在其他節點上覆制隊列:您需要明確使用indicate which queue(s) must be replicated and how,使用策略。

以上鍊接的RabbitMQ文檔作爲幾個用例的示例。

+0

我應該澄清一下:我設置了正確的策略來在所有備註中複製消息並自動進行同步。這就是爲什麼我很困惑,爲什麼它不工作。我的政策如下:rabbitmqctl set_policy ha-all「^ ha \」。 「{」「ha-mode」「:」「all」「」「ha-sync-mode」:「automatic」}「 – KaffeeKaethe

+0

所以根據這個」如果停止包含鏡像隊列主節點的RabbitMQ節點,某些其他節點上的一些從設備將被提升爲主設備「它應該工作 – KaffeeKaethe

+0

您的隊列的名稱是什麼? –

0

所以,我發現了問題:

我宣佈我的代碼中的隊列,即使沒有的RabbitMQ「計數」這些隊列他們並不在管理和例如出現既與「被視爲rabbitmqctl list_queues「。

如果我通過UI或通過rabbitmqadmin聲明隊列並讓服務連接到已經存在的隊列,那麼它工作正常。

我想知道爲什麼隊列沒有出現在管理工具中,即使它們顯然存在於某處(因爲我可以讀/推)。