天天看點

Activemq+Zookeeper叢集

簡介

  activemq基于master-slave叢集實作方式有多種,主要為目錄共享和資料庫共享,但從activemq5.9.0版本開始,增加了基于zookeeper+leveldb的實作方式。借助于zookeeper,是以至少需要(replicas/2)+1個activemq服務存活才能保證叢集的正常運作,進而避免單點故障,缺點是沒有負載均衡的作用。

準備

10.10.2.20 zookeeper1 activemq1

10.10.2.21 zookeeper2 activemq2

10.10.2.22 zookeeper3 activemq3

安裝與配置

  • 一.zookeeper安裝配置

以下操作是在其中一台上,其他兩台按照如下配置即可。

1.添加hosts

vim /etc/hosts
 amq1
 amq2
 amq3
           

2.配置java環境

vim /etc/profile
    ##JAVA###
    export JAVA_HOME=/usr/local/jdk1._71
    export JRE_HOME=/usr/local/jdk1._71/jre
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    source /etc/profile
           

3.安裝zookeeper

cd /usr/local/src
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-/zookeeper-.tar.gz
tar -zxvf zookeeper-.tar.gz -C /usr/local
           

4.配置zk的環境變量

vim /etc/profile
#zookeeper
ZOOKEEPER_HOME=/usr/local/zookeeper-.
export PATH=$PATH:$ZOOKEEPER_HOME/bin

source /etc/profile
           

5.修改zookeeper配置檔案

#建立zookeeper的資料目錄和日志目錄
mkdir -p /data/zookeeper/zk1/{data,log}
cd /usr/local/zookeeper-/conf
cp zoo_sample.cfg zoo.cfg
vim /etc/zoo.cfg
tickTime=
initLimit=
syncLimit=
dataDir=/data/zookeeper/zk1/data
dataLogDir=/data/zookeeper/zk1/log
clientPort=
server=amq1::
server=amq2::
server=amq3::
           

6.在dataDir下建立myid檔案,對應節點id

#在20上 
cd /data/zookeeper/zk1/data
echo  > myid
#在21上 
cd /data/zookeeper/zk2/data
echo  > myid
#在22上 
cd /data/zookeeper/zk3/data
echo  > myid
           

7.啟動zookeeper服務

依次在3台伺服器上啟動zk服務

/usr/local/zookeeper-/bin/zkServer.sh start
           

注:注:在你所在的目前目錄下會生成一個zookeeper.out的日志檔案,裡面記錄了啟動過程中的詳細資訊;由于叢集沒有全部資訊,會報“myid 2或myid 3 未啟動”的資訊,當叢集全部啟動後就會正常,我們可以忽略。

8.檢視zookeeper所有節點的狀态

#20
/usr/local/zookeeper-/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-/bin/../conf/zoo.cfg
Mode: leader
#21
/usr/local/zookeeper-/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-/bin/../conf/zoo.cfg
Mode: follower
#22
/usr/local/zookeeper-/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-/bin/../conf/zoo.cfg
Mode: follower
           
  • 二.activemq安裝配置

activemq5.12需要jre1.7(1.6 for version <=5.10.0)

1.安裝

[root@test ~]# cd /usr/local/src
[root@test src]# wget http://mirrors.hust.edu.cn/apache/activemq/5.12.1/apache-activemq-5.12.1-bin.tar.gz
[root@test src]# tar -zxvf apache-activemq-5.12.1-bin.tar.gz 
[root@test src]# mv apache-activemq-5.12.1 /usr/local/
           

2.配置

在3台伺服器上做同樣配置,需注意個别參數配置。

[root@test apache-activemq-.]# vim conf/activemq.xml
 <persistenceAdapter>
      <replicatedLevelDB 
         directory="${activemq.data}/leveldb"
         replicas="3"
         bind="tcp://0.0.0.0:0"
         zkAddress="10.10.2.20:2181,10.10.2.21:2181,10.10.2.22:2181" 
         hostname="10.10.2.20"
         sync="local_disk"
         zkPath="/activemq/leveldb-stores"
      />
 </persistenceAdapter>
           

其中:

directory : 存儲資料的路徑

replicas : 叢集中的節點數【(replicas/2)+1公式表示叢集中至少要正常運作的服務數量】,3台叢集那麼允許1台當機, 另外兩台要正常運作

bind : 當這個節點成為Master, 它會綁定配置好的位址和端口來履行主從複制協定,預設端口為61616

zkAddress : ZooKeeper的ip和port, 如果是叢集, 則用逗号隔開(這裡作為簡單示例ZooKeeper配置為單點, 這樣已經适用于大多數環境了, 叢集也就多幾個配置)

zkPassword : 當連接配接到ZooKeeper伺服器時用的密碼,此處由于沒有密碼

hostname : 本機ip

sync : 在認為消息被消費完成前, 同步資訊所存貯的政策, 如果有多種政策用逗号隔開, ActiveMQ會選擇較強的政策(local_mem, local_disk則肯定選擇存貯在本地硬碟)

zkPath : ZooKeeper選舉資訊交換的存貯路徑,啟動服務後actimvemq會到zookeeper上注冊生成此路徑。

注意: 在某些情況下,可以調整下zkSessionTimeout參數,以免網絡波動或其他情況導緻不必要的重新選舉。

zkSessionTimeout參數

3.啟動服務

依次在3台伺服器上啟動服務,會啟動activemq的8161和61616兩個端口;由于zookeeper機制,并不是3台伺服器都會啟動這兩個端口,zk確定隻有一台會啟動這兩個端口對外提供服務。

/usr/local/apache-activemq-/bin/activemq start
           

總結

  zookeeper+activemq的配置方案,能夠提供(3-1)/2的容錯率,也就是3台伺服器允許當機一台,而不影響整個叢集的對外提供服務。

  用戶端連接配接使用failover方案:

mq.broker.url=failover:(tcp://192.168.1.191:61616,tcp://192.168.1.192:61616,tcp://192.168.1.193:61616)?initialReconnectDelay=1000

關掉其中任何一台,經過測試能夠正常提供服務,用戶端會自動切換連接配接,進而避免單點故障。