【ELK】節省存儲 之 壓縮存儲方式調整

目錄

集群版本: 7.17.6

解釋幾個概念:

段(Segment)

合并(Merge)

索引設置:

壓縮方式(index.codec):

測試設置前提條件

對比 在創建的時候指定壓縮類型(index.codec)

對比 在寫入完成后的索引更改壓縮類型

線上索引更改壓縮方式前后對比

測試總結

API調用

查看狀態

查看索引配置

創建索引配置

更新索引配置

強制合并索引

為什么默認啟用 LZ4 壓縮,而不是best_compression

通過共享存儲的方式節省存儲的成本


集群版本: 7.17.6

解釋幾個概念:

段(Segment)

可以理解為 是ES 索引存儲數據的最小單位,索引 --> 分片--> 段,Elasticsearch 中的分片是 Lucene 索引,而 Lucene 索引又被分解為多個段。段是索引中的內部存儲元素,用于存儲索引數據,

合并(Merge)

主要指段合并,段是不可變的。較小的段會定期合并到較大的段中,以控制索引大小并清除刪除的內容。段合并的觸發一般會:

  1. 在索引的數據調整(寫入/刪除)操作
  2. 在后臺定期觸發,為了減少開銷,不需要用戶干預,比如說ILM 、refresh_interval
  3. 用戶觸發調整:強制合并(常用)、減少索引分片 和 分割索引分片
強制合并的幾點建議:
? ? 不要并行過多請值合并,Merge是一項資源密集型操作。
? ? 不要合并出超過5G的段,影響性能
? ? 不要在hot節點上執行,影響寫入速度,在cold節點 或者只讀索引
索引設置:

配置分為為靜態(static)和 動態(dynamic

  • static:只能在索引創建時 或 在關閉的索引上設置。
  • dynamic:可以使用API 實時進行更改 。
7.17 版本中:關閉的索引更改其靜態或者動態配置時可能會導致索引錯誤,只能不刪除并重新創建索引。
8.17 版本中:索引reopen 設置 true(默認為 false)可以修改靜態配置。
index.number_of_shards 此設置只能在創建索引時設置。無法在已關閉的索引上更改。8.17 版本 也是一樣
壓縮方式(index.codec)
The default value compresses stored data with LZ4 compression, but this can be set to best_compression which uses DEFLATE for a higher compression ratio, at the expense of slower stored fields performance. If you are updating the compression type, the new one will be applied after segments are merged. Segment merging can be forced using force merge.
  • 存儲數據壓縮方式 ,屬于靜態(static)配置
  • 存儲數據默認是 LZ4壓縮,best_compression 壓縮率比LZ4 要好(8.17 版本中最多可降低約 28% 的存儲使用量),
  • 代價是讀寫性能會降低,優先 選擇cold 狀態的 只讀索引測試
  • 在新建索引和段合并過程中更改壓縮類型

測試設置前提條件

  • es-lucene本身的壓縮率受index字段的影響,暫不討論,只討論best_compressiondefault兩種方式的壓縮后存儲存在多大的差別。
  • 計算存儲:是計算的store.size大小, 包含副本索引,測試中所有的副本(number_of_replicas)都設置為1。
  • max_num_segments=1 不是整個索引的segments.count等于1 ,而是每個分片的segments.count等于1。所以測試中索引_forcemerge后 segments.count等于4 是正常的。
  • 在已有索引情況下更改壓縮類型,如果索引比較大,就不適合使用max_num_segments=1強制合并成一個大的段,這樣就有可能涉及到某些比較大的段不再觸發段合并。所以可能存在一個索引存在兩種壓縮方式

對比 在創建的時候指定壓縮類型(index.codec)

best_compressiondefault
不存在指定lz4的選項 "unknown value for [index.codec] must be one of [default, best_compression] but was: lz4"
#創建my-index-00【1-4】四個索引,分別10000條寫入相同的數據。
my-index-001,my-index-004    best_compression
my-index-002,my-index-003    default#寫入前GET /_cat/indices/my-index-*?v&h=index,pri,rep,docs.count,store.size,pri.store.size,segments.count&bytes=b
index        pri rep docs.count store.size pri.store.size segments.count
my-index-001   2   1          0       904b           452b              0
my-index-002   2   1          0       904b           452b              0
my-index-003   2   1          0       904b           452b              0
my-index-004   2   1          0       904b           452b              0寫入后  best_compression方式存儲使用為default方式的 91% 左右。
index        pri rep docs.count store.size pri.store.size segments.count
my-index-001   2   1     100000    6328997        3118873             24
my-index-002   2   1     100000    6954883        3464912             28
my-index-003   2   1     100000    6934591        3433258             28
my-index-004   2   1     100000    6328400        3112546             26#進行強制合并 max_num_segments=1 后, best_compression方式存儲使用為default方式的 88% 左右。
index        pri rep docs.count store.size pri.store.size segments.count
my-index-001   2   1     100000    6058071        3015574              4
my-index-002   2   1     100000    6817828        3408515              4
my-index-003   2   1     100000    6810228        3402639              4
my-index-004   2   1     100000    6036888        3004366              4

結論:在創建索引的時候就指定best_compression 壓縮方式 只占用default方式的 91% 左右的存儲空間,通過段合并存儲空節省能提升到12% 左右

對比 在寫入完成后的索引更改壓縮類型

問題:
an't update non dynamic settings [[index.codec]] for open indices [[my-index-002/WYo5u-cITcuOWQH3P3RQ6A]]
需要對先進行關閉處理,配置完成后打開,8.17的reopen策略可以自動幫助用戶關閉切重新打開,7.17沒有此功能。
#創建my-index-00【5-6】四個索引,分別10000條寫入相同的數據。ps:my-index-*6個索引的數據都是重復且相同
my-index-002,my-index-003    index.codec:default寫入后存儲情況
index        pri rep docs.count store.size pri.store.size segments.count
my-index-001   2   1     100000    6058071        3015574              4
my-index-002   2   1     100000    6817828        3408515              4
my-index-003   2   1     100000    6810228        3402639              4
my-index-004   2   1     100000    6036888        3004366              4
my-index-005   2   1     100000    6823873        3430651             14
my-index-006   2   1     100000    6836865        3434722             16關閉索引
POST /my-index-005,my-index-006/_close?wait_for_active_shards=0
#更改壓縮類型
PUT /my-index-005,my-index-006/_settings
{"index.codec" : "best_compression"
}
#重新打開
POST /my-index-005,my-index-006/_open#進行強制合并 max_num_segments=1 后, 與創建是的壓縮方式就指定為best_compression 空間存儲使用基本保持一致。
index        pri rep docs.count store.size pri.store.size segments.count
my-index-001   2   1     100000    6058071        3015574              4
my-index-002   2   1     100000    6817828        3408515              4
my-index-003   2   1     100000    6810228        3402639              4
my-index-004   2   1     100000    6036888        3004366              4
my-index-005   2   1     100000    6012083        3007382              4
my-index-006   2   1     100000    6001636        3001571              4

結論:在寫入完成后的索引更改壓縮方式與創建是的壓縮方式就指定為best_compression 空間存儲使用基本保持一致,基本都節省 10% 左右的存儲空間

線上索引更改壓縮方式前后對比
更改前index.codec:default
index              pri rep docs.count  store.size pri.store.size segments.count
applog-2025.02.15   1   1   10514847  6809313634     3404656817             58
applog-2025.02.16   1   1    9974249  6491719356     3245859678             46
applog-2025.02.23   1   1   11139687  7139016590     3569508295             56
applog-2025.02.22   1   1   10958802  7089500416     3544750208             52#下面兩個所以通過重啟的方式更改壓縮方式
applog-2025.02.16,applog-2025.02.23    index.codec:best_compression#進行強制合并 max_num_segments=1 后
index              pri rep docs.count  store.size pri.store.size segments.count
applog-2025.02.15   1   1   10514847  6776067954     3388033977              4
applog-2025.02.16   1   1    9974249  4963880914     2481940457              4
applog-2025.02.23   1   1   11139687  5358329648     2679164824              4
applog-2025.02.22   1   1   10958802  7056313752     3528156876              4

結論:更改best_compression壓縮方式與強制合并后,applog-2025.02.16,applog-2025.02.23兩個索引 存儲空間節省可以達到24%~25%。

測試總結

  • 關于讀性能: 多次查詢測試,性能基本不受best_compression壓縮方式的影響。
  • 關于寫性能: 集群寫入壓力較小,沒有明顯差別。生產環境建議還是需要使用只讀索引。
  • 關于降存儲使用量:可降低約 25%~10% 的存儲使用量。
  • 關于操作:將index.codec 配置到template模版中是比較方便的,修改已完成寫入操作的索引需要額外的管理操作,7.17版本涉及到手動重啟

API調用

查看狀態
GET /_cat/indices/my-index?v   #查看索引信息
GET /_cat/shards/my-index?v    #查看分片信息
GET /_cat/segments/my-index?v   #查看段信息
GET /_cat/indices/my-index-*?v&h=index,pri,rep,docs.count,store.size,pri.store.size,segments.count  #查看索引/段/分片信息
查看索引配置
#https://www.elastic.co/guide/en/elasticsearch/reference/7.17/indices-get-settings.htmlGET my-index-*/_settings?pretty&include_defaults&flat_settings=true..."index.codec" : "default",...
創建索引配置
PUT /my-index-000001
{"settings": {"index": {"number_of_shards": 2,  "number_of_replicas": 1,"codec": "best_compression",  "refresh_interval" : "2s"}}
}#刪除索引
DELETE  my-index-000001
更新索引配置
#https://www.elastic.co/guide/en/elasticsearch/reference/7.17/indices-update-settings.html#更新動態配置不需要關閉索引#更新靜態配置的前提條件 該索引必須是只讀的
POST /my-index-000001/_close?wait_for_active_shards=0PUT /my-index-000001/_settings
{"index.codec" : "best_compression"
}POST /my-index-000001/_open
強制合并索引
#https://www.elastic.co/guide/en/elasticsearch/reference/7.17/indices-forcemerge.htmlPOST /my-index-000001/_forcemerge?max_num_segments=1

為什么默認啟用 LZ4 壓縮,而不是best_compression

在許多情況下,人們會很樂意放棄壓縮所需的額外 CPU 來換取磁盤空間 Part 2.0: The true story behind Elasticsearch storage requirements

通過共享存儲的方式節省存儲的成本

金山云:基于 JuiceFS 的 Elasticsearch 溫冷熱數據管理實踐

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72976.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72976.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72976.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

conda create之后,以前的conda env list 只能看到環境路徑 沒有環境名稱了

1.命令 conda env list 看到的顯示如下: 左邊這列的"base",指向的路徑和其它環境變量安裝的路徑不一致。 這時需要通過"activate [anaconda的環境路徑]"和"source activate"回到anaconda: 2.執行切換命令 …

夸克網盤任務腳本——進階自動版

腳本是用于自動管理和更新夸克云盤(Quark Cloud Drive)上的文件和目錄的Python腳本。其主要功能包括自動下載、更新、重命名、刪除文件和文件夾,以及處理和發送通知,可以在特定的時間間隔內運行,根據配置文件進行操作。 主要功能 1. Quark 類: __init__:初始化類,設置…

AsyncHttpClient使用說明書

[[toc]] AsyncHttpClient(AHC)是一個高性能、異步的 HTTP 客戶端庫,廣泛用于 Java 和 Scala 應用中,特別適合處理高并發、非阻塞的 HTTP 請求。它基于 Netty 或 Java 原生的異步 HTTP 客戶端實現,支持 HTTP/1.1 和 HTTP/2 協議,適用于微服務、API 調用、爬蟲等場景。 1.…

Powershell、Windows Shell、CMD 的區別與聯系

Powershell、Windows Shell、CMD 的區別與聯系 一、核心概念 名稱 全稱 類型 發布時間 CMD Command Prompt 命令行解釋器(CLI) 1985(DOS) Powershell Windows PowerShell 任務自動化腳本環境 2006 Windows Shell Wi…

vulnhub-Tr0ll ssh爆破、wireshark流量分析,exp、尋找flag。思維導圖帶你清晰拿到所以flag

vulnhub-Tr0ll ssh爆破、wireshark流量分析,exp、尋找flag。思維導圖帶你清晰拿到所以flag 1、主機發現 arp-scan -l 2、端口掃描 nmap -sS -sV 192.168.66.185 nmap -sS -A -T4 -p- 192.168.66.185 nmap --scriptvuln 192.168.66.185經典掃描三件套,…

強化學習(趙世鈺版)-學習筆記(8.值函數方法)

本章是算法與方法的第四章,是TD算法的拓展,本質上是將狀態值與行為值的表征方式,從離散的表格形式,拓展到了連續的函數形式。 表格形式的優點是直觀,便于分析,缺點是數據量較大或者連續性狀態或者行為空間時…

[特殊字符] 2025藍橋杯備賽Day7——B2117 整理藥名

🔍 2025藍橋杯備賽Day7——B2117 整理藥名 題目難度:?? 適合掌握字符串基礎操作 考察重點:大小寫轉換、字符串遍歷、邊界條件處理 B2117 整理藥名 題目描述 醫生在書寫藥品名的時候經常不注意大小寫,格式比較混亂。現要求你…

笛卡爾軌跡規劃之齊次變換矩陣與歐拉角、四元數的轉化

一、笛卡爾軌跡規劃需求 笛卡爾軌跡規劃本質就是我們對機械臂的末端位置和姿態進行規劃,其實也就是對末端坐標系的位姿進行規劃。我們清楚末端坐標系的位姿是可以用齊次變換矩陣T來表示的,但這樣表示的話,并不利于我們去做規劃,所…

【PCIe 總線及設備入門學習專欄 3.1 -- PCIe 中為何只有 TLP 會被 Switch 和 RC 進行路由?】

文章目錄 Overview為什么 DLLP 不需要路由呢?總結Overview 這里介紹些為什么在 PCIe 中只有 TLP(事務層數據包)會被 Switch 和 Root Complex(RC) 路由,而 DLLP(數據鏈路層數據包)和 Ordered Set 不會被路由。這是因為 TLP 起始于源端口的事務層,結束于目的端口的事務…

大摩閉門會:250321 學習總結報告

如果圖片分辨率不足,可右鍵圖片在新標簽打開圖片或者下載末尾源文件進行查看 本文只是針對視頻做相應學術記錄,進行學習討論使用

深入理解 Spring Boot 應用的生命周期:從啟動到關閉的全流程解析

引言 Spring Boot 是當今 Java 開發中最流行的框架之一,它以簡化配置和快速開發著稱。然而,要真正掌握 Spring Boot,理解其應用的生命周期是至關重要的。本文將深入探討 Spring Boot 應用的生命周期,從啟動到關閉的各個階段&…

期刊分區表2025年名單下載(經濟學、管理學)

2025年期刊分區表包括SCIE、SSCI、A&HCI、ESCI和OAJ,共設置了包括自然科學、社會科學和人文科學在內的21個大類 本次分享的是期刊分區表2025年名單經濟學類、管理學類,一共7631025條 一、數據介紹 數據名稱:期刊分區表2025年名單 數據…

夢回杭州...

她對我說,煙雨中的西湖更別有情趣,我也懷著對‘人間天堂’的憧憬踏上了向往之旅。第一次親密接觸沒有感覺中那么好,現在想起來是那時的人和心情都沒能安靜下來,去慢慢品味它的美。 六下杭州,親歷每一片風景&#xff0c…

深度優先搜索(DFS)完全解析:從原理到 Java 實戰

深度優先搜索(DFS)完全解析:從原理到 Java 實戰 TOC 作為一名程序員,你是否遇到過需要在復雜的圖結構中尋找路徑、檢測環,或者進行樹遍歷的問題?深度優先搜索(Depth-First Search, DFS&#xf…

【人工智能】如何理解transformer中的token?

如何理解transformer中的token? **一、Token在Transformer中的作用****二、文本分詞的常見方法****1. 基于詞典的分詞(Dictionary-based Tokenization)****2. 子詞分詞(Subword Tokenization)****(1) WordPiece算法****(2) BPE&a…

AI風向標《AI與視頻制作全攻略:從入門到精通實戰課程》

課程信息 AI風向標《AI與視頻制作全攻略:從入門到精通實戰課程》,夸克網盤和百度網盤課程。 課程介紹 《AI與視頻制作全攻略:從入門到精通實戰課程》是一套全面融合AI技術與視頻制作的實戰課程,旨在幫助創作者從基礎軟件使用到高級視頻剪輯…

mayfly-go開源的一站式 Web 管理平臺

mayfly-go 是一款開源的一站式 Web 管理平臺,旨在通過統一的界面簡化 Linux 服務器、數據庫(如 MySQL、PostgreSQL、Redis、MongoDB 等)的運維管理。以下從多個維度對其核心特性、技術架構、應用場景及生態進行詳細解析: 一、核心…

車輛模型——運動學模型

文章目錄 約束及系統移動機器人運動學模型(Kinematic Model)自行車模型含有加速度 a a a 的自行車模型系統偏差模型 在機器人的研究領域中,移動機器人的系統建模與分析是極為關鍵的基礎環節,本文以非完整約束的輪式移動機器人為研…

go命令使用

查看配置信息 go env配置go國內源 export GO111MODULEon export GOPROXYhttps://goproxy.cn測試 go install github.com/jesseduffield/lazydockerlatesthttps://github.com/jesseduffield/lazydocker

Chrome-Edge-IDEA-Win 常用插件-工具包

Chrome-Edge-IDEA-Win 常用插件-工具包 Chrome-Edge-IDEA-Win 常用插件-工具包谷歌插件chropathJSONViewOctotree - GitHub code treeXPath Helper書簽側邊欄篡改猴Print Edit WEEdge瀏覽器插件IDEA插件CodeGlance Pro 代碼迷你縮放圖插件Alibaba Cloud ToolkitAlibaba Java Co…