ZooKeeper+ActiveMQ能夠實現主從模式和集羣模式apache
Master-Slave主從模式是一種高可用解決方案,在Zookeeper中註冊若干ActiveMQ Broker,其中只有一個Broker提供對外服務(Master),其餘Broker處於待機狀態(Slave)。當Master出現故障致使宕機時,經過Zookeeper內部的選舉機制,選舉出一臺Slave替代Master繼續對外服務。服務器
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
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
準備多份主從模型。在全部的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>