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