1. 程式人生 > 其它 >rocketMQ叢集部署

rocketMQ叢集部署

RocketMQ叢集部署

       RocketMQ是一款非常優秀的訊息中介軟體,在各大公司運用中也非常廣泛。但是它是如何進行高可用的部署的呢。現在就由我來為大家講解一哈RocketMQ是如何進行叢集部署的。本篇文章中沒有對mq中各個角色進行講解,本文也預設大家對mq的各個角色已經有了一定的認識。博主在未來一週中會對mq的基礎部門以及如果使用進行詳解。

一、環境準備

虛擬機器、JDK、RocketMQ環境包,

二、JDK、RocketMQ相關包準備

  版本 名稱 官方下載地址
JDK 1.8

jdk-8u321-linux-x64.tar.gz

JDK官方下載地址
RocketMQ 4.5.2

rocketmq-all-4.5.2-bin-release.zip

rocketMQ官方下載地址

rocketmq-dashboard latest release rocketmq-dashboard-master.zip rocketMQ控制檯下載地址

 

三、部署到Linxu系統並解壓

上傳檔案可以使用XShell。

1、如果沒有lrzsz工具,可以安裝,否則:跳過這一步。命令:yum install lrzsz

2、上傳:rz + 上傳的檔案

3、上傳完所有的檔案,進行解壓。

4、jdk解壓:tar -zxvf jdk-8u321-linux-x64.tar.gz

  -C /opt/jdk

5、rocketMQ解壓:unzip -d  /opt/rocketMQ rocketmq-all-4.5.2-bin-release.zip

6、rocketmq-dashboard解壓:unzip rocketmq-dashboard-master.zip /opt/rocketMQ-DashBoard

7、配置JDK環境變數:(大家可能有疑惑為啥會配置JDK環境變數,原因:rocketMQ是JAVA語言開發出來的,所有要執行rocketMQ就必須安裝JDK的環境。)

1、編輯/etc/profile檔案
     命令:vim /etc/profile
2、配置環境變數:
     export JAVA_HOME
=/opt/soft/jdk1.8.0_261 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 3、重新載入配置:source /etc/profile
4、檢視是否配置成功。java -version
效果:

 

9、rocketMQ高可用有很多種方式,比如:單機部署,多主叢集,雙主雙從同步部署,雙主雙從非同步部署,以及多主多從部署。部署叢集可按照自己公司的環境來進行部署。

單機部署:只啟動一個rocketMQ例項就可以了,一般常用來本機測試使用。原因:一旦rocketMQ因某些原因掛掉,導致mq無法使用,則我們服務無法接受資訊與消費資訊等。

多主叢集:只部署mq主節點,無部署從節點。優點:配置簡單,單個Master宕機或重啟維護對應用無影響,即使機器宕機不可恢復情況下,也有其他主節點進行寫入操作,

訊息也不會丟(非同步刷盤丟失少量訊息,同步刷盤一條不丟),效能最高;

雙主雙從同步:部署四個節點,每個主節點都有一個從節點,主與從節點的資訊通過同步的方式進行儲存。優點:訊息不會丟失,即:主節點掛了後,從節點的訊息也不會造成丟失,只不過沒法接受新訊息,只能消費,但是能保證我消費的訊息一定是準確的。缺點:客戶端接受伺服器響應時間長。可用於訊息安全高的場景。

雙主雙從非同步:與雙主雙從一致,只不過在主從資料傳輸是通過非同步的方式,優點:客戶端能快速的接收到伺服器的訊息,缺點:主節點掛的情況,從節點會丟失一部分訊息。可用於允許訊息丟失,吞吐量高的情景。

四、雙主雙從同步部署叢集

  1、啟動虛擬機器,至少準備兩個ip,也可準備四個。

ip broker名稱 說明
192.168.0.129 broker-a a主節點
192.168.0.129 broker-b-s b從節點
192.168.0.130 broker-b b主節點
192.168.0.130 borker-a-s a從節點

 

 2、修改mq的配置。 runserver.sh與runbroker.sh 

  原因:我啟動的虛擬機器的記憶體設定的是3G,而mq預設的JVM最小的堆內容是8G,太大了,不修改將無法啟動。

  修改命令:vim /mq目錄/bin/runserver.sh,或vim /mq目錄/bin/runbroker.sh ,大家可以根據自行修改數字。如果想了解更多的這個可以看一哈,JVM相關的知識。

 

1 1、runserver.sh
2   JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1g -Xmn128m -XX:metaspaceSize=120m -XX:MaxMetaspaceSize=320m"
3 2、runnbroker.sh
4   JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1G -Xmn128m"

  3、修改conf目錄中2m-2s-sync目錄中的配置檔案

 broker-a.properties
# 所屬叢集名字
brokerClusterName=myRocketmqCluster
# broker名字,注意此處不同的配置檔案填寫的不一樣(按配置檔案檔名來匹配)
brokerName=broker-a
# 0 表示Master, > 0 表示slave
brokerId=0
# 註冊中心,可使用叢集模式
namesrvAddr=192.168.0.129:9876;192.168.0.130:9876
# 在傳送訊息時,自動建立伺服器不存在的Topic,預設建立的佇列數
defaultTopicQueueNums=4
# 是否允許Broker 自動建立Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
# 是否允許Broker自動建立訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
# Broker 對外服務的監聽埠
listenPort=10933
# 刪除檔案時間點,預設是凌晨4點
deleteWhen=04
# 檔案保留時間,預設48小時
fileReservedTime=120
# commitLog每個檔案的大小預設1G
# 附加:訊息實際儲存位置,和ConsumeQueue是mq的核心儲存概念,之前搭建2m環境的時候建立在store下面,
用於資料儲存,consumequeue是一個邏輯的概念,訊息過來之後,consumequeue並不是把訊息所有儲存起來,而是記錄一個數據的位置,記錄好之後再把訊息存到commitlog檔案裡 mapedFileSizeCommitLog
=1073741824 # ConsumeQueue每個檔案預設存30W條,根據業務情況調整 mapedFileSizeConsumeQueue=300000 destroyMapedFileIntervalForcibly=120000 redeleteHangedFileInterval=120000 # 檢測物理檔案磁碟空間 diskMaxUsedSpaceRatio=88 # 儲存路徑 storePathRootDir=/opt/rocketmq/store # commitLog儲存路徑 storePathCommitLog=/opt/rocketmq/commitlog # 消費佇列儲存路徑 storePathConsumeQueue=/opt/rocketmq/consumequeue # 訊息索引儲存路徑 storePathIndex=/opt/rocketmq/index # checkpoint 檔案儲存路徑 storeCheckpoint=/opt/rocketmq/checkpoint # abort 檔案儲存路徑 abortFile=/opt/rocketm/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 # 發訊息執行緒池數量 sendMessageTreadPoolNums=128 # 拉訊息執行緒池數量 pullMessageTreadPoolNums=128

 


broker-b-s.properties
# 所屬叢集名字
brokerClusterName=myRocketmqCluster
# broker名字,注意此處不同的配置檔案填寫的不一樣(按配置檔案檔名來匹配)
brokerName=broker-a
# 0 表示Master, > 0 表示slave
brokerId=1
# 註冊中心,可使用叢集模式
namesrvAddr=192.168.0.129:9876;192.168.0.130:9876
# 在傳送訊息時,自動建立伺服器不存在的Topic,預設建立的佇列數
defaultTopicQueueNums=4
# 是否允許Broker 自動建立Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
# 是否允許Broker自動建立訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
# Broker 對外服務的監聽埠
listenPort=10900
# 刪除檔案時間點,預設是凌晨4點
deleteWhen=04
# 檔案保留時間,預設48小時
fileReservedTime=120
# commitLog每個檔案的大小預設1G
# 附加:訊息實際儲存位置,和ConsumeQueue是mq的核心儲存概念,之前搭建2m環境的時候建立在store下面,用於資料儲存,
consumequeue是一個邏輯的概念,訊息過來之後,consumequeue並不是把訊息所有儲存起來,而是記錄一個數據的位置,記錄好之後再把訊息存到commitlog檔案裡 mapedFileSizeCommitLog
=1073741824 # ConsumeQueue每個檔案預設存30W條,根據業務情況調整 mapedFileSizeConsumeQueue=300000 destroyMapedFileIntervalForcibly=120000 redeleteHangedFileInterval=120000 # 檢測物理檔案磁碟空間 diskMaxUsedSpaceRatio=88 # 儲存路徑 storePathRootDir=/opt/rocketmq/slave/store # commitLog儲存路徑 storePathCommitLog=/opt/rocketmq/slave/commitlog # 消費佇列儲存路徑 storePathConsumeQueue=/opt/rocketmq/slave/consumequeue # 訊息索引儲存路徑 storePathIndex=/opt/rocketmq/slave/index # checkpoint 檔案儲存路徑 storeCheckpoint=/opt/rocketmq/slave/checkpoint # abort 檔案儲存路徑 abortFile=/opt/rocketm/slave/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 # 發訊息執行緒池數量 sendMessageTreadPoolNums=128 # 拉訊息執行緒池數量 pullMessageTreadPoolNums=128 

這裡面的核心:

brokerClusterName:只要是同一個叢集裡面的節點,都必須是這一個名稱,可以自定義

brokerName:broker的名稱,同一個broker的主從節點名稱保持一致。

brokerId:broker的id標識。0:主節點,大於0都是從節點

namesrvAddr:nameSrv的註冊中心地址,可以是叢集模式,多個ip之間使用英文的;分隔

listenPort:監聽埠,同一個ip地址下,埠不能保持一致,需修改

brokerRole:broker的角色,ASYNC_MASTER 非同步複製Master,SYNC_MASTER 同步雙寫Master,SLAVE從節點專用。

flushDiskType:資料刷盤方式。ASYNC_FLUSH 非同步刷盤,SYNC_FLUSH 同步刷盤

storePathRootDir=/opt/rocketmq/store 儲存路徑

storePathCommitLog=/opt/rocketmq/commitlog commitLog儲存路徑

storePathConsumeQueue=/opt/rocketmq/consumequeue 消費佇列儲存路徑

storePathIndex=/opt/rocketmq/index訊息索引儲存路徑

storeCheckpoint=/opt/rocketmq/checkpoint checkpoint 檔案儲存路徑

abortFile=/opt/rocketm/abort abort 檔案儲存路徑

4、192.168.0.130虛擬機器重複上面的步驟即可。
5、兩臺虛擬機器都已經部署完成了,開始對mq叢集進行啟動吧。先進入mq中bin目錄中,如果配置了MQ的環境變數,就沒必要進入bin目錄中

1、先啟動兩臺機子上的nameServer。nohup sh mqnamesrv &
2、在啟動mq中129機子上的broker的節點。
叢集中a主節點:nohup sh mqbroker -c /opt/soft/rocketmq/rocketmq-all-4.5.2-bin-release/conf/2m-2s-sync/broker-a.properties &
叢集中b從節點:nohup sh mqbroker -c /opt/soft/rocketmq/rocketmq-all-4.5.2-bin-release/conf/2m-2s-sync/broker-b-s.properties &
3、啟動的效果:

4、對130機子重複操作即可。

6、到這裡,叢集我們就部署完成了,但是在這裡我們肯定有疑問我們怎麼看到他就是部署成功了。要不我們寫一段程式碼來進行測試。不要急,官方雖然提供了例子來操作,但是我們只能看到一堆的控制檯資料呈現,不太好看。所以官方就提供了一個用於b端的頁面的控制檯。那我們就來對其進行配置部署吧。

五、rocketmq-dashboard 控制檯部署

1、將下載好的壓縮包解壓到本地中,對resource目錄中的application.yml的配置進行修改,目前我們只對nameServer的配置修改一哈,其他的配置我們先不動,注重看我加粗的地方。

rocketmq:
  config:

              # Linux系統中啟動的nameServerd地址與埠
    namesrvAddrs:
      - 192.168.0.130:9876
      - 192.168.0.129:9876

2、打包成jar包並上傳到Linux系統中。打包的時間比較久,耐心等待。

打包注意事項:必須在src同級目錄下使用這個命令(也就是可以看到pom.xml的目錄)。mvn clean package -Dmaven.test.skip=true

如果看到這個就說明打包成功了。那就使用rz上傳到Linux系統中。

3、啟動dashborad。

nohup java -jar /opt/soft/rocketmq-dashboard-1.0.1-SNAPSHOT.jar &

檢視 cat nohup.out ,看到這個就說明成功了。

4、關閉防火牆或開放埠號。

方式一:建議新手使用
1、關閉防火牆。
systemctl stop firewalld
方式二:生產環境使用
1、開放指定的埠號:firewall-cmd --zone=public --add-port=8080/tcp --permanent
2、重啟防火牆:firewall-cmd --reload
注意:使用方式二,就需要將nameServer 與 broker 的埠也需要開放出來。使用了那個埠就必須開放出來,否則會被防火牆給阻擋。

5、效果,如果叢集中把我們部署的都顯示出來了,說明我們部署的沒問題,放心的使用吧。

 

6、鑑權登入。

既然有b端視覺化頁面,那肯定也有我們登入驗證撒,不然任何人知道我們的ip與埠都能看到了。官方是不可能這個玩的。那我們下面就來配置一哈登入校驗。

1、還是對resource下的application.yml檔案進行編輯。

rocketmq:
  config:
    loginRequired: true

  2、對resource下的user.properties修改   這個配置檔案是專門來登入賬號的

使用者名稱 密碼    角色:1:管理員  0:普通使用者

admin=123456,1

  2、修改完了,重新打包上傳執行即可。

  3、效果