rocketMQ安裝部署詳細解析

櫛風沐雨,砥礪同行!你好,我是關惜寒!

近來研究了Apache開源項目rocketMQ(原爲阿里項目),並在兩臺linux服務器上完成了部署,現在整理下,供大家參考學習。

一、簡介rocketMQ

RocektMQ是阿里巴巴在2012年開源的一個純java、分佈式、隊列模型的第三代消息中間件,不僅在傳統高頻交易鏈路有着低延遲的出色表現,在實時計算等大數據領域也有着不錯的吞吐。

2016年11月11號,雙十一大促見證了RocketMQ低延遲存儲架構的成功試水,99.996%的延遲落在了10ms以內,極個別由於GC引發的停頓在50ms以內,其高性能、低延時和高可靠的特性承載了近年來雙十一17萬筆/秒的交易峯值,在整個生產鏈路上都有着穩定和出色的表現。其在同年捐贈給Apache後正式進入孵化期。並於2017年9月RocketMQ正式從Apache社區正式畢業,成爲Apache頂級項目。

二、相關術語 

1. Producer

消息生產者,負責產生消息,一般由業務系統負責產生消息。可

Producer Group

一類Producer的集合名稱,這類Producer通常發送一類消息,且發送邏輯一致。

2. Consumer

消息消費者,負責消費消息,一般是後臺系統負責異步消費。

Push Consumer

Consumer的一種,應用通常向Consumer對象註冊一個Listener接口,一旦收到消息,Consumer對象立 刻回調Listener接口方法。

Pull Consumer

Consumer的一種,應用通常主動調用Consumer的拉消息方法從Broker拉消息,主動權由應用控制。

Consumer Group

一類Consumer的集合名稱,這類Consumer通常消費一類消息,且消費邏輯一致。

3. Broker

消息中轉角色,負責存儲消息,轉發消息,一般也稱爲Server。

Master

Broker中的主節點。

Slave

Broker中的副節點。

4. Nameserver

專爲RocketMQ設計的輕量級名稱服務。集羣中Nameserver互相獨立,彼此沒有通信關係,單臺Nameserver掛掉,不影響其他Nameserver,即使全部掛掉,也不影響業務系統使用。而且Nameserver不會有頻繁的讀寫,所以性能開銷非常小,穩定性很高。

5. 廣播消費

一條消息被多個Consumer消費,即使這些Consumer屬於同一個Consumer Group,消息也會被Consumer Group中的每個Consumer都消費一次,廣播消費中的Consumer Group概念可以認爲在消息劃分方面無意義。

6. 集羣消費

一個Consumer Group中的Consumer實例平均分攤消費消息。例如某個Topic有9條消息,其中一個Consumer Group有3個實例(可能是3個進程,或者3臺機器),那麼每個實例只消費其中的3條消息。

7. 順序消息

消費消息的順序要同發送消息的順序一致,在RocketMQ中,主要指的是局部順序,即一類消息爲滿足順序性,必須Producer單線程順序發送,且發送到同一個隊列,這樣Consumer就可以按照Producer發送的順序去消費消息。

8. 普通順序消息

順序消息的一種,正常情況下可以保證完全的順序消息,但是一旦發生通信異常,Broker重啓,由於隊列總數發生變化,哈希取模後定位的隊列會變化,產生短暫的消息順序不一致。如果業務能容忍在集羣異常情況(如某個Broker宕機或者重啓)下,消息短暫的亂序,使用普通順序方式比較合適。

9. 嚴格順序消息

順序消息的一種,無論正常異常情況都能保證順序,但是犧牲了分佈式Failover特性,即Broker集羣中只要有一臺機器不可用,則整個集羣都不可用,服務可用性大大降低。如果服務器部署爲同步雙寫模式,此缺陷可通過備機自動切換爲主避免,不過仍然會存在幾分鐘的服務不可用。

10. Message Queue

在RocketMQ中,所有消息隊列都是持久化,長度無限的數據結構,所謂長度無限是指隊列中的每個存儲單元都是定長,訪問其中的存儲單元使用Offset來訪問,offset爲java long類型,64位,理論上在100年內不會溢出,所以認爲是長度無限,另外隊列中只保存最近幾天的數據,之前的數據會按照過期時間來刪除。也可以認爲Message Queue是一個長度無限的數組,offset就是下標。

11. 異步複製

消息寫入master節點,再由master節點異步複製到slave節點,類似mysql中的master-slave機制。

12. 同步雙寫

消息同時寫入master節點和slave節點。

13. 異步刷盤

Broker的一種持久化策略,消息寫入pagecache後,直接返回。由異步線程負責將pagecache寫入硬盤。

14. 同步刷盤

Broker的一種持久化策略,消息寫入pagecache後,由同步線程將pagecache寫入硬盤後,再返回。

三、RocketMQ集羣部署模式

RocketMQ作爲消息中間件,其主要功能爲消息的Publish/Subscribe。而Broker擔任的消息轉發和存儲功能,其部署方式有很多種:

1. 單Master

優點:除了配置簡單沒什麼優點。

缺點:不可靠,該機器重啓或宕機,將導致整個服務不可用。

2. 多Master

優點:配置簡單,性能最高。

缺點:可能會有少量消息丟失,單臺機器重啓或宕機期間,該機器下未被消費的消息在機器恢復前不可訂閱,影響消息實時性。

3. 異步多Master多Slave

每個Master配一個Slave,有多對Master-Slave,集羣採用異步複製方式,主備有短暫消息延遲,毫秒級。

優點:性能同多Master幾乎一樣,實時性高,主備間切換對應用透明,不需人工干預。

缺點:Master宕機或磁盤損壞時會有少量消息丟失。

4. 同步多Master多Slave

每個Master配一個Slave,有多對Master-Slave,集羣採用同步雙寫方式,主備都寫成功,嚮應用返回成功。

優點:服務可用性與數據可用性非常高。

缺點:性能比異步集羣略低,當前版本主宕備不能自動切換爲主。

四、RocketMQ集羣特性分析

RocketMQ部署架構圖如下所示:

標題分佈式RocketMQ部署架構圖(作者關惜寒)

 

Nameserver

Nameserver的開發旨在輕量級,多臺Nameserver互相獨立,彼此間互不通信,這樣的設計,保證了單臺Nameserver宕機,不影響Nameserver。nameserver不會有頻繁的讀寫,所以性能開銷非常小,穩定性很高。

Broker與Nameserver關係

連接:

每個Broker與系統中所有的Nameserver保持長連接。

心跳間隔:

每隔30秒(此時間無法更改)向所有Nameserver發送心跳,心跳包含了自身的topic配置信息。

心跳超時:

Nameserver每隔10秒鐘(此時間無法更改),掃描所有還存活的Broker連接,若某個連接2分鐘內(當前時間與最後更新時間差值超過2分鐘,此時間無法更改)沒有發送心跳數據,則斷開連接。

斷開:

一旦連接斷開,Nameserver會立即更新topic與隊列的對應關係,但不會通知生產者和消費者。

負載均衡:

一個topic分佈在多個Broker上,一個broker可以配置多個topic,它們是多對多的關係。如果某個topic消息量很大,應該給它多配置幾個隊列,並且儘量多分佈在不同broker上,減輕某個broker的壓力。topic消息量都比較均勻的情況下,如果某個broker上的隊列越多,則該broker壓力越大。

可用性:

由於消息分佈在各個broker上,一旦某個broker宕機,則該broker上的消息讀寫都會受到影響。所以rocketmq提供了master/slave的結構,salve定時從master同步數據,如果master宕機,則slave提供消費服務,但是不能寫入消息,此過程對應用透明,由rocketmq內部解決。

兩個關鍵點:

1. 一旦某個broker master宕機,生產者和消費者多久才能發現?受限於rocketmq的網絡連接機制,默認情況下,最多需要30秒,但這個時間可由應用設定參數來縮短時間。這個時間段內,發往該broker的消息都是失敗的,而且該broker的消息無法消費,因爲此時消費者不知道該broker已經掛掉。

2. 消費者得到master宕機通知後,轉向slave消費,但是slave不能保證master的消息100%都同步過來了,因此會有少量的消息丟失。但是消息最終不會丟的,一旦master恢復,未同步過去的消息會被消費掉。

可靠性:

所有發往broker的消息,有同步刷盤和異步刷盤機制,總的來說,可靠性非常高。

同步刷盤時,消息寫入物理文件纔會返回成功,因此非常可靠。

異步刷盤時,只有機器宕機,纔會產生消息丟失,broker掛掉可能會發生,但是機器宕機崩潰是很少發生的,除非突然斷電。

Consumer

與Nameserver關係

連接:

單個消費者和一臺nameserver保持長連接。定時查詢topic配置信息,如果該nameserver掛掉,消費者會自動連接下一個nameserver,直到有可用連接爲止,並能自動重連。

心跳:

與nameserver沒有心跳。

輪詢時間:

默認情況下,消費者每隔30秒從nameserver獲取所有topic的最新隊列情況,這意味着某個broker如果宕機,客戶端最多要30秒才能感知。該時間由DefaultMQPushConsumer的pollNameServerInteval參數決定,可手動配置。

與Broker關係

連接:

單個消費者和該消費者關聯的所有broker保持長連接。

心跳:

默認情況下,消費者每隔30秒向所有broker發送心跳,該時間由DefaultMQPushConsumer的heartbeatBrokerInterval參數決定,可手動配置。broker每隔10秒鐘(此時間無法更改),掃描所有還存活的連接,若某個連接2分鐘內(當前時間與最後更新時間差值超過2分鐘,此時間無法更改)沒有發送心跳數據,則關閉連接,並向該消費者分組的所有消費者發出通知,分組內消費者重新分配隊列繼續消費。

斷開:

消費者掛掉;心跳超時導致broker主動關閉連接。

動作:

一旦連接斷開,broker會立即感知到,並向該消費者分組的所有消費者發出通知,分組內消費者重新分配隊列繼續消費。

負載均衡:

集羣消費模式下,一個消費者集羣多臺機器共同消費一個topic的多個隊列,一個隊列只會被一個消費者消費。如果某個消費者掛掉,分組內其它消費者會接替掛掉的消費者繼續消費。

消費機制

本地隊列:

消費者不間斷的從broker拉取消息,消息拉取到本地隊列,然後本地消費線程消費本地消息隊列,只是一個異步過程,拉取線程不會等待本地消費線程,這種模式實時性非常高。對消費者對本地隊列有一個保護,因此本地消息隊列不能無限大,否則可能會佔用大量內存,本地隊列大小由DefaultMQPushConsumer的pullThresholdForQueue屬性控制,默認1000,可手動設置。

輪詢間隔:

消息拉取線程拉取間隔時間由DefaultMQPushConsumer的pullInterval屬性控制,默認爲0,可手動設置。

消息消費數量:

監聽器每次接受本地隊列的消息數量是由參數DefaultMQPushConsumer的consumeMessageBatchMaxSize屬性控制,默認爲1,可手動設置。

消費進度存儲:

每隔一段時間將各個隊列的消費進度存儲到對應的broker上,該時間由DefaultMQPushConsumer的persistConsumerOffsetInterval屬性控制,默認爲5秒,可手動設置。

Producer

與Nameserver關係

連接:

單個生產者者和一臺nameserver保持長連接,定時查詢topic配置信息,如果該nameserver掛掉,生產者會自動連接下一個nameserver,直到有可用連接爲止,並能自動重連。

心跳:

與nameserver沒有心跳。

與Broker關係

連接:

單個生產者和該生產者關聯的所有broker保持長連接。

心跳:

默認情況下,生產者每隔30秒向所有broker發送心跳,該時間由DefaultMQProducer的heartbeatBrokerInterval參數決定,可手動配置。broker每隔10秒鐘(此時間無法更改),掃描所有還存活的連接,若某個連接2分鐘內(當前時間與最後更新時間差值超過2分鐘,此時間無法更改)沒有發送心跳數據,則關閉連接。

斷開:

移除Broker上的生產者信息。

負載均衡:

生產者時間沒有關係,每個生產者向隊列輪流發送消息。

以上論述了RocketMQ各組件特性和關係,除此之外,在允許可自動創建Topic的配置下,Producer負責創建Topic消息和發送消息,發送消息支持三種方式,異步、同步和onway方式。就總體的消息傳輸層面來說,RocketMQ有集羣模式和廣播模式,默認是集羣模式,集羣模式以其原生的Consumer Group(消費組)實現了負載均衡,廣播模式下,Consumer Group下的每個Consumer實例則要消費全部的消息數據。就業務適用層面來說,rocketMQ可以根據業務需求,實現Order Message(訂單消息)、Broadcasting(廣播消息)、Scheduled Message(延遲消息)、Batch(同Topic批量消息發送)、Filter(基本消息過濾和高級消息過濾)、OpenMessaging(流式消息發送)等。

五、RocketMQ分佈式部署實踐案例詳述

此處就RocketMQ的多Master多Slave的模式在Linux服務器部署案例進行詳細的說明,如系統部署結構圖所示。

1. 本次部署環境

Linux服務器192.168.162.235、192.168.162.236兩臺(下文均簡稱235、236),詳細部署環境示意表如下:

服務器配置表(作者關惜寒)

IP地址

用戶名

部署角色

模式

192.168.162.235

rocketMQ

Nameserver1,Brokerserver1

Master1

192.168.162.235

rocketMQ

Nameserver1,Brokerserver1

Master2-Slave

192.168.162.236

rocketMQ

Nameserver2,Brokerserver2

Master2

192.168.162.236

rocketMQ

Nameserver2,Brokerserver2

Master1-Slave

系統部署結構圖(作者關惜寒)

 

2. 編輯Hosts

分別修改235 和236 的hosts 文件

sudo vim /etc/hosts
      IP                NAME
192.168.162.235      nameserver1
192.168.162.235      master1
192.168.162.235      master1-slave1
192.168.162.236      nameserver2
192.168.162.236      master2
192.168.162.236      master2-slave2

注:修改hosts 文件需獲得sudo 權限,本機用戶是rocketMQ非root用戶, 故申請了堡壘機權限(即獲得root權限)。

3. 下載官方源碼

下載官方RocketMQ壓縮包,下載地址:http://rocketmq.apache.org/release_notes/release-notes-4.2.0/,並選擇Download the 4.2.0 release 選項的 rocketmq-all-4.2.0-bin-release.zip下載。(其他如source爲需要自己編譯的版本)

4. 上傳到Linux並解壓

分別上傳rocketmq-all-4.2.0-bin-release.zip到235和236服務器的/home/rocketMQ/ZHF/rocketMQ-2m2s/目錄下:

cd /home/rocketMQ/ZHF/rocketMQ-2m2s/
tar –zxvf rocketmq-all-4.2.0-bin-release.zip

5.  創建持久化存儲目錄

Master目錄設置:

mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store
mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store/commitlog
mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store/consumequeue
mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store/index

Slave目錄設置:

mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store-s
mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/commitlog
mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/consumequeue
mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/index

6. RocketMQ配置文件

235服務器設置:

sudo vim /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-a.properties
sudo vim /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-b-s.properties

236服務器設置:

sudo vim /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-b.properties
sudo vim /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-a-s.properties

broker-a.properties文件配置

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#brokerClusterName=DefaultCluster
#brokerName=broker-a
#brokerId=0
#deleteWhen=04
#fileReservedTime=48
#brokerRole=ASYNC_MASTER
#flushDiskType=ASYNC_FLUSH

#所屬集羣名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=nameserver1:9876;nameserver2:9876
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啓,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啓,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽端口
listenPort=10911
haListenPort=10912
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=18
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/home/rocketMQ/ZHF/rocketMQ-2m2s/store
#commitLog 存儲路徑
storePathCommitLog=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/consumequeue
#消息索引存儲路徑
storePathIndex=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/checkpoint
#abort 文件存儲路徑
abortFile=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步複製Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
#強制指定本機IP,需要根據每臺機器進行修改。官方介紹可爲空,系統默認自動識別,但多網卡時IP地址可能讀取錯誤
brokerIP1=192.168.162.235

broker-a-s.properties文件配置

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#brokerClusterName=DefaultCluster
#brokerName=broker-b
#brokerId=1
#deleteWhen=04
#fileReservedTime=48
#brokerRole=SLAVE
#flushDiskType=ASYNC_FLUSH

#所屬集羣名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=nameserver1:9876;nameserver2:9876
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啓,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啓,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽端口
listenPort=10923
haListenPort=10924
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=18
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s
#commitLog 存儲路徑
storePathCommitLog=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/consumequeue
#消息索引存儲路徑
storePathIndex=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/index
#checkpoint 文件存儲路徑
storeCheckpoint=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/checkpoint
#abort 文件存儲路徑
abortFile=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushConsumeQueueLeastPages=2#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步複製Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
#強制指定本機IP,需要根據每臺機器進行修改。官方介紹可爲空,系統默認自動識別,但多網卡時IP地址可能讀取錯誤
brokerIP1=192.168.162.235

broker-b.properties文件配置

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#brokerClusterName=DefaultCluster
#brokerName=broker-b
#brokerId=0
#deleteWhen=04
#fileReservedTime=48
#brokerRole=ASYNC_MASTER
#flushDiskType=ASYNC_FLUSH
#所屬集羣名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=nameserver1:9876;nameserver2:9876
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啓,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啓,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽端口
listenPort=10911
haListenPort=10912
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=18
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/home/rocketMQ/ZHF/rocketMQ-2m2s/store
#commitLog 存儲路徑
storePathCommitLog=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/consumequeue
#消息索引存儲路徑
storePathIndex=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/checkpoint
#abort 文件存儲路徑
abortFile=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步複製Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
#強制指定本機IP,需要根據每臺機器進行修改。官方介紹可爲空,系統默認自動識別,但多網卡時IP地址可能讀取錯誤
brokerIP1=192.168.162.236

broker-b-s.properties文件配置

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#brokerClusterName=DefaultCluster
#brokerName=broker-b
#brokerId=1
#deleteWhen=04
#fileReservedTime=48
#brokerRole=SLAVE
#flushDiskType=ASYNC_FLUSH

#所屬集羣名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=nameserver1:9876;nameserver2:9876
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啓,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啓,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽端口
listenPort=10923
haListenPort=10924
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=18
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s
#commitLog 存儲路徑
storePathCommitLog=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/consumequeue
#消息索引存儲路徑
storePathIndex=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/index
#checkpoint 文件存儲路徑
storeCheckpoint=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/checkpoint
#abort 文件存儲路徑
abortFile=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步複製Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
#強制指定本機IP,需要根據每臺機器進行修改。官方介紹可爲空,系統默認自動識別,但多網卡時IP地址可能讀取錯誤
brokerIP1=192.168.162.236

7. 啓動參數設置

RocketMQ啓動文件位於/home/rocketMQ/ZHF/rocketMQ-2m2s/bin/目錄下,Linux中nameserver啓動文件爲:mqnamesrv,broker啓動文件爲:mqbroker,mqnamesrv和mqbroker啓動文件分別調用了runserver.sh和runbroker.sh文件,這兩個文件分別設置了nameserver和broker的啓動內存,目前內存啓動參數分別爲nameserver啓動內存4G,最大內存4G,新生代2G,broker啓動內存8G,最大內存8G,新生代4G。

8. 端口及防火牆設置

RokcetMQ啓動默認使用3個端口9875,10911,10912,三個端口分別代表nameserver服務器端口,broker端口,broker HA端口。需注意的是在多Master多Slave模式下10911和10912是Master的使用端口,但Slave端口的設置與Master的端口不同,具體端口約束爲:Slave - Master > 2,否則可能導致同一臺服務器無法同時啓動Master和Slave。

如果服務器啓動了防火牆,爲了端口不被屏蔽,需將Master和Slave對應端口加入到iptables表以開放對應端口號,添加完成後重啓防火牆。命令行開放端口操作如下:

分別打開235和236終端,在root用戶下執行命令:

開放端口:

/sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 9876 -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10911 -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10912 -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10923 -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10924 -j ACCEPT

保存:

/etc/rc.d/init.d/iptables save

重啓:

/etc/init.d/iptables restart

查看端口開放情況:

/sbin/iptables -L -n

9. 啓動Nameserver

分別啓動235、236的Nameserver

cd /home/rocketMQ/ZHF/rocketMQ-2m2s/bin
nohup sh mqnamesrv &

10.啓動Broker

235上Master啓動:

nohup sh mqbroker -c /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-a.properties 

236上Master啓動:

nohup sh mqbroker -c /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-b.properties

235上對應236Master的Slave啓動:

nohup sh mqbroker -c /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-b-s.properti

236上對應235Master的Slave啓動:

nohup sh mqbroker -c /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-a-s.properti

至此,Nameserver、Broker啓動完成,可以用jobs命令查看當前運行進程,如下是服務端相關shutdown,即在bin目錄下:

sh mqshutdown namesrv
sh mqshutdown broker

六、RocketMQ監控平臺部署

Apache版的RocketMQ管理界面部署工具可以從github上下載源碼,地址:https://github.com/apache/rocketmq-externals,部署流程如下:

1. 修改配置文件,關聯rocketMQ集羣到管理界面

首先解壓並進入解壓後rockemq-externals-master目錄rocketmq-externals-master/rocketmq-externals-master/rocketmq-console/src/main/resources,修改目錄下application.properties配置文件內容如下圖:

標配置文件修改(作者關惜寒)

2. 編譯rocketmq-console

mvn clean package -Dmaven.test.skip=true

編譯需用maven命令進行編譯,如下圖,顯示BIUD SUCCESS,則編譯成功,成功後會在rocketmq-externals-master/rocketmq-console/target目錄下產生一個rocketmq-console-ng-1.0.0.jar文件。

編譯成功(作者關惜寒)

 

3.  將編譯好的rocketmq-console-ng-0.0.jar包上傳linux服務器

這裏上傳服務器地址爲192.168.162.235,路徑爲:/home/rocketMQ/ZHF/

4. 運行jar包

java -jar target/rocketmq-console-ng-1.0.0.jar

運行顯示下圖則啓動成功:

啓動成功(作者關惜寒)

5. 訪問管理界面

瀏覽器輸入http://192.168.162.235:8080/回車顯示監控界面如下:

監控界面(作者關惜寒)

至此,RocketMQ部署完成。

撰寫不易,轉載請註明出處!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章