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"
  }
}‘

更新策略

  1. 如果没有index应用这份策略,那么我们可以直接更新该策略。
  2. 如果有index应用了这份策略,那么当前正在执行的阶段不会同步修改,当当前阶段结束后,会进入新版本策略的下个阶段。
  3. 如果更换了策略,当前正在执行的阶段不会变化,在结束当前阶段后,将会由新的策略管理下一个生命周期。

查看策略执行结果

#如果是别名则返回所有索引的策略执行结果,如果是单个索引则返回该索引的执行结果
curl --user elastic:superuser@elastic -XGET "http://$IP:9200/ilm-namespace/_ilm/explain?pretty"

以上是关于ES 索引生命周期管理策略的主要内容,如果未能解决你的问题,请参考以下文章

ES 索引生命周期管理策略

ES 索引生命周期管理策略

ES索引生命周期管理

ES中的索引生命周期管理

ES实战索引生命周期管理

ES实战索引生命周期管理