大綱:ios
1、 什麼是集羣
集羣就是Websphere MQ 隊列管理的邏輯分組,它能夠幫助你:
減小了系統管理-因爲更少的通道、遠程隊列、傳輸隊列的定義
增長了高可用性和負載均衡-因爲能夠在集羣中定義同名的隊列實例和多個隊列管理器以及在他們之間的分佈式的消息
2、創建基本的集羣
1. 定義集羣的組織和它的名字 若是須要得到更多關於集羣的信息,請參考-《WebSphere MQ Queue Manager Clusters》
2. 決定那個隊列管理器是徹底的存儲庫。你至少須要一個徹底存儲庫,通常來講,最好是兩個。徹底的存儲庫包含了在集羣中每一個隊列管理器和對象的 完整的信息。若是你須要多於兩個的徹底存儲庫,請參考-《 WebSphere MQ Queue Manager Clusters》中的第7章- Designing clusters。
3. 更改隊列管理器的定義,添加存儲庫定義。
ALTER QMGR REPOS(cluster_name)
對於須要配置爲徹底存儲庫的隊列管理器均可以用這個命令來定義。
4. 定義集羣接受通道:CLUSRCVR
在集羣中的每一個隊列都須要個接受方通道和一個指向它本身的鏈接名。
DEFINE CHANNEL(channel_name)
CHLTYPE(CLUSRCVR) TRTYPE(TCP)
CONNAME(‘my_ip_name_or_address(port)’)
CLUSTER(cluster_name)
5. 定義集羣發送方通道:CLUSSDR
對徹底存儲庫定義發送方通道。通道的名字必須和徹底存儲庫的CLUSRCVR相匹配,不要定義CLUSSDR 指向部分存儲庫。
DEFINE CHANNEL(channel_name)
CHLTYPE(CLUSSDR) TRPTYP(TCP)
CONNAME(‘remote_ip_name_or_address(port)’)
CLUSTER(cluster_name)
6. 定義集羣隊列
在集羣中的其餘隊列管理能夠發送給它而不須要定義對它的遠程隊列。
只有本地隊列管理器才能夠從集羣隊列實例中讀取信息。
DEFINE QLOCAL(qname)
CLUSTER(cluster_name)
7. 驗證和測試集羣
看下面的 display命令
使用Sample程序放入消息到集羣隊列中,例如:
- amqsput for distributed platforms
- CSQ4BCK1 or CSQ4BVK1 for z/OS
8. 集羣架構圖:
9. 架構描述:web
10. DISPLAY QMGR
DISPLAY QMGR REPOS REPOSNL QMID
AMQ8408: Display Queue Manager details.
QMNAME(QM1) QMID(QM1_2005-07-12_17.14.38)
REPOS(QMCLUS)REPOSNL( )
QMID是一個內在建立的惟一名稱,它包含了隊列管理器的名字和建立隊列管理器的時間。對z/OS ,時間是用16進制來表示:RTPH.BDA2D50C17934846
11. DISPLAY CLUSQMGR
DISPLAY CLUSQMGR(*) ALL
[The following output is partial—it is only for one cluster queue manager of several]
AMQ8441: Display Cluster Queue Manager details.
CLUSQMGR(QM2) ALTDATE( )
ALTTIME( ) BATCHHB(0)
BATCHINT(0) BATCHSZ(50)
CHANNEL(TO.QM2) CLUSDATE(2007-01-09)
CLUSTER(QMCLUS) CLUSTIME(13.59.18)
CLWLPRTY(0) CLWLRANK(0)
CLWLWGHT(50) COMPHDR(NONE)
COMPMSG(NONE)
CONNAME(craigbev.dyn.webahead.ibm.com(1516))
CONVERT(NO) DEFTYPE(CLUSSDRB)
DESCR( ) DISCINT(6000)
HBINT(300) KAINT(AUTO)
LOCLADDR( ) LONGRTY(999999999)
LONGTMR(1200) MAXMSGL(4194304)
MCANAME( ) MCATYPE(THREAD)
… (continued on next slide)
(continuation of previous slide)
MCAUSER( ) MODENAME( )
MRDATA( ) MREXIT( )
MRRTY(10) MRTMR(1000)
MSGDATA( ) MSGEXIT( )
NETPRTY(0) NPMSPEED(FAST)
PASSWORD( ) PUTAUT(DEF)
QMID(QM2_2005-07-12_17.22.29) QMTYPE(REPOS)
RCVDATA( ) RCVEXIT( )
SCYDATA( ) SCYEXIT( )
SENDDATA( ) SENDEXIT( )
SEQWRAP(999999999) SHORTRTY(10)
SHORTTMR(60) SSLCAUTH(REQUIRED)
SSLCIPH( ) SSLPEER( )
STATUS(RUNNING) SUSPEND(NO)
TPNAME( ) TRPTYPE(TCP)
USERID( )
…
11. DISPLAY CLUSQMGR 備註
DEFTYPE 能夠是如下任意一種類型:
CLUSSDR - 顯示定義集羣發送通道
CLUSSDRA - 自動定義集羣發送通道 (A=auto)
CLUSSDRB - 定義集羣發送通道,顯示的和自動的 (B=both)
CLUSRCVR - 定義集羣接受通道
自動定義的集羣發送通道獲取它們的屬性從那些被指定在接受集羣隊列管理器上通訊的集羣接受通道的定義。你 不能直接修改一個自動定義的CLUSSDR,你不能看見它們通過DISPLAY CHANNEL。
QMTYPE 能夠是REPOS(徹底存儲庫) 或者 NORMAL(部分存儲庫),你不能夠用DISPLAY CHSTATUS查看CLUSRCVR的狀態
12. DISPLAY CHSTATUS
dis chstatus(*) all
AMQ8417: Display Channel Status details.
CHANNEL(TO.QM2) CHLTYPE(CLUSSDR)
CONNAME(craigbev.dyn.webahead.ibm.com(1516))
CURRENT RQMNAME(QM2)
STATUS(RUNNING) SUBSTATE(MQGET)
XMITQ(SYSTEM.CLUSTER.TRANSMIT.QUEUE)
AMQ8417: Display Channel Status details.
CHANNEL(TO.QM1) CHLTYPE(CLUSRCVR)
CONNAME( ) CURRENT
RQMNAME(QM3) STATUS(RUNNING)
SUBSTATE(RECEIVE) XMITQ( )
AMQ8417: Display Channel Status details.
CHANNEL(TO.QM3) CHLTYPE(CLUSSDR)
CONNAME(craigbev.dyn.webahead.ibm.com(1517))
CURRENT RQMNAME(QM3)
STATUS(RUNNING) SUBSTATE(MQGET)
XMITQ(SYSTEM.CLUSTER.TRANSMIT.QUEUE)
AMQ8417: Display Channel Status details.
CHANNEL(TO.QM1) CHLTYPE(CLUSRCVR)
CONNAME( ) CURRENT
RQMNAME(QM2) STATUS(RUNNING)
SUBSTATE(RECEIVE) XMITQ( )
13. DISPLAY QCLUSTER
DISPLAY QCLUSTER(*) ALL
AMQ8409: Display Queue details.
QUEUE(INQUIRY) TYPE(QCLUSTER)
ALTDATE(2007-01-09) ALTTIME(15.30.25)
CLUSDATE(2007-01-09) CLUSTER(QMCLUS)
CLUSQMGR(QM2) CLUSQT(QLOCAL)
CLUSTIME(15.30.25) CLWLPRTY(0)
CLWLRANK(0) DEFBIND(NOTFIXED)
DEFPRTY(0) DEFPSIST(NO)
DESCR( ) PUT(ENABLED)
QMID(QM2_2005-07-12_17.22.29)
AMQ8409: Display Queue details.
QUEUE(INQUIRY) TYPE(QCLUSTER)
ALTDATE(2007-01-09) ALTTIME(15.30.03)
CLUSDATE(2007-01-09) CLUSTER(QMCLUS)
CLUSQMGR(QM1) CLUSQT(QLOCAL)
CLUSTIME(15.30.03) CLWLPRTY(0)
CLWLRANK(0) DEFBIND(NOTFIXED)
DEFPRTY(0) DEFPSIST(NO)
DESCR( ) PUT(ENABLED)
QMID(QM1_2005-07-12_17.14.38)
14. DISPLAY QCLUSTER 說明
它僅僅顯示了關於集羣隊列的信息。一個集羣隊列將不能被顯示在一個部分存儲庫,除非應用已經打開了它。DEFBIND(NOTFIXED|OPEN) 選項影響了負載均衡,若是應用使用了MQOPEN選項MQOO_BIND_AS_Q_DEF.
15. DISPLAY QUEUE(*) CLUSINFO
DISPLAY QUEUE(*) CLUSINFO
[The following output is partial]
AMQ8409: Display Queue details.
QUEUE(SYSTEM.CLUSTER.COMMAND.QUEUE) TYPE(QLOCAL)
AMQ8409: Display Queue details.
QUEUE(SYSTEM.CLUSTER.REPOSITORY.QUEUE) TYPE(QLOCAL)
AMQ8409: Display Queue details.
QUEUE(SYSTEM.CLUSTER.TRANSMIT.QUEUE) TYPE(QLOCAL)
AMQ8409: Display Queue details.
QUEUE(TESTCLUS) TYPE(QLOCAL)
AMQ8409: Display Queue details.
QUEUE(INQUIRY) TYPE(QCLUSTER)
AMQ8409: Display Queue details.
QUEUE(INQUIRY) TYPE(QCLUSTER)
這個命令顯示了關於集羣類型(QCLUSTER)的信息,i.e. 集羣隊列,此外使用QLOCAL,QALIAS,QREMOTE,和QMODEL類型。
對於集羣隊列,信息從隊列管理器的存儲庫得到。部分存儲庫不會知道集羣隊列直到它已經被隊列管理器打開。在z/OS,你不能從CSQINP2處命令。
16. 負載均衡
當一個集羣包含一個更多的同名隊列實例,負載均衡決定了最佳隊列去路由消息。
考慮到:
- 可用通道,隊列管理器和隊列
- 如何去對了本地隊列的複製(CLWLUSEQ 在V6)
在它最簡潔模式,負載管理影響循環DNS效果。
MQ V6 有一個額外的參數能夠被用來影響運算法則的結果。
- 隊列:CLWLPRTY, CLWLRANK, CLWLUSEQ
- 隊列管理器: CLWLUSEQ, CLWLMRUC
- 通道: CLWLPRTY, CLWLRANK,CLWLWGHT, NETPRTY
你能夠本身編寫負載均衡的出口。
當負載均衡發生的時候:
- 打開隊列
MQOO_BIND_NOT_FIXED 打開選項,或者
- 使用缺省打開方式MQOO_BIND_AS_Q_DEF 和 DEFBIND(NOTFIXED) 在隊列定義中設置. DEFBIND(OPEN) 是默認的。
- 把MQMD.ObjectQMgrName留爲空能夠容許隊列管理器去選擇隊列實例。爲了強制消息給指定的集羣隊列實例,在ObjectQmgrName中指定隊列管理器的名字。
17. 中間配置
隊列管理器能夠是一個或多個集羣的成員。列出這些集羣用NAMELIST。你能夠有多於一個的namelist去完成交疊的集羣。
你可使用REPOSNL(namelist)去更改一個徹底存儲庫QMGR而不是用REPOS。對於通道和隊列,你能夠指定CLUSNL(namelist)而不是指定CLUSTER參數。
18. 涉及到的一些高級任務
Queue Manager Clusters手冊的第四章描述了你如何去使用隊列管理器別名,回覆隊列別名,隊列別名容許更復雜的操做。
你能夠從集羣外的隊列管理器輸入或者使用這些配置選項從集羣外的隊列管理器輸入。手冊提供了一些示例的定義。
Queue Manager Clusters手冊的第九章描述了高級任務,包括:
- 從隊列管理器中刪除一個集羣隊列
- 移動徹底存儲庫到另一個隊列管理
- 從一個集羣中刪除一個隊列管理器
- 刪除一個集羣網絡
跟隨如下手冊的步驟執行這些任務。不然,你可能最後在集羣中遇見問題。
19. 解決問題的一些技巧算法
20. 解決問題的狀況
DISPLAY CLUSQMGR 能夠顯示 CLUSQMGR使用SYSTEM.TEMP啓動的名字。隊列管理器仍然沒有接受到徹底存儲庫中的全部必要信息。
集羣緩存在z/OS上。查看 technote 1240731 針對因爲集羣分佈式隊列管理器引發的問題。在MQ V6,你能夠設置CLCACHE(DYNAMIC)給動態的增長緩存存儲。對於z/OS,CSQXRRMF模塊在當前級別上嗎?
21. 解決問題-刷新和重設
刷新集羣和重設集羣不須要在正常環境下命令。當有錯誤的配置或者缺少鏈接性,這個鏈接性在這樣的狀況下更壞,它們將不能修復集羣。
刷新:
刷新集羣移出和重建關於集羣的本地信息。
REFRESH CLUSTER(clustername) REPOS(NO)
REFRESH CLUSTER(clustername) REPOS(YES)
一樣刷新關於徹底存儲庫管理器的信息,它不能從徹底存儲庫執行命令。
REFRESH CLUSTER(*)
重設:
重設集羣是從徹底存儲庫隊列管理器執行的。它強制的移出了集羣中的隊列管理器和指定的QMID。The
- RESET CLUSTER(clustername)
QMNAME(qmname) ACTION(FORCEREMOVE) QUEUES(NO)
- RESET CLUSTER(clustername) QMID(qmid)
ACTION(FORCEREMOVE) QUEUES(NO)
22. Web支持和手冊
WebSpere MQ 產品支持頁面:
http://www-306.ibm.com/software/integration/wmq/support/.
The MQ Library:
http://www-306.ibm.com/software/integration/wmq/library/
WebSphere MQ Queue Manager Clusters manual:
- SC34-6061-02 for MQ 5.3.x
- SC34-6589-00 for MQ 6.0
- 「Appendix A. Troubleshooting」 lists common error
symptoms and causes plus some problem scenarios with
their resolutions
緩存