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依舊可以提供服務,如果半數的伺服器是正常的情況下,整個叢集就能正常工作,這樣就保證了高可用
至此,整個叢集的搭建就完成了.