rocketmq總結(jié)以及自動(dòng)化部署策略

RocketMQ總結(jié)

1 rocketmq是什么围苫?

what_is_rocketmq.png

是一個(gè)隊(duì)列模型的消息中間件,具有高性能弛矛、高可靠够吩、高實(shí)時(shí)、分布式特點(diǎn)丈氓。

  • Producer、Consumer强法、隊(duì)列都可以分布式万俗。
  • Producer 向一些隊(duì)列輪流發(fā)送消息,隊(duì)列集合稱為 Topic饮怯,Consumer 如果做廣播消費(fèi)闰歪,則一個(gè) consumer

實(shí)例消費(fèi)這個(gè) Topic 對(duì)應(yīng)的所有隊(duì)列,如果做集群消費(fèi)蓖墅,則多個(gè) Consumer 實(shí)例平均消費(fèi)這個(gè) topic 對(duì)應(yīng)的隊(duì)列集合库倘。

  • 能夠保證嚴(yán)格的消息順序
  • 提供豐富的消息拉取模式
  • 高效的訂閱者水平擴(kuò)展能力
  • 實(shí)時(shí)的消息訂閱機(jī)制
  • 億級(jí)消息堆積能力
  • 較少的依賴

2 rocketmq網(wǎng)絡(luò)結(jié)構(gòu)

rocketmq網(wǎng)絡(luò)架構(gòu)

RocketMQ 網(wǎng)絡(luò)部署特點(diǎn)

  • Name Server 是一個(gè)幾乎無(wú)狀態(tài)節(jié)點(diǎn),可集群部署论矾,節(jié)點(diǎn)之間無(wú)任何信息同步教翩。

  • 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è)配猫。每個(gè) Broker 與 Name Server 集群中的所有節(jié)點(diǎn)建立長(zhǎng)連接,定時(shí)注冊(cè) Topic 信息到所有 Name Server杏死。

  • Producer 與 Name Server 集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長(zhǎng)連接泵肄,定期從 Name Server 取 Topic 路由信息捆交,并向提供 Topic 服務(wù)的 Master 建立長(zhǎng)連接,且定時(shí)向 Master 發(fā)送心跳凡伊。Producer 完全無(wú)狀態(tài)零渐,可集群部署。

  • Consumer 與 Name Server 集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長(zhǎng)連接系忙,定期從 Name Server 取 Topic 路由信息诵盼,并向提供 Topic 服務(wù)的 Master、Slave 建立長(zhǎng)連接银还,且定時(shí)向 Master风宁、Slave 發(fā)送心跳。Consumer既可以從 Master 訂閱消息蛹疯,也可以從 Slave 訂閱消息戒财,訂閱規(guī)則由 Broker 配置決定。

3 模塊功能特性

3.1 Namesrv

  1. Namesrv用于存儲(chǔ)Topic捺弦、Broker關(guān)系信息饮寞,功能簡(jiǎn)單,穩(wěn)定性高列吼。多個(gè)Namesrv之間相互沒(méi)有通信幽崩,單臺(tái)Namesrv宕機(jī)不影響其他Namesrv與集群;即使整個(gè)Namesrv集群宕機(jī)寞钥,已經(jīng)正常工作的Producer慌申,Consumer,Broker仍然能正常工作理郑,但新起的Producer, Consumer蹄溉,Broker就無(wú)法工作。

  2. Namesrv壓力不會(huì)太大您炉,平時(shí)主要開銷是在維持心跳和提供Topic-Broker的關(guān)系數(shù)據(jù)柒爵。但有一點(diǎn)需要注意,Broker向Namesr發(fā)心跳時(shí)邻吭,會(huì)帶上當(dāng)前自己所負(fù)責(zé)的所有Topic信息餐弱,如果Topic個(gè)數(shù)太多(萬(wàn)級(jí)別),會(huì)導(dǎo)致一次心跳中囱晴,就Topic的數(shù)據(jù)就幾十M膏蚓,網(wǎng)絡(luò)情況差的話,網(wǎng)絡(luò)傳輸失敗畸写,心跳失敗驮瞧,導(dǎo)致Namesrv誤認(rèn)為Broker心跳失敗。

3.2 Broker

1)高并發(fā)讀寫服務(wù)

Broker的高并發(fā)讀寫主要是依靠以下兩點(diǎn):

  • 消息順序?qū)?/strong>枯芬,所有Topic數(shù)據(jù)同時(shí)只會(huì)寫一個(gè)文件论笔,一個(gè)文件滿1G采郎,再寫新文件,真正的順序?qū)懕P狂魔,使得發(fā)消息TPS大幅提高蒜埋。
  • 消息隨機(jī)讀,RocketMQ盡可能讓讀命中系統(tǒng)pagecache最楷,因?yàn)椴僮飨到y(tǒng)訪問(wèn)pagecache時(shí)整份,即使只訪問(wèn)1K的消息,系統(tǒng)也會(huì)提前預(yù)讀出更多的數(shù)據(jù)籽孙,在下次讀時(shí)就可能命中pagecache烈评,減少IO操作。

2) 負(fù)載均衡與動(dòng)態(tài)伸縮

負(fù)載均衡:Broker上存Topic信息犯建,Topic由多個(gè)隊(duì)列組成讲冠,隊(duì)列會(huì)平均分散在多個(gè)Broker上,而Producer的發(fā)送機(jī)制保證消息盡量平均分布到所有隊(duì)列中适瓦,最終效果就是所有消息都平均落在每個(gè)Broker上竿开。

動(dòng)態(tài)伸縮能力(非順序消息):Broker的伸縮性體現(xiàn)在兩個(gè)維度:Topic, Broker。

  • Topic維度:假如一個(gè)Topic的消息量特別大玻熙,但集群水位壓力還是很低德迹,就可以擴(kuò)大該Topic的隊(duì)列數(shù),Topic的隊(duì)列數(shù)跟發(fā)送揭芍、消費(fèi)速度成正比。
  • Broker維度:如果集群水位很高了卸例,需要擴(kuò)容称杨,直接加機(jī)器部署B(yǎng)roker就可以。Broker起來(lái)后想Namesrv注冊(cè)筷转,Producer姑原、Consumer通過(guò)Namesrv發(fā)現(xiàn)新Broker,立即跟該Broker直連呜舒,收發(fā)消息锭汛。

3) 高可用&高可靠

高可用:集群部署時(shí)一般都為主備,備機(jī)實(shí)時(shí)從主機(jī)同步消息袭蝗,如果其中一個(gè)主機(jī)宕機(jī)唤殴,備機(jī)提供消費(fèi)服務(wù),但不提供寫服務(wù)到腥。

高可靠:所有發(fā)往broker的消息朵逝,有同步刷盤和異步刷盤機(jī)制;同步刷盤時(shí)乡范,消息寫入物理文件才會(huì)返回成功配名,異步刷盤時(shí)啤咽,只有機(jī)器宕機(jī),才會(huì)產(chǎn)生消息丟失渠脉,broker掛掉可能會(huì)發(fā)生宇整,但是機(jī)器宕機(jī)崩潰是很少發(fā)生的,除非突然斷電

4)Broker與Namesrv的心跳機(jī)制
單個(gè)Broker跟所有Namesrv保持心跳請(qǐng)求芋膘,心跳間隔為30秒鳞青,心跳請(qǐng)求中包括當(dāng)前Broker所有的Topic信息。Namesrv會(huì)反查Broer的心跳信息索赏,如果某個(gè)Broker在2分鐘之內(nèi)都沒(méi)有心跳盼玄,則認(rèn)為該Broker下線,調(diào)整Topic跟Broker的對(duì)應(yīng)關(guān)系潜腻。但此時(shí)Namesrv不會(huì)主動(dòng)通知Producer埃儿、Consumer有Broker宕機(jī)。

3.3 消費(fèi)者

消費(fèi)者啟動(dòng)時(shí)需要指定Namesrv地址融涣,與其中一個(gè)Namesrv建立長(zhǎng)連接童番。消費(fèi)者每隔30秒從nameserver獲取所有topic的最新隊(duì)列情況,這意味著某個(gè)broker如果宕機(jī)威鹿,客戶端最多要30秒才能感知剃斧。連接建立后,從namesrv中獲取當(dāng)前消費(fèi)Topic所涉及的Broker忽你,直連Broker幼东。

Consumer跟Broker是長(zhǎng)連接,會(huì)每隔30秒發(fā)心跳信息到Broker科雳。Broker端每10秒檢查一次當(dāng)前存活的Consumer根蟹,若發(fā)現(xiàn)某個(gè)Consumer 2分鐘內(nèi)沒(méi)有心跳,就斷開與該Consumer的連接糟秘,并且向該消費(fèi)組的其他實(shí)例發(fā)送通知简逮,觸發(fā)該消費(fèi)者集群的負(fù)載均衡。

消費(fèi)者端的負(fù)載均衡
先討論消費(fèi)者的消費(fèi)模式尿赚,消費(fèi)者有兩種模式消費(fèi):集群消費(fèi)散庶,廣播消費(fèi)。

  • 廣播消費(fèi):每個(gè)消費(fèi)者消費(fèi)Topic下的所有隊(duì)列凌净。
  • 集群消費(fèi):一個(gè)topic可以由同一個(gè)ID下所有消費(fèi)者分擔(dān)消費(fèi)悲龟。具體例子:假如TopicA有6個(gè)隊(duì)列,某個(gè)消費(fèi)者ID起了2個(gè)消費(fèi)者實(shí)例泻蚊,那么每個(gè)消費(fèi)者負(fù)責(zé)消費(fèi)3個(gè)隊(duì)列躲舌。如果再增加一個(gè)消費(fèi)者ID相同消費(fèi)者實(shí)例,即當(dāng)前共有3個(gè)消費(fèi)者同時(shí)消費(fèi)6個(gè)隊(duì)列性雄,那每個(gè)消費(fèi)者負(fù)責(zé)2個(gè)隊(duì)列的消費(fèi)没卸。

消費(fèi)者端的負(fù)載均衡羹奉,就是集群消費(fèi)模式下,同一個(gè)ID的所有消費(fèi)者實(shí)例平均消費(fèi)該Topic的所有隊(duì)列约计。

3.4 生產(chǎn)者(Producer)

Producer啟動(dòng)時(shí)诀拭,也需要指定Namesrv的地址,從Namesrv集群中選一臺(tái)建立長(zhǎng)連接煤蚌。如果該Namesrv宕機(jī)耕挨,會(huì)自動(dòng)連其他Namesrv。直到有可用的Namesrv為止尉桩。

生產(chǎn)者每30秒從Namesrv獲取Topic跟Broker的映射關(guān)系筒占,更新到本地內(nèi)存中。再跟Topic涉及的所有Broker建立長(zhǎng)連接蜘犁,每隔30秒發(fā)一次心跳翰苫。在Broker端也會(huì)每10秒掃描一次當(dāng)前注冊(cè)的Producer,如果發(fā)現(xiàn)某個(gè)Producer超過(guò)2分鐘都沒(méi)有發(fā)心跳这橙,則斷開連接奏窑。

生產(chǎn)者端的負(fù)載均衡

生產(chǎn)者發(fā)送時(shí),會(huì)自動(dòng)輪詢當(dāng)前所有可發(fā)送的broker屈扎,一條消息發(fā)送成功埃唯,下次換另外一個(gè)broker發(fā)送,以達(dá)到消息平均落到所有的broker上鹰晨。

這里需要注意一點(diǎn):假如某個(gè)Broker宕機(jī)墨叛,意味生產(chǎn)者最長(zhǎng)需要30秒才能感知到。在這期間會(huì)向宕機(jī)的Broker發(fā)送消息模蜡。當(dāng)一條消息發(fā)送到某個(gè)Broker失敗后巍实,會(huì)往該broker自動(dòng)再重發(fā)2次,假如還是發(fā)送失敗哩牍,則拋出發(fā)送失敗異常。業(yè)務(wù)捕獲異常令漂,重新發(fā)送即可膝昆。客戶端里會(huì)自動(dòng)輪詢另外一個(gè)Broker重新發(fā)送叠必,這個(gè)對(duì)于用戶是透明的荚孵。

4 集群說(shuō)明

  • 單個(gè) Master

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

  • 多 Master 模式(2m-noslave)

    brokerClusterName brokerName brokerRole brokerId
    DefaultCluster broker-a ASYNC_MASTER 0
    DefaultCluster broker-b ASYNC_MASTER 0
    說(shuō)明:一個(gè)集群無(wú) Slave共苛,全是 Master判没,例如 2 個(gè) Master 或者 3 個(gè) Master優(yōu)點(diǎn):配置簡(jiǎn)單蜓萄,單個(gè)Master 宕機(jī)或重啟維護(hù)對(duì)應(yīng)用無(wú)影響,在磁盤配置為RAID10 時(shí)澄峰,即使機(jī)器宕機(jī)不可恢復(fù)情況下嫉沽,由與 RAID10磁盤非常可靠俏竞,消息也不會(huì)丟(異步刷盤丟失少量消息绸硕,同步刷盤一條不丟)。性能最高魂毁。
    
    缺點(diǎn):?jiǎn)闻_(tái)機(jī)器宕機(jī)期間玻佩,這臺(tái)機(jī)器上未被消費(fèi)的消息在機(jī)器恢復(fù)之前不可訂閱,消息實(shí)時(shí)性會(huì)受到受到影響席楚。
    
    啟動(dòng)說(shuō)明:先啟動(dòng) NameServer在機(jī)器 A咬崔,啟動(dòng)第一個(gè) Master在機(jī)器 B,啟動(dòng)第二個(gè) Master
    
    
  • 多 Master 多 Slave 模式酣胀,異步復(fù)制(2m-2s-async)

    brokerClusterName brokerName brokerRole brokerId
    DefaultCluster broker-a ASYNC_MASTER 0
    DefaultCluster broker-a SLAVE 1
    DefaultCluster broker-b ASYNC_MASTER 0
    DefaultCluster broker-b SLAVE 1
    說(shuō)明:每個(gè) Master 配置一個(gè) Slave刁赦,有多對(duì)Master-Slave,HA闻镶。采用異步復(fù)制方式甚脉,主備有短暫消息延遲,毫秒級(jí)铆农。
    
    優(yōu)點(diǎn):即使磁盤損壞牺氨,消息丟失的非常少,且消息實(shí)時(shí)性不會(huì)受影響墩剖,因?yàn)镸aster 宕機(jī)后猴凹,消費(fèi)者仍然可以從 Slave消費(fèi),此過(guò)程對(duì)應(yīng)用透明岭皂。不需要人工干預(yù)郊霎。性能同多 Master 模式幾乎一樣。
    
    缺點(diǎn):Master 宕機(jī)爷绘,磁盤損壞情況书劝,會(huì)丟失少量消息。
    
    啟動(dòng)說(shuō)明:
      先啟動(dòng) NameServer
      在機(jī)器 A土至,啟動(dòng)第一個(gè) Master
      在機(jī)器 B购对,啟動(dòng)第二個(gè) Master
      在機(jī)器 C,啟動(dòng)第一個(gè) Slave
      在機(jī)器 D陶因,啟動(dòng)第二個(gè) Slave
    
  • **多 Master 多 Slave 模式骡苞,同步雙寫(2m-2s-sync) **

brokerClusterName brokerName brokerRole brokerId
DefaultCluster broker-a SYNC_MASTER 0
DefaultCluster broker-a SLAVE 1
DefaultCluster broker-b SYNC_MASTER 0
DefaultCluster broker-b SLAVE 1
說(shuō)明:每個(gè) Master 配置一個(gè) Slave,有多對(duì)Master-Slave,HA解幽。采用同步雙寫方式贴见,主備都寫成功,向應(yīng)用返回成功亚铁。

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

缺點(diǎn):性能比異步復(fù)制模式略低吞琐,大約低10%左右,發(fā)送單個(gè)消息的RT會(huì)略高然爆。目前主宕機(jī)后站粟,備機(jī)不能自動(dòng)切換為主機(jī),后續(xù)會(huì)支持自動(dòng)切換功能曾雕。

啟動(dòng)說(shuō)明:
  先啟動(dòng) NameServer
  在機(jī)器 A奴烙,啟動(dòng)第一個(gè) Master
  在機(jī)器 B,啟動(dòng)第二個(gè) Master
  在機(jī)器 C剖张,啟動(dòng)第一個(gè) Slave
  在機(jī)器 D切诀,啟動(dòng)第二個(gè) Slave

以上 Broker 與 Slave 配對(duì)是通過(guò)指定相同的brokerName 參數(shù)來(lái)配對(duì),Master
的 BrokerId 必須是 0搔弄,Slave 的BrokerId 必須是大與 0 的數(shù)幅虑。另外一個(gè) Master
下面可以掛載多個(gè) Slave,同一 Master 下的多個(gè) Slave通過(guò)指定不同的 BrokerId
來(lái)區(qū)分顾犹。

5 集群部署案例-2m-2s-sync

5.1 環(huán)境說(shuō)明

1) 軟件及其機(jī)器

軟件及版本 下載地址
系統(tǒng) centos7 https://www.centos.org/download/
軟件 rocketmq-all-4.2.0 https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.2.0/rocketmq-all-4.2.0-source-release.zip
依賴 jdk1.8+ oracle官網(wǎng)
ip hostname 部署服務(wù) role/brokerid
192.168.59.2 mqnamesrv-*.env.rocketmq.com NameServer No
192.168.59.3 mqnamesrv-*.env.rocketmq.com NameServer No
192.168.59.4 mqbroker-*.env.rocketmq.com Broker SYNC_MASTER/0
192.168.59.5 mqbroker-*.env.rocketmq.com Broker SLAVE/1
192.168.59.6 mqbroker-*.env.rocketmq.com Broker SYNC_MASTER/0
192.168.59.7 mqbroker-*.env.rocketmq.com Broker SLAVE/1 表 5.2

綁定hosts或dns:

#測(cè)試環(huán)境hosts
#Name Server 提供給外部訪問(wèn)
192.168.59.2 nameserver1.rocketmq.test.com
192.168.59.3 nameserver2.rocketmq.test.com
#Broker Server 綁定網(wǎng)卡倒庵,方便擴(kuò)容
192.168.59.4 broker01.rocketmq.test.com
192.168.59.5 broker02.rocketmq.test.com
192.168.59.6 broker03.rocketmq.test.com
192.168.59.7 broker04.rocketmq.test.com

主機(jī)命名說(shuō)明:

主機(jī)名命名規(guī)范:項(xiàng)目名-隨機(jī)數(shù).環(huán)境.組件.公司/機(jī)房

例如:表5.2中第一行,項(xiàng)目名:mqnamesrv炫刷,部署環(huán)境:dev擎宝,ip:192.168.59.2,組件是rocketmq浑玛,命名主機(jī)名為:

mqnamesrv-192168059002.dev.rocketmq.com

該命名好處:通過(guò)主機(jī)名可以判斷當(dāng)前機(jī)器部署的服務(wù)以及部署環(huán)境绍申、機(jī)房情況,方便在報(bào)警系統(tǒng)里或者cmdb中很快判斷到該主機(jī)的的影響顾彰。

2) 多環(huán)境說(shuō)明

在實(shí)際應(yīng)用中都會(huì)涉及多環(huán)境的問(wèn)題失晴,比如有線下環(huán)境(dev)和生產(chǎn)環(huán)境(prod),不同環(huán)境的應(yīng)用最好保持配置一致拘央,減少各個(gè)每個(gè)環(huán)境的配置工作量。

Rocketmq各環(huán)境統(tǒng)一連接地址

NAMESRV_ADDR="nameserver1.rocketmq.test.com:9876;nameserver2.rocketmq.test.com:9876"

根據(jù)Rocketmq集群說(shuō)明书在,其實(shí)最終只需暴露nameserver的地址給應(yīng)用即可灰伟,因此,各個(gè)環(huán)境綁定各個(gè)環(huán)境對(duì)應(yīng)的hosts/dns即可使用統(tǒng)一連接的地址。

3) 打包部署

  • 編譯

    官方提供的是源碼包栏账,需要編譯成二進(jìn)制包:

      > unzip rocketmq-all-4.2.0-source-release.zip
      > cd rocketmq-all-4.2.0/
      > mvn -Prelease-all -DskipTests clean install -U
      > cd distribution/target/apache-rocketmq
    
  • 打包

    二進(jìn)制包雖然可以直接運(yùn)行帖族,批量安裝和批量管理以及不利于統(tǒng)一管理,這里我直接打成rpm包挡爵,規(guī)范目錄(安裝目錄竖般、日志目錄、數(shù)據(jù)目錄)茶鹃,指定rocketmq用戶運(yùn)行涣雕,設(shè)置服務(wù)自動(dòng)啟動(dòng)等;

    因?yàn)閚ameserver和broker基本上是一個(gè)包闭翩,只是啟動(dòng)命令不一樣挣郭,因此,打包也是打成一個(gè)包了疗韵,根據(jù)啟動(dòng)命令和當(dāng)前主機(jī)名判斷是何服務(wù)兑障。

    #使用fpm打rocketmq,然后上傳到y(tǒng)um倉(cāng)庫(kù)
    fpm -s dir -t rpm -n apache-rocketmq --epoch 1 -a 'x86_64' -v 4.2.0 --iteration 1.el7 -C rocketmq/root -d 'jdk >= 1.8.0' -d 'git' --license 'Apache License, Version 2.0' --description "Apache RocketMQ is a distributed messaging and streaming platform with low latency, high performance and reliability, trillion-level capacity and flexible scalability." --no-rpm-sign --url 'http://rocketmq.apache.org/' --before-install rocketmq/install_before.sh --after-install rocketmq/install_after.sh  --before-remove rocketmq/remove_before.sh
    
  • 部署

    打包以后蕉汪,部署非常簡(jiǎn)單流译,直接yum安裝

    #安裝rocketmq
    > yum install apache-rocketmq
    #啟動(dòng)/停止/重啟 NameServer 服務(wù)
    > systemctl start/stop/restart rocketmq-mqnamesrv
    #啟動(dòng)/停止/重啟 Broker 服務(wù)
    > systemctl start/stop/restart rocketmq-mqbroker
    
  • 配置文件

    NameServer沒(méi)有配置文件,直接可以啟動(dòng)

    Broker配置文件:配置基本上一致者疤,需要更改下表的一些內(nèi)容

    brokerClusterName brokerName brokerRole brokerId
    iotcls broker01 SYNC_MASTER 0
    iotcls broker01 SLAVE 1
    iotcls broker02 SYNC_MASTER 0
    iotcls broker02 SLAVE 1
    #broker.conf.j2
    brokerClusterName=iotcls
    brokerIP1={{broker_name}}-{{broker_id}}.rocketmq.test.com
    brokerIP2={{broker_name}}-{{broker_id}}.rocketmq.test.com
    brokerName={{broker_name}}
    brokerId={{broker_id}}
    deleteWhen=04
    fileReservedTime=48
    brokerRole={{broker_role}}
    flushDiskType=SYNC_FLUSH
    namesrvAddr=nameserver1.rocketmq.test.com:9876;nameserver2.rocketmq.test.com:9876
    

    需要注意的是:

    多網(wǎng)卡環(huán)境:需要配置brokerIP1(broker ip)和brokerIP2(ha ip)福澡,brokerIP1注冊(cè)到NameServer,brokerIP2 這個(gè)ip是master和slave同步數(shù)據(jù)的ip宛渐,如果不配置竞漾,默認(rèn)會(huì)選擇第一個(gè)網(wǎng)卡。

    BrokerName窥翩,master和slave組成一個(gè)broker group业岁,通過(guò)broker name來(lái)區(qū)別是否是一個(gè)broker group。

  • ansible role 一鍵部署

    ansible-playbook -i environments/dev/hosts rocketmq.yml
    

    ansible role配置文件說(shuō)明:

    rocketmq
    ├── README.md
    ├── defaults
    │   └── main.yml
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── tasks
    │   ├── install.yml
    │   ├── main.yml
    │   ├── mqbroker.yml
    │   └── mqnamesrv.yml
    ├── templates
    │   ├── broker.conf.j2
    │   ├── rocketmq-mqbroker.service
    │   └── rocketmq-mqnamesrv.service
    ├── tests
    │   ├── README.md
    │   ├── etc_hosts
    │   ├── inventory
    │   └── test.yml
    └── vars
        └── main.yml
    
    #rocetmq.yml
    - name: run rocketmq role for all hosts
      hosts: rocketmq
      roles:
        - { role: commons, tags: ["hosts"] }
    
    - name: run mqnamesrv
      hosts: mqnamesrv
      roles:
        - { role: "rocketmq", rocket_type: "mqnamesrv"}
    
    - name: run mqbroker
      hosts: mqbroker
      roles:
        - { role: "rocketmq", rocket_type: "mqbroker"}
    
    #hosts
    [rocketmq:children]
    mqnamesrv
    mqbroker
    
    [mqnamesrv]
    192.168.59.2
    192.168.59.3
    
    [mqbroker]
    192.168.59.3 broker_name="broker03" broker_id=0 broker_role=SYNC_MASTER
    192.168.59.4 broker_name="broker01" broker_id=0 broker_role=SYNC_MASTER
    192.168.59.5 broker_name="broker01" broker_id=1 broker_role=SLAVE
    192.168.59.6 broker_name="broker02" broker_id=0 broker_role=SYNC_MASTER
    192.168.59.7 broker_name="broker02" broker_id=1 broker_role=SLAVE
    
    [mqbroker:vars]
    PROJECT_NAME=mqbroker
    
    [mqnamesrv:vars]
    PROJECT_NAME=mqnamesrv
    
    #broker.conf.j2
    brokerClusterName=iotcls
    brokerIP1={{broker_name}}-{{broker_id}}.rocketmq.test.com
    brokerIP2={{broker_name}}-{{broker_id}}.rocketmq.test.com
    brokerName={{broker_name}}
    brokerId={{broker_id}}
    deleteWhen=04
    fileReservedTime=48
    brokerRole={{broker_role}}
    flushDiskType=SYNC_FLUSH
    namesrvAddr=nameserver1.rocketmq.test.com:9876;nameserver2.rocketmq.test.com:9876
    
    #role-rocketmq tasks/main.yml
    #install jdk1.8
    - include: ../../commons/tasks/jdk.yml
    
    - name: install apache-rocketmq
      yum: name=apache-rocketmq state=present
      tags: install_apache-rocketmq
    
    - name: Update mqnamesrv.service
      template:
        src: rocketmq-mqnamesrv.service
        dest: "/etc/systemd/system/"
        force: true
        owner: root
        group: root
        mode: "0755"
      notify: reload systemd
      when: rocket_type == 'mqnamesrv'
    
    - include: mqbroker.yml
      when: rocket_type == 'mqbroker'
    
    - name: enable apache-rocketmq
      service:
        name: "rocketmq-{{ rocket_type }}"
        state: started
        enabled: True
    
    handlers:
      - name: reload systemd
          command: "systemctl daemon-reload"
    
      - name: restart apache-rocketmq
        service:
          name: "rocketmq-{{ rocket_type }}"
          state: restarted
    
    #role-rocketmq tasks/mqbroker.yml
    ---
    - name: Update mqbroker.service
      template:
        src: rocketmq-mqbroker.service
        dest: "/etc/systemd/system/"
        force: true
        owner: root
        group: root
        mode: "0755"
      notify: reload systemd
    
    - name: update conf for mqbroker
      template:
        src: broker.conf.j2
        dest: "/opt/apache-rocketmq/conf/broker.conf"
        force: true
        owner: root
        group: root
        mode: "0755"
      notify: restart apache-rocketmq
    

4) 集群擴(kuò)容

rocketmq各個(gè)組件都支持橫向擴(kuò)容:

組件 擴(kuò)容
Producer 橫向擴(kuò)容寇蚊,添加機(jī)器
Consumer 橫向擴(kuò)容笔时,添加機(jī)器,數(shù)量<=隊(duì)列數(shù)(分區(qū))
NameServer 橫向擴(kuò)容仗岸,無(wú)狀態(tài)
Broker 橫向擴(kuò)容允耿,新增topic會(huì)自動(dòng)負(fù)載

5) WEB管理(rocketmq-console)

通過(guò)web可以查看集群狀態(tài),查看topic信息以及創(chuàng)建更改topic扒怖,管理producer和consumer等较锡。

#安裝 && 啟動(dòng)
mvn clean package -Dmaven.test.skip=true
java -jar target/rocketmq-console-ng-1.0.0.jar

用戶手冊(cè):https://github.com/apache/rocketmq-externals/blob/master/rocketmq-console/doc/1_0_0/UserGuide_CN.md

rocketmq-console-gui
rocketmq-console-2
rocketmq-topic
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盗痒,隨后出現(xiàn)的幾起案子蚂蕴,更是在濱河造成了極大的恐慌低散,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骡楼,死亡現(xiàn)場(chǎng)離奇詭異熔号,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鸟整,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門引镊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人篮条,你說(shuō)我怎么就攤上這事弟头。” “怎么了兑燥?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵亮瓷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我降瞳,道長(zhǎng)嘱支,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任挣饥,我火速辦了婚禮除师,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扔枫。我一直安慰自己汛聚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布短荐。 她就那樣靜靜地躺著倚舀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忍宋。 梳的紋絲不亂的頭發(fā)上痕貌,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音糠排,去河邊找鬼舵稠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛入宦,可吹牛的內(nèi)容都是我干的哺徊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼乾闰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼落追!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起涯肩,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤轿钠,失蹤者是張志新(化名)和其女友劉穎雹熬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谣膳,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年铅乡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了继谚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阵幸,死狀恐怖花履,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挚赊,我是刑警寧澤诡壁,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站荠割,受9級(jí)特大地震影響妹卿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔑鹦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一夺克、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嚎朽,春花似錦铺纽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至锅很,卻和暖如春其馏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粗蔚。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工尝偎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹏控。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓致扯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親当辐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抖僵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348