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

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章