1. 程式人生 > >Websphere MQ 叢集

Websphere MQ 叢集

Websphere MQ Cluster

大綱:
  • 1、什麼是叢集
  • 2、建立一個基本的叢集
  • 3、DISPLAY命令
  • 4、負載均衡
  • 5、高階配置和管理
  • 6、答疑
  • 7、關於文章、紅寶書等

一、 什麼是叢集
       叢集就是Websphere MQ 佇列管理的邏輯分組,它可以幫助你:
               減少了系統管理-由於更少的通道、遠端佇列、傳輸佇列的定義
               增加了高可用性和負載均衡-由於可以在叢集中定義同名的佇列例項和多個佇列管理器以及在他們之間的分散式的訊息
            
二、建立基本的叢集
        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.  架構描述:
  •   QM1和QM2是完全儲存庫
  •   實線呈現了手工定義的 CLUSRCVR和 CLUSSDR通道
  •   兩條虛線表示自動建立的叢集傳送通道
  •   QM2和QM3主管了一些叢集佇列,它可以放入在叢集中任何其他佇列管理器中
  •   所有的佇列管理器都有 SYSTEM.CLUSTER.TRANSMIT.QUEUE,它可以傳送資訊給叢集中任何其他佇列管理器
         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.  解決問題的一些技巧
  •    儲存庫管理器是否在執行?檢查AMQERRxx.log或者CHINjoblog
  •    通道可以雙向執行嗎?Display CLUSQMGR和 CHSTATUS資訊
  •    SYSTEM.CLUSTER佇列是否可用?命令 DISPLAY QUEUE(SYSTEM.C)ALL
  •    SYSTEM.CLUSTER.COMMAND.QUEUE 或者SYSTEM.CLUSTER.TRANSMIT.QUEUE 訊息在嗎?
  •    有QMIDs的副本給QMGR嗎?命令 DISPLAY CLUSQMGR(*) QMID

        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