自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

獨(dú)家秘方:看我如何把 ES 的集群性能烹飪成米其林級別

云計算 云原生
Elasticsearch集群如同精密的瑞士手表,每個參數(shù)都是相互關(guān)聯(lián)的齒輪。本文的方案來自日均百億級查詢的實(shí)戰(zhàn)錘煉,但具體實(shí)施仍需結(jié)合業(yè)務(wù)場景。??記?。鹤詈玫膬?yōu)化,是在設(shè)計階段就避免問題。??

引言

如果公司需要對于 ES 進(jìn)行調(diào)優(yōu),這個時候你該怎么辦呢,不妨提前學(xué)習(xí),到時候用到的時候,也可以讓大家對你......

開始

一、集群規(guī)劃:避開那些教科書不會寫的坑

1. 硬件配置的黃金法則

我們曾因盲目堆配置吃過大虧——128核CPU、1TB內(nèi)存的豪華機(jī)器,性能竟不如32核+256GB的中配集群。關(guān)鍵經(jīng)驗:

內(nèi)存與堆大小

# elasticsearch.yml  
-Xms30g  
-Xmx30g

JVM堆內(nèi)存不超過32GB(避免指針壓縮失效)

總內(nèi)存 = 堆內(nèi)存 + 1GB(OS緩存) + 2GB(Lucene預(yù)留)

磁盤選擇

     優(yōu)先使用NVMe SSD(隨機(jī)IOPS需>5萬)

     避免RAID 5/6(寫懲罰過高),推薦RAID 10或直連磁盤

      ? CPU與網(wǎng)絡(luò)

   禁用超線程(實(shí)測搜索QPS提升15%)

      萬兆網(wǎng)絡(luò)必須開啟TCP BBR擁塞控制

2. 節(jié)點(diǎn)角色的精細(xì)化分配

初期我們混用節(jié)點(diǎn)角色,導(dǎo)致master節(jié)點(diǎn)OOM?,F(xiàn)采用分層架構(gòu):

# 專用master節(jié)點(diǎn)(3/5/7奇數(shù)臺)  
node.master: true
node.data: false

# 數(shù)據(jù)節(jié)點(diǎn)(高配)  
node.master: false
node.data: true
search.remote.connect: false

# Coordinating節(jié)點(diǎn)(橫向擴(kuò)展)  
node.master: false
node.data: false

避坑要點(diǎn)

? Master節(jié)點(diǎn)內(nèi)存不低于8GB(否則Zen Discovery可能失敗)

? Coordinating節(jié)點(diǎn)需要高網(wǎng)絡(luò)帶寬

二、索引設(shè)計:從分片風(fēng)暴到性能飛躍

1. 分片大小的科學(xué)計算

我們曾因默認(rèn)5個分片導(dǎo)致400萬個小分片,引發(fā)集群元數(shù)據(jù)爆炸?,F(xiàn)采用公式:

理想分片數(shù) = 總數(shù)據(jù)量(GB) / 目標(biāo)分片大小(GB)  
目標(biāo)分片大小 = 50GB(日志類)~ 100GB(搜索類)

真實(shí)案例

? 原始設(shè)計:每日1個索引,5分片1副本 → 每月產(chǎn)生300分片

? 優(yōu)化后:按周建索引,單索引50分片 → 分片數(shù)減少60%

2. 動態(tài)模板的智能管理

通過動態(tài)模板避免字段爆炸:

PUT _template/business_logs  
{
"mappings":{
    "dynamic_templates":[
      {
        "strings_as_keyword":{
          "match_mapping_type":"string",
          "mapping":{
            "type":"keyword",
            "ignore_above":256
          }
        }
      }
    ]
}
}

該配置將超過256字符的字符串自動丟棄,防止無限制的text分析。

3. 時序數(shù)據(jù)的冷熱分層

PUT logs-2024-08
{
"settings":{
    "index.routing.allocation.require.box_type":"hot",
    "index.lifecycle.name":"logs_policy"
}
}

# 滾動到冷節(jié)點(diǎn)  
POST logs-2024-08/_rollover  
{
"conditions":{"max_age":"7d"},
"settings":{
    "index.routing.allocation.require.box_type":"cold"
}
}

配合ILM策略,熱數(shù)據(jù)用SSD,冷數(shù)據(jù)遷移到HDD,存儲成本降低40%。

三、查詢優(yōu)化:從20秒到200毫秒的魔法

1. 慢查詢分析三板斧

抓取慢查詢

PUT /_settings  
{
  "index.search.slowlog.threshold.query.warn": "10s",
  "index.search.slowlog.threshold.query.info": "5s"
}

解剖執(zhí)行計劃

GET /my_index/_search?explain  
{
  "query": { ... }
}

強(qiáng)制路由優(yōu)化

GET /my_index/_search?preference=_shards:2

2. 聚合查詢的加速秘籍

我們曾因一個terms聚合拖垮整個集群:

啟用doc_values字段

"properties": {
  "user_id": {
    "type": "keyword",
    "doc_values": true  # 默認(rèn)開啟但需確認(rèn)
  }
}

分桶優(yōu)化

"aggs": {
"popular_items":{
    "terms":{
      "field":"product_id",
      "size":100,
      "shard_size":10000  # 分片級預(yù)聚合
    }
}
}

3. 索引預(yù)熱的黑科技

針對高頻查詢提前加載:

PUT /hot_index/_settings  
{
"index.search.idle.after":"30s",
"index.search.warmup":{
    "queries":[
      {"term":{"status":"active"}},
      {"range":{"timestamp":{"gte":"now-7d/d"}}}
    ]
}
}

四、運(yùn)維監(jiān)控:從救火到預(yù)防

1.紅色警報線

JVM內(nèi)存使用 > 75%

磁盤空間 < 20%

CPU負(fù)載 > 70%持續(xù)5分鐘

2.自動化運(yùn)維腳本

#!/bin/bash  
# 自動清理舊索引  
cur_date=$(date +%Y.%m.%d)  
keep_days=30  

indices=$(curl -sXGET http://localhost:9200/_cat/indices?h=index | grep -E "logstash-.*")  

for index in$indices; do
    index_date=$(echo$index | awk -F '-''{print $2}')  
    if [[ "$index_date" < $(date -d "$keep_days days ago" +%Y.%m.%d) ]]; then
        curl -XDELETE "http://localhost:9200/$index"
    fi
done

3. 災(zāi)備恢復(fù)策略

跨集群復(fù)制(CCR)

PUT /_ccr/follow/logs-follower  
{
  "remote_cluster": "backup_cluster",
  "leader_index": "logs-leader"
}

快照到S3

# 注冊倉庫  
PUT /_snapshot/my_s3_repository  
{
"type": "s3",
"settings": {
    "bucket": "my-es-backup",
    "region": "us-west-2"
  }
}  

# 定時快照  
PUT /_slm/policy/nightly-snapshots  
{
"schedule": "0 30 1 * * ?", 
"name": "<nightly-snap-{now/d}>",
"repository": "my_s3_repository"
}

五、性能壓測:用數(shù)據(jù)說話

我們使用esrally進(jìn)行的對比測試:

優(yōu)化項

QPS提升

延遲下降

資源消耗下降

分片大小調(diào)整

+35%

42%

28%

JVM參數(shù)調(diào)優(yōu)

+18%

25%

15%

查詢路由優(yōu)化

+52%

61%

-

冷熱數(shù)據(jù)分離

-

-

40%

測試環(huán)境:

? 數(shù)據(jù)量:5TB

? 節(jié)點(diǎn):6個數(shù)據(jù)節(jié)點(diǎn)(32核/128GB/2TB NVMe)

? 版本:Elasticsearch 8.9.0

六、踩坑啟示錄

1. 不要過度分片:每個分片消耗約2-3GB堆內(nèi)存

2. 避免通配符查詢*:* 會導(dǎo)致全索引掃描

3. 慎用fielddata:text類型聚合可能引發(fā)內(nèi)存爆炸

4. 定期_forcemerge:合并段文件提升查詢性能

POST /my_index/_forcemerge?max_num_segments=1

優(yōu)化永無止境:Elasticsearch集群如同精密的瑞士手表,每個參數(shù)都是相互關(guān)聯(lián)的齒輪。本文的方案來自日均百億級查詢的實(shí)戰(zhàn)錘煉,但具體實(shí)施仍需結(jié)合業(yè)務(wù)場景。記?。鹤詈玫膬?yōu)化,是在設(shè)計階段就避免問題。

責(zé)任編輯:武曉燕 來源: 云原生運(yùn)維圈
相關(guān)推薦

2013-06-26 16:12:21

MySQL集群性能優(yōu)化

2010-06-07 09:14:55

Hadoop集群

2022-11-27 17:39:06

大數(shù)據(jù)集群性能

2020-02-19 14:37:11

hashtagRediskey

2018-01-09 09:06:14

機(jī)械硬盤數(shù)據(jù)

2010-05-07 14:10:05

Oracle數(shù)據(jù)導(dǎo)出

2024-09-05 12:27:17

2014-11-13 11:18:27

云項目云消費(fèi)者云問題

2020-01-09 08:36:35

Testing指標(biāo)零假設(shè)

2015-08-19 09:38:29

云集群高性能計算云計算

2021-08-27 16:50:22

數(shù)字化

2011-01-18 19:07:53

Thunderbird

2021-07-08 14:59:05

JMHMongodb數(shù)據(jù)

2013-07-18 09:30:27

2012-09-19 13:03:00

2017-01-05 19:34:06

漏洞nodejs代碼

2018-04-04 14:52:04

2010-08-05 09:14:29

DB2隔離級別

2015-04-02 09:09:12

VPN無線組網(wǎng)路由

2011-01-13 08:56:11

Emulex分銷神州數(shù)碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號