如何使用 ISM 来管理 Amazon OpenSearch Service 存储空间不足问题?

上次更新日期:2022 年 11 月 21 日

我的 Amazon OpenSearch Service 集群的存储空间不足。如何使用 Index State Management (ISM) 来管理 OpenSearch Service 存储空间不足问题?

简短描述

Index State Management (ISM) 允许您自动执行例行任务,然后将其应用于 OpenSearch Service 中的索引和索引模式。借助 ISM,您可以定义自定义管理策略,帮助您维护诸如磁盘空间不足等问题。例如,您可以使用 rollover 操作和 ISM 策略根据索引大小等条件自动删除旧索引。当现有索引满足定义的条件时,rollover 操作会将目标滚动更新到新索引。

要使用 rollover 操作为索引模式创建 ISM 策略,请执行以下步骤:

1.    设置 rollover 索引。

2.    创建 ISM 策略。

3.    将策略附加到索引。

4.    添加模板。

将策略附加到索引后,索引开始初始化,然后转换为不同的状态,直到 rollover 操作完成。有关 rollover 操作的更多信息,请参阅 Open Distro for OpenSearch 网站上的 rollover

解决方法

设置 rollover 索引

创建索引格式与索引模式匹配的索引和别名:

^.*-\d+$

重要提示:确保正确配置 rollover 别名。否则,您会收到错误信息。

在以下示例中,创建了“test-index-000001”,并填充了多个文档。因为此示例使用 rollover 索引,因此索引格式必须与模式匹配。

PUT test-index-000001/_doc/1
{
    "user": "testuser",
    "post_date": "2020-05-08T14:12:12",
    "message": "ISM testing"
}

rollover 索引需要一个指向最新索引的别名。这意味着您必须使用以下查询创建别名(“test-index”):

POST /_aliases
{
     "actions": [{
          "add": {
               "index": "test-index-000001",
               "alias": "test-index"
          }
     }]
}

注意:如果 rollover 操作包含在 ISM 策略中,则必须包含 rollover 别名。有关更多信息,请参阅为什么我的 ISM 策略中的 rollover 索引操作在 Amazon OpenSearch Service 中总是失败?

创建 ISM 策略

在 OpenSearch 控制面板中,选择 Index Management(索引管理)选项卡,然后为 rollover 操作创建一个 ISM 策略。

例如:

{
     "policy": {
          "policy_id": "Roll_over_policy",
          "description": "A test policy. DO NOT USE FOR PRODUCTION!",
          "schema_version": 1,
          "error_notification": null,
          "default_state": "hot",
          "states": [{
                    "name": "hot",
                    "actions": [{
                         "rollover": {
                              "min_size": "10mb"
                         }
                    }],
                    "transitions": [{
                         "state_name": "warm"
                    }]
               },
               {
                    "name": "warm",
                    "actions": [{
                         "replica_count": {
                              "number_of_replicas": 2
                         }
                    }],
                    "transitions": []
               }
          ]
     }
}

在此 ISM 策略中,有两种已定义的状态:"hot" 和 "warm"。 默认情况下,您的索引处于 "hot" 状态。一旦索引大小达到 10MB,索引就会立即进入“warm”状态,并创建一个新的 rollover 索引。在“warm”状态下,您可以对索引执行各种操作,例如将副本计数更改为 2 或执行 force_merge 操作。

将策略附加到索引

要将 ISM 策略附加到索引,请执行以下步骤:

1.    从 OpenSearch Service 控制台打开 OpenSearch 控制面板。

2.    选择 Index Management(索引管理)选项卡。

3.    选择要将 ISM 策略附加到的索引(例如:"test-index-000001")。

4.    选择 Apply policy(应用策略)。

5.    (可选)如果您的策略指定了需要别名的任何操作,请提供别名,然后选择 Apply(应用)。您的索引在 Managed Indices(管理索引)列表下显示。

添加模板

将策略附加到特定索引(例如“test-index-000002”),该索引作为 ISM 策略的结果而创建。借助此附加,在满足所需条件(例如索引大小)后,索引也将翻转。

您可以像这样创建和使用 ISM 模板

PUT _plugins/_ism/policies/test_policy
{
     "policy": {
          "description": "A test policy. DO NOT USE FOR PRODUCTION!",
          "last_updated_time": 1642027350875,
          "schema_version": 1,
          "error_notification": null,
          "default_state": "hot",
          "states": [{
                    "name": "hot",
                    "actions": [{
                         "rollover": {
                              "min_size": "10mb"
                         }
                    }],
                    "transitions": [{
                         "state_name": "warm"
                    }]
               },
               {
                    "name": "warm",
                    "actions": [{
                         "replica_count": {
                              "number_of_replicas": 2
                         }
                    }],
                    "transitions": []
               }
          ],
          "ism_template": {
               "index_patterns": [
                    "test*"
               ],
               "priority": 100
          }
     }
}

在此示例中,解释 API 会验证您创建的“test_policy”模板是否已附加到新创建的索引:

GET _plugins/_ism/explain/test-index-000002
{
     "test-index-000002": {
          "index.plugins.index_state_management.policy_id": "test_policy",
          "index.opendistro.index_state_management.policy_id": "test_policy",
          "index": "test-index-000002",
          "index_uuid": "CZrQ-RzRS8SmiWIuyqFmVg",
          "policy_id": "test_policy",
          "enabled": true
     },
     "total_managed_indices": 1
}

注意:此索引也可以在 OpenSearch 控制面板 Index Management(索引管理)选项卡中的 Managed Indices(托管索引)下填充。

ISM 策略状态

当将 ISM 策略附加到索引时,索引进入“Initializing”(初始化)状态。在“Initializing”(初始化)状态下,索引会进入策略中定义的“Default”(默认)状态。此“Initializing”(初始化)操作以及每个后续操作可能需要 30 到 48 分钟。ISM 利用这段时间执行策略操作,然后检查所有条件并将索引转换为不同的状态。此外,还添加了 0-60% 的随机抖动,以确保所有索引不会同时出现大量活动。

注意:对于 rollover 操作,索引滚动更新后,索引变为“complete”,转换为“warm”状态,并且更新副本数量。

如果您使用的是 ISM 策略,但索引没有正确迁移,请检查 ISM 的状态。

要检查特定索引的迁移状态,请使用以下语法:

GET _ultrawarm/migration/<put_index_name_here>/_status

要获取所有索引的摘要迁移,请使用以下语法:

GET _ultrawarm/migration/_status?

这篇文章对您有帮助吗?


您是否需要账单或技术支持?