RocketMQ4.3.0集羣搭建和部署rocketMq監控平臺

https://blog.csdn.net/qq_35400008/article/details/82467562

 

集羣部署(採用2個master,2個slave異步複製的集羣結構)
 

RocketMQ具有以下特點:

1)是一個隊列模型的消息中間件,具有高性能、高可靠、高實時、分佈式特點。

2)Producer、Consumer、隊列都可以分佈式。

3)Producer向一些隊列輪流發送消息,隊列集合稱爲Topic,Consumer如果做廣播消費,則一個consumer實例消費這個Topic對應的所有隊列,如果做集羣消費,則多個Consumer實例平均消費這個topic對應的隊列集合。

4)支持嚴格的消息順序;

5)提供豐富的消息拉取模式

6)高效的訂閱者水平擴展能力

7)實時的消息訂閱機制

8)億級消息堆積能力

9)較少的依賴

10)支持Topic與Queue兩種模式;

11)同時支持Push與Pull方式消費消息;

消息隊列的應用場景

1)異步處理 將不是必須的業務邏輯,進行異步處理,比如註冊之後短信、郵箱的發送

2)應用解耦 訂單系統:用戶下單後,訂單系統完成持久化處理,將消息寫入消息隊列,返回用戶訂單下單成功。 庫存系統:訂閱下單的消息,採用拉/推的方式,獲取下單信息,庫存系統根據下單信息,進行庫存操作。 假如:在下單時庫存系統不能正常使用。也不影響正常下單,因爲下單後,訂單系統寫入消息隊列就不再關心其他的後續操作了。實現訂單系統與庫存系統的應用解耦。

3)流量削鋒,也是消息隊列中的常用場景,一般在秒殺或團搶活動中使用廣泛。 應用場景:秒殺活動,一般會因爲流量過大,導致流量暴增,應用掛掉。爲解決這個問題,一般需要在應用前端加入消息隊列。 a)可以控制活動的人數; b)可以緩解短時間內高流量壓垮應用; c)用戶的請求,服務器接收後,首先寫入消息隊列。假如消息隊列長度超過最大數量,則直接拋棄用戶請求或跳轉到錯誤頁面; d)秒殺業務根據消息隊列中的請求信息,再做後續處理。

4)日誌處理

5)消息通訊 消息通訊是指,消息隊列一般都內置了高效的通信機制,因此也可以用在純的消息通訊。比如實現點對點消息隊列,或者聊天室等。

6)性能 RocketMQ單機也可以支持億級的消息堆積能力。單機寫入TPS單實例約7萬條/秒,單機部署3個Broker,可以跑到最高12萬條/秒,消息大小10個字節

如上圖所示, RocketMQ的部署結構有以下特點:

1)Name Server 可集羣部署,節點之間無任何信息同步。

2)Broker(消息中轉角色,負責存儲消息,轉發消息) 部署相對複雜,Broker 分爲Master 與Slave,一個Master 可以對應多個Slave,但是一個Slave 只能對應一個Master,Master 與Slave 的對應關係通過指定相同的BrokerName,不同的BrokerId來定 義,BrokerId爲0 表示Master,非0 表示Slave。Master 也可以部署多個。每個Broker 與Name。

3)Producer 與Name Server 集羣中的其中一個節點(隨機選擇)建立長連接,定期從Name Server 取Topic 路由信息,並向提供Topic 服務的Master 建立長連接,且定時向Master 發送心跳。Producer 完全無狀態,可集羣部署。

4)Consumer 與Name Server 集羣中的其中一個節點(隨機選擇)建立長連接,定期從Name Server 取Topic 路由信息,並向提供Topic 服務的Master、Slave 建立長連接,且定時向Master、Slave 發送心跳。Consumer既可以從Master 訂閱消息,也可以從Slave 訂閱消息,訂閱規則由Broker 配置決定。

Broker:消息中轉角色,負責存儲消息,轉發消息 Broker集羣有多種配置方式:

1)單Master 優點:除了配置簡單沒什麼優點 缺點:不可靠,該機器重啓或宕機,將導致整個服務不可用

2)多Master 優點:配置簡單,性能最高 缺點:可能會有少量消息丟失(配置相關),單臺機器重啓或宕機期間,該機器下未被消費的消息在機器恢復前不可訂閱,影響消息實時性

3)多Master多Slave,每個Master配一個Slave,有多對Master-Slave,集羣採用異步複製方式,主備有短暫消息延遲,毫秒級 優點:性能同多Master幾乎一樣,實時性高,主備間切換對應用透明,不需人工干預 缺點:Master宕機或磁盤損壞時會有少量消息丟失

4)多Master多Slave,每個Master配一個Slave,有多對Master-Slave,集羣採用同步雙寫方式,主備都寫成功,嚮應用返回成功 優點:服務可用性與數據可用性非常高 缺點:性能比異步集羣略低,當前版本主宕備不能自動切換爲主

Master和Slave的配置文件參考conf目錄下的配置文件 Master與Slave通過指定相同的brokerName參數來配對,Master的BrokerId必須是0,Slave的BrokerId必須是大於0的數。 一個Master下面可以掛載多個Slave,同一Master下的多個Slave通過指定不同的BrokerId來區分。

下面模擬兩臺機器上搭建集羣 -- 主從散落在不同節點上

名稱

broker角色

IP&port

nameSer-1

註冊服務中心

10.xx.xx.111:9876

nameSer-2

註冊服務中心

10.xx.xx.112:9876

broker-a-0

master

10.xx.xx.111:10911   broker-a.properties

broker-a-1

slave

10.xx.xx.112:10921   broker-a-s.properties

broker-b-0

master

10.xx.xx.112:10911   broker-b.properties

broker-b-1

slave

10.xx.xx.111:10921   broker-b-s.properties

第一步:
關閉2臺機器的iptables和selinux(所有節點機器上都要操作)
[root@master01 ~]# /etc/init.d/iptables stop
[root@master01 ~]# vim /etc/sysconfig/selinux
......
SELINUX=disabled
[root@master01 ~]# setenforce 0
[root@master01 ~]# getenforce
Permissive
第二步:linux上準備好jdk,配置好環境變量,還有安裝包maven,這裏不再贅述,自行Google解決。。

第三步:去RocketMQ官網下載源碼包 RocketMQ官網 如下圖:這裏安裝最新版本RocketMQ4.3.0

下載下來丟到linux上,unzip  ....zip 解壓 ,解壓後 再執行maven編譯打包

然後 cd distribution/target/apache-rocketmq 該目錄下,然後把apache-rocketmq 移動到最其他目錄,比如 /opt/ 並改名

rocketmq-4.3.0

第四步:接下來先建好目錄,進入 rocketmq-4.3.0目錄,把logs 目錄、data/store/........如下所示的文件夾建好

第五步:把啓動腳本的參數改下,

1.vim runbroker.sh  (因爲默認的值適合在生產上使用)     -server -Xms512m -Xmx512m -Xmn256m

2. vim runserver.sh (同樣的道理) -server -Xms512m -Xmx512m -Xmn126m -XX:PermSize=128m -XX:MaxPermSize=320m

3. vim tools.sh           -server -Xms256m -Xmx256m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=128m

第六步:到/opt/rocketmq-4.3.0/conf/2m-2s-async 下 修改這四個文件

111機器上主要 broker-a.properties  broker-b-s.properties兩個文件 內容分別如下

brokerClusterName=RocketMQCluster
brokerName=broker-a
brokerId=0
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
##Broker 對外服務的監聽端口
listenPort=10911
#nameserver地址,分號分割
namesrvAddr=10.xx.xx.111:9876;10.xx.xx.112:9876
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啓,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啓,線上關閉
autoCreateSubscriptionGroup=true

brokerIP1=10.100.50.111
storePathRootDir=/opt/rocketmq-4.3.0/data/store
storePathCommitLog=/opt/rocketmq-4.3.0/data/store/commitlog
# 消費隊列存儲路徑存儲路徑
storePathConsumerQueue=/opt/rocketmq-4.3.0/data/store/consumequeue
#消息索引存儲路徑
storePathIndex=/opt/rocketmq-4.3.0/data/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/opt/rocketmq-4.3.0/data/store/checkpoint
#abort 文件存儲路徑
abortFile=/opt/rocketmq-4.3.0/data/store/abort

#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=120
# commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
#diskMaxUsedSpaceRatio=88

brokerClusterName=RocketMQCluster
brokerName=broker-b
brokerId=1
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=10921
#nameserver地址,分號分割
namesrvAddr=10.xx.xx.111:9876;10.xx.xx.112:9876
brokerIP1=10.xx.xx.111
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啓,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啓,線上關閉
autoCreateSubscriptionGroup=true

storePathRootDir=/opt/rocketmq-4.3.0/data2/store
storePathCommitLog=/opt/rocketmq-4.3.0/data2/store/commitlog2
# 消費隊列存儲路徑存儲路徑
storePathConsumerQueue=/opt/rocketmq-4.3.0/data2/store/consumequeue2
#消息索引存儲路徑
storePathIndex=/opt/rocketmq-4.3.0/data2/store/index2
#checkpoint 文件存儲路徑
storeCheckpoint=/opt/rocketmq-4.3.0/data2/store/checkpoint2
#abort 文件存儲路徑
abortFile=/opt/rocketmq-4.3.0/data2/store/abort2
 

#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=120
# commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
#diskMaxUsedSpaceRatio=88

112機器上只修改 broker-b.properties 和broker-a-s.properties 內容分別如下:

brokerClusterName=RocketMQCluster
brokerName=broker-b
brokerId=0
brokerRole=ASYNC_MASTER

flushDiskType=ASYNC_FLUSH
listenPort=10911
#nameserver地址,分號分割
namesrvAddr=10.xx.xx.111:9876;10.xx.xx.112:9876
brokerIP1=10.xx.xx.112
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啓,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啓,線上關閉
autoCreateSubscriptionGroup=true

storePathRootDir=/opt/rocketmq-4.3.0/data/store
storePathCommitLog=/opt/rocketmq-4.3.0/data/store/commitlog
# 消費隊列存儲路徑存儲路徑
storePathConsumerQueue=/opt/rocketmq-4.3.0/data/store/consumequeue
#消息索引存儲路徑
storePathIndex=/opt/rocketmq-4.3.0/data/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/opt/rocketmq-4.3.0/data/store/checkpoint
#abort 文件存儲路徑
abortFile=/opt/rocketmq-4.3.0/data/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000

#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=120
# commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
#diskMaxUsedSpaceRatio=88

brokerClusterName=RocketMQCluster
brokerName=broker-a
brokerId=1
listenPort=10921
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=10.xx.xx.111:9876;10.xx.xx.112:9876
brokerIP1=10.xx.xx.112
#在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啓,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啓,線上關閉
autoCreateSubscriptionGroup=true

storePathRootDir=/opt/rocketmq-4.3.0/data2/store
storePathCommitLog=/opt/rocketmq-4.3.0/data2/store/commitlog
# 消費隊列存儲路徑存儲路徑
storePathConsumerQueue=/opt/rocketmq-4.3.0/data2/store/consumequeue
#消息索引存儲路徑
storePathIndex=/opt/rocketmq-4.3.0/data2/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/opt/rocketmq-4.3.0/data2/store/checkpoint
#abort 文件存儲路徑
abortFile=/opt/rocketmq-4.3.0/data2/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000

#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=120
# commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
#diskMaxUsedSpaceRatio=88

最後啓動

1.111 112 上都執行
bin目錄下執行啓動nameServer  
nohup sh bin/mqnamesrv > ./logs/namesrvrun.log 2>&1 &

 

111上啓動master
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties -n"10.xx.xx.111:9876;10.xx.xx.112:9876" > ./logs/broker-a.log 2>&1 &


112上啓動master
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties  -n"10.xx.xx.111:9876;10.xx.xx.112:9876" > ./logs/broker-b.log 2>&1 &

111上啓動slave 
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties -n"10.xx.xx.111:9876;10.xx.xx.112:9876" > ./logs/broker-b-s.log 2>&1 &


112上啓動slave 
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties -n"10.xx.xx.111:9876;10.xx.xx.112:9876" > ./logs/broker-a-s.log 2>&1 &

每臺機器上兩個broker 纔對

最後部署RocketMQ監控平臺

4)rocketMq監控平臺rocketmq-console部署(我部署在112機器上操作)

 下面的操作不是在我機器上,大致步驟一樣,根據個人情況修改即可, 
也可以直接git在線下載
[root@mq-console-nameserver ~]# cd /opt
[root@mq-console-nameserver opt]# git clone https://github.com/apache/rocketmq-externals.git
  
做軟鏈接
[root@mq-console-nameserver opt]# ln -s /opt/rocketmq-externals /data/
[root@mq-console-nameserver opt]# ll /data/rocketmq-externals
lrwxrwxrwx. 1 root root 23 May  9 14:10 /data/rocketmq-externals -> /opt/rocketmq-externals
  
修改配置文件
[root@mq-console-nameserver ~]# vim /data/rocketmq-externals/rocketmq-console/src/main/resources/application.properties
server.contextPath=
server.port=8080                              #默認訪問端口是8080
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
rocketmq.config.namesrvAddr=192.168.10.207:9876               #如果nameserver是多臺集羣機器,則後面就配置多個ip+port,即"rocketmq.config.namesrvAddr=ip1:port;ip2:port"
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=false                            #注意這個參數,是否設置爲false或true取決於rocketmq的版本號
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
 
------------------------------------------------------------------------------------------
溫馨提示:
由於我這裏使用的rocketmq是3.2.6版本,低於3.5.8版本,所以上面的rocketmq.config.isVIPChannel應設置爲false,默認爲true!
Rocket如果開啓了VIP通道,VIP通道端口爲10911-2=10909。若Rocket服務器未啓動端口10909,則報connect to <:10909> failed。
------------------------------------------------------------------------------------------
  
安裝Maven的安裝
[root@mq-console-nameserver ~]# cd /data/software/
[root@mq-console-nameserver software]# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
[root@mq-console-nameserver software]# tar -zvxf apache-maven-3.3.9-bin.tar.gz
[root@mq-console-nameserver software]# mv apache-maven-3.3.9 /usr/local/maven
[root@mq-console-nameserver software]# vim /etc/profile
........
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
[root@mq-console-nameserver software]# source /etc/profile
[root@mq-console-nameserver software]# mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_131/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-696.el6.x86_64", arch: "amd64", family: "unix"
  
接着對rocketmq-console進行編譯打包運行(mvn的編輯過程需要等待一段時間)
[root@mq-console-nameserver ~]# cd /data/rocketmq-externals/rocketmq-console/
[root@mq-console-nameserver rocketmq-console]# mvn clean package -Dmaven.test.skip=true
  
編譯成功後在target下找到文件:rocketmq-console-ng-1.0.0.jar
[root@mq-console-nameserver rocketmq-console]# ls
doc  LICENSE  NOTICE  pom.xml  README.md  src  style  target
[root@mq-console-nameserver rocketmq-console]# ls target/
checkstyle-cachefile    classes            maven-status                            rocketmq-console-ng-1.0.0-sources.jar
checkstyle-checker.xml  generated-sources  rocketmq-console-ng-1.0.0.jar
checkstyle-result.xml   maven-archiver     rocketmq-console-ng-1.0.0.jar.original
  
啓動rocketmq-console,執行命令:
[root@mq-console-nameserver rocketmq-console]# nohup java -jar target/rocketmq-console-ng-1.0.0.jar >/dev/null 2>&1 &
----------------------------------------------------------------------------------------------------
也可以直接跟NameServer的ip和端口進行啓動
# java -jar rocketmq-console-ng-1.0.0.jar --server.port=8080 --rocketmq.config.namesrvAddr=192.168.10.207:9876
  
如果NameServer有多臺集羣機器的話,後面就多加
# java -jar rocketmq-console-ng-1.0.0.jar --server.port=8080 --rocketmq.config.namesrvAddr=192.168.10.207:9876;192.168.10.208:9876

這裏需要注意兩個參數:
--server.port=8080   指定console訪問端口,默認的就是8080,也可以指定爲其他端口
--rocketmq.config.namesrvAddr   指定nameserver的地址
----------------------------------------------------------------------------------------------------
  
rocketmq-console的默認端口是8080
[root@mq-console-nameserver rocketmq-console]# lsof -i:8080
COMMAND  PID       USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    5574 confluence   81u  IPv6 24674767      0t0  TCP mq-console-nameserver:44888->mq-console-nameserver:webcache (CLOSE_WAIT)
java    5649       jira  157u  IPv6   879851      0t0  TCP *:webcache (LISTEN)
java    5649       jira  249u  IPv6  4166247      0t0  TCP mq-console-nameserver:46886->mq-console-nameserver:webcache (CLOSE_WAIT)
java    5649       jira  262u  IPv6 24669705      0t0  TCP mq-console-nameserver:43464->mq-console-nameserver:webcache (CLOSE_WAIT)
  
最後再瀏覽器裏輸入:http://10.xx.112:8076,(這是我自己的)即可訪問rockermq的web管理界面了


 

 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章