Amazon Elasticsearch Service 클러스터를 업그레이드하는 동안 발생하는 "이전 스냅샷 작업이 아직 완료되지 않음" 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 10일

Amazon Elasticsearch Service(Amazon ES) 클러스터를 업그레이드하려고 하면 "이전 스냅샷 작업이 아직 완료되지 않음" 오류 메시지가 표시되면서 작업이 실패합니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Amazon ES 클러스터를 업그레이드할 때 다음과 같은 이유로 클러스터가 실패할 수 있습니다.

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

Amazon ES 업그레이드 실패에 대한 자세한 내용은 업그레이드 문제 해결을 참조하십시오.

​해결 방법

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

참고: "이전 스냅샷 작업이 아직 완료되지 않음" 오류 메시지가 표시되는 경우, 이 오류는 스냅샷 작업이 이미 진행 중임을 나타냅니다.

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

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

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

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

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

{  "snapshots" : [ ]}

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

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

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

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

그런 다음 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

다음으로, Amazon ES 업그레이드 자격을 확인합니다. 스냅샷 상태 API를 사용하여 스냅샷 작업이 완료되었는지 확인합니다. 스냅샷 작업이 완료된 경우 API가 빈 세트를 반환합니다. 이 데이터는 구성을 변경하면 변경될 수 있으므로, 예약된 작업을 계획하는 데 스냅샷을 사용할 수 없습니다.

현재 진행 중 상태이고 한동안 이 상태가 변경되지 않을 경우 스냅샷 작업이 멈춘 것일 수 있습니다. 이는 다른 스냅샷이 생성되지 않는 원인이 될 수 있는 중단된 스냅샷 작업에도 동일하게 적용됩니다. 클러스터가 빨간색 상태이거나 쓰기 블록이 있는 경우 상태 또는 블록을 지워서 실패를 해결합니다.

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

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

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

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

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

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

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 리포지토리의 응답하지 않는 스냅샷은 수동으로 삭제할 수 없습니다.

/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}

수동 스냅샷 리포지토리가 Amazon S3 버킷에서 삭제되었는지 확인합니다.

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

참고: snapshot-manual-repo를 버킷 이름으로 바꾸십시오.

다음으로, Amazon ES에서 리포지토리를 삭제합니다.

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

스냅샷 시간 초과 또는 실패

수동 스냅샷을 생성할 수 있는지 확인합니다. 수동 스냅샷을 생성할 수 없음 오류가 발생하면 _cat/snapshots API를 호출합니다.

curl -XGET/_cat/snapshots/s3_repository

참고: s3_repository를 S3 버킷 이름으로 바꾸십시오.

위의 구문은 현재 스냅샷이 얼마나 오래 실행되었는지 확인합니다. 지속 시간이 적절하다고 생각되면 완료될 때까지 기다린 다음 다시 시도합니다.

다음으로, 클러스터의 상태를 확인합니다.

curl -XGET "https://es_endpoint/_cluster/health?pretty"

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