Amazon OpenSearch Service 中的索引状态管理 - 亚马逊 OpenSearch 服务

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon OpenSearch Service 中的索引状态管理

通过 Amazon OpenSearch Service 中的索引状态管理(ISM),您可以定义自动执行日常任务的自定义管理策略,并将这些策略应用于索引和索引模式。您不再需要设置和管理外部进程来运行索引操作。

策略包含一个默认状态和一个状态列表,以供索引在这些状态之间转换。在每个状态中,您可以定义要执行的一系列操作和触发这些转换的条件。典型的使用案例是在一段时间后定期删除旧索引。例如,您可以定义一个策略以在 30 天后将索引移入 read_only 状态,然后在 90 天后最终将其删除。

将策略附加到索引后,ISM 会创建一个每 5 到 8 分钟(对于早于 1.3 版本的集群,则为 30 到 48 分钟)运行一次的作业,以执行策略操作、检查条件并将索引转换为不同的状态。该作业运行的基本时间是每 5 分钟一次,外加 0-60% 的随机抖动,以确保您不会同时看到所有索引的活动激增。如果集群状态为红色,则 ISM 不会运行作业。

ISM 需要 OpenSearch 或 Elasticsearch 6.8 或更高版本。

注意

本文档简要概述了 ISM 和几个策略示例。此外还介绍了适用于 Amazon OpenSearch Service 域的 ISM 与自主管理型 OpenSearch 集群上的 ISM 有何不同。有关 ISM 的完整文档,包括全面的参数参考、对各项设置的说明以及 API 参考,请参阅 OpenSearch 文档中的 Index State Management

重要

您不能再使用索引模板将 ISM 策略应用于新创建的索引。您可以继续使用 ISM 模板字段自动管理新创建的索引。此更新引入了使用此设置影响现有 CloudFormation 模板的重大更改。

创建一个 ISM 策略

开始使用索引状态管理
  1. https://console.aws.amazon.com/aos/home 打开 Amazon OpenSearch Service 控制台。

  2. 选择要为其创建 ISM 策略的域。

  3. 从域的控制面板中,导航到 OpenSearch 控制面板 URL,然后使用您的主用户名和密码登录。URL 遵循以下格式:

    domain-endpoint/_dashboards/
  4. 在 OpenSearch 控制面板中打开左侧导航面板,然后依次选择 Index Management(索引管理)、Create policy(创建策略)。

  5. 使用可视化编辑器JSON 编辑器创建策略。我们建议使用可视化编辑器,因为它提供了一种更结构化的策略定义方式。有关创建策略的帮助,请参阅下面的示例策略

  6. 创建策略后,请将它附加到一个或多个索引:

    POST _plugins/_ism/add/my-index { "policy_id": "my-policy-id" }
    注意

    如果您的域名运行的是旧版 Elasticsearch 版本,请使用 _opendistro 而非 _plugins

    或者,在 OpenSearch 控制面板中选择索引,然后选择应用策略

示例策略

以下示例策略演示了如何自动执行常见 ISM 使用案例。

从热存储到冷存储

此示例策略将索引从热存储移动到 UltraWarm,并最终移动到冷存储。然后,删除索引。

索引最初处于 hot 状态。10 天后,ISM 将其移动到 warm 状态。80 天后,即索引已存在 90 天后,ISM 将索引移动到 cold 状态。一年后,该服务向 Amazon Chime 房间发送通知以告知该索引正在被删除,然后永久删除该索引。

请注意,冷索引需要 cold_delete 操作而不是正常的 delete 操作。另请注意,数据中需要显式 timestamp_field,以便使用 ISM 管理冷索引。

{ "policy": { "description": "Demonstrate a hot-warm-cold-delete workflow.", "default_state": "hot", "schema_version": 1, "states": [{ "name": "hot", "actions": [], "transitions": [{ "state_name": "warm", "conditions": { "min_index_age": "10d" } }] }, { "name": "warm", "actions": [{ "warm_migration": {}, "retry": { "count": 5, "delay": "1h" } }], "transitions": [{ "state_name": "cold", "conditions": { "min_index_age": "90d" } }] }, { "name": "cold", "actions": [{ "cold_migration": { "timestamp_field": "<your timestamp field>" } } ], "transitions": [{ "state_name": "delete", "conditions": { "min_index_age": "365d" } }] }, { "name": "delete", "actions": [{ "notification": { "destination": { "chime": { "url": "<URL>" } }, "message_template": { "source": "The index {{ctx.index}} is being deleted." } } }, { "cold_delete": {} }] } ] } }

减少副本数

此示例策略在七天后将副本计数减少到零以节省磁盘空间,然后在 21 天后删除索引。此策略假定索引是非关键索引,并不再接收写入请求。副本数量为零会带来一定的数据丢失风险。

{ "policy": { "description": "Changes replica count and deletes.", "schema_version": 1, "default_state": "current", "states": [{ "name": "current", "actions": [], "transitions": [{ "state_name": "old", "conditions": { "min_index_age": "7d" } }] }, { "name": "old", "actions": [{ "replica_count": { "number_of_replicas": 0 } }], "transitions": [{ "state_name": "delete", "conditions": { "min_index_age": "21d" } }] }, { "name": "delete", "actions": [{ "delete": {} }], "transitions": [] } ] } }

拍摄索引快照

此示例策略使用 snapshot 操作,以便在索引包含至少一个文档时立即拍摄该索引的快照。repository 是您在 Amazon S3 中注册的手动快照存储库的名称。snapshot 是快照的名称。有关注册存储库的快照先决条件和步骤,请参阅 在 Amazon OpenSearch Service 中创建索引快照

{ "policy": { "description": "Takes an index snapshot.", "schema_version": 1, "default_state": "empty", "states": [{ "name": "empty", "actions": [], "transitions": [{ "state_name": "occupied", "conditions": { "min_doc_count": 1 } }] }, { "name": "occupied", "actions": [{ "snapshot": { "repository": "<my-repository>", "snapshot": "<my-snapshot>" } }], "transitions": [] } ] } }

ISM 模板

您可以在策略中设置 ism_template 字段,因此当您创建与模板模式匹配的索引时,策略会自动附加到该索引。在此示例中,以 "log" 开头的名称创建的任何索引都会自动匹配 ISM 策略 my-policy-id

PUT _plugins/_ism/policies/my-policy-id { "policy": { "description": "Example policy.", "default_state": "...", "states": [...], "ism_template": { "index_patterns": ["log*"], "priority": 100 } } }

有关更详细的示例,请参阅使用 ISM 模板进行自动回滚的策略示例

差异

与 OpenSearch 和 Elasticsearch 相比,用于 Amazon OpenSearch Service 的 ISM 有几个区别。

ISM 操作

  • OpenSearch Service 支持三种独特的 ISM 操作:warm_migrationcold_migrationcold_delete

    • 如果您的域启用了 UltraWarm,则 warm_migration 操作会将索引转换为温存储。

    • 如果您的域启用了冷存储,则 cold_migration 操作会将索引转换为冷存储,而 cold_delete 操作将从冷存储中删除此索引。

    即使这些操作中的其中一项操作未在设置的超时期限内完成,索引的迁移或删除仍会继续。设置上述的任何一个操作设置 error_notification 后,如果该操作未在超时期限内完成,则系统会通知您该操作失败,但此通知仅供您参考。实际操作没有固有的超时时间,并将继续运行直到最终成功或失败。

  • 如果您的域运行 OpenSearch 或 Elasticsearch 7.4 或更高版本,则 OpenSearch Service 支持 ISM openclose 操作。

  • 如果您的域运行 OpenSearch 或 Elasticsearch 7.7 或更高版本,则 OpenSearch Service 支持 ISM snapshot 操作。

冷存储 ISM 操作

对于冷索引,您必须在使用以下 ISM API 时指定 ?type=_cold 参数:

这些冷索引的 API 有以下附加区别:

  • 除非您在末尾使用,否则不支持通配符运算符。例如,支持 _plugins/_ism/<add, remove, change_policy, retry, explain>/logstash-*|,但不支持 _plugins/_ism/<add, remove, change_policy, retry, explain>/iad-*-prod

  • 不支持多个索引名称和模式。例如,支持 _plugins/_ism/<add, remove, change_policy, retry, explain>/app-logs|,但不支持 _plugins/_ism/<add, remove, change_policy, retry, explain>/app-logs,sample-data

ISM 设置

OpenSearch 和 Elasticsearch 让您可以使用 _cluster/settings API 更改所有可用的 ISM 设置。在 Amazon OpenSearch Service 上,您只能更改以下 ISM 设置

  • 集群级别设置:

    • plugins.index_state_management.enabled

    • plugins.index_state_management.history.enabled

  • 索引级别设置:

    • plugins.index_state_management.rollover_alias