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在windows10解壓。並修改一些配置,打包就可以使用了。具體的在本文最后一個目錄有講解。

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、效果

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM