Clustering: configurazione di esempio di più code di trasmissione cluster

In questa attività si applicano le operazioni per pianificare più code di trasmissione cluster a tre cluster sovrapposti. I requisiti sono di separare i flussi di messaggi in una coda cluster, da tutti gli altri flussi di messaggi e di memorizzare i messaggi per i diversi cluster su code di trasmissione cluster differenti.

Informazioni su questa attività

I passaggi di questa attività mostrano come applicare la procedura in Clustering: pianificazione di come configurare le code di trasmissione del cluster e arrivare alla configurazione mostrata in Figura 1 . È un esempio di tre cluster sovrapposti, con un gestore code del gateway, configurato con code di trasmissione del cluster separate. I comandi MQSC per definire i cluster sono descritti in Creazione dei cluster di esempio .

Ad esempio, ci sono due requisiti. Uno è separare il flusso di messaggi dal gestore code del gateway all'applicazione di vendita che registra le vendite. Il secondo è quello di interrogare quanti messaggi sono in attesa di essere inviati a diverse aree dipartimentali in qualsiasi momento. I cluster SALES, FINANCEe DEVELOP sono già definiti. I messaggi cluster vengono attualmente inoltrati da SYSTEM.CLUSTER.TRANSMIT.QUEUE.

Figura 1. Esempio di code di trasmissione specifiche per cluster IBM® MQ dipartimentali differenti
Il diagramma mostra tre cluster, uno per ciascun dipartimento, che si sovrappongono a un gestore code gateway. Mostra in che modo i messaggi vengono memorizzati su code di trasmissione cluster differenti prima di essere inoltrati dal gestore code del gateway ai gestori code nei diversi cluster.

La procedura per modificare i cluster è la seguente. Per le definizioni, vedi Modifiche per isolare la coda di vendite in un nuovo cluster e separare la coda di trasmissione del cluster gateway.

Procedura

  1. Il primo passo di configurazione è Selezionare il tipo di coda di trasmissione cluster predefinita da utilizzare .
    La decisione è di creare code di trasmissione del cluster predefinite separate eseguendo il seguente comando MQSC sul gestore code GATE .
    ALTER QMGR DEFCLXQ(CHANNEL)
    
    Non esiste un motivo valido per scegliere questo valore predefinito, poiché l'intento è definire manualmente le code di trasmissione del cluster. La scelta ha un valore diagnostico debole. Se una definizione manuale viene eseguita in modo errato e un messaggio scorre attraverso una coda di trasmissione cluster predefinita, viene visualizzato nella creazione di una coda di trasmissione cluster dinamica permanente.
  2. Il secondo passo della configurazione consiste nell' Isolare i flussi di messaggi che non devono condividere una coda di trasmissione del cluster con altri flussi .
    In questo caso, l'applicazione di vendita che riceve i messaggi dalla coda SALES su SALESRV richiede isolamento. È richiesto solo l'isolamento dei messaggi dal gestore code del gateway. Le tre fasi secondarie sono:
    1. Configurare le destinazioni dei flussi in modo tale che ciascuna coda di destinazione sia l'unica coda in un cluster specifico, su tale gestore code .

      L'esempio richiede l'aggiunta di un gestore code SALESRV a un nuovo cluster all'interno del reparto vendite. Se si dispone di poche code che richiedono l'isolamento, è possibile decidere di creare un cluster specifico per la coda SALES . Una convenzione di denominazione possibile per il nome del cluster consiste nel denominare tali cluster, Q. QueueName, ad esempio Q.SALES. Un approccio alternativo, che potrebbe essere più pratico se si dispone di un numero elevato di code da isolare, consiste nel creare cluster di code isolate dove e quando necessario. I nomi dei cluster potrebbero essere QUEUES. n.

      Nell'esempio, il nuovo cluster è denominato Q.SALES. Per aggiungere il nuovo cluster, vedere le definizioni in Modifiche per isolare la coda di vendita in un nuovo cluster e separare le code di trasmissione cluster gateway. Il riepilogo delle modifiche di definizione è il seguente:

      1. Aggiungere Q.SALES all'elenco nomi dei cluster sui gestori code del repository. Si fa riferimento all'elenco nomi nel parametro REPOSNL del gestore code.
      2. Aggiungere Q.SALES all'elenco dei nomi dei cluster sul gestore code gateway. Si fa riferimento all'elenco nomi in tutte le definizioni alias della coda cluster e alias del gestore code cluster sul gestore code del gateway.
      3. Creare un elenco nomi sul gestore code SALESRV, per entrambi i cluster di cui è membro e modificare l'appartenenza cluster della coda SALES :
        DEFINE NAMELIST(CLUSTERS) NAMES(SALES, Q.SALES) REPLACE
        ALTER QLOCAL(SALES) CLUSTER(' ') CLUSNL(SALESRV.CLUSTERS)
        
        La coda SALES è un membro di entrambi i cluster, solo per la transizione. Una volta eseguita la nuova configurazione, si rimuove la coda SALES dal cluster SALES ; consultare la Figura 2.
    2. Creare i canali mittente e ricevente del cluster per tutti i nuovi cluster creati seguendo una convenzione di denominazione sistematica .
      1. Aggiungere il canale ricevente del cluster Q.SALES. RepositoryQMgr a ciascuno dei gestori code del repository
      2. Aggiungere il canale mittente del cluster Q.SALES. OtherRepositoryQMgr a ciascuno dei gestori code del repository per connettersi all'altro gestore repository. Avviare questi canali.
      3. Aggiungere i canali riceventi del cluster Q.SALES.SALESRVe Q.SALES.GATE a uno dei gestori code del repository in esecuzione.
      4. Aggiungere i canali mittente del cluster Q.SALES.SALESRVe Q.SALES.GATE ai gestori code SALESRV e GATE . Connetti il canale mittente del cluster al gestore code del repository su cui hai creato i canali riceventi del cluster.
    3. Definire una coda di trasmissione cluster per ciascuna destinazione isolata su ogni gestore code che invia messaggi alla coda di destinazione .

      Sul gestore code del gateway definire la coda di trasmissione del cluster XMITQ.Q.SALES.SALESRV per il canale mittente del cluster Q.SALES.SALESRV :

      DEFINE QLOCAL(XMITQ.Q.SALES.SALESRV) USAGE(XMITQ) CLCHNAME(Q.SALES.SALESRV) REPLACE
      
  3. Il terzo passo di configurazione è Creare code di trasmissione cluster per soddisfare i requisiti di governance o di controllo .
    Sul gestore code gateway definire le code di trasmissione del cluster:
    DEFINE QLOCAL(XMITQ.SALES)  USAGE(XMITQ) CLCHNAME(SALES.*)  REPLACE
    DEFINE QLOCAL(XMITQ.DEVELOP) USAGE(XMITQ) CLCHNAME(DEVELOP.*) REPLACE
    DEFINE QLOCAL(XMITQ.FINANCE) USAGE(XMITQ) CLCHNAME(SALES.*)  REPLACE
    

Cosa fare successivamente

Passare alla nuova configurazione sul gestore code gateway.

Lo switch viene attivato avviando i nuovi canali e riavviando i canali che sono ora associati a code di trasmissione differenti. In alternativa, è possibile arrestare e avviare il gestore code gateway.

  1. Arrestare i canali seguenti sul gestore code gateway:
    SALES. Qmgr
    DEVELOP. Qmgr
    FINANCE. Qmgr
    
  2. Avviare i canali seguenti sul gestore code del gateway:
    SALES. Qmgr
    DEVELOP. Qmgr
    FINANCE. Qmgr
    Q.SALES.SAVESRV
    

Una volta completato lo switch, rimuovere la coda SALES dal cluster SALES ; consultare Figura 2.

Creazione dei cluster di esempio

Le definizioni e istruzioni per creare il cluster di esempio e modificarlo per isolare la coda SALES e separare i messaggi sul gestore code del gateway.

Informazioni su questa attività

I comandi MQSC completi per creare i cluster FINANCE, SALESe Q.SALES vengono forniti in Definizioni per i cluster di base, Modifiche per isolare la coda di vendita in un nuovo cluster e separare le code di trasmissione del cluster gatewaye Rimuovere la coda di vendite sul gestore code SALESRV dal cluster di vendite. Il cluster DEVELOP viene omesso dalle definizioni, per mantenerle più brevi.

Procedura

  1. Creare i cluster di SALES e FINANCE e il gestore code del gateway.
    1. Creare i gestori code
      Run the command: crtmqm -sax -u SYSTEM.DEAD.LETTER.QUEUE QmgrName for each of the queue manager names in Tabella 1.
      Tabella 1. Nomi di gestori code e numeri di porta
      Descrizione Nome del gestore code Numero di porta
      Repository finanziario FINR1 1414
      Repository finanziario FINR2 1415
      Cliente finanziario FINCLT 1418
      Archivio vendite SALER1 1416
      Archivio vendite SALER2 1417
      Server di vendita SALESRV 1419
      Gateway GATE 1420
    2. Avviare tutti i gestori code
      Run the command: strmqm QmgrName for each of the queue manager names in Tabella 1.
    3. Creare definizioni per ciascun gestore code

      Eseguire il seguente comando: runmqsc QmgrName < filename dove i file sono elencati in Definizioni per i cluster di basee il nome file corrisponde al nome del gestore code.

      Definizioni per i cluster base
      finr1.txt
      DEFINE LISTENER(1414) TRPTYPE(TCP) IPADDR(localhost) CONTROL(QMGR) PORT(1414) REPLACE
      START LISTENER(1414)
      ALTER QMGR REPOS(FINANCE)
      DEFINE CHANNEL(FINANCE.FINR2) CHLTYPE(CLUSSDR) CONNAME('localhost(1415)') CLUSTER(FINANCE) REPLACE
      DEFINE CHANNEL(FINANCE.FINR1) CHLTYPE(CLUSRCVR) CONNAME('localhost(1414)') CLUSTER(FINANCE) REPLACE
      
      finr2.txt
      DEFINE LISTENER(1415) TRPTYPE(TCP) IPADDR(localhost) CONTROL(QMGR) PORT(1415) REPLACE
      START LISTENER(1415)
      ALTER QMGR REPOS(FINANCE)
      DEFINE CHANNEL(FINANCE.FINR1) CHLTYPE(CLUSSDR) CONNAME('localhost(1414)') CLUSTER(FINANCE) REPLACE
      DEFINE CHANNEL(FINANCE.FINR2) CHLTYPE(CLUSRCVR) CONNAME('localhost(1415)') CLUSTER(FINANCE) REPLACE
      
      finclt.txt
      DEFINE LISTENER(1418) TRPTYPE(TCP) IPADDR(localhost) CONTROL(QMGR) PORT(1418) REPLACE
      START LISTENER(1418)
      DEFINE CHANNEL(FINANCE.FINR1) CHLTYPE(CLUSSDR)  CONNAME('localhost(1414)') CLUSTER(FINANCE) REPLACE
      DEFINE CHANNEL(FINANCE.FINCLT) CHLTYPE(CLUSRCVR) CONNAME('localhost(1418)') CLUSTER(FINANCE) REPLACE
      DEFINE QMODEL(SYSTEM.SAMPLE.REPLY) REPLACE
      
      saler1.txt
      DEFINE LISTENER(1416) TRPTYPE(TCP) IPADDR(localhost) CONTROL(QMGR) PORT(1416) REPLACE
      START LISTENER(1416)
      ALTER QMGR REPOS(SALES)
      DEFINE CHANNEL(SALES.SALER2) CHLTYPE(CLUSSDR) CONNAME('localhost(1417)') CLUSTER(SALES) REPLACE
      DEFINE CHANNEL(SALES.SALER1) CHLTYPE(CLUSRCVR) CONNAME('localhost(1416)') CLUSTER(SALES) REPLACE
      
      saler2.txt
      DEFINE LISTENER(1417) TRPTYPE(TCP) IPADDR(localhost) CONTROL(QMGR) PORT(1417) REPLACE
      START LISTENER(1417)
      ALTER QMGR REPOS(SALES)
      DEFINE CHANNEL(SALES.SALER1) CHLTYPE(CLUSSDR) CONNAME('localhost(1416)') CLUSTER(SALES) REPLACE
      DEFINE CHANNEL(SALES.SALER2) CHLTYPE(CLUSRCVR) CONNAME('localhost(1417)') CLUSTER(SALES) REPLACE
      
      salesrv.txt
      DEFINE LISTENER(1419) TRPTYPE(TCP) IPADDR(localhost) CONTROL(QMGR) PORT(1419) REPLACE
      START LISTENER(1419)
      DEFINE CHANNEL(SALES.SALER1) CHLTYPE(CLUSSDR) CONNAME('localhost(1416)') CLUSTER(SALES) REPLACE
      DEFINE CHANNEL(SALES.SALESRV) CHLTYPE(CLUSRCVR) CONNAME('localhost(1419)') CLUSTER(SALES) REPLACE
      DEFINE QLOCAL(SALES) CLUSTER(SALES) TRIGGER INITQ(SYSTEM.DEFAULT.INITIATION.QUEUE) PROCESS(ECHO) REPLACE
      DEFINE PROCESS(ECHO) APPLICID(AMQSECH) REPLACE
      
      gate.txt
      DEFINE LISTENER(1420) TRPTYPE(TCP) IPADDR(LOCALHOST) CONTROL(QMGR) PORT(1420) REPLACE
      START LISTENER(1420)
      DEFINE NAMELIST(ALL) NAMES(SALES, FINANCE)
      DEFINE CHANNEL(FINANCE.FINR1) CHLTYPE(CLUSSDR) CONNAME('LOCALHOST(1414)') CLUSTER(FINANCE) REPLACE
      DEFINE CHANNEL(FINANCE.GATE) CHLTYPE(CLUSRCVR) CONNAME('LOCALHOST(1420)') CLUSTER(FINANCE) REPLACE
      DEFINE CHANNEL(SALES.SALER1) CHLTYPE(CLUSSDR) CONNAME('LOCALHOST(1416)') CLUSTER(SALES) REPLACE
      DEFINE CHANNEL(SALES.GATE)  CHLTYPE(CLUSRCVR) CONNAME('LOCALHOST(1420)') CLUSTER(SALES) REPLACE
      DEFINE QALIAS(A.SALES) CLUSNL(ALL) TARGET(SALES) TARGTYPE(QUEUE) DEFBIND(NOTFIXED) REPLACE
      DEFINE QREMOTE(FINCLT) RNAME(' ') RQMNAME(FINCLT) CLUSNL(ALL) REPLACE
      DEFINE QREMOTE(SALESRV) RNAME(' ') RQMNAME(SALESRV) CLUSNL(ALL) REPLACE
      
  2. Verificare la configurazione eseguendo il programma di richiesta di esempio.
    1. Avviare il programma di controllo trigger sul gestore code SALESRV

      In Windows, aprire una finestra di comandi ed eseguire il comando runmqtrm -m SALESRV

    2. Eseguire il programma di richiesta di esempio e inviare una richiesta.

      In Windows, aprire una finestra di comandi ed eseguire il comando amqsreq A.SALES FINCLT

      Il messaggio di richiesta viene ripetuto e dopo 15 secondi il programma di esempio termina.

  3. Creare definizioni per isolare la coda SALES nel cluster Q.SALES e separare i messaggi del cluster per il cluster SALES e FINANCE sul gestore code del gateway

    Eseguire il comando: runmqsc QmgrName < filename dove i file sono elencati nel seguente elenco e il nome file quasi corrisponde al nome del gestore code.

    Modifiche per isolare la coda di vendita in un nuovo cluster e separare la coda di trasmissione del cluster gateway
    chgsaler1.txt
    DEFINE NAMELIST(CLUSTERS) NAMES(SALES, Q.SALES)
    ALTER QMGR REPOS(' ') REPOSNL(CLUSTERS)
    DEFINE CHANNEL(Q.SALES.SALER2) CHLTYPE(CLUSSDR) CONNAME('localhost(1417)') CLUSTER(Q.SALES) REPLACE
    DEFINE CHANNEL(Q.SALES.SALER1) CHLTYPE(CLUSRCVR) CONNAME('localhost(1416)') CLUSTER(Q.SALES) REPLACE
    
    chgsaler2.txt
    DEFINE NAMELIST(CLUSTERS) NAMES(SALES, Q.SALES)
    ALTER QMGR REPOS(' ') REPOSNL(CLUSTERS)
    DEFINE CHANNEL(Q.SALES.SALER1) CHLTYPE(CLUSSDR) CONNAME('localhost(1416)') CLUSTER(Q.SALES) REPLACE
    DEFINE CHANNEL(Q.SALES.SALER2) CHLTYPE(CLUSRCVR) CONNAME('localhost(1417)') CLUSTER(Q.SALES) REPLACE
    
    chgsalesrv.txt
    DEFINE NAMELIST (CLUSTERS) NAMES(SALES, Q.SALES)
    DEFINE CHANNEL(Q.SALES.SALER1) CHLTYPE(CLUSSDR) CONNAME('localhost(1416)') CLUSTER(Q.SALES) REPLACE
    DEFINE CHANNEL(Q.SALES.SAVESRV) CHLTYPE(CLUSRCVR) CONNAME('localhost(1419)') CLUSTER(Q.SALES) REPLACE
    ALTER QLOCAL (SALES) CLUSTER(' ') CLUSNL(CLUSTERS)
    
    chggate.txt
    ALTER NAMELIST(ALL) NAMES(SALES, FINANCE, Q.SALES)
    ALTER QMGR DEFCLXQ(CHANNEL)
    DEFINE CHANNEL(Q.SALES.SALER1) CHLTYPE(CLUSSDR)  CONNAME('localhost(1416)') CLUSTER(Q.SALES) REPLACE
    DEFINE CHANNEL(Q.SALES.GATE)  CHLTYPE(CLUSRCVR) CONNAME('localhost(1420)') CLUSTER(Q.SALES) REPLACE
    DEFINE QLOCAL (XMITQ.Q.SALES.SALESRV) USAGE(XMITQ) CLCHNAME(Q.SALES.SALESRV) REPLACE
    DEFINE QLOCAL (XMITQ.SALES)     USAGE(XMITQ) CLCHNAME(SALES.*)  REPLACE
    DEFINE QLOCAL (XMITQ.FINANCE)    USAGE(XMITQ) CLCHNAME(FINANCE.*) REPLACE
    
  4. Rimuovere la coda SALES dal cluster SALES

    Eseguire il comando MQSC nella Figura 2:

    Figura 2. Rimuovere la coda di vendite sul gestore code SALESRV dal cluster di vendite
    ALTER QLOCAL(SALES) CLUSTER('Q.SALES') CLUSNL(' ')
    
  5. Passare i canali alle code di trasmissione.

    Il requisito è quello di arrestare e avviare tutti i canali utilizzati dal gestore code GATE . Per eseguire questa operazione con un numero minimo di comandi, arrestare e avviare il gestore code

    endmqm -i GATE
    strmqm GATE
    

Cosa fare successivamente

  1. Eseguire di nuovo il programma di richiesta di esempio per verificare il funzionamento della nuova configurazione; consultare il passo 2
  2. Monitorare i messaggi che passano attraverso tutte le code di trasmissione del cluster sul gestore code GATE :
    1. Modificare la definizione di ciascuna delle code di trasmissione del cluster per attivare il controllo della coda.
      ALTER QLOCAL(SYSTEM.CLUSTER.TRANSMIT. 
      name) STATQ(ON)
      
    2. Controllare che il monitoraggio delle statistiche del gestore code sia OFF, per ridurre l'output e impostare l'intervallo di monitoraggio su un valore più basso per eseguire comodamente più verifiche.
      ALTER QMGR STATINT(60) STATCHL(OFF) STATQ(OFF) STATMQI(OFF) STATACLS(OFF)
      
    3. Riavviare il gestore code GATE .
    4. Eseguire il programma di richiesta di esempio alcune volte per verificare che un numero uguale di messaggi stia passando attraverso SYSTEM.CLUSTER.TRANSMIT.Q.SALES.SALESRV e SYSTEM.CLUSTER.TRANSMIT.QUEUE. Le richieste passano attraverso SYSTEM.CLUSTER.TRANSMIT.Q.SALES.SALESRV e le risposte attraverso SYSTEM.CLUSTER.TRANSMIT.QUEUE.
      amqsmon -m GATE -t statistics
      
    5. I risultati su un paio di intervalli sono i seguenti:


      C:\Documents and Settings\Admin>amqsmon -m GATE -t statistics
      MonitoringType: QueueStatistics
      QueueManager: 'GATE'
      IntervalStartDate: '2012-02-27'
      IntervalStartTime: '14.59.20'
      IntervalEndDate: '2012-02-27'
      IntervalEndTime: '15.00.20'
      CommandLevel: 700
      ObjectCount: 2
      QueueStatistics: 0
      QueueName: 'SYSTEM.CLUSTER.TRANSMIT.QUEUE'
      CreateDate: '2012-02-24'
      CreateTime: '15.58.15'
      ...
      Put1Count: [0, 0]
      Put1FailCount: 0
      PutBytes: [435, 0]
      GetCount: [1, 0]
      GetBytes: [435, 0]
      ...
      QueueStatistics: 1
      QueueName: 'SYSTEM.CLUSTER.TRANSMIT.Q.SALES.SAVESRV'
      CreateDate: '2012-02-24'
      CreateTime: '16.37.43'
      ...
      PutCount: [1, 0]
      PutFailCount: 0
      Put1Count: [0, 0]
      Put1FailCount: 0
      PutBytes: [435, 0]
      GetCount: [1, 0]
      GetBytes: [435, 0]
      ...
      MonitoringType: QueueStatistics
      QueueManager: 'GATE'
      IntervalStartDate: '2012-02-27'
      IntervalStartTime: '15.00.20'
      IntervalEndDate: '2012-02-27'
      IntervalEndTime: '15.01.20'
      CommandLevel: 700
      ObjectCount: 2
      QueueStatistics: 0
      QueueName: 'SYSTEM.CLUSTER.TRANSMIT.QUEUE'
      CreateDate: '2012-02-24'
      CreateTime: '15.58.15'
      ...
      PutCount: [2, 0]
      PutFailCount: 0
      Put1Count: [0, 0]
      Put1FailCount: 0
      PutBytes: [863, 0]
      GetCount: [2, 0]
      GetBytes: [863, 0]
      ...
      QueueStatistics: 1
      QueueName: 'SYSTEM.CLUSTER.TRANSMIT.Q.SALES.SAVESRV'
      CreateDate: '2012-02-24'
      CreateTime: '16.37.43'
      ...
      PutCount: [2, 0]
      PutFailCount: 0
      Put1Count: [0, 0]
      Put1FailCount: 0
      PutBytes: [863, 0]
      GetCount: [2, 0]
      GetBytes: [863, 0]
      ...
      2 Records Processed.

      Un messaggio di richiesta e risposta è stato inviato nel primo intervallo e due nel secondo. È possibile dedurre che i messaggi di richiesta sono stati collocati in SYSTEM.CLUSTER.TRANSMIT.Q.SALES.SAVESRVe i messaggi di risposta in SYSTEM.CLUSTER.TRANSMIT.QUEUE.