elasticsearch 7.0 新特性之 索引生命周期管理(一)

索引生命周期管理(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

你可能感兴趣的:(elasticsearch 7.0 新特性之 索引生命周期管理(一))