2017-06-13 223 views
0

希望有人能夠給我一些指導。我在3個節點上安裝了RabbitMQ集羣。 - 節點1(主),節點2和節點3RabbitMQ - 集羣和客戶端連接

我無法弄清楚的部分是我找不到任何關於Master發生什麼情況的信息,客戶端指向什麼?

如果Node1發生故障,那麼配置爲指向Node1的客戶端肯定無法自動故障切換到新的主設備上?

我的想法是設置一個負載均衡器,它可以檢測哪個節點是主節點,並且只會將請求重定向到該節點?

任何想法或想法?

謝謝:)

回答

1

如果客戶端只能夠連接到一個節點,並在該節點出現故障,客戶端將失去連接。你需要(如你揣)某種設置下,一是:

  • 您將負載平衡器在節點的前面,客戶端只連接到負載均衡;或者
  • 客戶端可以連接到任何可用節點,依次嘗試每個節點。

無論哪種解決方案,都不需要將所有客戶端流量定向到主節點。客戶端節點可以連接到主代理或從代理。

1

在CloudAMQP中,我們有一個到客戶端連接到的羣集的單個URL,我們建議始終將客戶端配置爲在連接丟失時自動重新連接。

我們在節點之間進行故障轉移和負載平衡,並且通過DNS完成,並且具有較低的TTL(30s)。

https://www.cloudamqp.com/blog/2015-12-29-cloudamqp-plan-setup-pause-minority-mirrored-nodes-and-the-cap-theorem.html

+0

Hey Johansson, 感謝你的理解,我會看看CloudAMQP是不是我之前做過的任何研究,但是如果它提供了這個機制,它可能是一個很好的選擇。我會研究! 再次感謝 – Shane

1

春AMQP有助於輕鬆地解決這個。它提供了開箱即用的故障轉移機制。您可以在創建連接工廠時用逗號分隔來配置節點的地址並將其傳遞給地址參數。

對於如:

<rabbit:connection-factory id="rabbitConnectionFactory" addresses="192.168.1.2:5672,192.168.1.3:5672" username="${rabbitmq.username}" 
          connection-factory="clientConnectionFactory" 
          cache-mode="${rabbit.cacheMode}" 
          channel-cache-size="${rabbit.channelCacheSize}" 
          password="${rabbitmq.password}" virtual-host="${rabbitmq.vhost}"/> 

這樣,當第一個節點出現故障,將連接到第二個節點進行。

+0

是的,我看了幾個這些解決方案,但決定我想抽象出需要列出每個客戶/消費者中實際的RabbitMQ節點。 絕對值得一看,不過謝謝你 – Shane