ElasticSearch分片詳解
1.我們能夠發送請求給集群中任意一個節點。每個節點都有能力處理任意請求。每個節點都知道任意文檔所在的節點
2.新建索引和刪除請求都是寫操作,它們必須在主分片上成功完成才能賦值到相關的復制分片上
3.在主分片和復制分片上成功新建、索引或刪除一個文檔必要的順序步驟:
(1) 客戶端給Node1 發送新建、索引或刪除請求。
(2) 節點使用文檔的_id確定文檔屬於分片0.轉發請求到Node3,分片0位於這個節點上。
(3) Node3在主分片上執行請求,如果成功,它轉發請求到相應的位於Node1和Node2的復制節點上。當所有的復制節點報告成功,Node3報告成功到請求的節點,請求的節點再報告給客戶端。
(4)客戶端接收到成功響應的時候,文檔的修改已經被用於主分片和所有的復制分片,修改生效了。
分片的一致性
理解分片-consistency(一致性)
默認主分片在嘗試寫入時需要規定數量(quorum)或過半的分片(可以是主節點或復制節點)可用。這是防止數據被寫入到錯的網絡分區,規定的數量計算公式如下: int((primary+number_of_replicas)/2)+1 consistency 允許的值為one(只有一個主分片),all(所有主分片和復制分片)或者默認的quorum或過半分片。 註意:number_of_replicas是在索引中的設置,用來定義復制分片的數量,而不是現在活動的復制節點的數量。如果你定義了索引有3個復制節點那規定數量是: int((primary+3 replicas)/2)+1=3 註意:新索引默認有1個復制分片,這意味著為了滿足quorum的要求需要兩個活動的分片。當然,這個默認設置將阻止我們在單一節點集群中進行操作。為了避開這個問題,規定數量只有在number_of_replicas大於一時才生效。
在主分片或復制分片上檢索一個文檔步驟
1.客戶端給Node1發送get請求 2、節點使用文檔對的_id確定文檔屬於分片0,分片0對應的復制分片在三個節點上都有。此時,它轉發請求到Node2 3、Node2返回文檔給Node1然後返回給客戶端。對於讀請求,為了平衡負載,請求節點會為每個請求選擇不同的分片---它會循環所有分片副本。可能的情況是:一個被索引的文檔已經存在於主分片上卻還沒來得及同步到復制分片上。這時復制分片會報告文檔未找到,主分片會成功返回文檔。一旦索引請求成功返回給用戶,文檔則在主分片和復制分片都是可用的。
ElasticSearch分片詳解