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

相關文章
相關標籤/搜索