WildFly HornetQ Shared Filesystem-Based Collocated HA Configuration: Difference between revisions
No edit summary |
|||
Line 151: | Line 151: | ||
A backup HornetQ instance does not need the <tt><jms-connection-factories></tt> and <tt><jms-destinations></tt> sections as any JMS components are created from the shared journal when the backup server becomes live. | A backup HornetQ instance does not need the <tt><jms-connection-factories></tt> and <tt><jms-destinations></tt> sections as any JMS components are created from the shared journal when the backup server becomes live. | ||
=CLI Procedure= | |||
<font color=red>'''TODO''': https://access.redhat.com/solutions/400873</font> |
Revision as of 20:42, 8 March 2016
External
- Collocated Live-Backup HornetQ setup in EAP 6 https://access.redhat.com/solutions/400873
Internal
Overview
This article describes the steps required to implement a highly available collocated HornetQ topology with EAP 6 and higher. The concepts behind such a topology are presented here:
For high availability purposes, the live server and the backup server instances must be installed on two separated physical (or virtual) hosts, provisioned in such a way to minimize the probability of both host failing at the same time. Highly available HornetQ requires access to reliable shared file system storage, so a file system such as GFS2 or a SAN must be made available to both hosts. HornetQ instances will store on the shared directory, among other things, their bindings and journal files. NFS v4 appropriately configured is also an option.
Procedure
<paths> <path name="hornetq.shared.dir.pair.A" path="/nfs/hornetq-shared-storage-pair-A"/> <path name="hornetq.shared.dir.pair.B" path="/nfs/hornetq-shared-storage-pair-B"/> </paths>
Node 1 Configuration
<subsystem xmlns="urn:jboss:domain:messaging:1.4"> <hornetq-server name="active-node-pair-A"> ... <backup>false</backup> <persistence-enabled>true</persistence-enabled> <shared-store>true</shared-store> <create-bindings-dir>true</create-bindings-dir> <create-journal-dir>true</create-journal-dir> <failover-on-shutdown>true</failover-on-shutdown> <paging-directory path="paging" relative-to="hornetq.shared.dir.pair.A"/> <bindings-directory path="bindings" relative-to="hornetq.shared.dir.pair.A"/> <journal-directory path="journal" relative-to="hornetq.shared.dir.pair.A"/> <large-messages-directory path="large-messages" relative-to="hornetq.shared.dir.pair.A"/> ... <jms-connection-factories> ... <connection-factory name="RemoteConnectionFactory"> <ha>true</ha> <retry-interval>1000</retry-interval> <retry-interval-multiplier>1.0</retry-interval-multiplier> <reconnect-attempts>-1</reconnect-attempts> <connectors> <connector-ref connector-name="netty"/> </connectors> <entries> <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> </entries> </connection-factory> ... </jms-connection-factories> </hornetq-server> <hornetq-server name="standby-node-pair-B"> ... <backup>true</backup> <persistence-enabled>true</persistence-enabled> <shared-store>true</shared-store> <create-bindings-dir>true</create-bindings-dir> <create-journal-dir>true</create-journal-dir> <failover-on-shutdown>true</failover-on-shutdown> <paging-directory path="paging" relative-to="hornetq.shared.dir.pair.B"/> <bindings-directory path="bindings" relative-to="hornetq.shared.dir.pair.B"/> <journal-directory path="journal" relative-to="hornetq.shared.dir.pair.B"/> <large-messages-directory path="large-messages" relative-to="hornetq.shared.dir.pair.B"/> ... <!-- The <jms-connection-factories> section must be completely commented out. <jms-connection-factories> ... </jms-connection-factories> --> </hornetq-server> </subsystem>
Node 2 Configuration
<subsystem xmlns="urn:jboss:domain:messaging:1.4"> <hornetq-server name="active-node-pair-B"> ... <backup>false</backup> <persistence-enabled>true</persistence-enabled> <shared-store>true</shared-store> <create-bindings-dir>true</create-bindings-dir> <create-journal-dir>true</create-journal-dir> <failover-on-shutdown>true</failover-on-shutdown> <paging-directory path="paging" relative-to="hornetq.shared.dir.pair.B"/> <bindings-directory path="bindings" relative-to="hornetq.shared.dir.pair.B"/> <journal-directory path="journal" relative-to="hornetq.shared.dir.pair.B"/> <large-messages-directory path="large-messages" relative-to="hornetq.shared.dir.pair.B"/> ... <jms-connection-factories> ... <connection-factory name="RemoteConnectionFactory"> <ha>true</ha> <retry-interval>1000</retry-interval> <retry-interval-multiplier>1.0</retry-interval-multiplier> <reconnect-attempts>-1</reconnect-attempts> <connectors> <connector-ref connector-name="netty"/> </connectors> <entries> <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> </entries> </connection-factory> ... </jms-connection-factories> </hornetq-server> <hornetq-server name="standby-node-pair-A"> ... <backup>true</backup> <persistence-enabled>true</persistence-enabled> <shared-store>true</shared-store> <create-bindings-dir>true</create-bindings-dir> <create-journal-dir>true</create-journal-dir> <failover-on-shutdown>true</failover-on-shutdown> <paging-directory path="paging" relative-to="hornetq.shared.dir.pair.A"/> <bindings-directory path="bindings" relative-to="hornetq.shared.dir.pair.A"/> <journal-directory path="journal" relative-to="hornetq.shared.dir.pair.A"/> <large-messages-directory path="large-messages" relative-to="hornetq.shared.dir.pair.A"/> ... <!-- The <jms-connection-factories> section must be completely commented out. <jms-connection-factories> ... </jms-connection-factories> --> </hornetq-server> </subsystem>
JMS Connection Factories
A backup HornetQ instance does not need the <jms-connection-factories> and <jms-destinations> sections as any JMS components are created from the shared journal when the backup server becomes live.