圖解Elasticsearch之一——索引創建過程

0、引言

這是國外培訓ppt課程的節選內容。

以下是我們的Core Elasticsearch:Operations課程中的一些很棒的幻燈片,它們有助於解釋分片分配的概念。 我們建議您更全面地瞭解這一點,但我會在此提供我們培訓的概述:

分片分配是將分片分配給節點的過程。 這可能發生在初始恢復,副本分配,重新平衡或添加或刪除節點期間。 大多數時候,你不需要考慮它,這項工作是由Elasticsearch在後臺完成的。 如果您發現自己對這些細節感到好奇,本文將探討在幾種不同情況下的分片分配。

由於是圖解,爲方便閱讀,我分了4篇文章逐一呈現。

1、認知前提

這是我們的4節點集羣,我們將在內容中使用這些示例:

2、創建索引

這是最簡單的用例。 我們已經創建了一個索引c,爲此我們必須分配新的分片。 如上,通過使用Kibana中的Console插件將第一個文檔索引到新索引c中,使用灰色框中的命令進行索引相關操作。

對於索引c,我們創建了一個主分片和一個副本分片。 Master主節點需要創建索引c,並分配兩個分片c0(主分片和副本分片)。 集羣平衡的方式如下:

  • 1、通過查看羣集中每個節點包含的平均分片數,然後嘗試使該數字儘可能接近相同
  • 2、通過評估集羣中的每個索引級別,並嘗試在這些索引之間重新平衡分片。 這個過程有一些限制,這些限制是由分配決策者強加的。 主節點評估集羣嘗試做出的每個決策,並做出是/否決定。

3、分片分配機制

最乾淨的示例是您不能將主分片和副本分片數據放在同一節點上。

3.1、基於冷熱節點類型設置分片

這允許您僅在具有某些屬性的節點上放置分片,並接受或拒絕集羣做出的決策。 這是控制此配置的用戶驅動決策的示例。

知識點:集羣的冷熱數據分離。

當使用elasticsearch進行更大時間的數據分析用例時,我們建議使用基於時間的索引和分層架構,其中包含3種不同類型的節點(主節點,Hot熱節點和Warm暖冷節點),我們將其稱爲“冷熱數據分離 “架構。每個節點都有自己的特徵,如下所述。

主節點

我們建議每個羣集運行3個專用主節點,以提供最大的彈性性能。使用這些時,您還應將discovery.zen.minimum_master_nodes設置爲2,這樣可以防止出現“裂腦”情況。

利用專用主節點,僅負責處理集羣管理和狀態,提高整體穩定性。

因爲它們不包含數據也不參與搜索和索引操作,所以它們在繁重索引或長時間的搜索期間可能不會遇到對JVM的相同需求。因此不太可能受到長時間垃圾收集暫停(gc pause)的影響。

因此,可以爲它們配置CPU,RAM和磁盤配置,遠低於數據節點所需的配置。

熱節點

此專用數據節點執行集羣中的所有索引操作。他們也擁有最新的、最常被查詢的索引數據。

由於索引是CPU和IO密集型操作,因此這些服務器需要功能強大,並且需要連接SSD存儲。

我們建議至少運行3個熱節點以實現高可用性。 根據您希望收集和查詢的最新數據量,您可能需要增加此數字以實現性能目標。

冷節點

這種類型的數據節點旨在處理大量不經常查詢的只讀索引。

由於這些索引是隻讀的,因此熱節點傾向於使用大型連接磁盤(通常是機械磁而不是SSD。

與熱節點一樣,我們建議至少使用3個熱節點以實現高可用性。

和以前一樣,需要注意的是,大量數據可能需要額外的節點來滿足性能要求。

另請注意,CPU和內存配置通常需要接近熱節點的配置。這隻能通過測試類似於您在生產環境中遇到的查詢來確定。

相關冷熱節點設置和操作參考: https://www.elastic.co/blog/hot-warm-architecture-in-elasticsearch-5-x

3.2、基於磁盤使用率分片

Master主節點監視羣集上的磁盤使用情況並查看高/低警戒水位線。

3.3、分配分片的節流機制

節流——意味着原則上我們可以爲節點分配一個分片,但是有太多的分片在後臺需要持續恢復。

爲了保護節點並允許恢復,分配決策器可以告訴集羣等待並重試在下一次迭代中將分片分配給同一節點。

4、分片的初始化過程

一旦我們確定了主分片所屬的位置,它就會被標記爲“初始化”,並且決策將通過修改後的集羣狀態廣播到集羣,集羣狀態可供集羣中的所有節點使用。

標記初始化後,節點將檢測到它已分配新的分片, 將創建一個空的lucene索引,一旦完成,將通知主節點已準備好分片,主節點將分片標記爲已啓動,併發送另一個已修改的集羣狀態。

一旦分配了主分片的節點獲得更新的集羣狀態,它就會將該分片標記爲已啓動。 因爲它是主分片,現在可以索引它。

正如您所見,所有這些通信都是通過修改的集羣狀態完成的。 完成此循環後,主節點將執行重新路由並重新評估分片分配,從而可能決定上一次迭代中的節流限制的分片重新分配。

4.1 分配主分片

在我們的例子中,master現在必須嘗試分配剩餘的副本c0。 這也是分配決策者的決定,它阻止分配副本,直到主節點在包含它的節點上標記爲已啓動。

4.2 分配副本分片

此時,使用與上述相同的過程進行重新平衡,目標是確保整個羣集中的數據平衡,並且在此示例的情況下,我們將按順序將c0副本分片分配給羣集中的node3 保持平衡。 這應該在羣集中的每個節點上留下3個分片。

我們需要確保副本分片數據和主分片數據一致。

分配副本時,重要的是要了解我們要將任何丟失的數據從主分片複製到副本。 在此之後,主服務器將再次將副本標記爲已啓動並廣播新的集羣狀態。

篇幅原因,後續的幾個小章節: 集羣重啓、集羣刪除節點、移動分片引起的分片底層操作將後續跟進。

5、小結

文章原標題"every-shard-deserves-a-home“ 直譯爲每個分片都值得擁有一個家。

實際的含義想通過圖解的方式將不同場景下主分片、副本分片的來龍去脈講明白。

本來準備寫一篇segment底層的文章,但看到了這一片忍不住要翻譯一下, 水平有限,歡迎拍磚。

參考:http://t.cn/ReHGfDJ

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章