Elasticsearch的節點和分片


1. 節點和分片

下圖為3個節點集群,即一個運行Elasticsearch的進行為一個節點,一個索引會通過默認或自定的方式分為多個分片。在下圖中有5個主分片和5個副本分片,相同數據的主分片和副本分片不會處於同一節點。

一份分片是一個目錄中的文件,Lucene用這些文件存儲索引數據。分片也是 Elasticsearch將數據從一個節點遷移到另一個節點的最小單位。

image-20201119152257469

1.1 索引一片文檔的過程

默認情況下,當索引一篇文檔的時候,系統首先根據文檔ID的散列值選擇一個主分片,並將文檔發送到該主分片。這份主分片可能位於另一個節點,如下圖所示:該文檔ID的散列值指向的是分片1,但是請求的是節點1,因此節點1中的主分片0將該文檔索引到節點2的分片1中。

然后文檔被發送到該主分片的所有副本分片進行索引(圖左)這使得副本分片和主分片之間保持數據的同步。數據同步使得副本分片可以服務於搜索請求,並在原有主分片無法訪問時自動升級為主分片。

image-20201119153255562

當搜索一個索引時,Elasticsearch需要在該索引的完整分片集合中進行查找(圖右)這些分片可以是主分片,也可以是副本分片,原因是對應的主分片和副本分片通常包含一樣的文檔。Elasticsearch在索引的主分片和副本分片中進行搜索請求的負載均衡,使得副本分片對於搜索性能和容錯都有所幫助。

1.2 主分片和副本分片

Elasticsearch處理數據的最小單元:分片。一份分片是 Lucene的索引(一個包含倒排索引的文件目錄)。倒排索引的結構使得 Elasticsearch在不掃描所有文檔的情況下,就能得知哪些文檔包含特定的詞條。

Elasticsearch索引和Lucene索引的對比:Elasticsearch索引被分解為多塊分片。一份分片是一個 Lucene的索引,所以一個 Elasticsearch的索引由多個 Lucene的索引組成。

在圖2-5中,聚會(get-together)索引的首個主分片可能包含何種信息。該分片稱為 get-together0,它是一個 Lucene索引、一個倒排索引。它默認存儲原始文檔的內容,再加上些額外的信息,如詞條字典和詞頻。

image-20201119154506359

根據倒排序索引可以迅速的定位到 查詢的文檔。如:查詢包含denver單詞的文檔,查表可以發現文檔id1,id3匹配該查詢條件,而且denver單詞在id3中出現的頻率比id1高,所以可能id3文檔會更加符合查詢條件。

分片分為:主分片和副本分片。其中副本分片是主分片的完整副本。副本分片用於搜索,或者是在原有主分片丟失后成為新的主分片。
Elasticsearch索引由一個或多個主分片以及零個或多個副本分片構成。在圖2-6中,可以看到Elasticsearch索引 get-together由6份分片組成:2份主分片(深色的盒子)和4份副本分片(淺色的盒子),每份主分片有2個副本分片。

image-20201119155025549

副本分片可以在運行的時候進行添加和移除,而主分片不可以。
可以在任何時候改變每個分片的副本分片的數量,因為副本分片總是可以被創建和移除。這並不適用於索引划分為主分片的數量,在創建索引之前,必須決定主分片的數量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM