管理區域磁碟的故障

區域性永久磁碟和 Hyperdisk Balanced High Availability 都是儲存空間選項,可在區域內的兩個可用區之間同步複製資料。在 Compute Engine 中實作高可用性 (HA) 服務時,您可以將區域永久磁碟或 Hyperdisk Balanced High Availability 做為建構要素。

本文說明可能導致區域硬碟無法運作的各種情況,以及如何管理這些情況。

事前準備

  • 查看區域性磁碟和容錯移轉的基本概念。詳情請參閱「 關於同步磁碟複製」。
  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

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

    gcloud

    1. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init

      若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

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

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

      安裝 Google Cloud CLI。

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

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

必要的角色

如要取得使用副本復原檢查點遷移區域磁碟資料所需的權限,請要求管理員授予您下列 IAM 角色:

  • 如要使用副本復原檢查點遷移區域磁碟資料,請在專案中授予「Compute 執行個體管理員 (v1)」() 角色 (roles/compute.instanceAdmin.v1)。
  • 如要查看區域性磁碟指標,請執行下列任一操作:
    • 專案的「Monitoring 檢視者」 (roles/monitoring.viewer)
    • 專案的監控編輯者 (roles/monitoring.editor)

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

這些預先定義的角色具備使用副本復原檢查點遷移區域磁碟資料所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要使用副本復原檢查點遷移區域磁碟資料,必須具備下列權限:

  • 如要從副本復原檢查點建立標準快照,請按照下列步驟操作:
    • 專案有 compute.snapshots.create
    • 磁碟上的 compute.disks.createSnapshot
  • 如要依據標準快照建立新的區域磁碟: compute.disks.create 在要建立新磁碟的專案中
  • 如要將 VM 遷移至新磁碟,請按照下列步驟操作:
    • compute.instances.attachDisk 在 VM 執行個體上
    • compute.disks.use permission 在新建立的磁碟上

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

限制

您無法對處於多重寫入模式的磁碟使用 force-attach 作業。

失敗情況

使用區域性磁碟時,裝置完全複製後,資料會自動複製到區域中的兩個可用區。當寫入作業在兩個副本中都永久保留時,系統會向運算執行個體確認寫入作業。

如果複製到某個可用區的作業失敗或速度緩慢一段時間,磁碟複製狀態就會切換為「已降級」。在這種模式下,寫入作業會先永久保存在一個副本中,然後才會確認。

如果 Compute Engine 偵測到可以繼續複製,系統就會將一個備用資源進入降級狀態後寫入的資料,同步至兩個可用區,磁碟也會恢復完全複製狀態。這項轉換作業完全自動化。

裝置處於降級狀態時,RPO 和 RTO 未定義。為盡量減少磁碟處於降級狀態時發生故障造成的資料和可用性損失,建議您使用標準快照定期備份區域磁碟。您可以還原快照來復原磁碟。

可用區故障

複製磁碟 (或區域磁碟) 會同步複製到主要和次要可用區的磁碟副本。可用區副本無法使用時,就會發生可用區故障。由於下列原因,主要或次要區域可能會發生區域性故障:

  • 可用區服務中斷。
  • 副本的寫入作業過於緩慢。

下表列出區域磁碟可能發生的各種區域故障情境,以及每個情境的應變措施建議。在上述每種情況中,我們都假設主要區域副本在初始狀態下運作正常且已同步。

磁碟的初始狀態 失敗 磁碟的新狀態 失敗的後果 處理方式

主要副本:已同步

次要副本:已同步

磁碟狀態:已完全複製

磁碟連接位置:主要可用區

主要可用區

主要副本:未同步或無法使用

次要副本:已同步

磁碟狀態:已降級

磁碟連接位置:主要可用區

  • 次要可用區中的副本仍保持正常運作,且擁有最新的磁碟資料。
  • 主要可用區中的副本健康狀態不良,不保證含有所有磁碟資料。
強制將磁碟連接至健康狀態良好的次要可用區中的 VM,藉此容錯移轉磁碟。

主要副本:已同步

次要副本:已同步

磁碟狀態:已完全複製

磁碟連接位置:主要可用區

次要可用區

主要副本:已同步

次要副本:未同步或無法使用

磁碟狀態:已降級

磁碟連接位置:主要可用區

  • 主要區域中的副本仍保持正常運作,且具有最新的磁碟資料。
  • 次要可用區中的副本狀況不佳,無法保證擁有所有磁碟資料。
您不需要採取任何行動。Compute Engine 會在次要可用區中的健康狀態不良副本恢復可用狀態後,重新同步處理該副本。

主要副本:已同步

次要副本:不同步且無法使用

磁碟狀態:已降級

磁碟連接位置:主要可用區

主要可用區

主要副本:已同步處理,但無法使用

次要副本:不同步

磁碟狀態:無法使用

磁碟連接位置:主要可用區

  • 兩個可用區副本都無法使用,因此無法放送流量。 磁碟會無法使用。
  • 如果可用區服務中斷或副本故障只是暫時性問題,就不會遺失任何資料。
  • 如果可用區中斷或副本故障的情況無法解決,則在磁碟降級期間寫入健康副本的所有資料都會永久遺失。
Google 建議您 使用現有的標準快照並建立新磁碟 ,以復原資料。最佳做法是使用標準快照,定期備份區域磁碟。

主要副本:已同步

次要副本: 正在趕上進度,但可用

磁碟狀態:趕上進度

磁碟連接位置:主要可用區

主要可用區

主要副本:無法使用

次要副本: 正在趕上進度,但可用

磁碟狀態:無法使用

磁碟連接位置:主要可用區

  • 兩個區域性副本都無法提供流量。磁碟會無法使用。
  • 如果可用區服務中斷或副本故障只是暫時性問題,磁碟會在主要副本恢復可用狀態後繼續運作。
  • 如果可用區服務中斷或副本故障的情況無法解決,磁碟就會無法使用。

主要副本:已同步

次要副本:未同步,但可使用

磁碟狀態:已降級

磁碟連接位置:主要可用區

主要可用區

主要副本:無法使用

次要副本:不同步但可用

磁碟狀態:無法使用

磁碟連接位置:主要可用區

  • 兩個區域性副本都無法提供流量。磁碟無法使用。
  • 如果可用區服務中斷或備用資源故障是暫時性的,當主要備用資源恢復運作後,磁碟就會繼續運作。
  • 如果可用區服務中斷或副本故障是永久性的,磁碟就會無法使用。

應用程式和 VM 故障

如果 VM 設定錯誤、OS 升級失敗或其他應用程式故障導致服務中斷,您可以將地區磁碟force-attach附加至與健全副本位於同一可用區的運算執行個體。

故障類別和 (機率) 失敗類型 動作
應用程式故障 (高)
  • 沒有回應的應用程式
  • 因應用程式管理動作 (例如升級) 而失敗
  • 人為錯誤 (例如 SSL 憑證或存取控制清單等參數設定錯誤)
應用程式控制層可根據 健康狀態檢查門檻觸發 容錯移轉。
VM 故障 (中)
  • 基礎架構或硬體故障
  • CPU 爭用、中斷網路連線,導致 VM 無回應
VM 通常會 自動修復。應用程式控制層可根據 健康狀態檢查的門檻觸發 容錯移轉。
應用程式毀損 (低至中) 應用程式資料毀損
(例如因應用程式錯誤或 OS 升級失敗)
應用程式復原:

使用 force-attach 容錯移轉區域性磁碟

如果主要可用區故障,您可以使用強制附加作業,將區域性永久磁碟或 Hyperdisk Balanced High Availability 磁碟區容錯移轉至其他可用區的運算執行個體。

如果主要區域發生故障,您可能無法從執行個體卸離磁碟,因為系統無法連線至執行個體來執行卸離作業。強制附加功能可讓您將區域永久磁碟 或 Hyperdisk Balanced High Availability 磁碟區附加至運算執行個體,即使該磁碟區已附加至其他執行個體也沒問題。

完成強制連結作業後,Compute Engine 會禁止原始執行個體寫入區域磁碟。使用強制附加作業,即可安全地重新存取資料並復原服務。執行強制附加作業後,您也可以選擇手動關閉 VM 執行個體。

如要強制將現有磁碟附加至運算執行個體,請選取下列其中一項工作:

控制台

  1. 前往「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體

  2. 選取專案。

  3. 按一下要變更的執行個體名稱。

  4. 在詳細資料頁面中,按一下「編輯」。

  5. 在「Additional disks」(其他磁碟) 專區中,按一下「Attach additional disk」(連結其他磁碟)。

  6. 從下拉式清單中選取區域或同步複製的磁碟。

  7. 如要強制連接磁碟,請勾選「Force-attach disk」(強制連接磁碟) 核取方塊。

  8. 依序按一下 [完成] 及 [儲存]。

解決故障問題後,您可以按照相同步驟將磁碟 force-attach 回原始運算執行個體。

gcloud

在 gcloud CLI 中,使用 instances attach-disk 指令將副本磁碟連接至運算執行個體。請加入 --disk-scope 旗標,並設為 regional。

gcloud compute instances attach-disk VM_NAME \
    --disk DISK_NAME --disk-scope regional \
    --force-attach

更改下列內容:

  • VM_NAME:區域中新運算執行個體的名稱
  • DISK_NAME:區域性磁碟的名稱

force-attach 磁碟後,請視需要掛接磁碟上的檔案系統。運算執行個體可以使用強制連接的磁碟,繼續對磁碟執行讀取和寫入作業。

REST

建構對 compute.instances.attachDisk 方法的 POST 要求,並加入您剛建立的區域磁碟網址。如要將磁碟附加至新的運算執行個體,如果主要運算執行個體仍附加磁碟,則必須使用 forceAttach=true 查詢參數。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/attachDisk?forceAttach=true

{
 "source": "projects/PROJECT_ID/regions/REGION/disks/DISK_NAME"
}

更改下列內容:

  • PROJECT_ID:專案 ID
  • ZONE:運算執行個體的位置
  • VM_NAME:要新增區域磁碟的運算執行個體名稱
  • REGION:區域磁碟所在的區域
  • DISK_NAME:區域磁碟的名稱

連接區域磁碟後,請視需要將檔案系統掛接至磁碟。運算執行個體可以使用副本磁碟,繼續對磁碟執行讀取和寫入作業。

將開機磁碟容錯移轉至次要執行個體

一個運算執行個體只能附加一個開機磁碟。對區域性開機磁碟進行容錯移轉時,請根據次要運算執行個體是否已存在,採用下列其中一種方法:

  • 如果沒有作用中的待命 VM,請在次要可用區中建立新的執行個體。建立第二個執行個體時,請使用區域磁碟做為開機磁碟,如「建立具有區域開機磁碟的新 VM」一文所述。

  • 如果次要可用區中有待命 VM,請按照「將區域性開機磁碟連接至 VM」一節的說明,將待命 VM 的開機磁碟替換為區域性開機磁碟。

使用副本復原檢查點復原區域性磁碟

副本復原檢查點代表完全複製的區域性 Persistent Disk 或 Hyperdisk Balanced High Availability 磁碟區,最近一次發生當機時的一致性時間點。Compute Engine 可讓您從降級區域磁碟的副本復原檢查點建立標準快照。

在極少數情況下,如果磁碟效能降低,與最新磁碟資料同步的區域副本也可能在不同步的副本趕上進度前發生故障。您無法強制將磁碟附加至任一區域的運算執行個體。複製的磁碟會無法使用,您必須將資料遷移至新磁碟。在這種情況下,如果磁碟沒有任何可用的標準快照,您仍可使用從副本復原檢查點建立的標準快照,從不完整的副本復原磁碟資料。如需詳細步驟,請參閱「遷移及復原磁碟資料的程序」。

遷移及復原磁碟資料的程序

如要使用副本復原檢查點復原及遷移區域磁碟的資料,請按照下列步驟操作:

  1. 從受影響的 區域性永久磁碟或 Hyperdisk Balanced High Availability 磁碟區的副本復原檢查點,建立標準快照。

    您只能使用 gcloud CLI 或 REST,從磁碟的副本復原檢查點建立標準快照。

    gcloud

    如要使用副本復原檢查點建立快照,請使用 gcloud compute snapshots create 指令 。加入 --source-disk-for-recovery-checkpoint 旗標,指定要使用副本復原檢查點建立快照。排除 --source-disk 和 --source-disk-region 參數。

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-for-recovery-checkpoint=SOURCE_DISK \
        --source-disk-for-recovery-checkpoint-region=SOURCE_REGION \
        --storage-location=STORAGE_LOCATION \
        --snapshot-type=SNAPSHOT_TYPE
    

    替換下列內容:

    • DESTINATION_PROJECT_ID:要建立快照的專案 ID。
    • SNAPSHOT_NAME:快照名稱。
    • SOURCE_DISK:要用來建立快照的來源磁碟名稱或完整路徑。如要指定來源磁碟的完整路徑,請使用下列語法:
        projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/disks/SOURCE_DISK_NAME
        

      如果指定來源磁碟的完整路徑,可以排除 --source-disk-for-recovery-checkpoint-region 標記。如果只指定磁碟名稱,則必須加入這個旗標。

      如要根據其他專案中來源磁碟的復原檢查點建立快照,必須指定來源磁碟的完整路徑。

    • SOURCE_PROJECT_ID:來源磁碟的專案 ID,您要使用該磁碟的檢查點建立快照。
    • SOURCE_REGION:來源磁碟的區域,您要使用該磁碟的檢查點建立快照。
    • SOURCE_DISK_NAME:來源磁碟的名稱,您要使用該磁碟的檢查點建立快照。
    • STORAGE_LOCATION:選用:要儲存快照的 Cloud Storage 多區域或 Cloud Storage 區域。你只能指定一個儲存位置。
      只有在想覆寫快照設定中預先定義或自訂的預設儲存位置時,才使用 --storage-location 標記。
    • SNAPSHOT_TYPE:快照類型,可以是 STANDARD 或 ARCHIVE。如未指定快照類型,系統會建立 STANDARD 快照。

    您可以使用副本復原檢查點,僅在降級磁碟上建立快照。如果裝置已完全複製,但您嘗試從副本復原檢查點建立快照,系統會顯示下列錯誤訊息:

    The device is fully replicated and should not create snapshots out of a recovery checkpoint. Please
    create regular snapshots instead.
    

    REST

    如要使用副本復原檢查點建立快照,請向 snapshots.insert 方法傳送 POST 要求。排除 sourceDisk 參數,改為加入 sourceDiskForRecoveryCheckpoint 參數,指定要使用檢查點建立快照。

    POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots
    
    {
      "name": "SNAPSHOT_NAME",
      "sourceDiskForRecoveryCheckpoint": "projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/disks/SOURCE_DISK_NAME",
      "storageLocations": "STORAGE_LOCATION",
      "snapshotType": "SNAPSHOT_TYPE"
    }
    

    取代下列項目:

    • DESTINATION_PROJECT_ID:要建立快照的專案 ID。
    • SNAPSHOT_NAME:快照名稱。
    • SOURCE_DISK:要用來建立快照的來源磁碟名稱或完整路徑。如要指定來源磁碟的完整路徑,請使用下列語法:
        projects/SOURCE_PROJECT_ID/regions/SOURCE_REGION/disks/SOURCE_DISK_NAME
        

      如果指定來源磁碟的完整路徑,可以排除 --source-disk-for-recovery-checkpoint-region 標記。如果只指定磁碟名稱,則必須加入這個旗標。

      如要根據其他專案中來源磁碟的復原檢查點建立快照,必須指定來源磁碟的完整路徑。

    • SOURCE_PROJECT_ID:來源磁碟的專案 ID,您要使用該磁碟的檢查點建立快照。
    • SOURCE_REGION:來源磁碟的區域,您要使用該磁碟的檢查點建立快照。
    • SOURCE_DISK_NAME:來源磁碟的名稱,您要使用該磁碟的檢查點建立快照。
    • STORAGE_LOCATION:選用:要儲存快照的 Cloud Storage 多區域或 Cloud Storage 區域。你只能指定一個儲存位置。
      只有在想覆寫快照設定中預先定義或自訂的預設儲存位置時,才使用 storageLocations 參數。
    • SNAPSHOT_TYPE:快照類型,可以是 STANDARD 或 ARCHIVE。如未指定快照類型,系統會建立 STANDARD 快照。

    您可以使用副本復原檢查點,只在降級的磁碟上建立快照。如果裝置完全複製完畢,您嘗試從副本復原檢查點建立快照時,會看到下列錯誤訊息:

    The device is fully replicated and should not create snapshots out of a recovery checkpoint. Please
    create regular snapshots instead.
    

  2. 使用這個快照建立新的 區域性永久磁碟或 Hyperdisk Balanced High Availability 磁碟。建立新磁碟時,只要從快照將資料還原至新磁碟,即可從最新的副本復原檢查點復原所有資料。如需詳細步驟,請參閱「使用區域開機磁碟建立新執行個體」。

  3. 將所有 VM 工作負載遷移至新建立的磁碟,並驗證這些 VM 工作負載是否正常運作。詳情請參閱「跨可用區或區域移動 VM」。

將磁碟資料和 VM 復原及遷移至新建立的區域性永久磁碟或 Hyperdisk Balanced High Availability 磁碟後,即可繼續作業。

判斷副本復原檢查點提供的 RPO

本節說明如何判斷 區域性 Persistent Disk 或 Hyperdisk Balanced High Availability 磁碟區的最新副本復原檢查點所提供的 RPO。

可用區備用資源已完全同步

Compute Engine 大約每 15 分鐘會重新整理區域性 Persistent Disk 或Hyperdisk Balanced High Availability 磁碟區的副本復原檢查點。因此,當可用區副本完全同步時,RPO 約為 15 分鐘。

可用區副本不同步

您無法查看副本復原檢查點的確切建立和重新整理時間戳記。不過,您可以使用下列資料,估算最新檢查點提供的近似 RPO:

  • 完整複製磁碟狀態的最新時間戳記:您可以使用區域磁碟 replica_state 指標的 Cloud Monitoring 資料,取得這項資訊。檢查不同步的副本的 replica_state 指標資料,判斷副本何時不同步。由於 Compute Engine 每 15 分鐘會重新整理一次磁碟的檢查點,因此最近一次重新整理檢查點的時間可能是在這個時間戳記前約 15 分鐘。
  • 最近一次寫入作業的時間戳記:如要取得這項資訊,請使用區域磁碟的 write_ops_count 指標 Cloud Monitoring 資料。查看 write_ops_count 指標資料,判斷磁碟的最新寫入作業。

確定這些時間戳記後,請使用下列公式,計算磁碟副本復原檢查點提供的約略 RPO。如果計算值小於零,則 RPO 實際上為零。

Approximate RPO provided by the latest checkpoint =
(Most recent write operation timestamp - (Most recent timestamp of the fully
replicated disk state - 15 minutes))

後續步驟