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

3 分钟阅读
0

我的 Amazon OpenSearch Service 集群的存储空间不足。

简短描述

索引状态管理 (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"
      }
    }
  ]
}

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

创建 ISM 策略

在 OpenSearch Dashboards 中,选择索引管理选项卡,然后为 rollover 操作创建 ISM 策略。

例如:

翻转到 warm 状态

{
  "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”状态。一旦索引大小达到 10 MB,并且创建了新的 rollover 索引,索引就会转换到“warm”状态。在“warm”状态下,您可以对索引执行各种操作,例如将副本数更改为 2 或执行 force_merge 操作。

几天后翻转到 delete

{
  "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": "delete",
            "conditions": {
              "min_index_age": "30d"
            }
          }
        ]
      },
      {
        "name": "delete",
        "actions": [
          {
            "delete": {}
          }
        ],
        "transitions": []
      }
    ]
  }
}

在此 ISM 策略中,有两种已定义的状态:“hot”和“delete”。默认情况下,索引处于“hot”状态。索引达到 10 MB 后,将创建新的 rollover 索引。然后,30 天后,索引转换到“delete”状态,并且索引会被删除。

将策略附加到索引

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

1.从 OpenSearch Service 控制台打开 OpenSearch Dashboards。您可以在 OpenSearch Service 控制台的域摘要中找到 OpenSearch Dashboards 的链接。

2.选择索引管理选项卡。

3.选择要附加 ISM 策略的目标索引(例如:“test-index-000001”)。

4.选择应用策略

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

更新现有索引的策略

**注意:**现有策略中的任何更新都不会自动应用于现有索引,必须将相同策略重新应用到索引。

要将您的 ISM 策略重新应用到任何现有索引,请执行以下步骤:

1.从 OpenSearch Service 控制台打开 OpenSearch Dashboards。

2.选择“索引管理”选项卡。

3.从“策略管理的索引”部分,选择更改策略

4.选择要应用更改的目标索引(例如:“test-index-000001”)。

5.选择索引的当前状态。

6.从选择新策略部分中,选择更新策略名称

7.(可选)如果要在策略更新后将索引切换到其他状态,请选择在策略生效后将索引切换到以下状态。然后,从下拉列表中选择状态。

添加模板

将策略附加到特定索引,例如“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
    }
  }
}

在此示例中,explain 索引 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 Dashboards 索引管理选项卡的托管索引部分下。

ISM 策略状态

将 ISM 策略附加到索引时,索引会进入“正在初始化”状态。从“正在初始化”状态开始,索引会进入策略中定义的“默认”状态。此“正在初始化”操作以及每个后续操作可能需要 30 到 48 分钟。ISM 利用这段时间执行策略操作,然后检查是否存在任何情况,并将索引转换到不同状态。此外,还添加了 0-60% 的随机抖动,以确保不会同时出现来自所有索引的活动激增。

**注意:**对于 rollover 操作,在索引翻转、转换到“warm”状态并且副本数量更新之后,索引会变为“complete”。

如果您使用的是 ISM 策略并且索引未正确迁移,请检查 ISM 的状态。

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

GET _ultrawarm/migration/<put_index_name_here>/_status

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

GET _ultrawarm/migration/_status?

相关信息

示例策略

AWS 官方
AWS 官方已更新 1 年前