activeMQ主要的几类主从集群部署方式

1、activeMQ主要的几类部署方式比较mysql

一、默认的单机部署(kahadb)sql

activeMQ的默认存储的单机方式,以本地kahadb文件的方式存储,因此性能指标彻底依赖本地磁盘IO,不能提供高可用。数据库

 

二、基于zookeeper的主从(levelDB Master/Slave安全

5.9.0新推出的主从实现,基于zookeeper来选举出一个master,其余节点自动做为slave实时同步消息。服务器

由于有实时同步数据的slave的存在,master不用担忧数据丢失,因此leveldb会优先采用内存存储消息,异步同步到磁盘。因此该方式的activeMQ读写性能都最好,特别是写性能可以媲美非持久化消息。session

优势:oracle

实现高可用和数据安全异步

性能较好tcp

缺点:ide

由于选举机制要超过半数,因此最少须要3台节点,才能实现高可用。

 

三、基于共享数据库的主从(Shared JDBC Master/Slave)

能够基于postgres、mysql、oracle等经常使用数据库。

每一个节点启动都会争抢数据库锁,从而保证master的惟一性,其余节点做为备份,一直等待数据库锁的释放。

由于全部消息读写,其实都是数据库操做,activeMQ节点自己压力很小,性能彻底取决于数据库性能。

优势:

实现高可用和数据安全

简单灵活,2台节点就能够实现高可用

缺点:

稳定性依赖数据库

性能依赖数据库

比较得知,采用基于zookeeper的主从(levelDB Master/Slave)模式

采用这种模式的关键配置地方在与每一个activemq.xml文件中下面位置:

下面的配置在三个实例上保持一致,除了标红部分,主要修改配置文件conf/activemq.xml。 

    (1)broker-name的统一 
        将broker标签的brokerName属性设置为统一的值,我将这个值设置为“test”,只有三个实例的brokerName一致,zookeeper才能识别它们属于同一个集群 

    (2)persistenceAdapter的配置 
        persistenceAdapter设置持久化方式,主要有三种方式:kahaDB(默认方式)、数据库持久化、levelDB(v5.9.0提供支持) 
        本文采用levelDB来进行持久化,并使用zookeeper实现集群的高可用,配置以下: 
        首先注释掉原来kahaDB的持久化方式,而后配置levelDB+zookeeper的持久化方式。

把<persistenceAdapter>标签中 kahaDB 改为 LevelDB 方式,具体以下:

更改前:

wKioL1haV8fA23UEAAAhp8pwwXc702.png-wh_50

更改后:

wKiom1haV3aiiCyGAABSA7FdB0Y971.png-wh_50spacer.gif

<broker brokerName="test" ... > 
... 
<!-- 
<persistenceAdapter> 
    <kahaDB directory="${activemq.data}/kahadb"/> 
</persistenceAdapter> 
--> 注释掉这部分的持久化方式。配置增长下面的持久化方式:
<persistenceAdapter> 
    <replicatedLevelDB 
      directory="${activemq.data}/leveldb" 
      replicas="3" 
      bind="tcp://0.0.0.0:0" 
      zkAddress="192.168.2.161:2181,192.168.2.145:2181,192.168.2.146:2181" 
      hostname="192.168.2.161" 
      sync="local_disk" 
      zkPath="/activemq/leveldb-stores" 
      /> 
</persistenceAdapter> 
... 
</broker> 


注意:
replicas是主从服务器的总数量
hostname配置成当前服务器的物理ip便可。
zkAddress是所有zookeeper集群的全部ip及端口。
bind是绑定本机网卡的物理ip,想省事就写0.0.0.0 表示本机所有网卡

而后启动三台服务器activemq就能够了.

以事务方式提交
Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
生成完后最后再加上一句
session.commit();
测试效率每秒10000条左右,彻底知足设计要求。

本文出自http://blog.csdn.net/ziele_008/article/details/51883012

相关文章
相关标签/搜索