1. 程式人生 > >ES索引和分片

ES索引和分片

發送請求 完成 擴容 返回 sync 數據丟失 地方 應用 得到

1.為了將數據添加到ES,我們需要索引(index),索引是一個存儲關聯數據的地方。實際上,索引只是一個用來指定一個或多個分片的"邏輯命名空間"

2.一個分片(shard)是一個最小級別"工作單元",它只是保存了索引中的所有數據的一部分,每個分片就是一個Lucene實例,並且它本身就是一個完整的搜索引擎。我們的文檔存儲在分片中,並且在分片中被索引,但是我們的應用程序不會直接與它們通信,取而代之的是,直接與索引通信。

3.分片是ES在進群中分發數據的關鍵,可以把分片想想成數據的容器。文檔存儲在分片中,然後分片分配到集群中的節點上。當集群擴容或縮小,ES將會自動在節點間遷移分片,以使集群保持平衡。

4.分片可以是主分片或者是復制分片,索引中的每個文檔屬於一個單獨的主分片,所以主分片的數量決定了索引最多能存儲多少數據。

5.理論上主分片能存儲的數據大小是沒有限制的,限制取決於你實際的使用情況:硬件存儲的大小,文檔的大小和復雜度、如何索引和查詢你的文檔,以及你期望的響應時間

6.復制分片只是主分片的一個副本,它可以防止硬件故障導致的數據丟失,同時可以提供請求,比如搜索或者從別的shard取回文檔。

7.當索引創建完成的時候,主分片的數量就固定了,但是復制分片的數量可以隨時調整

一.下面是分片的詳細解說:

1.我們能夠發送請求給集群中任意一個節點。每個節點都有能力處理任意請求。每個節點都知道任意文檔所在的節點

2.新建索引和刪除請求都是寫操作,它們必須在主分片上成功完成才能賦值到相關的復制分片上

3.在主分片和復制分片上成功新建、索引或刪除一個文檔必要的順序步驟:

(1) 客戶端給Node1 發送新建、索引或刪除請求。

(2) 節點使用文檔的_id確定文檔屬於分片0.轉發請求到Node3,分片0位於這個節點上。

(3) Node3在主分片上執行請求,如果成功,它轉發請求到相應的位於Node1和Node2的復制節點上。當所有的復制節點報告成功,Node3報告成功到請求的節點,請求的節點再報告給客戶端。

(4)客戶端接收到成功響應的時候,文檔的修改已經被用於主分片和所有的復制分片,修改生效了。

二.ES分片復制

復制默認的值是sync。這將導致主分片得到復制分片的成功響應後才返回。

如果你設置replication為async,請求在主分片上被執行後就會返回給客戶端。它依舊會轉發給復制節點,單你將不知道復制節點成功與否。

上面的這個選項不建議使用。默認的sync復制允許ES強制反饋傳輸。async復制可能會因為在不等待其他分片就緒的情況下發送過多的請求而使ES過載。

ES索引和分片