索引生命周期管理(ILM)是es新引入的一系列对索引管理的操作,其中会涉及到很多之前没有遇到过的概念,为了把这些操作搞明白,会尽量结合一些例子来说明
1、介绍
引入索引生命周期管理的一个最重要的目的就是对大量时序数据在es读写操作的性能优化,比如易企秀通过spark streaming读取Kafka中的日志实时写入es,这些日志高峰期每天10亿+,每分钟接近100w,在这么大数据量上进行操作是一件很麻烦的事,那么我们希望es能够对单分片超过50g或者30天前的索引进行归档,并能够自动删除90天前的索引,那么这个场景可以通过ILM进行策略配置来实现。
2、操作
-
定义策略
上面的需求对应的策略语句大致如下:
curl -X PUT "localhost:9200/_ilm/policy/datastream_policy" -H 'Content-Type: application/json' -d'
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "50GB",
"max_age": "30d"
}
}
},
"delete": {
"min_age": "90d",
"actions": {
"delete": {}
}
}
}
}
}
'
其中rollover中配置归档策略,目前支持3中策略,分别是max_docs、max_size、max_age(请关注、具体后续内容介绍),其中的任何一个条件满足时都会触发索引的归档操作,并删除归档90天后的索引文件(其中delete属于phrase,这个也会在后面内容介绍)。
-
使用策略
在索引库上使用策略的方式有很多种,但我们的需求是对满足所有rollover条件的规则统统适用,所以需要配置一个索引模板,并指定对应的规则:
curl -X PUT "localhost:9200/_template/datastream_template" -H 'Content-Type: application/json' -d'
{
"index_patterns": ["datastream-*"],
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "datastream_policy",
"index.lifecycle.rollover_alias": "datastream"
}
}
'
其中 index.lifecycle.name 指定我们索引模板使用哪个策略进行管理,index.lifecycle.rollover_alias 配置该系列索引的别名,通过别名datastream可对datastream-*进行读写操作。
在开始之前,还需要最后一步重要的操作,那就是激活你的策略,创建一个以000001结尾的索引,之后回滚的索引会在这个数字上递增;由于别名操作索引时,同一时刻只能有一个索引被写,所以还需要设置 is_write_index = true 。
curl -X PUT "localhost:9200/datastream-000001" -H 'Content-Type: application/json' -d'
{
"aliases": {
"datastream": {
"is_write_index": true
}
}
}
'
-
查看策略
通过下面的api用户可以查看当前索创建使用的策略已经引处于什么阶段:
GET datastream-*/_ilm/explain
网友评论