溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

RocketMQ的部署過程

發(fā)布時間:2021-09-01 15:47:09 來源:億速云 閱讀:140 作者:chen 欄目:云計算

這篇文章主要講解了“RocketMQ的部署過程”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“RocketMQ的部署過程”吧!

1、RocketMQ介紹

1.1. 簡介

RocketMQ 是一款分布式、隊列模型的消息中間件,具有以下特點:

能夠保證嚴格的消息順序 提供豐富的消息拉取模式 高效的訂閱者水平擴展能力 實時的消息訂閱機制 億級消息堆積能力

選用理由:

  •  強調(diào)集群無單點,可擴展,任意一點高可用,水平可擴展。

  •  海量消息堆積能力,消息堆積后,寫入低延遲。

  •  支持上萬個隊列

  • 消息失敗重試機制

  •  消息可查詢

  • 開源社區(qū)活躍

  •  成熟度(經(jīng)過雙十一考驗)

1.2. 關(guān)鍵概念

 1.2.1. 主題與標(biāo)簽

主題Tpoic:第一級消息類型,書的標(biāo)題 標(biāo)簽Tags:第二級消息類型,書的目錄,可以基于Tag做消息過濾

例如:

主題:訂單交易

標(biāo)簽:訂單交易-創(chuàng)建 訂單交易-付款 訂單交易-完成

1.2.2. 發(fā)送與訂閱群組

RocketMQ的部署過程

生產(chǎn)組:用于消息的發(fā)送。

消費組:用于消息的訂閱處理。

生產(chǎn)組和消費組,方便擴縮機器,增減處理能力,集群組的名字,用于標(biāo)記用 途中的一員。每次只會隨機的發(fā)給每個集群中的一員。

2、RocketMQ集群方式

推薦的幾種 Broker 集群部署方式,這里的Slave 不可寫,但可讀,類似于 Mysql 主備方式。 

操作系統(tǒng): 64bit OS, Linux/Unix/Mac is recommended;

內(nèi)存至少: 8G  建議 16G

2.1.單個 Master

這種方式風(fēng)險較大,一旦Broker 重啟或者宕機時,會導(dǎo)致整個服務(wù)不可用,不建議線上環(huán)境使用。

2.2.多 Master 模式

   一個集群無 Slave,全是 Master,例如 2 個 Master 或者 3 個 Master

優(yōu)點:配置簡單,單個Master 宕機或重啟維護對應(yīng)用無影響,在磁盤配置為 RAID10 時,即使機器宕機不可恢復(fù)情況下,由與 RAID10 磁盤非??煽浚⒁膊粫G(異步刷盤丟失少量消息,同步刷盤一條不丟)

。性能最高。

 缺點:單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復(fù)之前不可訂 閱,消息實時性會受到受到影響。

###  先啟動 NameServer

### 在機器 A,啟動第一個 Master

### 在機器 B,啟動第二個 Master

2.1.  多 Master 多 Slave 模式,異步復(fù)制

   每個 Master 配置一個 Slave,有多對Master-Slave,HA

采用異步復(fù)制方式,主備有短暫消息延遲,毫秒級。 優(yōu)點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,因為

Master 宕機后,消費者仍然可以從 Slave

消費,此過程對應(yīng)用透明。不需要人工干預(yù)。性能同多 Master 模式幾乎一樣。 缺點:Master 宕機,磁盤損壞情況,會丟失少量消息。

###  先啟動 NameServer

### 在機器 A,啟動第一個 Master

### 在機器 B,啟動第二個 Master

### 在機器 C,啟動第一個 Slave

### 在機器 D,啟動第二個 Slave 

2.2. 多 Master 多 Slave 模式,同步雙寫

   每個 Master 配置一個 Slave,有多對Master-Slave,HA

采用同步雙寫方式,主備都寫成功,向應(yīng)用返回成功。

優(yōu)點:數(shù)據(jù)與服務(wù)都無單點,Master宕機情況下,消息無延遲,服務(wù)可用性與 數(shù)據(jù)可用性都非常高

缺點:性能比異步復(fù)制模式略低,大約低 10%左右,發(fā)送單個消息的 RT

會略高。目前主宕機后,備機不能自動切換為主機,后續(xù)會支持自動切換功能。

###  先啟動 NameServer

### 在機器 A,啟動第一個 Master

### 在機器 B,啟動第二個 Master

### 在機器 C,啟動第一個 Slave

### 在機器 D,啟動第二個 Slave

以上 Broker 與 Slave 配對是通過指定相同的brokerName 參數(shù)來配對,Master 的 BrokerId 必須是 0,Slave 的BrokerId 必須是大與 0 的數(shù)。另外一個 Master 下面可以掛載多個 Slave,同一 Master 下的多個 Slave通過指定不同的 BrokerId 來區(qū)分。

3、RocketMQ部署【雙Master方式】

3.1. 服務(wù)器環(huán)境

序號

IP

用戶名

密碼

角色

模式

1

192.168.100.24

root

 

nameServer1,brokerServer1

Master1

2

192.168.100.25

root

 

nameServer2,brokerServer2

Master2

 

3.2. Hosts添加信息  【兩臺機器】
#     vi /etc/hosts
[root@cs11-cluster-2 rocketmq]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.100.24   rocketmq-master1   rocketmq-nameserver1
192.168.100.25   rocketmq-master2   rocketmq-nameserver2

IP

NAME

192.168.100.24

rocketmq-nameserver1

192.168.100.24

rocketmq-master1

192.168.100.25

rocketmq-nameserver2

192.168.100.25

rocketmq-master2

 
3.3.上傳解壓【兩臺機器】
安裝包獲取方式一,最新代碼:
下載git代碼:
https://github.com/apache/incubator-rocketmq.git
安裝:
64bit JDK 1.8+;
Maven 3.2.x

進入項目執(zhí)行mvn編譯打包:
cd incubator-rocketmq
mvn -Prelease-all -DskipTests clean install -U

cd distribution/target/
將打包好的代碼,推送到兩臺服務(wù)器:
apache-rocketmq.tar.gz  或 apache-rocketmq.zip
 
安裝包獲取方式二:
下載git代碼:
https://github.com/apache/incubator-rocketmq.git

進入項目包:
cd incubator-rocketmq/

將: distribution 打包,推送到兩臺服務(wù)器。
3.4.創(chuàng)建存儲路徑【兩臺機器】
#    mkdir /usr/local/rocketmq/store
#    mkdir /usr/local/rocketmq/store/commitlog
#    mkdir /usr/local/rocketmq/store/consumequeue
#    mkdir /usr/local/rocketmq/store/index
3.5. RocketMQ配置文件【兩臺機器】

#     vim  /usr/local/rocketmq/conf/2m-noslave/broker-a.properties

#     vim  /usr/local/rocketmq/conf/2m-noslave/broker-b.properties

#所屬集群名字 
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣  broker-a|broker-b
brokerName=broker-a
#0 表示 Master,>0 表示 Slave 
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時,自動創(chuàng)建服務(wù)器不存在的topic,默認創(chuàng)建的隊列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創(chuàng)建訂閱組,建議線下開啟,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=10911
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 
fileReservedTime=120
#commitLog每個文件的大小默認1G 1024 * 1024 * 1024
mapedFileSizeCommitLog=1073741824
#檢測物理文件磁盤空間 diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存儲路徑 
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費隊列存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小 
maxMessageSize=65536

#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000

#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=ASYNC_MASTER

#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH

#checkTransactionMessageEnable=false
#發(fā)消息線程池數(shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池數(shù)量
#pullMessageThreadPoolNums=128
 

3.6. 修改日志配置文件【兩臺機器】

#    mkdir -p /usr/local/rocketmq/logs
#    cd /usr/local/rocketmq/conf && sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml
3.7. 修改啟動腳本參數(shù)【兩臺機器】(堆內(nèi)存最少設(shè)置為1g,不然會出錯)

#     vim  /usr/local/rocketmq/bin/runbroker.sh

#=====================================================================
# 開發(fā)環(huán)境JVM Configuration
#==============================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m"

#     vim  /usr/local/rocketmq/bin/runserver.sh

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m"
3.8. 啟動NameServer【兩臺機器】
[root@cs11-cluster-1 rocketmq]# cat shell/start_namesvr.sh 
#!/bin/sh

nohup sh  /usr/local/rocketmq/bin/mqnamesrv  2>&1 1>/usr/local/rocketmq/logs/start_namesvr.log &
# netstat -ntlp 
# jps

3.9. 啟動BrokerServer A【192.168.100.24】

[root@cs11-cluster-1 rocketmq]# cat shell/start_broker-a.sh 
#!/bin/sh

nohup sh  /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-a.properties   2>&1 1>/usr/local/rocketmq/logs/start_broker-a.log &
#    netstat -ntlp
#    jps
#    tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
#    tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
3.10.啟動BrokerServer B【192.168.100.25】
[root@cs11-cluster-1 rocketmq]# cat shell/start_broker-b.sh 
#!/bin/sh

nohup sh  /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-b.properties   2>&1 1>/usr/local/rocketmq/logs/start_broker-b.log &
#    netstat -ntlp
#    jps
#    tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log
#    tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
數(shù)據(jù)發(fā)送 , 接受驗證:
Produce:

 > export NAMESRV_ADDR=192.168.100.24:9876
 > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
 SendResult [sendStatus=SEND_OK, msgId= ...


Consummer:

 > export NAMESRV_ADDR=192.168.100.24:9876
 > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
 ConsumeMessageThread_%d Receive New Messages: [MessageExt...
3.11.RocketMQ Console

在tomcat中部署rocketmq-console.war 

RocketMQ的部署過程

3.12. 數(shù)據(jù)清理

#    cd /usr/local/rocketmq/bin
#    sh mqshutdown broker
#    sh mqshutdown namesrv
#    --等待停止
#    rm -rf /usr/local/rocketmq/store
#    mkdir /usr/local/rocketmq/store
#    mkdir /usr/local/rocketmq/store/commitlog
#    mkdir /usr/local/rocketmq/store/consumequeue
#    mkdir /usr/local/rocketmq/store/index
#    --按照上面步驟重啟NameServer與BrokerServer

3.13. 異常錯誤

###出現(xiàn)如下異常:
2017-10-09 22:04:59 INFO main - load /opt/rocketmq/apache-rocketmq/store/config/consumerOffset.json OK
2017-10-09 22:04:59 INFO main - load /opt/rocketmq/apache-rocketmq/store/config/consumerFilter.json OK
2017-10-09 22:04:59 INFO main - shutdown thread PullRequestHoldService interrupt false
2017-10-09 22:04:59 INFO main - join thread PullRequestHoldService eclipse time(ms) 0 90000

#可能原因:
配置路徑錯誤,或store文件中文件創(chuàng)建錯誤,
注:store 創(chuàng)建的時候只能手工創(chuàng)建如下文件夾: commitlog  consumequeue  index

感謝各位的閱讀,以上就是“RocketMQ的部署過程”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對RocketMQ的部署過程這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI