圖解Elasticsearch之一——索引建立過程
0、引言
這是國外培訓ppt課程的節選內容。
以下是我們的Core Elasticsearch:Operations課程中的一些很棒的幻燈片,它們有助於解釋分片分配的概念。 我們建議您更全面地瞭解這一點,但我會在此提供我們培訓的概述:
分片分配是將分片分配給節點的過程。 這可能發生在初始恢復,副本分配,重新平衡或新增或刪除節點期間。 大多數時候,你不需要考慮它,這項工作是由Elasticsearch在後臺完成的。 如果您發現自己對這些細節感到好奇,本文將探討在幾種不同情況下的分片分配。
由於是圖解,為方便閱讀,我分了4篇文章逐一呈現。
1、認知前提
這是我們的4節點叢集,我們將在內容中使用這些示例:
2、建立索引
圖1:建立索引c
這是最簡單的用例。 我們已經建立了一個索引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底層的文章,但看到了這一片忍不住要翻譯一下,
水平有限,歡迎拍磚。
參考:https://www.elastic.co/blog/every-shard-deserves-a-home
Elasticsearch基礎、進階、實戰第一公眾號