Windows 故障轉移群集中“訊息佇列服務不可用”

Windows 故障轉移群集中“訊息佇列服務不可用”

我正在一個站點上進行調試,我們的應用程式在 3 節點故障轉移群集上運行,並具有用於訊息隊列的 MSMQ 群集組。我們看到系統在某些節點組合上運行,但不是在所有節點組合上運行,因此故障轉移安全性不如預期。

問題在於從叢集隊列接收訊息。

當我們的應用程式在群集節點 B 或 C 上運行時,無論 MSMQ 在哪個節點上運行,它都可以工作(工作 = 我們的應用程式接收訊息)。當我們的應用程式在節點 A 上運行時,無論 MSMQ 在哪裡運行,它都會因為訊息佇列服務不可用而失敗。

更令人困惑的是,我建立了一個帶有GUI 用戶端的小型WCF-MQ-proxy 服務,它允許我向該服務發送命令,然後該服務將按照客戶端指定的方式發送到訊息佇列或從訊息隊列接收訊息- 並且在此過程中提供盡可能多的回饋。該模式與此應用程式相同,只是失敗的節點是節點 C - 無論 MSMQ 在何處運行。

以下是我檢查過的一些內容:

  • 該服務(我們的應用程式)在所有 3 個節點上的相同網域使用者帳戶下運行。
  • 應用程式設定檔包含訊息佇列的相同路徑。
  • 佇列存取權限:每個人都有完全的控制權。
  • 本機 MSMQ 服務正在所有節點上運行,我確保本機佇列的名稱與叢集佇列的名稱不同。
  • 所有節點上的防火牆均已停用。
  • 節點 A 與 B 和 C 的不同之處在於,它在與叢集網路相同的子網路上有一個額外的網路連線。因此,當我從節點 B 對它執行 ping 操作時,它會在「錯誤」的介面上做出回應。不確定這是否重要,但這有點奇怪。
  • 服務選項「使用網路名稱作為電腦名稱」似乎沒有改變任何內容。我的代理服務報告其感知的電腦名稱,對於節點 A,它始終返回叢集組名稱,在節點 B 和 C 上,它始終返回節點名稱。
  • MSMQ 叢集群組使用共用 iSCSI 磁碟機進行儲存。

我只是一名開發人員,無論如何都不是 Microsoft 基礎架構專家,所以我想問:在調試這樣的叢集 MSMQ 設定時,建議採取哪些步驟?

答案1

好吧,經過我自己以及與 Microsoft 訊息佇列支援團隊一起調試了幾週,找到了解決方案。

太長了;解決方案是刪除或重新命名註冊表項

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<SERVICENAME>\Environment

錯誤的原因是 MQ 用戶端無法在本機系統上找到 MQ 服務 - 這是與遠端 MQ 通訊所必需的 - 有點像本地 SMTP 服務將電子郵件轉發到遠端系統。但是,本例中的本機系統並不是叢集節點,而是“叢集群組”,且叢集群組上沒有執行 MQ 服務(因為它不是真正的系統,只是一個別名)。 MQ 用戶端在群組群組上尋找服務的原因是在叢集服務設定中選取了「使用網路名稱作為電腦名稱」複選框。這會在叢集節點的註冊表中新增一個新值,為服務設定環境。真正的問題是,當取消選取此核取方塊時,它不會從登錄中刪除該值,從而在設定後實際上無法正確清除設定(從 GUI)。因此解決方法是使用 regedit 或 regedt 手動刪除該值。

相關內容