跳至内容

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

4 分钟阅读
0

我的 Amazon OpenSearch Service 集群的存储空间不足。我想使用索引状态管理 (ISM) 来管理我的存储空间。

简短描述

要解决存储空间不足的问题,请使用 ISM 定义自定义管理策略并执行 rollover 操作,例如自动删除旧索引。当现有索引满足指定的条件时,rollover 操作会将目标滚动到新索引。ISM 会评估每种状态下索引的创建日期和时间,以确定何时启动关联操作。

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

解决方法

设置您的 rollover 索引

要在 OpenSearch Dashboards 中创建索引模式,请完成以下步骤:

  1. 打开 OpenSearch Service 控制台
  2. 访问 OpenSearch Dashboards。
    **注意:**您可以在 OpenSearch Service 控制台的域摘要中找到 OpenSearch Dashboards 的链接。
  3. 选择 Management(管理)。
  4. 选择 Index Patterns(索引模式),然后选择 Create index pattern(创建索引模式)。
  5. 创建索引格式与 ^.*-\d+$ 索引模式相匹配的索引和别名。
    **重要事项:**为防止出现错误,请确保正确配置 rollover 别名。

有关详细信息,请参阅 OpenSearch 网站上的 Index patterns(索引模式)

在 ISM 策略中包含 rollover 操作时,还必须包含 rollover 别名。有关详细信息,请参阅为什么我的 ISM 策略中的 rollover 索引操作在 OpenSearch Service 中一直失败?

以下示例创建了 test-index-000001,并在其中填充了多个文档。由于该示例使用的是目标滚动到的新索引,因此其索引格式必须与原索引的模式相匹配:

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

以下示例创建了指向新索引的 test-index 别名:

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

创建 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 策略定义了 hotwarm 状态。默认情况下,您的索引处于 hot 状态。当索引大小达到 10 MB 且 ISM 滚动到新索引时,索引将转换到 warm 状态。在 warm 状态下,您可以对索引执行不同的操作。例如,您可以将副本数量更改为两个,或执行 force_merge 操作。

几天后滚动以删除索引:

{  "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 策略定义了 hotdelete 状态。默认情况下,索引处于 hot 状态。在索引达到 10 MB 后,ISM 会滚动到新索引。然后,30 天后,该索引会转换到 delete 状态,且 ISM 会删除该索引。

有关更多示例策略,请参阅示例策略

将策略附加到索引

完成以下步骤:

  1. 打开 OpenSearch Service 控制台
  2. 通过 OpenSearch Service 控制台域摘要中的链接访问 OpenSearch Dashboards。
  3. 选择 Index Management(索引管理)选项卡。
  4. 选择要附加 ISM 策略的索引,例如:test-index-000001
    **注意:**您可以在 Policy Managed Indices(策略管理的索引)下找到您的索引。
  5. 选择 Apply policy(应用策略)。
  6. (可选)如果您的策略指定了需要别名的操作,请提供别名,然后选择 Apply(应用)。

您也可以使用以下 API 来附加 ISM 策略:

POST _plugins/_ism/add/index_name
{ "policy_id": "policy_name"}

**注意:**请将 index_name 替换为您的索引名称,将 policy_name 替换为您的策略名称。

有关详细信息,请参阅 OpenSearch 网站上的 Add policy(添加策略)

更新现有索引的策略

OpenSearch 中的 ISM 策略使用版本控制。更新策略后,新创建的索引会自动引用该策略的最新版本。但是,您在更新之前创建的索引会继续引用先前的版本。要将更新后的策略应用于现有索引,必须先从索引中删除旧策略,然后再重新应用更新后的版本。

要将您的 ISM 策略重新应用于现有索引,请完成以下步骤:

  1. 打开 OpenSearch Service 控制台
  2. 通过 OpenSearch Service 控制台域摘要中的链接访问 OpenSearch Dashboards。
  3. 选择 Index Management(索引管理)选项卡。
  4. Policy Managed Indices(策略管理的索引)部分中,选择 Change Policy(更改策略)。
  5. 选择要应用更改的索引,例如:test-index-000001
  6. 选择索引的当前状态。
  7. Choose New Policy(选择新策略)部分中,选择 Update policy name(更新策略名称)。
  8. (可选)要在更新策略后将索引更改为其他状态,请选择 Switch indices to the following state after the policy takes effect(在策略生效后将索引切换到以下状态)。然后,在下拉列表中选择状态。

您也可以使用以下 API 来更新 ISM 策略:

POST _plugins/_ism/change_policy/indexname
{ "policy_id": "policy_1"}

**注意:**请将 index_name 替换为您的索引名称,将 policy_1 替换为您的策略名称。

有关详细信息,请参阅 OpenSearch 网站上的 Update managed index policy(更新托管的索引策略)

添加模板以将策略附加到多个索引

要将策略附加到与索引模式匹配的多个索引,请创建并使用 ISM 模板

使用以下 API 调用创建策略:

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 网站上的 Explain index(Explain 索引)

**注意:**此索引还会填充在 OpenSearch Dashboards 的 Index Management(索引管理)选项卡的 Managed Indices(托管索引)部分中。

检查您的 ISM 策略状态

对于 rollover 操作,在索引滚动、转换到 warm 状态且副本数量更新之后,索引即完成。

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

要检查索引的迁移状态,请使用以下 API:

GET _ultrawarm/migration/index_name/_status

**注意:**请将 index_name 替换为要检查其状态的索引的名称。

要获取所有索引的迁移状态,请使用以下 API:

GET _ultrawarm/migration/_status?

**注意:**要将数据从热存储移至温存储或冷存储,请在配置 ISM 策略之前在域上启用热存储和冷存储。ISM 策略还必须显式包含 migration 操作,才能在存储层之间转换索引。如果不包含 migration 操作,则只有策略状态名称会更改。索引会继续留在热存储中。

配置热迁移操作:

{
        "name": "warm",
        "actions": [{
          "warm_migration": {},
          "retry": {
            "count": 5,
            "delay": "1h"
          }

配置冷迁移操作:

{
        "name": "cold",
        "actions": [{
            "cold_migration": {
              "timestamp_field": "<your timestamp field>"
            }
          }
AWS 官方已更新 9 个月前