Replicar volúmenes de forma asíncrona

En esta página se explica cómo configurar y realizar la replicación asíncrona de volúmenes de almacenamiento en bloque aislados de Google Distributed Cloud (GDC).

La réplica asíncrona se usa para replicar datos de una zona de GDC a otra. Estos datos replicados se pueden usar en caso de que los datos de la zona de origen no estén disponibles. Ten en cuenta que, una vez que se haya creado una conmutación por error, el volumen original no se podrá configurar para que se replique en el mismo volumen de destino. En su lugar, se debe crear una nueva relación de réplica.

Antes de empezar

Para usar la replicación de bloques asíncrona, tu operador de infraestructura (IO) debe configurar primero la infraestructura de almacenamiento entre las dos zonas en las que se requiere la replicación. En concreto, primero deben emparejar los clústeres de almacenamiento pertinentes de cada zona. A continuación, deben emparejar la máquina virtual de almacenamiento asociada a la organización en la que se aprovisiona el almacenamiento en bloque.

Después, asegúrate de que tienes el rol volume-replication-admin-global para administrar el recurso VolumeReplicationRelationship. En los casos en los que la API global no esté disponible, se puede usar el rol app-volume-replication-admin para modificar directamente el recurso VolumeReplicationRelationshipReplica zonal.

Configurar la replicación

El recurso personalizado VolumeReplicationRelationship (CR) proporciona la API de replicación de bloques asíncrona. Esta respuesta predefinida existe en la API de gestión global. Para habilitar la replicación de un dispositivo de bloque determinado, se debe crear un CR VolumeReplicationRelationship en la API de gestión global:

apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
  name: my-pvc-repl
  namespace: my-project
spec:
  source:
    pvc:
      clusterRef: my-pvc-cluster
      pvcRef: my-block-pvc
    zoneRef: xx-xxxx-zone1
 destination:
    pvc:
      clusterRef: my-pvc-cluster
    zoneRef: xx-xxxx-zone2

En este ejemplo se da por hecho que se ha creado un proyecto llamado my-project en una organización llamada my-org y que ya se ha aprovisionado un PVC llamado my-block-pvc. clusterRef es el nombre del clúster en el que se encuentra el PVC.

Los campos source y destination de la especificación indican de dónde se replican los datos (from) y a dónde se replican (to), respectivamente. En este ejemplo, los datos se replican de xx-xxxx-zone1 a xx-xxxx-zone2.

Comprueba el estado de la relación de replicación recuperando el CR VolumeReplicationRelationship de la API global. Consulta el siguiente ejemplo. Ten en cuenta que la salida se ha truncado para simplificarla:

apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
  name: my-pvc-repl
  namespace: my-project
spec:
  destination:
    pvc:
      clusterRef: my-pvc-cluster
    zoneRef: xx-xxxx-zone2
  source:
    pvc:
      clusterRef: my-pvc-cluster
      pvcRef: my-block-pvc
    zoneRef: xx-xxxx-zone1
status:
  zones:
  - name: xx-xxxx-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: xx-xxxx-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

Crear conmutación por error

Si la zona de origen no está disponible por algún motivo, se puede crear un CR VolumeFailover en el plano de gestión de la zona de destino de la organización. En el caso de una organización de la versión 2, sería el servidor de la API de gestión. En una organización de la versión 1, este sería el clúster de administrador de la organización. Por ejemplo, si se ha creado un objeto VolumeReplicationRelationship que especifica xx-xxxx-zone2 como zona de destino y el PVC existe en la organización my-org, el objeto VolumeFailover CR se crea en el plano de gestión my-org en xx-xxxx-zone2. De esta forma, se rompe la relación de replicación entre las dos zonas y se permite que una carga de trabajo monte el PVC de la zona de destino:

apiVersion: storage.gdc.goog/v1
kind: VolumeFailover
metadata:
  name: my-pvc-failover
  namespace: my-project
spec:
  volumeReplicationRelationshipRef: my-pvc-repl

Después, el estado de la CR reflejará que la conmutación por error se ha realizado correctamente:

apiVersion: storage.gdc.goog/v1
kind: VolumeFailover
metadata:
  name: my-pvc-failover
  namespace: my-project
spec:
  volumeReplicationRelationshipRef: my-pvc-repl
status:
    state: Completed

Una vez creada la conmutación por error, el my-pvc-repl VolumeReplicationRelationship pasa al estado Broken Off. El PVC de xx-xxxx-zone2 ahora se puede montar.

En este punto, VolumeReplicationRelationship tendrá un aspecto similar al del siguiente ejemplo. De nuevo, este resultado se ha truncado para simplificarlo:

apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
  name: my-pvc-repl
  namespace: my-project
spec:
  destination:
    pvc:
      clusterRef: my-pvc-cluster
    zoneRef: xx-xxxx-zone2
  source:
    pvc:
      clusterRef: my-pvc-cluster
      pvcRef: my-block-pvc
    zoneRef: xx-xxxx-zone1
status:
  zones:
  - name: xx-xxxx-zone1
    replicaStatus:
      message: SnapMirror relationship has been broken off
      replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
      state: Broken Off
  - name: xx-xxxx-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

Ahora, puedes eliminar VolumeReplicationRelationship sin problemas, ya que es la única acción que se puede realizar en este CR.

Cambiar el tamaño de los volúmenes

Si en algún momento se cambia el tamaño del volumen de origen, también se debe cambiar el tamaño del volumen correspondiente de la zona de destino, que se crea en nombre del usuario cuando se crea un objeto VolumeReplicationRelationship.