Note: This bug is displayed in read-only format because the product is no longer active in Red Hat Bugzilla.

Bug 980078

Summary: [Doc Bug Fix] Provide example configuration and describe setting HA for HornetQ with shared journal
Product: [JBoss] JBoss Enterprise Application Platform 6 Reporter: Miroslav Novak <mnovak>
Component: DocumentationAssignee: Nichola Moore <nmoore>
Status: CLOSED DUPLICATE QA Contact: Russell Dickenson <rdickens>
Severity: high Docs Contact:
Priority: unspecified    
Version: 6.1.0CC: msvehla, smumford
Target Milestone: ---Keywords: Documentation, FutureFeature
Target Release: EAP 6.3.0   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Enhancement
Doc Text:
Story Points: ---
Clone Of: Environment:
Instance Name: Not Defined Build: CSProcessor Builder Version 1.8 Build Name: 11865, Administration and Configuration Guide-6.1-3 Build Date: 23-05-2013 10:40:22
Last Closed: 2014-06-24 02:01:53 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Miroslav Novak 2013-07-01 11:29:29 UTC
Title: About HornetQ Shared Stores

Describe the issue:
We need to provide step by step guide how to configure HA for HornetQ. There should be described:
1. HA topologies - dedicated vs. collocated 
2. Step by step guide how to configure dedicated HA topology with shared store
3. Step by step guide how to configure collocated HA topology with shared store

For 1. read doc [1] and [2]

For 2. here is example configuration:
Live server:
<subsystem xmlns="urn:jboss:domain:messaging:1.3">
            <hornetq-server>
                ...
                <failover-on-shutdown>true</failover-on-shutdown>
                <shared-store>true</shared-store>
                <journal-type>ASYNCIO</journal-type>
		...
                <paging-directory path="<path_to_shared_journal_folder>/paging"/>
                <bindings-directory path="<path_to_shared_journal_folder>/bindings"/>
                <journal-directory path="<path_to_shared_journal_folder>/journal"/>
                <large-messages-directory path="<path_to_shared_journal_folder>/large-messages"/>
		...

                <jms-connection-factories>
  		    ...
		    <!-- example of connection factory with HA enabled, just for JMS clients -->
                    <connection-factory name="RemoteConnectionFactory">
                        <connectors>
                            <connector-ref connector-name="netty"/>
                        </connectors>
                        <entries>
                            <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
                        </entries>
                        <ha>true</ha>
                        <block-on-acknowledge>true</block-on-acknowledge>
                        <retry-interval>1000</retry-interval>
                        <retry-interval-multiplier>1.0</retry-interval-multiplier>
                        <reconnect-attempts>-1</reconnect-attempts>
                    </connection-factory>
                    ...
                </jms-connection-factories>
		...
            </hornetq-server>
        </subsystem>

Backup server:
<subsystem xmlns="urn:jboss:domain:messaging:1.3">
            <hornetq-server>
		...                
		<backup>true</backup>
                <allow-failback>true</allow-failback>
                <failover-on-shutdown>true</failover-on-shutdown>
                <shared-store>true</shared-store>
                <journal-type>ASYNCIO</journal-type>
		...
                <paging-directory path="<path_to_shared_journal_folder>/paging"/>
                <bindings-directory path="<path_to_shared_journal_folder>/bindings"/>
                <journal-directory path="<path_to_shared_journal_folder>/journal"/>
                <large-messages-directory path="<path_to_shared_journal_folder>/large-messages"/>

                <jms-connection-factories>
		    ...
                    <connection-factory name="RemoteConnectionFactory">
                        <connectors>
                            <connector-ref connector-name="netty"/>
                        </connectors>
                        <entries>
                            <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
                        </entries>
                        <ha>true</ha>
                        <block-on-acknowledge>true</block-on-acknowledge>
                        <retry-interval>1000</retry-interval>
                        <retry-interval-multiplier>1.0</retry-interval-multiplier>
                        <reconnect-attempts>-1</reconnect-attempts>
                    </connection-factory>
                    ...
                </jms-connection-factories>
                ...
            </hornetq-server>
        </subsystem>

For 3. here is example configuration:
First Live/Backup pair:
<subsystem xmlns="urn:jboss:domain:messaging:1.3">
	    <!-- live server of first live/backup pair -->
            <hornetq-server>
		...
		<persistence-enabled>true</persistence-enabled>
                <shared-store>true</shared-store>
                <journal-type>ASYNCIO</journal-type>
                <paging-directory path="<path_to_first_shared_journal_folder>/paging"/>
                <bindings-directory path="<path_to_first_shared_journal_folder>/bindings"/>
                <journal-directory path="<path_to_first_shared_journal_folder>/journal"/>
                <large-messages-directory path="<path_to_first_shared_journal_folder>/large-messages"/>
		...
                <jms-connection-factories>
		    ...
                    <connection-factory name="RemoteConnectionFactory">
                        <connectors>
                            <connector-ref connector-name="netty"/>
                        </connectors>
                        <entries>
                            <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
                        </entries>
                        <ha>true</ha>
                        <block-on-acknowledge>true</block-on-acknowledge>
                        <retry-interval>1000</retry-interval>
                        <retry-interval-multiplier>1.0</retry-interval-multiplier>
                        <reconnect-attempts>-1</reconnect-attempts>
                    </connection-factory>
                    ...
                </jms-connection-factories>
		...
                <jms-destinations>
                    <jms-queue name="testQueue0">
                        <entry name="jms/queue/testQueue0"/>
                        <entry name="java:jboss/exported/jms/queue/testQueue0"/>
                        <durable>true</durable>
                    </jms-queue>
                    <jms-topic name="testTopic0">
                        <entry name="jms/topic/testTopic0"/>
                        <entry name="java:jboss/exported/jms/topic/testTopic0"/>
                    </jms-topic>
                </jms-destinations>
            </hornetq-server>

	    <!-- backup server of second live/backup pair -->
            <hornetq-server name="backup">	
		...
                <persistence-enabled>true</persistence-enabled>
                <backup>true</backup>
                <allow-failback>true</allow-failback>
                <failover-on-shutdown>true</failover-on-shutdown>
                <shared-store>true</shared-store>
                <journal-type>ASYNCIO</journal-type>
                <paging-directory path="<path_to_second_shared_journal_folder>/paging"/>
                <bindings-directory path="<path_to_second_shared_journal_folder>/bindings"/>
                <journal-directory path="<path_to_second_shared_journal_folder>/journal"/>
                <large-messages-directory path="<path_to_second_shared_journal_folder>/large-messages"/>

                <connectors>
		    ...
                    <netty-connector name="netty-backup" socket-binding="messaging-backup"/>
		    ...
                </connectors>

                <acceptors>
		    ...
                    <netty-acceptor name="netty-backup" socket-binding="messaging-backup"/>
		    ...
                </acceptors>

                <broadcast-groups>
                    ...
                    <broadcast-group name="bg-group-backup">
                        <socket-binding>messaging-group</socket-binding>
                        <broadcast-period>2000</broadcast-period>
                        <connector-ref>
                            netty-backup
                        </connector-ref>
                    </broadcast-group>
		    ...
                </broadcast-groups>

                <discovery-groups>
		    ...
                    <discovery-group name="dg-group-backup">
                        <socket-binding>messaging-group</socket-binding>
                        <refresh-timeout>10000</refresh-timeout>
                    </discovery-group>
		    ...
                </discovery-groups>

                <cluster-connections>
                    <cluster-connection name="my-cluster">
                        <address>jms</address>
                        <connector-ref>netty-backup</connector-ref>
                        <retry-interval>1000</retry-interval>
                        <use-duplicate-detection>true</use-duplicate-detection>
                        <forward-when-no-consumers>false</forward-when-no-consumers>
                        <max-hops>1</max-hops>
                        <discovery-group-ref discovery-group-name="dg-group-backup"/>
                    </cluster-connection>
                </cluster-connections>
		...
                <jms-destinations>
                    <jms-queue name="testQueue0">
                        <entry name="jms/queue/testQueue0"/>
                        <entry name="java:jboss/exported/jms/queue/testQueue0"/>
                        <durable>true</durable>
                    </jms-queue>
                    <jms-topic name="testTopic0">
                        <entry name="jms/topic/testTopic0"/>
                        <entry name="java:jboss/exported/jms/topic/testTopic0"/>
                    </jms-topic>
                </jms-destinations>
            </hornetq-server>
</subsystem>
        ...
	<!-- configure socket binding for HornetQ backup of second live/backup pair -->
    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        ...
        <socket-binding name="messaging-backup" port="5446"/>
	...
    </socket-binding-group>

Second Live/Backup pair configuration is equivalent. Only difference is in <path_to_first_shared_journal_folder> and <path_to_second_shared_journal_folder>.
HornetQ live server has <path_to_second_shared_journal_folder>.
HornetQ backup server has <path_to_first_shared_journal_folder>.



[1] http://documentation-devel.engineering.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/5/html-single/HornetQ_User_Guide/index.html
[2] http://docs.jboss.org/hornetq/2.3.0.Final/docs/user-manual/html_single/index.html

Comment 1 Miroslav Novak 2013-07-01 11:30:42 UTC
The should be done for replicated journal. (message replication)

Comment 5 Nichola Moore 2014-06-11 23:31:37 UTC
This looks like a duplicate of 985851, or their requirements at least overlap each other.

Comment 6 Nichola Moore 2014-06-24 02:01:53 UTC
This bug is pretty old now, and as a consequence I think all this has already been covered by BZ 927867.

*** This bug has been marked as a duplicate of bug 927867 ***