Halaman ini menjelaskan cara menyiapkan dan melakukan replikasi asinkron volume penyimpanan blok yang terisolasi dari internet Google Distributed Cloud (GDC).
Replikasi asinkron digunakan untuk mereplikasi data dari satu zona GDC ke zona lainnya. Data yang direplikasi dapat digunakan untuk failover jika data zona sumber menjadi tidak tersedia. Perhatikan bahwa setelah failover dibuat, volume asli tidak dapat direplikasi ke volume tujuan yang sama. Sebagai gantinya, hubungan replikasi baru harus dibuat.
Sebelum memulai
Untuk menggunakan replikasi blok asinkron, Operator Infrastruktur (IO) Anda harus terlebih dahulu menyiapkan infrastruktur penyimpanan antara dua zona yang memerlukan replikasi. Secara khusus, mereka harus terlebih dahulu melakukan peer pada cluster penyimpanan yang relevan dari setiap zona. Selanjutnya, mereka perlu membuat peering mesin virtual penyimpanan yang terkait dengan organisasi tempat penyimpanan blok disediakan.
Kemudian, pastikan Anda memiliki peran app-volume-replication-admin-global untuk mengelola resource VolumeReplicationRelationship. Jika API global tidak tersedia, peran volume-replication-admin dapat digunakan untuk mengubah resource VolumeReplicationRelationshipReplica zonal secara langsung.
Menyiapkan replikasi
VolumeReplicationRelationship Custom Resource (CR) melayani API replikasi blok asinkron. CR ini ada di API pengelolaan global. Untuk mengaktifkan replikasi untuk perangkat blok tertentu, CR VolumeReplicationRelationship harus dibuat di API pengelolaan global:
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
Ganti kode berikut:
MANAGEMENT_API_SERVER: jalur kubeconfig server API zona.VRR_NAME: nama resource VolumeReplicationRelationship.PROJECT: namespace resource Project.SOURCE_USER_CLUSTER_NAME: nama resource Cluster pengguna sumber yang akan dihubungkan.PVC_NAME: nama Resource PersistentVolumeClaim.SOURCE_ZONE_NAME: nama Resource Zona sumber.DESTINATION_USER_CLUSTER_NAME: nama resource Cluster pengguna tujuan yang akan dihubungkan.DESTINATION_ZONE_NAME: nama Resource Zona tujuan.
Contoh ini mengasumsikan bahwa project bernama PROJECT dibuat di org bernama my-org dan PVC bernama PVC_NAME telah disediakan. SOURCE_USER_CLUSTER_NAME adalah nama cluster sumber tempat PVC berada dan DESTINATION_USER_CLUSTER_NAME adalah nama cluster tujuan tempat PVC baru akan berada.
Kolom source dan destination spesifikasi menunjukkan tempat data direplikasi dari dan ke. Dalam contoh ini, data direplikasi dari SOURCE_ZONE_NAME ke DESTINATION_ZONE_NAME.
Mereplikasi disk virtual machine
VolumeReplicationRelationship juga melayani API replikasi disk virtual machine (disk VM) asinkron.
Disk sumber yang direplikasi disebut disk utama. Disk tujuan yang direplikasi disebut disk sekunder. Memulai replikasi asinkron pada disk utama akan otomatis membuat disk sekunder.
Meminta izin dan akses
Untuk mereplikasi disk virtual machine, Anda harus memiliki peran Project VirtualMachine Admin. Ikuti langkah-langkah untuk memverifikasi bahwa Anda memiliki peran Project VirtualMachine Admin (project-vm-admin) di namespace project tempat disk VM berada.
Untuk operasi virtual machine menggunakan gdcloud CLI, minta Admin IAM Project Anda untuk memberi Anda peran Project VirtualMachine Admin dan peran Project Viewer (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
Ganti kode berikut:
| Variabel | Definisi |
|---|---|
PRIMARY_DISK_NAME |
Nama disk sumber yang direplikasi. |
PROJECT |
Project GDC dari disk utama. |
PRIMARY_ZONE |
Zona tempat disk utama berada. |
SECONDARY_DISK_NAME |
Nama disk tujuan yang akan direplikasi. |
SECONDARY_ZONE |
Zona tempat disk sekunder harus berada. |
VM Disk API
Mulai replikasi asinkron
Mulai replikasi asinkron pada disk VM menggunakan 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
Ganti kode berikut:
MANAGEMENT_API_SERVER: jalur kubeconfig server API zona.VRR_NAME: nama resource VolumeReplicationRelationship.PROJECT: namespace resource Project.VIRTUAL_MACHINE_DESTINATION_DISK_NAME: nama resource VirtualMachineDisk di tujuan.DESTINATION_ZONE_NAME: nama Resource Zona tujuan.VIRTUAL_MACHINE_SOURCE_DISK_NAME: nama resource VirtualMachineDisk di sumber.SOURCE_ZONE_NAME: nama Resource Zona sumber.
Contoh ini mengasumsikan bahwa project bernama PROJECT dibuat di org bernama my-org dan VirtualMachineDisk bernama VIRTUAL_MACHINE_SOURCE_DISK_NAME telah disediakan untuk resource VirtualMachine.
Kolom source dan destination dalam spesifikasi menunjukkan tempat data direplikasi dari dan ke. Dalam contoh ini, data direplikasi dari SOURCE_ZONE_NAME ke DESTINATION_ZONE_NAME.
Verifikasi
Periksa status hubungan replikasi dengan mengambil CR VolumeReplicationRelationship dari API global. Lihat contoh berikut. Perhatikan bahwa output telah dipotong untuk menyederhanakan:
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \
-n PROJECT -o yaml
Outputnya mirip dengan hal berikut ini:
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
Buat failover
Jika zona sumber tidak tersedia karena alasan apa pun, CR VolumeFailover dapat dibuat di bidang pengelolaan zona tujuan organisasi. Untuk organisasi v2, ini akan menjadi server Management API. Untuk organisasi v1, ini adalah cluster admin organisasi. Misalnya, jika VolumeReplicationRelationship dibuat yang menentukan zone2 sebagai zona tujuan dan PVC atau VirtualMachineDisk ada di organisasi my-org, maka CR VolumeFailover dibuat di bidang pengelolaan my-org di zone2. Hal ini akan menghentikan hubungan replikasi antara kedua zona, dan memungkinkan workload memasang PVC atau VirtualMachineDisk di zona tujuan:
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
Ganti kode berikut:
FAILOVER_NAME: nama resource VolumeFailover.MANAGEMENT_API_SERVER: jalur kubeconfig server API zona.VRR_NAME: nama resource VolumeReplicationRelationship.PROJECT: namespace resource Project.
Setelah itu, failover yang berhasil akan tercermin dalam status CR:
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumefailover FAILOVER_NAME \
-n PROJECT -o yaml
Outputnya mirip dengan hal berikut ini:
apiVersion: storage.gdc.goog/v1 kind: VolumeFailover metadata: name: my-failover namespace: my-project spec: volumeReplicationRelationshipRef: my-vrr-repl status: state: CompletedSetelah failover dibuat,
my-vrr-replVolumeReplicationRelationshipakan bertransisi ke statusBroken Off. PVC atau VirtualMachineDisk dizone2kini dapat di-mount.Pada tahap ini,
VolumeReplicationRelationshipakan terlihat mirip dengan contoh berikut. Sekali lagi, output ini telah dipangkas untuk menyederhanakan:kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \ -n PROJECT -o yamlOutputnya mirip dengan hal berikut ini:
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
Sekarang Anda dapat menghapus
VolumeReplicationRelationshipdengan aman karena ini adalah satu-satunya tindakan yang tersisa yang dapat dilakukan pada CR ini.kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationship VRR_NAME \ -n PROJECT
Mengubah ukuran volume
Jika volume sumber diubah ukurannya kapan saja, Anda juga harus mengubah ukuran volume yang sesuai di zona tujuan agar cocok. Volume zona tujuan dibuat saat Anda membuat VolumeReplicationRelationship.
Lihat dokumentasi Memperluas disk VM atau Memperluas kapasitas volume untuk mengubah ukuran penyimpanan di zona sumber dan tujuan.
Mencantumkan hubungan replikasi asinkron
Mencantumkan hubungan replikasi asinkron dalam project menggunakan kubectl.
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationships -n PROJECT
Ganti kode berikut:
- PROJECT: Project GDC disk utama.
- MANAGEMENT_API_SERVER: File kubeconfig untuk server API pengelolaan zonal.
Outputnya akan terlihat mirip seperti berikut:
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
Menghentikan replikasi asinkron
Hentikan replikasi asinkron pada disk VM utama menggunakan gdcloud atau kubectl.
gdcloud
gdcloud compute disks stop-async-replication PRIMARY_DISK_NAME \
--project PROJECT --zone PRIMARY_ZONE
Ganti kode berikut:
| Variabel | Definisi |
|---|---|
PRIMARY_DISK_NAME |
Nama disk sumber yang direplikasi. |
PROJECT |
Project GDC dari disk utama. |
PRIMARY_ZONE |
Zona tempat disk utama berada. |
API
Temukan hubungan replikasi volume yang sesuai dengan disk VM utama.
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'Hapus setiap hubungan replikasi volume yang tercantum pada langkah sebelumnya. Ganti VRR_NAMES dengan nama hubungan replikasi volume.
kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationships \ -n PROJECT VRR_NAMESGanti kode berikut:
Variabel Definisi MANAGEMENT_API_SERVERFile kubeconfig untuk server API pengelolaan global. PROJECTProject GDC dari disk utama. PRIMARY_DISK_NAMENama disk sumber yang direplikasi. PRIMARY_ZONEZona tempat disk utama berada.
Jika zona sumber tidak tersedia karena alasan apa pun, buat failover volume untuk menghentikan replikasi.
Pasang disk yang direplikasi ke VM
Saat replikasi diaktifkan, disk sekunder tidak dapat dipasang ke VM. Setelah replikasi dihentikan, Anda dapat melampirkan disk sekunder ke VM yang baru dibuat atau ke VM yang ada.