Auf dieser Seite erfahren Sie, wie Sie die asynchrone Replikation von Google Distributed Cloud (GDC) Air-Gapped-Blockspeicher-Volumes einrichten und ausführen.
Die asynchrone Replikation wird verwendet, um Daten von einer GDC-Zone in eine andere zu replizieren. Diese replizierten Daten können in einem Failover-Szenario verwendet werden, falls die Daten in der Quellzone nicht verfügbar sind. Sobald ein Failover erstellt wurde, kann das ursprüngliche Volume nicht mehr so eingerichtet werden, dass es auf dasselbe Ziel-Volume repliziert wird. Stattdessen muss eine neue Replikationsbeziehung erstellt werden.
Anwendungsoperatoren, die die gdcloud CLI verwenden möchten, finden weitere Informationen unter Volumes asynchron replizieren.
Hinweis
Damit die asynchrone Blockreplikation verwendet werden kann, muss Ihr Infrastrukturadministrator zuerst zwei Zonen für die asynchrone Replikation einrichten.Prüfen Sie, ob Sie die Rolle volume-replication-admin-global haben, um die Ressource VolumeReplicationRelationship zu verwalten. Wenn die globale API nicht verfügbar ist, kann die Rolle app-volume-replication-admin verwendet werden, um die zonale Ressource VolumeReplicationRelationshipReplica direkt zu ändern.
Replikation einrichten
Die benutzerdefinierte Ressource (Custom Resource, CR) VolumeReplicationRelationship stellt die API für die asynchrone Blockreplikation bereit. Diese CR ist in der globalen Management API vorhanden. Damit die Replikation für ein bestimmtes Blockgerät aktiviert werden kann, muss eine VolumeReplicationRelationship-CR in der globalen Management API erstellt werden:
PVC API
Die Projektbindung ist erforderlich. Achten Sie darauf, dass Sie Ihr Projekt in jeder beteiligten Zone an jede Clusterressource angehängt haben.
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
Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER: der kubeconfig-Pfad des zonalen API-Servers.VRR_NAME: der Name der Ressource VolumeReplicationRelationship.PROJECT: der Namespace der Ressource Project.SOURCE_USER_CLUSTER_NAME: der Name der zu verbindenden Quell-Nutzerclusterressource.PVC_NAME: der Name der Ressource PersistentVolumeClaim.SOURCE_ZONE_NAME: der Name der Quellzonenressource.DESTINATION_USER_CLUSTER_NAME: der Name der zu verbindenden Ziel-Nutzerclusterressource.DESTINATION_ZONE_NAME: der Name der Zielzonenressource.
In diesem Beispiel wird davon ausgegangen, dass ein Projekt mit dem Namen PROJECT in einer Organisation mit dem Namen my-org erstellt wurde und dass ein PVC mit dem Namen PVC_NAME bereits bereitgestellt wurde. Der SOURCE_USER_CLUSTER_NAME ist der Name des Quellclusters, in dem der PVC vorhanden ist, und der DESTINATION_USER_CLUSTER_NAME ist der Name des Zielclusters, in dem ein neuer PVC vorhanden sein wird.
Die Felder source und destination der Spezifikation geben an, von wo bzw. wohin die Daten repliziert werden. In diesem Beispiel werden die Daten von SOURCE_ZONE_NAME nach DESTINATION_ZONE_NAME repliziert.
VM Disk API
VM-Laufwerke replizieren
VolumeReplicationRelationship stellt auch die API für die asynchrone Replikation von VM-Laufwerken bereit.
Das zu replizierende Quelllaufwerk wird als primäres Laufwerk bezeichnet. Das Ziellaufwerk, auf das repliziert wird,
wird als sekundäres Laufwerk bezeichnet. Wenn Sie die asynchrone Replikation auf einem primären Laufwerk starten, wird
das sekundäre Laufwerk automatisch erstellt.
Berechtigungen und Zugriff anfordern
Zum Replizieren von VM-Laufwerken benötigen Sie die Rolle „Project VirtualMachine Admin“. Folgen Sie der Anleitung, um
zu prüfen
ob Sie die Rolle „Project VirtualMachine Admin“ (project-vm-admin) im Namespace
des Projekts haben, in dem sich das VM-Laufwerk befindet.
Für VM-Vorgänge mit der gdcloud CLI bitten Sie Ihren Projekt-IAM-Administrator, Ihnen sowohl die Rolle „Project VirtualMachine Admin“ als auch die Rolle „Project Viewer“ (project-viewer) zuzuweisen.
Asynchrone Replikation starten
Starten Sie die asynchrone Replikation auf einem VM-Laufwerk mit 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
Ersetzen Sie Folgendes:
MANAGEMENT_API_SERVER: der kubeconfig-Pfad des zonalen API-Servers.VRR_NAME: der Name der Ressource VolumeReplicationRelationship.PROJECT: der Namespace der Ressource Project.SOURCE_ZONE_NAME: der Name der Quellzonenressource.DESTINATION_ZONE_NAME: der Name der Zielzonenressource.VIRTUAL_MACHINE_SOURCE_DISK_NAME: der Name der Ressource VirtualMachineDisk in der Quelle.VIRTUAL_MACHINE_DESTINATION_DISK_NAME: der Name der Ressource VirtualMachineDisk im Ziel.
In diesem Beispiel wird davon ausgegangen, dass ein Projekt mit dem Namen PROJECT in einer Organisation mit dem Namen my-org erstellt wurde und dass eine VirtualMachineDisk mit dem Namen VIRTUAL_MACHINE_SOURCE_DISK_NAME bereits für die Ressource VirtualMachine bereitgestellt wurde.
Die Felder source und destination der Spezifikation geben an, von wo bzw. wohin die Daten repliziert werden. In diesem Beispiel werden die Daten von SOURCE_ZONE_NAME nach DESTINATION_ZONE_NAME repliziert.
Überprüfung
Prüfen Sie den Status der Replikationsbeziehung, indem Sie die VolumeReplicationRelationship-CR aus der globalen API abrufen. Beachten Sie das folgende Beispiel. Die Ausgabe wurde zur Vereinfachung gekürzt:
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \
-n PROJECT -o yaml
Die Ausgabe sieht etwa so aus:
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
Failover erstellen
Wenn die Quellzone aus irgendeinem Grund nicht verfügbar ist, kann eine VolumeFailover-CR in der Managementebene der Organisation der Zielzone erstellt werden. Bei einer v2-Organisation ist dies der Management-API-Server. Bei einer v1-Organisation ist dies der Administratorcluster der Organisation. Wenn beispielsweise eine VolumeReplicationRelationship erstellt wurde, in der zone2 als Zielzone angegeben ist, und ein PVC oder eine VirtualMachineDisk in der Organisation my-org vorhanden ist, wird die VolumeFailover-CR in der Managementebene my-org in zone2 erstellt. Dadurch wird die Replikationsbeziehung zwischen den beiden Zonen unterbrochen und der PVC oder die VirtualMachineDisk in der Zielzone kann von einer Arbeitslast bereitgestellt werden:
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
Ersetzen Sie Folgendes:
FAILOVER_NAME: der Name der Ressource VolumeFailover.MANAGEMENT_API_SERVER: der kubeconfig-Pfad des zonalen API-Servers.VRR_NAME: der Name der Ressource VolumeReplicationRelationship.PROJECT: der Namespace der Ressource Project.Nach einem erfolgreichen Failover wird dies im Status der CR angezeigt:
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumefailover FAILOVER_NAME \ -n PROJECT -o yamlDie Ausgabe sieht etwa so aus:
apiVersion: storage.gdc.goog/v1 kind: VolumeFailover metadata: name: my-failover namespace: my-project spec: volumeReplicationRelationshipRef: my-vrr-repl status: state: CompletedNachdem das Failover erstellt wurde, wechselt die
VolumeReplicationRelationshipmy-vrr-replin den StatusBroken Off. Der PVC oder die VirtualMachineDisk inzone2kann jetzt bereitgestellt werden.An diesem Punkt sieht die
VolumeReplicationRelationshipähnlich wie im folgenden Beispiel aus. Auch diese Ausgabe wurde zur Vereinfachung gekürzt:kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \ -n PROJECT -o yamlDie Ausgabe sieht etwa so aus:
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
Jetzt können Sie die
VolumeReplicationRelationshipgefahrlos löschen, da dies die einzige verbleibende Aktion ist, die für diese CR ausgeführt werden kann.kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationship VRR_NAME \ -n PROJECT
Größe von Volumes ändern
Wenn die Größe des Quell-Volumes geändert wird, sollte auch die Größe des entsprechenden Volumes in der Zielzone angepasst werden. Dieses wird im Namen des Nutzers erstellt, wenn eine VolumeReplicationRelationship erstellt wird.
Informationen zum Ändern der Größe des Speichers in der Quell- und Zielzone finden Sie in der Dokumentation VM-Laufwerke erweitern oder Volumekapazität erweitern.