概要
- ElasticSearch中的索引生命周期管理,也就是ilm(Manage the index lifecycle),是指定了索引在不同周期下的处理策略。
- ilm 的对象是索引而不是索引中的数据。
- ilm 包括四个阶段:hot 、warm、cold和delete。
- hot、warm和cold表示索引的使用情况,delete可以指定索引完成rollover后的旧索引的删除条件。
- hot中常用策略为 rollover, 满足指定条件后创建新的索引。
- delete中常用属性为min_age,也就是索引完成rollover后的删除策略。已经有可以提供相同功能的索引,就索引可以删除。
- 索引生命周期中的delete不能删除索引,只能删除滚动之前的旧索引。
使用命令
- 查询所有策略
json
GET _ilm/policy
- 查询单个策略
json
GET _ilm/policy/<policy-name>
- 查询索引的策略执行情况
json
GET <index-name>/_ilm/explain
- 查询索引的创建时间
json
GET /_cat/indices/<index-name>?format=json&h=index,creation.date
DELETE策略执行分析
- 先查询索引的创建时间。
- 命令为:
json
GET /_cat/indices/<index-name>?format=json&h=index,creation.date`
- 响应值为:
json
[
{
"index" : "<index-name>",
"creation.date" : "1688537411543" // 创建日期
}
]
- 在查询索引的中生命周期的执行情况
- 命令为:
json
GET <index-name>/_ilm/explain
- 响应值为:
json
{
"indices" : {
"<index-name>" : {
...
"policy" : "<policy-name>", //策略名称
"lifecycle_date_millis" : 1691129648787, //生命周期时间,这里是进入delete计算阶段时间
"age" : "3.87d", //年龄,存活时间,这个是创建时间到当前时间的时间间隔,一般需要减去hot中rollover设定的min-age。
...
},
...
}
}
}
- 生命周期策略的具体信息
- 命令为:
json
GET _ilm/policy/<policy-name>
- 响应值为:
json
{
"<policy-name>" : {
...
"policy" : {
"phases" : { //阶段
"hot" : {
"min_age" : "0ms", // 索引建立后就进入hot阶段
"actions" : {
"rollover" : { //创建新索引
"max_primary_shard_size" : "50gb", // 当分片容积大于50Gb后执行
"max_age" : "30d" // 分片的年龄达到30天
}
}
},
"delete" : {
"min_age" : "30d", // 老索引超过rollover后的最小存活时间
"actions" : { //执行策略为删除
"delete" : {
"delete_searchable_snapshot" : true //删除相关的快照
}
}
}
},
...
},
"in_use_by" : {
"indices" : [...],//被设置的索引
...
}
}
}
- 所以整个流程为索引超过30天后,会自动rollover出个新的索引,之后按照delete策略删除旧的索引。所以生命周期不会自动删除索引,索引的删除需要手动执行。