天天看點

RocketMQ高可用叢集搭建詳解

本文同步發表于我的微信公衆号,掃一掃文章底部的二維碼或在微信搜尋 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版本

RocketMQ高可用叢集搭建詳解

解壓

unzip rocketmq-all-4.9.0-bin-release.zip
           

進入解壓目錄

RocketMQ高可用叢集搭建詳解

2.3 修改初始記憶體

此步驟根據實際情況,因為初始記憶體預設設定比較大,某些記憶體比較小的機器不修改可能啟動不起來。

修改 runserver.sh

vim bin/runserver.sh
           
RocketMQ高可用叢集搭建詳解

修改 runbroker.sh

vim bin/runbroker.sh
           
RocketMQ高可用叢集搭建詳解

注:可以按照原始比例調整,比如 8g、8g、4g可對應改成2g、2g、1g

2.4 啟動服務

啟動順序:NameServer->Broker

啟動 NameServer:

RocketMQ高可用叢集搭建詳解

檢視日志,預設目錄在 ~/logs/rocketmqlogs/ 下:

RocketMQ高可用叢集搭建詳解
tail -f ~/logs/rocketmqlogs/namesrv.log
           
RocketMQ高可用叢集搭建詳解

啟動 Broker:

RocketMQ高可用叢集搭建詳解

檢視日志

tail -f ~/logs/rocketmqlogs/broker.log
           
RocketMQ高可用叢集搭建詳解

2.5 發送接收消息測試

官方文檔上為我們提供了一個測試例子,在發送和接收之前需要先告訴用戶端 NameServer 的位址,最簡單可以使用環境變量NAMESRV_ADDR

export NAMESRV_ADDR=localhost:9876
           

發送消息

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
           
RocketMQ高可用叢集搭建詳解

接收消息

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
           
RocketMQ高可用叢集搭建詳解

2.6 關閉服務

關閉 Broker

sh bin/mqshutdown broker
           
RocketMQ高可用叢集搭建詳解

關閉 NameServer

sh bin/mqshutdown namesrv
           
RocketMQ高可用叢集搭建詳解

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 預設為我們提供了幾個模闆

RocketMQ高可用叢集搭建詳解

從上至下分别是 兩主兩從異步複制(2m-2s-async)、兩主兩從同步複制(2m-2s-sync)、兩主無從(2m-noslave)。

本次搭建使用兩主兩從異步複制,選用第一個模闆即可,進入 conf/2m-2s-async 目錄,如下

RocketMQ高可用叢集搭建詳解

四個配置檔案分别是 主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 日志,如下

RocketMQ高可用叢集搭建詳解

NameServer 日志如下

RocketMQ高可用叢集搭建詳解

可以看到各節點已正常注冊連接配接。

4、圖形化管理控制台

rocketmq-console 是 RocketMQ 的擴充插件,是一個圖形化管理控制台。

下載下傳位址:https://github.com/apache/rocketmq-externals/releases

RocketMQ高可用叢集搭建詳解

下載下傳解壓後,這個項目是個 springboot 工程,是以可以來做一些改動,比如端口号和 NameServer 位址等。

我這裡改動了端口,并且指定了 NameServer 的位址(有多個用分号隔開),如下

RocketMQ高可用叢集搭建詳解

運作項目,通路 http://localhost:8088/

RocketMQ高可用叢集搭建詳解

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

RocketMQ高可用叢集搭建詳解

目錄下果然沒有該檔案夾,是版本bug。

解決方法:手動建立該檔案夾。

覺得有幫助點個贊吧!!!

原創不易,轉載請注明出處。

微信掃一掃下方二維碼即可關注我的公衆号
RocketMQ高可用叢集搭建詳解