Oracle GlassFish Server Message Queue Administration Guide Release 4.5.2 Part Number E24943-01 |
|
|
View PDF |
Message Queue supports the use of broker clusters: groups of brokers working together to loprovide message delivery services to clients. Clusters enable a message service to scale its operations to meet an increasing volume of message traffic by distributing client connections among multiple brokers.
In addition, clusters provide for message service availability. In the case of a conventional cluster, if a broker fails, clients connected to that broker can reconnect to another broker in the cluster and continue producing and consuming messages. In the case of an enhanced cluster, if a broker fails, clients connected to that broker reconnect to a failover broker that takes over the pending work of the failed broker, delivering messages without interruption of service.
See "Broker Clusters" in Oracle GlassFish Server Message Queue Technical Overview for a description of conventional and enhanced broker clusters and how they operate.
This chapter describes how to configure and manage both conventional and enhanced broker clusters:
You create a broker cluster by specifying cluster configuration properties for each of its member brokers. Except where noted in this chapter, cluster configuration properties must be set to the same value for each broker in a cluster. This section introduces these properties and the use of a cluster configuration file to specify them:
Like all broker properties, cluster configuration properties can be set individually for each broker in a cluster, either in its instance configuration file (config.properties
) or by using the -D
option on the command line when you start the broker. However, except where noted in this chapter, each cluster configuration property must be set to the same value for each broker in a cluster.
For example, to specify the transport protocol for the cluster connection service, you can include the following property in the instance configuration file for each broker in the cluster: imq.cluster.transport=ssl
. If you need to change the value of this property, you must change its value in the instance configuration file for every broker in the cluster.
For consistency and ease of maintenance, it is generally more convenient to collect all of the common cluster configuration properties into a central cluster configuration file that all of the individual brokers in a cluster reference. Using a cluster configuration file prevents the settings from getting out of synch and ensures that all brokers in a cluster use the same, consistent cluster configuration information.
When using a cluster configuration file, each broker's instance configuration file must point to the location of the cluster configuration file by setting the imq.cluster.url
property. For example,
imq.cluster.url=file:/home/cluster.properties
Note:
A cluster configuration file can also include broker properties that are not used specifically for cluster configuration. For example, you can place any broker property in the cluster configuration file that has the same value for all brokers in a cluster. For more information, see Connecting Brokers into a Conventional Cluster
This section reviews the most important cluster configuration properties, grouped into the following categories:
A complete list of cluster configuration properties can be found in Table 17-14
The following properties are used to configure the cluster connection service used for internal communication between brokers in the cluster. These properties are used by both conventional and enhanced clusters.
imq.cluster.transport specifies the transport protocol used by the cluster
connection service, such as tcp
or ssl
.
imq.cluster.port specifies the port number for the cluster
connection service. You might need to set this property, for instance, to specify a static port number for connecting to the broker through a firewall.
imq.cluster.hostname specifies the host name or IP address for the cluster
connection service, used for internal communication between brokers in the cluster. The default setting works fine, however, explicitly setting the property can be useful if there is more than one network interface card installed in a computer. If you set the value of this property to localhost
, the value will be ignored and the default will be used.
In addition to the properties listed in Cluster Connection Service Properties, all conventional clusters use the following properties:
imq.cluster.brokerlist specifies a list of broker addresses defining the membership of the cluster; all brokers in the cluster must have the same value for this property.
For example, to create a conventional cluster consisting of brokers at port 9876
on host1
, port 5000
on host2
, and the default port (7676
) on ctrlhost
, use the following value:
imq.cluster.brokerlist=host1:9876,host2:5000,ctrlhost
imq.cluster.nomasterbroker specifies whether the cluster is a conventional cluster of peer brokers, which uses a shared JDBC data store for the cluster's configuration change record. When true
, the cluster is a conventional cluster of peer brokers. When false
(or omitted, as false
is the default), the cluster is considered to be a conventional cluster with master broker, even if no master broker is actually specified. All brokers in a given cluster must have the same value for this property.
Each type of conventional cluster has additional properties to support its configuration, as described in the following two sections.
The following additional properties are used to configure a conventional cluster with a master broker:
imq.cluster.masterbroker specifies which broker in a conventional cluster is the master broker that maintains the configuration change record that tracks the addition and deletion of destinations and durable subscribers. For example:
imq.cluster.masterbroker=host2:5000
While specifying a master broker using the imq.cluster.masterbroker
is not mandatory for a conventional cluster with master broker to function, it guarantees that persistent information propagated across brokers (destinations and durable subscriptions) is always synchronized. See "Conventional Clusters" in Oracle GlassFish Server Message Queue Technical Overview.
imq.cluster.dynamicChangeMasterBrokerEnabled specifies whether the master broker can be changed to another broker in the cluster without stopping all the broker in the cluster. All brokers in a given cluster must have the same value for this property.
The following additional properties are used to configure a conventional cluster of peer brokers. All brokers in a given cluster must have the same values for these properties.
imq.cluster.clusterid specifies the cluster identifier, which will be appended to the name of the configuration change record's database table in the JDBC data store. The value of this property must be the same for all brokers in a given cluster, but must be unique for each cluster: no two clusters may have the same cluster identifier.
imq.cluster.sharecc.persist.jdbc.dbVendor specifies the name of the database vendor of the JDBC data store housing the configuration change record's table.
imq.cluster.sharecc.persist.jdbc.<vendorName>.user specifies the user name, if required, for connecting to the database from vendor <vendorName>.
imq.cluster.sharecc.persist.jdbc.<vendorName>.needpassword specifies whether a password is needed for connecting to the database from vendor <vendorName>.
imq.cluster.sharecc.persist.jdbc.<vendorName>.password specifies the password, if required, for connecting to the database from vendor <vendorName>. This value should be set only in password files, as described in Password Files.
imq.cluster.sharecc.persist.jdbc.<vendorName>.driver specifies the Java class name of the JDBC driver, if required, for connecting to the database from vendor <vendorName>.
imq.cluster.sharecc.persist.jdbc.<vendorName>.opendburl specifies the URL for connecting to an existing database from vendor <vendorName>. This applies when a java.sql.Driver
is used to connect to the database.
imq.cluster.sharecc.persist.jdbc.<vendorName>.createdburl optionally specifies the URL for creating a new database from vendor <vendorName>. This applies only to embedded databases, such as Java DB.
imq.cluster.sharecc.persist.jdbc.<vendorName>.closedburl optionally specifies the URL for closing a connection to the database from vendor <vendorName>. This applies only to some embedded databases, such as Java DB.
imq.cluster.sharecc.persist.jdbc.<vendorName>.tableoption optionally specifies vendor-specific options to be passed to the database from vendor <vendorName> when creating the table schema.
imq.cluster.sharecc.persist.jdbc.<vendorName>.property.<propName> specifies a vendor-specific property <propName> for the database from vendor <vendorName>.
Enhanced broker clusters, which share a JDBC-based data store, require more configuration than do conventional broker clusters. In addition to the properties listed in Cluster Connection Service Properties, the following categories of properties are used to configure an enhanced cluster:
imq.cluster.ha is a boolean value that specifies if the cluster is an enhanced cluster (true
) or a conventional broker (false
). The default value is false
.
If set to true
, mechanisms for failure detection and takeover of a failed broker are enabled. Enhanced clusters are self-configuring: any broker configured to use the cluster's shared data store is automatically registered as part of the cluster, without further action on your part. If the conventional cluster property, imq.cluster.brokerlist
, is specified for a high-availability broker, the property is ignored and a warning message is logged at broker startup.
imq.persist.store specifies the model for a broker's persistent data store. This property must be set to the value jdbc
for every broker in an enhanced cluster.
imq.cluster.clusterid specifies the cluster identifier, which will be appended to the names of all database tables in the cluster's shared persistent store. The value of this property must be the same for all brokers in a given cluster, but must be unique for each cluster: no two running clusters may have the same cluster identifier.
imq.brokerid is a broker identifier that must be unique for each broker in the cluster. Hence, this property must be set in each broker's instance configuration file rather than in a cluster configuration file.
The persistent data store for an enhanced cluster is maintained on a highly-available JDBC database.
The highly-availabile database may be MySQL Cluster Edition or Oracle Real Application Clusters (RAC), or it may be an open-source or third-party product. As described in JDBC-Based Persistence Properties, the imq.persist.jdbc.dbVendor
broker property specifies the name of the database vendor, and all of the remaining JDBC-related properties are qualified with this vendor name.
The JDBC-related properties are discussed under JDBC-Based Persistence Properties and summarized in Table 17-8. See the example configuration for MySQL in Example 8-1.
Note:
In setting JDBC-related properties for an enhanced cluster when using MySQL Cluster Edition as a highly-available database, you must specify the NDB Storage Engine rather than the InnoDB Storage Engine set by Message Queue by default. To specify the NDB Storage Engine, set the following broker property for all brokers in the cluster:
imq.persist.jdbc.mysql.tableoption=ENGINE=NDBCLUSTER
The following configuration properties (listed in Table 17-14) specify the parameters for the exchange of heartbeat and status information within an enhanced cluster:
imq.cluster.heartbeat.hostname specifies the host name (or IP address) for the heartbeat connection service.
imq.cluster.heartbeat.port specifies the port number for the heartbeat connection service.
imq.cluster.heartbeat.interval specifies the interval, in seconds, at which heartbeat packets are transmitted.
imq.cluster.heartbeat.threshold specifies the number of missed heartbeat intervals after which a broker is considered suspect of failure.
imq.cluster.monitor.interval specifies the interval, in seconds, at which to monitor a suspect broker's state information to determine whether it has failed.
imq.cluster.monitor.threshold specifies the number of elapsed monitor intervals after which a suspect broker is considered to have failed.
Smaller values for these heartbeat and monitoring intervals will result in quicker reaction to broker failure, but at the cost of reduced performance and increased likelihood of false suspicions and erroneous failure detection.
To display information about a cluster's configuration, use the Command utility's list bkr
subcommand:
imqcmd list bkr
This lists the current state of all brokers included in the cluster to which a given broker belongs. The broker states are described in the following table:
Broker State | Meaning |
---|---|
|
Broker is operating |
|
For enhanced clusters, broker has begun taking over persistent data store from another broker |
|
For enhanced clusters, broker has finished taking over persistent data store from another broker |
|
For enhanced clusters, attempted takeover has failed |
|
Broker has begun quiescing |
|
Broker has finished quiescing |
|
Broker has begun shutting down |
|
Broker is down |
|
Broker state unknown |
The results of the imqcmd list bkr
command are shown in Example 10-1 (for a conventional cluster) and Example 10-2 (for an enhanced cluster).
Example 10-1 Configuration Listing for a Conventional Cluster
Listing all the brokers in the cluster that the following broker is a member of: ------------------------- Host Primary Port ------------------------- localHost 7676 Cluster Is Highly Available False ------------------------- Address State --------------------- whippet:7676 OPERATING greyhound:7676 OPERATING
Example 10-2 Configuration Listing for an Enhanced Cluster
Listing all the brokers in the cluster that the following broker is a member of: ---------------------------------------------- Host Primary Port Cluster Broker ID ---------------------------------------------- localHost 7676 brokerA Cluster ID myClusterID Cluster Is Highly Available True -------------------------------------------------------------------------------------------------------------- ID of broker Time since last Broker ID Address State Msgs in store performing takeover status timestamp -------------------------------------------------------------------------------------------------------------- brokerA localhost:7676 OPERATING 121 30 sec brokerB greyhound:7676 TAKEOVER_STARTED 52 brokerA 3 hrs brokerC jpgserv:7676 SHUTDOWN_STARTED 12346 10 sec brokerD icdev:7676 TAKEOVER_COMPLETE 0 brokerA 2 min brokerE mrperf:7676 *unknown 12 0 sec brokerG iclab1:7676 QUIESCING 4 2 sec brokerH iclab2:7676 QUIESCE_COMPLETE 8 5 sec
The following sections describe how to perform various administrative management tasks for conventional and enhanced clusters, respectively.
The procedures in this section show how to perform the following tasks for a conventional cluster:
Changing the Master Broker in a Conventional Cluster with Master Broker
Managing a Conventional Cluster's Configuration Change Record
There are two general methods of connecting brokers into a conventional cluster: from the command line (using the -cluster
option) or by setting the imq.cluster.brokerlist
property in the cluster configuration file.
Whichever method you use, each broker that you start attempts to connect to the other brokers in the cluster every five seconds until the connection succeeds.
For a cluster configured with master broker, the connection will succeed once the master broker is started up (if one is configured). If a broker in the cluster starts before the master broker, it will remain in a suspended state, rejecting client connections, until the master broker starts; the suspended broker then will automatically become fully functional. It is therefore a good idea to start the master broker first and then the others, after the master broker has completed its startup.
When connecting brokers into a conventional cluster, you should be aware of the following issues:
Mixed broker versions. A conventional cluster can contain brokers of different versions if all brokers have a version at least as great as that of the master broker. If the cluster is not configured to use a master broker, then all brokers must be of the same version.
Matching broker property values. In addition to cluster configuration properties, the following broker properties also must have the same value for all brokers in a cluster:
imq.service.activelist
imq.autocreate.queue
imq.autocreate.topic
imq.autocreate.queue.maxNumActiveConsumers
imq.autocreate.queue.maxNumBackupConsumers
This restriction is particularly important when a cluster contains mixed broker versions that might contain properties with different default values. For example, If you are clustering a Message Queue version 4.1 or later broker together with those from earlier versions than Message Queue 4.1, you must set the value of the imq.autocreate.queue.maxNumActiveConsumers
property, which has different default values before and after version 4.1 (1
and -1
, respectively), to be the same. Otherwise the brokers will not be able to establish a cluster connection.
Multiple interface cards. On a multi-homed computer, in which there is more than one network interface card, be sure to explicitly set the network interface to be used by the broker for client connection services (imq.hostname
) and for the cluster connection service (imq.cluster.hostname
). Setting the imq.hostname
value also effectively sets the value for other properties that use imq.hostname
as their default value, such as imq.portmapper.hostname
, imq.cluster.hostname
, and so on. If imq.cluster.hostname
is not set, then connections between brokers might not succeed and as a result, the cluster will not be established.
Network loopback IP address. You must make sure that no broker in the cluster is given an address that resolves to a loopback network (127.*.*.*
) IP address. Any broker configured with such an address will be unable to connect to other brokers in the cluster.
In particular, some Linux installers automatically set the local host to a loopback network address, most commonly 127.0.0.1
. On such systems, you must do the following: For each Linux system participating in the cluster, check the /etc/hosts
file as part of cluster setup. If the system uses a static IP address, edit the /etc/hosts
file to specify the correct address for the local host. If the address is registered with Domain Name Service (DNS), edit the file /etc/nsswitch.conf
so that DNS lookup is performed before consulting the local hosts
file.
The method best suited for production systems is to use a cluster configuration file to specify the configuration of the cluster:
If using a conventional cluster of peer brokers, configure the use of the shared JDBC data store for the configuration change record:
Use the imqdbmgr create sharecc_tbl
command to create the database table for the configuration change record.
Place a copy of, or a symbolic link to, your JDBC driver's .jar
file in the Message Queue external resource files directory, IMQ_HOME/lib/ext
, on each host where a broker will run.
Create a cluster configuration file that uses the imq.cluster.brokerlist
property to specify the list of brokers to be connected.
If you are using a master broker, identify it with the imq.cluster.masterbroker
property in the configuration file.
If you are using a cluster of peer brokers, set the imq.cluster.nomasterbroker
property to true
, and set imq.cluster.sharecc.persist.jdbc.*
properties as appropriate in the configuration file.
For each broker in the cluster, set the imq.cluster.url
property in the broker's instance configuration file to point to the cluster configuration file.
Use the imqbrokerd
command to start each broker.
If there is a master broker, start it first, then the others after it has completed its startup.
Connecting brokers to a cluster from the command line involves starting each broker with the imqbrokerd
command using the -cluster
option to specify the complete list of brokers to be included in the cluster.
For example, the following command starts a broker as part of a cluster consisting of the brokers running at the default port (7676
) on host1
, at port 5000
on host2
, and at port 9876
on the default host (localhost
):
imqbrokerd -cluster host1,host2:5000,:9876
The value specified for the -cluster
option must be the same for all brokers in the cluster.
Set any necessary broker properties, except imq.cluster.brokerlist
, in each broker's configuration file before performing the following procedure.
If using a conventional cluster of peer brokers:
Configure the use of the shared JDBC data store for the configuration change record:
Use the imqdbmgr create sharecc_tbl
command to create the database table for the configuration change record.
Place a copy of, or a symbolic link to, your JDBC driver's .jar
file in the Message Queue external resource files directory, IMQ_HOME/lib/ext
, on each host where a broker will run.
Start each broker in the cluster with the imqbrokerd
command, specifying in the -cluster
option the same complete list of brokers.
If using a conventional cluster with master broker:
Start the master broker with the imqbrokerd
command, specifying in the -cluster
option the complete list of brokers.
Once the master broker is running, start each of the other brokers in the cluster with the imqbrokerd
command, specifying in the -cluster
option the same complete list of brokers as you used to start the master broker.
If you want secure, encrypted message delivery between brokers in a cluster, configure the cluster
connection service to use an SSL-based transport protocol:
For each broker in the cluster, set up SSL-based connection services, as described in Message Encryption.
Set each broker's imq.cluster.transport
property to ssl
, either in the cluster configuration file or individually for each broker.
The procedure for adding a new broker to a conventional cluster depends on whether the cluster uses a cluster configuration file.
Add the new broker to the imq.cluster.brokerlist
property in the cluster configuration file.
Issue the following command to any broker in the cluster:
imqcmd reload cls
This forces each broker to reload the imq.cluster.brokerlist
property. It is not necessary to issue this command to every broker in the cluster; executing it for any one broker will cause all of them to reload the cluster configuration.
(Optional) Set the value of the imq.cluster.url
property in the new broker's instance configuration file (config.properties
) to point to the cluster configuration file.
Start the new broker.
If you did not perform step 3, use the -D
option on the imqbrokerd
command line to set the value of imq.cluster.url
to the location of the cluster configuration file.
(Optional) Set the values of the following properties in the new broker's instance configuration file (config.properties
) :
imq.cluster.brokerlist
imq.cluster.masterbroker
(if necessary)
imq.cluster.transport
(if you are using a secure cluster
connection service)
When the newly added broker starts, it connects and exchanges data with all the other brokers in the imq.cluster.brokerlist
value.
Modify the imq.cluster.brokerlist
property of other brokers in the cluster to include the new broker.
This step is not strictly necessary to add a broker to a functioning cluster. However, should any broker need to be restarted, its imq.cluster.brokerlist
value must include all other brokers in the cluster, including the newly added broker.
Start the new broker.
If you did not perform step 1, use the -D
option on the imqbrokerd
command line to set the property values listed there.
The method you use to remove a broker from a conventional cluster depends on whether you originally created the cluster using a cluster configuration file or by means of command line options.
Note:
Before you remove from a conventional cluster the broker instance serving as the cluster's master broker, first change the master broker to another broker instance in the cluster, as described in Changing the Master Broker in a Conventional Cluster with Master Broker
If you originally created a cluster by specifying its member brokers with the imq.cluster.brokerlist
property in a central cluster configuration file, it isn't necessary to stop the brokers in order to remove one of them. Instead, you can simply edit the configuration file to exclude the broker you want to remove, force the remaining cluster members to reload the cluster configuration, and reconfigure the excluded broker so that it no longer points to the same cluster configuration file:
If you are permanently removing the broker from the cluster, prepare it for removal:
Quiesce the broker by using the imqcmd quiesce bkr
command.
Stop all producer clients connected to the broker.
Drain all messages by waiting for connected consumer clients to consume existing messages.
Use the imqcmd query bkr
command periodically to check the number of messages in the broker.
Roll back or commit any prepared open transactions.
Use the imqcmd list txn
command to view prepared open transactions, and use the imqcmd rollback txn
and imqcmd commit txn
to roll back and commit transactions.
Edit the cluster configuration file to remove the excluded broker from the list specified for the imq.cluster.brokerlist
property.
Issue the following command to each broker remaining in the cluster:
imqcmd reload cls
This forces the brokers to reload the cluster configuration.
Stop the broker you're removing from the cluster.
Edit that broker's instance configuration file (config.properties
), removing or specifying a different value for its imq.cluster.url
property.
If you used the imqbrokerd
command from the command line to connect the brokers into a cluster, you must stop each of the brokers and then restart them, specifying the new set of cluster members on the command line:
If you are permanently removing the broker from the cluster, prepare it for removal:
Quiesce the broker by using the imqcmd quiesce bkr
command.
Stop all producer clients connected to the broker.
Drain all messages by waiting for connected consumer clients to consume existing messages.
Use the imqcmd query bkr
command periodically to check the number of messages in the broker.
Roll back or commit any prepared open transactions.
Use the imqcmd list txn
command to view prepared open transactions, and use the imqcmd rollback txn
and imqcmd commit txn
to roll back and commit transactions.
Stop each broker in the cluster, using the imqcmd
command.
Restart the brokers that will remain in the cluster, using the imqbrokerd
command's -cluster
option to specify only those remaining brokers.
For example, suppose you originally created a cluster consisting of brokers A, B, and C by starting each of the three with the command
imqbrokerd -cluster A,B,C
To remove broker A from the cluster, restart brokers B and C with the command
imqbrokerd -cluster B,C
Message Queue provides two ways to change the broker instance serving as the master broker to a different broker instance in the cluster:
Dynamically while the cluster is running
Manually by stopping the cluster and migrating the configuration change record from one broker to another
To change the master broker dynamically, you must first configure the brokers in the cluster to support dynamic changing of the master broker.
In the properties file for each broker of the cluster, set the imq.cluster.dynamicChangeMasterBrokerEnabled
property to true
.
If using a cluster configuration file, you can instead set the imq.cluster.dynamicChangeMasterBrokerEnabled
property to true
in the cluster configuration file.
In the properties file for each broker of the cluster, set the imq.cluster.masterbroker
property to the initial master broker.
When the imq.cluster.dynamicChangeMasterBrokerEnabled
property is set to true
, the imq.cluster.masterbroker
property cannot be specified on the command line to start a broker. Therefore, it must be set in the brokers' properties files, or in the cluster configuration file if one is being used.
To dynamically change the broker instance serving as the master broker to a different broker instance in the cluster, use the imqcmd changemaster cls
command.
Follow this procedure, for example, before you remove from a cluster the broker instance serving as the master broker.
Caution:
Do not use the imqcmd changemaster cls
command to dynamically change the master broker in a Message Queue cluster managed by GlassFish Server as an Embedded or Local JMS host. Instead, use the asadmin change-master-broker
command as described in "To Change the Master Broker in an Embedded or Local Broker Cluster" in Oracle GlassFish Server High Availability Administration Guide.
To ensure a successful dynamic changing of the master broker, verify that all brokers in the cluster are running before issuing the imqcmd changemaster cls
command.
On the current master broker, run the imqcmd changemaster cls
command, using the -o
to specify the new master broker:
imqcmd changemaster cls -o imq.cluster.masterbroker=newMaster
The value newMaster has the form hostName:
portNumber, where hostName and portNumber are the Port Mapper host name and port number, respectively, of the new master broker's host.
The broker returns one of the following status values for the operation:
The operation was successful. The new master broker is now the master broker for the cluster, and the old master broker is now a normal broker in the cluster. If any other brokers in the cluster were unreachable and so could not be notified of the change, they must be restarted after manually updating their configurations to refer to the new master broker.
The operation failed, and the cluster's configuration was unchanged. The old master broker is still the master broker for the cluster.
The operation failed. Use the imqcmd query bkr
command on the old master broker to discover which broker is the master broker:
If the master broker listed is the old master broker, the failure occurred before the cluster's configuration change record was transferred to the new master broker. In this case, retry the command.
If the master broker listed is the new master broker, the cluster's configuration change record was transferred successfully to the new master broker, but some other activity failed later in the operation. In this case, stop all brokers in the cluster, manually update their configurations to refer to the new master broker, and then restart them all.
Save the configuration change record in the old master broker by using the -backup
option of the imqbrokerd
command:
imqbrokerd -backup backupFile
Stop the old master broker after the configuration change record has been saved.
Update the imq.cluster.masterbroker
property to the new master broker in the configurations for all brokers in the cluster.
Additionally, if necessary, update the imq.cluster.brokerlist
property in the configurations for all brokers in the cluster.
Start the new master broker, restoring the saved configuration change record by using the -restore
option:
imqbrokerd -restore backupFile
When using this command, specify as backupFile the file you saved in Step 1.
Start the other brokers in the cluster.
As noted earlier, a conventional cluster maintains a configuration change record to keep track of any changes in the cluster's persistent state. This configuration change record is maintained either by the master broker or in a shared JDBC data store, depending on the type of the conventional cluster.
Because of the important information that the configuration change record contains, it is important to back it up regularly so that it can be restored in case of failure. Although restoring from a backup will lose any changes in the cluster's persistent state that have occurred since the backup was made, frequent backups can minimize this potential loss of information. The backup and restore operations also have the positive effect of compressing and optimizing the change history contained in the configuration change record, which can grow significantly over time.
Use the -backup
option of the imqbrokerd
command, specifying the name of the backup file.
For example:
imqbrokerd -backup mybackuplog
Use the imqdbmgr backup sharecc_tbl
command to back up the configuration change record:
imqdbmgr backup sharecc_tbl -file fileName -Dimq.cluster.url=clusterConfigUrl
Shut down all brokers in the cluster.
Restore the master broker's configuration change record from the backup file.
The command is
imqbrokerd -restore mybackuplog
If you assign a new name or port number to the master broker, update the imq.cluster.brokerlist
and imq.cluster.masterbroker
properties accordingly in the cluster configuration file.
Restart all brokers in the cluster.
Shut down all brokers in the cluster.
Use the imqdbmgr recreate sharecc_tbl
command to delete the existing configuration change record and then re-create the table:
imqdbmgr recreate sharecc_tbl -Dimq.cluster.url=clusterConfigUrl
Use the imqdbmgr restore sharecc_tbl
command to restore the configuration change record:
imqdbmgr restore sharecc_tbl -file fileName -Dimq.cluster.url=clusterConfigUrl
Start all the brokers in the cluster.
To convert between types of conventional clusters, you change where the configuration change record is maintained: in a master broker or in a shared JDBC data store. The following topics provide instructions to convert between types:
To Convert from Using a Master Broker to Using a Shared JDBC Data Store
To Convert from Using a Shared JDBC Data Store to Using a Master Broker
Shut down all brokers in the cluster.
Back up the configuration change record in the master broker as described in To Back Up the Configuration Change Record in a Master Broker.
Shut down the master broker.
Edit the cluster configuration file, configuring the cluster as a conventional cluster of peer brokers:
Set the imq.cluster.nomasterbroker
property to true
.
Set additional properties as described in Additional Properties for Conventional Clusters of Peer Brokers.
Using the backup file saved in Step 2, restore the configuration change record to the shared JDBC data store as described in To Restore the Configuration Change Record to a Shared JDBC Data Store.
Start all the brokers in the cluster.
Shut down all brokers in the cluster.
Back up the configuration change record in the shared JDBC data store as described in To Back Up the Configuration Change Record in a Shared JDBC Data Store.
Edit the cluster configuration file, configuring the cluster as a conventional cluster with master broker:
Set the imq.cluster.nomasterbroker
property to false
.
Set additional properties as described in Additional Properties for Conventional Clusters with Master Broker.
Using the backup file saved in Step 2, restore the configuration change record to the master broker as described in To Restore the Configuration Change Record to a Master Broker.
Start all the brokers in the cluster.
This section presents step-by-step procedures for performing a variety of administrative tasks for an enhanced cluster:
Because enhanced clusters are self-configuring, there is no need to explicitly specify the list of brokers to be included in the cluster. Instead, all that is needed is to set each broker's configuration properties appropriately and then start the broker; as long as its properties are set properly, it will automatically be incorporated into the cluster. Enhanced Broker Cluster Properties describes the required properties, which include vendor-specific JDBC database properties.
Note:
In addition to creating an enhanced cluster as described in this section, you must also configure clients to successfully reconnect to a failover broker in the event of broker or connection failure. You do this by setting the imqReconnectAttempts
connection factory attribute to a value of -1
.
The property values needed for brokers in an enhanced cluster can be set separately in each broker's instance configuration file, or they can be specified in a cluster configuration file that all the brokers reference. The procedures are as follows:
The method best suited for production systems is to use a cluster configuration file to specify the configuration of the cluster.
Create a cluster configuration file specifying the cluster's high-availability-related configuration properties.
Enhanced Broker Cluster Properties shows the required property values. However, do not include the imq.brokerid
property in the cluster configuration file; this must be specified separately for each individual broker in the cluster.
Specify any additional, vendor-specific JDBC configuration properties that might be needed.
The vendor-specific properties required for MySQL are shown in Example 8-1.
For each broker in the cluster:
Start the broker at least once, using the imqbrokerd
command.
The first time a broker instance is run, an instance configuration file (config.properties
) is automatically created.
Shut down the broker.
Use the imqcmd shutdown bkr
command.
Edit the instance configuration file to specify the location of the cluster configuration file.
In the broker's instance configuration file, set the imq.cluster.url
property to point to the location of the cluster configuration file you created in step 1.
Specify the broker identifier.
Set the imq.brokerid
property in the instance configuration file to the broker's unique broker identifier. This value must be different for each broker.
Place a copy of, or a symbolic link to, your JDBC driver's .jar
file in IMQ_HOME/lib/ext
, the Message Queue external resource files directory.
Create the database tables needed for Message Queue persistence.
Use the imqdbmgr create tbl
command; see Database Manager Utility.
Restart each broker with the imqbrokerd
command.
The brokers will automatically register themselves into the cluster on startup.
For each broker in the cluster:
Start the broker at least once, using the imqbrokerd
command.
The first time a broker instance is run, an instance configuration file (config.properties
) is automatically created.
Shut down the broker.
Use the imqcmd shutdown bkr
command.
Edit the instance configuration file to specify the broker's high-availability-related configuration properties.
Enhanced Broker Cluster Properties shows the required property values. Be sure to set the brokerid
property uniquely for each broker.
Specify any additional, vendor-specific JDBC configuration properties that might be needed.
The vendor-specific properties required for MySQL are shown in Example 8-1.
Place a copy of, or a symbolic link to, your JDBC driver's .jar
file in IMQ_HOME/lib/ext
, the Message Queue external resource files directory.
Create the database tables needed for Message Queue persistence.
Use the imqdbmgr create tbl
command; see Database Manager Utility.
Restart each broker with the imqbrokerd
command.
The brokers will automatically register themselves into the cluster on startup.
Because enhanced clusters are self-configuring, the procedures for adding and removing brokers are simpler than for a conventional cluster.
Set the new broker's high-availability-related properties, as described in the preceding section.
You can do this either by specifying the individual properties in the broker's instance configuration file (config.properties
) or, if there is a cluster configuration file, by setting the broker's imq.cluster.url
property to point to it.
Start the new broker with the imqbrokerd
command.
The broker will automatically register itself into the cluster on startup.
Make sure the broker is not running.
If necessary, use the command
imqcmd shutdown bkr
to shut down the broker.
Remove the broker from the cluster with the command
imqdbmgr remove bkr
This command deletes all database tables for the corresponding broker.
After a broker has failed, you can restart it using the imqbrokerd
command. Normally, the broker will automatically be re-registered into the cluster on startup.
However, if the broker slated to take over the failed broker's persistent data failed as it was taking over the persistent data, the running brokers in the cluster will not permit the failed broker to rejoin the cluster for 60 seconds or twice the value of imq.cluster.monitor.interval
in seconds, whichever is greater.
Although the takeover of a failed broker's persistent data by a failover broker in an enhanced cluster is normally automatic, there may be times when you want to prevent such failover from occurring. To suppress automatic failover when shutting down a broker, use the -nofailover
option to the imqcmd
shutdown
bkr
subcommand:
imqcmd shutdown bkr -nofailover -b hostName:portNumber
where hostName and portNumber are the host name and port number of the broker to be shut down.
Conversely, you may sometimes need to force a broker failover to occur manually. (This might be necessary, for instance, if a failover broker were to itself fail before completing the takeover process.) In such cases, you can initiate a failover manually from the command line: first shut down the broker to be taken over with the -nofailover
option, as shown above, then issue the command
imqcmd takeover bkr -n brokerID
where brokerID is the broker identifier of the broker to be taken over. If the specified broker appears to be running, the Command utility will display a confirmation message:
The broker associated with brokerIDlast accessed the database #seconds ago. Do you want to take over for this broker?
You can suppress this message, and force the takeover to occur unconditionally, by using the -f
option to the imqcmd takeover bkr
command:
imqcmd takeover bkr -f -n brokerID
Note:
The imqcmd
takeover
bkr
subcommand is intended only for use in failed-takeover situations. You should use it only as a last resort, and not as a general way of forcibly taking over a running broker.
For durability and reliability, it is a good idea to back up an enhanced cluster's shared data store periodically to backup files. This creates a snapshot of the data store that you can then use to restore the data in case of catastrophic failure. The command for backing up the data store is
imqdbmgr backup -dir backupDir
where backupDir is the path to the directory in which to place the backup files. To restore the data store from these files, use the command
imqdbmgr restore -dir backupDir
Before restoring the data store, you should shut down all brokers in the enhanced cluster.
The best approach to converting a conventional broker cluster to an enhanced broker cluster is to drain your messaging system of all persistent data before attempting the conversion. This lets you create a new shared data store without worrying about loss of data. However, if you are using individual JDBC-based data stores for your brokers, a utility is available for converting a standalone datastore to a shared data store.
If the brokers in your conventional cluster are using file-based data stores, use the following procedure to convert to an enhanced cluster.
Drain down your messaging system of all persistent data.
Stop all producer clients from producing messages, and wait for all messages in the system to be consumed.
Shut down all client applications.
Shut down all brokers in the conventional cluster.
Reconfigure all brokers for an enhanced cluster.
See Enhanced Broker Cluster Properties. It is recommended that you use a cluster configuration file to specify cluster configuration property values, such as the imq.cluster.clusterid
, imq.persist.store
, and additional shared JDBC database properties.
Start all brokers in the enhanced cluster.
Configure client applications to re-connect to failover brokers.
Client re-connection behavior is specified by connection handling attributes of the connection factory administered objects (see the Connection Handling). In the case of enhanced broker clusters, the imqAddressList
, imqAddressListBehavior
, and imqAddressListIterations
attributes are ignored, however the imqReconnectAttempts
attribute should be set to a value of -1
(unlimited).
Start all client applications.
Resume messaging operations
If the brokers in your conventional cluster are using JDBC-based data stores, use the following procedure to convert to an enhanced cluster. The procedure assumes that individual standalone broker data stores reside on the same JDBC database server.
Back up all persistent data in the standalone JDBC-based data store of each broker.
Use proprietary JDBC database tools.
Shut down all client applications.
Shut down all brokers in the conventional cluster.
Convert each standalone data store to a shared data store.
Use the Message Queue Database Manager utility (imqdbmgr
) subcommand
imqdbmgr upgrade hastore
to convert an existing standalone JDBC database to a shared JDBC database.
Reconfigure all brokers for an enhanced cluster.
See Enhanced Broker Cluster Properties. It is recommended that you use a cluster configuration file to specify cluster configuration property values, such as the imq.cluster.clusterid
, imq.persist.store
, and additional shared JDBC database properties.
Start all brokers in the enhanced cluster.
Configure client applications to re-connect to failover brokers.
Client re-connection behavior is specified by connection handling attributes of the connection factory administered objects (see the Connection Handling). In the case of enhanced broker clusters, the imqAddressList
, imqAddressListBehavior
, and imqAddressListIterations
attributes are ignored, however the imqReconnectAttempts
attribute should be set to a value of -1
(unlimited).
Start all client applications.
Resume messaging operations.