Mereplikasi volume secara asinkron

Halaman ini menjelaskan cara menyiapkan dan melakukan replikasi asinkron volume block storage air-gapped Google Distributed Cloud (GDC).

Replikasi asinkron digunakan untuk mereplikasi data dari satu zona GDC ke zona lain. Data yang direplikasi dapat digunakan untuk failover jika data zona sumber tidak tersedia. Perhatikan bahwa setelah failover dibuat, volume asli tidak dapat direplikasi ke volume tujuan yang sama. Sebagai gantinya, hubungan replikasi baru harus dibuat.

Untuk Administrator Platform yang mengelola PVC menggunakan KRM API, lihat Mereplikasi volume secara asinkron.

Sebelum memulai

Untuk menggunakan replikasi blok asinkron, Operator Infrastruktur (IO) Anda harus menyiapkan dua zona untuk replikasi asinkron terlebih dahulu.

Kemudian, pastikan Anda memiliki peran app-volume-replication-admin-global untuk mengelola resource VolumeReplicationRelationship. Jika global API tidak tersedia, peran volume-replication-admin dapat digunakan untuk mengubah resource VolumeReplicationRelationshipReplica zona secara langsung.

Menyiapkan replikasi

VolumeReplicationRelationship Custom Resource (CR) melayani asynchronous block replication API. CR ini ada di global management API. Untuk mengaktifkan replikasi untuk perangkat blok tertentu, VolumeReplicationRelationship CR harus dibuat di global management API:

Mereplikasi 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 terhubung.
  • PVC_NAME: nama Resource PersistentVolumeClaim.
  • SOURCE_ZONE_NAME: nama Resource Zona sumber.
  • DESTINATION_USER_CLUSTER_NAME: nama resource Cluster pengguna tujuan yang akan terhubung.
  • DESTINATION_ZONE_NAME: nama Resource Zona tujuan.

Contoh ini mengasumsikan bahwa project bernama PROJECT dibuat di organisasi 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, masing-masing. Dalam contoh ini, data direplikasi dari SOURCE_ZONE_NAME ke DESTINATION_ZONE_NAME.

Mereplikasi disk virtual machine

VolumeReplicationRelationship juga melayani asynchronous virtual machine disk (VM disk) replication API. 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 Project IAM Admin 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:

VariabelDefinisi
PRIMARY_DISK_NAME Nama disk sumber yang direplikasi.
PROJECT Project GDC 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

Memulai 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 organisasi bernama my-org dan VirtualMachineDisk bernama VIRTUAL_MACHINE_SOURCE_DISK_NAME telah disediakan ke resource VirtualMachine.

Kolom source dan destination spesifikasi menunjukkan tempat data direplikasi dari dan ke , masing-masing. Dalam contoh ini, data direplikasi dari SOURCE_ZONE_NAME ke DESTINATION_ZONE_NAME.

Verifikasi

Periksa status hubungan replikasi dengan mengambil VolumeReplicationRelationship CR dari global API. Lihat contoh berikut. Perhatikan bahwa output telah dipangkas untuk penyederhanaan:

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

Membuat failover

Jika zona sumber tidak tersedia karena alasan apa pun, VolumeFailover CR dapat dibuat di bidang pengelolaan zona tujuan organisasi. Untuk organisasi v2, ini akan menjadi server management API. Untuk organisasi v1, ini akan menjadi cluster admin organisasi. Misalnya, jika VolumeReplicationRelationship dibuat yang menentukan zone2 sebagai zona tujuan dan PVC atau VirtualMachineDisk ada di organisasi my-org, maka VolumeFailover CR akan 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: Completed
    
  • Setelah failover dibuat, VolumeReplicationRelationship my-vrr-repl akan bertransisi ke status Broken Off. PVC atau VirtualMachineDisk di zone2 kini dapat dipasang.

  • Pada tahap ini, VolumeReplicationRelationship akan terlihat mirip dengan contoh berikut. Sekali lagi, output ini telah dipangkas untuk penyederhanaan:

    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-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
  • Anda kini dapat menghapus VolumeReplicationRelationship dengan 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 management API zona.

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:

VariabelDefinisi
PRIMARY_DISK_NAME Nama disk sumber yang direplikasi.
PROJECT Project GDC disk utama.
PRIMARY_ZONE Zona tempat disk utama berada.

API

  1. 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'
    
  2. Hapus setiap hubungan replikasi volume yang tercantum di langkah sebelumnya. Ganti VRR_NAMES dengan nama hubungan replikasi volume.

    kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationships \
      -n PROJECT VRR_NAMES
    

    Ganti kode berikut:

    VariabelDefinisi
    MANAGEMENT_API_SERVER File kubeconfig untuk server global management API.
    PROJECT Project GDC disk utama.
    PRIMARY_DISK_NAME Nama disk sumber yang direplikasi.
    PRIMARY_ZONE Zona tempat disk utama berada.

Jika zona sumber tidak tersedia karena alasan apa pun, buat failover volume untuk menghentikan replikasi.

Melampirkan disk yang direplikasi ke VM

Saat replikasi diaktifkan, disk sekunder tidak dapat dilampirkan ke VM. Setelah replikasi dihentikan, Anda dapat melampirkan disk sekunder ke VM yang baru dibuat atau ke VM yang ada.