Dear ActiveMQ Artemis Team,

I’m currently setting up a two-node ActiveMQ Artemis cluster using
colocated replication. Each server hosts a primary broker and is expected
to run a backup for the other node. However, I'm encountering an issue
where the backups are not being launched, even though the configuration
seems correct.

Here is a summary of the setup:

- Node 1 : cluster name "cluster-a", expects to host backup for Node 2
- Node 2 : cluster name "cluster-b", expects to host backup for Node 1
- Replication is configured with `<colocated>` HA policy and
`backup-port-offset=3`
- Each broker has a unique cluster-connection name and connects to the
other via static connectors
- Both brokers start successfully and see each other in the cluster topology

Despite this, no backup starts on either node. In the logs, I can see
messages such as:

AMQ221000: Backup message broker is starting...
AMQ221049: Activating Replica for node: ...
AMQ222162: Moving data directory .../colocated_backup_01 to .../oldreplica.1

I have already tried the following:
- Deleted all `colocated_backup_*` and `oldreplica.*` directories before
startup
- Ensured ports (61616/61619) are open and not used by other processes
- Started nodes in correct order (primary first, then peer)

Still, the backup never binds to port 61619 or shows up in the topology.
Could you please advise what might be causing this issue, or if there is a
known bug or caveat with colocated replication in this setup?

some logs :
bin/artemis check cluster --user admin --password admin
Connection brokerURL = tcp://localhost:61616
*******************************************************************************************************************************
nodeID                                   | primary                   |
primary local time  | backup
6c659d11-573f-11f0-8aed-860000883885     | tcp://node1:61616    |
2025-07-10 12:36:37 | null
6c54861a-573f-11f0-82fc-860000cab0fe     | tcp://node2:61616    |
2025-07-10 12:36:37 | null
Time variance in the cluster is 18 milliseconds
*******************************************************************************************************************************
--> Verifying Topology for NodeID 6c659d11-573f-11f0-8aed-860000883885,
primary = tcp://node1:61616, backup = null
   verification on primary tcp://node1:61616
   ok!
--> Verifying Topology for NodeID 6c54861a-573f-11f0-82fc-860000cab0fe,
primary = tcp://node2:61616, backup = null
   verification on primary tcp://node2:61616
   ok!


Jul 10 12:38:07 test-node104 apache-artemis[2653780]: 2025-07-10
12:38:07,467 INFO  [org.apache.activemq.artemis.core.server] AMQ221060:
Sending quorum vote request to 10.56.58.7/10.56.58.7:61616:
RequestBackupVote [backupsSize=-1, nodeID=null, backupAvailable=false]
Jul 10 12:38:07 test-node104 apache-artemis[2653780]: 2025-07-10
12:38:07,470 INFO  [org.apache.activemq.artemis.core.server] AMQ221061:
Received quorum vote response from 10.56.58.7/10.56.58.7:61616:
RequestBackupVote [backupsSize=0,
nodeID=6c54861a-573f-11f0-82fc-860000cab0fe, backupAvailable=true]

Conf:
<connectors>
<connector name="backup-connector">tcp://node1:61616</connector>
<connector name="self-connector">tcp://node2:61616</connector>
</connectors>

<cluster-connections>
<cluster-connection name="cluster-a">
<connector-ref>self-connector</connector-ref>
<retry-interval>1000</retry-interval>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>ON_DEMAND</message-load-balancing>
<max-hops>1</max-hops>
<static-connectors>
<connector-ref>backup-connector</connector-ref>
<connector-ref>self-connector</connector-ref>
</static-connectors>
</cluster-connection>
</cluster-connections>

<ha-policy>
<replication>
<colocated>
<request-backup>true</request-backup>
<max-backups>1</max-backups>
<backup-request-retries>-1</backup-request-retries>
<backup-request-retry-interval>5000</backup-request-retry-interval>
<backup-port-offset>3</backup-port-offset>

<primary>
<check-for-active-server>true</check-for-active-server>
</primary>

<backup>
<allow-failback>true</allow-failback>
</backup>

<excludes>
<connector-ref>self</connector-ref>
</excludes>
</colocated>
</replication>
</ha-policy>

<connectors>
<connector name="backup-connector">tcp://node2:61616</connector>
<connector name="self-connector">tcp://node1:61616</connector>
</connectors>

<cluster-connections>
<cluster-connection name="cluster-a">
<connector-ref>self-connector</connector-ref>
<retry-interval>1000</retry-interval>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>ON_DEMAND</message-load-balancing>
<max-hops>1</max-hops>
<static-connectors>
<connector-ref>backup-connector</connector-ref>
<connector-ref>self-connector</connector-ref>
</static-connectors>
</cluster-connection>
</cluster-connections>

<ha-policy>
<replication>
<colocated>
<request-backup>true</request-backup>
<max-backups>1</max-backups>
<backup-request-retries>-1</backup-request-retries>
<backup-request-retry-interval>5000</backup-request-retry-interval>
<backup-port-offset>3</backup-port-offset>

<primary>
<check-for-active-server>true</check-for-active-server>
</primary>

<backup>
<allow-failback>true</allow-failback>
</backup>

<excludes>
<connector-ref>self</connector-ref>
</excludes>
</colocated>
</replication>
</ha-policy>

Best regards,
Pierre

Reply via email to