前言

官方文档地址7.8版本

正文

ILM定义了四个生命周期阶段:
Hot:正在积极地更新和查询索引。
Warm:不再更新索引,但仍在查询。
cold:不再更新索引,很少查询。信息仍然需要可搜索,但是如果这些查询速度较慢也可以。
Delete:不再需要该索引,可以安全地将其删除。

ILM定期运行(indices.lifecycle.poll_interval),默认是10分钟,检查索引是否符合策略标准,并执行所需的任何步骤。
为了避免争用情况,ILM可能需要运行多次以执行完成一项动作所需的所有步骤。所以,即使indices.lifecycle.poll_interval设置为10分钟并且索引符合rollover,也可能需要20分钟才能完成rollover。
举例:比如我们设定超过10篇文档就rollover,但是因为这个过程不是立即实现的,可能第11,12篇还在落在之前的索引上,直到rollover成功后,新建的文档才会落在新的索引上。

注意:

为确保策略更新不会将索引置于无法退出当前阶段的状态,进入阶段时,阶段定义会缓存在索引元数据中。此缓存的定义用于完成该阶段。
当索引前进到下一阶段时,它将使用更新策略中的阶段定义。

ilm默认是启动的,状态为running,可以使用下面的api操作一下。

# 查看状态
GET _ilm/status
# 启动
POST _ilm/start
# 停止
POST _ilm/stop

rollover

这个是比较常用的,单独拿出来。
rollover可以基于大小,文档数或使用期限创建新的索引去保存数据。

操作体验下:

1.创建一条策略

# 创建一条策略(这里设置超过3条数据就rollover)
PUT _ilm/policy/test-policy
{"policy": {"phases": {"hot": {"actions": {"rollover": {"max_docs": 3},"set_priority": {"priority": 100}}},"delete": {"min_age": "220d","actions": {"delete": {}}}}}
}# 顺带列一下其它的api,如下:
# 查询
GET _ilm/policyGET _ilm/policy/<policy_id># 删除策略
DELETE _ilm/policy/<policy_id># 从index中移除策略
POST <index>/_ilm/remove
# 查看索引当前所在生命周期状态
GET <index>/_ilm/explain
# 重试,一般通过explain查看策略状态,如果是error,则按照错误信息更新策略,然后可以执行retry进行重试
POST <index>/_ilm/retry

2. 创建index template应用策略:

# 创建index模板
PUT _index_template/test-template
{"index_patterns": ["test-*"],"template":{"settings": {"number_of_shards": 1,"number_of_replicas": 0,"index.lifecycle.name": "test-policy",    "index.lifecycle.rollover_alias": "test-index"  }}
}

也可以创建index 然后应用策略:
注意:
1.rollover操作的策略一般不会这样直接应用给index,而是使用index template,不然rollover新生成的索引没有应用到策略。
2.要给自己创建的索引应用生命策略时,要手动的创建第一个初始索引,并将其指定为写入索引,索引名称必须与索引模板中定义的模式匹配,并以数字结尾。(
为Beats或Logstash Elasticsearch输出插件启用索引生命周期管理时,必要的策略和配置更改将自动应用。您可以修改默认策略,但无需显式配置策略或引导初始索引。)

# 创建索引时指定生命策略
PUT test-000001
{"settings": {"number_of_shards": 1,"number_of_replicas": 1,"index.lifecycle.name": "my_policy" }
}# 或者,直接给index应用策略
PUT test-000001/_settings
{"index": {"lifecycle": {"name": "mylogs_policy_existing"}}
}

这个可以直接移动生命周期:

POST _ilm/move/my-index-000001
{"current_step": { "phase": "new","action": "complete","name": "complete"},"next_step": { "phase": "warm","action": "forcemerge","name": "forcemerge"}
}

3.创建index

这里创建一个符合索引模板的index,并向里面插入4条数据,
然后可以通过GET <index>/_ilm/explain查看状态,等到状态为完成了,再插入新数据,就可以看到自动创建了一个新的索引。

# 手动创建初始索引,数字结尾,并指定为写入索引
PUT test-000001
{"aliases": {"test-alias": {"is_write_index": true}}
}

测试的时候可以通过修改配置项,来缩短ILM检测时间间隔。

PUT /_cluster/settings
{"transient": {"indices.lifecycle.poll_interval": "1m" }
}

actions

上面的rellover其实就是hot阶段里的一个action,在不同的生命阶段,支持的actions不完全一样,具体的如下:
Hot
Set Priority
Unfollow
Rollover
Warm
Set Priority
Unfollow
Read-Only
Allocate
Shrink
Force Merge
Cold
Set Priority
Unfollow
Allocate
Freeze
Delete
Wait For Snapshot
Delete

简单介绍下上面列举的actions。

Set Priority

设置索引的优先级。节点重新启动后,将按优先级从高到低恢复索引。

通常,热阶段的索引应具有最高值,而冷阶段的索引应具有最低值。例如:100为热相,50为热相,0为冷相。未设置此值的索引的默认优先级为1。

值必须为0或更大。设置为null删除优先级。

示例:

PUT _ilm/policy/my_policy
{"policy": {"phases": {"warm": {"actions": {"set_priority" : {"priority": 50}}}}}
}

Unfollow

将CCR跟随者索引转换为常规索引。这使得可以在跟随者索引上安全地执行收缩,翻转和可搜索快照操作。您还可以在生命周期中移动关注者索引时直接使用取消关注。
对不是跟随者的索引没有影响,阶段执行只是移至下一个动作。

注意:

当将Shrink 和 Rollover 操作应用于跟随者索引时,该操作将自动触发。

该操作将一直等到将跟随者索引转换为常规索引是安全的。必须满足以下条件:

1.Leader索引的index.lifecycle.indexing_complete必须为true。如果使用 Rollover 操作领导者索引,则会自动发生 ,并且可以使用索引设置API手动设置。
2.对领导者索引执行的所有操作都已复制到跟随者索引。这样可以确保在转换索引时不会丢失任何操作。

满足这些条件后,取消关注将执行以下操作:

1.暂停跟随者索引。
2.关闭关注者索引。
3.取消关注领导者索引。
4.打开跟随者索引(此时为常规索引)。

示例:

PUT _ilm/policy/my_policy
{"policy": {"phases": {"hot": {"actions": {"unfollow" : {}}}}}
}

Read-Only

设置索引为只读

示例:

PUT _ilm/policy/my_policy
{"policy": {"phases": {"warm": {"actions": {"readonly" : { }}}}}
}

Allocate

示例:

# 节点增加属性,在elasticsearch.yml里面
node.attr.{attribute}: {value}
# 例如:增加一个size属性
node.attr.size: medium
# 索引分配过滤器设置
# 将索引分配给其节点{attribute}至少具有一个逗号分隔值的节点。
index.routing.allocation.include.{attribute}
# 将索引分配给{attribute}具有所有逗号分隔值的节点。
index.routing.allocation.require.{attribute}
# 分配索引到其一个节点{attribute}具有无逗号分隔值的。
index.routing.allocation.exclude.{attribute}# 创建模板时指定分配到有hot属性的节点
PUT _template/test_template
{"index_patterns": ["logs*"],                 "settings": {"number_of_shards": 1,"number_of_replicas": 1,"index.lifecycle.name": "logs_policy", "index.routing.allocation.require.data": "hot","index.lifecycle.rollover_alias": "logs"    }
}# 这个是分配hot,warm阶段的索引到属性box_type,值为hot或warm的节点上
PUT _ilm/policy/my_policy
{"policy": {"phases": { "warm": {"actions": {"allocate" : {"include" : {"box_type": "hot,warm"}}}}}}
}

Shrink

将索引设置为只读, 并将其收缩为具有更少主碎片的新索引。新索引的名称为形式 shrink-<original-index-name>。例如,如果源索引的名称为logs,则收缩索引的名称为shrink-logs。

shrink 操作将索引的所有主碎片分配到一个节点,因此它可以调用shrink API来收缩索引。收缩后,它将指向原始索引的别名交换为新的收缩索引。

注意:

如果对跟随者索引使用了收缩操作,则策略执行将等待,直到领导索引翻转(或 以其他方式标记为完成),然后在执行收缩操作之前使用Unfollow操作将跟随者索引转换为常规索引 。

示例:

PUT _ilm/policy/my_policy
{"policy": {"phases": {"warm": {"actions": {"shrink" : {"number_of_shards": 1}}}}}
}

Force Merge

强制合并索引到一个更大的segments。

注意:

1.该操作会使索引变为  read-only
2.如果要在hot阶段使用,则必须有 rollover 。没有的话,ILM会拒绝这个策略。

示例:
max_num_segments: 合并后的数量,如果要完全合并,应设置为1。

PUT _ilm/policy/my_policy
{"policy": {"phases": {"warm": {"actions": {"forcemerge" : {"max_num_segments": 1}}}}}
}

Freeze

冻结索引,这个可以缩小占用的内存。

示例:

PUT _ilm/policy/my_policy
{"policy": {"phases": {"cold": {"actions": {"freeze" : { }}}}}
}

Wait For Snapshot

等待快照,这个可以保证索引在被删除之前执行快照相关计划。

示例:

PUT _ilm/policy/my_policy
{"policy": {"phases": {"delete": {"actions": {"wait_for_snapshot" : {"policy": "slm-policy-name"}}}}}
}

Delete

删除索引。

示例:

PUT _ilm/policy/my_policy
{"policy": {"phases": {"delete": {"actions": {"delete" : { }}}}}
}

跳过Rollover

index.lifecycle.indexing_complete设置为true,则ILM不会对索引执行过渡操作,即使它符合过渡条件。
一般当过渡操作成功完成时,它会由ILM自动设置。

注意:果index.lifecycle.indexing_complete为is true,则ILM验证索引不再是由所指定的别名的写入索引index.lifecycle.rollover_alias。如果索引仍然是写索引或未设置过渡别名,那么索引将移至ERROR step。

例如:如果我们需要更改新索引的名称,同时保留之前的索引配置的策略,可以按照下面的步骤:
1.创建新的索引模板使用相同的这个生命策略
2.创建初始索引
3.通过 index aliases API 修改索引别名的写入索引是新的索引

# 将新创建的索引增加别名test-alias,并设置为写入索引
POST /_aliases
{"actions": [{"add": {"index": "test-new-000001","alias": "test-alias","is_write_index": true}}]
}

4.将旧索引的index.lifecycle.indexing_complete设置为 true.

PUT test-000001
{"index.lifecycle.indexing_complete": true
}

在实际应用中,如果我们想另外从一个数字基点开始rollover,我们可以 创建新的index设置为写入索引,然后将旧的index都更新"index.lifecycle.indexing_complete": true即可。

恢复托管索引

假如我们恢复快照时,快照中包含有被生命策略管理的索引,生命策略里的min_age是针对索引创建或者Rollover时的时间,而不是恢复快照的时间,索引它按照相同的计划执行策略操作。
但是我们可能想在它进入下下一个生命阶段,变成只读或者合并之前,添加或更新文档,或防止立即删除操作,我们可以如下操作:
1.暂时停止ILM。这将暂停所有ILM策略的执行。
2.恢复快照。
3.在ILM恢复策略执行之前,从索引中删除策略或执行所需的任何操作。
4.重新启动ILM以恢复策略执行。


想要了解更多,可以通过 elk相关知识地图 来找到你想要了解的部分进行查看。


ES系列-- ILM索引生命周期管理相关推荐

  1. Elasticsearch ILM 索引生命周期管理常见坑及避坑指南

    之前的博文和视频都讲过 ILM 索引生命周期管理.但从近期的反馈和我自己的实战经验看,依然会有很多坑. 现将我自己和大家遇到的常见坑汇集如下,希望能让后来小伙伴少走弯路. 少啰嗦,直接上干货. 坑1: ...

  2. Elasticsearch7.X ILM索引生命周期管理(冷热分离)

    一."索引生命周期管理"概述 Elasticsearch索引生命周期管理指:Elasticsearch从设置.创建.打开.关闭.删除的全生命周期过程的管理. 二.为什么要使用&qu ...

  3. es对日志数据进行索引生命周期管理

    前言 在采用ELK分布式日志采集平台的时候,一般都会采用ES来存储采集的日志信息.日志信息一般都是持续增长的,是典型的时序数据. 如果不对采集的日志数据做生命周期管理,很容易导致单个索引体积持续增长. ...

  4. ES索引生命周期管理ILM

    前言 在使用ES的过程中,你是否遇到过这样的问题: 1.单个索引数据量持续增长,导致查询速度降低,运维困难 2.希望能根据时间周期自动生成新的索引,比如天.周.月自动生成新的索引 3.希望能定期自动删 ...

  5. ElasticSearch索引生命周期管理(ILM)

    注: 部分概念介绍来源于网络 6.6 版本的发布,Index Lifecycle Management(索引生命周期管理,后文简称 ILM ): ILM 可以将索引生命周期分为四个阶段(Phase)( ...

  6. 索引生命周期管理ILM看完不懂你锤我

    阅读完本文你可以学到什么是索引生命周期管理,各个阶段可以做的操作以及如何使用索引模版使用索引生命周期策略,下面就跟我一起来吧 基础理论篇 索引生命周期管理(ILM)是一种可以让我们随着时间推移自动化的 ...

  7. 干货 | Elasticsearch 索引生命周期管理 ILM 实战指南

    1.什么是索引生命周期? 关于人生,有人这么说:"人,生来一个人,死去一个人,所以,人生就是一个人生老病死的简称." 在基于日志.指标.实时时间序列的大型系统中,集群的索引也具备类 ...

  8. Elasticsearch 索引生命周期管理方案

    Elasticsearch索引生命周期管理方案 文章目录 Elasticsearch索引生命周期管理方案 1.生命周期 1.1 阶段介绍 2.模拟过程(基础) 2.1 创建索引生命周期策略 2.2 创 ...

  9. 37.索引生命周期管理—kibana 索引配置

    37.1 背景 引入索引生命周期管理的一个最重要的目的就是对大量时序数据在es读写操作的性能优化 如通过spark streaming读取Kafka中的日志实时写入es,这些日志高峰期每天10亿+,每 ...

最新文章

  1. 传统jdbc存在的问题总结
  2. tf.nn.embedding_lookup函数的用法
  3. Win2008 R2实战之只读域控制器部署(图)有修改
  4. C编程,随机数,排序
  5. TSS描述符表的作用
  6. 十三、Tomcat的WebSocket支持
  7. 互联网寒冬资讯分析报告!如何在“大裁员”下逆势而为?
  8. java编写Linux文件共享,ubuntu下用samba实现windows与linux文件共享
  9. Android----Intent详解
  10. 70+优秀的前端工具(转)
  11. Java集合框架总结
  12. MATALB 卷积神经网络 图片二分类
  13. 网页版Facebook第三方登陆
  14. 塞班系统更新服务器,塞班系统还在更新?网友:我把N8从抽屉里拿了出来
  15. android Drawable setbounds()介绍
  16. 听说学习是件苦差事——Linux第一天
  17. Python pygame 坦克大战
  18. 人生25句最美丽的名句
  19. 手机日常使用技巧、和手机停机如何免费上网 。好多大家不知道的功能 不看后悔哦
  20. js动态添加修改删除元素

热门文章

  1. 输入一个四位数将其加密后输出c语言,从键盘输入一个四位数-按如下规则加密后输出...
  2. 空气净化器的研究概况
  3. Auto.js Pro安卓免ROOT引流脚本开发系列教程27网易公开课(5)-UI界面构建
  4. 用python让excel飞起来 pdf_讯飞会议宝S8体验:以后开会请速记的钱,可以省了
  5. 为自己的APP搭建个简易后台
  6. DHU Python Curriculumly Learning【5】——大作业_key_by_TA
  7. 微信小程序tabBar改变图片大小方法
  8. 4G工业路由器如何助力自动售货机更智能?
  9. 记录win10突然卡死,只有鼠标能动,无法点击,大小写灯失效,只能强制关机
  10. 石川:出色不如走运 (II)?