[譯]ES讀寫文檔時shard-replication模型

官網頁面:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-replication.htmlhtml

 

本文是對官網頁面的粗糙譯文,哈哈,方便本身理解。併發

shard: 分片elasticsearch

replication: 副本ide

 

引言

  ES的索引被劃分紅多個分片,而且每一個分片能夠有多個拷貝,當對索引做出更新(如添加、刪除文檔)操做時,須要保持分片與其副本同步。保持分片及其拷貝信息同步和提供讀服務咱們稱之爲數據副本模型。ui

  數據副本模型基於主-備模型,須要從分片拷貝組中找出一個分片做爲主分片,其餘的做爲副本分片。主分片承擔索引操做主要的入口,負責校驗操做並保證其正確性。若主分片接受索引操做,它也要負責將這些操做複製到它的副本分片上。htm

寫模型

  ES的索引操做首先要肯定涉及的索引分片組,肯定以後,在內部這個操做會被轉發到分片組的主分片上,主分片校驗操做,並轉發到組內的副本分片上。可能有一些副本分片處於離線狀態,主分片沒有必要把操做發送到全部的副本分片上。替代方案是,ES的主節點維護一個列表,記錄可靠的副本分片,主分片只須要把操做發送到列表中的副本分片便可。blog

  主分片執行如下基本流程:索引

  1. 驗證操做,若是有錯誤則拒絕;
  2. 在本地執行操做,若域數據有問題,則拒絕;
  3. 轉發操做到隊列中的其餘副本分片,如有多個,則併發發送;
  4. 其餘副本分片執行操做並響應主分片,主分片確認隊列中全部副本分片成功執行,並響應客戶端。

失敗處理

  在執行的過程當中,主分片可能出錯。這時,集羣主節點會從分片列表中選出新的主分片,這個操做被轉發到主分片繼續執行。錯誤的分片會被移除副本隊列,主節點會從新拷貝一份分片,並更新集羣狀態信息。隊列

讀模型

  當一個節點收到讀請求時,它會轉發到全部包含相關分片的節點上,收集節點的響應並響應客戶端。文檔

  讀索引基本流程以下:

  1. 解析讀請求到相關索引分片上;
  2. 從每一個相關的分片所在組中,選取一個可用的副本分片,通常狀況下,會在副本列表中進行輪詢;
  3. 把讀請求發送到選定的副本分片上;
  4. 合併查詢結果並響應。

失敗處理

  當副本查詢失敗時,協調節點會選取所在組的其餘副本節點來執行查詢。

 

 

 

 

閱讀參考:

[1] https://www.elastic.co/blog/tracking-in-sync-shard-copies

[2] https://codingexplained.com/coding/elasticsearch/understanding-replication-in-elasticsearch

[3] https://codingexplained.com/coding/elasticsearch/understanding-sharding-in-elasticsearch

[4] https://codingexplained.com/coding/elasticsearch/introduction-elasticsearch-architecture

相關文章
相關標籤/搜索