ES 筆記三十一:分片與叢集的故障轉移

CrazyZard發表於2019-12-18
  • 分片是ES 分散式儲存的基石
    • 主分片/副本分片
  • 通過主分片,將資料分佈在所有節點上
    • Primary Shard ,可以將一份索引的資料,分散在多個Data Node 上,實現儲存的水平擴充套件
    • 主分片(Primary Shard)數在索引建立時候指定,後續預設不能修改,如要修改,需重建索引
  • 資料可用性
    • 通過引入副本分片(Replica Shard)提高資料的可用性。一旦主分片丟失,副本分片可以在Promote成主分片。副本分片數可以動態調整的。每個節點上都有完備的資料。如果不設定副本分片,一旦出現節點硬體故障,就有可能造成資料丟失。
  • 提高系統的讀取效能
    • 副本分片由主分片(Primary Shard)同步。通過支援增加Replica個數,一定程度可以提高讀取的吞吐量
  • 如何規劃一個索引的主分片數和副本分片數
    • 主分片數過小: 例如建立一個1個Primary Shard 的 index
      • 如果該索引增長很快,叢集無法通過增加節點實現對這個索引的資料擴充套件
    • 主分片數設定過大:導致單個Shard容量很小,引發一個節點上有過多分片,影效能
    • 副本分片設定過多,會降低叢集整體的寫入效能

單節點叢集

  • 副本無法分片,叢集狀態為黃色

ES筆記三十一:分片與叢集的故障轉移

增加一個資料節點

  • 叢集狀態轉為綠色
  • 叢集具備故障轉移能力

ES筆記三十一:分片與叢集的故障轉移

在增加一個節點

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

ES筆記三十一:分片與叢集的故障轉移

  • 3個節點共同組成。包含1個索引,索引設定了3個Primary Shard 和1個Replica
  • 節點1是Master節點,節點意外出現故障。叢集重新選舉Master節點
  • Node3 上的R0 提升成P0 ,叢集變黃
  • R0 R1分配,叢集變綠
  • 需要叢集具備能力,必須將索引的副本分片設定為1,否則一丟失節點,就會造成資料丟失

ES筆記三十一:分片與叢集的故障轉移

  • Green :健康狀態,所有的主分片和副本分片都可用
  • Yellow:亞健康,所有的主分片可用,部分副本分片不可用
  • Red:不健康狀態,部分主分片不可用
    GET /_cluster/health
    {
    "cluster_name" : "lsk",
    "status" : "yellow",
    "timed_out" : false,
    "number_of_nodes" : 2,
    "number_of_data_nodes" : 2,
    "active_primary_shards" : 16,
    "active_shards" : 32,
    "relocating_shards" : 0,
    "initializing_shards" : 0,
    "unassigned_shards" : 6,
    "delayed_unassigned_shards" : 0,
    "number_of_pending_tasks" : 0,
    "number_of_in_flight_fetch" : 0,
    "task_max_waiting_in_queue_millis" : 0,
    "active_shards_percent_as_number" : 84.21052631578947
    }
  • 啟動一個節點,3個Primary shard,1個Replica,叢集黃色,因為無法分片Replica
  • 啟動3個節點,1個索引上包含3個Primary Shard,一個Replica
  • 關閉Node 1(Master)
  • 檢視Master Node 重新選舉
  • 叢集變黃,然後重新分配
本作品採用《CC 協議》,轉載必須註明作者和本文連結

快樂就是解決一個又一個的問題!

相關文章