The new KahaDB store supports a very fast and flexible replication system. It features:
KahaDB supports a pluggable Master Election algorithm but the only current implementation is one based on ZooKeeper.
ZooKeeper is used to implement the master election algorithm. ZooKeeper is a very fast, replicated, in memory database with features that make it easy to implement cluster control algorithms. It is an Apache project which you can freely download. You must installed and have at least one ZooKeeper server running before setting up a KahaDB Master Slave configuration.
The ActiveMQ binary distribution includes a KahaDB HA broker configuration at $ACTIVEMQ_HOME/conf/ha.xml.
It it setup to look for a ZooKeeper 3.0.0 server on localhost at port 2181. Edit the configuration if this is not where you are running your ZooKeeper server.
Start the configuation up by running:
The actual contents of the configuration file follows:
Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20
Notice that the the brokerURI attribute points at another broker configuration file. The ha-broker.xml contains the actual broker configuration that the broker uses when the node take over as master. The ha-broker.xml configuration file is a standard broker configuration except in these aspects:
The above rules allows the replication system to inject the replicated KahaDB store into the Master when it's starting up.
The minimumReplicas specifies how many copies of the database are required before synchronous update operations are deemed successful. Setting this to 0 allows a broker to continue operating even if there are no slaves attached. If the value is set to 1 or greater, and there are no slaves attached, the brokers persistent message processing will be suspended until the minimum number of slaves are attached and the data synchronized.
The uri attribute should always be configured with a kdbr:// based URI. KDBR stands for 'KahaDB Replication' and this is the replication protocol used between the masters and the slaves. The master binds the specified port with slaves subsequently connect to and establish replication sessions. The host name in the uri MUST get updated to the actual machine's host name since this is also used to identify the nodes in the cluster.
This is the data directory where the KahaDB will store it's persistence files.