1. 索引生命周期管理(ILM)概述
在Elasticsearch的实际运维中,我们经常遇到一个核心矛盾:如何平衡数据访问性能与存储成本?这个问题在时序数据场景尤为突出。作为一名长期负责日志平台建设的工程师,我发现ILM(Index Lifecycle Management)是解决这一矛盾的利器。
ILM本质上是一种数据治理策略,它通过定义索引从诞生到消亡的完整生命周期规则,实现存储资源的智能调配。想象一下图书馆的藏书管理:新书放在显眼位置(热数据),旧书移至普通书架(温数据),古籍存入档案室(冷数据),过期的报刊定期清理(删除)。ILM就是为Elasticsearch构建了这样一套自动化管理体系。
2. ILM核心阶段详解
2.1 热阶段(Hot)
热阶段是索引的"黄金时期"。这个阶段的数据具有以下特征:
- 持续写入:索引处于活跃写入状态
- 高频查询:承担主要的查询流量
- 高性能要求:需要SSD等高速存储介质
典型配置示例:
json复制"hot": {
"min_age": "0ms",
"actions": {
"rollover": {
"max_size": "50gb",
"max_docs": 10000000,
"max_age": "30d"
},
"set_priority": {
"priority": 100
}
}
}
关键提示:rollover的三个条件(大小、文档数、时间)是"或"关系,任意一个触发都会导致索引滚动。建议根据业务特点选择最合适的条件组合。
2.2 温阶段(Warm)
当索引进入温阶段,意味着它的"职业生涯"开始转型:
- 只读状态:不再接受写入
- 查询频率降低:但仍需保证响应速度
- 资源优化:通过合并和收缩减少资源占用
技术实现要点:
json复制"warm": {
"min_age": "7d",
"actions": {
"forcemerge": {
"max_num_segments": 1
},
"shrink": {
"number_of_shards": 1
},
"allocate": {
"require": {
"data": "warm"
}
}
}
}
实测发现,forcemerge操作会使索引暂时不可用,建议在业务低峰期执行。我们曾经在高峰期执行导致查询超时,后来通过设置"min_age":"1h"的缓冲期解决了问题。
2.3 冷阶段(Cold)
冷数据的特点是"备而少用":
- 极少查询:可能每月只有几次
- 存储优先:可以使用大容量HDD
- 可搜索快照:节省本地存储空间
典型配置:
json复制"cold": {
"min_age": "30d",
"actions":
