OpenSearch Service에서 ISM 정책의 롤오버 인덱스 작업이 실패하는 이유는 무엇입니까?
Index State Management(ISM)를 사용하여 Amazon OpenSearch Service 클러스터의 인덱스를 롤오버하려고 합니다. 하지만 인덱스가 롤오버되지 않아 오류가 발생합니다.
간략한 설명
이 문제를 해결하려면 설명 API를 사용하여 실패 원인을 파악하십시오. 그런 다음 ISM 정책을 검토합니다. 롤오버 작업을 설정하는 방법에 대한 자세한 내용은 ISM을 사용하여 Amazon OpenSearch Service의 부족한 스토리지 공간을 관리하려면 어떻게 해야 합니까?를 참조하십시오.
참고: 다음 해결 방법은 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가 존재하지 않기 때문인 것으로 표시됩니다.
롤오버 대상이 존재하지 않음
롤오버 대상이 존재하지 않아서 롤오버 작업이 실패하는 경우, 인덱스가 롤오버 별칭으로 부트스트랩되는지 확인하십시오.
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분마다 실행됩니다. 롤오버 작업이 성공하면 다음 메시지가 나타납니다. "Successfully rolled over index".
롤오버 별칭이 없음
롤오버 별칭이 없어서 롤오버 작업이 실패하는 경우, 실패한 인덱스의 설정을 검사합니다.
GET failed-index-name/_settings
참고: failed-index-name을 롤오버 프로세스 중에 실패하는 인덱스의 이름으로 바꾸십시오.
index.plugins.index_state_management.rollover_alias 설정이 없는 경우, 해당 설정을 인덱스에 수동으로 추가하십시오.
PUT /failed-index-name/_settings{ "index.plugins.index_state_management.rollover_alias" : "rollover-alias" }
참고: failed-index-name을 롤오버 프로세스 중에 실패하는 인덱스의 이름으로 바꾸십시오. rollover-alias를 인덱스에 사용하고자 하는 별칭 이름으로 바꾸십시오.
실패한 인덱스 재시도 API를 사용하여 실패한 인덱스에 대한 롤오버 작업을 재시도합니다. 롤오버 작업이 다시 시도되면 정책 템플릿을 업데이트합니다.
PUT _index_template/template-name
참고: template-name을 인덱스 템플릿의 이름으로 바꿉니다.
기존 정책 템플릿에서와 같은 설정을 적용해야 OpenSearch Service가 새로 만든 인덱스에 롤오버 별칭을 적용하도록 보장됩니다.
예:
PUT _index_template/existing-template { "index_patterns": [ "index-pattern*" ], "template": { "settings": { "plugins.index_state_management.rollover_alias": "rollover-alias" } } }
인덱스 이름이 인덱스 패턴과 일치하지 않음
인덱스 이름이 인덱스 패턴과 일치하지 않아서 롤오버 작업이 실패하는 경우, 실패한 인덱스의 이름을 확인합니다. 롤오버 작업을 완료하려면 인덱스 이름이 다음 정규식 패턴과 일치해야 합니다.
`^.*-\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" }
참고: policy_id를 ISM 정책 ID로 바꾸십시오.
새 인덱스 패턴 이름으로 기존 템플릿을 업데이트합니다. 예를 들면 다음과 같습니다.
PUT _index_template/existing-template { "index_patterns": ["my-new-index-pattern*"], }
참고: existing-template을 기존 템플릿 이름으로 바꿉니다. my-new-index-pattern을 사용하고자 하는 인덱스 패턴으로 바꿉니다.
중요: ISM 정책 및 롤오버 별칭은 동일한 인덱스 패턴으로 만드는 연속한 인덱스를 반영해야 합니다.
롤오버 별칭이 인덱스 템플릿의 중복된 별칭을 가리킴
롤오버 별칭이 중복된 별칭을 가리켜서 롤오버 작업이 실패하는 경우, 인덱스 템플릿 설정을 검사합니다.
GET _index_template/template-name
참고: template-name을 템플릿 이름으로 바꿉니다.
템플릿에 동일한 인덱스를 가리키는 다른 별칭이 있는 추가적인 별칭 섹션이 포함되어 있는지 확인합니다.
예:
{ "index_patterns": ["my-index*"], "settings": { "index.plugins.index_state_management.rollover_alias": "rollover-alias" }, "aliases": { "another_alias": { "is_write_index": true } } }
앞선 예시에는 rollover-alias 및 another_alias로 별칭이 두 개 있습니다. 여러 별칭으로 인해 롤오버가 실패합니다. 이 오류를 해결하려면 템플릿 설정을 업데이트하고, 별칭을 지정하지 마십시오.
PUT _index_template/template-name
참고: template-name을 템플릿 이름으로 바꿉니다.
그런 다음 실패한 인덱스에서 재시도 API를 수행합니다.
POST _plugins/_ism/retry/logs-000001
중요: 별칭이 여러 인덱스를 가리키는 경우 하나의 인덱스에만 쓰기 권한이 활성화되어 있는지 확인합니다. 롤오버 API는 롤오버 별칭이 가리키는 인덱스에 대한 쓰기 액세스를 자동으로 제공합니다. ISM에서 롤오버 작업을 수행할 때는 is_write_index 설정에 별칭을 지정할 필요가 없습니다.
클러스터의 리소스 사용률이 최대임
회로 차단기 예외나 스토리지 공간 부족으로 인해 클러스터의 리소스 사용률이 최대에 도달할 수 있습니다.
회로 차단기 예외
회로 차단기 예외로 인해 클러스터의 리소스 사용률이 최대에 도달하게 되는 경우, 롤오버 API를 직접적으로 호출하면 클러스터에서 Java Virtual Machine(JVM) 메모리 압력이 높아질 수 있습니다. JVM 메모리 압력 문제를 해결하려면 OpenSearch Service 클러스터의 높은 JVM 메모리 압력 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.
JVM 메모리 압력이 75% 미만으로 떨어지고 나면 실패한 인덱스에서 다음 API 직접 호출로 작업을 다시 시도할 수 있습니다.
POST _plugins/_ism/retry/failed-index-name
참고: failed-index-name을 롤오버에 실패한 인덱스 이름으로 바꿉니다.
실패한 인덱스 여러 개에서 작업을 다시 시도하려면 인덱스 패턴(*)을 사용합니다.
클러스터에서 JVM 스파이크가 가끔 발생하는 경우 롤오버 작업에 대한 다음 재시도 차단을 사용하여 ISM 정책을 업데이트할 수도 있습니다.
{ "actions": { "retry": { "count": 3, "backoff": "exponential", "delay": "10m" } } }
ISM 정책에서 각 작업에는 count 파라미터를 기반으로 한 자동 재시도가 있습니다. 이전 작업이 실패하는 경우, 작업을 다시 시도할 때까지 ISM을 얼마나 오래 기다려야 하는지 delay 파라미터를 확인하십시오. 자세한 내용은 OpenSearch 웹 사이트의 작업을 참조하십시오.
스토리지 부족
클러스터의 스토리지 공간이 부족해지기 시작하면 OpenSearch Service가 클러스터에서 쓰기 차단을 시작합니다. 쓰기 차단을 사용하면 모든 쓰기 작업이 클러스터에서 ClusterBlockException을 반환합니다. 클러스터가 요청을 차단하기 때문에 ClusterIndexWritesBlocked 지표에 "1" 값이 표시됩니다. 새 인덱스를 만들려는 모든 시도는 실패합니다. 클러스터에 스토리지 공간이 부족하기 때문에 설명 API 직접 호출도 403 IndexCreateBlockException을 반환합니다. 클러스터 차단 예외 문제를 해결하려면 OpenSearch Service의 403 "index_create_block_exception" or "cluster_block_exception" 오류를 해결하려면 어떻게 해야 합니까?를 참조하십시오.
ClusterIndexWritesBlocked 지표가 0으로 돌아가고 나면, 실패한 인덱스에서 ISM 작업을 다시 시도합니다. JVM 메모리 압력이 30분 넘게 92%를 초과하는 경우, OpenSearch 회로 차단기가 쓰기 차단을 시작할 수 있습니다. 쓰기 차단이 발생하면 대신 JVM 메모리 압력 문제를 해결하십시오.
- 언어
- 한국어

관련 콘텐츠
질문됨 3년 전