ActiveMq集群搭建

1、ActiveMq

1.1、ACtiveMq下载,安装

1、activemq官网:http://activemq.apache.org/

104619_CPch_1416405.png

104622_VfOL_1416405.png

104630_d5Pl_1416405.png

2、解压压缩包:

104716_vuvf_1416405.png

1.2、Master-Slave模式(主从)

同时只有一个mq对外提供服务,当master挂掉的情况,slave会自动顶上成为master

104719_NKAF_1416405.png

1)、Shared File System Master Slave

         使用ActiveMq自带默认数据库kahaDB,底层是文件系统,各个slave去竞争获取共享文件的锁(资源一定要共享:以下主从模式一样),谁抢到了就是谁做master,提供服务,其他做备份,当master挂掉,存活的slave再去竞争锁,成为新一代master。

a、新建,修改数据存放位置

104724_fSPO_1416405.png

修改conf/activema.xml

104727_UKCT_1416405.png

b、将activemq复制两份,启动。

后启动mq日志:

104734_PltB_1416405.png

可以看到后启动mq属于salve。

打开mq控制面板

104736_iXrm_1416405.png

当我们把第一台mq关闭,第二台获取锁提供服务

104742_9nOu_1416405.png

刷新页面,服务依然可以继续提供。

 

2)、JDBC  Master  Slave

         该模式与以上模式相同,将kahaDB文件系统换成数据库共享。

修改 activemq.xml,修改模式,添加数据源

104747_axBv_1416405.png

104749_qcHt_1416405.png

将mysql驱动,以及连接池jar包添加到lib目录下

104753_7OyQ_1416405.png

 

3)、Replicated LevelDB Store

   使用zookeeper管理选举一个节点作为master (注:mq5.9以后版本才能使用)

修改activemq.xml

104758_VoFO_1416405.png

我这里zookeeper采用集群模式,单机模式直接直接填写 127.0.0.1:2181.

1.3、Broker-Cluster(负载均衡)

   Broker-Cluster部署方式中,各个broker通过网络互相连接,并共享queue,提供了2中部署方式:
static Broker-Cluster和Dynamic Broker-Cluster

1)、static Broker-Cluster

只要我们知道了想要使用的broker的地址,就可以使用static配置方式。

Static connector

用来创建网络中多个broker的静态配置。协议使用组合URI,即URI中包含其他URI。格式如下:
static:(uri1,uri2,uri3,...) ?key=value

XML中配置示例:

1.  <networkConnectors>  

2.  <networkConnector name="local network"  

3.  uri="static://(tcp://remotehost1:61616,tcp://remotehost2:61616)"/>  

4.  </networkConnectors>  

分别在两台服务器上配置activemq-1,activemq-2

activemq-1:activemq.xml

104810_tbyF_1416405.png

activemq-2:activemq.xml

104813_qFZL_1416405.png

acvivemq-1: data/activemq.log

104816_AQ8n_1416405.png

acvivemq-2: data/activemq.log

104819_Gx4L_1416405.png

可以看到已经建立网络连接。

2)、Dynamic Broker-Cluster

Dynamic Discovery集群方式在配置ActiveMQ实例时,不需要知道所有其它实例的URI地址

activemq-1与activemq-2:activemq.xml

104824_KvX6_1416405.png

官网配置说明:http://activemq.apache.org/networks-of-brokers.html

 

1.4、Master-Slave与Broker-Cluster相结合的部署方式

可以看到Master-Slave的部署方式虽然解决了高可用的问题,但不支持负载均衡,Broker-Cluster解决了负载均衡,但当其中一个Broker突然宕掉的话,那么存在于该Broker上处于Pending状态的message将会丢失,无法达到高可用的目的。

104830_mU83_1416405.png

1)、部署的配置修改

这里以Broker-A + Broker-B建立cluster,Broker-C作为Broker-B的slave为例:

1)首先在Broker-A节点中添加networkConnector节点:

<networkConnectors>

<networkConnector   uri="masterslave:(tcp://0.0.0.0:61617,tcp:// 0.0.0.0:61618)" duplex="false"/>

</networkConnectors>

2)修改Broker-A节点中的服务提供端口为61616:

<transportConnectors>

<transportConnectorname="openwire"uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

</transportConnectors>

3)在Broker-B节点中添加networkConnector节点:

<networkConnectors>

<networkConnector   uri="static:(tcp:// 0.0.0.0:61616)"duplex="false"/>

</networkConnectors>

4)修改Broker-B节点中的服务提供端口为61617:

<transportConnectors>

<transportConnectorname="openwire"uri="tcp://0.0.0.0:61617?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

</transportConnectors>

5)修改Broker-B节点中的持久化方式:

<persistenceAdapter>

<kahaDB directory="/localhost/kahadb"/>

</persistenceAdapter>

6)在Broker-C节点中添加networkConnector节点:

<networkConnectors>

<networkConnector   uri="static:(tcp:// 0.0.0.0:61616)"duplex="false"/>

</networkConnectors>

7)修改Broker-C节点中的服务提供端口为61618:

<transportConnectors>

<transportConnectorname="openwire"uri="tcp://0.0.0.0:61618?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

</transportConnectors>

8)修改Broker-C节点中的持久化方式:

<persistenceAdapter>

<kahaDB directory="/localhost/kahadb"/>

</persistenceAdapter>

9)分别启动broker-A、broker-B、broker-C,因为是broker-B先启动,所以“/localhost/kahadb”目录被lock住,broker-C将一直处于挂起状态,当人为停掉broker-B之后,broker-C将获取目录“/localhost/kahadb”的控制权,重新与broker-A组成cluster提供服务。

 

转载于:https://my.oschina.net/u/1416405/blog/821188

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值