• 设备
    • 今日
    • 0

    ActiveMQ Master Slave配置以及示例

    ActiveMQ Master Slave配置以及示例

    ActiveMQ MasterSlave集群的三种方式

    如下:


    Master/Slave集群类型 要求 好处 需要考虑的因素
    Share File System Master Slave 共享文件系统如SAN 可运行任意多个salves,自动回复老的master 需要共享文件系统
    JDBC Master Slave 公用数据库 同上 需要一个公用数据库,较慢因为不能使用高性能日志
    Replicated LevelDB Store Zookeeper 同上 + 非常快 需要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>节点配置成如下方式即可:

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


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


    1. 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节点更改如下:

    1.         <persistenceAdapter>  
    2.             <span style="white-space:pre">    </span><!-- default -->  
    3. <span style="white-space:pre">    </span>        <!--<kahaDB directory="${activemq.data}/kahadb"/>-->  
    4.               
    5.         <!-- share file system -->  
    6.         <!--<kahaDB directory="E:/activeMQ/sharedb"/>-->  
    7.               
    8.         <!-- jdbc -->  
    9.         <jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#oracle-ds"/>  
    10.         </persistenceAdapter>  

    添加节点:

    1. <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
    2.     <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>  
    3.     <property name="url" value="jdbc:oracle:thin:@localhost:1521:mqtest"/>  
    4.     <property name="username" value="activemq"/>  
    5.     <property name="password" value="123456"/>  
    6.     <property name="poolPreparedStatements" value="true"/>  
    7. </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内容如下:
    [plain] view plain copy
     print?
    1. tickTime=2000  
    2. initLimit=10  
    3. syncLimit=5  
    4. dataDir=/usr/local/zookeeper/zk1  
    5. clientPort=2181  
    6. server.1=127.0.0.1:2888:3888  
    7. server.2=127.0.0.1:2889:3889  
    8. 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
    执行如下命令
    [plain] view plain copy
     print?
    1. echo 1 > /usr/local/zookeeper/zk1/myid  
    2. echo 2 > /usr/local/zookeeper/zk2/myid  
    3. echo 3 > /usr/local/zookeeper/zk3/myid  
    此处1,2,3需要与zoo*.cfg配置中server.x的x相对应
    然后启动三个zookeeper
    [plain] view plain copy
     print?
    1. [zookeeper_install_path]/bin/zkServer.sh start zoo1.cfg  
    2. [zookeeper_install_path]/bin/zkServer.sh start zoo2.cfg  
    3. [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>的节点配置如下:
    [html] view plain copy
     print?
    1.      <persistenceAdapter>  
    2. <!-- default -->  
    3.          <span style="white-space:pre">       </span><!--<kahaDB directory="${activemq.data}/kahadb"/>-->  
    4.   
    5. <!-- share file system -->  
    6. <!--<kahaDB directory="E:/activeMQ/sharedb"/>-->  
    7.   
    8. <!-- jdbc -->  
    9. <!--<jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#oracle-ds"/>-->             
    10. <replicatedLevelDB  
    11.   directory="${activemq.data}/leveldb"  
    12.   replicas="3"  
    13.   bind="tcp://127.0.0.1:0"  
    14.   zkSessionTmeout="5s"  
    15.   zkAddress="192.168.9.102:2181,192.168.9.102:2182,192.168.9.102:2183"                  
    16.   zkPath="/activemq/leveldb-stores"       
    17.   sync="local_disk"                         
    18.   />           
    19.      </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"节点)

    来自:PC 广东省广州市
    上一篇: 双显示器操作方法
    您可能还喜欢这些:

    亲,沙发正空着,还不快来抢?

    评论审核已开启:即评论经审核才能正常显示! 记住我的个人信息 回复后邮件通知我