目錄
1 MQ
? 1.1 MQ簡(jiǎn)介
? 1.2 MQ的缺點(diǎn)
? 1.3 主流消息隊(duì)列比較
2 RocketMQ入門
? 2.1 環(huán)境搭建
? 2.2 安裝和啟動(dòng)
? 2.3 目錄介紹
? 2.4 控制臺(tái)安裝
3 RocketMQ集群搭建
? 3.1 RocketMQ集群
? 3.2 集群搭建方式
?? 3.2.1 集群特點(diǎn)
?? 3.2.2 集群模式
? 3.3 雙主雙從集群搭建
?? 3.3.1總體架構(gòu)
?? 3.3.2 集群工作流程
?? 3.3.3 服務(wù)器環(huán)境
?? 3.3.4 添加Host信息
?? 3.3.5 防火墻配置
?? 3.3.6 環(huán)境變量配置
?? 3.3.7 創(chuàng)建消息存儲(chǔ)路徑
?? 3.3.8 修改JVM大小
?? 3.3.9 修改broker配置文件
?? 3.3.10 服務(wù)啟動(dòng)
?? 3.3.11查看進(jìn)程狀態(tài)
?? 3.3.12 查看日志
? 3.4 mqadmin管理工具
? 3.5 集群監(jiān)控平臺(tái)搭建
1 MQ(Message Quene)
1.1 MQ簡(jiǎn)介
消息隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。
其應(yīng)用場(chǎng)景主要包含:
-
應(yīng)用解耦
系統(tǒng)耦合性越高滋恬,容錯(cuò)性越低。以用戶下單購(gòu)買業(yè)務(wù)為例。傳統(tǒng)的做法是,訂單系統(tǒng)調(diào)用庫(kù)存系統(tǒng)的接口降宅。一旦庫(kù)存系統(tǒng)出現(xiàn)故障或因?yàn)樯?jí)等原因暫時(shí)不可用忆畅,都會(huì)造成下單操作異常。
引入消息隊(duì)列后晚顷, 假如在下單時(shí)庫(kù)存系統(tǒng)不能正常使用,也不影響正常下單疗疟。當(dāng)庫(kù)存系統(tǒng)恢復(fù)正常后该默,補(bǔ)充處理消息隊(duì)列中的訂單消息即可。實(shí)現(xiàn)訂單系統(tǒng)與庫(kù)存系統(tǒng)的應(yīng)用解耦策彤。
-
流量削峰
秒殺活動(dòng)栓袖,一般會(huì)因?yàn)榱髁窟^(guò)大,導(dǎo)致流量暴增店诗,應(yīng)用掛掉裹刮。為解決這個(gè)問(wèn)題,需要在應(yīng)用前端加入消息隊(duì)列庞瘸。服務(wù)器接收用戶的請(qǐng)求后捧弃,首先寫(xiě)入消息隊(duì)列。假如消息隊(duì)列長(zhǎng)度超過(guò)最大數(shù)量擦囊,則直接拋棄用戶請(qǐng)求或跳轉(zhuǎn)到錯(cuò)誤頁(yè)面违霞。秒殺業(yè)務(wù)根據(jù)消息隊(duì)列中的請(qǐng)求信息,再做后續(xù)處理霜第。
-
數(shù)據(jù)分發(fā)
通過(guò)消息隊(duì)列可以讓數(shù)據(jù)在多個(gè)系統(tǒng)間流通葛家,數(shù)據(jù)的產(chǎn)生方不需要關(guān)心誰(shuí)來(lái)使用數(shù)據(jù),只要將數(shù)據(jù)發(fā)送到消息隊(duì)列泌类,數(shù)據(jù)使用方直接獲取數(shù)據(jù)即可癞谒。
1.2 MQ的缺點(diǎn)
-
系統(tǒng)可用性降低
系統(tǒng)引入的外部依賴越多,系統(tǒng)穩(wěn)定性越差刃榨,一旦MQ宕機(jī)弹砚,就會(huì)對(duì)業(yè)務(wù)造成影響。
如何保證MQ的高可用枢希?
-
系統(tǒng)復(fù)雜度提高
以前系統(tǒng)是同步的遠(yuǎn)程調(diào)用桌吃,現(xiàn)在是通過(guò)MQ異步調(diào)用。
如何保證消息沒(méi)有被重復(fù)消費(fèi)苞轿?怎么處理消息丟失情況茅诱?如何保證消息傳遞的順序性逗物?
-
一致性問(wèn)題
A系統(tǒng)處理完業(yè)務(wù),通過(guò)MQ給給B瑟俭、C翎卓、D系統(tǒng)發(fā)消息,如果B系統(tǒng)摆寄、C系統(tǒng)處理成功失暴、D系統(tǒng)處理失敗。
如何保證消息數(shù)據(jù)處理的一致性微饥?
1.3 主流消息隊(duì)列比較
apache rocketmq官方文檔上有關(guān)于主流消息隊(duì)列的比較:主流消息隊(duì)列比較
2 RocketMQ入門
RocketMQ是阿里巴巴在2012年開(kāi)源的第三代分布式消息中間件逗扒,2016年捐贈(zèng)給Apache。作為一款純java欠橘、分布式矩肩、隊(duì)列模型的開(kāi)源消息中間件,它支持事務(wù)消息肃续、順序消息微峰、批量消息垦垂、定時(shí)消息、消息回溯等典蜕。
2.1 環(huán)境準(zhǔn)備
2.2 目錄介紹
bin:?jiǎn)?dòng)腳本畦韭,包括shell腳本和CMD腳本疼蛾。
-
conf:實(shí)例配置文件,包括broker配置文件艺配、logback配置文件等察郁。
- -- 2m-noslave 雙主
- -- 2m-2s-sync 雙主雙從同步復(fù)制
- -- 2m-2s-async 雙主雙從異步復(fù)制
lib:依賴jar包,包括Netty转唉、commons-lang皮钠、FastJson等。
2.3 安裝和啟動(dòng)
官網(wǎng)
需要下載的文件有:
帶source的源碼需要自己編譯赠法,帶bin的二進(jìn)制文件不需編譯可直接使用麦轰。
- 服務(wù)器環(huán)境
IP | 角色 |
---|---|
192.168.217.130 | nameserver、brokerserver |
- 我使用的源碼安裝方法砖织,進(jìn)入壓縮文件目錄解壓并編譯
#解壓
unzip rocketmq-all-4.4.0-source-release.zip
cd cd rocketmq-all-4.4.0/
# 編譯
mvn -Prelease-all -DskipTests clean install -U
# 移到編譯好的文件到/usr/local/目錄下
cd distribution/target/
mv apache-rocketmq /usr/local/rocketmq
- 添加hosts信息
vim /etc/hosts
配置如下:
192.168.217.130 rocketmqNameserver1
192.168.217.130 rocketmqMaster1
配置完成后, 重啟網(wǎng)卡
systemctl restart network
- RocketMQ對(duì)內(nèi)存要求比較高款侵,我們需要按實(shí)際情況修改默認(rèn)JVM大小
cd /usr/local/rocketmq
# 編輯bin目錄下的runbroker.sh和runserver.sh
vi runbroker.sh
vi runserver.sh
# runserver.sh修改前
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# runserver.sh修改后
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# runbroker.sh修改前
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
# runbroker.sh修改后
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g"
- 在bin目錄下啟動(dòng)NameServer
# 啟動(dòng)NameServer
> nohup sh bin/mqnamesrv &
# 查看啟動(dòng)日志
> tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
- 在bin目錄下啟動(dòng)Broker
# 啟動(dòng)Broker
>nohup sh bin/mqbroker -n localhost:9876 &
# 查看啟動(dòng)日志
>tail -f ~/logs/rocketmqlogs/broker.log
The broker boot success...
# 查看啟動(dòng)進(jìn)程
> jps
1875 Jps
1782 NamesrvStartup
1817 BrokerStartup
- 關(guān)閉RocketMQ
# 關(guān)閉broker
> sh bin/mqshutdown broker
# 關(guān)閉nameServer
> sh bin/mqshutdown namesrv
2.4 控制臺(tái)安裝
RocketMQ 有一個(gè)對(duì)其擴(kuò)展的開(kāi)源項(xiàng)目incubator-rocketmq-externals,這個(gè)項(xiàng)目中有一 個(gè)子模塊叫 rocketmq‐console 侧纯,這個(gè)便是管理控制臺(tái)項(xiàng)目了新锈。
下載解壓后:
我們可以用idea打開(kāi)此項(xiàng)目,修改application.properties眶熬,配置服務(wù)器的ip地址
啟動(dòng)項(xiàng)目妹笆,瀏覽http://localhost:8080
3 RocketMQ集群搭建
3.1 RocketMQ集群
RocketMQ消息隊(duì)列的整體部署架構(gòu)如下圖所示:
通信過(guò)程:
(1) Broker啟動(dòng)后需要完成一次將自己注冊(cè)至NameServer的操作块请;隨后每隔30s時(shí)間定期向NameServer上報(bào)Topic路由信息;
(2) 消息生產(chǎn)者Producer作為客戶端發(fā)送消息時(shí)候拳缠,需要根據(jù)Msg的Topic從本地緩存的TopicPublishInfoTable獲取路由信息墩新。如果沒(méi)有則更新路由信息會(huì)從NameServer上重新拉取脊凰;
(3) 消息生產(chǎn)者Producer根據(jù)(2)中獲取的路由信息選擇一個(gè)隊(duì)列(MessageQueue)進(jìn)行消息發(fā)送抖棘;Broker作為消息的接收者收消息并落盤(pán)存儲(chǔ);
各角色介紹:
(1) NameServer:是一個(gè)幾乎無(wú)狀態(tài)節(jié)點(diǎn)狸涌,可集群部署切省,在消息隊(duì)列 MQ 中提供命名服務(wù),更新和發(fā)現(xiàn) Broker 服務(wù)帕胆。
(2) Broker:消息中轉(zhuǎn)角色朝捆,負(fù)責(zé)存儲(chǔ)消息,轉(zhuǎn)發(fā)消息懒豹。分為 Master Broker 和 Slave Broker芙盘,一個(gè) Master Broker 可以對(duì)應(yīng)多個(gè) Slave Broker,但是一個(gè) Slave Broker 只能對(duì)應(yīng)一個(gè) Master Broker脸秽。Broker 啟動(dòng)后需要完成一次將自己注冊(cè)至 Name Server 的操作儒老;隨后每隔 30s 定期向 Name Server 上報(bào) Topic 路由信息。
Broker中還存在一些非常重要的名詞需要說(shuō)明:
①Topic和Queue
RocketMQ中Topic只代表普通的消息隊(duì)列记餐,而Queue是組成Topic的更小單元驮樊,集群消費(fèi)模式下一個(gè)消費(fèi)者只消費(fèi)該Topic中部分Queue中的消息,當(dāng)一個(gè)消費(fèi)者開(kāi)啟廣播模式時(shí)則會(huì)消費(fèi)該Topic下所有Queue中的消息片酝。
具體可參考https://blog.csdn.net/binzhaomobile/article/details/73332463
②Tag
Topic 和 Tag 的定義如下:
Topic:消息主題囚衔,通過(guò) Topic 對(duì)不同的業(yè)務(wù)消息進(jìn)行分類。
Tag:消息標(biāo)簽雕沿,用來(lái)進(jìn)一步區(qū)分某個(gè) Topic 下的消息分類练湿,消息從生產(chǎn)者發(fā)出即帶上的屬性。
通常情況下审轮,不同的 Topic 之間的消息沒(méi)有必然的聯(lián)系肥哎,而 Tag 則用來(lái)區(qū)分同一個(gè) Topic 下相互關(guān)聯(lián)的消息。
Topic 與 Tag 最佳實(shí)踐
(3) Producer:與 Name Server 集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī))建立長(zhǎng)鏈接(Keep-alive)断国,定期從 Name Server 讀取 Topic 路由信息贤姆,并向提供 Topic 服務(wù)的 Master Broker 建立長(zhǎng)鏈接,且定時(shí)向 Master Broker 發(fā)送心跳稳衬。
(4) Consumer:與 Name Server 集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī))建立長(zhǎng)連接霞捡,定期從 Name Server 拉取 Topic 路由信息,并向提供 Topic 服務(wù)的 Master Broker薄疚、Slave Broker 建立長(zhǎng)連接碧信,且定時(shí)向 Master Broker赊琳、Slave Broker 發(fā)送心跳。Consumer 既可以從 Master Broker 訂閱消息砰碴,也可以從 Slave Broker 訂閱消息躏筏,訂閱規(guī)則由 Broker 配置決定。
3.2 集群搭建方式
3.2.1 集群特點(diǎn)
- NameServer是一個(gè)幾乎無(wú)狀態(tài)節(jié)點(diǎn)呈枉,節(jié)點(diǎn)之間不需要信息同步趁尼。每新加入一個(gè)NameServer,Broker會(huì)自動(dòng)上報(bào)信息猖辫。
- Producer完全無(wú)狀態(tài)酥泞,不需要數(shù)據(jù)同步。
- Consumer不需要數(shù)據(jù)同步啃憎。
- Broker部署相對(duì)復(fù)雜芝囤,Broker分為Master與Slave,一個(gè)Master可以對(duì)應(yīng)多個(gè) Slave辛萍,但是一個(gè)Slave只能對(duì)應(yīng)一個(gè)Master悯姊,Master與Slave的對(duì)應(yīng)關(guān)系通過(guò)指定相 同的BrokerName,不同的BrokerId來(lái)定義贩毕,BrokerId為0表示Master悯许,非0表示 Slave。Master也可以部署多個(gè)辉阶。
3.2.2 集群模式
1)單Master模式
這種方式風(fēng)險(xiǎn)較大岸晦,一旦Broker重啟或者宕機(jī)時(shí),會(huì)導(dǎo)致整個(gè)服務(wù)不可用睛藻。不建議線上 環(huán)境使用,可以用于本地測(cè)試。
2)多Master模式
一個(gè)集群無(wú)Slave邢隧,全是Master店印,例如2個(gè)Master或者3個(gè)Master,這種模式的優(yōu)缺點(diǎn)如 下:
- 優(yōu)點(diǎn):配置簡(jiǎn)單倒慧,單個(gè)Master宕機(jī)或重啟維護(hù)對(duì)應(yīng)用無(wú)影響按摘,在磁盤(pán)配置為RAID10 時(shí),即使機(jī)器宕機(jī)不可恢復(fù)情況下纫谅,由于RAID10磁盤(pán)非踌畔停可靠,消息也不會(huì)丟(異 步刷盤(pán)丟失少量消息付秕,同步刷盤(pán)一條不丟)兰珍,性能最高;
- 缺點(diǎn):?jiǎn)闻_(tái)機(jī)器宕機(jī)期間询吴,這臺(tái)機(jī)器上未被消費(fèi)的消息在機(jī)器恢復(fù)之前不可訂閱掠河,消 息實(shí)時(shí)性會(huì)受到影響亮元。
3)多Master多Slave模式(異步)
每個(gè)Master配置一個(gè)Slave,有多對(duì)Master-Slave唠摹,HA采用異步復(fù)制方式爆捞,主備有短暫 消息延遲(毫秒級(jí)),這種模式的優(yōu)缺點(diǎn)如下: - 優(yōu)點(diǎn):即使磁盤(pán)損壞勾拉,消息丟失的非常少煮甥,且消息實(shí)時(shí)性不會(huì)受影響,同時(shí)Master 宕機(jī)后藕赞,消費(fèi)者仍然可以從Slave消費(fèi)成肘,而且此過(guò)程對(duì)應(yīng)用透明,不需要人工干預(yù)找默, 性能同多Master模式幾乎一樣艇劫;
- 缺點(diǎn):Master宕機(jī),磁盤(pán)損壞情況下會(huì)丟失少量消息惩激。
4)多Master多Slave模式(同步)
每個(gè)Master配置一個(gè)Slave店煞,有多對(duì)Master-Slave,HA采用同步雙寫(xiě)方式风钻,即只有主備 都寫(xiě)成功顷蟀,才向應(yīng)用返回成功,這種模式的優(yōu)缺點(diǎn)如下: * 優(yōu)點(diǎn):數(shù)據(jù)與服務(wù)都無(wú)單點(diǎn)故障骡技,Master宕機(jī)情況下鸣个,消息無(wú)延遲,服務(wù)可用性與 數(shù)據(jù)可用性都非常高布朦; - 缺點(diǎn):性能比異步復(fù)制模式略低(大約低10%左右)囤萤,發(fā)送單個(gè)消息的RT會(huì)略高, 且目前版本在主節(jié)點(diǎn)宕機(jī)后是趴,備機(jī)不能自動(dòng)切換為主機(jī)涛舍。
3.3 雙主雙從集群搭建
3.3.1 總體架構(gòu)
消息高可用采用2m-2s(同步雙寫(xiě))方式
3.3.2 集群工作流程
- 啟動(dòng)NameServer,NameServer起來(lái)后監(jiān)聽(tīng)端口唆途,等待Broker富雅、Producer、 Consumer連上來(lái)肛搬,相當(dāng)于一個(gè)路由控制中心没佑。
- Broker啟動(dòng),跟所有的NameServer保持長(zhǎng)連接温赔,定時(shí)發(fā)送心跳包蛤奢。心跳包中包含當(dāng) 前Broker信息(IP+端口等)以及存儲(chǔ)所有Topic信息。注冊(cè)成功后,NameServer集群 中就有Topic跟Broker的映射關(guān)系远剩。
- 收發(fā)消息前扣溺,先創(chuàng)建Topic,創(chuàng)建Topic時(shí)需要指定該Topic要存儲(chǔ)在哪些Broker上瓜晤, 也可以在發(fā)送消息時(shí)自動(dòng)創(chuàng)建Topic锥余。
- Producer發(fā)送消息,啟動(dòng)時(shí)先跟NameServer集群中的其中一臺(tái)建立長(zhǎng)連接痢掠,并從 NameServer中獲取當(dāng)前發(fā)送的Topic存在哪些Broker上驱犹,輪詢從隊(duì)列列表中選擇一 個(gè)隊(duì)列,然后與隊(duì)列所在的Broker建立長(zhǎng)連接從而向Broker發(fā)消息足画。
- Consumer跟Producer類似雄驹,跟其中一臺(tái)NameServer建立長(zhǎng)連接,獲取當(dāng)前訂閱 Topic存在哪些Broker上淹辞,然后直接跟Broker建立連接通道医舆,開(kāi)始消費(fèi)消息。
3.3.3 服務(wù)器環(huán)境
IP | 角色 | 架構(gòu)模式 |
---|---|---|
192.168.217.130 | nameserver象缀、brokerserver | Master1 |
192.168.217.132 | nameserver蔬将、brokerserver | Master2 |
192.168.217.133 | nameserver、brokerserver | Slave1 |
192.168.217.134 | nameserver央星、brokerserver | Slave2 |
3.3.4 添加Host信息(四臺(tái)服務(wù)器都要配置)
vim /etc/hosts
配置如下:
# nameserver
192.168.217.130 rocketmq‐nameserver1
192.168.217.132 rocketmq‐nameserver2
192.168.217.133 rocketmq‐nameserver3
192.168.217.134 rocketmq‐nameserver4
# broker
192.168.217.130 rocketmq‐master1
192.168.217.132 rocketmq‐master2
192.168.217.133 rocketmq‐slave1
192.168.217.134 rocketmq‐slave2
配置完成后, 重啟網(wǎng)卡
systemctl restart network
3.3.5 防火墻配置 (四臺(tái)服務(wù)器都要配置)
宿主機(jī)需要遠(yuǎn)程訪問(wèn)虛擬機(jī)的rocketmq服務(wù)和web服務(wù)霞怀,需要開(kāi)放相關(guān)的端口號(hào),簡(jiǎn)單 粗暴的方式是直接關(guān)閉防火墻
# 安裝 firewall-cmd 和 systemctl 命令
yum install firewalld systemd -y
# 關(guān)閉防火墻
systemctl stop firewalld.service
# 查看防火墻的狀態(tài)
firewall-cmd --state
# 禁止firewall開(kāi)機(jī)啟動(dòng)
systemctl disable firewalld.service
或者為了安全莉给,只開(kāi)放特定的端口號(hào)毙石,RocketMQ默認(rèn)使用3個(gè)端口:9876 、10911 颓遏、 11011 徐矩。如果防火墻沒(méi)有關(guān)閉的話,那么防火墻就必須開(kāi)放這些端口:
- nameserver 默認(rèn)使用 9876 端口
- master 默認(rèn)使用 10911 端口
- slave 默認(rèn)使用11011 端口
執(zhí)行以下命令:
# 開(kāi)放name server默認(rèn)端口
firewall-cmd --remove-port=9876/tcp --permanent
# 開(kāi)放master默認(rèn)端口
firewall-cmd --remove-port=10911/tcp --permanent
# 開(kāi)放slave默認(rèn)端口 (當(dāng)前集群模式可不開(kāi)啟)
firewall-cmd --remove‐port=11011/tcp --permanent
# 重啟防火墻
firewall-cmd --reload
3.3.6 環(huán)境變量配置(四臺(tái)臺(tái)服務(wù)器都要配置)
vim /etc/profile
在profile文件的末尾加入如下命令
#set rocketmq
ROCKETMQ_HOME=/usr/local/rocketmq
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
輸入:wq! 保存并退出叁幢, 并使得配置立刻生效:
source /etc/profile
3.3.7 創(chuàng)建消息存儲(chǔ)路徑(四臺(tái)服務(wù)器都要配置)
[root@rocketmq‐nameserver1 local]# cd rocketmq/
[root@rocketmq‐nameserver1 rocketmq]# mkdir logs
[root@rocketmq‐nameserver1 rocketmq]# mkdir store
[root@rocketmq‐nameserver1 rocketmq]# cd store/
[root@rocketmq‐nameserver1 store]# mkdir commitlog
[root@rocketmq‐nameserver1 store]# mkdir consumequene
[root@rocketmq‐nameserver1 store]# mkdir index
進(jìn)入conf目錄丧蘸,使用命令替換所有xml文件中的${user.home},保證日志路徑正確
sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml
3.3.8 修改默認(rèn)JVM大小
# 編輯bin目錄下的runbroker.sh和runserver.sh
vi runbroker.sh
vi runserver.sh
# runserver.sh修改前
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# runserver.sh修改后
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# runbroker.sh修改前
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
# runbroker.sh修改后
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g"
3.3.9 broker配置文件
1)master1
服務(wù)器192.168.217.130
此時(shí)通過(guò)jps命令查看RocketMQ是否正在運(yùn)行遥皂,如果運(yùn)行中需要關(guān)閉它,關(guān)閉命令參考2.2
vi /usr/local/rocketmq/conf/2m‐2s‐sync/broker‐a.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq‐cluster
#broker名字刽漂,注意此處不同的配置文件填寫(xiě)的不一樣
brokerName=broker‐a
#0 表示 Master演训,>0 表示 Slave
brokerId=0
#nameServer地址,分號(hào)分割
namesrvAddr=rocketmq‐nameserver1:9876;rocketmq‐nameserver2:9876;rocketmq‐nameserver3:9876
;rocketmq‐nameserver4:9876
#在發(fā)送消息時(shí)贝咙,自動(dòng)創(chuàng)建服務(wù)器不存在的topic样悟,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic,建議線下開(kāi)啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組窟她,建議線下開(kāi)啟陈症,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽(tīng)端口
listenPort=10911
#刪除文件時(shí)間點(diǎn),默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間震糖,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條录肯,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測(cè)物理文件磁盤(pán)空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#‐ ASYNC_MASTER 異步復(fù)制Master
#‐ SYNC_MASTER 同步雙寫(xiě)Master
#‐ SLAVE
brokerRole=SYNC_MASTER
#刷盤(pán)方式
#‐ ASYNC_FLUSH 異步刷盤(pán)
#‐ SYNC_FLUSH 同步刷盤(pán)
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
2)master2
服務(wù)器192.168.217.132
vi /usr/local/rocketmq/conf/2m‐2s‐sync/broker‐b.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq‐cluster
#broker名字,注意此處不同的配置文件填寫(xiě)的不一樣
brokerName=broker‐b
#0 表示 Master吊说,>0 表示 Slave
brokerId=0 #nameServer地址论咏,分號(hào)分割
namesrvAddr=rocketmq‐nameserver1:9876;rocketmq‐nameserver2:9876;rocketmq‐nameserver3:9876
;rocketmq‐nameserver4:9876
#在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的topic颁井,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic厅贪,建議線下開(kāi)啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組雅宾,建議線下開(kāi)啟养涮,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽(tīng)端口
listenPort=10911
#刪除文件時(shí)間點(diǎn),默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間眉抬,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條贯吓,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測(cè)物理文件磁盤(pán)空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#‐ ASYNC_MASTER 異步復(fù)制Master
#‐ SYNC_MASTER 同步雙寫(xiě)Master
#‐ SLAVE
brokerRole=SYNC_MASTER
#刷盤(pán)方式
#‐ ASYNC_FLUSH 異步刷盤(pán)
#‐ SYNC_FLUSH 同步刷盤(pán)
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
3)slave1
服務(wù)器192.168.217.133
vi /usr/local/rocketmq/conf/2m‐2s‐sync/broker‐a‐s.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq‐cluster
#broker名字,注意此處不同的配置文件填寫(xiě)的不一樣
brokerName=broker‐a
#0 表示 Master吐辙,>0 表示 Slave
brokerId=1
#nameServer地址宣决,分號(hào)分割
namesrvAddr=rocketmq‐nameserver1:9876;rocketmq‐nameserver2:9876;rocketmq‐nameserver3:9876
;rocketmq‐nameserver4:9876
#在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的topic昏苏,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic尊沸,建議線下開(kāi)啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組贤惯,建議線下開(kāi)啟洼专,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽(tīng)端口
listenPort=11011
#刪除文件時(shí)間點(diǎn),默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間孵构,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條屁商,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測(cè)物理文件磁盤(pán)空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#‐ ASYNC_MASTER 異步復(fù)制Master
#‐ SYNC_MASTER 同步雙寫(xiě)Master
#‐ SLAVE
brokerRole=SLAVE #刷盤(pán)方式
#‐ ASYNC_FLUSH 異步刷盤(pán)
#‐ SYNC_FLUSH 同步刷盤(pán)
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
4)slave2
服務(wù)器192.168.217.134
vi /usr/local/rocketmq/conf/2m‐2s‐sync/broker‐b‐s.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq‐cluster
#broker名字,注意此處不同的配置文件填寫(xiě)的不一樣
brokerName=broker‐b
#0 表示 Master颈墅,>0 表示 Slave
brokerId=1
#nameServer地址蜡镶,分號(hào)分割
namesrvAddr=rocketmq‐nameserver1:9876;rocketmq‐nameserver2:9876;rocketmq‐nameserver3:9876
;rocketmq‐nameserver4:9876 #在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的topic恤筛,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic官还,建議線下開(kāi)啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組毒坛,建議線下開(kāi)啟望伦,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽(tīng)端口
listenPort=11011
#刪除文件時(shí)間點(diǎn)林说,默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條屯伞,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測(cè)物理文件磁盤(pán)空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#‐ ASYNC_MASTER 異步復(fù)制Master
#‐ SYNC_MASTER 同步雙寫(xiě)Master
#‐ SLAVE
brokerRole=SLAVE
#刷盤(pán)方式
#‐ ASYNC_FLUSH 異步刷盤(pán)
#‐ SYNC_FLUSH 同步刷盤(pán)
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
3.3.10 服務(wù)啟動(dòng)
1)啟動(dòng)NameServe集群
分別在四臺(tái)服務(wù)器啟動(dòng)NameServer
cd /usr/local/rocketmq/bin
nohup sh mqnamesrv &
2)啟動(dòng)Broker集群
- 在192.168.217.130上啟動(dòng)master1
cd /usr/local/rocketmq/bin
nohup sh mqbroker ‐c /usr/local/rocketmq/conf/2m-2s-sync/broker-a.properties > /dev/null 2>&1 &
- 在192.168.217.132上啟動(dòng)master2
cd /usr/local/rocketmq/bin
nohup sh mqbroker ‐c /usr/local/rocketmq/conf/2m-2s-sync/broker-b.properties > /dev/null 2>&1 &
- 在192.168.217.133啟動(dòng)slave1
cd /usr/local/rocketmq/bin
nohup sh mqbroker ‐c /usr/local/rocketmq/conf/2m-2s-sync/broker-a-s.properties > /dev/null 2>&1 &
- 在192.168.217.134上啟動(dòng)slave2
cd /usr/local/rocketmq/bin
nohup sh mqbroker ‐c /usr/local/rocketmq/conf/2m-2s-sync/broker-b-s.properties > /dev/null 2>&1 &
3.3.11 查看進(jìn)程狀態(tài)
[root@localhost bin]# jps
3107 NamesrvStartup
3131 BrokerStartup
3231 Jps
3.3.12 查看日志
# 查看nameServer日志
tail ‐500f rocketmq/logs/rocketmqlogs/namesrv.log
# 查看broker日志
tail ‐500f rocketmq/logs/rocketmqlogs/broker.log
3.4 mqadmin管理工具
進(jìn)入RocketMQ安裝位置腿箩,在bin目錄下執(zhí)行
./mqadmin {command} {args}
詳細(xì)命令可參考https://www.iteye.com/blog/jameswxx-2091971
注意事項(xiàng)
- 幾乎所有命令都需要配置-n表示NameServer地址,格式為ip:port
- 幾乎所有命令都可以通過(guò)-h獲取幫助
- 如果既有Broker地址(-b)配置項(xiàng)又有clusterName(-c)配置項(xiàng)劣摇,則優(yōu)先以Broker 地址執(zhí)行命令珠移;如果不配置Broker地址,則對(duì)集群中所有主機(jī)執(zhí)行命令
3.5 集群監(jiān)控平臺(tái)搭建
除了通過(guò)命令行的方式可以對(duì)集群進(jìn)行管理饵撑,我們還可以使用控制臺(tái)對(duì)集群進(jìn)行管理剑梳。我們?cè)诓渴饐喂?jié)點(diǎn)集群時(shí)已經(jīng)說(shuō)明了它的使用方法,只需要修改項(xiàng)目的namesrvAddr即可滑潘。
rocketmq.config.namesrvAddr=192.168.217.130:9876;192.168.217.132:9876;192.168.217.133:9876;192.168.217.134:9876