ES原理之集群啟動流程

目錄

  • 啟動流程
    • 選舉主節(jié)點(diǎn)
    • 選舉集群元信息
    • allocation 過程
      • 主分片
      • 副分片
    • index recovery
      • 主分片 recovery
      • 副分片 recovery
  • 參考文獻(xiàn)
  • 目前大部分內(nèi)容參考自elasticsearch 集群啟動流程

流程圖

大體流程.png

啟動流程

選舉主節(jié)點(diǎn)

主要思路是對節(jié)點(diǎn) ID 排序,取最大值做 master罢防,每個節(jié)點(diǎn)都運(yùn)行這個流程晃跺。由此產(chǎn)生三個制約條件:

  1. 參選人數(shù)需要過半缺猛,達(dá)到quorum后就選出了臨時的主哼勇。為什么是臨時的?每個節(jié)點(diǎn)運(yùn)行排序取最大值的算法,結(jié)果不一定相同。舉個栗子澎嚣,集群有5臺主機(jī),節(jié)點(diǎn) ID 分別是:1瘟芝,2,3褥琐,4锌俱,5.當(dāng)產(chǎn)生網(wǎng)絡(luò)分區(qū)或者節(jié)點(diǎn)啟動速度差異較大,節(jié)點(diǎn)1 看到的節(jié)點(diǎn)列表是:1敌呈,2贸宏,3,4磕洪,選出4吭练;節(jié)點(diǎn)2看到的節(jié)點(diǎn)列表:2,3析显,4鲫咽,5,選出5。結(jié)果就不一致了由此產(chǎn)生第二條限制分尸。
  2. 得票數(shù)須過半锦聊。某節(jié)點(diǎn)被選為主,須判斷加入他的節(jié)點(diǎn)數(shù)過半箩绍,才確認(rèn) master 身份孔庭。解決第一個問題。
  3. master 節(jié)點(diǎn)材蛛,當(dāng)探測到節(jié)點(diǎn)離開事件圆到,須判斷當(dāng)前節(jié)點(diǎn)數(shù)是否過半。如果不到quorum卑吭,則放棄 master 身份芽淡,重新加入集群。如果不這么做陨簇,有可能導(dǎo)致腦裂吐绵。這樣的話沒有一個節(jié)點(diǎn)會接受索引或搜索的請求,讓所有的客戶端馬上發(fā)現(xiàn)這個問題河绽。

選舉集群元信息

master節(jié)點(diǎn)讓各節(jié)點(diǎn)把其各自存儲的元信息發(fā)過來己单,根據(jù)版本號確定最新的元信息,然后把這個信息廣播下去耙饰,這樣纹笼,集群的所有節(jié)點(diǎn)都有了最新的元信息。

  1. 為了集群一致性苟跪,參與選舉的元信息數(shù)量需要過半廷痘,Master 發(fā)布集群信息是的成功規(guī)則也是過半。
  2. 在選舉過程中件已,不接受新節(jié)點(diǎn)的加入請求笋额。集群元信息選舉完畢后,Master 發(fā)布首次集群狀態(tài)篷扩,然后開始選舉 shard 級元信息兄猩。當(dāng)分配主分片時,主節(jié)點(diǎn)檢查磁盤中存儲的 allocation ID 是否會在集群狀態(tài)in-sync allocations 集合中出現(xiàn)鉴未,只有在這個集合中找到了枢冤,此分片才有可能被選為主分片。如果活躍副本中的主分片掛了铜秆,in-sync 集合中的活躍分片會被提升為主分片淹真,確保集群的寫入可用性不變

allocation 過程

主分片

master向所有節(jié)點(diǎn)發(fā)起分片請求,Master 等待所有的請求返回回來连茧,正常情況下他有就有了這個 shard 的信息核蘸,然后根據(jù)某種策略(主節(jié)點(diǎn)在選擇哪個節(jié)點(diǎn)作為主分片方面有很大的靈活性巍糯,會將集群均衡和其他約束如分片感知及過濾器考慮在內(nèi))選一個分片做主。

  1. 給每個 shard 都設(shè)置一個 UUID值纱,然后在集群級的元信息中記錄鳞贷,哪個 shard 是最新的,因?yàn)?es 是先寫主分片虐唠,再由主分片節(jié)點(diǎn)轉(zhuǎn)發(fā)請求去寫副分片搀愧,所以主分片所在節(jié)點(diǎn)肯定是最新的,如果他轉(zhuǎn)發(fā)失敗了疆偿,就要求 Master 刪除那個節(jié)點(diǎn)咱筛。
  2. es5中,主分片是通過集群級元信息中記錄的“最新主分片的列表”來確定主分片的:匯報(bào)信息中存在杆故,并且這個表中也存在迅箩。
選副分片

主分片選舉完成后,從上一個過程匯總的 shard 信息中選擇一個副本做副分片处铛。如果匯總信息中不存在饲趋,分配一個全新副本的操作依賴延遲配置項(xiàng)決定。

index.unassigned.node_left.delayed_timeout

索引恢復(fù)

主分片索引恢復(fù)(非阻塞)

主分片的 recovery 不會等待其副分片分配成功才開始 recovery撤蟆,這些未刷盤數(shù)據(jù)可以從 translog 恢復(fù)奕塑,每次刷盤完畢,translog 都會被清空家肯,因此把 translog 中的數(shù)據(jù)全部重放龄砰,建立 lucene 索引,如此完成主分片的 recovery讨衣。

副分片索引恢復(fù)(非阻塞)

副分片需要恢復(fù)成與主分片一致换棚,同時,恢復(fù)期間允許新的索引操作反镇。因此在主分片所在節(jié)點(diǎn)固蚤,調(diào)用 lucene 接口把 shard 做快照。從主分片恢復(fù)到副本分片主要有兩個階段(在主分片節(jié)點(diǎn)執(zhí)行):

  1. 對比分段信息,如果 syncid 相同且 doc 數(shù)量相同,則跳過歹茶,否則復(fù)制整個分段
  2. 將當(dāng)前 translog 做快照,發(fā)送所有的 translog operation 到對端節(jié)點(diǎn),不限速
問題關(guān)注
  1. 分片完整性 第一階段執(zhí)行期間如果 lucene commit夕玩,清除 translog 怎么辦,translog 模塊被修改為支持多個文件,同時引入 translog.view 的概念辆亏,創(chuàng)建 view 可以獲取到后續(xù)的所有操.
  2. 數(shù)據(jù)一致性, 新增過程中同時副本數(shù)據(jù)在恢復(fù),寫流程中做異常處理,通過版本號來過濾掉過期操作

參考文獻(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鳖目,一起剝皮案震驚了整個濱河市扮叨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌领迈,老刑警劉巖彻磁,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碍沐,死亡現(xiàn)場離奇詭異,居然都是意外死亡衷蜓,警方通過查閱死者的電腦和手機(jī)累提,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磁浇,“玉大人斋陪,你說我怎么就攤上這事≈孟牛” “怎么了无虚?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長衍锚。 經(jīng)常有香客問我友题,道長,這世上最難降的妖魔是什么戴质? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任度宦,我火速辦了婚禮,結(jié)果婚禮上告匠,老公的妹妹穿的比我還像新娘戈抄。我一直安慰自己,他們只是感情好凫海,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布呛凶。 她就那樣靜靜地躺著,像睡著了一般行贪。 火紅的嫁衣襯著肌膚如雪漾稀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天建瘫,我揣著相機(jī)與錄音崭捍,去河邊找鬼。 笑死啰脚,一個胖子當(dāng)著我的面吹牛殷蛇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播橄浓,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粒梦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荸实?” 一聲冷哼從身側(cè)響起匀们,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎准给,沒想到半個月后泄朴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體重抖,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年祖灰,在試婚紗的時候發(fā)現(xiàn)自己被綠了钟沛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡局扶,死狀恐怖恨统,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情详民,我是刑警寧澤延欠,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站沈跨,受9級特大地震影響由捎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饿凛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一狞玛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涧窒,春花似錦心肪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至戴已,卻和暖如春固该,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背糖儡。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工伐坏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人握联。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓桦沉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親金闽。 傳聞我的和親對象是個殘疾皇子纯露,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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