簡體   English   中英

Elasticsearch - 節點如何檢測分片故障

[英]Elasticsearch - How node detects shard failure

我對彈性搜索有基本的了解。我遇到了以下短語。 來自https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-replication.html

在主節點本身發生故障的情況下,托管主節點的節點將向主節點發送有關它的消息。 索引操作將等待(最多 1 分鍾,默認情況下)讓主節點將其中一個副本提升為新的主節點。

問題是,托管分片的節點如何知道分片的故障? 據我了解, shard 是在數據節點上運行的 lucene 實例。

很可能(自 elasticsearch 版本 1.4 起進行了一些改進),如果分片中的任何段文件具有不正確的校驗和,則將通過校驗和檢測到,然后分片被標記為損壞。 這可能發生在恢復時(節點啟動后)或對段執行任何 IO 操作時(即通過搜索或通過合並策略讀取時)

7.8 的此頁面(選擇您用於准確文檔的版本)可能會提到如何消除損壞的數據,或者如果數據很重要,最好的方法是從快照中恢復: https://www.elastic.co/guide/en/elasticsearch /reference/7.8/shard-tool.html#_description_7

我想,你對這個陳述感到困惑

托管分片的節點如何知道分片的故障? 據我了解, shard 是在數據節點上運行的 lucene 實例。

雖然確實每個分片都是 Lucene 實例(索引),但它不是 1:1 映射和 elasticsearch 的 1 個數據節點可以托管多個分片,而不僅僅是 1 個分片和 Z44138F63FDDC165FE379CE9A2 的故障總是意味着故障.

持有主分片的節點知道它是否連接到網絡,是否能夠索引數據或分片是否已損壞,如@julian 所述,然后它可以將該信息發送到主節點,然后將其他副本提升為主節點它包含在所有節點都擁有的集群 state 中。

在網絡故障的情況下,節點上托管的所有主分片都將被其他分片替換,並且很容易檢測到主分片不會從該數據節點發出心跳。

希望我的答案的大膽部分是您正在尋找的,否則請隨時發表評論並嘗試進一步解釋。

乍一看令人困惑。 但是,如果您深入研究,它仍然是一個有效的場景,並且在高級文檔中也提到過。

假設協調節點接收到索引數據的請求。 主節點維護同步分片列表。 然后 master 將請求轉發到具有主分片的節點。 正如您所提到的,分片是 Lucene 內核。 接收到的節點必須索引主分片中的數據。 如果由於分片損壞的部分等原因無法執行,那么它將通知主節點選擇另一個主節點。

master 還監控每個分片,並在需要時通知其他節點准備一個主分片。 如果需要,將分片從主分片降級。 大師在這種情況下做得更多。

Elasticsearch 維護應接收操作的分片副本列表。 該列表稱為同步副本,由主節點維護

一旦確定了復制組,操作就會在內部轉發到該組的當前主分片

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM