I’m going to take a step outside of the norm and talk about scaling EMS, Tibco’s JMS server. This is a quick overview of the different kinds of scaling available, not a comprehensive how-to guide.
In an Active/Passive configuration, EMS shares configuration files like the queues.conf, topics.conf, and users.conf. It also shares a single data store file(or three, to be exact).
The passive EMS server will monitor the active server over Rendezvous and will attempt to take over as the master if it stops receiving responses. After communication stops, the passive server will attempt to lock the data store file. If it’s able to obtain a lock, it will take over as the master. If it’s unable to obtain a lock, you’ll see an error in the logs and it will default to being passive for a set amount of time before trying again. This gives EMS two layers of fail-over conditions before the active is relieved of command.
EMS doesn’t allow true multi-master configuration. What it does allow is the capacity to have two active EMS servers sharing a routed queue. In this scenario, a queue is placed on two connected active EMS servers and is configured as routed. That queue, at the queue level, will be configured as a master queue on one of the servers. If the second server receives a message for the routed queue, it will route that message to the master queue. For practical use, this allows both EMS servers to accept message but still stores all messages on one of the servers. You could, of course, divide the queues between the two servers to split the number of master queues on each server but you’re increasing the complexity of your environment for very little benefit.
Multi-Master with Active/Passive
OK. Time for the weird and complex. The standard Multi-Master config doesn’t actually give you any redundancy because each queue will only accept messages if the master queue is available. As the master queue only exists on one server, this effectively makes multi-master a single point of failure. Meet Multi-Master with Active/Passive.
This configuration is the same as multi-master except each master server is configured with its own passive server attached. This results in a four server cluster with slightly improved throughput and similar redundancy to the default ActivePassive cluster.
EMS is designed as a monolithic messaging server and isn’t really built to scale. While it does offer some better options for throughput(Multi-Master) the best method of scaling EMS for speed and/or capacity is still to put it on a nice powerful physical server in standard Active-Passive configuration and leave it be.