Elasticsearch簡單優化

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文件。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章