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

上一篇有提到,ILM主要是对大量时序数据处理而设计的,那么它的每个阶段分别是什么用途,怎么去操作,本文将重点说明(如有不对、欢迎点评)

1、介绍

ES索引生命周期管理分为4个阶段:hot、warm、cold、delete,其中hot主要负责对索引进行rollover操作,warm、cold、delete分别对rollover后的数据进一步处理(前提是配置了hot)。

phases desc
hot 主要处理时序数据的实时写入
warm 可以用来查询,但是不再写入
cold 索引不再有更新操作,并且查询也会很少
delete 数据将被删除

需要注意的是上述4个阶段不是必须的,比如我们上一篇文章就只用到了 hot 、delete 两个phrase

2、操作

  • timing
    ILM各个阶段的action几乎都需要用到定时器,例如下面这个操作:
curl -X PUT "localhost:9200/_ilm/policy/my_policy" -H 'Content-Type: application/json' -d'
{
  "policy": {
    "phases": {
      "warm": {
        "min_age": "1d",
        "actions": {
          "allocate": {
            "number_of_replicas": 1
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
'

上述warm阶段通过min_age配置了1d,意思是索引从创建至少需要经历1天的时间才会被移入到warm阶段,另一个delete阶段min_age配置了30d,意思是索引在创建后的30天会被删除;通常情况下warm、cold、delete的起始时间是从索引创建开始算起的,但是如果配置了hot,那么后面phrase配置的时间应该大于rollover的时间。

  • Hot Rollover
    先看一个例子:
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"
          }
        }
      } 
   }
}
'

我们定义了一个策略,策略中使用了hot rollover action,当引用该策略的索引满足rollover中任一一个条件时就会触发滚动操作,生成新的索引,新索引的格式是 ^.*-\d+$ (如,index_name-000001)

  • Warm Allocate
    allocate action主要有两个操作,1、转移数据到warm节点;2、修改索引副本数。
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "warm": {
        "actions": {
          "allocate" : {
            "number_of_replicas": 0,
            "include" : {
              "box_type": "cold,warm"
            }
          }
        }
      }
    }
  }
}

其中include配置的标签需要和elasticsearch.yml中配置的标签名一致,allocate支持的参数有:

参数 描述
number_of_replicas 分配后索引保持的分片数
include 至少满足其中一个标签
exclude 排除包含这些标签的服务器
require 需要同时满足所有配置的标签
  • Warm Read-Only
    配置索引为只读模式
curl -X PUT "localhost:9200/_ilm/policy/my_policy" -H 'Content-Type: application/json' -d'
{
  "policy": {
    "phases": {
      "warm": {
        "actions": {
          "readonly" : { }
        }
      }
    }
  }
}
'

  • Warm Force-Merge
    指定索引合并后保留的segment数,过多的 segment 对查询性能有影响,为了充分合并数据,建议设置为 max_num_segments = 1
curl -X PUT "localhost:9200/_ilm/policy/my_policy" -H 'Content-Type: application/json' -d'
{
  "policy": {
    "phases": {
      "warm": {
        "actions": {
          "forcemerge" : {
            "max_num_segments": 1
          }
        }
      }
    }
  }
}
'

需要注意的是,设置forcemerge action后索引会被修改为只读模式

  • Warm Shrink
    通过shrink action可以降低索引的分片数量,同样执行该action操作后,索引会被修改为只读模式,同时索引名也会发生变化,如原来索引名称是“logs”,执行后的名称会多一个shrink-前缀,即“shrink-logs”。
curl -X PUT "localhost:9200/_ilm/policy/my_policy" -H 'Content-Type: application/json' -d'
{
  "policy": {
    "phases": {
      "warm": {
        "actions": {
          "shrink" : {
            "number_of_shards": 1
          }
        }
      }
    }
  }
}
'

  • Cold Freeze
    冻结索引意思就是关闭索引。
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "cold": {
        "actions": {
          "freeze" : { }
        }
      }
    }
  }
}

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