Storm Nimbus的HA

Storm在1.0之后對nimbus支持了HA猖任,根據(jù)官方提供的文檔尺上,同樣是利用了zk來做分布式鎖金顿,并且配置文件中新增了storm.seeds,而原來的storm.hosts改為deprecated贰您。但是nimbus如果想成為leader坏平,必須有一個先決條件就是這個nimbus本地必須包含所有的topo的代碼(code),否則這個nimbus是不會接受leader角色的锦亦。

首先看啟動舶替,nimbus的啟動通過命令行的方式./storm nimbus,在啟動腳本中又調(diào)用storm.py的腳本杠园,而這個python腳本則直接指向了

o.a.s.d.nimbus

坎穿、


在初始化的過程中,首先實現(xiàn)了INimbus的接口


接下來返劲,-lauch方法對配置文件做了解析玲昧,然后實際啟動server是launch-server方法


launch-server方法做了如下幾件事情


1. 驗證是否為本地模式,如果是local模式則拋異常

2. 驗證端口是否可用篮绿,就是配置文件中的thrift.server的端口

3. 注意service-handler這個方法孵延,在它的內(nèi)部其實做了很多事情

接下來看看service-handler這個方法,service-handler定義了一系列的方法亲配,這些方法都是用于提供對外服務(wù)尘应。

首先service-handler通過let綁定了nimbus (nimbus-data conf inimbus), nimbus-data其實提供了許多運行時需要的nimbus數(shù)據(jù)。


這里只談HA吼虎,在nimbus-data中有這樣一對鍵值對


而zk-leader-elector利用了zk的leader-latch做leader選舉

nimbus.clj下的這一段是定時從其他nimbus同步代碼的核心


在這里犬钢,blob-sync做了在不同nimbus上同步sync。這里的注釋寫的很明白思灰,定期去同步其他nimbus的code玷犹。blob-sync是個多態(tài)方法。首先看看下面這個邏輯

1. 判斷是不是leader洒疚,如果不是leader歹颓,轉(zhuǎn)到2(是leader就有全部的code了,自然不需要做其他事情)

2. 構(gòu)建一個BlobSyncronizer對象油湖,執(zhí)行syncBlobs方法


blob-sync方法中通過let綁定的值有幾個巍扛,這里可以看一下相對比較復(fù)雜的zk-key-set,這個zk-key-set綁定了一個set的數(shù)據(jù)結(jié)構(gòu)乏德,

而這個set的數(shù)據(jù)結(jié)構(gòu)的值又是來源于storm-cluster-stat的blobstore方法撤奸。那么現(xiàn)在就看看storm-cluster-state方法是怎么來的。

可以看到通過追溯代碼喊括,能夠發(fā)現(xiàn)其來源于nimbus-data的一個綁定胧瓜,這個綁定中的一個方法就是mk-storm-cluster-state.


那么mk-storm-cluster-state這個方法有做了什么呢?

讓我們進入定義它的cluster.clj去看一下瘾晃。


這里詳細解釋了cluster-state的來源贷痪,其實它是通過mk-distributed-cluster-state方法創(chuàng)建出來的一個對象,而這個對象就是通過反射得到的org.apache.storm.cluster_state.zookeeper_state_factory這樣一個對象


弄清楚cluster-state的來源蹦误,我們回頭再看zk-key-set的blobstore方法


這個方法其實就是調(diào)用了org.apache.storm.cluster_state.zookeeper_state_factory的幾個方法劫拢。至于sync_path和get_chmk的邏輯就不再贅述了。

blob-sync方法在做完綁定之后强胰,執(zhí)行了syncBlobs方法舱沧,這個方法定義在BlobSyncronizer中。首先這個方法利用synchronized表明這是個同步方法偶洋。這個方法中

1. ?刪除不在zk上熟吏,而在blobstore中的key


2. updateKeySetForBlobStore,這個方法里檢查了zk上所有的最近一個version的blobstore,并且檢查當前的nimbus是否含有這個最近版本的key牵寺。如果沒有悍引,那么則在zk上創(chuàng)建一個。而創(chuàng)建的方法則是通過thrift接口調(diào)用createStateInZookeeper實現(xiàn)的



3. 既然zk上的路徑也創(chuàng)建了帽氓,那么接下來就應(yīng)該創(chuàng)建本地文件了(如何下載的沒有深究趣斤,好像是用到了bt協(xié)議?)


這樣就完成了HA的分析黎休,總結(jié)一下:

通過定時任務(wù)浓领,定時去檢查是否有未下載的blob,如果有則下去下載势腮。另外通過zk的leader-latch做選舉联贩,

如果被選為leader,那么需要檢查是否有足夠多的key捎拯,如果沒有則放棄泪幌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市玄渗,隨后出現(xiàn)的幾起案子座菠,更是在濱河造成了極大的恐慌,老刑警劉巖藤树,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浴滴,死亡現(xiàn)場離奇詭異,居然都是意外死亡岁钓,警方通過查閱死者的電腦和手機升略,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屡限,“玉大人品嚣,你說我怎么就攤上這事【螅” “怎么了翰撑?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長啊央。 經(jīng)常有香客問我眶诈,道長,這世上最難降的妖魔是什么瓜饥? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任逝撬,我火速辦了婚禮,結(jié)果婚禮上乓土,老公的妹妹穿的比我還像新娘宪潮。我一直安慰自己溯警,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布狡相。 她就那樣靜靜地躺著梯轻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谣光。 梳的紋絲不亂的頭發(fā)上檩淋,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音萄金,去河邊找鬼。 笑死媚朦,一個胖子當著我的面吹牛氧敢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播询张,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼孙乖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了份氧?” 一聲冷哼從身側(cè)響起唯袄,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜗帜,沒想到半個月后恋拷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡厅缺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年蔬顾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片湘捎。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡诀豁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窥妇,到底是詐尸還是另有隱情舷胜,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布活翩,位于F島的核電站烹骨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纱新。R本人自食惡果不足惜展氓,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脸爱。 院中可真熱鬧遇汞,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至歪赢,卻和暖如春化戳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背埋凯。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工点楼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人白对。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓掠廓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親甩恼。 傳聞我的和親對象是個殘疾皇子蟀瞧,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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

  • 背景 OpenShift是目前比較主流的基于Kubernetes的容器云解決方案,OpenShift在kubern...
    小白_18M閱讀 1,173評論 0 5
  • kafka的定義:是一個分布式消息系統(tǒng)条摸,由LinkedIn使用Scala編寫悦污,用作LinkedIn的活動流(Act...
    時待吾閱讀 5,309評論 1 15
  • 目錄 場景假設(shè) 調(diào)優(yōu)步驟和方法 Storm 的部分特性 Storm 并行度 Storm 消息機制 Storm UI...
    mtide閱讀 17,063評論 30 60
  • 馮陳陳閱讀 320評論 0 0
  • 寂靜的深夜,漸涼的冷意钉蒲,邃然的星空切端,一切未入表面的平靜,還有你我起伏的夢境子巾,于夢境盲行帆赢,生活還會怎樣茫然…...
    Whereever閱讀 279評論 0 0