Example clusters

The first example shows the smallest possible cluster of two queue managers. The second and third examples show two versions of a three queue manager cluster.

The smallest possible cluster contains only two queue managers. In this case both queue managers contain full repositories. You need only a few definitions to set up the cluster, and yet there is a high degree of autonomy at each queue manager.

Figure 1. A small cluster of two queue managers
The diagram shows a small cluster called DEMOCLSTR with two connected queue managers, QM1 and QM2, QM1 has a cluster queue, Q1.
  • The queue managers can have long names such as LONDON and NEWYORK. [z/OS]On IBM® MQ for z/OS®, queue-manager names are limited to four characters.
  • Each queue manager is typically configured on a separate machine. However, you can have multiple queue managers on the same machine.

For instructions on setting up a similar example cluster, see Setting up a new cluster.

Figure 2 shows the components of a cluster called CLSTR1.
  • In this cluster, there are three queue managers, QM1, QM2, and QM3.
  • QM1 and QM2 host repositories of information about all the queue managers and cluster-related objects in the cluster. They are referred to as full repository queue managers. The repositories are represented in the diagram by the shaded cylinders.
  • QM2 and QM3 host some queues that are accessible to any other queue manager in the cluster. Queues that are accessible to any other queue manager in the cluster are called cluster queues. The cluster queues are represented in the diagram by the shaded queues. Cluster queues are accessible from anywhere in the cluster. IBM MQ clustering code ensures that remote queue definitions for cluster queues are created on any queue manager that refers to them.

    As with distributed queuing, an application uses the MQPUT call to put a message on a cluster queue at any queue manager in the cluster. An application uses the MQGET call to retrieve messages from a cluster queue only on the queue manager where the queue resides.

  • Each queue manager has a manually created definition for the receiving end of a channel called cluster-name. queue-manager on which it can receive messages. On the receiving queue manager, cluster-name. queue-manager is a cluster-receiver channel. A cluster-receiver channel is like a receiver channel used in distributed queuing; it receives messages for the queue manager. In addition, it also receives information about the cluster.
  • Figure 2. A cluster of queue managers
    The diagram shows a cluster of queue managers which is described in the preceding text.
  • In Figure 3 each queue manager also has a definition for the sending end of a channel. It connects to the cluster-receiver channel of one of the full repository queue managers. On the sending queue manager, cluster-name. queue-manager is a cluster-sender channel. QM1 and QM3 have cluster-sender channels connecting to CLSTR1.QM2, see dotted line 2.

    QM2 has a cluster-sender channel connecting to CLSTR1.QM1, see dotted line 3. A cluster-sender channel is like a sender-channel used in distributed queuing; it sends messages to the receiving queue manager. In addition, it also sends information about the cluster.

    Once both the cluster-receiver end and the cluster-sender end of a channel are defined, the channel starts automatically.

Figure 3. A cluster of queue managers with sender channels
The diagram shows a cluster of queue managers with sender channels which is described in the preceding text.

Defining a cluster-sender channel on the local queue manager introduces that queue manager to one of the full repository queue managers. The full repository queue manager updates the information in its full repository accordingly. Then it automatically creates a cluster-sender channel back to the original queue manager, and sends that queue manager information about the cluster. Thus a queue manager learns about a cluster and a cluster learns about a queue manager.

Look again at Figure 2. Suppose that an application connected to queue manager QM3 wants to send some messages to the queues at QM2. The first time that QM3 must access those queues, it discovers them by consulting a full repository. The full repository in this case is QM2, which is accessed using the sender channel CLSTR1.QM2. With the information from the repository, it can automatically create remote definitions for those queues. If the queues are on QM1, this mechanism still works, because QM2 is a full repository. A full repository has a complete record of all the objects in the cluster. In this latter case, QM3 would also automatically create a cluster-sender channel corresponding to the cluster-receiver channel on QM1, allowing direct communication between the two.

Figure 4 shows the same cluster, with the two cluster-sender channels that were created automatically. The cluster-sender channels are represented by the two dashed lines that join with the cluster-receiver channel CLSTR1.QM3. It also shows the cluster transmission queue, SYSTEM.CLUSTER.TRANSMIT.QUEUE, which QM1 uses to send its messages. All queue managers in the cluster have a cluster transmission queue, from which they can send messages to any other queue manager in the same cluster.
Figure 4. A cluster of queue managers, showing auto-defined channels
The diagram shows a cluster of queue managers, showing auto-defined channels and is described in the surrounding text.
Note: Other diagrams show only the receiving ends of channels for which you make manual definitions. The sending ends are omitted because they are mostly defined automatically when needed. The auto-definition of most cluster-sender channels is crucial to the function and efficiency of clusters.