ActiveMQ集羣

ZooKeeper+ActiveMQ能夠實現主從模式和集羣模式apache

 

1、主從模式

  Master-Slave主從模式是一種高可用解決方案,在Zookeeper中註冊若干ActiveMQ Broker,其中只有一個Broker提供對外服務(Master),其餘Broker處於待機狀態(Slave)。當Master出現故障致使宕機時,經過Zookeeper內部的選舉機制,選舉出一臺Slave替代Master繼續對外服務。服務器

首先搭建zookeeper集羣

1,安裝zookeeper並建立data數據目錄tcp

2,建立conf/zoo.cfg設置data數據目錄、端口和server測試

1 dataDir=/opt/zookeeper/apache-zookeeper-3.5.5-1/data
2 clientPort=2181
3 server.1=192.168.50.30:2881:3881
4 server.2=192.168.50.30:2882:3882
5 server.3=192.168.50.30:2883:3883

3,複製出三個zookeeperurl

4,在每一個Zookeeper 應用內的data 目錄中增長文件myid內部定義每一個服務的編號. 編號要求爲數字,是正整數能夠使用回聲命名快速定義myid文件spa

1 echo "1" > /opt/zookeeper/apache-zookeeper-3.5.5-1/data/myid
2 echo "2" > /opt/zookeeper/apache-zookeeper-3.5.5-2/data/myid
3 echo "3" > /opt/zookeeper/apache-zookeeper-3.5.5-3/data/myid

5,啓動zookeepercode

1 /opt/zookeeper/apache-zookeeper-3.5.5-1/bin/zkServer.sh start
2 /opt/zookeeper/apache-zookeeper-3.5.5-2/bin/zkServer.sh start
3 /opt/zookeeper/apache-zookeeper-3.5.5-3/bin/zkServer.sh start

6,測試zookeeper集羣server

  鏈接一個zookeeper,實際上就鏈接上了整個zookeeper集羣。xml

1 /opt/zookeeper/apache-zookeeper-3.5.5-1/bin/zkCli.sh -server 192.168.50.30:2181

而後配置ActiveMQ主從模式

 1,複製三份ActiveMQ,配置conf/jetty.xml中端口爲816一、816二、8163blog

2,修改conf/activemq.xml 文件。

修改broker 標籤屬性信息,統一全部節點的broker 命名。

1 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="mq-cluster" dataDirectory="${activemq.data}">

修改broker 標籤中子標籤persistenceAdapter 相關內容。

replicas 屬性表明當前主從模型中的節點數量。按需配置。

bind 屬性中的端口爲主從實例之間的通信端口。表明當前實例對外開放端口是什麼,三個實例分別使用6262六、6262七、62628 端口。

zkAddress 屬性表明ZooKeeper 安裝位置,安裝具體狀況設置。

zkPath 是ActiveMQ 主從信息保存到ZooKeeper 中的什麼目錄內。

hostname 爲ActiveMQ 實例安裝Linux 的主機名,能夠在/etc/hosts 配置文件中設置。設置格式爲:IP 主機名。如: 127.0.0.1 mq-server

 1 <persistenceAdapter>
 2     <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
 3     <replicatedLevelDB 
 4         directory="${activemq.data}/levelDB"
 5         replicas="3"
 6         bind="tcp://0.0.0.0:62626"
 7         zkAddress="192.168.50.30:2181,192.168.50.30:2182,192.168.50.30:2183"
 8         zkPath="/activemq/leveldb-stores"
 9         hostname="guangheV30"
10     />
11 </persistenceAdapter>

修改ActiveMQ 對外提供的服務端口。原默認端口爲61616。當前環境使用的端口爲:6161六、6161七、61618,修改conf/activemq.xml 配置文件。修改broker 標籤中子標籤transportConnectors 中tcp那一項的相關配置。

3,啓動activeMQ主從

1 /opt/activemq/apache-activemq-5.15.9-1/bin/activemq start
2 /opt/activemq/apache-activemq-5.15.9-2/bin/activemq start
3 /opt/activemq/apache-activemq-5.15.9-3/bin/activemq start

4,查看activeMQ主從

進入zookeeper,${zkHome}/bin/zkCli.sh

鏈接成功後,能夠使用命令‘ls’查看ZooKeeper 中的目錄結構
如:
  ls /
  ls /activemq/leveldb-stores
找到對應的內容後,能夠使用命令‘get’查看ZooKeeper 中的數據內容
  get /activemq/leveldb-stores/00000000000

  其中主節點的elected 及address 屬性必定有數據。從節點則數據爲‘null’

  該zookeeper+activemq的集羣Master Slave部署方案,可以提供(3-1)/2的容錯率,即3臺服務器容許宕機一臺,而不影響整個集羣的對外提供服務:

編寫代碼鏈接時使用failover策略:

1 String url = failover:(tcp://192.168.50.30:61616,tcp://192.168.50.30:61617,tcp://192.168.50.30:61618)?initialReconnectDelay=1000

2、集羣模式

   準備多份主從模型。在全部的ActiveMQ節點中的conf/activemq.xml中增長以下配置(每一個主從模型中的networkCoonnector都指向另外一個主從模型)

1 <networkConnectors>
2     <networkConnector uri="static://(tcp://ip:port,tcp://ip:port)" duplex="false"></networkConnector>
3 </networkConnectors>

  注意配置順序,Networks相關配置必須在持久化相關配置以前

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://activemq.apache.org/schema/core">
 3     <broker xmlns="http://activemq.apache.org/schema/core" brokerName="mq-cluster" dataDirectory="${activemq.data}" >
 4         <networkConnectors>
 5             <networkConnector uri=" static://(tcp://ip:port,tcp://ip:port)"/>
 6         </networkConnectors>
 7         <persistenceAdapter>
 8             < replicatedLevelDB directory = "xxx"/>
 9         </persistenceAdapter>
10     </broker>
11 </beans>

主從模型:1-192.168.50.30   主從模型2-192.168.50.31

在主從模型1的全部節點activemq.xml配置文件中添加標籤:

1 <networkConnectors>
2     <networkConnector uri="static://(tcp://192.168.50.31:61616,tcp://192.168.50.31:61617)"/>
3 </networkConnectors>

在組從模型2的全部節點activemq.xml中配置文件添加標籤:

1 <networkConnectors>
2     <networkConnector uri="static://(tcp://192.168.50.30:61616,tcp://192.168.50.30:61617)"/>
3 </networkConnectors>

相關文章
相關標籤/搜索