IBM MQ運維使用手冊
一、測試環境說明
Linux:
作業系統版本:SUSE Linux Enterprise Server 10 SP4 32bit
MQ版本:7.1.0.3
Ip地址:192.168.0.151
Windows:
作業系統版本:Windows 7旗艦版SP1 32bit
MQ版本:7.1.0.3
Ip地址:192.168.0.111
二、MQ簡介
1)訊息中介軟體概述
訊息佇列技術是分散式應用間交換資訊的一種技術。訊息佇列可駐留在記憶體或磁碟上,佇列儲存訊息直到它們被應用程式讀走。通過訊息佇列,應用程式可獨立地執行,它們不需要知道彼此的位置、或在繼續執行前不需要等待接收程式接收此訊息。
在分散式計算環境中,為了整合分散式應用,開發者需要對異構網路環境下的分散式應用提供有效的通訊手段。為了管理需要共享的資訊,對應用提供公共的資訊交換機制是重要的。
2)訊息佇列 (Message Queue)
訊息佇列為構造以同步或非同步方式實現的分散式應用提供了鬆耦合方法。訊息佇列的API呼叫被嵌入到新的或現存的應用中,通過訊息傳送到記憶體或基於磁碟的佇列或從它讀出而提供資訊交換。訊息佇列可用在應用中以執行多種功能,比如要求服務、交換資訊或非同步處理等。
中介軟體是一種獨立的系統軟體或服務程式,分散式應用系統藉助這種軟體在不同的技術之間共享資源,管理計算資源和網路通訊。它在計算機系統中是一個關鍵軟體,它能實現應用的互連和互操作性,能保證系統的安全、可靠、高效的執行。中介軟體位於使用者應用和作業系統及網路軟體之間,它為應用提供了公用的通訊手段,並且獨立於網路和作業系統。中介軟體為開發者提供了公用於所有環境的應用程式介面,當應用程式中嵌入其函式呼叫,它便可利用其執行的特定作業系統和網路環境的功能,為應用執行通訊功能。
如果沒有訊息中介軟體完成資訊交換,應用開發者為了傳輸資料,必須要學會如何用網路和作業系統軟體的功能,編寫相應的應用程式來發送和接收資訊,且交換資訊沒有標準方法,每個應用必須進行特定的程式設計從而和多平臺、不同環境下的一個或多個應用通訊。例如,為了實現網路上不同主機系統間的通訊,將要求具備在網路上如何交換資訊的知識(比如用TCP/IP的socket程式設計);為了實現同一主機內不同程序之間的通訊,將要求具備作業系統的訊息佇列或命名管道(Pipes)等知識。
MQ具有強大的跨平臺性,它支援的平臺數多達35種。它支援各種主流Unix作業系統平臺,如:HP-UX、AIX、SUN Solaris、Digital UNIX、Open VMX、SUNOS、NCR UNIX;支援各種主機平臺,如:OS/390、MVS/ESA、VSE/ESA;同樣支援Windows NT伺服器。在PC平臺上支援Windows9X/Windows NT/Windows 2000和UNIX (UnixWare、Solaris)以及主要的Linux版本(RedHat、TurboLinux等)。此外,MQ還支援其他各種作業系統平臺,如:OS/2、AS/400、Sequent DYNIX、SCO OpenServer、SCO UnixWare、Tandem等。
三、基本概念
1)佇列管理器
佇列管理器是MQ系統中最上層的一個概念,由它為我們提供基於佇列的訊息服務。
2)訊息
在MQ中,我們把應用程式交由MQ傳輸的資料定義為訊息,我們可以定義訊息的內容並對訊息進行廣義的理解,比如:使用者的各種型別的資料檔案,某個應用向其它應用發出的處理請求等都可以作為訊息。訊息有兩部分組成:訊息描述符(Message Discription或Message Header),描述訊息的特徵,如:訊息的優先順序、生命週期、訊息Id等;
訊息體(Message Body),即使用者資料部分。在MQ中,訊息分為兩種型別,非永久性(non-persistent)訊息和永久性(persistent)訊息,非永久性訊息是儲存在記憶體中的,它是為了提高效能而設計的,當系統掉電或MQ佇列管理器重新啟動時,將不可恢復。當用戶對訊息的可靠性要求不高,而側重系統的效能表現時,可以採用該種類型的訊息,如:當釋出股票資訊時,由於股票資訊是不斷更新的,我們可能每若干秒就會發布一次,新的訊息會不斷覆蓋舊的訊息。永久性訊息是儲存在硬碟上,並且紀錄資料日誌的,它具有高可靠性,在網路和系統發生故障等情況下都能確保訊息不丟、不重。
此外,在MQ中,還有邏輯訊息和物理訊息的概念。利用邏輯訊息和物理訊息,我們可以將大訊息進行分段處理,也可以將若干個本身完整的訊息在應用邏輯上歸為一組進行處理。
3)訊息佇列
佇列是訊息的安全存放地,佇列儲存訊息直到它被應用程式處理。
訊息佇列以下述方式工作:
a) 程式A形成對訊息佇列系統的呼叫,此呼叫告知訊息佇列系統,訊息準備好了投向程式B;
b) 訊息佇列系統傳送此訊息到程式B駐留處的系統,並將它放到程式B的佇列中;
c) 適當時間後,程式B從它的佇列中讀此訊息,並處理此資訊。
由於採用了先進的程式設計思想以及內部工作機制,MQ能夠在各種網路條件下保證訊息的可靠傳遞,可以克服網路線路質量差或不穩定的現狀,在傳輸過程中,如果通訊線路出現故障或遠端的主機發生故障,本地的應用程式都不會受到影響,可以繼續傳送資料,而無需等待網路故障恢復或遠端主機正常後再重新執行。
在MQ中,佇列分為很多種型別,其中包括:本地佇列、遠端佇列、模板佇列、動態佇列、別名佇列等。
本地佇列又分為普通本地佇列和傳輸佇列,普通本地佇列是應用程式通過API對其進行讀寫操作的佇列;傳輸佇列可以理解為儲存-轉發佇列,比如:我們將某個訊息交給MQ系統傳送到遠端主機,而此時網路發生故障,MQ將把訊息放在傳輸佇列中暫存,當網路恢復時,再發往遠端目的地。
遠端佇列是目的佇列在本地的定義,它類似一個地址指標,指向遠端主機上的某個目的佇列,它僅僅是個定義,不真正佔用磁碟儲存空間。
模板佇列和動態佇列是MQ的一個特色,它的一個典型用途是用作系統的可擴充套件性考慮。我們可以建立一個模板佇列,當今後需要新增佇列時,每開啟一個模板佇列,MQ便會自動生成一個動態佇列,我們還可以指定該動態佇列為臨時佇列或者是永久佇列,若為臨時佇列我們可以在關閉它的同時將它刪除,相反,若為永久佇列,我們可以將它永久保留,為我所用。
4)通道
通道是MQ系統中佇列管理器之間傳遞訊息的管道,它是建立在物理的網路連線之上的一個邏輯概念,也是MQ產品的精華。
在MQ中,主要有三大類通道型別,即訊息通道,MQI通道和Cluster通道。訊息通道是用於在MQ的伺服器和伺服器之間傳輸訊息的,需要強調指出的是,該通道是單向的,它又有傳送(sender), 接收(receive), 請求者(requestor), 服務者(server)等不同型別,供使用者在不同情況下使用。MQI通道是MQ Client和MQ Server之間通訊和傳輸訊息用的,與訊息通道不同,它的傳輸是雙向的。群集(Cluster)通道是位於同一個MQ 群集內部的佇列管理器之間通訊使用的。
工作原理:
如圖所示:
首先來看本地通訊的情況,應用程式A和應用程式B運行於同一系統A,它們之間可以藉助訊息佇列技術進行彼此的通訊:應用程式A向佇列1傳送一條資訊,而當應用程式B需要時就可以得到該資訊。
其次是遠端通訊的情況,如果資訊傳輸的目標改為在系統B上的應用程式C,這種變化不會對應用程式A產生影響,應用程式A向佇列2傳送一條資訊,系統A的MQ發現Q2所指向的目的佇列實際上位於系統B,它將資訊放到本地的一個特殊佇列-傳輸佇列(Transmission Queue)。我們建立一條從系統A到系統B的訊息通道,訊息通道代理將從傳輸佇列中讀取訊息,並傳遞這條資訊到系統B,然後等待確認。只有MQ接到系統B成功收到資訊的確認之後,它才從傳輸佇列中真正將該資訊刪除。如果通訊線路不通,或系統B不在執行,資訊會留在傳輸佇列中,直到被成功地傳送到目的地。這是MQ最基本而最重要的技術--確保資訊傳輸,並且是一次且僅一次(once-and-only-once)的傳遞。
MQ提供了用於應用整合的鬆耦合的連線方法,因為共享資訊的應用不需要知道彼此物理位置(網路地址);不需要知道彼此間怎樣建立通訊;不需要同時處於執行狀態;不需要在同樣的作業系統或網路環境下執行。
四、 搭建過程
MQ軟體下載連結:
http://www-03.ibm.com/software/products/en/ibm-mq
2)Linux版搭建
1. 在/tmp目錄下新建mq目錄,將介質WMQ_7.1.0.3_TRIAL_LNX_X86_32_ML.tar上傳至/tmp/mq目錄並解壓

2. 執行許可證程式:
mq01:~/mq # ./mqlicense.sh –accept
根據提示,輸入數字1接受協議
3. 安裝 WebSphere MQ for Linux 伺服器,即分別安裝Runtime、SDK 和 Server 軟體包:
mq01:~/mq # rpm -ivh MQSeriesRuntime-7.1.0-3.i386.rpm
mq01:~/mq # rpm -ivh MQSeriesSDK-7.1.0-3.i386.rpm
mq01:~/mq # rpm -ivh MQSeriesServer-7.1.0-3.i386.rpm
進行MQSeriesRuntime-7.1.0-3.i386.rpm安裝的時候,系統自動建立了一個mqm使用者和mqm組,安裝完畢後,需要使用該使用者來進行MQ的配置。
4. 更改使用者mqm屬性,設定密碼和環境變數
4.1使用root使用者將mqm:x:104:1000::/var/mqm:/bin/false更改為mqm:x:104:1000::/var/mqm:/bin/bash
4.2使用root使用者修改mqm密碼:

4.3設定mqm環境變數,mqm使用者下新建.bash_profile檔案,寫入如下內容:
export PATH=/opt/mqm/samp/bin:/opt/mqm/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:$PATH
5. 執行/opt/mqm/bin/mqconfig,檢查系統引數設定是否滿足軟體要求

將所有標為“FAIL”的檢測項調整到“PASS”;針對System V Semaphores、System V Shared Memory和System Settings,修改 /etc/sysctl.conf檔案,新增或修改其中的一些值:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 524288
net.ipv4.ip_local_port_range = 1024 65000
kernel.msgmni = 1024
net.ipv4.tcp_keepalive_time = 300
kernel.sem =500 256000 250 1024
輸入命令 sysctl–p,使設定生效
針對Current User Limits (root)引數:開啟/etc/security/limits.conf檔案,新增或修改如下配置,設定mqm使用者的最大檔案開啟數限制:
mqm hard nofile 10240
mqm soft nofile 10240
6. 修改完畢之後,重新執行/opt/mqm/bin/mqconfig確認我們的修改已經生效,然後就可以進行下一步了;否則重新修改
7. 安裝 WebSphere MQ for Linux 客戶端
mq01:~/mq # rpm -ivh MQSeriesClient-7.1.0-3.i386.rpm
8. 安裝 WebSphere MQ 樣本程式
mq01:~/mq # rpm -ivh MQSeriesSamples-7.1.0-3.i386.rpm
9. 安裝MQ其他軟體包
mq01:~/mq # rpm -ivh MQSeriesMan-7.1.0-3.i386.rpm
mq01:~/mq # rpm -ivh MQSeriesJava-7.1.0-3.i386.rpm
mq01:~/mq # rpm -ivh MQSeriesMsg_Zh_CN-7.1.0-3.i386.rpm
至此完成MQ在linux上安裝工作
更多詳情見請繼續閱讀下一頁的精彩內容: ofollow,noindex" target="_blank">https://www.linuxidc.com/Linux/2018-09/154220p2.htm