Questa pagina descrive come configurare ed eseguire la replica asincrona dei volumi di archiviazione a blocchi isolati di Google Distributed Cloud (GDC).
La replica asincrona viene utilizzata per replicare i dati da una zona GDC a un'altra. I dati replicati possono essere utilizzati per il failover se i dati della zona di origine non sono più disponibili. Tieni presente che, una volta creato un failover, il volume originale non può essere replicato nello stesso volume di destinazione. È necessario creare una nuova relazione di replica.
Per gli amministratori della piattaforma che gestiscono i PVC utilizzando l'API KRM, consulta Replica asincrona dei volumi.
Prima di iniziare
Per utilizzare la replica asincrona dei blocchi, l'operatore dell'infrastruttura (IO) deve prima configurare due zone per la replica asincrona.Poi, assicurati di disporre del ruolo app-volume-replication-admin-global per amministrare la risorsa VolumeReplicationRelationship. Nei casi in cui l'API globale non è disponibile, il ruolo volume-replication-admin può essere utilizzato per modificare direttamente la risorsa VolumeReplicationRelationshipReplica zonale.
Configurare la replica
La risorsa personalizzata (CR) VolumeReplicationRelationship gestisce l'API di replica asincrona dei blocchi. Questa risposta predefinita esiste nell'API di gestione globale. Per abilitare la replica per un determinato dispositivo a blocchi, è necessario creare una CR VolumeReplicationRelationship nell'API di gestione globale:
Replicate 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
Sostituisci quanto segue:
MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale.VRR_NAME: il nome della risorsa VolumeReplicationRelationship.PROJECT: lo spazio dei nomi della risorsa Project.SOURCE_USER_CLUSTER_NAME: il nome della risorsa cluster utente di origine a cui connettersi.PVC_NAME: il nome della risorsa PersistentVolumeClaim.SOURCE_ZONE_NAME: il nome della risorsa di zona di origine.DESTINATION_USER_CLUSTER_NAME: il nome della risorsa cluster utente di destinazione a cui connettersi.DESTINATION_ZONE_NAME: il nome della risorsa di zona di destinazione.
Questo esempio presuppone che sia stato creato un progetto denominato PROJECT in un'organizzazione denominata my-org e che sia già stato eseguito il provisioning di un PVC denominato PVC_NAME. SOURCE_USER_CLUSTER_NAME è il nome del cluster di origine in cui esiste il PVC e DESTINATION_USER_CLUSTER_NAME è il nome del cluster di destinazione in cui esisterà un nuovo PVC.
I campi source e destination della specifica indicano rispettivamente da e a dove vengono replicati i dati. In questo esempio, i dati vengono replicati da SOURCE_ZONE_NAME a DESTINATION_ZONE_NAME.
Replica i dischi delle macchine virtuali
VolumeReplicationRelationship gestisce anche l'API di replica asincrona del disco della macchina virtuale (disco VM).
Il disco di origine replicato è chiamato disco primario. Il disco di destinazione su cui viene eseguita la replica è chiamato disco secondario. L'avvio della replica asincrona su un disco primario crea automaticamente il disco secondario.
Richiedere autorizzazioni e accesso
Per replicare i dischi delle macchine virtuali, devi disporre del ruolo Amministratore macchine virtuali progetto. Segui i passaggi per verificare di disporre del ruolo Project VirtualMachine Admin (project-vm-admin) nello spazio dei nomi del progetto in cui si trova il disco della VM.
Per le operazioni sulle macchine virtuali utilizzando gcloud CLI, chiedi all'amministratore IAM del progetto di assegnarti sia il ruolo Amministratore macchine virtuali progetto sia il ruolo Visualizzatore progetto (project-viewer).
gdcloud
gdcloud compute disks start-async-replication PRIMARY_DISK_NAME \
--project PROJECT --zone PRIMARY_ZONE \
--secondary-disk SECONDARY_DISK_NAME --secondary-zone SECONDARY_ZONE
Sostituisci quanto segue:
| Variabile | Definizione |
|---|---|
PRIMARY_DISK_NAME |
Il nome del disco di origine in fase di replica. |
PROJECT |
Il progetto GDC del disco primario. |
PRIMARY_ZONE |
La zona in cui si trova il disco primario. |
SECONDARY_DISK_NAME |
Il nome del disco di destinazione in cui eseguire la replica. |
SECONDARY_ZONE |
La zona in cui deve risiedere il disco secondario. |
API VM Disk
Avvia la replica asincrona
Avvia la replica asincrona su un disco VM utilizzando kubectl.
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
Sostituisci quanto segue:
MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale.VRR_NAME: il nome della risorsa VolumeReplicationRelationship.PROJECT: lo spazio dei nomi della risorsa Project.VIRTUAL_MACHINE_DESTINATION_DISK_NAME: il nome della risorsa VirtualMachineDisk nella destinazione.DESTINATION_ZONE_NAME: il nome della risorsa di zona di destinazione.VIRTUAL_MACHINE_SOURCE_DISK_NAME: il nome della risorsa VirtualMachineDisk nell'origine.SOURCE_ZONE_NAME: il nome della risorsa di zona di origine.
Questo esempio presuppone che un progetto denominato PROJECT venga creato in un'organizzazione denominata my-org e che un VirtualMachineDisk denominato VIRTUAL_MACHINE_SOURCE_DISK_NAME sia già stato eseguito il provisioning per la risorsa VirtualMachine.
I campi source e destination della specifica indicano rispettivamente da e a dove vengono replicati i dati. In questo esempio, i dati vengono replicati da SOURCE_ZONE_NAME a DESTINATION_ZONE_NAME.
Verifica
Controlla lo stato della relazione di replica recuperando la CR VolumeReplicationRelationship dall'API globale. Fai riferimento all'esempio seguente. Tieni presente che l'output è stato troncato per semplificazione:
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \
-n PROJECT -o yaml
L'output è simile al seguente:
API PVC
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
API VM Disk
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
Crea failover
Se la zona di origine non è disponibile per qualsiasi motivo, è possibile creare una VolumeFailover CR nel piano di gestione dell'organizzazione della zona di destinazione. Per un'organizzazione v2, questo sarebbe il server API di gestione. Per un'organizzazione v1, questo sarebbe il cluster di amministrazione dell'organizzazione. Ad esempio, se è stato creato un VolumeReplicationRelationship che specifica zone2 come zona di destinazione e esiste un PVC o VirtualMachineDisk nell'organizzazione my-org, viene creato il CR VolumeFailover nel piano di gestione my-org in zone2. In questo modo, la relazione di replica tra le due zone viene interrotta e un workload può montare la PVC o VirtualMachineDisk nella zona di destinazione:
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
Sostituisci quanto segue:
FAILOVER_NAME: il nome della risorsa VolumeFailover.MANAGEMENT_API_SERVER: il percorso kubeconfig del server API zonale.VRR_NAME: il nome della risorsa VolumeReplicationRelationship.PROJECT: lo spazio dei nomi della risorsa Project.
Successivamente, un failover riuscito si riflette nello stato del CR:
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumefailover FAILOVER_NAME \
-n PROJECT -o yaml
L'output è simile al seguente:
apiVersion: storage.gdc.goog/v1 kind: VolumeFailover metadata: name: my-failover namespace: my-project spec: volumeReplicationRelationshipRef: my-vrr-repl status: state: CompletedDopo la creazione del failover,
my-vrr-replVolumeReplicationRelationshippassa allo statoBroken Off. Il PVC o VirtualMachineDisk inzone2ora può essere montato.A questo punto, il
VolumeReplicationRelationshipsarà simile all'esempio seguente. Anche in questo caso, l'output è stato troncato per semplificare la procedura:kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \ -n PROJECT -o yamlL'output è simile al seguente:
API PVC
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
API VM Disk
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
Ora puoi eliminare in sicurezza
VolumeReplicationRelationshipperché è l'unica azione rimanente che può essere eseguita su questa richiesta di modifica.kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationship VRR_NAME \ -n PROJECT
Ridimensionare i volumi
Se in un determinato momento il volume di origine viene ridimensionato, devi ridimensionare anche il volume corrispondente nella zona di destinazione in modo che corrisponda. Il volume della zona di destinazione viene creato quando crei VolumeReplicationRelationship.
Consulta la documentazione Espandi i dischi VM o Espandi la capacità del volume per ridimensionare lo spazio di archiviazione nelle zone di origine e di destinazione.
Elenca le relazioni di replica asincrona
Elenca le relazioni di replica asincrona in un progetto utilizzando kubectl.
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationships -n PROJECT
Sostituisci quanto segue:
- PROJECT: Il progetto GDC del disco primario.
- MANAGEMENT_API_SERVER: il file kubeconfig per il server API di gestione zonale.
L'output è simile al seguente:
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
Interrompi la replica asincrona
Arresta la replica asincrona su un disco VM primario utilizzando gcloud o kubectl.
gdcloud
gdcloud compute disks stop-async-replication PRIMARY_DISK_NAME \
--project PROJECT --zone PRIMARY_ZONE
Sostituisci quanto segue:
| Variabile | Definizione |
|---|---|
PRIMARY_DISK_NAME |
Il nome del disco di origine in fase di replica. |
PROJECT |
Il progetto GDC del disco primario. |
PRIMARY_ZONE |
La zona in cui si trova il disco primario. |
API
Trova le relazioni di replica del volume corrispondenti al disco della VM primaria.
kubectl --kubeconfig MANAGEMENT_API_SERVER 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'Elimina ciascuna delle relazioni di replica del volume elencate nel passaggio precedente. Sostituisci VRR_NAMES con i nomi delle relazioni di replica del volume.
kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationships \ -n PROJECT VRR_NAMESSostituisci quanto segue:
Variabile Definizione MANAGEMENT_API_SERVERIl file kubeconfig per il server API di gestione globale. PROJECTIl progetto GDC del disco primario. PRIMARY_DISK_NAMEIl nome del disco di origine in fase di replica. PRIMARY_ZONELa zona in cui si trova il disco primario.
Se la zona di origine non è disponibile per qualsiasi motivo, crea un failover del volume per interrompere la replica.
Collega il disco replicato a una VM
Mentre la replica è attiva, il disco secondario non può essere collegato a una VM. Una volta interrotta la replica, puoi collegare il disco secondario a una VM appena creata o a una VM esistente.