索引生命周期管理阶段与操作
Elasticsearch 中的索引生命周期管理 (ILM) 定义了索引如何根据时效和使用情况在不同阶段(热、温、冷、冻结和删除)之间转换。每个阶段都支持特定的操作,从滚动更新和强制合并到可搜索快照和删除。本指南说明了每个阶段的目的、转换的时间点以及用于高效管理索引性能和存储的可用操作。
索引生命周期管理 (ILM) 定义了五个索引生命周期阶段
- 热 (Hot):索引正在被主动更新和查询。
- 温 (Warm):索引不常更新或完全不更新,但仍在被查询。
- 冷 (Cold):索引不常更新或完全不更新,且查询频率也不高。信息仍然需要可被搜索,但即使这些查询变慢也没关系。
- 冻结 (Frozen):索引不再更新,且极少被查询。信息仍然需要可被搜索,但即使这些查询非常慢也没关系。
- 删除 (Delete):不再需要该索引,可以安全地将其移除。
索引的生命周期策略指定了哪些阶段适用、在每个阶段执行哪些操作,以及索引何时在阶段之间转换。
您可以在创建索引时手动应用生命周期策略。对于时间序列索引,您需要将生命周期策略与用于在该序列中创建新索引的索引模板相关联。当索引滚动更新时,手动应用的策略不会自动应用于新索引。
如果您使用 Elasticsearch 的安全功能,ILM 将以最后更新该策略的用户身份执行操作。ILM 仅拥有在最后一次策略更新时分配给该用户的角色。
ILM 根据索引的年龄(时效)使其在生命周期中转换。要控制这些转换的时间,您可以为每个阶段设置最小年龄 (minimum age)。为了使索引进入下一个阶段,当前阶段的所有操作必须完成,并且索引的年龄必须大于下一个阶段的最小年龄。配置的最小年龄必须在随后的阶段之间递增,例如,最小年龄为 10 天的“温”阶段之后,只能接一个最小年龄未设置或 >= 10 天的“冷”阶段。
最小年龄默认为零,这会导致 ILM 在当前阶段的所有操作完成后立即将索引移动到下一个阶段。
如果索引已滚动更新 (rolled over),则 min_age 值是相对于索引滚动更新的时间,而不是索引创建的时间。了解更多。
如果索引有未分配的分片且集群健康状态为黄色,则该索引仍可以根据其索引生命周期管理策略转换到下一个阶段。但是,由于 Elasticsearch 只能在绿色集群上执行某些清理任务,因此可能会出现意想不到的副作用。
为避免磁盘使用量增加和可靠性问题,请及时解决任何集群健康问题。
ILM 控制阶段内操作的执行顺序,以及为执行每个操作所需的必要索引操作而执行的步骤 (steps)。
当索引进入某个阶段时,ILM 会将阶段定义缓存在索引元数据中。这确保了策略更新不会使索引进入无法退出该阶段的状态。如果更改可以安全地应用,ILM 将更新缓存的阶段定义。如果不能,则阶段执行将继续使用缓存的定义。
ILM 会定期运行,检查索引是否符合策略条件,并执行所需的任何步骤。为避免竞态条件,ILM 可能需要运行多次才能执行完成操作所需的所有步骤。例如,如果 ILM 确定索引已达到滚动更新条件,它将开始执行完成滚动更新操作所需的步骤。如果它到达了无法安全进行下一步的点,执行将停止。下一次 ILM 运行时,它会从中断的地方继续执行。这意味着即使 indices.lifecycle.poll_interval 设置为 10 分钟且索引符合滚动更新条件,也可能需要 20 分钟才能完成滚动更新。
ILM 在每个阶段都支持以下操作。执行操作的顺序因不同的生命周期阶段而异。请参阅阶段和可用操作表,获取每个阶段可用操作的摘要。
以下操作在 hot(热)生命周期阶段可用。操作按所列顺序执行。
| 操作 | 描述 |
|---|---|
| 设置优先级 | 设置索引的优先级,这决定了节点重启后索引恢复的顺序。 |
| 取消关注 | 将 CCR 跟随者索引转换为常规索引,从而能够安全地对跟随者索引执行收缩、滚动更新和可搜索快照操作。 |
| 滚动更新 (Rollover) | 当现有索引满足指定的滚动更新条件时,将目标滚动更新到新索引。 |
| 只读 | 将索引数据设置为只读,禁止对其进行数据写入操作。 |
| 降采样 (Downsample) | 聚合时间序列 (TSDS) 索引,并为每个按配置的时间间隔分组的指标字段存储预计算的统计摘要(最小值、最大值、总和、值计数和平均值)。 |
| 收缩 (Shrink) | 阻止对源索引的写入操作,并将其收缩为具有较少主分片的新索引。 |
| 强制合并 | 通过合并部分分片来减少每个分片中的段数。 |
| 可搜索快照 | 对托管索引进行快照并在配置的存储库中将其挂载为可搜索快照。 |
以下操作在 warm(温)生命周期阶段可用。操作按所列顺序执行。
| 操作 | 描述 |
|---|---|
| 设置优先级 | 设置索引的优先级,这决定了节点重启后索引恢复的顺序。 |
| 取消关注 | 将 CCR 跟随者索引转换为常规索引,从而能够安全地对跟随者索引执行收缩、滚动更新和可搜索快照操作。 |
| 只读 | 将索引数据设置为只读,禁止对其进行数据写入操作。 |
| 降采样 (Downsample) | 聚合时间序列 (TSDS) 索引,并为每个按配置的时间间隔分组的指标字段存储预计算的统计摘要(min、max、sum、value_count 和 avg)。 |
| 分配 | 更新索引设置,以更改允许托管索引分片的节点,并更改副本数量。 |
| 迁移 | 通过更新 index.routing.allocation.include._tier_preference 索引设置,将索引移动到与当前阶段对应的数据层 (data tier)。 |
| 收缩 (Shrink) | 阻止源索引上的写入,并将其收缩为具有较少主分片的新索引。 |
| 强制合并 | 通过合并部分分片来减少每个分片中的段数。 |
以下操作在 cold(冷)生命周期阶段可用。操作按所列顺序执行。
| 操作 | 描述 |
|---|---|
| 设置优先级 | 设置索引的优先级,这决定了节点重启后索引恢复的顺序。 |
| 取消关注 | 将 CCR 跟随者索引转换为常规索引,从而能够安全地对跟随者索引执行收缩、滚动更新和可搜索快照操作。 |
| 只读 | 将索引数据设置为只读,禁止对其进行数据写入操作。 |
| 降采样 (Downsample) | 聚合时间序列 (TSDS) 索引,并为每个按配置的时间间隔分组的指标字段存储预计算的统计摘要(最小值、最大值、总和、值计数和平均值)。 |
| 可搜索快照 | 对托管索引进行快照并在配置的存储库中将其挂载为可搜索快照。 |
| 分配 | 更新索引设置,以更改允许托管索引分片的节点,并更改副本数量。 |
| 迁移 | 通过更新 index.routing.allocation.include._tier_preference 索引设置,将索引移动到与当前阶段对应的数据层 (data tier)。 |
以下操作在 frozen(冻结)生命周期阶段可用。操作按所列顺序执行。
以下操作在 delete(删除)生命周期阶段可用。操作按所列顺序执行。
下表总结了每个阶段可用的操作。
| 操作 | 热 |
温 |
冷 |
冻结 |
删除 |
|---|---|---|---|---|---|
| 分配 | ❌ | ✅ | ✅ | ❌ | ❌ |
| 删除 | ❌ | ❌ | ❌ | ❌ | ✅ |
| 降采样 (Downsample) | ✅ | ✅ | ✅ | ❌ | ❌ |
| 强制合并 | ✅ | ✅ | ❌ | ❌ | ❌ |
| 迁移 | ❌ | ✅ | ✅ | ❌ | ❌ |
| 只读 | ✅ | ✅ | ✅ | ❌ | ❌ |
| 滚动更新 (Rollover) | ✅ | ❌ | ❌ | ❌ | ❌ |
| 可搜索快照 | ✅ | ❌ | ✅ | ✅ | ❌ |
| 设置优先级 | ✅ | ✅ | ✅ | ❌ | ❌ |
| 收缩 (Shrink) | ✅ | ✅ | ❌ | ❌ | ❌ |
| 取消关注 | ✅ | ✅ | ✅ | ✅ | ❌ |
| 等待快照 | ❌ | ❌ | ❌ | ❌ | ✅ |