Es優化
- 系統參數調整如:打開文件數,關閉swap等
es系統配置官網地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/setting-system-settings.html -
配置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 - Jvm優化
建議不要超過31GB
預留一般內存給系統用作文件緩存 -
內存和數據量比例:
搜索類項目的比例在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個節點足夠 - 寫性能優化:
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文件。