1. 程式人生 > 實用技巧 >RocketMQ - 0 環境 & 叢集 搭建

RocketMQ - 0 環境 & 叢集 搭建

RocketMQ - 環境 & 叢集 搭建

2.1) 方案一

2.1.1) 上傳壓縮包

  • 步驟1:安裝JDK(1.8)
1)解壓 jdk
tar -zxvf jdk-8u171-linux-x64.tar.gz
2)配置環境變數
>vim /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_171
export PATH=$PATH:${JAVA_HOME}/bin
3)重新載入配置
>source /etc/profile
>java -version

如果安裝完畢 jdk 後 java -version 看到的是 openjdk(需要刪除)因為 作業系統預設已經安裝了 opendjdk

# 檢視
rpm -qa | grep java
# 刪除(把上一個命令看到的所有的jdk檔案 用 如下命令刪除)
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.232.b09-0.el7_7.x86_64
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.241-2.6.20.0.el7_7.x86_64
rmp -e --nodeps java-1.7.0-openjdk-1.7.0.241-2.6.20.0.el7_7.x86_64
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.241-2.6.20.0.el7_7.x86_64

  • 步驟2:上傳壓縮包(zip)

    • yum -y install lrzsz
    • rz
  • 步驟3:解壓縮unzip rocketmq-all-4.5.2-bin-release.zip

  • 步驟4:修改目錄名稱mv rocketmq-all-4.5.2-bin-release rocketmq

2.1.2) 啟動伺服器

  • 步驟1:啟動命名伺服器(bin目錄下)

    • sh mqnamesrv
  • 步驟2:啟動訊息伺服器(bin目錄下)

    • 修改*runbroker.sh*檔案中有關記憶體的配置(調整的與當前虛擬機器記憶體匹配即可,推薦256m-128m)

    • sh mqbroker -n localhost:9876

2.1.3) 測試伺服器環境

  • 步驟1:配置命名伺服器地址

    • export NAMESRV_ADDR=localhost:9876
  • 步驟2:啟動生產者程式客戶端(bin目錄下)

    • sh tools.sh org.apache.rocketmq.example.quickstart.Producer
    • 啟動後產生大量日誌資訊(注意該資訊是測試程式中自帶的,不具有通用性,僅供學習查閱參考)
  • 步驟3:啟動消費者程式客戶端(bin目錄下)

    • sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

2.2) 方案二(使用提供的虛擬機器)

  • 步驟1:修改ip

    • vim /root/rocket/conf/broker.conf
    • 修改broker.conf中broker IP1為自己linux的ip

  • 步驟2:啟動服務

    • cd /root/rocket
    • docker-compose up

以下為docker+rockerMQ安裝過程,可忽略

https://www.yuque.com/docs/share/2f3612ed-3d6d-4f43-8639-4b5d493ac1d8?# 《docker+rocketmq》

叢集搭建

4.1)叢集結構與特徵分析

4.1.1)叢集結構

  • 單機

    • 一個broker提供服務(宕機後服務癱瘓)
  • 叢集

    • 多個broker提供服務(單機宕機後訊息無法及時被消費)
    • 多個master多個slave
      • master到slave訊息同步方式為同步(較非同步方式效能略低,訊息無延遲)
      • master到slave訊息同步方式為非同步(較同步方式效能略高,資料略有延遲)

4.1.2)工作流程

  • 步驟1:NameServer啟動,開啟監聽,等待broker、producer與consumer連線

  • 步驟2:broker啟動,根據配置資訊,連線所有的NameServer,並保持長連線

  • 步驟2補充:如果broker中有現存資料, NameServer將儲存topic與broker關係

  • 步驟3:producer發信息,連線某個NameServer,並建立長連線

  • 步驟4:producer發訊息

    • 步驟4.1若果topic存在,由NameServer直接分配
    • 步驟4.2如果topic不存在,由NameServer建立topic與broker關係,並分配
  • 步驟5:producer在broker的topic選擇一個訊息佇列(從列表中選擇)

  • 步驟6:producer與broker建立長連線,用於傳送訊息

  • 步驟7:producer傳送訊息

  • comsumer工作流程同producer

4.2)雙主雙從叢集搭建

4.2.1) 叢集架構

4.2.2)搭建過程

1) 配置主機名稱(未來就可以根據主機名找到對應的伺服器了)

vim /etc/hosts
# nameserver
192.168.184.128 rocketmq-nameserver1
192.168.184.129 rocketmq-nameserver2
# broker
192.168.184.128 rocketmq-master1
192.168.184.129 rocketmq-slave2
192.168.184.129 rocketmq-master2
192.168.184.128 rocketmq-slave1

配置完畢後重啟網絡卡,應用配置

systemctl restart network

2) 關閉防火牆

# 關閉防火牆
systemctl stop firewalld.service 
# 檢視防火牆的狀態
firewall-cmd --state 
# 禁止firewall開機啟動
systemctl disable firewalld.service

3) 配置jdk

詳見 2.1.1) 步驟1

4) 配置伺服器環境

將rocketmq 解壓至跟目錄 /

# 解壓
unzip rocketmq-all-4.5.2-bin-release.zip
# 修改目錄名稱
mv rocketmq-all-4.5.2-bin-release rocketmq
vim /etc/profile
#set rocketmq
ROCKETMQ_HOME=/rocketmq
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH

配置完畢後重啟網絡卡,應用配置

source /etc/profile

5) 建立叢集伺服器的資料儲存目錄

主節點建立四個目錄/ 從節點四個目錄

mkdir /rocketmq/store
mkdir /rocketmq/store/commitlog
mkdir /rocketmq/store/consumequeue
mkdir /rocketmq/store/index


mkdir /rocketmq-slave/store
mkdir /rocketmq-slave/store/commitlog
mkdir /rocketmq-slave/store/consumequeue
mkdir /rocketmq-slave/store/index

注意master與slave如果在同一個虛擬機器中部署,需要將儲存目錄區分開

6) 修改配置

不同的節點,應該修改不同的配置,資料夾也應該不一樣

cd r/ocketmq/conf/2m-2s-sync
vim  broker-a.proerties
#所屬叢集名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在傳送訊息時,自動建立伺服器不存在的topic,預設建立的佇列數
defaultTopicQueueNums=4
#是否允許 Broker 自動建立Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動建立訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=11011
#刪除檔案時間點,預設凌晨 4點
deleteWhen=04
#檔案保留時間,預設 48 小時
fileReservedTime=48

#commitLog每個檔案的大小預設1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案預設存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁碟空間
diskMaxUsedSpaceRatio=88
#儲存路徑
storePathRootDir=/rocketmq/store-slave
#commitLog 儲存路徑
storePathCommitLog=/rocketmq/store-slave/commitlog
#消費佇列儲存路徑儲存路徑
storePathConsumeQueue=/rocketmq/store-slave/consumequeue
#訊息索引儲存路徑
storePathIndex=/rocketmq/store-slave/index
#checkpoint 檔案儲存路徑
storeCheckpoint=/rocketmq/store-slave/checkpoint
#abort 檔案儲存路徑
abortFile=/rocketmq


#限制的訊息大小
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=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessageThreadPoolNums=128

檢查啟動記憶體 (nameserver 和broker 均需要修改)

vim /rocketmq/bin/runbroker.sh
vim /rocketmq/bin/runserver.sh

# 開發環境配置 JVM Configuration
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

啟動(bin 目錄)

nohup sh mqnamesrv &
nohup sh mqbroker -c ../conf/2m-2s-syncbroker-a.properties &
nohup sh mqbroker -c ../conf/2m-2s-sync/broker-b-s.properties &

5) rocketmq-console

rocketmq-console是一款基於java環境開發的(springboot)的管理控制檯工具

獲取地址:https://github.com/apache/rocketmq-externals