Linux 가상 머신(VM) 인스턴스에 연결된 디스크의 애플리케이션 일관성 스냅샷을 만들 수 있습니다. 일반적으로 디스크 스냅샷의 품질은 쓰기 워크로드가 클 때 사용자가 만든 스냅샷으로 애플리케이션을 얼마나 잘 복구할 수 있느냐��� ���라 ���라집니다. 애플리케이션 일관성 스냅샷에서는 완료된 모든 애플리케이션 트랜잭션과 디스크에서 삭제된 대기 중인 모든 쓰기를 사용해 백업 시점에 애플리케이션 데이터 상태를 캡처합니다.
애플리케이션 일관성 스냅샷을 만들려면 먼저 디스크에 데이터를 쓰는 앱 또는 운영체제 프로세스를 일시중지하고 디스크 버퍼를 삭제한 후 파일 시스템을 동기화해야 합니다. 애플리케이션에 따라 모든 애플리케이션 트랜잭션이 완료되고 백업에서 캡처되도록 하려면 이를 비롯한 여러 단계가 필요할 수 있습니다.
디스크의 애플리케이션 일관성 스냅샷을 만들려면 다음 프로세스를 따르세요.
- 게스트 환경의 애플리케이션 일관성을 준비하려면 스냅샷을 캡처하기 전후에 실행할 커스텀 셸 스크립트를 만듭니다.
- 가상 머신(VM) 인스턴스에서 스냅샷 설정을 구성합니다.
- 그런 다음
guest-flush
옵션을 사용 설정하여 스냅샷을 만듭니다.guest-flush
옵션에서 사전 및 사후 스냅샷 스크립트를 시작합니다.
시작하기 전에
- Linux VM 만들기
- 게스트 환경을 업데이트합니다.
-
아직 인증을 설정하지 않았다면 설정합니다.
인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다.
로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음 옵션 중 하나를 선택하여 Compute Engine에 인증하면 됩니다.
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
REST
로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
자세한 내용은 Google Cloud 인증 문서의 REST 사용을 위한 인증을 참조하세요.
-
필수 역할 및 권한
표준 스냅샷을 관리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
Compute 인스턴스 관리자(v1)(
roles/compute.instanceAdmin.v1
) - 서비스 계정으로 실행될 수 있는 VM에 연결: 서비스 계정 사용자(v1)(
roles/iam.serviceAccountUser
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
이러한 사전 정의된 역할에는 ���준 스냅샷을 관리하는 데 필요한 권한�� �����되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.
필수 권한
표준 스냅샷을 관리하려면 다음 권한이 필요합니다.
-
영역 디스크의 스냅샷 만들기:
- 프로젝트에 대한
compute.snapshots.create
- 디스크에 대한
compute.disks.createSnapshot
- 프로젝트에 대한
-
디스크의 데이터를 사용하여 리전 디스크의 스냅샷 만들기:
- 프로젝트에 대한
compute.snapshots.create
-
소스 VM에 대한
compute.instances.useReadOnly
- 디스크에 대한
compute.disks.createSnapshot
- 프로젝트에 대한
-
복제본 복구 체크포인트에서 리전 디스크의 스냅샷 만들기:
- 프로젝트에 대한
compute.snapshots.create
- 디스크에 대한
compute.disks.createSnapshot
- 프로젝트에 대한
-
스냅샷 일정 만들기: 프로젝트 또는 조직에 대한
compute.resourcePolicies.create
-
디스크에 스냅샷 일정 연결:
- 디스크에 대한
compute.disks.addResourcePolicies
- 리소스 정책에 대한
compute.resourcePolicies.use
- 디스크에 대한
-
스냅샷 삭제:
-
스냅샷에 대한
compute.snapshots.delete
- 프로젝트에 대한
compute.snapshots.list
-
스냅샷에 대한
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
제한사항
Linux에서 애플리케이션 일관성 스냅샷을 만들 때 다음과 같은 제한사항이 있습니다.
- 애플리케이션 일관성은 스냅샷 작업 자체로는 보장되지 않으며 커스텀 사전 및 사후 스냅샷 스크립트의 동작으로만 보장됩니다.
- 스냅샷 생성 요청에
guest-flush
옵션을 사용할 경우 스크립트가 오류를 반환하거나 제한 시간 한도에 도달하면 스냅샷이 생성되지 않습니다.
사전 및 사후 스냅샷 스크립트 만들기
계속 진행하기 전에 Linux VM에서 최신 소프트웨어를 실행하도록 게스트 환경을 업데이트합니다.
애플리케이션 일관성을 높이기 위해 스냅샷 캡처 전후에 실행할 사전 및 사후 스냅샷 셸 스크립트를 만듭니다. 다음과 같은 작업에는 사전 및 사후 스크립트를 사용합니다.
- 디스크에 데이터를 쓰는 VM에서 실행되는 앱 또는 운영체제 프로세스를 일시중지합니다.
- 디스크 버퍼를 삭제합니다. 예를 들어 MySQL에는
FLUSH
문이 있습니다. 애플리케이션에 사용할 수 있는 도구라면 무엇이든 사용하세요. - 파일 시스템을 동기화합니다.
다음 코드 예시에서는 사전 스냅샷 ���크립트를 보여줍니다. 선행 #!
문자를 기록합니다.
#!/bin/bash sudo fsfreeze -f [example-disk-location]
다음 코드 예시에서는 사후 스냅샷 스크립트를 보여줍니다. 선행 #!
문자를 기록합니다.
#!/bin/bash sudo fsfreeze -u [example-disk-location]
VM의 /etc/google/snapshots/
디렉터리에 스크립트를 저장해야 합니다. 사전 스크립트의 전체 경로는 /etc/google/snapshots/pre.sh
이고 사후 스크립트의 전체 경로는 /etc/google/snapshots/post.sh
이어야 합니다.
스크립트의 특정 디스크 참조
스냅샷 전후 스크립트에 전달되는 첫 번째 인수는 스냅샷을 생성하는 디스크 목록입니다. 스크립트에서 이 인수를 사용하여 다양한 검사를 수행할 수 있습니다. 예를 들어 VM에 여러 디스크가 연결되어 있지만 스냅샷 요청에 하나의 디스크만 지정한 경우 스냅샷을 만드는 중인 디스크를 확인할 수 있습니다.
인수의 형식은 다음과 같습니다.
- SCSI 연결 디스크: 쉼표로 구분된
<target/lun>
쌍의 목록입니다. - NVME 연결 디스크: 쉼표로 구분된
<nvme:namespace>
쌍의 목록입니다.
예를 들어 SCSI 연결 부팅 디스크는 1/0
으로 표시되고 VM에 연결된 추가 디스크는 2/0
으로 표시됩니다.
게스트 환경 구성 파일 수정
VM에서 특정 구성 파일을 업데이트하여 애플리케이션 일관성 스냅샷 설정을 구성합니다.
게스트 환경 구성 파일을 열거나 만듭니다.
edit /etc/default/instance_configs.cfg
구성 파일에 다음 섹션을 추가한 후 변경사항을 저장하고 편집기를 종료합니다.
[Snapshots] enabled = ENABLED timeout_in_seconds = TIMEOUT_SECONDS
다음을 바꿉니다.
ENABLED
: 애플리케이션 일관성 스냅샷 기능을 사용 설정하려면true
로 설정합니다. 기본값은false
입니다.TIMEOUT_SECONDS
: 제한 시간 전에 사전 또는 사후 스냅샷 스크립트가 실행을 완료하는 데 걸릴 수 있는 시간(초)입니다. 정수 값은 0에서 300 사이여야 합니다. 기본값은60
입니다.
새 구성 설정을 사용하려면 게스트 에이전트를 다시 시작합니다.
$ sudo systemctl restart google-guest-agent.service
guest-flush
가 사용 설정된 스냅샷 만들기
Google Cloud 콘솔, Google Cloud CLI 또는 REST를 사용하여 guest-flush
옵션을 사용 설정한 상태로 스냅샷을 만듭니다. 그러면 스냅샷 캡처 전후에 사전 및 사후 스냅샷 스크립트 실행이 시작됩니다.
콘솔
Google Cloud 콘솔에서 스냅샷 만들기 페이지로 이동합니다.
스냅샷 만들기 페이지로 이동- 스냅샷 이름을 입력합니다.
-
스냅샷 유형을 선택합니다. 기본값은 장기 백업 및 재해 복구에 가장 적합한
STANDARD
스냅샷입니다.비용 효율적인 데이터 보관을 위해서는 보관처리 스냅샷을 선택합니다.
- (선택사항) 스냅샷에 대한 설명을 입력합니다.
- 소스 디스크에서 스냅샷을 만들려는 기존 디스크를 선택합니다.
위치 섹션에서 스냅샷 스토리지 위치를 선택합니다.
스냅샷 설정에 정의된 사전 정의되었거나 맞춤설정된 기본 위치가 자동으로 선택됩니다. 선택적으로 다음을 ���행해서 스냅샷 설정을 재정의하고 커스텀 스토리지 위치에 스냅샷을 저장할 수 있습니다.
- 애플리케이션 일관성 스냅샷 사용 설정 옵션을 선택합니다.
- 만들기를 클릭하여 스냅샷을 만듭니다.
gcloud
스냅샷 설정에 따라 또는 선택한 대체 스토리지 위치를 사용해서 정의된 스토리지 위치 정책으로 스냅샷을 만들 수 있습니다. 자세한 내용은 스냅샷 스토리지 위치 선택을 참조하세요.
스냅샷 설정에 구성된 사전 정의되었거나 맞춤설정된 기본 위치에 스냅샷을 만들려면
gcloud compute snapshots create
명령어를 사용합니다.gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk-zone=SOURCE_ZONE \ --source-disk=SOURCE_DISK_NAME \ --snapshot-type=SNAPSHOT_TYPE \ --guest-flush
-
또는 스냅샷 설정을 재정의하고 커스텀 스토리지 위치에 스냅샷을 만들려면 스냅샷 저장 위치를 나타내는
--storage-location
플래그를 포함하세요.gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk-zone=SOURCE_ZONE \ --source-disk=SOURCE_DISK_NAME \ --snapshot-type=SNAPSHOT_TYPE \ --storage-location=STORAGE_LOCATION \ --guest-flush
-
(미리보기) 허용된 리전에서 리전 범위의 스냅샷을 만들려면
--region
플래그를 포함하여 스냅샷을 만들 위치를 지정합니다.gcloud beta compute snapshots create SNAPSHOT_NAME \ --region=SNAPSHOT_SCOPE_REGION --source-disk=SOURCE_DISK_NAME \ --source-disk-zone=SOURCE_ZONE \ --snapshot-type=SNAPSHOT_TYPE
다음을 바꿉니다.
- SNAPSHOT_NAME: 스냅샷의 이름입니다.
- SOURCE_ZONE: 소스 디스크의 영역
- SOURCE_DISK_NAME: 스냅샷을 만들려는 디스크 볼륨의 이름
- SNAPSHOT_TYPE: 스냅샷 유형(STANDARD 또는 ARCHIVE).
스냅샷 유형을 지정하지 않으면
STANDARD
스냅샷이 생성됩니다. -
STORAGE_LOCATION: (선택사항) 전역 범위 스냅샷의 경우 스냅샷을 저장할 Cloud Storage 멀티 리전 또는 Cloud Storage 리전입니다. 스토리지 위치는 하나만 지정할 수 있습니다.
스냅샷 설정에 구성된 사전 정의되었거나 맞춤 설정된 기본 스토리지 위치를 재정의하려는 경우에만
--storage-location
매개변수를 사용합니다. -
SNAPSHOT_SCOPE_REGION: (선택사항) 리전 범위 스냅샷의 경우 스냅샷 범위가 지정된 리전입니다. 이 파라미터를 포함하면
--storage-location
파라미터를 사용할 수 없습니다. STORAGE_LOCATION은 SNAPSHOT_SCOPE_REGION으로 ���동 설정됩니다.
REST
스냅샷 설정에 따라 또는 선택한 대체 스토리지 위치를 사용해서 정의된 스토리지 위치 정책으로 스냅샷을 만들 수 있습니다. 자세한 내용은 스냅샷 스토리지 위치 선택을 참조하세요.
-
스냅샷 설정에 구성된 사전 정의되었거나 맞춤설정된 기본 위치에 스냅샷을 만들려면
snapshots.insert
메서드에POST
요청을 수행하세요.POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotType": "SNAPSHOT_TYPE", "guestFlush": true, }
-
또는 스냅샷 설정을 재정의하고 커스텀 스토리지 위치에 스냅샷을 만들려면
snapshots.insert
메서드에 대해POST
요청을 수행하고 요청에storageLocations
속성을 포함합니다.POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotType": "SNAPSHOT_TYPE", "storageLocations": [ "STORAGE_LOCATION" ], "guestFlush": true, }
-
(미리보기) 허용된 리전에서 리전 범위 스냅샷을 만들려면
snapshots.insert
메서드에 대해POST
요청을 실행하고 생성 리전을 정의합니다.POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/regions/SNAPSHOT_SCOPE_REGION/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotType": "SNAPSHOT_TYPE" }
다음을 바꿉니다.
- DESTINATION_PROJECT_ID: 스냅샷을 만들려는 프로젝트의 ID입니다.
- SNAPSHOT_NAME: 스냅샷의 이름입니다.
- SOURCE_PROJECT_ID: 소스 디스크 프로젝트의 ID입니다.
- SOURCE_ZONE: 소스 디스크의 영역
- SOURCE_DISK_NAME: 스냅샷을 만들려는 디스크의 이름
- SNAPSHOT_TYPE: 스냅샷 유형(STANDARD 또는 ARCHIVE).
스냅샷 유형을 지정하지 않으면
STANDARD
스냅샷이 생성됩니다. -
STORAGE_LOCATION: (선택사항) 전역 범위 스냅샷의 경우 스냅샷을 저장할 Cloud Storage 멀티 리전 또는 Cloud Storage 리전입니다. 스토리지 위치는 하나만 지정할 수 있습니다.
스냅샷 설정에 구성된 사전 정의되었거나 맞춤 설정된 기본 스토리지 위치를 재정의하려는 경우에만
storageLocations
매개변수를 사용합니다. SNAPSHOT_SCOPE_REGION: (선택사항) 리전 범위 스냅샷의 경우 스냅샷 범위가 지정된 리전입니다. 이 파라미터를 포함하면
storageLocations
파라미터를 사용할 수 없습니다. STORAGE_LOCATION은 SNAPSHOT_SCOPE_REGION으로 자동 설정됩니다.
guest-flush
가 사용 설정된 스냅샷 일정 만들기
예약된 스냅샷을 사용하여 영역 및 리전 Persistent Disk와 Google Cloud Hyperdisk를 정기적으로 자동으로 백업합니다. 백업에 애플리케이션 일관성 스냅샷을 예약하려면 예약된 각 스냅샷의 전후로 사전 및 사후 스냅샷 스크립트가 실행되도록 스냅샷 일정을 만들 때 --guest-flush
옵션을 사용합니다.
예를 들어 게스트 환경 구성 파일을 구성하고 커스텀 스크립트를 만든 후 다음 명령어로 시간별 애플리케이션 일관성 스냅샷을 만듭니다.
gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \ --description "MY HOURLY SNAPSHOT SCHEDULE" \ --start-time 22:00 \ --hourly-schedule 4 \ --guest-flush \ --max-retention-days SNAPSHOT_RETENTION_AGE
자세한 내용은 디스크의 스냅샷 일정 정보를 참조하세요.
문제 해결
로그를 검토하고 구성을 확인하여 스냅샷 일정 및 생성 프로세스의 문제를 해결합니다.
로그 검토
Google Cloud 콘솔의 로그 탐색기 페이지로 이동합니다.
로그 쿼리 창에 다음 쿼리를 붙여넣습니다.
resource.type="gce_disk" jsonPayload.event_subtype="compute.disks.createSnapshot" OR protoPayload.methodName="ScheduledSnapshots"
쿼리를 실행하고 로그를 조사합니다.
구성 확인
인스턴스에 파일 시스템의 활동/IOPS를 고정하는 사전 또는 사후 스냅샷 스크립트가 없으면 스냅샷이 생성되지 않습니다. 사전 및 사후 스냅샷 스크립트 만들기의 단계를 따랐는지 확인합니다.
스크립트 오류 또는 제한 시간 초과 시 스냅샷이 생성되지 않습니다. 일관된 스냅샷 준비을 검토합니다. 설정에서 구성할 수 있는 최대 제한 시간은 300초입니다. 샘플 스크립트를 사용하여 전체 프로세스를 반복해 보세요.
guest-flush
가 사용 설정된 디스크의 스냅샷을 캡처하려면 디스크를 VM에 연결해야 합니다. Linux VM을 만들고 디스크를 연결하는 방법은 VM 만들기를 참조하세요.