2013-04-04 197 views
5

我對websphere MQ很新,所以如果我沒有使用正確的術語,請原諒我。我們正在執行一個項目,在該項目中,我們需要設置MQ羣集以實現高可用性。Websphere MQ集羣

客戶端應用程序爲訂戶和發佈者維護與隊列管理器的連接池。假設我們有一個集羣中有兩個隊列管理器,它們託管的隊列名稱相同。每個隊列都有自己的一組訂閱者和發佈者,由客戶端應用程序緩存。假設某個隊列管理器關閉,該隊列管理器上的隊列的訂閱者和發佈者將死亡,導致客戶端應用程序上的對象不存在。

在這種情況下可以採取以下方案嗎?

1]當第一的QueueManager崩潰,在其隊列中的郵件羣集

2]在被轉移到其它的QueueManager當的QueueManager再次出現時,是否有任何機制來恢復發佈者和訂閱。目前我們已經在客戶端應用程序中編寫了一個自動恢復線程,嘗試重新連接失敗的發佈者和訂閱者。但是在集羣設置的情況下,我們擔心發佈者和訂閱者會重新連接到其他正在運行的qmanager。當崩潰的隊列管理器恢復後,將不會有發佈者和訂閱者。

任何人都可以請解釋如何照顧以上兩種情況?

回答

4

要添加到Shashi的答案,要充分利用WMQ羣集,您需要在發件人和郵件接收者之間建立網絡跳轉。 WMQ集羣是關於QMgrs之間如何交談。它與客戶端應用程序如何與QMgrs對話並不複製消息無關。在羣集中,當消息必須從一個QMgr獲取到另一個QMgr時,羣集會找出將其路由到的位置。如果一個目標隊列有多個羣集實例,則該消息有資格被路由到其中的任何一個。如果發送者和接收者之間沒有網絡跳轉,則消息不需要離開本地QMgr,因此即使涉及的QMgrs可能參與羣集,也不會調用WMQ羣集行爲。

在傳統的WMQ集羣體系結構中,接收方都監聽同一隊列的多個實例,名稱相同,分佈在多個QMgr上。發件人有一個或多個QMgrs,他們可以連接併發送請求(即發即棄),可能正在等待回覆(請求回覆)。由於這些消息的接收者提供了一些服務,我打電話給他們的QMgrs「服務提供商QMgrs」。消息發送者所在的QMgrs是「服務消費者」QMgrs,因爲這些應用程序是服務的消費者。

下面的幻燈片來自我在WMQ Architecture諮詢活動中使用的演示文稿。

An SOA architecture for WebSphere MQ

注意服務的消費者 - 的東西發送請求消息 - 故障轉移。監聽服務端點隊列並提供服務的事件不會故障轉移。這是因爲需要確保始終提供每個活動的服務端點隊列。通常,每個應用程序實例在兩個或多個隊列實例上保存輸入句柄。通過這種方式,QMgr可以關閉,所有應用程序實例保持活動狀態。如果某個應用程序實例關閉,則其他某個應用程序實例將繼續爲其隊列服務。如果需要,服務提供商對特定QMgrs的這種親和性也使XA事務性成爲可能。

我發現解釋WMQ HA最好的辦法是從IMPACT會議幻燈片:

WebSphere MQ High Availability Options

WebSphere MQ集羣可確保服務仍然可用,即使羣集實例隊列可能不可用。羣集中的新消息將路由到剩餘的隊列實例。硬件集羣或多實例QMgr(MIQM)提供對現有消息的訪問。當主動/被動對的一端發生故障時,在QMgr上只有短暫中斷發生故障切換時,則輔助節點接管並使隊列上的任何消息再次可用。組合WMQ羣集和硬件羣集/ MIQM的網絡提供最高級別的可用性。

請記住,在這些配置中,沒有一個是跨節點複製的消息。 WMQ消息總是有一個物理位置。有關這方面的更多信息,請參閱Thoughts on Disaster Recovery

6

WMQ集羣是一個高級主題。在嘗試任何事情之前,您必須首先對WMQ進行大量的讀取,並理解WMQ世界中的集羣意味着什麼。

WMQ集羣在許多方面與傳統集羣不同。與傳統羣集不同,比如在主動/被動羣集中,數據將在應用程序的主動和被動實例之間共享。在任何時候,應用程序的活動實例都將處理數據。當活動實例關閉時,被動實例接管並開始處理。 WMQ羣集中的情況並非如此,羣集中的隊列管理器是唯一的,因此這些隊列管理器託管的隊列/主題不共享。您可能在兩個隊列管理器中都有相同的隊列/主題,但由於隊列管理器不同,因此不會共享消息,主題,訂閱等。

回答您的問題。
1)否。消息(如果持久)將保留在崩潰的隊列管理器中。他們不會轉移到其他隊列管理器。由於隊列管理器本身不可用,所以在隊列管理器啓動之前無法完成任何操作。
2)沒有。隊列經理不能這樣做。應用程序有責任檢查隊列管理器的可用性並重新連接。 WMQ提供自動客戶端重新連接功能,當WMQ客戶端庫檢測到連接中斷錯誤時,它們會自動重新連接到隊列管理器。 WMQ v7.x及更高版本的C和Java客戶端可以使用此功能。 C#客戶端支持v7.1中的功能。

爲了您的高可用性要求,您可以查看WMQ的多實例隊列管理器功能。此功能使同一隊列管理器的主動/被動實例可以在兩臺不同的機器上運行。隊列管理器的活動實例將處理客戶端連接,而被動實例將處於睡眠模式。這兩個實例將共享數據和日誌。一旦活動實例關閉,被動實例就會激活。您將有權訪問活動隊列管理器關閉之前隊列中的所有持久性消息。

通過WMQ信息中心閱讀關於多實例隊列管理器的更多信息。