ActiveMq集群搭建

一、ActiveMq

1.一、ACtiveMq下载,安装

一、activemq官网:http://activemq.apache.org/html

二、解压压缩包:mysql

1.二、Master-Slave模式(主从)

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

1)、Shared File System Master Slave

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

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

修改conf/activema.xml服务器

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

后启动mq日志:负载均衡

能够看到后启动mq属于salve。tcp

打开mq控制面板spa

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

刷新页面,服务依然能够继续提供。

 

2)、JDBC  Master  Slave

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

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

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

 

3)、Replicated LevelDB Store

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

修改activemq.xml

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

1.三、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

activemq-2:activemq.xml

acvivemq-1: data/activemq.log

acvivemq-2: data/activemq.log

能够看到已经创建网络链接。

2)、Dynamic Broker-Cluster

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

activemq-1与activemq-2:activemq.xml

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

 

1.四、Master-Slave与Broker-Cluster相结合的部署方式

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

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提供服务。

相关文章
相关标签/搜索