在 Elasticsearch
的平常中,有不少如存储 系统日志、行为数据等方面的应用场景,这些场景的特色是数据量很是大,而且随着时间的增加 索引
的数量也会持续增加,然而这些场景基本上只有最近一段时间的数据有使用价值或者会被常用(热数据),而历史数据几乎没有做用或者不多会被使用(冷数据),这个时候就须要对 索引
进行必定策略的维护管理甚至是删除清理,不然随着数据量愈来愈多除了浪费磁盘与内存空间以外,还会严重影响 Elasticsearch
的性能;html
在 Elastic Stack 6.6
版本后推出了新功能 Index Lifecycle Management(索引生命周期管理)
,支持针对索引的全生命周期托管管理,而且在 Kibana
上也提供了一套 UI 界面来配置策略。本文主要介绍 Elasticsearch
索引生命周期管理如何配置和使用。json
索引生命周期分为4个阶段:hot、warm、cold、delete,其中hot主要负责对索引进行rollover操做。api
rollover:滚动更新建立的新索引将添加到索引别名,并被指定为写索引。安全
PS:4个阶段中只有hot阶段是必须的bash
索引根据时间参数min_age进入生命周期阶段,若未设置,默认是0ms。min_age一般是从建立索引的时间开始计算,若是索引被设置为滚动索引,那么min_age是从索引滚动开始计算。注意,在检查min_age参数并进入下一个阶段前,当前阶段的操做必须完成。app
阶段/action | 优先级设置 | 取消跟随 | 滚动索引 | 分片分配 | 只读 | 强制段合并 | 收缩索引 | 冻结索引 | 删除 |
---|---|---|---|---|---|---|---|---|---|
hot | √ | √ | √ | × | × | × | × | × | × |
warm | √ | √ | × | √ | √ | √ | √ | × | × |
cold | √ | √ | × | √ | × | × | × | √ | × |
delete | × | × | × | × | × | × | × | × | √ |
下面以索引 syslog-2020.10.01
为例子,在索引建立 1 天后转为 Warm 阶段,30 天后转为 Cold 阶段,30 天后删除curl
日期 | 动做 | 阶段 |
---|---|---|
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
设定以下:异步
Rollover
Rollover
后 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、用户名和密码按实际状况修改elasticsearch
关联策略有两种方式,分别是使用索引模板关联和索引直接关联ide
索引模板来建立所需的索引,并关联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
扫码关注有惊喜!