1. 簡介
這裡是在linux虛拟機上搭建的zookeeper叢集+基于levelDB的activeMQ叢集,實際隻有一台機
2.叢集搭建步驟
2.1 搭建zookeeper叢集
2.1.1 準備zookeeper叢集主機與端口
主機 | 用戶端端口 | 叢集通信端口 | 叢集選舉端口 |
127.0.0.1 | 2182 | 2887 | 3887 |
127.0.0.1 | 2183 | 2888 | 3888 |
127.0.0.1 | 2184 | 2889 | 3889 |
2.1.2 下載下傳zookeeper安裝包
下載下傳位址:https://downloads.apache.org/zookeeper
從版本3.5.5開始,帶有bin名稱的包才是我們想要的下載下傳可以直接使用的,裡面有編譯後的二進制的包,而之前的普通的tar.gz的包裡面隻是源碼的包無法直接使用,如apache-zookeeper-3.6.2-bin.tar.gz
2.1.3 上傳并解壓apache-zookeeper-3.6.2-bin.tar.gz到虛拟機上,複制2份,共3個節點
我這裡是把安裝包上傳到/opt/lsl/zookeeper這裡,然後建立data目錄
2.1.4 找到conf目錄,将zoo_simple.cfg複制一份重命名為zoo.cfg,然後修改配置檔案
節點一zoo.cfg配置:
#zk的資料目錄
dataDir=/opt/lsl/zookeeper/data/2182
dataLogDir=/opt/lsl/zookeeper/log/2182
#zk端口
clientPort=2182
#zk叢集配置
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
節點二zoo.cfg配置:
#zk的資料目錄
dataDir=/opt/lsl/zookeeper/data/2183
dataLogDir=/opt/lsl/zookeeper/log/2183
#zk端口
clientPort=2183
#zk叢集配置
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
節點三zoo.cfg配置:
#zk的資料目錄
dataDir=/opt/lsl/zookeeper/data/2184
dataLogDir=/opt/lsl/zookeeper/log/2184
#zk端口
clientPort=2184
#zk叢集配置
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
2.1.5 在3個zk資料目錄下面建立myid檔案,内容分别是:1、2、3,需要與zoo.cfg配置檔案中的server.x對應
2.1.6 分别啟動zk叢集各節點
如果zookeeper啟動報錯:JAVA_HOME is not set and java could not be found in PATH:如果已經安裝了jdk,那麼可能是zookeeper/bin/zkEnv.sh中沒有讀到環境變量,可以在該檔案中直接寫入JAVA_HOME環境變量的絕對路徑
vim zkEnv.sh
#在bin/zkEnv.sh中寫入jdk的絕對路徑
JAVA_HOME="/usr/java/jdk1.8.0_131"
2.2 搭建activeMQ叢集
2.2.1 準備activeMQ叢集主機與端口
主機 | 叢集端口(conf/activemq.xml) | 消息端口(conf/activemq.xml) | 管理控制台端口(conf/jetty.xml) |
127.0.0.1 | 63631 | 61617 | 8162 |
127.0.0.1 | 63632 | 61618 | 8163 |
127.0.0.1 | 63633 | 61619 | 8164 |
2.2.2 下載下傳activeMQ安裝包
官網下載下傳位址:http://activemq.apache.org/components/classic/download
windows版本:apache-activemq-xxx-bin.zip
linux版本:apache-activemq-xxx-bin.tar.gz
如這裡下載下傳的apache-activemq-5.16.1-bin.tar.gz
2.2.3 上傳并解壓apache-activemq-5.16.1-bin.tar.gz到虛拟機上,複制2份,共3個節點
2.2.4 更改節點一conf/jetty.xml配置
1.更改ActiveMQ管理控制台端口
<property name="host" value="0.0.0.0"/>
<property name="port" value="8162"/>
2.2.5 更改節點一conf/activemq.xml配置
1.将brokerName改為統一的名稱,如zookeeper-activemq-test,(注:三個節點的brokerName要一緻)
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="zookeeper-activemq-test" dataDirectory="${activemq.data}">
2.使用性能比較好的LevelDB替換掉預設的KahaDB
<persistenceAdapter>
<!--注釋掉或者删除掉kahaDB-->
<!--kahaDB directory="${activemq.data}/kahadb"/ -->
<replicatedLevelDB
directory="${activemq.data}/leveldb"
replicas="3"
bind="tcp://0.0.0.0:63631"
zkAddress="127.0.0.1:2182,127.0.0.1:2183,127.0.0.1:2184"
hostname="cxj"
zkPath="/activemq/leveldb-stores"/>
</persistenceAdapter>
配置項說明:
directory #持久化資料存放位址(預設的情況下${activemq.data}下是沒有leveldb目錄的,要自己建立)
replicas #叢集中節點的個數(由于我們是三台伺服器搭建的ActiveMQ,是以replicas的數量是3)
bind #叢集通信端口
zkAddress #ZooKeeper叢集位址
hostname #目前伺服器的IP位址,如果叢集啟動的時候報未知主機名錯誤,那麼就需要配置主機名到IP位址的映射關系,
zkPath #ZooKeeper資料挂載點(叢集啟動成功之後,會在zookeeper下自動注冊該節點)
(如果需要)linux虛拟機修改主機名:
#檢視主機名:
hostname
#修改主機名:
hostnamectl set-hostname 主機名
#配置主機名到IP的映射:在/etc/hosts檔案末尾加上:ip位址 主機名
vim /etc/hosts
3.更改ActiveMQ背景端口
<transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
2.2.6 同理更改其他2個節點的配置檔案的叢集端口、消息端口、管理控制台端口
2.2.7 啟動ActiveMQ叢集所有節點
#啟動後在zookeeper安裝目錄下測試activemq是否注冊到zk中,用zkCli.sh -server ip:端口登入zk,
zkCli.sh -server ip位址:端口
#用ls /檢視是否連接配接上zk叢集)
ls /
如果activemq叢集啟動報錯:java.io.IOException: com/google/common/util/concurrent/internal/InternalFutureFailureAccess
解決方法一:
清除所有的資料,也就是删除每個節點的上面配置的 replicatedLevelDB 節點中 directory 屬性指向的目錄 ,即删除每個節點下的 data/leveldb 目錄
解決方法二(推薦):
将failureaccess-1.0.1.jar包放到ActiveMQ每個節點的lib目錄下,然後重新開機每個節點,下載下傳位址:https://mvnrepository.com/artifact/com.google.guava/failureaccess