Amazon OpenSearch Service에서 내 ISM 정책의 롤오버 인덱스 작업이 계속 실패하는 이유는 무엇입니까?
인덱스 상태 관리(ISM)를 사용하여 Amazon OpenSearch Service 클러스터에서 내 인덱스를 롤오버하고 싶습니다. 그러나 인덱스가 롤오버되지 않아 오류가 발생합니다. 왜 이런 현상이 발생하며, 이 문제를 해결하려면 어떻게 해야 합니까?
간략한 설명
“인덱스 롤오버 실패(Failed to rollover index)” 오류가 발생한 경우 다음 이유 중 하나로 인해 롤오버 작업이 실패했을 수 있습니다.
- 롤오버 대상이 없습니다.
- 롤오버 별칭이 누락되었습니다.
- 인덱스 이름이 인덱스 패턴과 일치하지 않습니다.
- 롤오버 별칭이 인덱스 템플릿에서 중복된 별칭을 가리키고 있습니다.
- 클러스터에서 리소스를 최대로 사용하고 있습니다.
이 문제를 해결하려면 explain API를 사용하여 오류의 원인을 식별합니다. 그런 다음 ISM 정책을 확인합니다. ISM 정책에서 롤오버 작업을 설정하는 방법에 대한 자세한 내용은 OpenSearch Service에서 ISM을 사용하여 부족한 스토리지 공간을 관리하려면 어떻게 합니까?를 참조하세요.
참고: 다음 해결 방법은 OpenSearch API에만 적용됩니다. 레거시 Open Distro API에 대한 내용은 Open Distro의 ISM API 운영을 참조하십시오.
해결 방법
explain API 사용
“인덱스를 롤오버하지 못했습니다(Failed to rollover index)” 오류의 근본 원인을 확인하려면 explain API를 사용하세요.
GET _plugins/_ism/explain/logs-000001?pretty
다음은 explain 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)이 없기 때문에 인덱스가 롤오버에 실패했음을 나타냅니다.
롤오버 대상이 없습니다.
explain API가 원인을 “롤오버 대상[롤링 인덱스]가 존재하지 않음(rollover target [rolling-indices] does not exist)”으로 반환하면 인덱스가 롤오버 별칭으로 부트스트랩되었는지 확인하세요.
GET _cat/aliases
출력에는 클러스터의 현재 별칭 및 별칭과 연관된 인덱스가 모두 나열됩니다. ISM에서 롤오버 대상이 존재하지 않는다고 표시되면 롤오버 별칭 이름과 실패한 인덱스 연결이 누락된 것입니다.
실패한 인덱스 연결 문제를 해결하려면 롤오버 별칭을 인덱스에 첨부합니다.
POST /_aliases { "actions": [{ "add": { "index": "logs-000001", "alias": "my-data" } }] }
롤오버 별칭을 연결한 후 OpenSearch Service의 관리형 인덱스에서 롤오버 작업을 다시 시도합니다.
POST _plugins/_ism/retry/logs-000001
자세한 내용은 OpenSearch 웹 사이트에서 실패한 인덱스 재시도를 참조하세요.
실패한 인덱스를 다시 시도하면 "Attempting to retry" 상태 메시지가 나타날 수 있습니다. OpenSearch Service가 재시도를 시도하는 경우 다음 ISM 주기가 실행될 때까지 기다립니다. ISM 사이클은 30~48분마다 실행됩니다. 롤오버 작업이 성공하면 “인덱스가 성공적으로 롤오버되었습니다.”라는 메시지가 나타납니다.
롤오버 별칭이 누락되었습니다.
explain API 출력에서 롤오버 실패의 원인을 누락된 롤오버 별칭으로 식별하는 경우 실패한 인덱스의 설정을 확인합니다.
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>" }
retry failed index 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" } }
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 _plugins/_ism/add/my-new-index-* { "policy_id": "<policy_id>" }
새 인덱스 패턴 이름을 반영하도록 기존 템플릿을 업데이트합니다. 예를 들면 다음과 같습니다.
PUT _index_template/<existing-template> { "index_patterns": ["<my-new-index-pattern*>"], }
참고: ISM 정책 및 롤오버 별칭은 동일한 인덱스 패턴으로 생성된 연속 인덱스를 반영해야 합니다.
롤오버 별칭이 인덱스 템플릿에서 중복된 별칭을 가리키고 있습니다.
explain API에서 롤오버 별칭이 중복된 별칭을 가리키고 있기 때문에 인덱스 롤오버가 실패했음을 나타내는 경우 인덱스 템플릿 설정을 확인하세요.
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>
그런 다음 실패한 인덱스에서 retry API를 수행합니다.
POST _plugins/_ism/retry/logs-000001
중요: 별칭이 여러 인덱스를 가리키는 경우 하나의 인덱스만 쓰기 액세스 권한을 사용하도록 설정해야 합니다. rollover API는 롤오버 별칭이 가리키는 인덱스에 대한 쓰기 액세스를 자동으로 활성화합니다. 즉, ISM에서 롤오버 작업을 수행할 때 ‘is_write_index’ 설정에 대한 별칭을 지정할 필요가 없습니다.
클러스터에서 리소스를 최대로 사용하고 있습니다.
클러스터의 최대 리소스 사용률은 회로 차단기 예외 또는 스토리지 공간 부족으로 인해 발생할 수 있습니다.
회로 차단기 예외
explain API가 회로 차단기 예외를 반환하는 경우 rollover 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 Service는 클러스터에서 쓰기 블록을 트리거하여 모든 쓰기 작업이 ClusterBlockException을 반환합니다. ClusterIndexWritesBlocked 지표 값은 ‘1’의 값으로 표시되며, 이는 클러스터가 요청을 차단하고 있음을 나타냅니다. 따라서 새 인덱스를 생성하려는 모든 시도는 실패합니다. explain API 호출은 클러스터에 스토리지 공간이 없음을 나타내는 403 IndexCreateBlockException도 반환합니다. 클러스터 블록 예외 문제를 해결하려면 OpenSearch Service에서 403 ‘index_create_block_exception’ 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.
ClusterIndexWritesBlocked 지표가 ‘0’으로 돌아간 후 실패한 인덱스에 대해 ISM 작업을 다시 시도합니다. JVM 메모리 압력이 30분 이상 92% 를 초과하면 쓰기 블록이 트리거될 수 있습니다. 쓰기 블록이 발생하면 대신 JVM 메모리 압력 문제를 해결해야 합니다. JVM 메모리 압력 문제를 해결하는 방법에 대한 자세한 내용은 OpenSearch Service 클러스터에서 높은 JVM 메모리 압력을 해결하려면 어떻게 해야 합니까?를 참조하세요.

관련 콘텐츠
- 질문됨 한 달 전lg...
- 질문됨 2달 전lg...
- 질문됨 6년 전lg...
- 질문됨 4달 전lg...
- AWS 공식업데이트됨 3달 전