ActiveMQ Master Slave配置以及示例
2014-07-30 12:04
405 查看
ActiveMQ MasterSlave集群的三种方式
如下:Master/Slave集群类型 | 要求 | 好处 | 需要考虑的因素 |
Share File System Master Slave | 共享文件系统如SAN | 可运行任意多个salves,自动回复老的master | 需要共享文件系统 |
JDBC Master Slave | 公用数据库 | 同上 | 需要一个公用数据库,较慢因为不能使用高性能日志 |
Replicated LevelDB Store | Zookeeper | 同上 + 非常快 | 需要Zookeeper服务器 |
如果你正在使用纯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:3890zoo2.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"节点)
相关文章推荐
- activemq cluster masterslave 配置
- ActiveMQ学习笔记(7)——ActiveMQ Master Slave集群配置
- ActiveMQ Master Slave集群配置
- ActiveMQ Master/Slave 集群配置
- ActiveMQ学习笔记(7)——ActiveMQ Master Slave集群配置
- JBoss AS7中的新概念-Domain[master配置domain.xml和host.xml和自己的管理员账号以及用于slave连接验证的账号,slave只需要配置host.xml配置文件即可]
- mysql 主从配置以及 slave I/O 启动失败解决 Fatal error: The slave I/O thread stops because master and slave have
- Shared File System Master Slave 全配置以及测试
- activemq jdbc-master/slave集群搭建和客户端消费说明
- RocketMQ多master多SLAVE配置
- Apache ActiveMQ Cluster Master and Slave with JDBC
- MySql数据库主(master)从(slave)配置以及原理
- 搭建ActiveMQ Master/Slave(LevelDB+Zookeeper)
- Shared File System Master Slave 全配置以及测试
- ActiveMq master/slave
- 解读mysql主从配置及其原理分析(Master-Slave)
- MySQL数据库主从(Master/Slave)同步安装与配置总结
- bind 9 安装 配置 master slave .. 不是很难,但其中也遇到些问题。。耗费了点时间解决
- mysql5.5 master-slave(Replication)配置
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)