MQ學習系列:html
使用ZooKeeper實現的Master-Slave實現方式,是對ActiveMQ進行高可用的一種有效的解決方案。java
高可用的原理:使用ZooKeeper(集羣)註冊全部的ActiveMQ Broker。只有其中的一個Broker能夠對外提供服務(也就是Master節點),其餘的Broker處於待機狀態,被視爲Slave。若是Master因故障不能提供服務,則利用ZooKeeper的內部選舉機制從 Slave中選舉出一個Broker充當Master節點,繼續對外提供服務。經過ZooKeeper+ActiveMQ實現的集羣,能夠有效的排除單點故障引發的服務中斷。linux
(1)準備三臺虛擬機(沒有真實環境只能用虛擬機了),IP分別爲:算法
關於VM虛擬機下安裝centos7而且克隆出多個系統:這裏 (來源網絡|VMware 14自動分配ip,後半部分能夠不看)。apache
(2)安裝JDKvim
CentOS 7上會默認安裝了OpenJDK,默認版本是1.7centos
[n@localhost Desktop]$ java -version java version "1.7.0_51" OpenJDK Runtime Environment (rhel-2.4.5.5.el7-x86_64 u51-b31) OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode) [n@localhost Desktop]$
固然也可安裝其餘版本的JDK而不是用默認的JDK,安裝步驟以下:bash
a. 上傳並解壓 [這裏推薦WinSCP鏈接虛擬機]服務器
tar -zxvf jdk-8u201-linux-x64.tar.gz -C /usr/local/java
網絡
b. 刪除壓縮包[理由:浪費空間]
rm jdk-8u201-linux-x64.tar.gz
c. 編輯配置文件配置環境變量
vim /etc/profile 添加以下內容:JAVA_HOME根據實際目錄來 export JAVA_HOME=/usr/local/java/jdk1.8.0_201/ export PATH=$PATH:$JAVA_HOME/bin export JRE_HOME="$JAVA_HOME/jre" export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/rt.jar
d. 從新加載配置或者重啓虛擬機
source /etc/profile
sudo shutdown -r now
c. 更該Linux默認安裝的OpenJDK爲本身安裝的JDK[以下命令]
[root@localhost ~]# java -version java version "1.7.0_51" OpenJDK Runtime Environment (rhel-2.4.5.5.el7-x86_64 u51-b31) OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode) [root@localhost ~]# cd /usr/bin [root@localhost bin]# ln -s -f /usr/local/java/jdk1.8.0_201/jre/bin/java [root@localhost bin]# ln -s -f /usr/local/java/jdk1.8.0_201/bin/javac [root@localhost bin]# rm -f /usr/bin/java [root@localhost bin]# rm -f /usr/bin/javac [root@localhost bin]# rm -f /etc/alternatives/java [root@localhost bin]# rm -f /etc/alternatives/javac [root@localhost bin]# java -version -bash: /usr/bin/java: No such file or directory [root@localhost bin]# cd .. [root@localhost usr]# source /etc/profile [root@localhost usr]# java -version java version "1.8.0_201" Java(TM) SE Runtime Environment (build 1.8.0_201-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode) [root@localhost usr]#
(3)安裝zookeeper和activeMQ
Linux上 zookeeper安裝過程:
a. 將下載的zookeeper安裝包分別上傳到三臺虛擬機上
b. 解壓壓縮包
tar -zxvf zookeeper-3.4.13.tar.gz -C /usr/local
c. 將/usr/local下的zookeeper-3.4.13重命名
mv zookeeper-3.4.13 zookeeper
d. 在zookeeper目錄下建立兩個目錄data和logs,分別存放數據和日誌
mkdir data
mkdir logs
f. 複製zookeeper/conf目錄下的zoo_sample.cfg文件並重命名zoo.cfg
cp zoo_sample.cfg zoo.cfg
Linux上 activeMQ安裝過程:
a. 將下載的activemq安裝包分別上傳到三臺虛擬機上
b. 解壓壓縮包
tar -zxvf apache-activemq-5.15.8-bin.tar.gz -C /usr/local/
c. 重命名
mv apache-activemq-5.15.8 activemq
三臺虛擬機按照如上過程安裝便可,事實上,咱們能夠只安裝一臺而後克隆幾臺虛擬機,哈哈哈。
第一步:在/usr/local/zookeeper/data下建立myid文件,文件內容爲1。同理,其餘虛擬機中也建立myid文件,內容分別爲2和3。
第二步:修改/usr/local/zookeeper/conf/zoo.cfg文件,加入如下內容。
dataDir=/usr/local/zookeeper/data/ dataLogDir=/usr/local/zookeeper/logs server.1=192.168.121.128:2888:3888 server.2=192.168.121.131:2888:3888 server.3=192.168.121.132:2888:3888
第三步:分別啓動三臺zookeeper(須要關閉防火牆)
service iptables stop
centOS7 查看防火牆 systemctl list-unit-files | grep firewalld systemctl list-unit-files | grep iptables
/usr/local/zookeeper/bin/zkServer.sh start
經過/usr/local/zookeeper/bin/zkServer.sh status
咱們能夠看到其中一臺虛擬機zookeeper的mode爲leader剩下兩臺爲Mode: follower
第四步:修改/usr/local/activemq/conf目錄下的activemq.xml
修改brokerName='activemq-cluster'
將文件持久化配置器改成:
<persistenceAdapter> <replicatedLevelDB directory="${activemq.data}/leveldb" replicas="3" bind="tcp://0.0.0.0:0" zkAddress="192.168.121.128:2181,192.168.121.131:2181,192.168.121.132:2181" hostname="192.168.121.128" zkPath="/activemq/leveldb-stores"/> </persistenceAdapter>
第五步:啓動activemq
./bin/activemq start
訪問三臺服務器的ActiveMQ的儀表盤發現:只用其中的一臺可使用;停掉這臺可使用的,剩下兩臺中會經過選舉算法再選出一個主節點提供服務。