elasticsearch(六) 之 elasticsearch優化


elasticsearch 優化

從硬件上 :

  1. 使用SSD 硬盤,解決io導致的瓶頸。
  2. 增大內存 但不超過32G(單實例建議設置31G) ,elasticsearch 設置不超過機器內存的60%。
  3. 如果負載過高,增加cpu核心數。

從軟件上:

  1. 減少集群的副本數量, 一般集群有1-2兩個副本即可,最多有3個副本。
Elasticsearch 默認副本數量為 3 個,雖然這樣會提高集群的可用性,增加搜索的並發數,但是同時也會影響寫入索引的效率。

在索引過程中,需要把更新的文檔發到副本節點上,等副本節點生效后在進行返回結束。使用 Elasticsearch 做業務搜索的時候,建議副本數目還是設置為 3 個,但是像內部 ELK 日志系統、分布式跟蹤系統中,完全可以將副本數目設置為 1 個。
  1. 根據業務量設定分片的數量(默認分片是為5個,分片是為了解決一個索引過大),多分片會導致io壓力。

  2. 一個索引不要過大--》分索引(按日分,按周分)

  3. 減少索引的document里的字段,在跟需要查詢的用戶確認他們需要的字段,然后將一些不需要的字段清除。將filebeat的一些name字段,version字段刪除。

  4. 針對不使用的index,進行close。我們需要的時候再進行open,可以節約內存和減輕系統的壓力。

curl -XPOST 127.0.0.1:9200/index_name/_close 
curl -XPOST 127.0.0.1:9200/index_name/_open
  1. 增加 Refresh 時間間隔

    為了提高索引性能,Elasticsearch 在寫入數據時候,采用延遲寫入的策略,即數據先寫到內存中,當超過默認 1 秒 (index.refresh_interval)會進行一次寫入操作,就是將內存中 segment 數據刷新到操作系統中,此時我們才能將數據搜索出來,所以這就是為什么 Elasticsearch 提供的是近實時搜索功能,而不是實時搜索功能。

    當然像我們的內部系統對數據延遲要求不高的話,我們可以通過延長 refresh 時間間隔,可以有效的減少 segment 合並壓力,提供索引速度。在做全鏈路跟蹤的過程中,我們就將 index.refresh_interval 設置為 30s,減少 refresh 次數。

    同時,在進行全量索引時,可以將 refresh 次數臨時關閉,即 index.refresh_interval 設置為 -1,數據導入成功后再打開到正常模式,比如 30s。
    如果我們的業務是要求的實時性比較高的,將index.refresh_interval 設置為 -1

  2. 不使用swap(虛擬內存)

    為什么要禁用?禁用swap

  3. 使用elastisearch 自動生成的id(_id)

    也就是我們的document的字段里面不要有_id字段,讓該字段由elasticsearch自動生成。這樣索引更快。

從用戶使用層

  1. 用戶層:用戶去搜索的時候需要避免返回比較大的結果集,通過設置默認的搜索時間段,來盡量避免返回較大的結果集。
  2. 用戶進行搜索的時候盡量使用過濾器(Filter)這樣可以從縮小搜索范圍。比如我們在查詢報錯日志時,我們通過level字段篩選出ERROR等級,然后再進行搜索,這樣對系統的壓力可以減小,並且搜索速度更快。

文檔:
官網:

https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.html

優化方案:
https://elasticsearch.cn/article/6202

lucene
https://elasticsearch.cn/article/6178

騰訊雲優化:https://cloud.tencent.com/developer/article/1156231


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM