ActiveMQ 中如何进行故障转移和高可用性配置?

ActiveMQ 中的故障转移和高可用性主要依靠 Master-Slave 和 Cluster 两种方式实现。
1、 Master-Slave:配置主从Broker,主Broker故障时手动将从Broker提升为主Broker。

<broker brokerName="master"   dataDirectory="${activemq.data}">
...
</broker>

<broker brokerName="slave1"  dataDirectory="${activemq.data}">  
<transportConnectors>     
    <transportConnector uri="tcp://master:61616" duplex="true"/>  
</transportConnectors>
</broker>

手动故障转移步骤:

  1. 停止从Broker
  2. 修改从Broker配置,删除master节点地址
  3. 重启从Broker,此时它变为主Broker
  4. 其他从Broker连接新的主Broker

2、 Cluster:配置多个Broker为一个Cluster,实现自动故障转移。

<broker brokerName="broker1" xmlns="http://activemq.apache.org/schema/core">  
  <haPolicy>
     <sharedStore>true</sharedStore>  
   <policyMap>
     <policyEntries>
       <policyEntry topic=">" producerFlowControl="false">  
           <clustered>true</clustered>  
       </policyEntry>
     </policyEntries>
   </policyMap>
 </haPolicy>
</broker>

当某个Broker down机时,其上的queue和topic会自动迁移到其他Broker,Consumer会自动重连,实现故障转移。

Cluster 方式实现的高可用性机制:

  1. 会话复制:每个Broker中保存其它Broker的会话信息,某个Broker挂掉后可以继续处理未完成的会话。
  2. 消息复制:每个Broker中保存其它Broker的队列消息,实现消息冗余。
  3. 锁复制:每个Broker中保存其它Broker上的锁,避免消息重复消费。
  4. 自动故障转移:当某个Broker down时,其上的队列和主题会迁移到存活的Broker。