Bagaimana cara mengkonfigurasi IBM MQ sebagai cluster HA?

Saya ingin membuat cluster ketersediaan tinggi. Tetapi saya tidak dapat menemukan langkah apa pun untuk membuatnya dari dokumentasi IBM.

Saya mengikuti ini panduan untuk membuat cluster.

Kedua QM diterapkan dengan docker-compose:

version: '3.7'
services:
  london:
    build:
      context: ./config/london
    environment:
      LICENSE: "accept"
      MQ_QMGR_NAME: "QM1"
      MQ_ENABLE_METRICS: "true"
    ports:
      - 9443:9443 # web view
      - 9157:9157 # metrics

  newyork:
    build:
      context: ./config/newyork
    environment:
      LICENSE: "accept"
      MQ_QMGR_NAME: "QM2"
      MQ_ENABLE_METRICS: "true"
    ports:
      - 9553:9443 # web view
      - 9158:9157 # metrics
    depends_on:
      - london

Dockerfile untuk kedua gambar:

FROM ibmcom/mq

COPY init.mqsc /etc/mqm/20-init.mqsc

Berikut adalah konfigurasi untuk instance MQ london:

* cluster config
ALTER QMGR +
      REPOS(INVENTORY) +
      PSCLUS(ENABLED)

DEFINE LISTENER(LONDON_LS) +
       TRPTYPE(TCP) +
       CONTROL(QMGR)

DEFINE CHANNEL(INVENTORY.LONDON) +
       CHLTYPE(CLUSRCVR) +
       TRPTYPE(TCP) +
       CONNAME('london(1414)') +
       CLUSTER(INVENTORY) +
       DESCR('TCP Cluster-receiver channel for queue manager LONDON')

DEFINE CHANNEL(INVENTORY.NEWYORK) +
       CHLTYPE(CLUSSDR) +
       TRPTYPE(TCP) +
       CONNAME('newyork(1414)') +
       CLUSTER(INVENTORY) +
       DESCR('TCP Cluster-sender channel from LONDON to repository at NEWYORK')

SET CHLAUTH('INVENTORY.LONDON') +
    TYPE(QMGRMAP) +
    QMNAME(QM2) +
    USERSRC(CHANNEL) +
    ADDRESS('*')

dan di sini untuk contoh newyork:

* cluster config
ALTER QMGR +
      REPOS(INVENTORY) +
      PSCLUS(ENABLED)

DEFINE LISTENER(NEWYORK_LS) +
       TRPTYPE(TCP) +
       CONTROL(QMGR)

DEFINE CHANNEL(INVENTORY.NEWYORK) +
       CHLTYPE(CLUSRCVR) +
       TRPTYPE(TCP) +
       CONNAME('newyork(1414)') +
       CLUSTER(INVENTORY) +
       DESCR('TCP Cluster-receiver channel for queue manager NEWYORK')

DEFINE CHANNEL(INVENTORY.LONDON) +
       CHLTYPE(CLUSSDR) +
       TRPTYPE(TCP) +
       CONNAME('london(1414)') +
       CLUSTER(INVENTORY) +
       DESCR('TCP Cluster-sender channel from NEWYORK to repository at LONDON')

SET CHLAUTH('INVENTORY.NEWYORK') +
    TYPE (QMGRMAP) +
    QMNAME(QM1) +
    USERSRC(CHANNEL) +
    ADDRESS('*')

Saya ingin memiliki topik di mana aplikasi saya dapat menulis/membaca terlepas dari QM yang terhubung dengannya. Apakah ini mungkin dan jika demikian, bisakah Anda membagikan perintah MQSC atau tautan ke contoh pengaturan.


person max    schedule 25.05.2020    source sumber
comment
Jika Anda membuat cluster maka Anda memiliki cluster terbitkan/berlangganan. Dan sekarang Anda sudah dapat berlangganan kedua pengelola antrean untuk membaca pesan yang dipublikasikan di salah satu pengelola antrean tersebut. Tapi Anda akan mendapat dua pesan, satu dari london dan satu lagi dari newyork   -  person Seyf    schedule 25.05.2020
comment
Membuat topik di salah satu QM berbagi topik, namun pesannya tidak dibagikan. Itulah yang ingin saya capai   -  person max    schedule 25.05.2020
comment
Komentar Anda menjelaskan beberapa hal. Terima kasih atas waktunya   -  person max    schedule 26.05.2020
comment
itu akan menjadi sempurna   -  person max    schedule 26.05.2020
comment
Menambahkan semua info dari komentar menjadi jawaban. Beri tahu saya jika Anda memiliki pertanyaan lain.   -  person JoshMc    schedule 28.05.2020


Jawaban (1)


Pengelompokan MQ adalah tentang konektivitas penyeimbangan beban antara pengelola antrian.

  • Misalnya, Anda dapat memiliki antrian berkerumun yang ditentukan di LONDON dan NEWYORK, ini dapat berupa PUT(ENABLED) pada keduanya (panas/panas) dan pesan yang dikirim ke antrean tersebut oleh anggota kluster akan bersifat round robin antara dua contoh.
  • Jika ingin panas/hangat, maka PUT(DISABLE) salah satu dari dua instance misalnya LONDON, lalu arahkan aplikasi Anda untuk terhubung dan membaca dari NEWYORK, jika NEWYORK down, Anda dapat PUT(ENABLED) antrian di LONDON dan pesan sejak saat itu akan dikirim ke LONDON dan Anda dapat mengarahkan aplikasi Anda ke LONDON (perhatikan bahwa pesan apa pun yang berada dalam antrian di NEWYORK hanya akan tersedia ketika NEWYORK dipulihkan. MQ tidak mereplikasi pesan-pesan tersebut kepada kedua manajer antrian.

Dengan pub/sub, hal ini sedikit berbeda karena semua pengelola antrean di klaster akan mengetahui topik-topik yang terklaster, dan jika ada pelanggan di QM mana pun di klaster yang berlangganan TOPIC tersebut, langganan proxy akan dibuat oleh pelanggan QM, jika ada yang menerbitkan terjadi pada topik tersebut di manajer antrean mana pun, salinannya akan diarahkan ke setiap pelanggan lokal serta setiap QM dengan langganan proxy yang ada, QM pelanggan kemudian akan mengirimkan pesan ke pelanggan lokal mana pun (jadi hanya satu sub proxy saja jika beberapa pelanggan pada QM yang sama).

  • Jika Anda memiliki pelanggan yang tidak tahan lama, mereka kemudian dapat berlangganan topik tersebut di QM mana pun dan menerima pesan yang diterbitkan setelah langganan dibuat, tetapi tidak sebelumnya.
  • Jika Anda mengharuskan Anda menerima pesan ketika pelanggan tidak terhubung, Anda memerlukan langganan yang tahan lama dan itu akan dikaitkan dengan pengelola antrean khusus tempat pesan tersebut dibuat.

Anda mungkin ingin melihat RDQM yang menyediakan replikasi antar node, tetapi tidak kompatibel dengan container.

person JoshMc    schedule 28.05.2020