Elasticsearch 的索引生命周期管理(Index Lifecycle Management,简称 ILM)是一种自动化管理索引生命周期的功能,旨在帮助用户根据索引的使用模式和数据价值,高效地管理和优化索引的存储、性能和成本。以下是关于 Elasticsearch 索引生命周期的详细说明:
---
1.索引生命周期的五个阶段
Elasticsearch 的 ILM 定义了五个主要阶段,每个阶段对应不同的索引使用模式和管理策略:
1.1 热(Hot)阶段
• 特点:索引处于活跃状态,频繁更新和查询。
• 适用场景:通常是最近创建的索引,包含最新的数据,需要快速响应查询。
• 典型操作:
• 设置高优先级。
• 执行滚动(Rollover)操作,当索引达到一定大小或时间后,自动创建新索引并切换写入。
• 可能会执行强制合并(Force Merge)以优化性能。
1.2 温(Warm)阶段
• 特点:索引不再更新,但仍然需要被查询。
• 适用场景:数据不再变化,但查询需求仍然存在。
• 典型操作:
• 设置为只读。
• 执行降采样(Downsample),减少数据粒度以节省存储。
• 可能会缩小(Shrink)索引,将索引从多个分片缩减到较少的分片以节省资源。
1.3 冷(Cold)阶段
• 特点:索引很少被查询,但仍需要保留以供搜索。
• 适用场景:历史数据,查询频率低但需要保留。
• 典型操作:
• 设置为只读。
• 使用可搜索快照(Searchable Snapshot)将索引数据存储到低成本存储中。
• 可能会进一步降采样或迁移数据。
1.4 冻结(Frozen)阶段
• 特点:索引极少见查询,查询速度可以很慢。
• 适用场景:非常旧的数据,几乎不被查询,但需要保留。
• 典型操作:
• 使用可搜索快照将数据存储到低成本存储中。
• 索引几乎不占用计算资源。
1.5 删除(Delete)阶段
• 特点:索引不再需要,可以被安全删除。
• 适用场景:数据已经过期或不再需要。
• 典型操作:
• 等待快照完成(如果需要备份)。
• 删除索引以释放存储空间。
---
2.生命周期策略(Lifecycle Policy)
生命周期策略定义了索引在不同阶段的行为和转换条件。策略包括以下内容:
• 阶段定义:指定索引将经过哪些阶段。
• 操作定义:在每个阶段执行哪些操作(如滚动、缩小、设置为只读等)。
• 转换条件:基于索引的年龄、大小或其他条件,决定何时从一个阶段转移到下一个阶段。
2.1 阶段转换的条件
• 最小年龄(min_age):索引必须达到指定的最小年龄才能进入下一个阶段。
• 操作完成:当前阶段的所有操作必须完成。
• 年龄计算:如果索引发生滚动,`min_age`是从滚动时间开始计算的,而不是从创建时间开始。
---
3.ILM 的工作原理
• 定期检查:ILM 定期运行(由`indices.lifecycle.poll_interval`配置),检查索引是否满足策略条件。
• 操作执行:如果索引满足条件,ILM 会执行相应阶段的操作。某些操作可能需要多次运行才能完成。
• 缓存机制:ILM 会在索引元数据中缓存阶段定义,以防止策略更新导致索引进入无法退出的状态。
---
4.ILM 的应用场景
• 时间序列数据:如日志、监控数据等,随着时间推移,数据的查询频率逐渐降低。
• 成本优化:通过将旧数据迁移到低成本存储(如可搜索快照)来节省存储成本。
• 性能优化:通过缩小、降采样等操作,减少存储和计算资源的占用。
---
5.ILM 的限制和注意事项
• 集群健康:如果集群状态为黄色(存在未分配的分片),ILM 仍然可以执行阶段转换,但可能会导致意外的副作用。
• 权限问题:ILM 以最后更新策略的用户身份运行,需要确保该用户有足够的权限。
• 操作顺序:ILM 按照定义的顺序执行操作,某些操作可能需要多次运行才能完成。
---
通过 ILM,Elasticsearch 提供了一种灵活且高效的方式来管理索引的生命周期,帮助用户根据数据的价值和使用模式,优化存储、性能和成本。
索引的生命周期策略指定了哪些阶段适用、每个阶段执行哪些操作以及何时在阶段之间转换。您可以在创建索引时手动应用生命周期策略。对于时间序列索引,需要将生命周期策略与用于创建时间序列中新索引的索引模板相关联。当索引发生滚动时,手动应用的策略不会自动应用于新索引。
如果您使用了 Elasticsearch 的安全功能,ILM 将以最后更新策略的用户身份执行操作。
ILM 只具有在最后策略更新时分配给该用户的权限。ILM 根据索引的年龄将索引移至下一个生命周期阶段。
要控制这些转换的时机,您需要为每个阶段设置一个最小年龄。要使索引进入下一个阶段,当前阶段的所有操作必须完成,并且索引的年龄必须大于下一个阶段的最小年龄。
配置的最小年龄必须在后续阶段之间递增,例如,“温”阶段的最小年龄为 10 天,则只能跟一个最小年龄未设置或 ≥10 天的“冷”阶段。最小年龄默认为零,这会导致 ILM 在当前阶段的所有操作完成后立即将索引移至下一个阶段。
如果索引已经滚动,那么 min_age 值是从索引滚动的时间开始计算的,而不是从索引创建时间开始计算。了解更多信息。
如果索引有未分配的分片且集群健康状态为黄色,索引仍然可以根据其索引生命周期管理策略进入下一个阶段。
然而,由于 Elasticsearch 只能在绿色集群上执行某些清理任务,因此可能会出现意外的副作用。为了避免磁盘使用量增加和可靠性问题,请及时解决任何集群健康问题。
ILM 控制每个阶段中操作的执行顺序以及执行每个操作所需的索引操作步骤。当索引进入一个阶段时,ILM 会将阶段定义缓存到索引元数据中。这确保了策略更新不会使索引进入一个无法退出该阶段的状态。
如果可以安全应用更改,ILM 会更新缓存的阶段定义;如果不能,则继续使用缓存的定义执行阶段操作。
ILM 会定期运行,检查索引是否符合策略标准,并执行所需的步骤。为了避免竞争条件,ILM 可能需要运行多次才能完成某个操作的所有步骤。例如,如果 ILM 确定某个索引符合滚动条件,它将开始执行完成滚动操作所需的步骤。
如果在某个点上无法安全地进入下一步,则执行停止。下次 ILM 运行时,ILM 会从上次停止的地方继续执行。这意味着即使 indices.lifecycle.poll_interval 设置为 10 分钟,索引符合滚动条件,也可能需要 20 分钟才能完成滚动。ILM 在每个阶段支持以下操作。ILM 按列出的顺序执行操作。
热(Hot):
设置优先级
取消跟随
滚动
设置为只读
降采样
缩小
强制合并
可搜索快照
温(Warm):
设置优先级
取消跟随
设置为只读
降采样
分配
迁移
缩小
强制合并
冷(Cold):
设置优先级
取消跟随
设置为只读
降采样
可搜索快照
分配迁移
冻结(Frozen):
取消跟随
可搜索快照
删除(Delete):
等待快照
删除