ILM 概念
editILM 概念
edit索引生命周期
editILM 定义了五个索引生命周期 阶段:
- 热: 索引正在被积极地更新和查询。
- 温: 索引不再被更新,但仍在被查询。
- 冷: 索引不再被更新,并且查询频率较低。信息仍然需要可搜索,但如果这些查询较慢也是可以接受的。
- 冻结: 索引不再被更新,并且很少被查询。信息仍然需要可搜索,但如果这些查询非常慢也是可以接受的。
- 删除: 索引不再需要,可以安全地删除。
索引的生命周期策略指定了哪些阶段是适用的,每个阶段执行什么操作,以及何时在各阶段之间进行转换。
您可以在创建索引时手动应用生命周期策略。 对于时间序列索引,您需要将生命周期策略与用于创建系列中新索引的索引模板关联。 当索引滚动更新时,手动应用的策略不会自动应用于新索引。
如果您使用 Elasticsearch 的安全功能,ILM 会以最后更新策略的用户身份执行操作。ILM 仅具有在最后一次策略更新时分配给该用户的角色。
相变
editILM 根据索引的年龄在生命周期中移动索引。 为了控制这些过渡的时机,您为每个阶段设置一个最小年龄。对于一个索引 移动到下一个阶段,当前阶段中的所有操作必须完成,并且索引必须 比下一个阶段的最小年龄更旧。配置的最小年龄必须在 后续阶段之间增加,例如,一个最小年龄为 10 天的“暖”阶段只能由 一个“冷”阶段跟随,该阶段的最小年龄要么未设置,要么 >= 10 天。
最小年龄默认为零,这会导致 ILM 在当前阶段的所有操作完成后立即将索引移动到下一个阶段。
如果一个索引有未分配的分片,并且集群健康状态为黄色, 该索引仍然可以根据其索引生命周期管理策略过渡到下一阶段。 然而,由于Elasticsearch只能在绿色集群上执行某些清理任务,因此可能会出现意外的副作用。
为了避免磁盘使用量增加和可靠性问题,请及时解决任何集群健康问题。
阶段执行
editILM 控制阶段中操作的执行顺序以及执行哪些步骤来为每个操作执行必要的索引操作。
当索引进入一个阶段时,ILM会将阶段定义缓存到索引元数据中。 这确保了策略更新不会使索引进入一个无法退出该阶段的状态。 如果可以安全应用更改,ILM会更新缓存的阶段定义。 如果不能,阶段执行将继续使用缓存的定义。
ILM 定期运行,检查索引是否符合策略标准,并执行所需的所有步骤。
为了避免竞争条件,ILM 可能需要运行多次才能执行完成操作所需的所有步骤。
例如,如果 ILM 确定索引已符合滚动更新标准,它将开始执行完成滚动更新操作所需的步骤。
如果它到达一个不安全继续到下一步的点,执行将停止。
下一次 ILM 运行时,ILM 将从上次停止的地方继续执行。
这意味着即使 indices.lifecycle.poll_interval 设置为 10 分钟并且索引符合滚动更新标准,滚动更新也可能需要 20 分钟才能完成。
阶段操作
editILM 在每个阶段支持以下操作。ILM 按照列出的顺序执行这些操作。
滚动
edit当索引时间序列数据(如日志或指标)时,您不能无限期地写入单个索引。 为了满足您的索引和搜索性能要求并管理资源使用, 您可以写入一个索引直到达到某个阈值,然后创建一个新索引并开始写入它。 使用滚动索引使您能够:
- 优化高性能热节点上的高摄取率的活动索引。
- 优化温节点上的搜索性能。
- 将较旧、访问频率较低的数据转移到成本较低的冷节点,
- 根据保留策略删除数据,通过删除整个索引来实现。
我们建议使用数据流来管理时间序列数据。数据流会自动跟踪写入索引,同时将配置保持在最低限度。
每个数据流都需要一个包含以下内容的索引模板:
-
数据流的名称或通配符(
*)模式。 -
数据流的时间戳字段。此字段必须映射为
date或date_nanos字段数据类型,并且必须包含在索引到数据流的每个文档中。 - 应用于每个后备索引的映射和设置,当其创建时。
数据流设计用于仅追加数据,其中数据流名称可以用作操作(读取、写入、滚动、收缩等)的目标。如果你的用例需要就地更新数据,你可以使用索引别名来管理时间序列数据。然而,这涉及更多的配置步骤和概念:
- 一个索引模板,用于指定系列中每个新索引的设置。 您可以针对数据摄入优化此配置,通常使用与热节点数量相同的分片。
- 一个索引别名,引用整个索引集。
- 一个指定为写入索引的单一索引。 这是处理所有写请求的活动索引。 在每次滚动更新时,新索引将成为写入索引。
当一个索引被滚动更新时,前一个索引的年龄会被更新以反映滚动更新的时间。
这个日期,而不是索引的creation_date,用于索引生命周期管理
min_age阶段计算。了解更多。
自动滚动
editILM 和数据流生命周期(在 [预览] 此功能处于技术预览阶段,可能会在未来的版本中进行更改或删除。Elastic 将努力修复任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。 )使您能够根据索引大小、文档数量或年龄等条件自动滚动到新索引。当触发滚动时,将创建一个新索引,写别名将更新为指向新索引,并且所有后续更新都将写入新索引。
基于大小、文档数量或年龄滚动到新索引比基于时间的滚动更可取。在任意时间点滚动通常会导致许多小索引,这可能会对性能和资源使用产生负面影响。
即使空索引具有关联的 max_age,也不会进行滚动更新,这通常会导致滚动更新发生。策略可以通过添加 "min_docs": 0 条件来覆盖此行为,并显式选择滚动更新空索引。这也可以通过将 indices.lifecycle.rollover.only_if_has_documents 设置为 false 来在集群范围内禁用。
如果一个或多个分片包含200000000或更多文档,滚动操作将隐式地总是滚动一个数据流或别名。通常情况下,一个分片在达到200M文档之前会先达到50GB,但对于空间高效的数据集来说,情况并非如此。如果一个分片包含超过200M的文档,搜索性能很可能会受到影响。这就是内置限制的原因。
生命周期策略更新
edit您可以通过修改当前策略或切换到不同策略来更改滚动索引或滚动索引集合的生命周期管理方式。
为了确保策略更新不会使索引进入无法退出当前阶段的状态,当索引进入阶段时,阶段定义会被缓存到索引元数据中。如果可以安全应用更改,ILM会更新缓存的阶段定义。如果不能,则继续使用缓存的定义执行阶段。
当索引进入下一阶段时,它使用更新策略中的阶段定义。
更改如何应用
edit当一个策略最初应用于索引时,索引会获得该策略的最新版本。 如果你更新了策略,策略版本会递增,ILM可以检测到该索引正在使用一个需要更新的早期版本。
对 min_age 的更改不会传播到缓存的定义。
更改阶段的 min_age 不会影响当前正在执行该阶段的索引。
例如,如果您创建了一个策略,该策略的热阶段未指定min_age,则在应用该策略时,索引会立即进入热阶段。如果您随后更新策略,为热阶段指定1天的min_age,则这对已经处于热阶段的索引没有影响。在策略更新之后创建的索引在它们达到一天大之前不会进入热阶段。
新策略如何应用
edit当您将不同的策略应用于托管索引时, 索引将使用之前策略的缓存定义完成当前阶段。 索引在进入下一阶段时开始使用新策略。