ES 索引生命周期管理策略
Posted eandei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES 索引生命周期管理策略相关的知识,希望对你有一定的参考价值。
索引生命周期管理ILM
索引生命周期
对于时间序列的索引,生命周期有4个阶段:
-
hot: 索引被频繁写入和查询
-
warm: 索引不再写入,但是仍在查询
-
cold: 索引很久不被更新,同时很少被查询。但现在考虑删除数据还为时过早,仍然有需要这些数据的可能,但是可以接受较慢的查询响应。
-
delete: 索引不再需要,可以删除。
索引根据时间参数min_age进入生命周期阶段,若未设置,默认是0ms。min_age通常是从创建索引的时间开始计算,如果索引被设置为滚动索引,那么min_age是从索引滚动开始计算。注意,在检查min_age参数并进入下一个阶段前,当前阶段的操作必须完成。
各个阶段允许的action
优先级设置
这个action等同于设置索引属性index.priority的值。具有较高优先级的索引将在节点重启后优先恢复。通常,热阶段的指数应具有最高值,而冷阶段的指数应具有最低值。未设置此值的指标的隐含默认优先级为1。索引的优先级。必须为0或更大。也可以设置为null以删除优先级。
{
"set_priority" : {
"priority": 50
}
}
模拟过程
创建ilm的过渡策略
curl --user elastic:superuser@elastic -XPUT "http://$IP:9200/_ilm/policy/ilm_policy" -H ‘Content-Type: application/json‘ -d ‘
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_docs": "10"
}
}
},
"warm": {
"min_age": "10s",
"actions": {
"forcemerge" : {
"max_num_segments": 1
},
"allocate": {
"number_of_replicas": 0
}
}
},
"cold": {
"min_age": "30s",
"actions": {
"allocate": {
"include": {
"box_type": "cold"
}
}
}
},
"delete": {
"min_age": "2m",
"actions": {
"delete": {}
}
}
}
}
}‘
创建模板,索引使用ilm
curl --user elastic:superuser@elastic -XPUT "http://$IP:9200/_template/ilm_template" -H ‘Content-Type: application/json‘ -d ‘
{
"index_patterns": ["ilm-namespace-*"],
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1,
"index.routing.allocation.include.box_type": "hot",
"index.lifecycle.name": "ilm_policy",
"index.lifecycle.rollover_alias": "ilm-namespace"
}
}‘
- index.lifecycle.name 指明该索引应用的 ILM Policy
- index.lifecycle.rollover_alias 指明在 Rollover 的时候使用的 alias
- index.routing.allocation.include.box_type 指明新建的索引都分配在 hot 节点上
创建用于ilm策略管理的初始索引
curl --user elastic:superuser@elastic -XPUT "http://$IP:9200/ilm-namespace-000001" -H ‘Content-Type: application/json‘ -d ‘
{
"aliases": {
"ilm-namespace":{
"is_write_index": true
}
}
}‘
修改 ILM Polling Interval
ILM Service 会在后台轮询执行 Policy,默认间隔时间为 10 分钟,为了更快地看到效果,我们将其修改为10秒。
curl --user elastic:superuser@elastic -XPUT "http://$IP:9200/_cluster/settings" -H ‘Content-Type: application/json‘ -d ‘
{
"persistent": {
"indices.lifecycle.poll_interval":"10s"
}
}‘
更新策略
- 如果没有index应用这份策略,那么我们可以直接更新该策略。
- 如果有index应用了这份策略,那么当前正在执行的阶段不会同步修改,当当前阶段结束后,会进入新版本策略的下个阶段。
- 如果更换了策略,当前正在执行的阶段不会变化,在结束当前阶段后,将会由新的策略管理下一个生命周期。
查看策略执行结果
#如果是别名则返回所有索引的策略执行结果,如果是单个索引则返回该索引的执行结果
curl --user elastic:superuser@elastic -XGET "http://$IP:9200/ilm-namespace/_ilm/explain?pretty"
以上是关于ES 索引生命周期管理策略的主要内容,如果未能解决你的问题,请参考以下文章