管理 ES 叢集:分片設定及管理

CrazyZard發表於2020-02-20
  • 7.0 開始,新建立一個索引時,預設只有一個主分片
    • 單個分片,查詢算分,聚合不準的問題都可以得以避免
  • 單個索引,單個分片時候,叢集無法實現水平擴充套件
    • 即使增加新的節點,無法實現水平擴充套件
  • 叢集增加一個節點後,Elasticsearch 會自動進行分片的移動,也叫 Shard Rebalancing
  • 當分片數 > 節點數時
    • 一旦叢集中有新的資料節點加入,分片就可以自動進行分配
    • 分片在重新分配時,系統不會有 downtime
  • 多分片的好處:一個索引如果分佈在不同的節點,多個節點可以並行執行
    • 查詢可以並行執行
    • 資料寫入可以分散到多個機器
  • 案例 1
    • 每天 1 GB 的資料,一個索引一個主分片,一個副本分片
    • 需保留半年的資料,接近 360 GB 的資料量
  • 案例 2
    • 5 個不同的日誌,每天建立一個日誌索引。每個日誌索引建立 10 個主分片
    • 保留半年的資料
    • 5 * 10 * 30 * 6 = 9000 個分片
  • Shard 是 Elasticsearch 實現叢集水平擴充套件的最小單位
  • 過多設定分片數會帶來一些潛在的問題
    • 每個分片是一個 Lucene 的 索引,會使用機器的資源。過多的分片會導致額外的效能開銷
      • Lucene Indices / File descriptors / RAM / CPU
      • 每次搜尋的請求,需要從每個分片上獲取資料
      • 分片的 Meta 資訊由 Master 節點維護。過多,會增加管理的負擔。經驗值,控制分片總數在 10 W 以內
  • 從儲存的物理角度看
    • 日誌類應用,單個分片不要大於 50 GB
    • 搜尋類應用,單個分片不要超過20 GB
  • 為什麼要控制分片儲存大小
    • 提高 Update 的效能
    • Merge 時,減少所需的資源
    • 丟失節點後,具備更快的恢復速度 / 便於分片在叢集內 Rebalancing
  • 副本是主分片的拷貝
    • 提高系統可用性:相應查詢請求,防止資料丟失
    • 需要佔用和主分片一樣的資源
  • 對效能的影響
    • 副本會降低資料的索引速度:有幾份副本就會有幾倍的 CPU 資源消耗在索引上
    • 會減緩對主分片的查詢壓力,但是會消耗同樣的記憶體資源
    • 如果機器資源充分,提高副本數,可以提高整體的查詢 QPS
  • ES 的分片策略會盡量保證節點上的分片數大 致相同
    • 擴容的新節點沒有資料,導致新索引集中在新 的節點
    • 熱點資料過於集中,可能會產生新能問題

管理 ES 叢集:分片設定及管理

本作品採用《CC 協議》,轉載必須註明作者和本文連結

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

相關文章