偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

引言

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

開(kāi)始

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

1. 硬件配置的黃金法則

我們?cè)蛎つ慷雅渲贸赃^(guò)大虧——128核CPU、1TB內(nèi)存的豪華機(jī)器,性能竟不如32核+256GB的中配集群。關(guān)鍵經(jīng)驗(yàn):

內(nèi)存與堆大小

# elasticsearch.yml  
-Xms30g  
-Xmx30g

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

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

磁盤選擇

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

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

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

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

      萬(wàn)兆網(wǎng)絡(luò)必須開(kāi)啟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ù)臺(tái))  
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è)計(jì):從分片風(fēng)暴到性能飛躍

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

我們?cè)蚰J(rèn)5個(gè)分片導(dǎo)致400萬(wàn)個(gè)小分片,引發(fā)集群元數(shù)據(jù)爆炸?,F(xiàn)采用公式:

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

真實(shí)案例

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

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

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

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

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

該配置將超過(guò)256字符的字符串自動(dòng)丟棄,防止無(wú)限制的text分析。

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

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

# 滾動(dòng)到冷節(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,存儲(chǔ)成本降低40%。

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

1. 慢查詢分析三板斧

抓取慢查詢

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

解剖執(zhí)行計(jì)劃

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

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

GET /my_index/_search?preference=_shards:2

2. 聚合查詢的加速秘籍

我們?cè)蛞粋€(gè)terms聚合拖垮整個(gè)集群:

啟用doc_values字段

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

分桶優(yōu)化

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

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

針對(duì)高頻查詢提前加載:

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.紅色警報(bào)線

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

磁盤空間 < 20%

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

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

#!/bin/bash  
# 自動(dòng)清理舊索引  
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

# 注冊(cè)倉(cāng)庫(kù)  
PUT /_snapshot/my_s3_repository  
{
"type": "s3",
"settings": {
    "bucket": "my-es-backup",
    "region": "us-west-2"
  }
}  

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

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

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

優(yōu)化項(xiàng)

QPS提升

延遲下降

資源消耗下降

分片大小調(diào)整

+35%

42%

28%

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

+18%

25%

15%

查詢路由優(yōu)化

+52%

61%

-

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

-

-

40%

測(cè)試環(huán)境:

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

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

? 版本:Elasticsearch 8.9.0

六、踩坑啟示錄

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

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

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

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

POST /my_index/_forcemerge?max_num_segments=1

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

責(zé)任編輯:武曉燕 來(lái)源: 云原生運(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

2011-01-13 08:56:11

Emulex分銷神州數(shù)碼

2014-11-13 11:18:27

云項(xiàng)目云消費(fèi)者云問(wèn)題

2020-01-09 08:36:35

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

2021-08-27 16:50:22

數(shù)字化

2017-01-05 19:34:06

漏洞nodejs代碼

2012-09-19 13:03:00

2018-04-04 14:52:04

2013-07-18 09:30:27

2011-01-18 19:07:53

Thunderbird

2010-08-05 09:14:29

DB2隔離級(jí)別

2015-08-19 09:38:29

云集群高性能計(jì)算云計(jì)算

2021-07-08 14:59:05

JMHMongodb數(shù)據(jù)

2020-10-22 12:46:59

騰訊云容器認(rèn)證
點(diǎn)贊
收藏

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