Cette page explique comment configurer et effectuer la réplication asynchrone des volumes de stockage de blocs isolés de Google Distributed Cloud (GDC).
La réplication asynchrone permet de répliquer des données d'une zone GDC à une autre. Les données répliquées peuvent être utilisées pour le basculement si les données de la zone source deviennent indisponibles. Notez qu'une fois le basculement créé, le volume d'origine ne peut pas être répliqué sur le même volume de destination. Une relation de réplication doit alors être créée.
Avant de commencer
Pour utiliser la réplication asynchrone en mode bloc, votre opérateur d'infrastructure doit d'abord configurer l'infrastructure de stockage entre les deux zones dans lesquelles la réplication est requise. Plus précisément, il doit d'abord appairer les clusters de stockage pertinents de chaque zone. Ensuite, il doit appairer la machine virtuelle de stockage associée à l'organisation dans laquelle le stockage de blocs est provisionné.
Assurez-vous ensuite de disposer du rôle app-volume-replication-admin-global pour administrer la ressource VolumeReplicationRelationship. Si l'API globale n'est pas disponible, le rôle volume-replication-admin peut être utilisé pour modifier directement la ressource zonale VolumeReplicationRelationshipReplica.
Configurer la réplication
La ressource personnalisée (CR) VolumeReplicationRelationship dessert l'API de réplication asynchrone en mode bloc. Cette CR existe dans l'API de gestion globale. Pour activer la réplication d'un appareil en mode bloc donné, une CR VolumeReplicationRelationship doit être créée sur l'API de gestion globale :
Répliquer l'API PVC
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
Remplacez les éléments suivants :
MANAGEMENT_API_SERVER: chemin d'accès kubeconfig du serveur d'API zonal.VRR_NAME: nom de la ressource VolumeReplicationRelationship.PROJECT: espace de noms de la ressource de projet.SOURCE_USER_CLUSTER_NAME: nom de la ressource de cluster d'utilisateur source à connecter.PVC_NAME: nom de la ressource PersistentVolumeClaim.SOURCE_ZONE_NAME: nom de la ressource de zone source.DESTINATION_USER_CLUSTER_NAME: nom de la ressource de cluster d'utilisateur de destination à connecter.DESTINATION_ZONE_NAME: nom de la ressource de zone de destination.
Cet exemple suppose qu'un projet nommé PROJECT est créé dans une organisation nommée my-org et qu'un PVC nommé PVC_NAME a déjà été provisionné. Le SOURCE_USER_CLUSTER_NAME est le nom du cluster source sur lequel le PVC existe, et le DESTINATION_USER_CLUSTER_NAME est le nom du cluster de destination où un nouveau PVC existera.
Les champs source et destination de la spécification indiquent respectivement l'emplacement à partir duquel et vers lequel les données sont répliquées. Dans cet exemple, les données sont répliquées de SOURCE_ZONE_NAME vers DESTINATION_ZONE_NAME.
Répliquer des disques de machine virtuelle
VolumeReplicationRelationship dessert également l'API de réplication asynchrone des disques de machine virtuelle (disques de VM).
Le disque source répliqué est appelé disque principal. Le disque de destination vers lequel la réplication est effectuée est appelé disque secondaire. Le démarrage de la réplication asynchrone sur un disque principal crée automatiquement le disque secondaire.
Demander des autorisations et un accès
Pour répliquer des disques de machine virtuelle, vous devez disposer du rôle d'administrateur de machine virtuelle de projet. Suivez les étapes pour vérifier que vous disposez du rôle d'administrateur de machine virtuelle de projet (project-vm-admin) dans l'espace de noms du projet où réside le disque de la VM.
Pour les opérations de machine virtuelle à l'aide de la CLI gdcloud, demandez à votre administrateur IAM de projet de vous attribuer à la fois le rôle d'administrateur de machine virtuelle de projet et le rôle de lecteur de projet (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
Remplacez les éléments suivants :
| Variable | Définition |
|---|---|
PRIMARY_DISK_NAME |
Nom du disque source répliqué. |
PROJECT |
Projet GDC du disque principal. |
PRIMARY_ZONE |
Zone où réside le disque principal. |
SECONDARY_DISK_NAME |
Nom du disque de destination à répliquer. |
SECONDARY_ZONE |
Zone où doit résider le disque secondaire. |
API de disque de VM
Démarrer la réplication asynchrone
Démarrez la réplication asynchrone sur un disque de VM à l'aide de 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
Remplacez les éléments suivants :
MANAGEMENT_API_SERVER: chemin d'accès kubeconfig du serveur d'API zonal.VRR_NAME: nom de la ressource VolumeReplicationRelationship.PROJECT: espace de noms de la ressource de projet.VIRTUAL_MACHINE_DESTINATION_DISK_NAME: nom de la ressource VirtualMachineDisk sur la destination.DESTINATION_ZONE_NAME: nom de la ressource de zone de destination.VIRTUAL_MACHINE_SOURCE_DISK_NAME: nom de la ressource VirtualMachineDisk sur la source.SOURCE_ZONE_NAME: nom de la ressource de zone source.
Cet exemple suppose qu'un projet nommé PROJECT est créé dans une organisation nommée my-org et qu'un VirtualMachineDisk nommé VIRTUAL_MACHINE_SOURCE_DISK_NAME a déjà été provisionné pour la ressource VirtualMachine.
Les champs source et destination de la spécification indiquent respectivement l'emplacement à partir duquel et vers lequel les données sont répliquées. Dans cet exemple, les données sont répliquées de SOURCE_ZONE_NAME vers DESTINATION_ZONE_NAME.
Validation
Vérifiez l'état de la relation de réplication en récupérant la CR VolumeReplicationRelationship à partir de l'API globale. Reportez-vous à l'exemple suivant. Notez que la sortie a été tronquée pour simplifier :
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \
-n PROJECT -o yaml
Le résultat ressemble à ce qui suit :
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 de disque de VM
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
Créer un basculement
Si la zone source n'est pas disponible pour une raison quelconque, une CR VolumeFailover peut être créée dans le plan de gestion de la zone de destination de l'organisation. Pour une organisation v2, il s'agit du serveur d'API de gestion. Pour une organisation v1, il s'agit du cluster d'administrateur de l'organisation. Par exemple, si un VolumeReplicationRelationship a été créé et spécifie zone2 comme zone de destination, et qu'un PVC ou un VirtualMachineDisk existe dans l'organisation my-org, la CR VolumeFailover est créée dans le plan de gestion my-org dans zone2. Cela interrompt la relation de réplication entre les deux zones et permet à une charge de travail d'installer le PVC ou le VirtualMachineDisk dans la zone de destination :
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
Remplacez les éléments suivants :
FAILOVER_NAME: nom de la ressource VolumeFailover.MANAGEMENT_API_SERVER: chemin d'accès kubeconfig du serveur d'API zonal.VRR_NAME: nom de la ressource VolumeReplicationRelationship.PROJECT: espace de noms de la ressource de projet.
Ensuite, un basculement réussi est reflété dans l'état de la CR :
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumefailover FAILOVER_NAME \
-n PROJECT -o yaml
Le résultat ressemble à ce qui suit :
apiVersion: storage.gdc.goog/v1 kind: VolumeFailover metadata: name: my-failover namespace: my-project spec: volumeReplicationRelationshipRef: my-vrr-repl status: state: CompletedUne fois le basculement créé, le
VolumeReplicationRelationshipmy-vrr-replpasse à l'étatBroken Off. Le PVC ou le VirtualMachineDisk danszone2peut désormais être installé.À ce stade, le
VolumeReplicationRelationshipressemble à l'exemple suivant. Là encore, cette sortie a été tronquée pour simplifier :kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \ -n PROJECT -o yamlLe résultat ressemble à ce qui suit :
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 de disque de VM
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
Vous pouvez maintenant supprimer en toute sécurité le
VolumeReplicationRelationship, car il s'agit de la seule action restante qui peut être effectuée sur cette CR.kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationship VRR_NAME \ -n PROJECT
Redimensionner les volumes
Si le volume source est redimensionné à un moment donné, vous devez également redimensionner le volume correspondant dans la zone de destination pour qu'il corresponde. Le volume de la zone de destination est créé lorsque vous créez le VolumeReplicationRelationship.
Consultez la documentation Développer des disques de VM ou Développer la capacité de volume pour redimensionner le stockage dans les zones source et de destination.
Répertorier les relations de réplication asynchrone
Répertoriez les relations de réplication asynchrone dans un projet à l'aide de kubectl.
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationships -n PROJECT
Remplacez les éléments suivants :
- PROJECT : projet GDC du disque principal.
- MANAGEMENT_API_SERVER : fichier kubeconfig du serveur d'API de gestion zonal.
La sortie ressemble à ceci :
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
Arrêter la réplication asynchrone
Arrêtez la réplication asynchrone sur un disque de VM principal à l'aide de gdcloud ou de kubectl.
gdcloud
gdcloud compute disks stop-async-replication PRIMARY_DISK_NAME \
--project PROJECT --zone PRIMARY_ZONE
Remplacez les éléments suivants :
| Variable | Définition |
|---|---|
PRIMARY_DISK_NAME |
Nom du disque source répliqué. |
PROJECT |
Projet GDC du disque principal. |
PRIMARY_ZONE |
Zone où réside le disque principal. |
API
Recherchez les relations de réplication de volume correspondant au disque de VM principal.
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'Supprimez chacune des relations de réplication de volume listées à l'étape précédente. Remplacez VRR_NAMES par les noms des relations de réplication de volume.
kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationships \ -n PROJECT VRR_NAMESRemplacez les éléments suivants :
Variable Définition MANAGEMENT_API_SERVERFichier kubeconfig du serveur d'API de gestion globale. PROJECTProjet GDC du disque principal. PRIMARY_DISK_NAMENom du disque source répliqué. PRIMARY_ZONEZone où réside le disque principal.
Si la zone source n'est pas disponible pour une raison quelconque, créez un basculement de volume pour arrêter la réplication.
Associer le disque répliqué à une VM
Lorsque la réplication est activée, le disque secondaire ne peut pas être associé à une VM. Une fois la réplication arrêtée, vous pouvez associer le disque secondaire à une VM nouvellement créée ou à une VM existante.