1. 程式人生 > 其它 >大叔經驗分享(141)ElasticSearch優化實踐

大叔經驗分享(141)ElasticSearch優化實踐

1 冷熱分離(Hot/Warm/Cold)

Index Lifecircle Management Policy

索引特點

  • Hot: 索引被更新,大量被查詢
  • Warm: 索引不更新,偶爾被查詢
  • Cold: 索引不更新,很少被查詢
  • Delete: 索引不更新,不被查詢

參考:https://www.elastic.co/guide/en/elasticsearch/reference/7.0/index-lifecycle-management.html

根據索引特點,可以將es叢集劃分幾個小叢集:

  • Hot叢集:存放Hot索引
  • Warm叢集:存放Warm索引
  • Cold叢集:存放Cold索引(非必須)

https://www.elastic.co/blog/implementing-hot-warm-cold-in-elasticsearch-with-index-lifecycle-management

最簡單的是劃分為Hot和Warm來管理,他們的特點是:

  • Hot叢集:多CPU,大記憶體,小硬碟,小Shard,同時應對大量的讀寫請求
  • Warm叢集:少CPU,小記憶體,大硬碟,大Shard,應對少量的讀寫請求

當一個索引從Hot叢集移動到Warm叢集時,通常需要將小Shard變為大Shard,這裡需要一個shrink操作,即將一個索引的多個shard合併成更少的shard,比如5個10G的shard合併成1個50G的shard,shrink後的索引可以通過alias為原索引被搜尋。

https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-shrink-index.html

2 記憶體分配

elasticsearch的節點記憶體分為2個部分:

  • JVM記憶體
  • Lucene索引記憶體:主要被磁碟大小、shard大小影響

可以通過磁碟大小來預估第二個Lucene索引的最大佔用記憶體,剩下的絕大部分可以分配給JVM,比如當前節點有32G記憶體,磁碟佔用50%,Lucene記憶體使用1G,可以預估磁碟佔滿時Lucene最多使用2G記憶體,那剩下的30G可以分配絕大部分比如28G給JVM來使用,這樣可以最優化節點的記憶體佔用。

3 不同節點間磁碟佔用不均

ElasticSearch的叢集均衡策略是保證不同節點間Shard數量近似相等,如果不同shard大小相差懸殊,就會出現不同節點磁碟佔用不均的情況,具體可以分為兩種:

Hot節點磁碟佔用不均

調整ILM策略,將Hot節點上的索引滾動策略改為使用大小而不是時間,這樣可以減少索引熱節點上的shard大小不等的情況,進一步減少磁碟分佈不均的可能。

Warm節點磁碟佔用不均

可以定期刪除空索引,合併小索引等操作減少shard數量,進一步減少磁碟分佈不均的可能。

4 其他

磁碟使用百分比

熱節點和熱節點磁碟使用到90%的時候要及時擴容

效能瓶頸

關注叢集中的節點有自身的效能瓶頸以及處理能力,比如

  • max_restore_bytes_per_sec:一定要低於磁碟的極限,否則很容易導致節點假死

  • cluster_concurrent_rebalance和node_concurrent_recoveries:如果Warm節點偶爾出現被master踢掉的情況,有可能是因為shrink或遷移的併發太大超過叢集承受能力,這時最好降低這兩個併發限制。