一、搭建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="CentOS001" 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="CentOS002"
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="CentOS003" zkPath="/activemq/leveldb-stores"/> </persistenceAdapter>
三、啟動集群
1、操作之前保證關閉防火牆,並且windows和Linux相互之間是可以ping通的
2、先啟動ZooKeeper集群,因為只有zookeeper集群啟動之后,你才能將ActiveMQ服務在zookeeper上注冊
3、然后再分別啟動三台ActiveMQ服務器
四、測試
使用ZooInspector工具來查看具體的內容,可以參考https://www.cnblogs.com/xiaomaomao/p/13810168.html這篇博客來了解關於ZooInspector的使用
通過查看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依舊可以提供服務,如果半數的服務器是正常的情況下,整個集群就能正常工作,這樣就保證了高可用
至此,整個集群的搭建就完成了.