インデックスを削除したり、Amazon OpenSearch Service クラスターをアップグレードしたりできないのはなぜですか?
最終更新日: 2021 年 8 月 5 日
インデックスを削除したり、Amazon OpenSearch Service クラスターをアップグレードしたりできません。この原因は何でしょうか?
簡単な説明
インデックスを削除したり、OpenSearch Service クラスターをアップグレードしたりしようとすると、変更が次の理由で失敗することがあります。
- スナップショットがすでに進行中である。
- 進行中のスナップショットがスタックしている。
- 進行中のスナップショットに、赤色のステータスのクラスターがある。
- スナップショットのタイムアウトまたは失敗。
OpenSearch Service のアップグレードの失敗の詳細については、アップグレードのトラブルシューティング を参照してください。OpenSearch Service クラスターの赤いヘルスステータスの詳細については、レッドクラスターのステータス を参照してください。
解決方法
スナップショットがすでに進行中である
スナップショットの実行中に、次のいずれかのエラーメッセージが表示されることがあります。
- 「以前のスナップショットのオペレーションがまだ完了していません」(クラスターのアップグレード中)
- 「スナップショットされているインデックスは削除できません」(インデックスの削除中)
エラーが表示された場合は、次の操作を試してみてください。
1. 暗号化されたドメインの場合、次の構文を使用して、自動スナップショットが進行中かどうかを確認します。
curl -X GET 'https://domain-endpoint/_snapshot/cs-automated-enc/_status
2. 暗号化されていないドメインの場合、次の構文を使用して、自動スナップショットが進行中かどうかをチェックします。
curl -X GET 'https://domain-endpoint/_snapshot/cs-automated/_status'
実行中のスナップショットがない場合、次の出力が表示されます。
{ "snapshots" : [ ]}
空の括弧は、インデックスを安全に削除できるかどうか、またはアップグレードを実行できるかどうかを表しています。スナップショットが実行中かどうかを OpenSearch Service がチェックできない場合、オペレーションが失敗する可能性があります。
進行中のスナップショットがスタックする
1. 次のコマンド構文を使用して、時間単位のスナップショットの開始時刻と終了時刻を確認します。
curl -X GET 'https://domain-endpoint/_cat/snapshots/cs-automated?v&s=id'
2. awk コマンドにパイプ処理された cURL 出力を使用して、開始時刻を出力します。
curl -X GET 'https://domain-endpoint/_cat/snapshots/cs-automated?v&s=id' |awk -F" " ' { print $4 } '
出力は、1 時間あたりのスナップショットが発生した時刻を示します。例えば、次の出力は、各時間の約 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-automated または cs-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-automated および cs-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":n","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/_cat/snapshots/s3_repository
2. s3_repository を Amazon S3 バケットの名前に置き換えます。この構文で、現在のスナップショットの実行時間を確認します。実行時間が妥当であれば、スナップショットが完了するのを待ってから、再度スナップショットをとります。
注: スナップショットの実行時間は、インデックスのサイズやクラスターのリソース消費量に応じて長くなることがあります。
3. クラスターのヘルスステータスをチェックします。
curl -XGET "https://domain-endpoint/_cluster/health?pretty"
クラスターのヘルスステータスが赤色の場合、まずは赤色になっているクラスターのステータスの根本原因を特定し、対処します。OpenSearch Service がシャードを再配置または初期化する場合は、プロセスが完了するのを待ってから、アクセスポリシーを設定します。シャードの再割り当てにより、クラスターのコンピューティングリソースが大幅に増加する可能性があることに注意してください。赤色のクラスターのトラブルシューティングの詳細については、「赤のクラスターステータス」を参照してください。
Amazon OpenSearch Service は、Amazon Elasticsearch Service の後継サービスです。