Amazon Elasticsearch Service에서 내 ISM 정책의 롤오버 인덱스 작업이 계속 실패하는 이유는 무엇입니까?

최종 업데이트 날짜: 2021년 7월 8일

ISM(인덱스 상태 관리)을 사용하여 Amazon Elasticsearch Service(Amazon ES) 클러스터에서 내 인덱스를 롤오버하고 싶습니다. 그러나 인덱스가 롤오버되지 않아 오류가 발생합니다. 왜 이런 현상이 발생하며, 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

“인덱스 롤오버 실패(Failed to rollover index)” 오류가 발생한 경우 다음 이유 중 하나로 인해 롤오버 작업이 실패했을 수 있습니다.

  • 롤오버 대상이 없습니다.
  • 롤오버 별칭이 없습니다.
  • 인덱스 이름이 인덱스 패턴과 일치하지 않습니다.
  • 롤오버 별칭은 인덱스 템플릿에서 중복된 별칭을 가리킵니다.
  • Amazon ES 클러스터의 최대 리소스 사용률

이 문제를 해결하려면 explain API를 사용하여 오류의 원인을 식별합니다. 그런 다음 ISM 정책을 확인합니다. ISM 정책에서 롤오버 작업을 설정하는 방법에 대한 자세한 내용은 Amazon Elasticsearch Service에서 ISM(인덱스 상태 관리)을 사용하여 부족한 스토리지 공간을 관리하려면 어떻게 합니까?를 참조하세요.

해결 방법

explain API 사용

“인덱스를 롤오버하지 못했습니다(Failed to rollover index)” 오류의 근본 원인을 확인하려면 explain API를 사용하세요.

GET _opendistro/_ism/explain/logs-000001?pretty

다음은 explain API의 출력 예입니다.

{
  "logs-000001" : {
    "index.opendistro.index_state_management.policy_id" : "rollover-workflow",
    "index" : "logs-000001",
    "index_uuid" : "JUWl2CSES2mWYXqpJJ8qlA",
    "policy_id" : "rollover-workflow",
    "policy_seq_no" : 2,
    "policy_primary_term" : 1,
    "rolled_over" : false,
    "state" : {
      "name" : "open",
      "start_time" : 1614738037066
    },
    "action" : {
      "name" : "rollover",
      "start_time" : 1614739372091,
      "index" : 0,
      "failed" : true,
      "consumed_retries" : 0,
      "last_retry_time" : 0
    },
    "retry_info" : {
      "failed" : false,
      "consumed_retries" : 0
    },
    "info" : {
      "cause" : "rollover target [rolling-indices] does not exist",
      "message" : "Failed to rollover index [index=logs-000001]"
    }
  }
}

이 예제 출력은 대상 롤오버 별칭(롤링 인덱스)이 없기 때문에 인덱스가 롤오버에 실패했음을 나타냅니다.

롤오버 대상이 없습니다.

explain API가 원인을 “롤오버 대상 [롤링 인덱스]가 존재하지 않음(rollover target [rolling-indices] does not exist)”으로 반환하면 인덱스가 롤오버 별칭으로 부트 스트랩되었는지 확인하세요.

GET _cat/aliases

출력에는 클러스터의 현재 별칭 및 별칭과 연관된 인덱스가 모두 나열됩니다. ISM에서 롤오버 대상이 존재하지 않는다고 표시되면 롤오버 별칭 이름과 실패한 인덱스 연결이 누락된 것입니다.

실패한 인덱스 연결 문제를 해결하려면 롤오버 별칭을 인덱스에 첨부합니다.

POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "logs-000001", "alias" : "my-data" } }
    ]
}

롤오버 별칭을 연결한 후 Amazon ES의 관리형 인덱스에서 롤오버 작업을 다시 시도합니다.

POST _opendistro/_ism/retry/logs-000001

자세한 내용은 Open Distro for Elasticsearch 웹 사이트에서 실패한 인덱스 재시도를 참조하세요.

실패한 인덱스를 다시 시도하면 “재시도 시도 중(Attempting to retry)” 상태 메시지가 나타날 수 있습니다. Amazon ES가 재시도를 시도하는 경우 다음 ISM 주기가 실행될 때까지 기다립니다. ISM 사이클은 30~48분마다 실행됩니다. 롤오버 작업이 성공하면 “인덱스가 성공적으로 롤오버되었습니다.”라는 메시지가 나타납니다.

롤오버 별칭이 누락되었습니다.

explain API 출력에서 롤오버 실패의 원인을 누락된 롤오버 별칭으로 식별하는 경우 실패한 인덱스의 설정을 확인합니다.

GET <failed-index-name>/_settings

index.opendistro.index_state_management.rollover_alias 설정이 누락된 경우 수동으로 인덱스에 설정을 추가하세요.

PUT /<failed-index-name>/_settings
{
  "index.opendistro.index_state_management.rollover_alias":"<rollover-alias>"
}

retry failed index API를 사용하여 실패한 인덱스에서 롤오버 작업을 다시 시도합니다. 롤오버 작업 재시도 중에 정책 템플릿을 업데이트합니다.

PUT _template/<template-name>

롤오버 별칭이 새로 생성된 인덱스에 적용되도록 기존 정책 템플릿과 동일한 설정을 사용해야 합니다. 예:

PUT _template/<existing-template>
{
  "index_patterns": ["<index-pattern*>"], 
  "settings": {
    "index.opendistro.index_state_management.policy_id": "<policy_id>",
    "index.opendistro.index_state_management.rollover_alias":"<rollover-alias>"
  }
}

인덱스 이름이 인덱스 패턴과 일치하지 않습니다.

ISM 정책에 인덱스 이름이 인덱스 패턴과 일치하지 않아 롤오버 작업이 실패했다고 표시되면 실패한 인덱스의 이름을 확인합니다. 성공적인 롤오버를 위해서는 인덱스 이름이 다음 정규식 패턴과 일치해야 합니다.

`^.*-\\d+$`

이 정규식 패턴은 인덱스 이름 뒤에 하이픈(-)과 하나 이상의 숫자를 포함해야 함을 나타냅니다. 인덱스 이름이 이 패턴을 따르지 않고 첫 번째 인덱스에 데이터가 기록된 경우 데이터를 다시 인덱싱하는 것이 좋습니다. 데이터를 다시 인덱싱할 때는 새 인덱스에 올바른 이름을 사용합니다. 예:

POST _reindex
{
  "source": {
    "index": "<failed-index>"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

reindex data API가 실행되는 동안 실패한 인덱스에서 롤오버 별칭을 분리합니다. 그런 다음 데이터 원본이 계속해서 수신 데이터를 새 인덱스에 쓸 수 있도록 롤오버 별칭을 새 인덱스에 추가합니다.

예:

POST /_aliases
{
    "actions" : [
        { "remove" : { "index" : "<failed-index>", "alias" : "<rollover-alias>" } },
        { "add" : { "index" : "my-new-index-000001", "alias" : "<rollover-alias>" } }
    ]
}

다음 API 호출을 사용하여 ISM 정책을 새 인덱스에 수동으로 연결합니다.

POST _opendistro/_ism/add/my-new-index-* { "policy_id": "<policy_id>" }

새 인덱스 패턴 이름을 반영하도록 기존 템플릿을 업데이트합니다.

PUT _template/<existing temaplate>

참고: ISM 정책 및 롤오버 별칭은 동일한 인덱스 패턴으로 생성된 연속 인덱스를 반영해야 합니다.

롤오버 별칭이 인덱스 템플릿에서 중복된 별칭을 가리키고 있습니다.

explain API에서 롤오버 별칭이 중복된 별칭을 가리키고 있기 때문에 인덱스 롤오버가 실패했음을 나타내는 경우 인덱스 템플릿 설정을 확인하세요.

GET _template/<template-name>

템플릿에 동일한 인덱스를 가리키는 다른 별칭이 포함된 추가 별칭 섹션이 있는지 확인합니다.

"index_patterns": ["my-index*"],
 "settings": {
        "index.opendistro.index_state_management.policy_id": "rollover-policy",
        "index.opendistro.index_state_management.rollover_alias": "rollover-alias"
        },
 "aliases": {
        "another_alias": {
            "is_write_index": true
        }
    }

별칭이 여러 개일 경우 롤오버에 실패하기 때문에 추가 별칭이 있으면 롤오버 작업이 실패하는 이유가 확인됩니다. 이 오류를 해결하려면 별칭을 지정하지 않고 템플릿 설정을 업데이트합니다.

PUT _template/<template-name>

그런 다음 실패한 인덱스에서 retry API를 수행합니다.

POST _opendistro/_ism/retry/my-index-000001

중요: 별칭이 여러 인덱스를 가리키는 경우 하나의 인덱스만 쓰기 액세스 권한을 사용하도록 설정해야 합니다. rollover API는 롤오버 별칭이 가리키는 인덱스에 대한 쓰기 액세스를 자동으로 활성화합니다. 즉, ISM에서 롤오버 작업을 수행할 때 “is_write_index” 설정에 대한 별칭을 지정할 필요가 없습니다.

Amazon ES 클러스터의 최대 리소스 사용률

클러스터의 최대 리소스 사용률은 회로 차단기 예외 또는 스토리지 공간 부족으로 인해 발생할 수 있습니다.

회로 차단기 예외

explain API가 회로 차단기 예외를 반환하는 경우 rollover API가 호출될 때 클러스터에 높은 JVM 메모리 압력이 발생했을 가능성이 높습니다. JVM 메모리 압력 문제를 해결하려면 내 Amazon Elasticsearch Service 클러스터의 높은 JVM 메모리 압력 문제를 해결하려면 어떻게 해야 합니까?를 참조하세요.

JVM 메모리 압력이 75% 이하로 떨어지면 다음 API 호출을 사용하여 실패한 인덱스에서 활동을 다시 시도할 수 있습니다.

POST _opendistro/_ism/retry/<failed-index-name>

참고: 인덱스 패턴(*)을 사용하여 실패한 여러 인덱스에서 활동을 다시 시도할 수 있습니다.

클러스터에서 자주 JVM 스파이크가 발생하는 경우 롤오버 작업에 대한 다음 재시도 블록으로 ISM 정책을 업데이트할 수도 있습니다.

"actions": {
    "retry": {
        "count": 3,
        "backoff": "exponential",
        "delay": "10m"
    }
}

ISM 정책에서 각 작업에는 count 파라미터를 기반으로 하는 자동 재시도가 있습니다. 이전 작업이 실패하면 “delay” 파라미터를 확인하여 ISM이 작업을 다시 시도할 때까지 기다려야 하는 시간을 확인합니다.

스토리지 공간 부족

클러스터의 스토리지 공간이 부족한 경우 Amazon ES는 클러스터에서 쓰기 블록을 트리거하여 모든 쓰기 작업이 ClusterBlockException을 반환합니다. ClusterIndexWritesBlocked 지표 값은 클러스터가 요청을 차단하고 있음을 나타내는 ‘1’ 값을 표시합니다. 따라서 새 인덱스를 만들려는 시도는 실패합니다. explain API 호출은 클러스터가 스토리지 공간을 벗어났음을 나타내는 403 IndexCreateBlockException도 반환합니다. 클러스터 블록 예외 문제를 해결하려면 Amazon Elasticsearch Service에서 403 ‘index_create_block_exception’ 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

ClusterIndexWritesBlocked 지표가 ‘0’으로 돌아간 후 실패한 인덱스에 대해 ISM 작업을 다시 시도합니다. JVM 메모리 압력이 30분 이상 92% 를 초과하면 쓰기 블록이 트리거될 수 있습니다. 쓰기 블록이 발생하면 대신 JVM 메모리 압력 문제를 해결해야 합니다. JVM 메모리 압력 문제를 해결하는 방법에 대한 자세한 내용은 Amazon Elasticsearch Service 클러스터에서 높은 JVM 메모리 압력을 해결하려면 어떻게 해야 합니까?를 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?