
在 Elasticsearch 的日常中,有很多如存储 系统日志、行为数据等方面的应用场景,这些场景的特点是数据量非常大,并且随着时间的增长 索引 的数量也会持续增长,然而这些场景基本上只有最近一段时间的数据有使用价值或者会被经常使用(热数据),而历史数据几乎没有作用或者很少会被使用(冷数据),这个时候就需要对 索引 进行一定策略的维护管理甚至是删除清理,否则随着数据量越来越多除了浪费磁盘与内存空间之外,还会严重影响 Elasticsearch 的性能;
在 Elastic Stack 6.6 版本后推出了新功能 Index Lifecycle Management(索引生命周期管理),支持针对索引的全生命周期托管管理,并且在 Kibana 上也提供了一套 UI 界面来配置策略。本文主要介绍 Elasticsearch 索引生命周期管理如何配置和使用。
索引生命周期分为4个阶段:hot、warm、cold、delete,其中hot主要负责对索引进行rollover操作。
rollover:滚动更新创建的新索引将添加到索引别名,并被指定为写索引。
PS:4个阶段中只有hot阶段是必须的

索引根据时间参数min_age进入生命周期阶段,若未设置,默认是0ms。min_age通常是从创建索引的时间开始计算,如果索引被设置为滚动索引,那么min_age是从索引滚动开始计算。注意,在检查min_age参数并进入下一个阶段前,当前阶段的操作必须完成。
| 阶段/action | 优先级设置 | 取消跟随 | 滚动索引 | 分片分配 | 只读 | 强制段合并 | 收缩索引 | 冻结索引 | 删除 | 
|---|---|---|---|---|---|---|---|---|---|
| hot | √ | √ | √ | × | × | × | × | × | × | 
| warm | √ | √ | × | √ | √ | √ | √ | × | × | 
| cold | √ | √ | × | √ | × | × | × | √ | × | 
| delete | × | × | × | × | × | × | × | × | √ | 
下面以索引 syslog-2020.10.01 为例子,在索引创建 1 天后转为 Warm 阶段,30 天后转为 Cold 阶段,30 天后删除
| 日期 | 动作 | 阶段 | 
|---|---|---|
| 2020-10-01 | 创建索引 syslog-2020.10.01,处理读写请求 | hot阶段 | 
| 2020-10-02 | syslog-2020.10.01改为只读 | warm阶段 | 
| 2020-11-01 | syslog-2020.10.01为只读,并迁移到冷节点储存 | cold阶段 | 
| 2020-12-01 | 删除索引 syslog-2020.10.01 | delete阶段 | 
假设 Policy 设定如下:
RolloverRollover 后 5 秒转为 Warm 阶段Rollover 后 20 秒转为 Cold 阶段Rollover 后 40 秒删除curl -XPUT "http://$IP:9200/_ilm/policy/my_ilm_policy"     -H ‘Content-Type: application/json‘     -u elastic:changeme     -d ‘{
      "policy": {
        "phases": {
          "hot": {
            "actions": {
              "rollover": {
                "max_docs": "10"
              }
            }
          },
          "warm": {
            "min_age": "5s",
            "actions": {
              "allocate": {
                "include": {
                  "box_type": "warm"
                }
              }
            }
          },
          "cold": {
            "min_age": "20s",
            "actions": {
              "allocate": {
                "include": {
                  "box_type": "cold"
                }
              }
            }
          },
          "delete": {
            "min_age": "40s",
            "actions": {
              "delete": {}
            }
          }
        }
      }
    }‘
ip、用户名和密码按实际情况修改
关联策略有两种方式,分别是使用索引模板关联和索引直接关联
索引模板来创建所需的索引,并关联ilm策略
curl -XPUT "http://$IP:9200/_template/my_test_template"     -H ‘Content-Type: application/json‘     -u elastic:changeme     -d ‘{
        "index_patterns": ["my-test-*"], 
        "settings": {
            "number_of_shards": 1,
            "number_of_replicas": 0,
            "index.lifecycle.name": "my_ilm_policy", 
            "index.lifecycle.rollover_alias": "my-test",
            "index.routing.allocation.include.box_type": "hot"
        }
    }‘
ip、用户名和密码按实际情况修改
index.lifecycle.name:指明该索引应用的 ILM Policy
index.lifecycle.rollover_alias:指明在 Rollover 的时候使用的 alias
index.routing.allocation.include.box_type:指明新建的索引都分配在 hot 节点上
为现有的索引单独关联策略
curl -XPUT "http://$IP:9200/my-test-*/_settings"     -H ‘Content-Type: application/json‘     -u elastic:changeme     -d ‘{
      "index": {
        "lifecycle": {
          "name": "my_ilm_policy"
        }
      }
    }‘
ip、用户名和密码按实际情况修改
http://$IP:9200/my-test-*/_ilm/explain
上述的步骤,大部分都可以在 Kibana 中以图形化界面的方式进行操作


注意:如果使用图形化界面来创建策略,删除阶段会缺失
actions内容而导致无法删除
ILM Service 会在后台轮询执行 Policy,默认间隔时间为 10 分钟,为了测试更快地看到效果,可将其修改为1秒。
curl -XPUT "http://$IP:9200/_cluster/settings"     -H ‘Content-Type: application/json‘     -u elastic:changeme     -d ‘{
        "persistent": {
          "indices.lifecycle.poll_interval":"1s"
        }
    }‘
ip、用户名和密码按实际情况修改
ILM 默认开启
由ILM管理的所有索引将继续执行其策略。有时可能不需要某些索引,甚至集群中的所有索引都不需要。例如,当需要集群拓扑更改时,可能会有计划的维护窗口,这可能会影响正在运行的ILM操作。因此,ILM有两种禁用操作的方法。
停止ILM时,快照生命周期管理操作也会停止,这意味着不会创建计划的快照(当前正在进行的快照不受影响)。
通常,ILM将默认运行。要查看ILM的当前运行状态,请使用Get Status API 来查看ILM的当前状态。
GET  _ilm/status
如果请求没有遇到错误,您将收到以下结果:
{
    "operation_mode": "RUNNING"
}
ILM的操作模式:
| 阶段/action | 优先级设置 | 
|---|---|
| 正在运行 | 正常运行,所有策略均正常执行 | 
| 停止 | ILM已收到停止请求,但仍在处理某些策略 | 
| 已停止 | 这表示没有执行任何策略的状态 | 
可以暂停ILM服务,以便使用Stop API不再执行其他步骤。
POST  _ilm/stop
停止后,所有其他政策措施都将停止。这将反映在状态API中
{
    "operation_mode": "STOPPING"
}
然后,ILM服务将异步地将所有策略运行到可以安全停止的位置。在ILM确认它是安全的之后,它将移至该STOPPED模式
{
    "operation_mode": "STOPPED"
}
要启动ILM并继续执行策略,请使用Start API。
POST  _ilm/start
Start API将向ILM服务发送请求,以立即开始正常操作。
{
  "operation_mode": "RUNNING"
}
可以使用以下API来管理索引策略。可参考官方文档 管理索引生命周期。
政策管理API
索引管理API
运营管理API
扫码关注有惊喜!

原文:https://www.cnblogs.com/zlt2000/p/14209665.html