1. 程式人生 > >rocketMQ安裝部署

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部署完成。



原文:https://blog.csdn.net/tubunanhai/article/details/81738416