Linux 애플리케이션 일관성 영구 디스크 스냅샷 만들기

Linux 가상 머신(VM) 인스턴스에 연결된 영구 디스크의 애플리케이션 일관성 스냅샷을 만들 수 있습니다. 일반적으로 영구 디스크 스냅샷의 품질은 쓰기 워크로드가 클 때 사용자가 만든 스냅샷으로 애플리케이션을 얼마나 잘 복구할 수 있느냐에 따라 달라집니다. 애플리케이션 일관성 스냅샷에서는 완료된 모든 애플리케이션 트랜잭션과 디스크에서 삭제된 대기 중인 모든 쓰기를 사용해 백업 시점에 애플리케이션 데이터 상태를 캡처합니다.

애플리케이션 일관성 스냅샷을 만들려면 먼저 영구 디스크에 데이터를 쓰는 앱 또는 운영체제 프로세스를 일시중지하고 디스크 버퍼를 삭제한 후 파일 시스템을 동기화해야 합니다. 애플리케이션에 따라 모든 애플리케이션 트랜잭션이 완료되고 백업에서 캡처되도록 하려면 이를 비롯한 여러 단계가 필요할 수 있습니다.

영구 디스크의 애플리케이션 일관성 스냅샷을 만들려면 다음 프로세스를 따르세요.

  1. 게스트 환경의 애플리케이션 일관성을 준비하려면 스냅샷을 캡처하기 전후에 실행할 커스텀 셸 스크립트를 만듭니다.
  2. VM(가상 머신) 인스턴스에서 스냅샷 설정을 구성합니다.
  3. 그런 다음 guest-flush 옵션을 사용 설정하여 스냅샷을 만듭니다. guest-flush 옵션에서 사전 및 사후 스냅샷 스크립트를 시작합니다.

시작하기 전에

제한사항

  • 애플리케이션 일관성은 스냅샷 작업 자체로는 보장되지 않으며 커스텀 사전 및 사후 스냅샷 스크립트의 동작으로만 보장됩니다.
  • 스냅샷 생성 요청에 guest-flush 옵션을 사용하면 스크립트 오류나 시간 초과가 발생할 경우 스냅샷이 생성되지 않습니다.
  • 특정 공개 또는 커스텀 Linux 이미지에 연결된 영구 디스크의 애플리케이션 일관성이 있는 스냅샷만 만들 수 있습니다. 지원되는 이미지는 다음과 같습니다.
    • CentOS 7
    • CentOS 8
    • Debian 9 Stretch
    • Debian 10 Buster
    • RHEL 7
    • RHEL 8
    • SLES 12
    • SLES 15
    • Ubuntu 18.04
    • Ubuntu 20.04

사전 및 사후 스냅샷 스크립트 만들기

계속 진행하기 전에 Linux VM에서 최신 소프트웨어를 실행하도록 게스트 환경을 업데이트합니다.

애플리케이션 일관성을 높이기 위해 스냅샷 캡처 전후에 실행할 사전 및 사후 스냅샷 셸 스크립트를 만듭니다. 다음과 같은 작업에는 사전 및 사후 스크립트를 사용합니다.

  • 영구 디스크에 데이터를 쓰는 VM에서 실행되는 앱 또는 운영체제 프로세스를 일시중지합니다.
  • 디스크 버퍼를 삭제합니다. 예를 들어 MySQL에는 FLUSH 문이 있습니다. 앱에 사용할 수 있는 도구라면 무엇이든 사용하세요.
  • 파일 시스템을 동기화합니다.

다음 코드 예시에서는 간단한 사전 스냅샷 스크립트를 보여줍니다. 선행 #! 문자를 기록합니다. fsfreeze -f를 실행하면 파일 시스템에 액세스하려는 실행 중인 프로세스가 차단되므로 애플리케이션이 지연 시간에 민감한 경우 이 방법을 사용할 때 주의합니다.

#!/bin/bash
fsfreeze -f [example-disk-location]

다음 코드 예시에서는 간단한 사후 스냅샷 스크립트를 보여줍니다. 선행 #! 문자를 기록합니다.

#!/bin/bash
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> 쌍의 목록입니다.

예를 들어 부팅 디스크는 1/0으로 표시되고 VM에 연결된 추가 디스크는 2/0으로 표시됩니다.

게스트 환경 구성 파일 수정

VM에서 특정 구성 파일을 업데이트하여 애플리케이션 일관성 스냅샷 설정을 구성합니다.

  1. 게스트 환경 구성 파일을 열거나 만듭니다.

    /etc/default/instance_configs.cfg
    
  2. 구성 파일에 다음 섹션을 추가합니다.

    [Snapshots]
    enabled = enabled
    timeout_in_seconds = timeout
    

    아래 설명에 따라 값을 바꿉니다.

    기본 설명
    enabled true 또는 false false 애플리케이션 일관성 스냅샷 기능을 사용 설정하는지 여부입니다.
    timeout_in_seconds 정수 [0, 300] 60 제한 시간 오류가 반환되기 전에 사전 또는 사후 스냅샷 스크립트가 실행을 완료하는 데 걸릴 수 있는 시간(초)입니다. 제한 시간 오류가 디스크당 300초가 되기 전에 전체 스냅샷 작업을 완료하는 데 걸릴 수 있는 시간(초)이며 구성이 불가능합니다.
  3. 구성 설정을 저장합니다.

    sudo systemctl restart google-guest-agent.service
    

guest-flush가 사용 설정된 스냅샷 만들기

Google Cloud 콘솔, Google Cloud CLI 또는 Compute Engine API를 사용하여 guest-flush 옵션을 사용 설정한 상태로 스냅샷을 만듭니다. 그러면 스냅샷 캡처 전후에 사전 및 사후 스냅샷 스크립트 실행이 시작됩니다.

Console

  1. 새 스냅샷 만들기 페이지로 이동합니다.
  2. 스냅샷 이름을 입력합니다.
  3. 원하는 경우 스냅샷에 대한 설명을 입력합니다.
  4. 소스 디스크에서 스냅샷을 만들려는 기존 디스크를 선택합니다.
  5. 스토리지 위치를 선택합니다.
  6. 애플리케이션 일관성 스냅샷 사용 설정 옵션을 선택합니다.
  7. 만들기를 클릭합니다.

gcloud

다음 명령어를 실행합니다.

gcloud compute disks snapshot DISK_NAME [DISK_NAME ...] --guest-flush

다음을 바꿉니다.

  • DISK_NAME은 스냅샷을 만들려는 하나 이상의 영구 디스크 이름입니다.

Google Cloud CLI는 작업이 READY 또는 FAILED 상태를 반환할 때까지 기다립니다. 이러한 상태가 반환되지 않고 최대 제한 시간에 도달하면 스냅샷에 대해 마지막으로 알려진 세부정보를 반환합니다.

API

guestFlush 옵션을 사용 설정하여 disks.createSnapshot 메서드POST 요청을 보냅니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/createSnapshot?guestFlush=true

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • ZONE: VM과 디스크가 있는 영역입니다.
  • DISK_NAME: 스냅샷을 만들 영구 디스크의 이름입니다.

guest-flush가 사용 설정된 스냅샷 일정 만들기

예약된 스냅샷을 사용하여 영역 및 리전 영구 디스크를 정기적으로 자동으로 백업합니다. 백업에 애플리케이션 일관성 스냅샷을 예약하려면 예약된 각 스냅샷의 전후로 사전 및 사후 스냅샷 스크립트를 실행되도록 스냅샷 일정을 만들 때 --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

자세한 내용은 영구 디스크의 스냅샷 일정 만들기를 참조하세요.

문제 해결하기

  • 스냅샷 생성 이벤트의 로그를 검토합니다.

    1. 콘솔에서 Google Cloud 운영 제품군 Logging  > 로그 페이지로 이동합니다.
      로그 탐색기 페이지로 이동
    2. 왼쪽 탐색 메뉴의 로그 탐색기로 이동합니다.
    3. 라벨 또는 텍스트 검색 기준 필터링 목록에서 고급 필터로 전환을 선택합니다.

    고급 필터로 전환

    필터 텍스트 상자를 다음 텍스트로 바꿉니다.

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot"
    
  • 스크립트가 없으면 스냅샷이 생성되지 않습니다. 사전 및 사후 스냅샷 스크립트 만들기의 단계를 따랐는지 확인합니다.

  • 스크립트 오류 또는 제한 시간 초과 시 스냅샷이 생성되지 않습니다. 일관된 스냅샷 준비을 검토합니다. 설정에서 구성할 수 있는 최대 제한 시간은 300초입니다. 샘플 스크립트를 사용하여 전체 프로세스를 반복해 보세요.

  • guest-flush가 사용 설정된 디스크의 스냅샷을 캡처하려면 영구 디스크를 VM에 연결해야 합니다. Linux VM을 만들고 영구 디스크를 연결하는 방법은 VM 만들기를 참조하세요.

다음 단계