這 4 種高可用 RocketMQ 集群搭建方案罪裹,推薦最后一種。疗锐。坊谁。

背景

筆者所在的業(yè)務(wù)線,最初化分為三個(gè)服務(wù)滑臊,由于業(yè)務(wù)初期業(yè)務(wù)復(fù)雜度相對簡單口芍,三個(gè)業(yè)務(wù)服務(wù)都能很好的獨(dú)立完成業(yè)務(wù)功能。

隨著產(chǎn)品迭代雇卷,業(yè)務(wù)功能越來越多后慢慢也要面對高并發(fā)鬓椭、業(yè)務(wù)解耦颠猴、分布式事務(wù)等問題,所以經(jīng)過團(tuán)隊(duì)內(nèi)部討論小染,引入 RocketMQ 消息中間件來更好的處理業(yè)務(wù)翘瓮。

由于公司內(nèi)部業(yè)務(wù)線部署相互獨(dú)立,我們業(yè)務(wù)線對引入 RocketMQ 的需求也比較急切裤翩,所以打算自己搭建一套高可用的 RocketMQ 集群资盅,同時(shí)對于自建的 RocketMQ 集群需要如下特性:

  • 高可用
  • 高并發(fā)
  • 可伸縮
  • 海量消息

命名服務(wù)(NameServer)

首先第一步要讓 NameServer 高可用,前期規(guī)劃了三臺(tái)機(jī)器部署 NamseServer 這樣可以充分保證可用性踊赠,即使兩臺(tái)機(jī)器掛掉也能保證集群的正常使用呵扛,只要有一個(gè) NamseServer 還在運(yùn)行,就能保證 RocketMQ 系統(tǒng)的穩(wěn)定性筐带。

image

NameServer 的設(shè)計(jì)是相互的獨(dú)立的今穿,任何一臺(tái) NameServer 都可以的獨(dú)立運(yùn)行,跟其他機(jī)器沒有任何通信伦籍。
每臺(tái) NameServer 都會(huì)有完整的集群路由信息蓝晒,包括所有的 Broker 節(jié)點(diǎn)的信息,我們的數(shù)據(jù)信息等等帖鸦。所以只要任何一臺(tái) NamseServer 存活下來芝薇,就可以保存 RocketMQ 信息的正常運(yùn)行,不會(huì)出現(xiàn)故障富蓄。

Broker 集群部署架構(gòu)

開始部署 RocketMQ 之前剩燥,我們也做過一些功課,對現(xiàn)在 RocketMQ 支持的集群方案做了一些整理立倍,目前 RocketMQ 支持的集群部署方案有以下4種:

  • 多Master模式:一個(gè)集群無Slave灭红,全是Master,例如2個(gè)Master或者3個(gè)Master
  • 多Master多Slave模式-異步復(fù)制:每個(gè)Master配置一個(gè)Slave口注,有多對Master-Slave变擒,HA采用異步復(fù)制方式,主備有短暫消息延遲(毫秒級)
  • 多Master多Slave模式-同步雙寫:每個(gè)Master配置一個(gè)Slave寝志,有多對Master-Slave娇斑,HA采用同步雙寫方式,即只有主備都寫成功材部,才向應(yīng)用返回成功
  • Dledger部署:每個(gè)Master配置二個(gè) Slave 組成 Dledger Group毫缆,可以有多個(gè) Dledger Group,由 Dledger 實(shí)現(xiàn) Master 選舉

多 Master 模式

一個(gè) RocketMQ 集群中所有的節(jié)點(diǎn)都是 Master 節(jié)點(diǎn)乐导,每個(gè) Master 節(jié)點(diǎn)沒有 Slave 節(jié)點(diǎn)苦丁。

image

這種模式的優(yōu)缺點(diǎn)如下:

  • 優(yōu)點(diǎn):配置簡單,單個(gè)Master宕機(jī)或重啟維護(hù)對應(yīng)用無影響物臂,在磁盤配置為RAID10時(shí)旺拉,即使機(jī)器宕機(jī)不可恢復(fù)情況下产上,由于RAID10磁盤非常可靠蛾狗,消息也不會(huì)丟(異步刷盤丟失少量消息晋涣,同步刷盤一條不丟),性能最高沉桌;
  • 缺點(diǎn):單臺(tái)機(jī)器宕機(jī)期間谢鹊,這臺(tái)機(jī)器上未被消費(fèi)的消息在機(jī)器恢復(fù)之前不可訂閱,消息實(shí)時(shí)性會(huì)受到影響蒲牧。

多 Master 多 Salve - 異步復(fù)制 模式

每個(gè)Master配置一個(gè)Slave撇贺,有多對Master-Slave赌莺,HA采用異步復(fù)制方式冰抢,主備有短暫消息延遲(毫秒級)

image

這種模式的優(yōu)缺點(diǎn)如下:

  • 優(yōu)點(diǎn):即使磁盤損壞,消息丟失的非常少艘狭,且消息實(shí)時(shí)性不會(huì)受影響挎扰,同時(shí)Master宕機(jī)后,消費(fèi)者仍然可以從Slave消費(fèi)巢音,而且此過程對應(yīng)用透明遵倦,不需要人工干預(yù),性能同多Master模式幾乎一樣官撼;
  • 缺點(diǎn):Master宕機(jī)梧躺,磁盤損壞情況下會(huì)丟失少量消息。

多 Master 多 Salve - 同步雙寫 模式

每個(gè)Master配置一個(gè)Slave傲绣,有多對Master-Slave掠哥,HA采用同步雙寫方式,即只有主備都寫成功秃诵,才向應(yīng)用返回成功

image

這種模式的優(yōu)缺點(diǎn)如下:

  • 優(yōu)點(diǎn):數(shù)據(jù)與服務(wù)都無單點(diǎn)故障续搀,Master宕機(jī)情況下,消息無延遲菠净,服務(wù)可用性與數(shù)據(jù)可用性都非常高禁舷;
  • 缺點(diǎn):性能比異步復(fù)制模式略低(大約低10%左右),發(fā)送單個(gè)消息的RT會(huì)略高毅往,且目前版本在主節(jié)點(diǎn)宕機(jī)后牵咙,備機(jī)不能自動(dòng)切換為主機(jī)。

Dledger 模式

RocketMQ 4.5 以前的版本大多都是采用 Master-Slave 架構(gòu)來部署攀唯,能在一定程度上保證數(shù)據(jù)的不丟失洁桌,也能保證一定的可用性。

但是那種方式 的缺陷很明顯革答,最大的問題就是當(dāng) Master Broker 掛了之后 战坤,沒辦法讓 Slave Broker 自動(dòng) 切換為新的 Master Broker曙强,需要手動(dòng)更改配置將 Slave Broker 設(shè)置為 Master Broker,以及重啟機(jī)器途茫,這個(gè)非常麻煩碟嘴。

在手式運(yùn)維的期間,可能會(huì)導(dǎo)致系統(tǒng)的不可用囊卜。

使用 Dledger 技術(shù)要求至少由三個(gè) Broker 組成 娜扇,一個(gè) Master 和兩個(gè) Slave,這樣三個(gè) Broker 就可以組成一個(gè) Group 栅组,也就是三個(gè) Broker 可以分組來運(yùn)行雀瓢。一但 Master 宕機(jī),Dledger 就可以從剩下的兩個(gè) Broker 中選舉一個(gè) Master 繼續(xù)對外提供服務(wù)玉掸。

image

整體架構(gòu):高可用刃麸、高并發(fā)、可伸縮 司浪、海量消息

經(jīng)過上面4種集群方案的比較泊业,最終確定使用 Dledger 方式最終的邏輯部署圖如下:

image

上圖的虛線框表示一個(gè) Dledger Group。

高可用

三個(gè) NameServer 極端情況下啊易,確保集群的可用性吁伺,任何兩個(gè) NameServer 掛掉也不會(huì)影響信息的整體使用。

在上圖中每個(gè) Master Broker 都有兩個(gè) Slave Broker租谈,這樣可以保證可用性篮奄,如在同一個(gè) Dledger Group 中 Master Broker 宕機(jī)后,Dledger 會(huì)去行投票將剩下的節(jié)點(diǎn)晉升為 Master Broker割去。

高并發(fā)

假設(shè)某個(gè)Topic的每秒十萬消息的寫入窟却, 可以增加 Master Broker 然后十萬消息的寫入會(huì)分別分配到不同的 Master Broker ,如有5臺(tái) Master Broker 那每個(gè) Broker 就會(huì)承載2萬的消息寫入劫拗。

可伸縮

如果消息數(shù)量增大间校,需要存儲(chǔ)更多的數(shù)量和最高的并發(fā),完全可以增加 Broker 页慷,這樣可以線性擴(kuò)展集群憔足。

海量消息

數(shù)據(jù)都是分布式存儲(chǔ)的,每個(gè)Topic的數(shù)據(jù)都會(huì)分布在不同的 Broker 中酒繁,如果需要存儲(chǔ)更多的數(shù)據(jù)滓彰,只需要增加 Master Broker 就可以了。

歡迎關(guān)注公眾號:架構(gòu)文摘州袒,獲得獨(dú)家整理120G的免費(fèi)學(xué)習(xí)資源助力你的架構(gòu)師學(xué)習(xí)之路揭绑!

公眾號后臺(tái)回復(fù)arch028獲取資料:

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子他匪,更是在濱河造成了極大的恐慌菇存,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邦蜜,死亡現(xiàn)場離奇詭異依鸥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)悼沈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進(jìn)店門贱迟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人絮供,你說我怎么就攤上這事衣吠。” “怎么了壤靶?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵缚俏,是天一觀的道長。 經(jīng)常有香客問我萍肆,道長袍榆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任塘揣,我火速辦了婚禮,結(jié)果婚禮上宿崭,老公的妹妹穿的比我還像新娘亲铡。我一直安慰自己,他們只是感情好葡兑,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布奖蔓。 她就那樣靜靜地躺著,像睡著了一般讹堤。 火紅的嫁衣襯著肌膚如雪吆鹤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天洲守,我揣著相機(jī)與錄音疑务,去河邊找鬼。 笑死梗醇,一個(gè)胖子當(dāng)著我的面吹牛知允,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叙谨,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼温鸽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了手负?” 一聲冷哼從身側(cè)響起涤垫,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤姑尺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蝠猬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體股缸,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年吱雏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敦姻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡歧杏,死狀恐怖镰惦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情犬绒,我是刑警寧澤旺入,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站凯力,受9級特大地震影響茵瘾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咐鹤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一拗秘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧祈惶,春花似錦雕旨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疹蛉,卻和暖如春活箕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背可款。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工育韩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人筑舅。 一個(gè)月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓座慰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翠拣。 傳聞我的和親對象是個(gè)殘疾皇子版仔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容