ZooKeeper實作的MasterSlave實作方式,是對ActiveMQ進行高可用的一種有效的解決方案,高可用的原理:使用ZooKeeper(叢集)注冊所有的ActiveMQBroker。隻有其中的一個Broker可以對外提供服務(也就是Master節點),其他的Broker處于待機狀态,被視為Slave。如果Master因故障而不能提供服務,則利用ZooKeeper的内部選舉機制會從Slave中選舉出一個Broker充當Master節點,繼續對外提供服務。
Zookeeper方案
主機IP | 消息端口 | 通信端口 | 節點目錄/opt/下 |
192.168.136.175 | 2181 | 2888:3888 | zookeeper |
192.168.136.176 | 2181 | 2888:3888 | zookeeper |
192.168.136.178 | 2181 | 2888:3888 | zookeeper |
ActiveMQ方案
主機IP | 叢集通信端口 | 消息端口 | 控制台端口 | 節點目錄/opt/下 |
192.168.136.175 | 62621 | 51511 | 8161 | activemq-cluster/node |
192.168.136.176 | 62621 | 51511 | 8162 | activemq-cluster/node |
192.168.136.178 | 62621 | 51511 | 8163 | activemq-cluster/node |
1. 下載下傳 zookeeper 和 activemq
http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/
http://activemq.apache.org/activemq-5156-release.html
2. 執行 tar -zxvf zookeeper-3.4.13.tar.gz -C /opt/ 解壓 zookeeper 到 /opt 目錄下。
執行 mv zookeeper-3.4.13/ zookeeper 改名 為 zookeeper
然後到 /etc/profile 下配置 zookeeper 環境變量。
3. 修改 /opt/zookeeper/conf/zoo_sample.cfg 檔案配置,執行 mv zoo_sample.cfg zoo.cfg 修改名稱。
配置完之後,回到上級目錄, mkdir data 建立 data 檔案夾。然後建立一個名為 myid 的檔案,檔案内容為0。另外兩台伺服器為1和2。
啟動 zookeeper
另外兩台機子,應該就是follower
3. 建立 /opt/activemq-cluster 檔案夾,然後執行 tar -zxvf apache-activemq-5.15.6-bin.tar.gz -C /opt/activemq-cluster/ 。接在 cd /opt/activemq-cluster,在 activemq-cluster 目錄下執行 mv apache-activemq-5.15.6 node 把檔案夾名字改為 node。
4. 修改node/conf/jetty.xml 檔案配置,端口改為8161,8162,8163。預設8161,有一個機器不需要修改。
5. 修改activemq.xml檔案配置
第一處修改:brokerName="activemq-cluster"
第二處修改:先注釋掉擴充卡中的kahadb,然後下入一下配置
<replicatedLevelDB directory="${activemq.data}/leveldb" replicas="3" bind="tcp://0.0.0.0:62621" zkAddress="192.168.136.175:2181,192.168.136.176:2181,192.168.136.175:2181" hostname="activemq-1" zkPath="/activemq/leveldb-stores">
第三處修改:消息端口改為 51511
搭建完畢!!!
啟動 activemq,在bin目錄下執行 ./activemq start
執行 zkCli.sh 進入 zookeeper 。可以看見有三個挂載點。
或者用 ZooInspector 工具也可以看到
java 代碼中 URL 為:
failover:(tcp://192.168.136.175:51511,tcp://192.168.136.176:51512,tcp://192.168.136.178:51513)?Randomize=false
搭建中遇到的問題:
防火牆需要關閉,不然zk叢集的時候連接配接不上。關閉防火牆:service iptables stop