管理 Index 的 Best Practices 系列文章索引
當我們將資料 Indexing 進入 Elasticsearch 後,隨著時光的飛逝,我們 Index 裡的資料通常也會愈來愈多,這時如何有效的管理資料就是一件很重要的事,這個主題的文章會來介紹 Index 管理的 Best Practices,這篇文章會著重在 Index 中 Shard 的數量配置方式及優化的方法。
在一開始我們說明一下 Shard 的幾個重要的觀念:
最好不要小於 1G
,否則這時候切 shard 的好處太少,不如不要切 shard。若你的資料量是固定的、或是成長非常緩慢的,請直接依照上述 shard 的觀念、硬體規格、成長規劃來設定 shard 的數量,以下著重在介紹隨著時間成長的資料的 Index 管理方式。
隨著時間增長的資料,資料要能分散存取的話,官方建議使用 time-based indices
來進行資料的管理,而不是在一開始設定大量的 shard 數量來期待之後資料的成長,因為 shard 的數量在建立 Index 時設定好之後,就不能再修改。
Elasticsearch 6.x 版之前,預設的 shard 數量是 5,但是從 7.x 版開始,預設的 shard 數量已改成 1,官方建議使用 time-based indices 來處理隨時間成長的資料。
Index 的資訊是存在 Cluster stats 中,如果 Index 數量太多 (特別是 Mapping 欄位又很多時),會讓 Cluster stats 變很大,這會佔用 JVM heap size,也會造成 update 這種需透用到 cluster stats 資訊來確保處理一致性的請求效能變慢。
一般這種資料我們的期待與使用情境如下:
因此這時官方的 Rollover & Shrink 會是很好的解決方案,這個 Rollover Pattern 的基本運作如下:
以下分別針對 Rollover API 及 Shrink API 來示範 Rollover Pattern 的實作:
建立一個 index - logs-000001
與指向他的 alias - logs_write
:
PUT /logs-000001
{
"aliases": {
"logs_write": {}
}
}
使用 Rollover API 建立 超過7天
或 滿1000筆文件
要觸發自動 rollover:
POST /logs_write/_rollover
{
"conditions": {
"max_age": "7d",
"max_docs": 1000
}
}
Rollover 的規則,會依照 index 名字後有
-
而且接著數字,就會接受這是要 Rollover 的 index,但長出來新的 index 會依照這邊的定義,會是六位數並且會補 0 的格式。例如當筆數滿 1000 後,會產生新的 index
logs-000002
。
若新的 index 不是這個名命的規則,可以明確的指定名字。
POST /my_alias/_rollover/my_new_index_name
{
"conditions": {
"max_age": "7d",
"max_docs": 1000
}
}
Shrink 的 API 主要的目的就是把 index 的 shard 數量變少,而變少的規則,必需是原來數值的因數,例如原本是 8 ,那只能 shrink 成 4 或 2 或 1、原本是 15 的話,只能 shrink 成 5 或 3 或 1。
運作機制如下:
_close
。Shrink API 如下:
POST my_source_index/_shrink/my_target_index
另外也可以宣告一些類似 create index API 能指定的參數:
POST my_source_index/_shrink/my_target_index
{
"settings": {
"index.number_of_replicas": 1,
"index.number_of_shards": 1,
"index.codec": "best_compression"
},
"aliases": {
"my_search_indices": {}
}
}
透過這些設定,就能指定 shrink 成特定數量的 shards 了。 (不過要記得必須是原來 shard 數量的因數才行。)
查看最新 Elasticsearch 或是 Elastic Stack 教育訓練資訊: https://training.onedoggo.com
歡迎追蹤我的 FB 粉絲頁: 喬叔 - Elastic Stack 技術交流
不論是技術分享的文章、公開線上分享、或是實體課程資訊,都會在粉絲頁通知大家哦!
此系列文章已整理成書
喬叔帶你上手 Elastic Stack:Elasticsearch 的最佳實踐與最佳化技巧
書中包含許多的修正、補充,也依照 Elastic 新版本的異動做出不少修改。
有興趣的讀書歡迎支持! 天瓏書局連結