本頁說明如何設定及執行 Google Distributed Cloud (GDC) 氣隙式區塊儲存空間磁碟區的非同步複製作業。
非同步複製功能可用於將資料從一個 GDC 可用區複製到另一個可用區。如果來源區域資料無法使用,複製的資料可用於容錯移轉。請注意,建立容錯移轉後,原始磁碟區就無法複製到相同的目的地磁碟區。而是必須建立新的複寫關係。
事前準備
如要在兩個區域之間啟用非同步區塊複製功能,基礎架構營運商 (IO) 必須先從各區域對等互連相關儲存空間叢集,建立必要的儲存空間基礎架構。接著,他們需要對等互連與佈建區塊儲存空間的機構相關聯的儲存空間虛擬機器。
然後,請確認您具備 app-volume-replication-admin-global
角色,可管理 VolumeReplicationRelationship 資源。如果無法使用全域 API,則可使用 volume-replication-admin
角色直接修改區域 VolumeReplicationRelationshipReplica 資源。
設定複製作業
VolumeReplicationRelationship 自訂資源 (CR) 會提供非同步區塊複製 API。這則罐頭回應存在於全域管理 API 中。如要為特定區塊裝置啟用複製功能,必須在全域管理 API 上建立 VolumeReplicationRelationship CR:
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
name: my-pvc-repl
namespace: my-project
spec:
source:
pvc:
clusterRef: my-pvc-cluster
pvcRef: my-block-pvc
zoneRef: xx-xxxx-zone1
destination:
pvc:
clusterRef: my-pvc-cluster
zoneRef: xx-xxxx-zone2
這個範例假設您在名為 my-org
的機構中建立名為 my-project
的專案,且已佈建名為 my-block-pvc
的 PVC。clusterRef
是 PVC 所在的叢集名稱。
規格的 source
和 destination
欄位分別指出資料的來源和目的地。在本例中,資料會從 xx-xxxx-zone1
複製到 xx-xxxx-zone2
。
從全域 API 擷取 VolumeReplicationRelationship
CR,即可檢查複寫關係的狀態。請參考以下範例。請注意,為簡化起見,輸出內容已遭截斷:
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
name: my-pvc-repl
namespace: my-project
spec:
destination:
pvc:
clusterRef: my-pvc-cluster
zoneRef: xx-xxxx-zone2
source:
pvc:
clusterRef: my-pvc-cluster
pvcRef: my-block-pvc
zoneRef: xx-xxxx-zone1
status:
zones:
- name: xx-xxxx-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: xx-xxxx-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。如果是 v2 機構,這會是管理 API 伺服器。如果是第 1 版機構,這會是機構管理員叢集。舉例來說,如果建立的 VolumeReplicationRelationship
指定 xx-xxxx-zone2
為目的地區域,且 PVC 存在於 my-org
機構中,則 VolumeFailover
CR 會在 xx-xxxx-zone2
的 my-org
管理平面中建立。這會中斷兩個區域之間的複寫關係,並允許工作負載掛接目的地區域中的 PVC:
apiVersion: storage.gdc.goog/v1
kind: VolumeFailover
metadata:
name: my-pvc-failover
namespace: my-project
spec:
volumeReplicationRelationshipRef: my-pvc-repl
容錯移轉成功後,CR 的狀態會反映這項結果:
apiVersion: storage.gdc.goog/v1
kind: VolumeFailover
metadata:
name: my-pvc-failover
namespace: my-project
spec:
volumeReplicationRelationshipRef: my-pvc-repl
status:
state: Completed
建立容錯移轉後,my-pvc-repl
VolumeReplicationRelationship
會轉換為 Broken Off
狀態。xx-xxxx-zone2
中的 PVC 現在可掛接。
此時,VolumeReplicationRelationship
會與下列範例類似。同樣地,為簡化起見,以下只列出部分輸出內容:
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
name: my-pvc-repl
namespace: my-project
spec:
destination:
pvc:
clusterRef: my-pvc-cluster
zoneRef: xx-xxxx-zone2
source:
pvc:
clusterRef: my-pvc-cluster
pvcRef: my-block-pvc
zoneRef: xx-xxxx-zone1
status:
zones:
- name: xx-xxxx-zone1
replicaStatus:
message: SnapMirror relationship has been broken off
replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
state: Broken Off
- name: xx-xxxx-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 執行的最後一個動作。
調整磁碟區大小
如果來源磁碟區在任何時間點調整大小,系統也應一併調整目的地區域中對應的磁碟區大小 (建立 VolumeReplicatioRelationship 時,系統會代表使用者建立該磁碟區)。
複製虛擬機器磁碟
VolumeReplicationRelationship 也會為非同步虛擬機器磁碟 (VM 磁碟) 複製 API 提供服務。要複製的來源磁碟稱為主要磁碟。複製作業的目標磁碟稱為次要磁碟。在主要磁碟上啟動非同步複製作業時,系統會自動建立次要磁碟。
要求權限和存取權
如要複製 VM 磁碟,您必須具備專案虛擬機器管理員角色。按照步驟驗證您在 VM 磁碟所在專案的命名空間中,是否具備專案 VirtualMachine 管理員 (project-vm-admin
) 角色。
如要使用 gdcloud CLI 執行 VM 作業,請要求專案 IAM 管理員同時指派專案 VirtualMachine 管理員角色和專案檢視者 (project-viewer
) 角色。
啟動非同步複製
使用 gdcloud 或 kubectl
啟動 VM 磁碟的非同步複製作業。
gdcloud
gdcloud compute disks start-async-replication PRIMARY_DISK_NAME \
--project PROJECT --zone PRIMARY_ZONE \
--secondary-disk SECONDARY_DISK_NAME --secondary-zone SECONDARY_ZONE
更改下列內容:
變數 | 定義 |
---|---|
PRIMARY_DISK_NAME |
要複製的來源磁碟名稱。 |
PROJECT |
主要磁碟的 GDC 專案。 |
PRIMARY_ZONE |
主要磁碟所在的區域。 |
SECONDARY_DISK_NAME |
要複製到的目的地磁碟名稱。 |
SECONDARY_ZONE |
次要磁碟所在的區域。 |
API
kubectl --kubeconfig GLOBAL_MANAGEMENT_API \
apply -f - <<EOF
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
name: VRR_NAME
namespace: PROJECT
spec:
source:
virtualMachineDisk:
virtualMachineDiskRef: PRIMARY_DISK_NAME
zoneRef: PRIMARY_ZONE
destination:
volumeOverrideName: SECONDARY_DISK_NAME
zoneRef: SECONDARY_ZONE
EOF
更改下列內容:
變數 | 定義 |
---|---|
GLOBAL_MANAGEMENT_API |
全域管理 API 伺服器的 kubeconfig 檔案。 |
VRR_NAME |
磁碟區複寫關係的名稱。 停止非同步複製時,必須使用相同的名稱。 |
PROJECT |
主要磁碟的 GDC 專案。 |
PRIMARY_DISK_NAME |
要複製的來源磁碟名稱。 |
PRIMARY_ZONE |
主要磁碟所在的區域。 |
SECONDARY_DISK_NAME |
要複製到的目的地磁碟名稱。 |
SECONDARY_ZONE |
次要磁碟所在的區域。 |
列出非同步複製關係
使用 kubectl
列出專案中的非同步複製關係。
kubectl --kubeconfig GLOBAL_MANAGEMENT_API get volumereplicationrelationships -n my-project
更改下列內容:
- PROJECT:主要磁碟的 GDC 專案。
- GLOBAL_MANAGEMENT_API:全域管理 API 伺服器的 kubeconfig 檔案。
輸出結果如下所示:
NAME AGE SOURCE ZONE SOURCE PVC SOURCE PVC CLUSTER SOURCE VM DISK DEST. ZONE DEST. PVC CLUSTER DEST. VOLUME OVERRIDE STATE
my-vrr 3m21s zone1 my-vm-boot-disk zone2 my-vm-boot-disk-replica
test-vrr 7s zone1 test-vm-boot-disk zone2
停止非同步複製
使用 gdcloud 或 kubectl
停止主要 VM 磁碟的非同步複製作業。
gdcloud
gdcloud compute disks stop-async-replication PRIMARY_DISK_NAME \
--project PROJECT --zone PRIMARY_ZONE
更改下列內容:
變數 | 定義 |
---|---|
PRIMARY_DISK_NAME |
要複製的來源磁碟名稱。 |
PROJECT |
主要磁碟的 GDC 專案。 |
PRIMARY_ZONE |
主要磁碟所在的區域。 |
API
找出與主要 VM 磁碟對應的磁碟區複寫關係。
kubectl --kubeconfig GLOBAL_MANAGEMENT_API get volumereplicationrelationships \ -n PROJECT -o json | \ jq -r '.items[] | select(.spec.source.virtualMachineDisk.virtualMachineDiskRef == "PRIMARY_DISK_NAME" and .spec.source.zoneRef == "PRIMARY_ZONE") | .metadata.name'
刪除上一步列出的每個磁碟區複製關係。將 VRR_NAMES 替換為磁碟區複寫關係的名稱。
kubectl --kubeconfig GLOBAL_MANAGEMENT_API delete volumereplicationrelationships \ -n PROJECT VRR_NAMES
更改下列內容:
變數 定義 GLOBAL_MANAGEMENT_API
全域管理 API 伺服器的 kubeconfig 檔案。 PROJECT
主要磁碟的 GDC 專案。 PRIMARY_DISK_NAME
要複製的來源磁碟名稱。 PRIMARY_ZONE
主要磁碟所在的區域。
如果來源區域因故無法使用,請建立磁碟區容錯移轉,停止複製作業。
將複製的磁碟連接至 VM
啟用複製功能後,次要磁碟就無法連接至 VM。停止複製後,您可以將次要磁碟連結至新建立的 VM 或現有 VM。