MQ多實例隊列管理器高可用架構(一)

1.   多實例隊列管理器高可用架構

實例隊列管理器能夠在備用伺服器上自動地重新啟動。如下圖所示,WebSphere MQ 安裝在兩個伺服器上,其中一個伺服器處於空閑狀態。QM1 的一個實例處於活動狀態,並且正在一個伺服器上運行。QM1 的另一個實例以備用方式在另一個伺服器上運行,它不執行任何活動處理,但已準備好在 QM1 的活動實例發生故障時接管活動實例。

QM1 的活動實例在運行期間對共享的隊列管理器數據文件夾和日誌文件夾進行互斥訪問。活動實例發生故障時,QM1 的備用實例將檢測到這種情況並變為活動實例。它將以先前活動實例所遺留的狀態來接管 QM1 數據和日誌,並接受來自客戶機和通道的重新連接請求。

多實例隊列管理器是高可用性解決方案的組成部分。需要其他一些組件才能構建實用的高可用性解決方案。

  • 客戶機和通道重新連接功能,用於將 WebSphere MQ連接轉移到接管活動隊列管理器實例的計算機。
  • 高性能共享網路文件系統,此系統正確地管理鎖定並防範介質和文件伺服器故障。

2.   多實例隊列管理器與HA比較

傳統HA 集群是包含兩台或更多台計算機和資源(如磁碟和網路)的組,這些計算機和資源互相連接在一起並配置為當其中一個發生故障時,高可用性管理器,如 HACMP (UNIX) 或 MSCS (Windows),將執行故障轉移。多實例隊列管理器與 HA 集群項比較,有以下差別:

多實例隊列管理器方式 HA集群方式
實現功能 •    集成到 WebSphere MQ 中的基本故障轉移支持

•    故障轉移速度快於 HA 集群

•    配置和操作簡單

•    與 WebSphere MQ 資源管理器集成

•    能夠協調多個資源,如應用程序伺服器或資料庫

•    配置選項更靈活,包括可以包含兩個以上節點的集群

•    可以故障轉移多次,而不需要操作員干預

•    將隊列管理器的 IP 地址接管為故障轉移的一部分

局限性 •    需要高可用性且高性能的已聯網的存儲器

•    網路配置更複雜,因為隊列管理器在故障轉移時將更改服務 IP 地址

•    出現故障轉移時,必須手動重新啟動備用實例

•    需要購買附加產品和技能

•    需要可在集群的節點間切換的磁碟

•    HA 集群的配置相對複雜

•    故障轉移以往都相當慢

•    如果用於監視資源(如隊列管理器)的腳本中存在缺陷,那麼可能會發生不需要的故障轉移

3.   多實例隊列管理器創建和維護

3.1 多實例隊列管理器創建

  • 在伺服器1和伺服器2上安裝WebSphere MQ、創建mqm 用戶和組以及定義/var/mqm;
  • 檢查並確保兩伺服器上/etc/passwd 中mqm的uid和gid一致;
  • 在伺服器1上,將要共享的公共文件夾 /MQHA中創建日誌和數據目錄。例如:

mkdir /MQHA

mkdir /MQHA/logs

mkdir /MQHA/qmgrs

  • 在伺服器2上創建文件夾/MQHA,以便安裝共享的文件系統。使路徑與伺服器 1 上的路徑相同;例如:

mkdir /MQHA

  • 確保 MQHA 目錄由用戶和組 mqm 擁有並且將該用戶或組擁有的訪問權設置為rwx;
  • 在伺服器1上創建隊列管理器:

crtmqm -ld /MQHA/logs -md /MQHA/qmgrs -q QM1

  • 在伺服器1上啟動 NFS 守護程序:

/etc/init.d/nfs start

  • 在伺服器2上安裝所導出的文件系統 /MQHA:

mount -t nfs4 -o hard,intr 192.168.217.130:/ /MQHA

  • 從伺服器 1 複製隊列管理器配置詳細信息:

dspmqinf -o command QM1

該命令將輸出類似以下內容,複製到伺服器2:

addmqinf -s QueueManager -v Name=QM1 -v Directory=QM1 \

-v Prefix=/var/mqm  -v DataPath=/MQHA/qmgrs/QM1

  • 在伺服器2上增加隊列管理器配置信息:

addmqinf -s QueueManager -v Name=QM1 -v Directory=QM1 \

-v Prefix=/var/mqm  -v DataPath=/MQHA/qmgrs/QM1

  • 使用 -x 參數以任意順序啟動隊列管理器實例:strmqm -x QM1,先啟動的成為活動隊列管理器,後啟動的成為備份隊列管理器;

3.2 多實例隊列管理器維護

  • dspmq –x

顯示關於隊列管理器實例的信息,例如

dspmq -x

QMNAME(QM1) STATUS(作為備用實例運行)

INSTANCE(machine1) MODE(活動)

INSTANCE(machine2) MODE(備用)

  • strmqm -x <QM>

在其中一個伺服器上使用該命令啟動該隊列管理器,-x選項允許實例故障轉移,本伺服器上的隊列管理器變為活動實例;然後在其他伺服器上使用相同的命令啟動備用實例,-x 選項允許實例作為備用實例啟動。

  • strmqm <QM>

也可以將被配置為在不同伺服器上具有多個實例的隊列管理器作為單實例隊列管理器啟動和停止。如果使用不帶 -x 選項的 strmqm 命令來啟動隊列管理器,那麼在其他機器上配置的隊列管理器的實例會被阻止作為備用實例啟動。如果嘗試啟動另一實例,那麼會接收到不允許隊列管理器實例作為備用實例運行的響應。無法對備用實例發出不帶 -x 選項的 endmqm 命令。

  • endmqm -s <QM>

通過對活動實例發出 endmqm -s 命令,還可以將控制權手動切換到備用實例。endmqm -s 命令在不關閉備用實例的情況下將活動實例關閉。隊列管理器數據和日誌上的互斥訪問鎖定被釋放,並且備用實例接管工作。

  • endmqm -x <QM>

如果使用帶有 -x 選項的 endmqm 命令來停止備用實例,那麼該實例將停止作為備用實例,並且活動實例繼續運行。

  • endmqm <QM>

如果使用不帶 -s 選項的 endmqm 命令來停止多實例隊列管理器的活動實例,那麼活動實例和備用實例均會停止。

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營