elasticsearch 7.0 新特性之 索引生命周期管理(
2019-04-20 本文已影响246人
郭彦超
上一篇有提到,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" : { }
}
}
}
}
}