스냅샷 저장소 등록 또는 업데이트 API
스냅샷 저장소 등록 또는 업데이트 API (Registering Or Updating A Snapshot Repository API)
snapshots API를 사용하면 스냅샷을 저장할 새 저장소를 등록하거나 기존 저장소의 정보를 업데이트할 수 있어요.
도입 버전 1.0
스냅샷 저장소는 다음 유형이 될 수 있어요:
- 파일 시스템(
fs):fs저장소를 만드는 방법은 Register repository shared file system을 참고하세요. - Amazon Simple Storage Service(Amazon S3) 버킷(
s3):s3저장소를 만드는 방법은 Register repository Amazon S3를 참고하세요. - Hadoop Distributed File System(HDFS)(
hdfs):hdfs저장소를 만드는 방법은 Register an HDFS repository를 참고하세요.
저장소를 만드는 방법은 Register repository를 참고하세요.
엔드포인트
POST /_snapshot/{repository}/
PUT /_snapshot/{repository}/
경로 파라미터
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
| repository | String | 저장소 이름이에요. |
요청 파라미터
요청 파라미터는 저장소 유형에 따라 달라져요:
fss3hdfs
공통 파라미터
다음 표는 fs와 s3 저장소 모두에서 사용할 수 있는 파라미터를 보여줘요.
| 요청 필드 | 설명 |
|---|---|
| prefix_mode_verification | 활성화하면 저장소 검증을 위한 접두어에 임의 시드의 해시 값을 추가해요. 원격 저장소가 활성화된 클러스터의 경우 제공된 저장소에 대해 설정된 setting.prefix_mode_verification 설정을 노드 속성에 추가할 수 있어요. 이 필드는 신규 및 기존 저장소 모두에서 작동해요. 선택 사항이에요. |
| shard_path_type | 샤드 수준 blob의 경로 구조를 제어해요. 지원 값은 FIXED , HASHED_PREFIX , HASHED_INFIX 예요. 각 값에 대한 자세한 내용은 shard_path_type 값 을 참고하세요. 기본값은 HASHED_PREFIX 예요. 선택 사항이에요. |
shard_path_type 값
shard_path_type 설정에서 지원되는 값은 다음과 같아요:
FIXED:<ROOT>/<BASE_PATH>/indices/<index-id>/0/<SHARD_BLOBS>처럼 기존 계층 구조 방식으로 경로 구조를 유지해요.HASHED_PREFIX: 각 고유 샤드 ID의 경로 시작 부분에 해시 접두어를 붙여요. 예:<ROOT>/<HASH-OF-INDEX-ID-AND-SHARD-ID>/<BASE_PATH>/indices/<index-id>/0/<SHARD_BLOBS>.HASHED_INFIX: 각 고유 샤드 ID의 기본 경로 뒤에 해시 접두어를 붙여요. 예:<ROOT>/<BASE-PATH>/<HASH-OF-INDEX-ID-AND-SHARD-ID>/indices/<index-id>/0/<SHARD_BLOBS>. 사용되는 해시 방식은FNV_1A_COMPOSITE_1로,FNV1a해시 함수를 사용해 대부분의 원격 저장소 옵션에서 잘 확장되는 사용자 지정 인코딩 64비트 해시 값을 생성해요.FNV1a는 가장 중요한 6비트를 가져와 URL 안전 Base64 문자를 만들고, 다음 14비트를 가져와 이진 문자열을 만듭니다.
fs 저장소
| 요청 필드 | 설명 |
|---|---|
| location | 스냅샷용 파일 시스템 디렉터리예요. 파일 서버에서 마운트한 디렉터리나 Samba 공유일 수 있어요. 모든 노드가 접근 가능해야 해요. 필수예요. |
| chunk_size | 스냅샷 작업 중에 큰 파일을 청크로 나눠요(예: 64mb , 1gb ). 클라우드 스토리지 제공자에게 중요하며, 공유 파일 시스템에서는 훨씬 덜 중요해요. 기본값은 null (무제한)이에요. 선택 사항이에요. |
| compress | 메타데이터 파일을 압축할지 여부예요. 이 설정은 데이터 파일에는 영향을 주지 않으며, 데이터 파일은 인덱스 설정에 따라 이미 압축되어 있을 수 있어요. 기본값은 false 예요. 선택 사항이에요. |
| max_restore_bytes_per_sec | 스냅샷을 복원하는 최대 속도예요. 기본값은 초당 40MB( 40m )예요. 선택 사항이에요. |
| max_snapshot_bytes_per_sec | 스냅샷을 만드는 최대 속도예요. 기본값은 초당 40MB( 40m )예요. 선택 사항이에요. |
| remote_store_index_shallow_copy | 원격 저장소 인덱스의 스냅샷을 얕은 복사본으로 캡처할지 여부를 결정해요. 기본값은 false 예요. |
| shallow_snapshot_v2 | 원격 저장소 인덱스의 스냅샷을 얕은 복사본 v2 로 캡처할지 여부를 결정해요. 기본값은 false 예요. |
| readonly | 저장소가 읽기 전용인지 여부예요. 한 클러스터(등록 시 "readonly": false)에서 다른 클러스터(등록 시 "readonly": true)로 마이그레이션할 때 유용해요. 선택 사항이에요. |
s3 저장소
| 요청 필드 | 설명 |
|---|---|
| base_path | 스냅샷을 저장할 버킷 안의 경로예요(예: my/snapshot/directory ). s3:// 접두어는 포함하지 마세요. 선택 사항이에요. 지정하지 않으면 스냅샷은 S3 버킷 루트에 저장돼요. |
| bucket | s3:// 접두어가 없는 S3 버킷 이름이에요. 필수예요. |
| region | S3 버킷이 위치한 AWS 리전이에요. 선택 사항이에요. 누락되면 opensearch.yml 의 s3.client.default.region 값을 사용해요. |
| endpoint | S3 버킷 엔드포인트예요. 선택 사항이에요. OpenSearch 2.9 이상에서 region이 설정된 경우 필수예요. 예를 들어 us-west-2 에서는 https://s3.us-west-2.amazonaws.com 를 사용하세요. 누락되면 opensearch.yml 의 s3.client.default.endpoint 값을 사용해요. |
| buffer_size | ( chunk_size 의) 청크를 ( buffer_size 의) 조각으로 나눠 다른 API로 S3에 보내야 하는 임계값이에요. 기본값은 100MB 또는 Java 힙의 5% 중 더 작은 값이에요. 유효한 값은 5mb~5gb 사이예요. 이 옵션은 변경하지 않는 것을 권장해요. |
| canned_acl | S3에는 repository-s3 플러그인이 S3에서 객체를 만들 때 객체에 추가할 수 있는 여러 canned ACL이 있어요. 기본값은 private 예요. 선택 사항이에요. |
| chunk_size | 스냅샷 작업 중에 파일을 청크로 나눠요(예: 64mb , 1gb ). 클라우드 스토리지 제공자에게 중요하며, 공유 파일 시스템에서는 훨씬 덜 중요해요. 기본값은 1gb 예요. 선택 사항이에요. |
| client | 클라이언트 설정(예: s3.client.default.access_key )을 지정할 때 default 외의 문자열(예: s3.client.backup-role.access_key )을 사용할 수 있어요. 다른 이름을 사용했다면 이 값을 일치하도록 변경하세요. 기본 및 권장 값은 default 예요. 선택 사항이에요. |
| compress | 메타데이터 파일을 압축할지 여부예요. 이 설정은 데이터 파일에는 영향을 주지 않으며, 데이터 파일은 인덱스 설정에 따라 이미 압축되어 있을 수 있어요. 기본값은 false 예요. 선택 사항이에요. |
| disable_chunked_encoding | 일부 스토리지 서비스와의 호환성을 위해 청크 인코딩을 비활성화해요. 기본값은 false 예요. 선택 사항이에요. |
| max_restore_bytes_per_sec | 스냅샷을 복원하는 최대 속도예요. 기본값은 초당 40MB( 40m )예요. 선택 사항이에요. |
| max_snapshot_bytes_per_sec | 스냅샷을 만드는 최대 속도예요. 기본값은 초당 40MB( 40m )예요. 선택 사항이에요. |
| readonly | 저장소가 읽기 전용인지 여부예요. 한 클러스터(등록 시 "readonly": false)에서 다른 클러스터(등록 시 "readonly": true)로 마이그레이션할 때 유용해요. 선택 사항이에요. |
| remote_store_index_shallow_copy | 원격 저장소 인덱스의 스냅샷을 얕은 복사본으로 캡처할지 여부를 결정해요. 기본값은 false 예요. |
| s3_async_client_type | repository-s3 플러그인이 이 저장소에 데이터를 업로드할 때 사용하는 비동기 HTTP 클라이언트예요. 유효한 값은 crt (AWS Common Runtime 클라이언트)와 netty (Netty NIO 클라이언트)예요. 자세한 내용은 s3_async_client_type 을 참고하세요. 기본값은 crt 예요. 선택 사항이에요. |
| shallow_snapshot_v2 | 원격 저장소 인덱스의 스냅샷을 얕은 복사본 v2 로 캡처할지 여부를 결정해요. 기본값은 false 예요. |
| storage_class | 스냅샷 파일의 S3 스토리지 클래스를 지정해요. 기본값은 standard 예요. glacier 와 deep_archive 스토리지 클래스는 사용하지 마세요. 선택 사항이에요. |
| server_side_encryption_type | S3 서버 측 암호화 유형을 지정해요. 지원 값은 AES256 ( SSE-S3 ), aws:kms ( SSE-AWS Key Management Service(KMS) ), bucket_default ( 버킷 기본 암호화 )예요. 기본값은 AES256 이에요. |
| server_side_encryption_kms_key_id | S3 SSE-KMS 를 선택했을 때( aws:kms 암호화 유형 설정) 사용할 AWS KMS 키를 지정해요. server_side_encryption_type 이 aws:kms 로 설정되면 필수예요. |
| server_side_encryption_bucket_key_enabled | S3 SSE-KMS 사용 시 S3 Bucket Keys를 사용할지 지정해요. 선택 사항이에요. |
| server_side_encryption_encryption_context | S3 SSE-KMS 사용 시 사용할 추가 암호화 컨텍스트를 지정해요. 이 설정 값은 JSON 객체 형식이어야 해요. 선택 사항이에요. |
| expected_bucket_owner | 예상되는 S3 버킷 소유자의 AWS 계정 ID를 지정해요. 이 설정은 버킷 소유권 확인 에 사용할 수 있어요. 선택 사항이에요. |
server_side_encryption설정은 OpenSearch 3.1.0부터 제거되었어요. S3는 모든 S3 버킷의 기본 암호화 수준으로 서버 측 암호화를 적용해요. 이를 비활성화할 수 없으므로 이 저장소 설정 값은 효과가 없었어요. 자세한 내용은 Protecting data with server-side encryption을 참고하세요.
기본
server_side_encryption_type이 OpenSearch 3.8.0에서bucket_default에서AES256으로 변경되었어요. 업그레이드 후 명시적인server_side_encryption_type없이 등록된 저장소는 모든 업로드 요청에x-amz-server-side-encryption헤더를 보내요. 이 헤더를 거부하는 S3 호환 스토리지 서비스는 오류를 반환해요. 이전 암호화 유형으로 복원하려면server_side_encryption_type을bucket_default로 설정하세요. 자세한 내용은 Breaking changes를 참고하세요.
s3_async_client_type
s3_async_client_type은 단일 저장소에 적용되므로 저장소의 settings 블록에 설정하세요. repository-s3 플러그인은 s3_async_client_type을 노드 설정으로도 등록하므로 opensearch.yml 에 설정이 있으면 노드가 성공적으로 시작되고 Nodes Info API가 이를 반환하지만, 플러그인은 저장소 정의에서만 값을 읽어요. s3_async_client_type을 설정하지 않은 저장소는 opensearch.yml 에 netty가 지정되어 있어도 crt를 사용해요.
AWS Common Runtime 네이티브 라이브러리를 노드 플랫폼에서 사용할 수 없으면 플러그인은 경고를 기록하고 Netty 클라이언트를 사용해요.
저장소가 사용하는 클라이언트를 확인하려면 org.opensearch.repositories.s3.S3AsyncService 로거에 대해 DEBUG 로깅을 활성화하고 S3 Http client type 메시지를 찾으세요.
hdfs 저장소
| 요청 필드 | 설명 |
|---|---|
| uri | hdfs:// |
| path | 스냅샷을 저장할 HDFS 안의 경로예요(예: /my/snapshot/directory ). 필수예요. |
| security.principal | HDFS에 연결할 때 사용할 Kerberos 보안 주체(principal)예요. 선택 사항이에요. |
| conf. |
추가 HDFS 클라이언트 구성 설정이에요(예: core-site.xml 또는 hdfs-site.xml ). 선택 사항이에요. |
예제 요청
다음 예제들은 서로 다른 저장소 유형을 등록하는 방법을 보여줘요.
fs
다음 예제는 로컬 디렉터리 /mnt/snapshots를 location으로 사용해 fs 저장소를 등록해요:
PUT /_snapshot/my-fs-repository
{
"type": "fs",
"settings": {
"location": "/mnt/snapshots"
}
}
s3
다음 요청은 기존 버킷 my-open-search-bucket에 my-opensearch-repo라는 새 S3 저장소를 등록해요. 기본적으로 모든 스냅샷은 my/snapshot/directory에 저장돼요:
PUT /_snapshot/my-opensearch-repo
{
"type": "s3",
"settings": {
"bucket": "my-open-search-bucket",
"base_path": "my/snapshot/directory"
}
}
다음 요청은 기존 버킷 my-open-search-bucket에 my-opensearch-repo라는 새 S3 저장소를 등록해요. 기본적으로 모든 스냅샷은 my/snapshot/directory에 저장돼요. 또한 이 저장소는 SSE-KMS를 사용하도록 구성되며, 예상 버킷 소유자 AWS 계정 ID는 123456789000이에요.
PUT /_snapshot/my-opensearch-repo
{
"type": "s3",
"settings": {
"bucket": "my-open-search-bucket",
"base_path": "my/snapshot/directory",
"server_side_encryption_type": "aws:kms",
"server_side_encryption_kms_key_id": "arn:aws:kms:us-east-1:123456789000:key/kms-key-id",
"server_side_encryption_encryption_context": "{\"additional-enc-ctx\": \"sample-context\"}",
"expected_bucket_owner": "123456789000",
}
}
hdfs
다음 요청은 HDFS URI hdfs://namenode:8020과 HDFS 파일 시스템 경로 /opensearch/snapshots를 사용해 새 HDFS 저장소를 등록해요:
PUT /_snapshot/my-hdfs-repository
{
"type": "hdfs",
"settings": {
"uri": "hdfs://namenode:8020",
"path": "/opensearch/snapshots"
}
}
예제 응답
성공하면 다음 JSON 객체가 반환돼요:
{
"acknowledged": true
}
저장소가 실제로 등록되었는지 확인하려면 Get snapshot repository API를 사용하고,
repository경로 파라미터에 저장소 이름을 전달하세요.
필요한 권한
Security 플러그인을 사용한다면 적절한 권한이 있는지 확인하세요: cluster:admin/repository/put.
출처: 문서