ActiveMQ 主备方式部署方案 主要是通过共享存储介质来实现master和slave的热备,争抢到共享存储介质控制权的作为Master,共享存储介质可以是文件,或者数据库等。
- 共享存储文件方案(Shared File System Master Slave)
- 数据库方案(JDBC Master Slave)
- Replicated LevelDB Store
操作配置一览表
节点名称 | 管理端口 | 集群通讯端口 | 服务目录 |
---|---|---|---|
node2181 | 2181 | 2887:3887 | /usr/local/activemq-cluster/node2181 |
node2182 | 2182 | 2888:3888 | /usr/local/activemq-cluster/node2182 |
node2183 | 2183 | 2889:3889 | /usr/local/activemq-cluster/node2183 |
集群操作方案
共享存储文件方案(Shared File System Master Slave)
- 原理
基本上,您可以从同一共享文件系统目录中运行任意数量的代理。抢占文件排他锁的第一个代理是主代理。如果该代理去世并释放锁,则另一个代理将接管。从代理位于一个循环中,试图从主代理获取锁。这种方式其实只要两个节点即可完成主备方案。
如下图,初始化一主两备,当主机异常后,两个备机将抢占文件排它锁,抢到锁的一方称为新的主机
- 实施
这种方案比较简单,在linux上创建三个节点分别配置相关端口,并且通过如下配置文件,将三个节点的存储文件均制定到同一个,即可完成集群的搭建。
- 重点配置文件(activemq.xml)
kahaDB 方式
<persistenceAdapter>
<kahaDB directory="/sharedFileSystem/sharedBrokerData"/>
</persistenceAdapter>
levelDB 方式
<persistenceAdapter>
<levelDB directory="/sharedFileSystem/sharedBrokerData"/>
</persistenceAdapter>
amq方式
<persistenceAdapter>
<amqPersistenceAdapter directory="/sharedFileSystem/sharedBrokerData"/>
</persistenceAdapter>
参考源地址:http://activemq.apache.org/shared-file-system-master-slave
我们以MySQL方案来实现
<persistenceAdapter>
<!-- 指定数据源 -->
<jdbcPersistenceAdapter dataDirectory="activemq-data" dataSource="#mysql-ds"/>
</persistenceAdapter>
<!-- MySql DataSource Sample Setup -->
<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
<property name="username" value="activemq"/>
<property name="password" value="activemq"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
参考源地址:http://activemq.apache.org/jdbc-master-slave
Replicated LevelDB Store
这种方式是使用了leveldb + zookeeper 实现了集群,将在单独章节去说明