本文同步發表于我的微信公衆号,掃一掃文章底部的二維碼或在微信搜尋 chaodev 即可關注。
文章目錄
-
-
- 1、RocketMQ簡介
- 2、單機安裝部署
-
- 2.1 系統環境
- 2.2 下載下傳解壓
- 2.3 修改初始記憶體
- 2.4 啟動服務
- 2.5 發送接收消息測試
- 2.6 關閉服務
- 3、叢集搭建
-
- 3.1 配置叢集
- 3.2 防火牆配置
- 3.3 啟動叢集
-
- 3.3.1 啟動 NameServer 叢集
- 3.3.2 啟動 Master
- 3.3.3 啟動 Slave
- 4、圖形化管理控制台
- 5、爬坑之路
-
- 5.1 啟動服務無反應
- 5.2 啟動broker服務提示如下錯誤
-
1、RocketMQ簡介
MQ(消息隊列)在軟體架構中是經常被使用的元件,特别是在分布式系統中,我們常見的MQ産品有 RabbitMQ、RocketMQ、Kafka等等,本文将對 RocketMQ 搭建高可用叢集進行詳解。
RocketMQ是使用Java語言開發的一款MQ産品。經過數年阿裡雙11的考驗,性能與穩定性非常高。其沒有遵循任何常見的MQ協定,而是使用自研協定。
官網:http://rocketmq.apache.org/
RocketMQ由四部分構成:Producer、Consumer、Broker和NameServer。
2、單機安裝部署
2.1 系統環境
系統要求64位,jdk版本1.8及以上。
2.2 下載下傳解壓
下載下傳位址:http://archive.apache.org/dist/rocketmq/
我這裡選擇4.9.0版本
解壓
unzip rocketmq-all-4.9.0-bin-release.zip
進入解壓目錄
2.3 修改初始記憶體
此步驟根據實際情況,因為初始記憶體預設設定比較大,某些記憶體比較小的機器不修改可能啟動不起來。
修改 runserver.sh
vim bin/runserver.sh
修改 runbroker.sh
vim bin/runbroker.sh
注:可以按照原始比例調整,比如 8g、8g、4g可對應改成2g、2g、1g
2.4 啟動服務
啟動順序:NameServer->Broker
啟動 NameServer:
檢視日志,預設目錄在 ~/logs/rocketmqlogs/ 下:
tail -f ~/logs/rocketmqlogs/namesrv.log
啟動 Broker:
檢視日志
tail -f ~/logs/rocketmqlogs/broker.log
2.5 發送接收消息測試
官方文檔上為我們提供了一個測試例子,在發送和接收之前需要先告訴用戶端 NameServer 的位址,最簡單可以使用環境變量NAMESRV_ADDR
export NAMESRV_ADDR=localhost:9876
發送消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
接收消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
2.6 關閉服務
關閉 Broker
sh bin/mqshutdown broker
關閉 NameServer
sh bin/mqshutdown namesrv
3、叢集搭建
本次搭模組化式為雙主雙從異步複制,部署節點如下
IP | 主機名 | 功能 | Broker角色 |
---|---|---|---|
192.168.1.210 | rocketmqOS1 | NameServer+Broker | Master1 |
192.168.1.211 | rocketmqOS2 | NameServer+Broker | Slave1 |
192.168.1.212 | rocketmqOS3 | NameServer+Broker | Master2 |
192.168.1.213 | rocketmqOS4 | NameServer+Broker | Slave2 |
rocketmqOS2 為 rocketmqOS1 的從節點,rocketmqOS4 為 rocketmqOS3 的從節點。
3.1 配置叢集
在 conf 目錄下,rocketMQ 預設為我們提供了幾個模闆
從上至下分别是 兩主兩從異步複制(2m-2s-async)、兩主兩從同步複制(2m-2s-sync)、兩主無從(2m-noslave)。
本次搭建使用兩主兩從異步複制,選用第一個模闆即可,進入 conf/2m-2s-async 目錄,如下
四個配置檔案分别是 主1、主1對應的從、主2、主2對應的從,對應到我們叢集就是 Master1、Slave1、Master2、Slave2。
各節點配置檔案内容修改如下:
- rocketmqOS1 Master1節點:broker-a.properties
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.210:9876;192.168.1.211:9876;192.168.1.212:9876;192.168.1.213:9876
- rocketmqOS2 Slave1節點:broker-a-s.properties
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.210:9876;192.168.1.211:9876;192.168.1.212:9876;192.168.1.213:9876
- rocketmqOS3 Master2節點:broker-b.properties
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.210:9876;192.168.1.211:9876;192.168.1.212:9876;192.168.1.213:9876
- rocketmqOS4 Slave2節點:broker-b-s.properties
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.210:9876;192.168.1.211:9876;192.168.1.212:9876;192.168.1.213:9876
注:每個節點隻用到了其中一個配置檔案,其餘可删可不删,啟動時指定是哪個配置檔案就行。
配置檔案各參數說明如下:
brokerId為0是Master,非0是Slave。
deleteWhen=04代表删除過期檔案的時間為淩晨4點。
fileReservedTime=48 指定未發生更新的消息存儲檔案保留時間為48小時,48小時後過期,将被删除。
brokerRole=ASYNC_MASTER指定目前broker為異步複制Master。
flushDiskType=ASYNC_FLUSH指定刷盤政策為異步刷盤。
namesrvAddr指定NameServer的位址。
3.2 防火牆配置
在 rocketMQ 中 NameServer 服務端口預設為 9876、broker 與 producer、consumer 通訊預設端口為10911,Master 與 Slave 通訊預設端口為10912,還有個10909端口是 rocketmq-console 控制台VIP通道需要用到。
開啟4個節點的9876、10911、10912、10909端口
firewall-cmd --add-port=9876/tcp --permanent --zone=public
firewall-cmd --add-port=10911/tcp --permanent --zone=public
firewall-cmd --add-port=10912/tcp --permanent --zone=public
firewall-cmd --add-port=10909/tcp --zone=public --permanent
firewall-cmd --reload
注:10909端口根據你的 rocketmq-console VIP通道是否開啟自行設定,也就是 application.properties 裡 rocketmq.config.isVIPChannel 為 true 或 false,rocketmq-console 相關知識可移步本文第4節。
3.3 啟動叢集
3.3.1 啟動 NameServer 叢集
分别啟動4個節點的 NameServer
3.3.2 啟動 Master
分别啟動 rocketmqOS1 和 rocketmqOS3 兩個主機的 broker master,啟動時指定我們配置的配置檔案。
- 192.168.1.210 rocketmqOS1 Master1
- 192.168.1.212 rocketmqOS3 Master2
3.3.3 啟動 Slave
分别啟動 rocketmqOS2 和 rocketmqOS4 兩個主機的 broker slave,啟動時指定我們配置的配置檔案。
- 192.168.1.211 rocketmqOS2 Slave1
- 192.168.1.213 rocketmqOS4 Slave2
全部啟動完畢後,檢視 broker 日志,如下
NameServer 日志如下
可以看到各節點已正常注冊連接配接。
4、圖形化管理控制台
rocketmq-console 是 RocketMQ 的擴充插件,是一個圖形化管理控制台。
下載下傳位址:https://github.com/apache/rocketmq-externals/releases
下載下傳解壓後,這個項目是個 springboot 工程,是以可以來做一些改動,比如端口号和 NameServer 位址等。
我這裡改動了端口,并且指定了 NameServer 的位址(有多個用分号隔開),如下
運作項目,通路 http://localhost:8088/
5、爬坑之路
5.1 啟動服務無反應
解決方法:修改初始記憶體,初始記憶體預設很大,主機記憶體太小的話無法啟動。
5.2 啟動broker服務提示如下錯誤
2021-08-28 16:08:18 ERROR DiskCheckScheduledThread1 - Error when measuring disk space usage, file doesn’t exist on this path: /root/store/commitlog
目錄下果然沒有該檔案夾,是版本bug。
解決方法:手動建立該檔案夾。
覺得有幫助點個贊吧!!!
原創不易,轉載請注明出處。
微信掃一掃下方二維碼即可關注我的公衆号