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

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

Amazon OpenSearch 服务中的索引状态管理

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

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

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

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

注意

本文档简要概述了 ISM 和几个策略示例。它还解释了 ISM for Amazon S OpenSearch ervice 域与 ISM 在自我管理 OpenSearch集群上的区别。有关 ISM 的完整文档,包括全面的参数参考、每项设置的描述以及 API 参考,请参阅 OpenSearch 文档中的索引状态管理

重要

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

创建一个 ISM 策略

开始使用索引状态管理
  1. 打开亚马逊 OpenSearch 服务控制台,网址为 https://console.aws.amazon.com/aos/home

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

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

    domain-endpoint/_dashboards/
  4. 在控制面板中打开左侧导航面 OpenSearch 板,选择索引管理,然后选择创建策略

  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 是快照的名称。有关注册存储库的快照先决条件和步骤,请参阅 在亚马逊 OpenSearch 服务中创建索引快照

{ "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 相比,适用于亚马逊 OpenSearch 服务的 ISM 有几个区别。

ISM 操作

  • OpenSearch 服务支持三种独特的 ISM 操作:warm_migrationcold_migration、和cold_delete

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

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

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

  • 如果您的域名运行 OpenSearch 或 Elasticsearch 7.4 或更高版本,则 OpenSearch 服务支持 ISM open 和操作。close

  • 如果您的域名运行 OpenSearch 或 Elasticsearch 7.7 或更高版本,则 OpenSearch 服务支持 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 允许您使用 API 更改所有可用的 _cluster/settings ISM 设置。在 Amazon OpenSearch 服务上,您只能更改以下 ISM 设置

  • 集群级别设置:

    • plugins.index_state_management.enabled

    • plugins.index_state_management.history.enabled

  • 索引级别设置:

    • plugins.index_state_management.rollover_alias