I was able to successfully setup Apache ActiveMQ Artemis Master/Slave
replication on my 2 VM cluster.

VM1 : 172.29.219.89

VM2 : 172.29.219.104

My broker.xml for Master node is :

  <connectors>
    <connector name="artemis">tcp://172.29.219.89:61616</connector>
    <connector
name="cluster-connector">tcp://172.29.219.104:61616</connector>
  </connectors> 

  <cluster-user>cluster-user</cluster-user>
  <cluster-password>cluster-password</cluster-password>

  <cluster-connections>
   <cluster-connection name="cluster1">
    <address>*</address>
    <connector-ref>artemis</connector-ref>
    <retry-interval>1000</retry-interval>
    <message-load-balancing>ON_DEMAND</message-load-balancing>
    <max-hops>1</max-hops>
     <static-connectors>
      <connector-ref>cluster-connector</connector-ref>
     </static-connectors>
   </cluster-connection>
  </cluster-connections>


  <ha-policy>
    <replication>
     <master>
        <check-for-live-server>true</check-for-live-server>
     </master>
    </replication>
  </ha-policy>
My broker.xml for Slave node is :

  <connectors>
    <connector name="artemis">tcp://172.29.219.104:61616</connector>
    <connector
name="cluster-connector">tcp://172.29.219.89:61616</connector>
  </connectors> 

  <cluster-user>cluster-user</cluster-user>
  <cluster-password>cluster-password</cluster-password>

  <cluster-connections>
   <cluster-connection name="cluster1">
    <address>*</address>
    <connector-ref>artemis</connector-ref>
    <retry-interval>1000</retry-interval>
    <message-load-balancing>ON_DEMAND</message-load-balancing>
    <max-hops>1</max-hops>
     <static-connectors>
      <connector-ref>cluster-connector</connector-ref>
     </static-connectors>
   </cluster-connection>
  </cluster-connections>


  <ha-policy>
    <replication>
     <slave>
         <allow-failback>true</allow-failback>
     </slave>
    </replication>
  </ha-policy>
The above configuration when deployed on just the 2 VMs works perfectly
fine. As soon as I take the Master down, the failover is instantaneous and
when I bring back the master, the fail back is instantaneous too.

Now I want to dockerize this.

My Docker file is :

COPY initialize.sh /

RUN  chmod a+x initialize.sh

RUN yum clean all && yum install -y unzip java-1.8.0-openjdk.x86_64

RUN curl -f -L -o apache-artemis-2.4.0-bin.zip
http://apache.mirrors.spacedump.net/activemq/activemq-artemis/2.4.0/apache-artemis-2.4.0-bin.zip

RUN unzip -qd /opt apache-artemis-2.4.0-bin.zip

EXPOSE 8080 61616 5672 61613 5445 1883 

ENTRYPOINT [ "/initialize.sh" ] 
The initialize.sh just setups the brokers and loads the respective
broker.xml files for Master and Slave configs.

My Docker container for Master is deployed on Master node. I start the
docker container with the command :

docker run -p 8080:8080 -p 61616:61616 -p 5672:5672 -p 61613:61613 -p
5445:5445 -p 1883:1883 <container-id> --state master
My Docker container for Slave is deployed on Slave node. I start the docker
container with

docker run -p 8080:8080 -p 61616:61616 -p 5672:5672 -p 61613:61613 -p
5445:5445 -p 1883:1883 <container-id> --state slave
My broker.xml config is the same that I am loading into the containers.

But in this case when I take down the Master, the failover takes over 1 min
to happen.

The logs are ::

14:32:43,532 INFO  [org.apache.activemq.artemis.core.server] AMQ221066:
Initiating quorum vote: LiveFailoverQuorumVote
14:32:43,535 INFO  [org.apache.activemq.artemis.core.server] AMQ221067:
Waiting 30 seconds for quorum vote results.
14:32:43,535 INFO  [org.apache.activemq.artemis.core.server] AMQ221068:
Received all quorum votes.
14:32:43,536 INFO  [org.apache.activemq.artemis.core.server] AMQ221071:
Failing over based on quorum vote results.
14:32:43,561 INFO  [org.apache.activemq.artemis.core.server] AMQ221037:
ActiveMQServerImpl::serverUUID=83d3b7c9-285d-11e8-bfc9-0242ac110001 to
become 'live'
14:32:43,591 WARN  [org.apache.activemq.artemis.core.client] AMQ212004:
Failed to connect to server.
14:32:43,854 INFO  [org.apache.activemq.artemis.core.server] AMQ221003:
Deploying queue DLQ on address DLQ
14:32:43,855 INFO  [org.apache.activemq.artemis.core.server] AMQ221003:
Deploying queue ExpiryQueue on address ExpiryQueue
14:32:44,261 INFO  [org.apache.activemq.artemis.core.server] AMQ221007:
Server is now live
14:32:44,318 INFO  [org.apache.activemq.artemis.core.server] AMQ221020:
Started EPOLL Acceptor at 0.0.0.0:61616 for protocols
[CORE,MQTT,AMQP,STOMP,HORNETQ,OPENWIRE]
14:32:44,345 INFO  [org.apache.activemq.artemis.core.server] AMQ221020:
Started EPOLL Acceptor at 0.0.0.0:5445 for protocols [HORNETQ,STOMP]
14:32:44,348 INFO  [org.apache.activemq.artemis.core.server] AMQ221020:
Started EPOLL Acceptor at 0.0.0.0:5672 for protocols [AMQP]
14:32:44,365 INFO  [org.apache.activemq.artemis.core.server] AMQ221020:
Started EPOLL Acceptor at 0.0.0.0:1883 for protocols [MQTT]
14:32:44,368 INFO  [org.apache.activemq.artemis.core.server] AMQ221020:
Started EPOLL Acceptor at 0.0.0.0:61613 for protocols [STOMP]
And the fail back does not occur at all when the Master is back up.

On the slave container all I see in the logs is :

14:34:29,464 INFO  [org.apache.activemq.artemis.core.server] AMQ221027:
Bridge ClusterConnectionBridge@66d554c6
[name=$.artemis.internal.sf.cluster1.f4ad2f1c-285d-11e8-acde-0242ac110001,
queue=QueueImpl[name=$.artemis.internal.sf.cluster1.f4ad2f1c-285d-11e8-acde-0242ac110001,
postOffice=PostOfficeImpl
[server=ActiveMQServerImpl::serverUUID=83d3b7c9-285d-11e8-bfc9-0242ac110001],
temp=false]@21ef670d targetConnector=ServerLocatorImpl
(identity=(Cluster-connection-bridge::ClusterConnectionBridge@66d554c6
[name=$.artemis.internal.sf.cluster1.f4ad2f1c-285d-11e8-acde-0242ac110001,
queue=QueueImpl[name=$.artemis.internal.sf.cluster1.f4ad2f1c-285d-11e8-acde-0242ac110001,
postOffice=PostOfficeImpl
[server=ActiveMQServerImpl::serverUUID=83d3b7c9-285d-11e8-bfc9-0242ac110001],
temp=false]@21ef670d targetConnector=ServerLocatorImpl
[initialConnectors=[TransportConfiguration(name=artemis,
factory=org-apache-activemq-artemis-core-remoting-impl-netty-NettyConnectorFactory)
?port=61616&host=172-29-219-89],
discoveryGroupConfiguration=null]]::ClusterConnectionImpl@1909325807[nodeUUID=83d3b7c9-285d-11e8-bfc9-0242ac110001,
connector=TransportConfiguration(name=artemis,
factory=org-apache-activemq-artemis-core-remoting-impl-netty-NettyConnectorFactory)
?port=61616&host=172-29-219-104, address=*,
server=ActiveMQServerImpl::serverUUID=83d3b7c9-285d-11e8-bfc9-0242ac110001]))
[initialConnectors=[TransportConfiguration(name=artemis,
factory=org-apache-activemq-artemis-core-remoting-impl-netty-NettyConnectorFactory)
?port=61616&host=172-29-219-89], discoveryGroupConfiguration=null]] is
connected
Does anyone have any idea why the Master/Slave replication isnt working in
docker form ?



--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html

Reply via email to