Elasticsearch簡單優化

語言: CN / TW / HK

Es優化

  1. 系統引數調整如:開啟檔案數,關閉swap等
    es系統配置官網地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/setting-system-settings.html
  2. 配置es引數
    cluster.name: my-es-cluster #叢集的名稱
    node.master: true # 參與主節點選舉
    node.name: node-2 #節點的名稱
    path.data: /home/elasticsearch-7.6.2/data #資料路徑
    path.logs: /home/elasticsearch-7.6.2/logs #日誌路徑
    bootstrap.memory_lock: false #這行去掉註釋把 ture 改成 false,不改會造成服務
    bootstrap.system_call_filter: false #新增這行,否則啟動會報錯。
    network.host: 10.100.31.58 # elasticsearch 主機地址
    http.port: 9200 #埠號
    discovery.seed_hosts: ["10.100.31.58", "10.100.31.67","10.100.31.48"] #啟動新節
    cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
    discovery.zen.minimum_master_nodes: 2 #選舉master最少節點數(可防止腦裂)
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    http.cors.allow-headers: Authorization
    xpack.security.enabled: true
    node.attr.box_type: hot
    indices.fielddata.cache.size: 10%
    indices.breaker.total.use_real_memory: false
    indices.breaker.fielddata.limit: 40%
    indices.breaker.request.limit: 40%
    indices.breaker.total.limit: 80%
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
    xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

























  3. Jvm優化
    建議不要超過31GB
    預留一般記憶體給系統用作檔案快取

  4. 記憶體和資料量比例:
    搜尋類專案的比例在1:16以內
    日誌類專案的比例建議在1:48~1:96
    假設總資料量大小為1TB,3個弄得,1個副本,那麼每個node要儲存的資料量為2TB/3=666GB,即700GB左右,做20%的預留空間,每個弄得要儲存大約850GB的資料
    如果搜尋類專案,每個node記憶體大小為850GB/16=53GB,大於31GB。
    31*16=496,即每個node最多儲存496GB資料,所以需要至少5個node
    如果是日誌型別專案,每個node記憶體大小為850GB/48=18GB,因此3個節點足夠





  5. 寫效能優化:
    Segment寫入磁碟的過程很耗時,可以藉助檔案系統快取的特性,先將segment在快取中建立並開放查詢來進一步提升實時性,該過程在es中被稱為refresh。
    在refresh之前文件會先儲存在一個buffer中,refresh時將buffer中的所有文件清空並生成segment(預設refresh執行每秒執行一次)。
    優化方式:
    增大refresh_interval,降低實時性,把refresh間隔調長一點,減少寫操作(設定-1禁止自動refresh)。
    增大index buffer size,引數indices.memory.index_buffer_size,預設為10%




translog是es防止segment還沒有寫入磁碟前發生宕機引入的一種機制。
Es引入translog機制,寫入文件到buffer時,同時將高操作寫入translog.
Translog檔案會即時寫入磁碟(fsync),6.x預設每個請求都會落盤,可以修改為每5秒寫一次,這樣風險是會丟失5秒資料,相關配置index.translog.*
Es啟動時會檢查translog檔案,並從中恢復資料
優化:
降低translog寫頻率,提高寫效率,會降低容災能力
Index.translog.durability設定為async,index.translog.sysc_interval設定需要的大小,比如120s,那麼translog會改為每120s寫一次磁碟。
Index.translog.flush_threshold_size預設為512M,即translog超過該大小時會觸發一次flush,可以適當調整大小(比如1020M)






Flush負責將記憶體中的segment寫入磁碟,主要作如下的工作:
將translog寫入磁碟。
將index buffer清空,其中的文件生成一個新的segment,相當於一個refresh操作。
更新commit point並寫入磁碟
執行fsync操作,將記憶體中的segment寫入磁碟
刪除舊的translog檔案。