建立與 Linux 應用程式一致的磁碟快照


您可以為連接至 Linux 虛擬機器 (VM) 執行個體的磁碟建立應用程式一致的快照。一般來說,磁碟快照的品質取決於應用程式能否復原您在系統執行繁重寫入工作負載時所建立的快照。應用程式一致性快照會在備份時擷取應用程式資料的狀態,並完成所有應用程式交易,將所有待寫入的資料刷新至磁碟。

如要建立應用程式一致性的快照,請暫停會將資料寫入磁碟的應用程式或作業系統程序,清除磁碟緩衝區,並在建立快照前同步處理檔案系統。視應用程式而定,您可能需要執行這些步驟和其他步驟,確保所有應用程式交易都能完成並擷取到備份中。

如要為磁碟建立與應用程式一致的快照,請使用下列程序:

  1. 如要為應用程式一致性準備客體環境,請建立自訂的殼層指令碼,在擷取快照前後執行
  2. 在虛擬機器 (VM) 執行個體上設定快照設定。
  3. 建立啟用 guest-flush 選項的快照。guest-flush 選項會啟動快照前後的指令碼。

事前準備

  • 建立 Linux VM
  • 更新訪客環境
  • 如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要在本機開發環境中執行程式碼或範例,您可以選取下列任一選項,向 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

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

    REST

    To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.

      After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    For more information, see Authenticate for using REST in the Google Cloud authentication documentation.

必要角色和權限

如要取得管理標準快照所需的權限,請要求管理員為您授予專案的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這些預先定義的角色包含管理標準快照所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要管理標準快照,您必須具備下列權限:

  • 如要建立區域磁碟的快照,請按照下列步驟操作:
    • 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 上的特定設定檔,設定應用程式一致的快照設定。

  1. 開啟或建立訪客環境設定檔。

    edit /etc/default/instance_configs.cfg
    
  2. 在設定檔中新增下列部分,然後儲存變更並結束編輯器。

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    更改下列內容:

    • ENABLED:將其設為 true,即可啟用應用程式一致的快照功能。預設值為 false
    • TIMEOUT_SECONDS:前置或後置快照指令碼在逾時前完成執行所需的秒數。整數值必須介於 0 至 300 之間。預設值為 60

  3. 重新啟動 Guest Agent,以便使用新的設定。

    $ sudo systemctl restart google-guest-agent.service
    

建立啟用 guest-flush 的快照

使用 Google Cloud 控制台、Google Cloud CLI 或 REST,建立啟用 guest-flush 選項的影像。這會在快照擷取前後開始執行快照前後指令碼。

主控台

  1. 前往 Google Cloud 主控台的「Create a Snapshot」(建立快照) 頁面。

    前往「Create a Snapshot」(建立快照) 頁面
  2. 輸入快照的「Name」(名稱)
  3. 選取快照類型。預設值為 STANDARD 快照,這是長期備份和災難復原的最佳選項。

    選擇「Archive snapshot」(封存快照),即可以更低廉的成本保留資料。

  4. 選用步驟:輸入快照的「Description」(說明)
  5. 在「Source disk」下方,選取要建立快照的現有磁碟。
  6. 在「Location」(位置) 部分,選擇快照儲存位置

    系統會自動選取快照設定中指定的預先定義或自訂預設位置。如要覆寫快照設定,將快照儲存在自訂儲存位置,請執行下列步驟:

    1. 選擇快照的儲存位置類型。

      • 若選擇「Multi-regional」(多區域),費用較高但提供較高可用性。
      • 選擇「Regional snapshots」(區域快照),便能以較低的費用進一步控管資料的實際位置。
    2. 在「Select location」(選取位置) 欄位,選擇要使用的特定區域或多區域。如要使用最接近來源磁碟的區域或多區域,請選取「Based on disk's location」(以磁碟位置為準)
  7. 勾選「啟用應用程式一致的快照」選項。
  8. 按一下 [Create] (建立) 以建立快照。

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:快照類型,可選 STANDARDARCHIVE。 如果未指定快照類型,系統會建立 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:快照類型,可選 STANDARDARCHIVE。 如果未指定快照類型,系統會建立 STANDARD 快照。
  • STORAGE_LOCATION:選用:如果是全球範圍的快照,請提供您要儲存快照的 Cloud Storage 多地區Cloud Storage 地區。您只能指定一個儲存位置。

    只有在您想覆寫快照設定中設定的預先定義或自訂預設儲存位置時,才使用 storageLocations 參數。

  • SNAPSHOT_SCOPE_REGION:選用:如果是區域範圍的快照,則為快照的區域範圍。如果您加入這個參數,就無法使用 storageLocations 參數。STORAGE_LOCATION 會自動設為 SNAPSHOT_SCOPE_REGION

建立啟用 guest-flush 的快照排程

您可以使用排程快照,自動定期備份區域性和地區性永久磁碟和 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

詳情請參閱「關於磁碟快照排程」。

疑難排解

查看記錄並檢查設定,排解快照排程和建立程序的問題。

查看記錄

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」

  2. 將下列查詢貼到「記錄查詢」窗格:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot" OR
    protoPayload.methodName="ScheduledSnapshots"
    
  3. 執行查詢並調查記錄檔:

    快照建立記錄查詢。

檢查設定

後續步驟