为什么我无法删除索引或升级我的 Amazon OpenSearch Service 集群?

2 分钟阅读
0

我无法删除索引或升级我的 Amazon OpenSearch Service 集群。为什么会发生这种情况?

简短描述

如果您尝试删除索引或升级 OpenSearch Service 集群,此更改可能会因以下原因而失败:

  • 快照已在运行。
  • 正在运行的快照进度停滞。
  • 正在运行的快照有处于红色状态的集群。
  • 快照超时或失败。

有关 OpenSearch Service 升级失败的更多信息,请参阅排查升级问题。有关 OpenSearch Service 集群的红色运行状态的更多信息,请参阅红色集群状态

解决方法

快照已在运行

在快照运行过程中,您可能会遇到以下任一错误消息:

  • “之前的快照操作尚未完成”(集群升级期间)
  • “无法删除正在拍摄快照的索引”(删除索引时)

如果您遇到错误,请尝试以下操作:

1.    对于加密的域,请使用以下语法检查自动快照是否正在运行:

curl -XGET "https://domain-endpoint/_snapshot/cs-automated-enc/_status"

2.    对于未加密的域,请使用以下语法检查自动快照是否正在运行中:

curl -XGET "https://domain-endpoint/_snapshot/cs-automated/_status"

如果没有正在运行的快照,则将显示以下输出:

{
    "snapshots": []
}

空括号会指示您是否可以安全地删除索引或执行升级。如果 OpenSearch Service 无法检查快照是否正在运行中,则操作可能会失败。

正在运行的快照进度停滞

1.    使用以下命令语法检查每小时快照的开始和结束时间:

curl -XGET "https://domain-endpoint/_cat/snapshots/cs-automated?v&s=id"

2.    使用一个 cURL 输出管道将开始时间打印到 awk 命令:

curl -XGET "https://domain-endpoint/_cat/snapshots/cs-automated?v&s=id" | awk -F" " ' { print $4 } '

输出会指示每小时快照发生的时间。例如,以下输出表示输出大约在每小时的第 52 分钟运行:

22:51:11
23:51:18
00:51:19
01:51:14
02:51:16
03:51:18
04:51:16
05:51:11

3.    检查 OpenSearch Service 升级资格。

重要提示:除非快照已完成,否则不要运行升级资格检查。

使用快照状态 API 检查快照是否已完成。捕获快照时,snapshot status API 将返回一个空集。如果快照的当前状态为正在运行中,并且一段时间内没有变化,则快照可能处于卡滞状态。这同样适用于已停用的快照,可以防止拍摄其他快照。如果集群处于红色状态或存在写入数据块,请清除该状态或写块以解决此问题。

注意:在进行配置更改后,快照的数据可能会发生变化。因此,不要将快照用于已计划的作业。

正在运行的快照有处于红色状态的集群

1.    要仅列出注册到您的域的存储库名称,请使用以下语法:

curl -XGET "http://domain-endpoint/_cat/repositories?v&h=id"

2.    要列出注册到您的域的存储库名称、类型和其他设置,请使用以下语法:

curl -XGET "http://domain-endpoint/_snapshot?pretty"
curl -XGET "https://domain-endpoint/_cluster/state/metadata"

3.    检查您是否可以列出每个存储库中的快照,不包括 cs-automatedcs-automated-enc 存储库。如果您有多个存储库,请使用与以下类似的 bash 脚本:

#!/bin/bash
repos=$(curl -s https://domain-endpoint/_cat/repositories 2>&1 |grep  -v "cs-automated" | awk '{print $1}')

for i in $repos; do
echo "Snapshots in ... :" $i >>/tmp/snapshot
`curl -s -XGET https://domain-endpoint/_cat/snapshots/$i >> /tmp/snapshot`
\echo "done..."
done

重要提示cs-automatedcs-automated-enc 存储库中处于卡滞状态的快照无法手动删除。

4.    要查看 /tmp/snapshot 文件夹中的输出,请使用以下语法:

cat /tmp/snapshot

该命令将返回与以下类似的响应:

Snapshots in ... : snapshot-manual-repo
axa_snapshot-1557497454881 SUCCESS 1557639400 05:36:40 1557639405 05:36:45  4.6s  7 31 0 31
2019-05-15                 SUCCESS 1560503610 09:13:30 1560503622 09:13:42 11.8s  4 16 0 16
epoch_test                 SUCCESS 1569151317 11:21:57 1569151335 11:22:15 18.1s 15 56 0 56

返回的错误消息表示 Amazon Simple Storage (Amazon S3) 存储桶已被删除并被注册为快照存储库:

Snapshots in ... : snapshot-manual-repo
{
    "error": {
        "root_cause": [{
            "type": "repository_exception",
            "reason": "[snapshot-manual-repo] could not read repository data from index blob"
        }],
        "type": "repository_exception",
        "reason": "[snapshot-manual-repo] could not read repository data from index blob",
        "caused_by": {
            "type": "i_o_exception",
            "reason": "Exception when listing blobs by prefix [index-]",
            "caused_by": {
                "type": "a_w_s_security_token_service_exception",
                "reason": "a_w_s_security_token_service_exception: User: arn:aws:sts::999999999999:assumed-role/cp-sts-grant-role/swift-us-east-1-prod-666666666666 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::666666666666:policy/my-manual-es-snapshot-creator-policy (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: 6b9374fx-11xy-11yz-ff66-918z9bb08193)"
            }
        }
    },
    "status": 500
}

5.    验证手动快照存储库是否已从 Amazon S3 存储桶中删除:

aws s3 ls | grep -i "snapshot-manual-repo"

注意:请将 snapshot-manual-repo 替换为您的存储桶的名称。

6.    从集群中删除存储库:

curl -XDELETE "https://domain-endpoint/_snapshot/snapshot-example-manual-repo"

快照超时或失败

如果您遇到快照超时或失败错误,请执行以下步骤:

1.    检查是否可以手动拍摄快照。如果出现无法拍摄手动快照错误,请调用 _cat/snapshots API:

curl -XGET "https://domain-endpoint/_cat/snapshots/s3_repository"

2.    请将 s3_repository 替换为您的 Amazon S3 存储桶的名称。此语法用于检查当前快照已经运行了多长时间。如果持续时间看起来合理,请等待快照完成,然后尝试再次拍摄快照。

**注意:**您的快照持续时间可能会更长,具体取决于索引的大小或集群的资源使用量。

3.    检查集群的运行状况:

curl -XGET "https://domain-endpoint/_cluster/health?pretty"

如果集群的运行状况为红色,则首先确定并解决集群为红色状态的根本原因。如果 OpenSearch Service 正在重新分配或初始化分片,则等待该过程完成后再配置任何访问策略。请注意,重新分配分片可能显著制约集群的计算资源。有关排查红色状态集群问题的更多信息,请参阅红色集群状态


相关信息

如何提高我的 Amazon OpenSearch Service 集群上的索引性能?

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