ElasticSearch分片互動過程(建立索引、刪除索引、查詢索引)

黃道婆發表於2020-11-14

資料來自於ElasticSearch官方文件。

ElasticSearch分片互動過程(建立索引、刪除索引、查詢索引)

1 建立索引

 

首先:傳送一個索引或者刪除的請求給node1

其次:node1接到請求之後,會根據請求中攜帶的引數“文件id”判斷出該文件應該儲存在具體哪一個shard中

shard = hash(routing) % numberofprimary_shards

,比如shard0;其次就是node1通過後設資料資訊可以知道shard0在具體哪一個節點,於是node1會把請求轉發給node3

最後:node3接收到請求之後會將請求並行的分發給shard0的所有replica shard之上,也就是存在於node 1和node 2中的replica shard;如果所有的replica shard都成功地執行了請求,那麼將會向node 3回覆一個成功確認,當node 3收到了所有replica shard的確認資訊後,則最後向使用者返回一個Success的訊息。

2 刪除索引

 

該過程可以分為四個階段來描述:

階段1:客戶端向node 1傳送一個文件刪除的請求。

階段2:同樣的node 1通過請求中文件的 _id 值判斷出該文件應該被儲存在shard 0 這個分片中,並且node 1知道shard 0的primary shard位於node 3這個節點上。因此node 1會把這個請求轉發到node 3。

階段3:node 3接收到請求後,在主分片上面執行刪除請求

階段4:如果node 3成功地刪除了文件,node 3將會請求並行地發給其餘所有的replica shard所在node中。這些node也同樣操作刪除,執行後則向node 3確認成功,當node 3接收到所有的成功確認之後,再向客戶端傳送一個刪除成功的資訊。

3 查詢索引

 

檢索文件的時候,我們並不知道文件在叢集中的哪個位置,所以一般情況下不得不去詢問index中的每一個shard,然後將結果拼接成一個大的已排好序的彙總結果列表;

(1):客戶端傳送一個檢索請求給node3,此時node3會建立一個空的優先順序佇列並且配置好分頁引數from與size。

(2):node3將檢所請求傳送給index中的每一個shard(primary 和 replica),每一個在本地執行檢索,並將結果新增到本地的優先順序佇列中;

(3):每個shard返回本地優先順序序列中所記錄的_id與**score值**,併傳送node3。Node3將這些值合併到自己的本地的優先順序佇列中,並做全域性的排序(node 3將它們合併成一條彙總的結果),返回給客戶端。

相關文章