스냅샷 저장소 등록 또는 업데이트 API

스냅샷 저장소 등록 또는 업데이트 API (Registering Or Updating A Snapshot Repository API)

snapshots API를 사용하면 스냅샷을 저장할 새 저장소를 등록하거나 기존 저장소의 정보를 업데이트할 수 있어요.

도입 버전 1.0

스냅샷 저장소는 다음 유형이 될 수 있어요:

저장소를 만드는 방법은 Register repository를 참고하세요.

엔드포인트

POST /_snapshot/{repository}/ 
PUT /_snapshot/{repository}/

경로 파라미터

파라미터 데이터 타입 설명
repository String 저장소 이름이에요.

요청 파라미터

요청 파라미터는 저장소 유형에 따라 달라져요:

  • fs
  • s3
  • hdfs

공통 파라미터

다음 표는 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/to/backup 형식의 HDFS URI예요. 필수예요.
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.

출처: 문서