인덱스를 삭제하거나 Amazon Elasticsearch Service 클러스터를 업그레이드할 수 없는 이유는 무엇입니까?

최종 업데이트 날짜: 2021년 3월 25일

인덱스를 삭제하거나 Amazon ES(Amazon Elasticsearch Service) 클러스터를 업그레이드할 수 없습니다. 이유가 무엇인가요?

간략한 설명

인덱스를 삭제하거나 Elasticsearch 클러스터를 업그레이드하려고 하면 다음과 같은 이유로 변경 작업이 실패할 수 있습니다.

  • 스냅샷 작업이 이미 진행 중입니다.
  • 진행 중인 스냅샷 작업이 멈춘 상태입니다.
  • 진행 중인 스냅샷 작업의 클러스터가 빨간색 상태입니다.
  • 스냅샷 작업이 시간 초과되거나 실패합니다.

Amazon ES 업그레이드 실패에 대한 자세한 내용은 업그레이드 문제 해결을 참조하세요. Elasticsearch 클러스터의 빨간색 상태에 대한 자세한 내용은 빨간색 클러스터 상태를 참조하세요.

해결 방법

스냅샷 작업이 이미 진행 중인 경우

스냅샷 작업이 진행 중인 동안 다음 오류 메시지 중 하나가 발생할 수 있습니다.

  • "이전 스냅샷 작업이 아직 완료되지 않음"(클러스터 업그레이드 중)
  • "스냅샷 중인 인덱스를 삭제할 수 없음"(인덱스를 삭제하는 동안)

오류가 발생한 경우 다음을 시도해 보세요.

1.    암호화된 도메인의 경우 다음 구문을 사용하여 자동 스냅샷 생성 작업이 진행 중인지 확인합니다.

curl -X GET  'https://es_endpoint/_snapshot/cs-automated-enc/_status

2.    암호화되지 않은 도메인의 경우 다음 구문을 사용하여 자동 스냅샷 생성 작업이 진행 중인지 확인합니다.

curl -X GET 'https://es_endpoint/_snapshot/cs-automated/_status'

실행 중인 스냅샷 작업이 없는 경우 다음 출력이 표시됩니다.

{  "snapshots" : [ ]}

빈 괄호는 인덱스를 안전하게 삭제할 수 있는지 또는 업그레이드를 수행할 수 있는지를 나타냅니다. 스냅샷 작업이 진행 중인지 아닌지를 Amazon ES가 확인할 수 없는 경우 작업이 실패할 수 있습니다.

진행 중인 스냅샷 작업이 멈춘 경우

1.    다음 명령 구문을 사용하여 시간별 스냅샷 생성 작업의 시작 및 종료 시간을 확인합니다.

curl -X GET  'https://es_endpoint/_cat/snapshots/cs-automated?v&s=id'

2.    awk 명령에 파이프된 cURL 출력을 사용하여 시작 시간을 인쇄합니다.

curl -X GET  'https://es_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.    Amazon ES 업그레이드 자격을 확인합니다.

중요: 스냅샷 작업이 완료될 때까지 업그레이드 자격 확인을 실행하지 마세요.

스냅샷 상태 API를 사용하여 스냅샷 작업이 완료되었는지 확인합니다. 스냅샷 상태 API는 스냅샷이 캡처될 때 빈 세트를 반환합니다. 현재 진행 중 상태이고 한동안 이 상태가 변경되지 않을 경우에는 스냅샷 작업이 멈춘 것일 수 있습니다. 이는 다른 스냅샷이 생성되지 않는 원인이 될 수 있는 중단된 스냅샷 작업에도 동일하게 적용됩니다. 클러스터가 빨간색 상태이거나 쓰기 차단이 있는 경우 상태 또는 차단을 지워서 실패를 해결합니다.

참고: 스냅샷의 데이터는 구성 변경을 수행한 후 변경될 수 있습니다. 따라서 예약된 작업에 스냅샷을 사용하지 마세요.

진행 중인 스냅샷 작업의 클러스터가 빨간색 상태인 경우

1.    도메인에 등록된 리포지토리 이름만 나열하려면 다음 구문을 사용합니다.

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

2.    도메인에 등록된 리포지토리 이름, 유형 및 기타 설정을 나열하려면 다음 구문을 사용합니다.

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

3.    cs-automated 또는 cs-automated-enc 리포지토리를 제외한 각 리포지토리의 스냅샷을 나열할 수 있는지 확인합니다. 리포지토리가 여러 개인 경우 다음과 같은 bash 스크립트를 사용합니다.

#!/bin/bash
repos=$(curl -s https://es_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://es_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 S3(Amazon Simple Storage) 버킷이 이미 삭제되고 스냅샷 리포지토리로 등록되었음을 나타냅니다.

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.    Amazon ES에서 리포지토리를 삭제합니다.

curl -XDELETE "https://es_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://es_endpoint/_cluster/health?pretty"

클러스터의 상태가 빨간색이면 빨간색 클러스터 상태의 근본 원인을 먼저 식별하고 해결합니다. Amazon ES가 샤드를 재할당하거나 초기화하는 중이면 프로세스가 완료될 때까지 기다린 후 액세스 정책을 구성합니다. 샤드 재할당은 클러스터의 컴퓨팅 리소스에 상당한 부담을 줄 수 있다는 점을 참고하세요. 빨간색 클러스터 문제 해결에 대한 자세한 내용은 빨간색 클러스터 상태를 참조하십시오.