스냅샷 복원 API
스냅샷 복원 API (Restore Snapshot API)
클러스터 또는 지정된 데이터 스트림과 인덱스의 스냅샷을 복원해요.
도입 버전 1.0
- 인덱스와 클러스터에 대한 정보는 Introduction to OpenSearch를 참고하세요.
- 데이터 스트림에 대한 정보는 Data streams를 참고하세요.
복원하려는 것과 같은 이름의 열린 인덱스가 클러스터에 이미 존재한다면 해당 인덱스를 닫거나, 삭제하거나, 이름을 바꿔야 해요. 인덱스 이름 바꾸기에 대한 정보는 예제 요청을, 인덱스 닫기에 대한 정보는 Close index를 참고하세요.
엔드포인트
POST _snapshot/{repository}/{snapshot}/_restore
경로 파라미터
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
| repository | String | 복원할 스냅샷이 들어 있는 저장소예요. |
| snapshot | String | 복원할 스냅샷이에요. |
쿼리 파라미터
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
| wait_for_completion | Boolean | 계속하기 전에 스냅샷 복원이 완료될 때까지 기다릴지 여부예요. |
요청 본문 필드
모든 요청 본문 파라미터는 선택 사항이에요.
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
| attach_to_data_stream (실험적) | Boolean | 복원된 백킹 인덱스를 같은 이름의 기존 데이터 스트림에 연결할지 여부예요. true 면 이름이 .ds-<data_stream>-NNNNNN 백킹 인덱스 규칙과 일치하는 복원된 인덱스가 복원 작업의 일부로 같은 이름의 기존 데이터 스트림에 연결되며, 필요에 따라 스트림 세대가 전진해요. 연결된 인덱스는 데이터 스트림의 타임스탬프 필드를 date 로 매핑해야 해요. false 면 인덱스는 독립형 인덱스로 복원돼요. 기본값은 false 예요. 복원된 백킹 인덱스를 데이터 스트림에 연결하기를 참고하세요. |
| ignore_unavailable | Boolean | 누락되었거나 닫힌 데이터 스트림이나 인덱스를 처리하는 방법이에요. false 면 잃어버렸거나 닫힌 데이터 스트림이나 인덱스에 대해 요청이 오류를 반환해요. true 면 요청이 누락되었거나 닫힌 인덱스에 있는 데이터 스트림과 인덱스를 무시해요. 기본값은 false 예요. |
| ignore_index_settings | Boolean | 스냅샷에서 복원하지 않을 인덱스 설정의 쉼표로 구분된 목록이에요. |
| include_aliases | Boolean | 원본 스냅샷의 인덱스 별칭을 처리하는 방법이에요. true 면 원본 스냅샷의 인덱스 별칭이 복원돼요. false 면 연결된 인덱스와 함께 별칭도 복원되지 않아요. 기본값은 true 예요. |
| include_global_state | Boolean | 현재 클러스터 상태 1 를 복원할지 여부예요. false 면 클러스터 상태가 복원되지 않아요. true 면 현재 클러스터 상태가 복원돼요. 기본값은 false 예요. |
| index_settings | String | 모든 복원된 인덱스에 추가하거나 변경할 설정의 쉼표로 구분된 목록이에요. 스냅샷 복원 중 인덱스 설정을 덮어쓰려면 이 파라미터를 사용하세요. 데이터 스트림의 경우 이러한 인덱스 설정은 복원된 백킹 인덱스에 적용돼요. |
| indices | String | 스냅샷에서 복원할 데이터 스트림과 인덱스의 쉼표로 구분된 목록이에요. 멀티 인덱스 구문을 지원해요. 기본적으로 복원 작업은 스냅샷의 모든 데이터 스트림과 인덱스를 포함해요. 이 인자가 제공되면 복원 작업은 지정한 데이터 스트림과 인덱스만 포함해요. |
| partial | Boolean | 스냅샷 안의 인덱스에 모든 주 샤드가 없을 때 복원 작업이 동작하는 방식이에요. false 면 스냅샷 안의 어떤 인덱스든 모든 주 샤드를 사용할 수 없으면 전체 복원 작업이 실패해요. true 면 사용할 수 없는 샤드가 있는 인덱스의 부분 스냅샷 복원을 허용해요. 스냅샷에 성공적으로 포함된 샤드만 복원돼요. 누락된 모든 샤드는 빈 상태로 다시 생성돼요. 기본적으로 스냅샷에 포함된 인덱스 하나 이상에 모든 주 샤드가 없으면 전체 복원 작업이 실패해요. 이 동작을 바꾸려면 partial 을 true 로 설정하세요. 기본값은 false 예요. |
| rename_pattern | String | 복원된 데이터 스트림과 인덱스에 적용할 패턴이에요. rename 패턴과 일치하는 데이터 스트림과 인덱스는 rename_replacement 설정에 따라 이름이 바뀌어요. rename 패턴은 원본 텍스트를 참조할 수 있는 정규 표현식으로 정의된 대로 적용돼요. 두 개 이상의 데이터 스트림이나 인덱스가 같은 이름으로 바뀌면 요청이 실패해요. 복원된 데이터 스트림의 이름을 바꾸면 그 백킹 인덱스도 이름이 바뀌어요. 예를 들어 logs 데이터 스트림을 recovered-logs 로 바꾸면 백킹 인덱스 .ds-logs-1 은 .ds-recovered-logs-1 로 바뀌어요. 복원된 스트림의 이름을 바꾸면 새 스트림 이름과 일치하는 인덱스 템플릿이 있는지 확인하세요. 일치하는 인덱스 템플릿 이름이 없으면 스트림이 롤오버할 수 없고 새 백킹 인덱스가 생성되지 않아요. |
| rename_replacement | String | 이름 바꾸기 대체 문자열이에요. |
| rename_alias_pattern | String | 복원된 별칭에 적용할 패턴이에요. rename 패턴과 일치하는 별칭은 rename_alias_replacement 설정에 따라 이름이 바뀌어요. rename 패턴은 원본 텍스트를 참조할 수 있는 정규 표현식으로 정의된 대로 적용돼요. 두 개 이상의 별칭이 같은 이름으로 바뀌면 이 별칭들은 하나로 병합돼요. |
| rename_alias_replacement | String | 별칭용 이름 바꾸기 대체 문자열이에요. |
| source_remote_store_repository | String | 복원 중인 원본 인덱스의 원격 세그먼트 저장소 이름이에요. 원본과 대상 클러스터가 모두 원격 지원 저장소(remote-backed storage)를 사용하고 원격 저장소 저장소가 다른 경우에만 필요해요. 지정된 저장소는 복원 전에 대상 클러스터에서 읽기 전용으로 등록되어야 해요. 제공되지 않으면 Snapshot Restore API는 스냅샷 생성 시 등록된 저장소를 사용해요. |
| source_remote_translog_repository | String | 복원 중인 원본 인덱스의 원격 트랜스로그 저장소 이름이에요. 원본과 대상 클러스터가 모두 원격 지원 저장소를 사용하고 원격 저장소 저장소가 다른 경우에만 필요해요. 지정된 저장소는 복원 전에 대상 클러스터에서 읽기 전용으로 등록되어야 해요. |
| wait_for_completion | Boolean | 복원 작업이 완료된 후 응답을 반환할지 여부예요. false 면 복원 작업이 초기화될 때 응답을 반환해요. true 면 복원 작업이 완료될 때 응답을 반환해요. 기본값은 false 예요. |
| storage_type | local 은 모든 스냅샷 메타데이터와 인덱스 데이터가 로컬 스토리지로 다운로드됨을 나타내요. remote_snapshot 은 스냅샷 메타데이터가 클러스터로 다운로드되지만 원격 저장소가 인덱스 데이터의 권한 있는 저장소로 유지됨을 나타내요. 데이터는 쿼리를 서비스하는 데 필요에 따라 다운로드되고 캐시돼요. remote_snapshot 유형으로 스냅샷을 복원하려면 클러스터의 노드 하나 이상이 search 역할로 구성되어야 해요. 기본값은 local 이에요. |
1클러스터 상태에는 다음이 포함돼요:
- 영구 클러스터 설정(Persistent cluster settings)
- 인덱스 템플릿
- 레거시 인덱스 템플릿
- Ingest 파이프라인
- 인덱스 수명 주기 정책
예제 요청
다음 예제들은 서로 다른 스냅샷 복원 시나리오를 보여줘요.
기본 복원
다음 요청은 my-first-snapshot에서 opendistro-reports-definitions 인덱스를 복원해요. rename_pattern과 rename_replacement 조합으로 인해 클러스터에 중복된 열린 인덱스 이름이 허용되지 않으므로 인덱스 이름이 opendistro-reports-definitions_restored로 바뀌어요.
POST /_snapshot/my-opensearch-repo/my-first-snapshot/_restore
{
"indices": "opendistro-reports-definitions",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "(.+)",
"rename_replacement": "$1_restored",
"include_aliases": false
}
원격 지원 저장소를 사용한 크로스 클러스터 복원
원격 지원 저장소(remote-backed storage)는 OpenSearch가 세그먼트와 트랜스로그를 원격 저장소에 자동으로 백업하는 기능이에요. 둘 다 원격 지원 저장소를 사용하고 원격 저장소 저장소가 다른 클러스터 간에 스냅샷을 복원할 때는 source_remote_store_repository와 source_remote_translog_repository 파라미터를 모두 사용하세요.
다음 예제는 원본 클러스터에서 찍은 스냅샷의 인덱스를 대상 클러스터로 복원해요. 이 예제에서 source-cluster-snapshots는 원본 클러스터의 스냅샷이 들어 있는 스냅샷 저장소, snapshot-1은 스냅샷 이름, my-remote-index는 복원할 인덱스, source-remote-segment-repo는 원본 클러스터의 원격 세그먼트 저장소(대상 클러스터에서 읽기 전용으로 등록되어야 함), source-remote-translog-repo는 원본 클러스터의 원격 트랜스로그 저장소(대상 클러스터에서 읽기 전용으로 등록되어야 함)예요:
POST /_snapshot/source-cluster-snapshots/snapshot-1/_restore
{
"indices": "my-remote-index",
"source_remote_store_repository": "source-remote-segment-repo",
"source_remote_translog_repository": "source-remote-translog-repo"
}
대상 클러스터는 인덱스를 복원하고 원본 클러스터의 원격 저장소 저장소에서 원격 세그먼트와 트랜스로그를 읽도록 구성해요.
전체 단계별 절차는 Restoring snapshots across remote-backed clusters를 참고하세요.
복원된 백킹 인덱스를 데이터 스트림에 연결
도입 버전 3.8
이 기능은 실험적이며 프로덕션 환경에서 사용하지 않는 것이 좋아요. 기능 진행 상황에 대한 업데이트나 피드백을 남기고 싶다면 관련 GitHub issue를 참고하세요.
복원된 백킹 인덱스를 같은 이름의 기존 데이터 스트림에 연결하려면 attach_to_data_stream을 true로 설정하세요. 복원된 인덱스 이름은 .ds-<data_stream>-NNNNNN 백킹 인덱스 규칙과 일치해야 하고, 인덱스는 스트림의 타임스탬프 필드를 date로 매핑해야 해요. 다음 요청은 .ds-logs-foo-000001 백킹 인덱스를 복원해 기존 logs-foo 데이터 스트림에 연결하며, 필요에 따라 스트림 세대를 전진시켜요:
POST /_snapshot/my-opensearch-repo/my-first-snapshot/_restore
{
"indices": ".ds-logs-foo-000001",
"attach_to_data_stream": true
}
스냅샷에서 인덱스를 복원하지 않고 데이터 스트림의 백킹 인덱스를 추가하거나 제거하려면 Modify Data Stream API를 사용하세요.
예제 응답
성공하면 응답이 다음 JSON 객체를 반환해요:
{
"snapshot" : {
"snapshot" : "my-first-snapshot",
"indices" : [ ],
"shards" : {
"total" : 0,
"failed" : 0,
"successful" : 0
}
}
}
스냅샷 이름을 제외한 모든 속성이 비어 있거나 0이에요. 이는 스냅샷이 생성된 후 볼륨에서 이루어진 변경 사항이 모두 손실되기 때문이에요. 하지만 Get snapshot API를 호출해 스냅샷을 살펴보면 완전히 채워진 스냅샷 객체가 반환돼요.
응답 본문 필드
다음 표는 사용 가능한 모든 응답 본문 필드를 보여줘요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| snapshot | String | 스냅샷 이름이에요. |
| indices | Array | 스냅샷의 인덱스예요. |
| shards | Object | 생성된 총 샤드 수와 성공·실패한 샤드 수예요. |
스냅샷 안의 열린 인덱스가 클러스터에 이미 존재하고, 그것을 삭제·닫기·이름 바꾸기를 하지 않으면 API는 다음처럼 오류를 반환해요:
{
"error" : {
"root_cause" : [
{
"type" : "snapshot_restore_exception",
"reason" : "[my-opensearch-repo:my-first-snapshot/dCK4Qth-TymRQ7Tu7Iga0g] cannot restore index [.opendistro-reports-definitions] because an open index with same name already exists in the cluster. Either close or delete the existing index or restore the index under a different name by providing a rename pattern and replacement name"
}
],
"type" : "snapshot_restore_exception",
"reason" : "[my-opensearch-repo:my-first-snapshot/dCK4Qth-TymRQ7Tu7Iga0g] cannot restore index [.opendistro-reports-definitions] because an open index with same name already exists in the cluster. Either close or delete the existing index or restore the index under a different name by providing a rename pattern and replacement name"
},
"status" : 500
}
필요한 권한
Security 플러그인을 사용한다면 적절한 권한이 있는지 확인하세요: cluster:admin/snapshot/restore.
출처: 문서