ISM 정책의 롤오버 인덱스 작업이 OpenSearch 서비스에서 계속 실패하는 이유는 무엇인가요?

6분 분량
0

Index State Management(ISM)를 사용하여 Amazon OpenSearch Service 클러스터의 인덱스를 롤오버하려고 합니다. 하지만 인덱스가 롤오버되지 않아 오류가 발생합니다.

간략한 설명

다음과 같은 이유로 “롤오버 실패” 인덱스 오류가 발생할 수 있습니다.

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

이 문제를 해결하려면 설명 API를 사용하여 오류의 원인을 파악하세요. 그런 다음 ISM 정책을 확인하세요. 롤오버 작업 설정에 대한 자세한 내용은 OpenSearch Service에서 ISM을 사용하여 부족한 스토리지를 관리하려면 어떻게 해야 하나요?를 참조하세요.

참고: 다음 해결 방법은 OpenSearch API에만 적용됩니다. 레거시 Open Distro API에 대해서는 Open Distro 웹사이트의 ISM API를 참조하세요.

해결 방법

설명 API를 사용하여 원인 파악

“인덱스 롤오버 실패 오류”의 근본 원인을 확인하려면 설명 API를 사용하세요.

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

설명 API의 예시 출력:

{
     "logs-000001": {
          "index.plugins.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]"
          }
     }
}

이 예시 출력은 대상 롤오버 별칭인 rolling-indices가 없기 때문에 인덱스가 롤오버에 실패했다는 것을 보여줍니다.

롤오버 대상이 존재하지 않음

원인이 “롤오버 대상 [rolling-indices]가 존재하지 않음”인 경우 인덱스가 롤오버 별칭으로 부트스트랩되었는지 확인합니다.

GET _cat/aliases

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

실패한 인덱스 연결을 해결하려면 롤오버 별칭을 인덱스에 연결하세요.

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

롤오버 별칭을 첨부한 후 OpenSearch Service의 관리 인덱스에 대한 롤오버 작업을 다시 시도하세요.

POST _plugins/_ism/retry/logs-000001

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

실패한 인덱스를 재시도하면 “재시도 중” 상태 메시지가 표시될 수 있습니다. 다음 ISM 사이클이 실행될 때까지 기다리세요. ISM 사이클은 30~48분마다 실행됩니다. 롤오버 작업이 성공하면 다음 메시지가 나타납니다. “인덱스를 성공적으로 롤오버함”

롤오버 별칭이 없음

롤오버 실패의 원인이 누락된 롤오버 별칭인 경우 실패한 인덱스의 설정을 확인합니다.

GET <failed-index-name>/_settings

index.plugins.index_state_management.rollover_alias 설정이 누락된 것을 확인하면 설정을 인덱스에 수동으로 추가합니다.

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

실패한 인덱스 재시도 API를 사용하여 실패한 인덱스에 대한 롤오버 작업을 재시도합니다. 롤오버 작업을 재시도할 때 정책 템플릿을 업데이트하세요.

PUT _index_template/<template-name>

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

예시:

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

인덱스 이름이 인덱스 패턴과 일치하지 않음

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

`^.*-\d+$`

이 정규식 패턴은 인덱스 이름에 텍스트, 하이픈(-) 및 하나 이상의 숫자가 포함되어야 함을 나타냅니다. 인덱스 이름이 이 패턴을 따르지 않고 첫 번째 인덱스에 데이터가 기록되어 있는 경우 데이터를 다시 인덱싱합니다. 데이터를 다시 인덱싱할 때는 새 인덱스에 올바른 이름을 사용하세요.

예시:

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

데이터 API가 다시 인덱싱될 때 실패한 인덱스에서 롤오버 별칭을 분리합니다. 그런 다음 데이터 원본이 들어오는 데이터를 새 인덱스에 계속 쓸 수 있도록 롤오버 별칭을 새 인덱스에 추가합니다. 자세한 내용은 OpenSearch 웹사이트의 문서 다시 인덱싱 API를 참조하세요.

예시:

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

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

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

새 인덱스 패턴 이름을 반영하도록 기존 템플릿을 업데이트합니다. 예를 들면 다음과 같습니다.

PUT _index_template/<existing-template>
{
     "index_patterns": ["<my-new-index-pattern*>"],
}

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

롤오버 별칭은 인덱스 템플릿의 중복된 별칭을 가리킵니다.

롤오버 별칭이 중복된 별칭을 가리키기 때문에 인덱스 롤오버가 실패한 경우 인덱스 템플릿 설정을 확인합니다.

GET _index_template/<template-name>

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

{
     "index_patterns": ["my-index*"],
     "settings": {
          "index.plugins.index_state_management.rollover_alias": "<rollover-alias>"
     },
     "aliases": {
          "another_alias": {
               "is_write_index": true
          }
     }
}

여러 별칭으로 인해 롤오버가 실패합니다. 이 오류를 해결하려면 별칭을 지정하지 않고 템플릿 설정을 업데이트하세요.

PUT _index_template/<template-name>

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

POST _plugins/_ism/retry/logs-000001

중요: 별칭이 여러 인덱스를 가리키는 경우 하나의 인덱스에만 쓰기 권한이 활성화되어 있는지 확인합니다. 롤오버 API는 롤오버 별칭이 가리키는 인덱스에 대한 쓰기 액세스를 자동으로 제공합니다. ISM에서 롤오버 작업을 수행할 때는 is_write_index 설정에 별칭을 지정할 필요가 없습니다.

클러스터의 리소스 사용률이 최대임

회로 차단기 예외나 스토리지 공간 부족으로 인해 클러스터의 리소스 사용률이 최대에 도달할 수 있습니다.

회로 차단기 예외

원인이 회로 차단기 예외인 경우 롤오버 API가 호출될 때 클러스터에 높은 JVM 메모리 부하가 발생했을 수 있습니다. JVM 메모리 부족 문제를 해결하려면 OpenSearch Service 클러스터의 높은 JVM 메모리 부족 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.
JVM 메모리 사용량이 75% 아래로 떨어지면 다음 API 호출을 사용하여 실패한 인덱스에서 작업을 재시도할 수 있습니다.

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

참고: 인덱스 패턴(*)을 사용하여 실패한 여러 인덱스에 대해 작업을 재시도하세요.

클러스터에서 JVM 스파이크가 가끔 발생하는 경우 롤오버 작업에 대한 다음 재시도 차단을 사용하여 ISM 정책을 업데이트할 수도 있습니다.

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

ISM 정책에서 각 작업에는 count 파라미터를 기반으로 한 자동 재시도가 있습니다. 이전 작업이 실패하면 delay 파라미터를 확인하여 ISM이 작업을 재시도할 때까지 얼마나 기다려야 하는지 확인하세요. 자세한 내용은 OpenSearch 웹사이트의 작업을 참조하세요.

스토리지 부족

클러스터의 스토리지 공간이 부족한 경우 OpenSearch Service는 클러스터에서 쓰기 차단을 시작합니다. 쓰기 차단을 사용하면 모든 쓰기 작업이 클러스터에서 ClusterBlockException을 반환합니다. ClusterIndexWritesBlocked 지표의 값은 “1"이며, 이는 클러스터가 요청을 차단하고 있음을 나타냅니다. 따라서 새 인덱스를 만들려는 모든 시도가 실패합니다. 또한 설명 API 호출은 403 IndexCreateBlockException을 반환하여 클러스터의 스토리지 공간이 부족하다는 것을 나타냅니다. 쿨러스터 차단 예외 문제를 해결하려면 OpenSearch Service의 403 "index_create_block_exception" 오류를 해결하려면 어떻게 해야 하나요?를 참조하세요.

ClusterIndexWritesBlocked 지표가 “0"으로 돌아간 후 실패한 인덱스에 대해 ISM 작업을 재시도하세요. JVM 메모리 사용량이 30분 이상 92%를 초과하면 쓰기 차단이 시작될 수 있습니다. 쓰기 차단이 발생하면 그 대신 JVM 메모리 부족 문제를 해결하세요. JVM 메모리 사용량 문제를 해결하는 방법에 대한 자세한 내용은 OpenSearch Service 클러스터의 높은 JVM 메모리 사용량 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠