如果所有數據只存在一個索引下,隨着數據積累,索引體積越來越大。為了方便管理ES索引,盡量將數據分散到多個索引里。在ES5.0以后新增了一個rollover API,可以動態的滾動索引。簡單記錄一下調研與使用情況。
參考鏈接:https://www.elastic.co/guide/en/elasticsearch/reference/6.1/date-math-index-names.html
https://www.elastic.co/blog/managing-time-based-indices-efficiently
https://www.elastic.co/guide/en/elasticsearch/reference/6.1/date-math-index-names.html
一、 通過別名對相關索引統一管理(實現讀寫、操作的可分離):
1、 先設置索引模板(根據index template API):
2、 索引名根據時間工具生成,別名格式:
例:
curl -XPUT 'localhost:9200/%3Ctest%7Bnow%2FD%7D-1%3E'
等同於下面的:
curl -XPUT 'localhost:9200/test20180101
別名:
3、(ES版本5.0以上)通過調用RollOver接口結合時間工具,實現索引的按日期動態滾動。
curl -XPOST 'localhost:9200/in_test/_rollover?pretty' -H 'Content-Type: application/json' -d'
{
"conditions": {
"max_age": "30d",
"max_docs": 1000000,
"max_size": "500gb",
}
}
'
如果系統中需要按月生成新索引或者當文檔數達到100萬條、索引大小達到500G時生成新索引,可以采用上面的命令。
30d—如果索引創建時間大於等於30天時滾動生效,1000000—1000000條數據,500gb—索引文件大小500GB(max_size參數在5.6.4不支持,推測為6.x版本里的新增的參數)
注:rollover API 有兩種調用方式:
1)、不指定新的索引名字:(這種情況對於索引名字有一定要求,索引名字需要以數字結尾 例如: index_name-1。每次調用rollover API新的索引名字會自動+1)
2)、指定新的索引名
4、定時調用rollover API即可。
二、管理index更靈活,效率也比較高(例如要刪除歷史數據,只需將舊index整個刪除即可,比_delete_by_query效率高很多且不會引起沖突)。一般來說這種方式會配合shrink index一起使用,即索引的壓縮。后期補充