zookeeper+ActiveMQ集羣實現高可用

MQ學習系列:html

  1. 消息隊列概念與認知
  2. ActiveMQ Topic消息重發
  3. ActiveMQ Topic 持久化訂閱
  4. zookeeper+ActiveMQ集羣實現高可用

使用ZooKeeper實現的Master-Slave實現方式,是對ActiveMQ進行高可用的一種有效的解決方案。java

高可用的原理:使用ZooKeeper(集羣)註冊全部的ActiveMQ Broker。只有其中的一個Broker能夠對外提供服務(也就是Master節點),其餘的Broker處於待機狀態,被視爲Slave。若是Master因故障不能提供服務,則利用ZooKeeper的內部選舉機制從 Slave中選舉出一個Broker充當Master節點,繼續對外提供服務。經過ZooKeeper+ActiveMQ實現的集羣,能夠有效的排除單點故障引發的服務中斷。linux

一、環境準備

(1)準備三臺虛擬機(沒有真實環境只能用虛擬機了),IP分別爲:算法

  • 192.168.121.128
  • 192.168.121.131
  • 192.168.121.132

關於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的儀表盤發現:只用其中的一臺可使用;停掉這臺可使用的,剩下兩臺中會經過選舉算法再選出一個主節點提供服務。

相關文章
相關標籤/搜索