Cloud Storage 미러는 Cloud Storage 버킷의 파일을 Managed Lustre 디렉터리에 지속적으로 미러링하는 자동화된 이벤트 기반 동기화 서비스를 제공합니다. 미러링은 Cloud Storage에서 Managed Lustre로의 한 방향으로만 지원됩니다.
Cloud Storage 미러는 요청 시에만 사용할 수 있습니다. 관심이 있는 경우 Cloud Storage 미러 요청 양식을 제출하세요.
활성 Cloud Storage 미러에 대한 지원은 google-cloud-managed-lustre-support@google.com에 문의하세요.
Cloud Storage 미러와 주문형 데이터 전송 비교
Managed Lustre는 Cloud Storage로 데이터를 이동하는 두 가지 메커니즘을 지원합니다.
| 기능 | Cloud Storage 미러 | 주문형 데이터 전송 |
|---|---|---|
| 방향 | Cloud Storage에서 Managed Lustre로 | Cloud Storage에서 Managed Lustre로 Managed Lustre에서 Cloud Storage로 |
| 트리거 | 이벤트 기반, 객체 생성, 업데이트, 삭제 시 자동으로 동기화 | 수동 |
| 계층적 네임스페이스 | 지원되지 않음 | 전송 속도 가속을 위해 지원 및 권장됨 |
| Rapid Storage 버킷 | 지원되지 않음 | 지원되지 않음 |
주문형 전송에 대한 자세한 내용은 Cloud Storage 간에 데이터 전송을 참조하세요.
Cloud Storage 미러 작동 방식
Cloud Storage 미러는 Cloud Storage 소스와 대상 Managed Lustre 디렉터리 간에 이벤트 기반 전송을 실행합니다. Cloud Storage 소스는 버킷 또는 버킷 내의 특정 객체 프리픽스일 수 있습니다. 미러링은 두 단계로 수행됩니다. 미러를 만들 때의 초기 동기화와 이후 변경사항의 지속적인 복제입니다.
초기 동기화
Cloud Storage 미러를 만들면 서비스에서 초기 동기화를 수행하여 소스 Cloud Storage 경로의 모든 기존 객체를 대상 Managed Lustre 디렉터리에 복사합니다.
지속적인 이벤트 기반 복제
초기 동기화 후 미러 서비스는 버킷 알림을 수신 대기하고 변경사항을 복제합니다.
대부분의 객체는 몇 분 내에 복제할 수 있습니다. 객체가 생성되거나 수정되면 전체 파일이 복사됩니다.
Cloud Storage에서 새 객체를 만들면 Managed Lustre에 해당 파일이 자동으로 생성됩니다.
Cloud Storage에서 기존 객체를 수정하면 Managed Lustre의 파일을 덮어쓰고 파일 시스템에서 수행된 로컬 수정사항이 삭제됩니다.
UID, GID, 모드 또는
mtime와 같은 Cloud Storage 객체의 커스텀 POSIX 메타데이터 속성에 대한 변경사항은 해당 Managed Lustre 파일에서 업데이트됩니다.Cloud Storage에서 객체를 삭제하면 기본적으로 Managed Lustre의 미러링된 파일이 삭제됩니다.
--deleted-files-retained플래그를 사용하여 이 동작을 변경할 수 있습니다. 비어 있는 상위 디렉터리는 그 아래의 마지막 파일이 삭제된 후 파일 시스템에 남아 있습니다.Managed Lustre에서 미러링된 파일에 적용된 수정사항은 소스 버킷에 다시 복사되지 않습니다. 소스 객체가 나중에 업데이트되면 Managed Lustre 파일이 소스 객체의 콘텐츠로 덮어쓰여지고 로컬 수정사항은 삭제됩니다.
Managed Lustre에서 미러링된 파일을 삭제해도 Cloud Storage의 해당 객체는 삭제되지 않습니다.
전송 속도
버킷과 인스턴스가 동일한 Google Cloud 리전에 있는 Cloud Storage 미러에는 다음 전송 속도가 적용됩니다.
초기 동기화는 32MB를 초과하는 파일의 경우 최대 100GBps, 작은 파일의 경우 초당 최대 10,000개의 객체로 기존 데이터를 복사합니다.
연속 복제는 진행 중인 변경사항을 자동으로 동기화하며 전송 성능은 파일 크기에 따라 달라집니다.
- 10MB 이상의 대용량 파일은 최대 3.5GBps의 최대 처리량으로 전송됩니다.
- 4KB 이하의 작은 파일은 초당 최대 4,900개의 객체로 전송됩니다.
미러가 복사할 수 있는 속도보다 빠르게 데이터가 Cloud Storage에 기록되면 이벤트가 백로그에 큐에 추가되어 변경사항이 Managed Lustre에 표시되는 데 걸리는 시간이 늘어납니다. 변경 속도가 감소하면 미러가 자동으로 따라잡습니다.
전송 속도는 다음에 의해 제한됩니다.
인스턴스의 최대 처리량은 인스턴스 용량에 성능 등급을 곱한 값입니다.
Cloud Storage 이그레스 대역폭은 리전별 프로젝트당 200Gbps 또는 25GBps로 제한됩니다. 더 높은 이그레스 대역폭을 얻으려면 할당량 상향을 요청하세요.
리전 간 전송의 네트워크 지연 시간 최적의 성능을 위해 소스 버킷과 인스턴스를 동일한 리전에 배치합니다.
가격 책정
Cloud Storage 미러에는 표준 Cloud Storage 요금이 부과되며, 이 요금은 소스 버킷이 포함된 프로젝트에 청구됩니다.
- 초기 동기화는 소스 버킷에서 클래스 A 목록 작업과 클래스 B 읽기 작업을 수행하고, 연속 복제는 클래스 B 읽기 작업을 수행하므로 Cloud Storage 작업 요금이 발생합니다.
- Managed Lustre 인스턴스와 다른 리전의 소스 버킷에서 데이터를 미러링하면 리전 간 데이터 전송 요금이 발생합니다.
시작하기 전에
Cloud Storage 미러를 만들려면 다음이 필요합니다.
ACTIVE상태의 Managed Lustre 인스턴스- 미러 소스로 사용할 기존 Cloud Storage 버킷 계층적 네임스페이스가 사용 설정된 버킷, Rapid Storage 버킷, 요청자 지불이 사용 설정된 버킷은 지원되지 않습니다.
필수 권한, 역할, 리소스
Cloud Storage 미러를 만들고 관리하려면 다음 IAM 권한, 역할, 리소스가 필요합니다.
사용자 권한
미러를 만들고 관리하려면 사용자 계정 또는 서비스 계정에 Managed Lustre 관리자 역할(roles/lustre.admin)이 필요합니다.
커스텀 역할을 사용하는 경우 역할에 다음 권한이 필요합니다.
lustre.mirrors.create: 미러를 만듭니다.lustre.mirrors.get: 미러를 설명합니다.lustre.mirrors.list: 미러 나열lustre.mirrors.update: 미러 업데이트lustre.mirrors.delete: 미러를 삭제합니다.
Cloud Storage 서비스 에이전트 초기화
버킷 알림 이벤트를 게시할 수 있도록 Cloud Storage 서비스 에이전트가 프로젝트에 있어야 합니다.
gcloud storage service-agent --project=PROJECT_ID
PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.
Managed Lustre 서비스 에이전트 권한
Google 관리형 Managed Lustre 서비스 에이전트에는 소스 Cloud Storage 버킷에 대한 액세스 권한이 필요합니다. 서비스 에이전트 ID를 찾거나 초기화하는 방법은 Managed Lustre 서비스 에이전트를 참조하세요.
서비스 에이전트에는 소스 Cloud Storage 버킷에 대한 다음 권한이 필요합니다.
storage.buckets.getstorage.buckets.updatestorage.objects.getstorage.objects.list
다음 권한이 포함된 커스텀 역할을 만듭니다.
gcloud iam roles create lustreMirrorUser \
--project=PROJECT_ID \
--title="Lustre mirror user" \
--permissions=storage.buckets.get,storage.buckets.update,storage.objects.get,storage.objects.list
소스 버킷의 Managed Lustre 서비스 에이전트에 커스텀 역할을 부여합니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-lustre." \
--role="projects/PROJECT_ID/roles/lustreMirrorUser"
다음을 바꿉니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- BUCKET_NAME: 소스 Cloud Storage 버킷의 이름입니다.
- PROJECT_NUMBER: Google Cloud 프로젝트 번호.
Cloud Storage 미러 만들기
Managed Lustre 인스턴스당 Cloud Storage 미러를 하나 만들 수 있습니다.
인스턴스에서 가져오기 또는 내보내기 작업이 진행 중인 동안에는 Cloud Storage 미러를 만들 수 없습니다.
gcloud
mirrors create 명령어를 실행합니다.
gcloud lustre instances mirrors create MIRROR_NAME \
--instance=INSTANCE_ID \
--location=LOCATION \
--direction=from-cloud-storage \
--gcs-path-uri="gs://BUCKET_NAME/PREFIX/" \
--lustre-path="/LUSTRE_DIRECTORY"
각 항목의 의미는 다음과 같습니다.
- MIRROR_NAME은 이 미러 리소스의 이름입니다. 1~63자(영문 기준)여야 하고 소문자, 숫자, 하이픈만 포함해야 하며 영문자로 시작하고 영문자 또는 숫자로 끝나야 합니다.
- INSTANCE_ID는 Managed Lustre 인스턴스 ID입니다.
- LOCATION: 인스턴스의 영역 예를 들면
us-central1-a입니다. --direction은 미러 방향을 지정합니다.from-cloud-storage이어야 합니다.--gcs-path-uri는 소스 Cloud Storage 버킷 및 객체 프리픽스(선택사항)입니다. 객체 프리픽스를 지정하는 경우 경로는 슬래시(gs://<var>BUCKET_NAME</var>/<var>PREFIX</var>/)로 끝나야 합니다.--lustre-path은 Managed Lustre 파일 시스템의 대상 디렉터리입니다./로 시작하는 절대 경로여야 합니다(예:/data또는/data/subdir). 기본값은 루트 디렉터리인/입니다. 지정된 디렉터리가 없으면 새로 생성됩니다.
다음과 같은 선택적 매개변수를 사용할 수 있습니다.
--deleted-files-retained또는--no-deleted-files-retained: Cloud Storage에서 삭제된 파일이 Managed Lustre에 보관되는지 여부를 제어합니다. 기본값은--no-deleted-files-retained입니다.--description=DESCRIPTION_TEXT: 미러에 대한 설명입니다(선택사항).
REST
instances.mirrors.create 메서드에 POST 요청을 전송합니다.
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors?mirrorId=MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"gcsPath": {
"uri": "gs://BUCKET_NAME/PREFIX/"
},
"lustrePath": {
"path": "/LUSTRE_DIRECTORY"
},
"direction": "FROM_CLOUD_STORAGE"
}
각 항목의 의미는 다음과 같습니다.
- PROJECT_ID는 Google Cloud 프로젝트 ID입니다.
- LOCATION은 Managed Lustre 인스턴스의 영역입니다. 예를 들면
us-central1-a입니다. - INSTANCE_ID는 인스턴스 ID입니다.
- MIRROR_NAME은 이 미러 리소스의 이름입니다. 1~63자(영문 기준)여야 하고 소문자, 숫자, 하이픈만 포함해야 하며 영문자로 시작하고 영문자 또는 숫자로 끝나야 합니다.
gcsPath에는 소스 Cloud Storage 버킷과 선택적 객체 프리픽스가 있는uri필드가 포함됩니다. 객체 프리픽스를 지정하는 경우 경로는 슬래시(gs://<var>BUCKET_NAME</var>/<var>PREFIX</var>/)로 끝나야 합니다.lustrePath은 Managed Lustre 파일 시스템의 대상 디렉터리입니다./로 시작하는 절대 경로여야 합니다(예:/data또는/data/subdir). 기본값은 루트 디렉터리인/입니다. 지정된 디렉터리가 없으면 새로 생성됩니다.direction은 미러 방향을 지정합니다.FROM_CLOUD_STORAGE이어야 합니다.
요청 본문은 다음과 같은 선택적 필드도 지원합니다.
deletedFilesRetained: Cloud Storage에서 해당 파일이 삭제된 후 Managed Lustre에 파일을 보관하려면true로 설정합니다. 기본값은false입니다.description: 미러에 대한 설명입니다(선택사항).
파일 속성
Cloud Storage 버킷에서 Managed Lustre 인스턴스로 파일을 복사하면 Managed Lustre 인스턴스의 파일 속성이 다음 두 가지 방법 중 하나로 설정됩니다.
- Cloud Storage 객체에 데이터 내보내기에 설명된 커스텀 메타데이터가 있는 경우:
- 파일의 UID, GID, 모드,
mtime는 객체의 커스텀 메타데이터를 기반으로 설정됩니다. - 파일의
atime는mtime와 동일한 값으로 설정됩니다.
- 파일의 UID, GID, 모드,
- Cloud Storage 객체에 커스텀 메타데이터가 없으면 다음을 수행합니다.
- 파일의 UID 및 GID는 0(
root)으로 설정됩니다. - 파일 모드가
rwxr-xr-x(755)로 설정됩니다. - 파일의
atime및mtime는 Cloud Storage 객체의 생성 시간으로 설정됩니다.
- 파일의 UID 및 GID는 0(
두 경우 모두 다음 단계를 따르세요.
- 파일의
ctime은 파일이 인스턴스에 기록된 시간으로 설정됩니다. - 디렉터리의
atime,ctime,mtime는 인스턴스에서 디렉터리가 생성된 시간으로 설정됩니다.
Cloud Storage 미러 관리
Google Cloud CLI 도구 또는 REST API를 사용하여 Cloud Storage 미러를 나열, 설명, 업데이트, 삭제할 수 있습니다. 기존 미러의 소스 또는 대상 경로를 변경하려면 기존 미러를 삭제하고 새 미러를 만들어야 합니다.
미러 나열
인스턴스에 구성된 미러를 보려면 다음 안내를 따르세요.
gcloud
gcloud lustre instances mirrors list \
--instance=INSTANCE_ID \
--location=LOCATION
REST
instances.mirrors.list 메서드에 GET 요청을 전송합니다.
GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors
Authorization: Bearer YOUR_ACCESS_TOKEN
거울 설명
미러의 구성 및 운영 상태를 보려면 다음 안내를 따르세요.
gcloud
gcloud lustre instances mirrors describe MIRROR_NAME \
--instance=INSTANCE_ID \
--location=LOCATION
REST
instances.mirrors.get 메서드에 GET 요청을 전송합니다.
GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN
미러링 상태
list 및 describe 명령어에서 반환된 state 필드는 미러가 수명 주기의 어느 단계에 있는지 보고합니다.
| 주 | 설명 |
|---|---|
CREATING |
미러 리소스를 만드는 중입니다. |
INITIAL_SYNC |
초기 동기화는 Cloud Storage에서 기존 객체를 복사하는 중입니다. |
ACTIVE |
미러는 변경사항이 발생할 때마다 동기화합니다. |
DELETING |
미러를 삭제하는 중입니다. |
미러 업데이트
미러의 설명, 라벨, 삭제된 파일 보관 여부를 업데이트할 수 있습니다.
Cloud Storage 및 Managed Lustre 경로는 변경할 수 없습니다. 미러를 다른 경로로 가리키려면 미러를 삭제하고 새 미러를 만듭니다.
미러를 업데이트해도 초기 동기화가 다시 실행되지 않습니다.
gcloud
gcloud lustre instances mirrors update MIRROR_NAME \
--instance=INSTANCE_ID \
--location=LOCATION \
--description="DESCRIPTION_TEXT"
REST
updateMask 쿼리 매개변수를 사용하여 instances.mirrors.patch 메서드에 PATCH 요청을 전송합니다.
PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME?updateMask=description
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"description": "DESCRIPTION_TEXT"
}
미러 삭제
미러를 삭제하려면 다음 안내를 따르세요.
gcloud
gcloud lustre instances mirrors delete MIRROR_NAME \
--instance=INSTANCE_ID \
--location=LOCATION
REST
instances.mirrors.delete 메서드에 DELETE 요청을 전송합니다.
DELETE https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN
미러를 삭제하면 Cloud Storage와 Managed Lustre 간의 향후 동기화가 중지됩니다. Managed Lustre에 이미 복사된 파일은 미러가 삭제될 때 삭제되지 않습니다.
미러가 삭제될 때 진행 중인 파일 전송은 중단됩니다.
전송이 완료되지 않으면 미러가 삭제된 후 미러 디렉터리에 FILENAME.cloud_transfer.UUID.NUMBER.tmp 이름 형식의 임시 파일이 남을 수 있습니다. 이러한 파일은 삭제할 수 있습니다.
로그 보기
미러 로그는 동기화에 실패한 개별 파일을 식별합니다.
로그는 mirror 로그 이름으로 lustre.googleapis.com/Instance 리소스에 대해 Cloud Logging으로 라우팅됩니다.
미러 작업 로그를 보려면 다음 안내를 따르세요.
- 로그 탐색기로 이동합니다.
다음 쿼리를 입력합니다.
resource.type="lustre.googleapis.com/Instance" logName="projects/PROJECT_ID/logs/lustre.googleapis.com%2Fmirror" resource.labels.instance_id="INSTANCE_ID"
문제 해결
소스 버킷의 PERMISSION_DENIED 오류
미러 생성이 PERMISSION_DENIED 오류로 실패하거나 파일이 동기화되지 않거나 'PERMISSION_DENIED' 오류를 보여주는 로그가 있는 경우:
Cloud Storage 서비스 에이전트가 초기화되었는지 확인합니다.
gcloud storage service-agent --project=PROJECT_IDManaged Lustre 서비스 에이전트에 소스 버킷에 대한 필수 권한이 부여되었는지 확인합니다. 자세한 내용은 서비스 에이전트 권한 부여를 참조하세요.
Cloud Storage의 변경사항이 Managed Lustre에 복제되지 않음
미러 상태가 ACTIVE이지만 Cloud Storage의 새 객체 또는 수정된 객체가 Managed Lustre에 표시되지 않는 경우 소스 버킷에 버킷 알림 구성이 있는지 확인합니다.
버킷 알림을 나열합니다.
gcloud storage buckets notifications list --bucket=BUCKET_NAME출력이 비어 있으면 기존 미러를 삭제하고 새 미러를 만들어야 합니다.
gcloud lustre instances mirrors delete MIRROR_NAME \ --instance=INSTANCE_ID \ --location=LOCATION삭제가 완료되면 새 미러를 만듭니다.
이름 충돌 오류
Cloud Storage에 파일을 추가한 후 Managed Lustre에서 파일이 누락된 경우 Cloud Logging에서 이름 충돌 오류를 확인합니다.
- Cloud Storage에서 만든 객체의 이름이 Managed Lustre의 기존 디렉터리와 동일한 경우
file exists오류와 함께 전송이 실패하고 기존 디렉터리를 덮어쓰지 않습니다. 전송이 실패하면 상위 디렉터리에FILENAME.cloud_transfer.UUID.NUMBER.tmp이름 형식의 임시 파일이 남습니다. - Cloud Storage에서 생성된 객체에 Managed Lustre의 기존 일반 파일과 일치하는 경로 프리픽스가 포함된 경우 전송이
not a directory오류와 함께 실패하고 기존 파일을 덮어쓰지 않습니다. 예를 들어models가 Managed Lustre의 기존 파일인 경우models/디렉터리를 만들 수 없으므로 Cloud Storage에서models/weights.bin라는 객체를 전송할 수 없습니다.
이러한 충돌을 해결하려면 Managed Lustre에서 충돌하는 디렉터리 또는 파일의 이름을 바꾸거나 삭제하고, 남은 .tmp 파일을 삭제하고, Cloud Storage에서 객체를 다시 업로드하여 동기화를 트리거합니다.
ABORTED: unable to queue the operation
미러를 만들거나 주문형 전송 작업을 시작할 때 ABORTED: unable to queue the operation 오류가 발생하는 경우:
- 미러를 만들기 전에 인스턴스에서 기존
import-data또는export-data작업이 실행되고 있지 않은지 확인합니다. - 인스턴스에서 다른 관리 데이터 작업을 시도하기 전에 미러 생성 및 초기 동기화가 완료될 때까지 기다립니다.
FILESYSTEM_NO_SPACE_ON_DEVICE
미러링이 중지되고 로그에 공간 오류가 표시되면 Managed Lustre 파일 시스템에 inode 또는 디스크 용량이 부족할 수 있습니다. 불필요한 파일을 삭제하여 공간을 확보하거나 스토리지 용량을 늘려 파일 시스템을 확장할 수 있습니다.