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

您可以為連結至 Linux 虛擬機器 (VM) 執行個體的 Persistent Disk 磁碟區建立應用程式一致性快照。一般來說,磁碟快照的品質取決於應用程式在大量寫入工作負載期間建立快照後,復原的效能。應用程式一致性快照會擷取備份時的應用程式資料狀態,包括所有已完成的應用程式交易,以及所有已排入佇列並排清至磁碟的寫入作業。

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

如要建立磁碟的應用程式一致快照,請按照下列程序操作:

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

事前準備

  • 建立 Linux VM。
  • 更新訪客環境。
  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 Cloud de Confiance by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    選取這個頁面上範例的預計用途分頁:

    控制台

    使用 Cloud de Confiance 控制台存取 Cloud de Confiance by S3NS 服務和 API 時,不需要設定驗證。

    gcloud

    1. 安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init
  • 設定預設區域和可用區。
  • REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。

    詳情請參閱 Cloud de Confiance 驗證說明文件中的「使用 REST 進行驗證」一節。

所需角色和權限

如要取得建立應用程式一致性快照所需的權限,請要求管理員授予您專案的下列 IAM 角色:

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

這些預先定義的角色具備建立應用程式一致性快照所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

您必須具備下列權限,才能建立應用程式一致快照:

  • compute.snapshots.create 專案
  • compute.disks.createSnapshot 磁碟

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

支援的磁碟類型

您可以為連結至 Linux 執行個體的永久磁碟磁碟區,建立與應用程式一致的快照。

Hyperdisk 磁碟區不支援 guest-flush 或磁碟區陰影複製服務 (VSS)。如要為 Hyperdisk 磁碟區建立應用程式一致性快照,您必須先手動暫停應用程式,再建立快照。詳情請參閱「手動建立應用程式一致性快照」。

限制

在 Linux 上建立與應用程式一致的快照時,有下列限制:

  • 應用程式一致性取決於自訂快照前/後指令碼的行為,而非快照作業本身。
  • 在快照建立要求中使用 guest-flush 選項時,如果指令碼傳回錯誤或達到逾時限制,系統就不會建立快照。
  • Hyperdisk 磁碟區不支援 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-attached disks:以半形逗號分隔的 <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 的快照

使用 Cloud de Confiance 控制台、Google Cloud CLI 或 REST,建立啟用 guest-flush 選項的快照。這樣一來,系統就會在擷取快照前後,執行快照前和快照後指令碼。

控制台

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

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

    選擇「封存快照」,以更符合成本效益的方式保留資料。

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

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

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

    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:快照類型,可以是 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.s3nsapis.fr/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.s3nsapis.fr/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.s3nsapis.fr/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 磁碟區,確保備份內容與應用程式一致。如要為排程快照啟用應用程式一致性快照,請在建立快照排程時使用 --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. 前往Cloud de Confiance 控制台的「Logs Explorer」頁面:

    前往 Logs Explorer

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

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

    快照建立記錄查詢。

檢查設定

後續步驟