1. 程式人生 > 實用技巧 >Zookeeper+ActiveMQ搭建叢集實現高可用

Zookeeper+ActiveMQ搭建叢集實現高可用

一、搭建Zookeeper叢集

  Zookeeper搭建方案

伺服器編號 伺服器IP地址 LF通訊埠 LF選舉埠 客戶端埠
1 192.168.229.131 2888 3888 2180
2 192.168.229.134 2888 3888 2180
3 192.168.229.133 2888 3888 2180

  

具體的Zookeeper叢集搭建可以參考這篇部落格https://www.cnblogs.com/xiaomaomao/p/13800523.html

二、搭建ActiveMQ叢集

  1、ActiveMQ搭建方案

伺服器IP地址 ActiveMQ後臺斷後
ActiveMQ管理控制檯埠
192.168.229.131 61617 8161
192.168.229.134 61618 8161
192.168.229.133 61619 8161

  2、拷貝壓縮包到 /otp 目錄下,之所以放置在 /opt 目錄下,是為了備份一個壓縮包,方便以後再用

// 複製壓縮包到安裝目錄下,我這裡的安裝目錄是自己在 /usr/local/下新建的一個activemq目錄
cp -r apache-activemq-5.15.5-bin.tar.gz /usr/local/activemq/

  3、解壓縮到當前目錄

  4、進入解壓後的檔案目錄

  5、修改activemq.xml配置檔案,使用效能比較好的LevelDB替換掉預設的KahaDB

配置項 說明
directory 持久化資料存放地址(預設的情況下${activemq.data}下是沒有leveldb目錄的,要自己建立)
replicas 叢集中節點的個數(由於我們是三臺伺服器搭建的ActiveMQ,所以replicas的數量是3)
bind 叢集通訊埠
zkAddress ZooKeeper叢集地址
hostname 當前伺服器的IP地址,如果叢集啟動的時候報未知主機名錯誤,那麼就需要配置主機名到IP地址的對映關係
zkPath ZooKeeper資料掛載點(叢集啟動成功之後,會在zookeeper下自動註冊該節點)

  

  配置主機名到IP地址的對映關係具體可以參考這篇博文https://www.cnblogs.com/xiaomaomao/p/13810251.html

  三臺ActiveMQ伺服器的配置如下:

  192.168.229.131伺服器

<!-- 三臺伺服器的brokerName一定要保持一致 -->
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="activemq-zookeeper-test" dataDirectory="${activemq.data}">

<persistenceAdapter>
	<!--註釋掉或者刪除掉kahaDB-->
	<!--kahaDB directory="${activemq.data}/kahadb"/ -->
        <replicatedLevelDB
        directory="${activemq.data}/leveldb"
        replicas="3"
        bind="tcp://0.0.0.0:61617"
        zkAddress="192.168.229.131:2180,192.168.229.134:2180,192.168.229.133:2180"
        hostname="192.168.229.131"    
        zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>

  192.168.229.134伺服器

<!-- 三臺伺服器的brokerName一定要保持一致 -->
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="activemq-zookeeper-test" dataDirectory="${activemq.data}">

<replicatedLevelDB
<!--kahaDB directory="${activemq.data}/kahadb"/ -->
        directory="${activemq.data}/leveldb"
        replicas="3"
        bind="tcp://0.0.0.0:61618"
        zkAddress="192.168.229.131:2180,192.168.229.134:2180,192.168.229.133:2180"
        hostname="192.168.229.134"    
        zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>

  192.168.229.133伺服器

<!-- 三臺伺服器的brokerName一定要保持一致 -->
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="activemq-zookeeper-test" dataDirectory="${activemq.data}">

<replicatedLevelDB
		<!--kahaDB directory="${activemq.data}/kahadb"/ -->
        directory="${activemq.data}/leveldb"
        replicas="3"
        bind="tcp://0.0.0.0:61619"
        zkAddress="192.168.229.131:2180,192.168.229.134:2180,192.168.229.133:2180"
        hostname="192.168.229.133"    
        zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>

 

三、啟動叢集

  1、操作之前保證關閉防火牆,並且windows和Linux相互之間是可以ping通的

  2、先啟動ZooKeeper叢集,因為只有zookeeper叢集啟動之後,你才能將ActiveMQ服務在zookeeper上註冊  

  3、然後再分別啟動三臺ActiveMQ伺服器

 

四、測試

  使用ZooInspector工具來檢視具體的內容,關於Zoolnspector工具的使用,可以參考這篇博文https://www.cnblogs.com/xiaomaomao/p/13810168.html

  通過檢視Zookeeper的節點資訊情況,可以得出192.168.229.131被選舉成了主機,那麼使用該主機去登入ActiveMQ的客戶端,可以登入成功

  使用命令 ./activemq stop 關閉 192.168.229.131這臺主機,檢視ZooInspector,發現zookeeper通過選舉機制推舉出了新的主機 192.168.229.134,使用該主機訪問ActiveMQ的控制檯,發現可以登入ActiveMQ的管理控制檯

  重新啟動192.168.229.131這臺伺服器,保證三臺伺服器同時線上,然後手動down掉一臺slaver,發現ActiveMQ依舊可以提供服務,如果半數的伺服器是正常的情況下,整個叢集就能正常工作,這樣就保證了高可用

  至此,整個叢集的搭建就完成了.