前言
在使用ES的过程中,你是否遇到过这样的问题:
1、单个索引数据量持续增长,导致查询速度降低,运维困难
2、希望能根据时间周期自动生成新的索引,比如天、周、月自动生成新的索引
3、希望能定期自动删除过期的历史数据,比如3年前的订单信息。
4、自动控制数据的冷热数据分层存储。
其实ES早就提供了相关的处理机制,那就是索引生命周期管理ILM(index lifecycle management )。
一、ILM介绍
通过配置索引生命周期管理 (ILM)策略实现根据性能、弹性和保留要求自动管理索引。
使用场景:
当索引达到特定大小或文档数量时启动新索引
每天、每周或每月创建一个新索引并存档以前的索引
删除陈旧索引以执行数据保留标准
我们可以通过 Kibana Management 或 ILM API 创建和管理索引生命周期策略。
当您为 Beats 或 Logstash Elasticsearch 输出插件启用索引生命周期管理时,会自动配置默认策略。
索引生命周期策略可以触发如下操作:
可以触发的操作:
Rollover: 当索引达到特定大小、文档数量或年龄时,创建一个新的写入索引
Shrink: 减少索引中主分片的数量
Force merge: 触发强制合并以减少索引分片中的segments段数
Freeze: 冻结索引并使其只读
Delete: 永久删除索引,包括其所有数据和元数据。
ILM 可以更轻松地管理热-温-冷架构中的索引,这在您处理日志和指标等时间序列数据时很常见。
可以指定:
您想要滚动到新索引的最大分片大小、文档数或年龄。
不再更新索引并且可以减少主分片数量的点。
何时强制合并以永久删除标记为删除的文档。
索引可以移动到性能较低的硬件的点。
可用性不那么重要并且可以减少副本数量的点。
何时可以安全删除索引。
例如,如果您将 ATM 机群中的指标数据索引到 Elasticsearch 中,您可以定义一个策略,说明:
1、当索引的主分片总大小达到 50GB 时,滚动到新索引。
2、将旧索引移至热阶段,将其标记为只读,并将其缩小为单个分片。
3、7 天后,将索引移至冷阶段并将其移至较便宜的硬件。
4、达到所需的 30 天保留期后,删除索引。
简单来说,索引生命周期管理ILM通过自定义索引生命周期策略(Index lifecycle policies),可以实现自动控制索引的滚动,分片压缩,强制合并,冻结,删除等操作。
注意⚠️:
要使用 ILM,集群中的所有节点必须运行相同的版本。
二、索引生命周期
ILM将索引生命周期定义为5个阶段:
Hot 热阶段,正在更新和查询的索引
Warm 暖阶段,不再更新,但仍在查询的索引
Cold 冷阶段,索引不再更新,并且不经常查询。信息仍需要可搜索,但是查询比较慢也没关系。
Frozen 冻结阶段,索引不再更新,很少被查询。信息仍需要搜索,但是查询非常慢也没关系。
Delete 删除阶段,索引不再需要,可以安全地删除。
索引的生命周期策略(Index lifecycle policies)指定适用于哪些阶段,在每个阶段执行哪些操作,以及在阶段之间转换的时间。
阶段转变 phase transitions
ILM 根据索引的年龄在生命周期中移动索引。为了控制这些转换的时间,可以为每个阶段设置最小年龄。要使索引进入下一阶段,当前阶段的所有操作都必须完成,并且索引的年龄必须大于下一阶段的最小年龄。规定的最低年龄必须在以后各阶段之间增加,例如,最低年龄为10天的”暖”阶段之后只能是最低年龄未设定或大于10天的”冷”阶段。
索引生命周期阶段的转变主要是根据索引的年龄。
阶段执行 phase execution
ILM 控制一个阶段中的动作执行的顺序,以及执行哪些步骤以对每个动作执行必要的索引操作。
当索引进入一个阶段时,ILM 将阶段定义缓存到索引元数据中。这可以确保策略更新不会将索引置于它永远不能退出阶段的状态。如果可以安全地应用更改,ILM 将更新缓存的阶段定义。如果不能,则使用缓存的定义继续阶段执行。
ILM 定期运行,检查索引是否满足策略标准,并执行所需的任何步骤。为了避免竞态条件,ILM 可能需要运行多次以执行完成操作所需的所有步骤。例如,如果 ILM 确定某个索引已经满足滚动条件,它将开始执行完成滚动动作所需的步骤。
阶段行动 phase actions
ILM 在每个阶段支持以下操作。
Hot阶段
设置优先级 Set Priority
取消跟随 Unfollow
滚动 Rollover
只读 Read-Only
分片压缩 Shrink
强制合并 Force Merge
可搜索快照 Searchable Snapshot
Warm阶段
设置优先级 Set Priority
取消跟随 Unfollow
只读 Read-Only
分配 Allocate
迁移 Migrate
分片压缩 Shrink
强制合并 Force Merge
Cold阶段
设置优先级 Set Priority
取消跟随 Unfollow
只读 Read-Only
可搜索快照 Searchable Snapshot
分配 Allocate
迁移 Migrate
强制合并 Force Merge
Frozen阶段
可搜索快照 Searchable Snapshot
Delete阶段
等待快照 Wait For Snapshot
删除 Delete
总结
本节主要介绍了ES中索引生命周期管理ILM的相关功能和使用场景。
1、索引生命周期管理的概念以及使用场景。
2、索引生命周期的5个阶段,Hot—>Warm—>Cold—>Frozen—>Delete。
3、可以通过定义索引生命周期策略(Index lifecycle policies)来实现索引生命周期的管理。
4、索引在每个生命周期阶段,可以执行的相关动作。