2016-11-21 335 views
0

我試圖讓RabbitMQ配置在F5負載均衡器後面。我有一個工作的RabbitMQ節點,其默認節點名稱爲rabbit @%computername%。它設置爲偵聽所有網絡接口(所有IP地址爲0.0.0.0:5671,這是AMQP SSL端口),並且工作正常。但是,連接到它的所有客戶端應用程序當前正在使用特定的節點名稱,例如「%計算機%」。爲了利用負載平衡器的容錯能力,我想更新所有客戶端應用程序以使用負載平衡名稱而不是特定節點名稱,例如使用HostName =「balancedname.mycompany.com」而不是「%computername%」連接。但是,當我更新我的客戶端應用程序以連接到負載平衡名稱時,連接失敗。我怎樣才能使這個工作?帶F5負載均衡器的RabbitMQ

我是F5的新手,我注意到池的成員地址是IP地址...應該是節點名稱而不是IP嗎?甚至有可能看到節點名稱可能完全是任意的,並不一定映射到任何網絡可解析的東西?我處於託管狀態,因爲我沒有對F5的寫入權限,所以嘗試這些事情有點棘手。

我在負載平衡RabbitMQ設置上一直沒有找到非常多的信息。我明白,所有RabbitMQ隊列只存在於一個節點上,我已經將F5設置爲主動 - 被動模式,這樣流量總是會路由到主節點,除非它停止。

更新1:看來,this issue回來咬我這裏。我使用SSL證書進行EXTERNAL身份驗證,並且由於客戶端使用負載平衡名稱而不是節點名稱進行連接,並且負載平衡名稱未用於創建證書,所以它拒絕了連接。我最終重新生成了證書並使用了負載平衡名稱,但這還不夠 - 我還必須在Windows主機文件中添加一個條目,以將127.0.0.1和:: 1映射到負載平衡DNS地址。

更新2:更新1僅解決連接問題,用於在作爲負載平衡器一部分的應用程序服務器上運行客戶端應用程序,但遠程客戶端無法工作。內部例外說「證書鏈是由不受信任的權威機構頒發的」。 RabbitMQ + SSL很難。而增加負載平衡使其更加困難。

回答

0

我在回答我自己的問題,希望它能爲人們節省一些時間。在我的場景中,我需要客戶端連接到像myrabbithost.mycompany.com這樣的負載均衡地址,並且只要F5將流量引導到一個節點並且在故障轉移到輔助節點(如果它關閉的情況下)。我已經配置了安全性,並使用自簽名證書對RabbitMQ進行了身份驗證。這些證書具有特定於每個主機的通用名稱,這是該問題。爲了使用.NET,證書上的通用名稱必須與正在連接的服務器名稱(myrabbithost.mycompany.com)相匹配。我必須做到以下幾點:

  • 與myrabbithost.mycompany.com
  • 的通用名稱的RabbitMQ的服務器上生成新的服務器和客戶端證書生成一個新的證書的客戶,同時爲了使用連接使用SSL身份驗證
  • 仍然在RabbitMQ服務器上,我必須連接用於證書頒發機構的多個cacert.pem文件,以便客戶端可以使用任何節點生成的客戶端證書對任何節點進行身份驗證。當我修改rabbit.config來使用「all.pem」而不是「cacert.pem」時,客戶端能夠連接,但是它打破了管理界面,所以我修改了rabbit.config中的rabbitmq_management設置來指定host-具體的cacert.pem文件,它又開始工作。

爲了建立高可用性,我建立了一個RabbitMQ集羣,但也遇到了一些問題。除了將Erlang cookie從主節點複製到C:\ Windows和C:\ users \ myusername中的輔助節點之外,我必須通過任務管理器終止epmd.exe進程,因爲rabbitmqctl join_cluster命令失敗,出現「節點向下「錯誤。 epmd.exe進程在RabbitMQ中斷時仍然存在,並且它可能會導致rabbitmqctl.bat報告錯誤的錯誤,比如「node down」,即使它沒有關閉。