Elasticsearch核心技術與實戰學習筆記 38 | 分片與集羣的故障轉移

一 序

  本文屬於極客時間Elasticsearch核心技術與實戰學習筆記系列。

二 Primary Shard - 提升系統存儲容量

分片是 ES 分佈式儲存的基石

  • 主分片 / 副本分片

通過主分片,將數據分佈在所有節點上

  • Primary Shard , 可以將一份索引的數據,分散在多個 Data Node 上,實現儲存的水平擴展
  • 主分片(Primary Shard)數在索引創建時候指定,後續默認不能修改,如要修改,需重建索引

2.1  Replica Shard - 提高數據可用性

數據可用性

  • 通過引入副本分片(Replica Shard)提高數據的可用性。一旦主分片丟失,副本分片可以在 Promote 成主分片。副本分片數可以動態調整的。每個節點上都有完備的數據。如果不設置副本分片,一旦出現節點硬件故障,就有可能造成數據丟失。

提高系統的讀取性能

  • 副本分片由主分片(Primary Shard)同步。通過支持增加 Replica 個數,一定程度可以提高讀取的吞吐量

2.2 分片數的設置

  如何規劃一個索引的主分片數和副本分片數

  • 主分片數過小:例如創建一個 1 個 Primary Shard 的 index

         如果該索引增長很快,集羣無法通過增加節點實現對這個索引的數據擴展

  • 主分片數設置過大:導致單個 Shard 容量很小,引發一個節點上有過多分片,影響性能
  • 副本分片設置過多,會降低集羣整體的寫入性能

3 demo 單節點集羣

因爲副本分片必須和主分片分佈在不同的節點上,這樣才能保證單臺機器故障的時候數據不會真正的丟失。

3.1 增加一個數據節點

  • 集羣狀態轉爲綠色
  • 集羣具備故障轉移能力

3.2 再增加一個節點

  •   Master 節點會決定分片分配到哪個節點
  • 通過增加節點數,提高集羣的計算能力

 

四 故障轉移

  •  3 個節點共同組成。包含 1 個索引,索引設置了 3 個 Primary Shard 和 1 個 Replica
  • 節點 1 是 Master 節點,節點意外出現故障(主分片0也丟失)。集羣重新選舉 Master 節點(圖上是node2)
  • Node3 上的 R0 (之前主分片P0的副本)提升成 P0 ,集羣變黃
  • node2把r0 r1分別分配到node2,node3上(這快沒理解)R0 R1 分配,集羣變綠

4.1集羣健康狀態

  • Green : 健康狀態,所有的主分片和副本分片都可用
  • Yellow: 亞健康,所有的主分片可用,部分副本分片不可用
  • Red:不健康狀態,部分主分片不可用

 補充下知識點:

分片是Elasticsearch中的最小工作單元,本質上是一個Lucene Index。在Lucene中,單個倒排索引文件被稱爲Segment,Segment是自包含且不可變更的,多個Segment彙總在一起稱爲Lucene Index

當有新文檔生成時,會生成新的Segment,查詢時會同時查詢所有Segment,並且對結果彙總,Lucene中有一個文件用來記錄所有Segments信息,叫做Commit Point,刪除的文檔信息,保存在.del文件中。
1:選主的過程中可能存在問題的場景?
選主的過程應該很短,這個期間,如果有創建index或者分片reallocation有可能會出錯。
2:故障轉移期間可能會出現問題的場景?
故障轉移期間,如果只是黃色變綠,應該不影響讀寫,因爲副本會提升爲主分片。集羣變紅,代表有主分片丟失,這個時候會影響讀寫。
3: 故障轉移,數據重新分配,消耗性能的避免方式?
例如一個主分片不可用了。只要設置了副本分片,其中一個副本分片立即會將自己提升爲主分片。同時會將自己的數據分配到一個新的replica上,有時候,我們只是重啓一臺機器,可以讓這個reallocation的動作延遲一段時間再做,從而避免無謂的數據拷貝。

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