ActiveMQ Master Slave配置以及示例

ActiveMQ MasterSlave集群的三种方式

如下:

Master/Slave集群类型要求好处需要考虑的因素
Share File System Master Slave共享文件系统如SAN可运行任意多个salves,自动回复老的master需要共享文件系统
JDBC Master Slave公用数据库同上需要一个公用数据库,较慢因为不能使用高性能日志
Replicated LevelDB StoreZookeeper同上 + 非常快需要Zookeeper服务器

原文说明:如果你正在使用一个基于网络的共享文件系统比如SAN, 那我们推荐你用Share File System Master Slave. 

    如果你正在使用纯JDBC作为你的持久化引擎并且你并不关心是否使用高性能日志,你可以使用JDBC Master Slave

    对那些想尝试新技术的, Replicated LevelDB Store提供了和SAN(Share File System)方案差不多的速度并且没有设置共享文件系统的麻烦。


PS: 经笔者测试, MasterSlave的集群模式 都只对Queue有效, Topic无效.. 

Share File System Master

官方资料:http://activemq.apache.org/shared-file-system-master-slave.html

该集群方式使用共享文件系统来做Master/slave集群(因为消息数据对他们来说都存在同一个共享文件夹内)

 在本机通过运行多个activemq实例来进行测试,更改集群内所有的activemq.xml配置文件,只需要将broker的<persistenceAdapter>节点配置成如下方式即可:

<persistenceAdapter>
        <!--<kahaDB directory="${activemq.data}/kahadb"/>-->
	<kahaDB directory="E:/activeMQ/sharedb"/>
</persistenceAdapter>

客户端在连接时,使用failover,如下:

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("failover:(tcp://127.0.0.1:61616,tcp://127.0.0.1:61617)");



JDBC Master Slave

官网资料:http://activemq.apache.org/jdbc-master-slave.html

该集群方式使用jdbc做Master/Slave集群(因为消息数据都存在同一个数据库) ps:记得将相关的数据库驱动包放到[activemq安装目录]/lib 下面

此处以Oracle为例, 更改集群内所有activemq.xml配置文件,如下两个地方, persistenceAdapter节点更改如下:

        <persistenceAdapter>
            <span style="white-space:pre">	</span><!-- default -->
<span style="white-space:pre">	</span>        <!--<kahaDB directory="${activemq.data}/kahadb"/>-->
			
		<!-- share file system -->
		<!--<kahaDB directory="E:/activeMQ/sharedb"/>-->
			
		<!-- jdbc -->
		<jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#oracle-ds"/>
        </persistenceAdapter>

添加节点:

	<bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:mqtest"/>
		<property name="username" value="activemq"/>
		<property name="password" value="123456"/>
		<property name="poolPreparedStatements" value="true"/>
	</bean>

Replicated LevelDB Store

官网资料:http://activemq.apache.org/replicated-leveldb-store.html
该方式从ActiveMQ5.9.0开始可用,使用zookeeper来做Master/Slave集群(利用zookeeper将Master Broker上的消息数据同步到Slave Broker上)

由于条件有限,所有此处测试时,将zookeeper群安装在了同一台机器上
Zookeeper下载安装以及配置
zookeeper下载地址:http://zookeeper.apache.org/releases.html
解压zookeeper之后进入目录[zookeeper_install_path]/conf
此例用三台zookeeper做一个zookeeper集群,创建zoo1.cfg, zoo2.cfg, zoo3.cfg文件,其中zoo1.cfg内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/zk1
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
zoo2.cfg, zoo3.cfg只需要更改dataDir和clientPort的值,其他的和zoo1.cfg一致即可,
假设zoo2.cfg的dataDir为:/usr/local/zookeeper/zk2, clientPort=2182
假设zoo3.cfg的dataDir为:/usr/local/zookeeper/zk3, clientPort=2183
执行如下命令
echo 1 > /usr/local/zookeeper/zk1/myid
echo 2 > /usr/local/zookeeper/zk2/myid
echo 3 > /usr/local/zookeeper/zk3/myid
此处1,2,3需要与zoo*.cfg配置中server.x的x相对应
然后启动三个zookeeper
[zookeeper_install_path]/bin/zkServer.sh start zoo1.cfg
[zookeeper_install_path]/bin/zkServer.sh start zoo2.cfg
[zookeeper_install_path]/bin/zkServer.sh start zoo3.cfg
至此zookeeper启动完毕, 如需检查zookeeper是否成功可参照:http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html

activemq的配置
首先将要做Master/Slave集群的所有broker的名字改成一致,因为zookeeper是据此来判断不同的broker是否是一个集群的
然后修改所有activemq.xml <persistenceAdapter>的节点配置如下:
        <persistenceAdapter>
			<!-- default -->
            <span style="white-space:pre">		</span><!--<kahaDB directory="${activemq.data}/kahadb"/>-->
			
			<!-- share file system -->
			<!--<kahaDB directory="E:/activeMQ/sharedb"/>-->
			
			<!-- jdbc -->
			<!--<jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#oracle-ds"/>-->			
			<replicatedLevelDB
			  directory="${activemq.data}/leveldb"
			  replicas="3"
			  bind="tcp://127.0.0.1:0"
			  zkSessionTmeout="5s"
			  zkAddress="192.168.9.102:2181,192.168.9.102:2182,192.168.9.102:2183"				  
			  zkPath="/activemq/leveldb-stores"		
			  sync="local_disk"			  			  
			  />		    
        </persistenceAdapter>
至于该节点内,各个属性的含义,可参照:http://activemq.apache.org/replicated-leveldb-store.html

如启动activemy报firNotNull 的错误,可按如下的方法解决:
1. remove pax-url-aether-1.5.2.jar from lib directory (从activemy的lib目录中移除pax-url-aether-1.5.2.jar)
2. comment out the log query section<bean id="logQuery" class="org.fusesource.insight.log.log4j.Log4jLogQuery"lazy-init="false" scope="singleton"init-method="start" destroy-method="stop"></bean> (注释掉activemq.xml中的<bean id="logQuery"节点)




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值