介紹
索引recovery是指索引數(shù)據(jù)恢復(fù),包含以下幾種類型
- EMPTY_STORE, 索引沒有數(shù)據(jù),一般是新建索引的情況,不用恢復(fù)數(shù)據(jù)
- EXISTING_STORE, 從本地存儲的數(shù)據(jù)恢復(fù),例如集群重啟primary shard進(jìn)行數(shù)據(jù)恢復(fù)
- PEER, 從另一個節(jié)點恢復(fù)數(shù)據(jù),例如集群重啟replica從primary恢復(fù)數(shù)據(jù);primary進(jìn)行relocate到另一個節(jié)點
- SNAPSHOT, 從SNAPSHOT中恢復(fù)數(shù)據(jù)
- LOCAL_SHARDS,從本節(jié)點的其他shard恢復(fù)數(shù)據(jù),例如shrink操作
recovery過程包含以下幾個階段文章來源:http://www.zghlxwxcb.cn/news/detail-801434.html
- INIT 初始化階段,還沒開始恢復(fù)數(shù)據(jù)
- INDEX 恢復(fù)Lucene文件,要么復(fù)用本地的文件,要么從其他節(jié)點復(fù)制文件
- VERIFY_INDEX 對分片(Lucene index)進(jìn)行檢查是否損壞
- TRANSLOG 啟動index engine,重放translog
- FINALIZE 當(dāng)translog重放完成后,執(zhí)行最后的任務(wù)
- DONE recovery結(jié)束
今天我們介紹下 從本地存儲的數(shù)據(jù)恢復(fù)的recovery流程,后面我會另寫一篇博客介紹從另一個節(jié)點恢復(fù)數(shù)據(jù)的過程。文章來源地址http://www.zghlxwxcb.cn/news/detail-801434.html
primary shard重啟具體流程
master node
- 完成EXISTING_STORE的分片分配,具體流程可見我的另一個博客,廣播新的cluster state
data node (updateTask threadpool)
- 觸發(fā)IndicesClusterStateService.applyClusterState,應(yīng)用集群狀態(tài)
- 觸發(fā)recovery,狀態(tài)為init
- 標(biāo)記分片狀態(tài)為RECOVERING,在generic線程池執(zhí)行recoverFromStore
data node (generic threadpool)
- 更新recovery狀態(tài)為index,獲取最后一個提交點(commit point)的提交的segment info(segment的元數(shù)據(jù))。如果有說明索引文件都存在,沒有則拋出異常
- 用segment info填充recovery state中的lucene index數(shù)據(jù),例如cat api就需要這個數(shù)據(jù),觀測recovery進(jìn)度。如果是EMPTY_STORE的情況,將在目錄下創(chuàng)建Index, translog相關(guān)的文件
- 進(jìn)入VERIFY_INDEX階段。如果開啟index.shard.check_on_startup,則檢查索引文件(默認(rèn)關(guān)閉),會進(jìn)行檢查checksum或檢查文件的每個字節(jié),取決于這個配置
- 進(jìn)入TRANSLOG階段。打開新的engine,關(guān)閉GcDeletes(因為recovery時允許執(zhí)行doc的CRUD,所以需要保證delete operation不會被丟失,因為delete操作執(zhí)行后將沒有記錄。gc_delete詳見https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html)
- 生成translog快照,遍歷從local checkpoint到最后的每條數(shù)據(jù)進(jìn)行回放,回放重走Lucene寫入流程
- 執(zhí)行flush來commit新寫入的數(shù)據(jù),清除translog
- 進(jìn)入FINALIZE階段。執(zhí)行refresh,將緩沖數(shù)據(jù)寫入segment,使數(shù)據(jù)可讀;打開GcDeletes
- 如果整體流程成功,發(fā)送shard started請求給master;失敗則發(fā)送shard failure
總結(jié)
- 總流程比較簡單,主要是讀取本地索引文件的元數(shù)據(jù)和從translog恢復(fù)數(shù)據(jù),基于cluster state變更的時間觸發(fā),完成時在觸發(fā)shard started的更新集群狀態(tài)的請求
- ES利用recovery流程完成了新建分片的相關(guān)物理文件的創(chuàng)建工作
到了這里,關(guān)于【Elasticsearch】索引恢復(fù)(recovery)流程梳理之EXISTING_STORE索引數(shù)據(jù)恢復(fù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!