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>
手动故障转移步骤:
- 停止从Broker
- 修改从Broker配置,删除master节点地址
- 重启从Broker,此时它变为主Broker
- 其他从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 方式实现的高可用性机制:
- 会话复制:每个Broker中保存其它Broker的会话信息,某个Broker挂掉后可以继续处理未完成的会话。
- 消息复制:每个Broker中保存其它Broker的队列消息,实现消息冗余。
- 锁复制:每个Broker中保存其它Broker上的锁,避免消息重复消费。
- 自动故障转移:当某个Broker down时,其上的队列和主题会迁移到存活的Broker。