以非同步方式複製磁碟區

本頁面說明如何設定及執行 Google Distributed Cloud (GDC) 實體隔離區塊儲存空間磁碟區的非同步複製作業。

非同步複製功能用於將資料從一個 GDC 可用區複製到另一個可用區。如果來源可用區中的資料無法使用,這項複製資料可用於容錯移轉。請注意,建立容錯移轉後,原始磁碟區就無法設定為複製到同一個目的地磁碟區。而是必須建立新的複製關係。

如果應用程式操作員偏好使用 gdcloud CLI,請參閱「為應用程式操作員非同步複製磁碟區」。

事前準備

如要使用非同步區塊複製功能,基礎架構運作人員 (IO) 必須先設定兩個可用區,以便進行非同步複製。

接著,請確認您具備 volume-replication-admin-global 角色,可管理 VolumeReplicationRelationship 資源。如果無法使用全域 API,可以使用 app-volume-replication-admin 角色直接修改可用區 VolumeReplicationRelationshipReplica 資源。

設定複製功能

VolumeReplicationRelationship 自訂資源 (CR) 會為非同步區塊複製 API 提供服務。這個 CR 存在於全域 Management API 中。如要為特定區塊裝置啟用複製功能,必須在全域 Management API 建立 VolumeReplicationRelationship CR:

PVC API

必須提供專案繫結。請確認您已將專案附加至每個參與可用區中的各個叢集資源。

kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
  name: VRR_NAME
  namespace: PROJECT
spec:
  source:
    pvc:
      clusterRef: SOURCE_USER_CLUSTER_NAME
      pvcRef: PVC_NAME
    zoneRef: SOURCE_ZONE_NAME
  destination:
    pvc:
      clusterRef: DESTINATION_USER_CLUSTER_NAME
    zoneRef: DESTINATION_ZONE_NAME
EOF

更改下列內容:

  • MANAGEMENT_API_SERVER:可用區 API 伺服器的 kubeconfig 路徑。
  • VRR_NAME:VolumeReplicationRelationship 資源的名稱。
  • PROJECT:專案資源的命名空間。
  • SOURCE_USER_CLUSTER_NAME:要連結的來源使用者叢集資源名稱。
  • PVC_NAME:PersistentVolumeClaim 資源的名稱。
  • SOURCE_ZONE_NAME:來源可用區資源的名稱。
  • DESTINATION_USER_CLUSTER_NAME:要連結的目的地使用者叢集資源名稱。
  • DESTINATION_ZONE_NAME:目的地可用區資源的名稱。

這個範例假設您已在名為 my-org 的組織中建立名為 PROJECT 的專案,並已佈建名為 PVC_NAME 的 PVC。SOURCE_USER_CLUSTER_NAME 是 PVC 所在的來源叢集名稱,DESTINATION_USER_CLUSTER_NAME 則是新 PVC 所在的目的地叢集名稱。

規格的 source 和 destination 欄位分別指出資料複製的來源和目的地。在這個範例中,資料會從 SOURCE_ZONE_NAME 複製到 DESTINATION_ZONE_NAME。

VM Disk API

複製虛擬機器磁碟

VolumeReplicationRelationship也提供非同步虛擬機器磁碟 (VM 磁碟) 複製 API。要複製的來源磁碟稱為主要磁碟,複製的目的地磁碟稱為次要磁碟。在主要磁碟上啟動非同步複製作業時,系統會自動建立次要磁碟。

要求權限和存取權

如要複製 VM 磁碟,您必須具備專案 VirtualMachine 管理員角色。請按照步驟,確認您在 VM 磁碟所在的專案命名空間中,具備專案 VirtualMachine 管理員 (project-vm-admin) 角色。

如要使用 gdcloud CLI 執行 VM 作業,請要求 IAM 專案管理員為您指派專案虛擬機器管理員角色和專案檢視者 (project-viewer) 角色。

開始非同步複製

使用 kubectl 啟動 VM 磁碟的非同步複製作業。

kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
  name: VRR_NAME
  namespace: PROJECT
spec:
  destination:
    volumeOverrideName: VIRTUAL_MACHINE_DESTINATION_DISK_NAME
    zoneRef: DESTINATION_ZONE_NAME
  source:
    virtualMachineDisk:
      virtualMachineDiskRef: VIRTUAL_MACHINE_SOURCE_DISK_NAME
    zoneRef: SOURCE_ZONE_NAME
EOF

更改下列內容:

  • MANAGEMENT_API_SERVER:可用區 API 伺服器的 kubeconfig 路徑。
  • VRR_NAME:VolumeReplicationRelationship 資源的名稱。
  • PROJECT:專案資源的命名空間。
  • SOURCE_ZONE_NAME:來源可用區資源的名稱。
  • DESTINATION_ZONE_NAME:目的地可用區資源的名稱。
  • VIRTUAL_MACHINE_SOURCE_DISK_NAME:來源上的 VirtualMachineDisk 資源名稱。
  • VIRTUAL_MACHINE_DESTINATION_DISK_NAME:目的地 VirtualMachineDisk 資源的名稱。

這個範例假設名為 PROJECT 的專案是在名為 my-org 的組織中建立,且名為 VIRTUAL_MACHINE_SOURCE_DISK_NAME 的 VirtualMachineDisk 已佈建至 VirtualMachine 資源。

規格的 source 和 destination 欄位分別指出資料複製的來源和目的地。在這個範例中,資料會從 SOURCE_ZONE_NAME 複製到 DESTINATION_ZONE_NAME。

驗證

從全域 API 擷取 VolumeReplicationRelationship CR,檢查複製關係的狀態。請參考以下範例。請注意,為求簡化,輸出內容已經過截斷:

kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \
        -n PROJECT -o yaml

輸出結果會與下列內容相似:

PVC API

apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
  name: my-pvc-repl
  namespace: my-project
spec:
  destination:
    pvc:
      clusterRef: my-pvc-cluster
    zoneRef: zone2
  source:
    pvc:
      clusterRef: my-pvc-cluster
      pvcRef: my-block-pvc
    zoneRef: zone1
status:
  zones:
  - name: zone1
    replicaStatus:
      message: SnapMirror relationship has been established. Please check the destination
        zone for relationship state
      replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
      state: Established
  - name: zone2
    replicaStatus:
      exportedSnapshotName: snapmirror.c34f8845-e8c0-11ef-ad24-00a0b89f23fb_2150007868.2025-02-21_150000
      message: SnapMirror relationship has been successfully established
      replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
      state: Idle

VM Disk API

apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
  name: my-vmdisk-vrr
  namespace: my-project
spec:
  destination:
    zoneRef: zone2
  source:
    virtualMachineDisk:
      virtualMachineDiskRef: my-vmdisk
    zoneRef: zone1
status:
  zones:
  - name: zone1
    replicaStatus:
      message: SnapMirror relationship has been established. Please check the destination
        zone for relationship state
      replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
      state: Established
  - name: zone2
    replicaStatus:
      exportedSnapshotName: snapmirror.c34f8845-e8c0-11ef-ad24-00a0b89f23fb_2150007868.2025-02-21_150000
      message: SnapMirror relationship has been successfully established
      replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
      state: Idle

建立容錯移轉

如果來源可用區因任何原因而無法使用,可以在目的地可用區的組織管理層中建立 VolumeFailover CR。如果是第 2 版組織,這會是 Management API 伺服器。如果是第 1 版組織,這會是組織管理員叢集。舉例來說,如果建立的 VolumeReplicationRelationship 指定 zone2 為目的地可用區,且 my-org 組織中存在 PVC 或 VirtualMachineDisk,則系統會在 zone2 的 my-org 管理層中建立 VolumeFailover CR。這會中斷兩個可用區之間的複製關係,並允許工作負載掛接目的地可用區中的 PVC 或 VirtualMachineDisk:

  kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
  apiVersion: storage.gdc.goog/v1
  kind: VolumeFailover
  metadata:
    name: FAILOVER_NAME
    namespace: PROJECT
  spec:
    volumeReplicationRelationshipRef: VRR_NAME
  EOF

更改下列內容:

  • FAILOVER_NAME:VolumeFailover 資源的名稱。
  • MANAGEMENT_API_SERVER:可用區 API 伺服器的 kubeconfig 路徑。
  • VRR_NAME:VolumeReplicationRelationship 資源的名稱。
  • PROJECT:專案資源的命名空間。

  • 接著,CR 的狀態會反映容錯移轉成功:

    kubectl --kubeconfig MANAGEMENT_API_SERVER get volumefailover FAILOVER_NAME \
            -n PROJECT -o yaml
    
  • 輸出結果會與下列內容相似:

    apiVersion: storage.gdc.goog/v1
    kind: VolumeFailover
    metadata:
      name: my-failover
      namespace: my-project
    spec:
      volumeReplicationRelationshipRef: my-vrr-repl
    status:
        state: Completed
    
  • 建立容錯移轉後,my-vrr-repl VolumeReplicationRelationship 會轉換為 Broken Off 狀態。現在可以掛接 zone2 中的 PVC 或 VirtualMachineDisk。

  • 此時,VolumeReplicationRelationship 應與以下範例類似。同樣地,為求簡化,輸出內容已經過截斷:

    kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \
            -n PROJECT -o yaml
    
  • 輸出結果會與下列內容相似:

PVC API

apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
  name: my-vrr-repl
  namespace: my-project
spec:
  destination:
    pvc:
      clusterRef: my-pvc-cluster
    zoneRef: zone2
  source:
    pvc:
      clusterRef: my-pvc-cluster
      pvcRef: my-block-pvc
    zoneRef: zone1
status:
  zones:
  - name: zone1
    replicaStatus:
      message: SnapMirror relationship has been broken off
      replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
      state: Broken Off
  - name: zone2
    replicaStatus:
      exportedSnapshotName: snapmirror.c34f8845-e8c0-11ef-ad24-00a0b89f23fb_2150007868.2025-02-21_150000
      message: SnapMirror relationship has been broken off
      replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
      state: Broken Off

VM Disk API

apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
  name: my-vmdisk-vrr
  namespace: my-project
spec:
  destination:
    zoneRef: zone2
  source:
    virtualMachineDisk:
      virtualMachineDiskRef: my-vmdisk
    zoneRef: zone1
status:
  zones:
  - name: zone1
    replicaStatus:
      message: SnapMirror relationship has been broken off
      replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
      state: Broken Off
  - name: zone2
    replicaStatus:
      exportedSnapshotName: snapmirror.c34f8845-e8c0-11ef-ad24-00a0b89f23fb_2150007868.2025-02-21_150000
      message: SnapMirror relationship has been broken off
      replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
      state: Broken Off
  • 現在可以放心刪除 VolumeReplicationRelationship,因為這是這個 CR 唯一能執行的動作。

    kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationship VRR_NAME \
            -n PROJECT
    

調整磁碟區大小

如果來源磁碟區大小有所調整,目的地可用區中對應的磁碟區 (在建立 VolumeReplicationRelationship 時代表使用者建立) 也應調整為相同大小。

請參閱「擴充 VM 磁碟」說明文件或「擴充磁碟區容量」,瞭解如何調整來源和目的地可用區的儲存空間大小。