Elasticsearch官檔翻譯——5.0 【6.0版本補充】讀寫文檔

讀寫文檔

介紹

每個 Elasticsearch 中的索引都會被分成多個分片钝鸽,并且每個分片都有多個副本幔嗦。這些副本被稱作 副本組,當有文檔添加或刪除,副本組必須要保持同步噪馏。如果做不到這點,從一個分片讀取到的數(shù)據(jù)會和其它分片讀取的數(shù)據(jù)有很大差異。保持分片副本同步并提供可靠地讀服務的這一過程,我們稱之為數(shù)據(jù)復制模型恢氯。

譯者批注:其實副本組這個描述感覺不太好,應該叫分片組鼓寺,因為文中的副本組不光只副本勋拟,還有主分片

Elasticsearch 的數(shù)據(jù)復制模型是基于主備模型的,這一理論在微軟的 PacificA paper 這篇論文中有深入的說明妈候。主備模型基于一個單主分片敢靡,其他的拷貝叫做副本苦银。主分片提供所有索引操作的服務的入口醋安,他主要掌管數(shù)據(jù)校驗確保正確的工作。一旦主分片接受的索引操作墓毒,他還負責將數(shù)據(jù)同步到其他副本中亲怠。

這一章節(jié)的目的是介紹 Elasticsearch 中關于復制模型的高階概述,并討論它對讀寫操作之間的相互作用所帶來的影響团秽。

基本的寫模型

每個文檔操作首先要通過路由選擇副本組主胧。通常采用文檔的 ID 來路由。一旦確定了在哪個副本組執(zhí)行习勤,操作就會從內部轉發(fā)到當前組的主分片踪栋。主分片負責校驗操作是否合法并把它轉發(fā)到組內其它分片。由于副本可能會有下線的狀態(tài)(譯者批注:副本未分配或副本所在節(jié)點宕機等)图毕,不要求主分片復制到所有副本中夷都。Elasticsearch 中維護了一組分片列表記錄了操作應該到哪個分片,這個列表維護在主節(jié)點中予颤,叫做 同步分片組囤官。正如名字中暗示的,這是一組確保能夠所有的索引和刪除操作并且能響應給用戶的 好的 分片冬阳,主分片負責維護這組不變的(譯者批注:不變的 這一描述感覺不好,因為副本數(shù)是可變的党饮,只是主分片數(shù)是不可變的)列表并向列表中的分片復制所有的操作肝陪。

主分片遵循以下基本流程:

  1. 校驗所有進入主分片的操作,并拒絕請求結構上有誤的操作(例如:數(shù)字類型的字段使用對象值)刑顺。
  2. 在本地執(zhí)行操作氯窍,也就是索引或刪除相關文檔。這一過程也會校驗字段的內容蹲堂,有必要的話拒絕操作(例如:一個分詞字段的值太長無法存儲到Lucene索引中)
  3. 將操作轉發(fā)到當前 同步列表 中的每個副本中狼讨, 如果列表中包含多個副本,這一操作是并行的贯城。
  4. 當這一操作在所有副本都執(zhí)行完畢熊楼,并響應給主分片,主分片將執(zhí)行完畢的結果反饋給客戶端能犯。

失敗處理

當索引文檔的時候鲫骗,有很多情況可能導致出錯 —— 磁盤損壞,節(jié)點之間無法連接踩晶,或者因為配置錯誤的原因導致操作盡管在主分片執(zhí)行成功卻在副本上執(zhí)行失敗了执泰,這些情況比較少見,但是主分片需要給予回應渡蜻。

在主分片失敗的情況下术吝。持有主分片的節(jié)點將會給 master 節(jié)點發(fā)送一個消息,索引操作將會等待(默認
情況下1分鐘左右)master 節(jié)點從副本中提升其中一個作為新的主分片茸苇,然后操作將會被轉發(fā)到新的主分片上執(zhí)行排苍。注意 master 也會監(jiān)控節(jié)點健康狀況并決定主動降級主分片,通常這個過程在主分片所在節(jié)點出現(xiàn)網(wǎng)絡故障的時候發(fā)生学密。詳見這里淘衙。

一旦操作在主分片上執(zhí)行成功彤守,主分片需要在副本執(zhí)行的時候處理潛在的失敗具垫,可能由于在副本上確實執(zhí)行失敗了或者由于網(wǎng)絡故障阻止操作抵達副本所在節(jié)點(或阻止副本節(jié)點發(fā)送響應)试幽。所有這些都會有相同的結果:同步列表 中的副本錯過了這個操作。為了避免影響這個不變的列表饰及,主分片發(fā)送請求到 master 節(jié)點燎含,要求 master 從同步列表刪除有問題的分片。master 一次只處理主分片發(fā)送的一個刪除操作屏箍。注意
master 也會使另一個節(jié)點構建新的分片赴魁,從而恢復系統(tǒng)健康狀態(tài)颖御。

當主分片向副本轉發(fā)操作時,主分片會借助副本的響應驗證自己是否還是活躍的潘拱,如果主分片由于網(wǎng)絡問題(或GC太久)被隔離在系統(tǒng)外芦岂,可能它意識到被降級之前他還會接收索引操作禽最。這些來自被隔離的分片的操作將會被副本拒絕,當主分片收到了拒絕的響應呛占,因為他不再是主分片了懦趋,之后他會去 master 中得知自己被其他副本替換了愕够,操作將會路由到新的主分片惑芭。

如果沒有副本會怎樣继找?

沒有副本的情況可能是索引配置副本數(shù)為0或者僅僅是所有副本分配失敗了,這個時候主分片執(zhí)行操作時不會執(zhí)行額外的檢驗凯亮,這樣肯能會有問題哄尔。另一方面主分片自己無法告知副本失敗岭接,而請求 master 替它做,意味著 master 知道主分片是唯一可用的分片啃沪,因此我們可以保證 master 不會提升其它分片為主分片创千,并且所有在主分片執(zhí)行的操作都不會丟失入偷。當然因為我們的數(shù)據(jù)跑在一個節(jié)點上盯串,硬件問題可能會導致數(shù)據(jù)丟失」谏悖看這里使用緩解方案几缭。

譯者批注:說白了單節(jié)點不會存在數(shù)據(jù)一致性問題年栓,但是也放棄了高可用

基本的讀模型

Elasticsearch 中的讀請求可以是 很輕量級的通過 ID 查找,也可能是比較重的復雜的占用巨大CPU的聚合搜索請求纸兔。主備模式的好處在于它讓所有分片數(shù)據(jù)一致否副,因此备禀,一個副本也可以用來提供搜索服務奈揍。

當節(jié)點收到讀請求后男翰,該節(jié)點將負責把請求轉發(fā)到所有相關的分片上蛾绎,并整理響應結果迫淹,返回給客戶端敛熬。我們稱這個節(jié)點叫做協(xié)調節(jié)點应民,下面是基本流程:

  1. 相關分片解析讀請求。注意因為大多數(shù)搜索將會被發(fā)送到一個或多個索引上繁仁,它們通常需要從多個分片進行讀取黄虱,每個分片代表數(shù)據(jù)的不同子集捻浦。
  2. 從每個相關的分片的分片組中選擇一個活躍的分片朱灿,這個分片可以是主分片也可以是副本盗扒,默認情況下 elasticsearch 通過輪詢的方式選擇一個分片侣灶。
  3. 發(fā)送分片級別的讀請求到被選中的分片。
  4. 聚合搜索結果響應褥影,注意如果使用 get ID 的查找方式伪阶,因為只有一個相關分片因此這一步可以跳過栅贴。

失敗處理

當一個分片響應讀請求失敗了檐薯,那么協(xié)調節(jié)點將選擇分片組中的另一個分片并發(fā)送分片級搜索請求到這個分片上。重復多次的失敗將導致沒有可用分片返回結果注暗,在某些情況下坛缕,例如 _search
請求,elasticsearch 將會盡快返回結果捆昏,盡管只有部分結果赚楚,而不是等待問題解決(響應部分結果將在響應頭部的 _shard 中體現(xiàn))。

一些簡單的含義

下面每個基本的流程都決定了 elasticsearch 作為讀寫系統(tǒng)的是如何工作的骗卜。進一步說宠页,因為讀寫請求是可以并發(fā)執(zhí)行的,這兩個基本的流程相互影響著寇仓,這里有一些內在的暗示:

  • 有效的讀:在正常情況下举户,每個分片組只對每個讀操作執(zhí)行一次。只有在失敗的時候才會在多個分片下執(zhí)行同一個搜索

  • 未響應讀:因為主分片首先現(xiàn)在本地索引然后在拷貝到其他副本遍烦,所以在收到索引響應答復之前并發(fā)讀是有可能看到文檔改動的俭嘁。

  • 默認兩個分片:這個模型可以保證容錯,同時只需要維護兩個分片的數(shù)據(jù)服猪。相比基于半數(shù)以上原則的系統(tǒng)供填,其容錯的最小分片數(shù)為3(譯者批注:使用大于2的單數(shù)防止系統(tǒng)腦裂

失敗

發(fā)生故障是,可能是以下情況:

  • 單個節(jié)點降低索引速度:由于主分片上每個操作都要等待同步分片組中所有副本,因此一個分片如果慢了就會導致整個分片組變慢晌端。這就是上面提到的讀效率的代價泻骤。當然單個分片的緩慢也可能會影響一個被路由到該分片上的查詢速度。

  • 臟讀:因故障被隔離的主分片可以對外暴露寫操作惦蚊,但是不會有響應欧芽。這是由于因故障而孤立的主分片只有在向它的副本發(fā)送請求或請求主節(jié)點時昏鹃,才會意識到自己失聯(lián)了。在這時索引操作已經寫到主分片并可以被讀請求并發(fā)讀到了。Elasticsearch 通過每秒鐘(默認) ping 主節(jié)點一次魂迄,如果無法發(fā)現(xiàn)主節(jié)點就拒絕索引操作這一方法來降低風險。

冰山一角

這篇文檔介紹了elasticsearch對數(shù)據(jù)處理的高階概述推溃,當然它底層還有很多很多細節(jié)例如 集群狀態(tài)發(fā)布,主節(jié)點選舉,都是來保證系統(tǒng)正常的短曾,文檔中并沒有完全涵蓋已知的和重要的bug哩都,在下面這個文檔中能夠讓你掌握第一手es的動態(tài) resiliency page儒鹿。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末憾朴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纯蛾,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異洪乍,居然都是意外死亡眯杏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人垮耳,你說我怎么就攤上這事查蓉∷。” “怎么了哥牍?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嗅辣。 經常有香客問我撼泛,道長,這世上最難降的妖魔是什么辩诞? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮纺涤,結果婚禮上译暂,老公的妹妹穿的比我還像新娘。我一直安慰自己撩炊,他們只是感情好外永,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拧咳,像睡著了一般伯顶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骆膝,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天祭衩,我揣著相機與錄音,去河邊找鬼阅签。 笑死掐暮,一個胖子當著我的面吹牛,可吹牛的內容都是我干的政钟。 我是一名探鬼主播路克,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼养交!你這毒婦竟也來了精算?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤碎连,失蹤者是張志新(化名)和其女友劉穎灰羽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡谦趣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年疲吸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片前鹅。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡摘悴,死狀恐怖,靈堂內的尸體忽然破棺而出舰绘,到底是詐尸還是另有隱情蹂喻,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布捂寿,位于F島的核電站口四,受9級特大地震影響,放射性物質發(fā)生泄漏秦陋。R本人自食惡果不足惜蔓彩,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驳概。 院中可真熱鬧赤嚼,春花似錦、人聲如沸顺又。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稚照。三九已至蹂空,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間果录,已是汗流浹背上枕。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弱恒,地道東北人姿骏。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像斤彼,于是被迫代替她去往敵國和親分瘦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容