為什麼無法刪除索引或升級 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.    通過 awk 命令管道使用 cURL 輸出列印開始時間:

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 來檢查快照是否已完成。擷取快照時,快照狀態 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.    以 Amazon S3 儲存貯體的名稱替換 s3_repository。此語法可以檢查當前快照的運行時間。如果持續的時間看起來合理,請等候快照完成,然後嘗試再次建立快照。

**注意:**您的快照持續時間可能較長,具體取決於索引的大小或叢集的資源消耗量。

3.    檢查叢集的運作狀態:

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

如果叢集的運作狀態為紅色,請先找出並解決造成紅色叢集狀態的根本原因。如果 OpenSearch Service 正在重新放置或初始化碎片,請等待程序完成後再設定任何存取政策。請注意,重新分配碎片可能會嚴重限制叢集的計算資源。如需有關紅色叢集疑難排解的詳細資訊,請參閱紅色叢集狀態


相關資訊

如何改善 Amazon OpenSearch Service 叢集的索引效能?

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