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