管理 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 的分片策略會盡量保證節點上的分片數大 致相同
- 擴容的新節點沒有資料,導致新索引集中在新 的節點
- 熱點資料過於集中,可能會產生新能問題
本作品採用《CC 協議》,轉載必須註明作者和本文連結