您好,登錄后才能下訂單哦!
這篇文章主要講解了“RocketMQ的部署過程”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“RocketMQ的部署過程”吧!
RocketMQ 是一款分布式、隊列模型的消息中間件,具有以下特點:
能夠保證嚴格的消息順序 提供豐富的消息拉取模式 高效的訂閱者水平擴展能力 實時的消息訂閱機制 億級消息堆積能力
選用理由:
強調(diào)集群無單點,可擴展,任意一點高可用,水平可擴展。
海量消息堆積能力,消息堆積后,寫入低延遲。
支持上萬個隊列
消息失敗重試機制
消息可查詢
開源社區(qū)活躍
成熟度(經(jīng)過雙十一考驗)
1.2.1. 主題與標(biāo)簽
主題Tpoic:第一級消息類型,書的標(biāo)題 標(biāo)簽Tags:第二級消息類型,書的目錄,可以基于Tag做消息過濾
例如:
主題:訂單交易
標(biāo)簽:訂單交易-創(chuàng)建 訂單交易-付款 訂單交易-完成
生產(chǎn)組:用于消息的發(fā)送。
消費組:用于消息的訂閱處理。
生產(chǎn)組和消費組,方便擴縮機器,增減處理能力,集群組的名字,用于標(biāo)記用 途中的一員。每次只會隨機的發(fā)給每個集群中的一員。
推薦的幾種 Broker 集群部署方式,這里的Slave 不可寫,但可讀,類似于 Mysql 主備方式。
操作系統(tǒng): 64bit OS, Linux/Unix/Mac is recommended;
內(nèi)存至少: 8G 建議 16G
這種方式風(fēng)險較大,一旦Broker 重啟或者宕機時,會導(dǎo)致整個服務(wù)不可用,不建議線上環(huán)境使用。
一個集群無 Slave,全是 Master,例如 2 個 Master 或者 3 個 Master
優(yōu)點:配置簡單,單個Master 宕機或重啟維護對應(yīng)用無影響,在磁盤配置為 RAID10 時,即使機器宕機不可恢復(fù)情況下,由與 RAID10 磁盤非??煽浚⒁膊粫G(異步刷盤丟失少量消息,同步刷盤一條不丟)
。性能最高。
缺點:單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復(fù)之前不可訂 閱,消息實時性會受到受到影響。
### 先啟動 NameServer
### 在機器 A,啟動第一個 Master
### 在機器 B,啟動第二個 Master
每個 Master 配置一個 Slave,有多對Master-Slave,HA
采用異步復(fù)制方式,主備有短暫消息延遲,毫秒級。 優(yōu)點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,因為
Master 宕機后,消費者仍然可以從 Slave
消費,此過程對應(yīng)用透明。不需要人工干預(yù)。性能同多 Master 模式幾乎一樣。 缺點:Master 宕機,磁盤損壞情況,會丟失少量消息。
### 先啟動 NameServer
### 在機器 A,啟動第一個 Master
### 在機器 B,啟動第二個 Master
### 在機器 C,啟動第一個 Slave
### 在機器 D,啟動第二個 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ū)分。
序號 | IP | 用戶名 | 密碼 | 角色 | 模式 |
1 | 192.168.100.24 | root |
| nameServer1,brokerServer1 | Master1 |
2 | 192.168.100.25 | root |
| nameServer2,brokerServer2 | Master2 |
[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 |
安裝包獲取方式一,最新代碼: 下載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ù)器。
# mkdir /usr/local/rocketmq/store # mkdir /usr/local/rocketmq/store/commitlog # mkdir /usr/local/rocketmq/store/consumequeue # mkdir /usr/local/rocketmq/store/index
# 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
# 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"
[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
[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
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...
在tomcat中部署rocketmq-console.war
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)注!
免責(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)容。