비동기적으로 볼륨 복제

이 페이지에서는 Google Distributed Cloud (GDC) 에어 갭 블록 스토리지 볼륨의 비동기 복제를 설정하고 실행하는 방법을 설명합니다.

비동기 복제는 한 GDC 영역에서 다른 영역으로 데이터를 복제하는 데 사용됩니다. 소스 영역 데이터를 사용할 수 없게 되면 복제된 데이터를 장애 조치에 사용할 수 있습니다. 장애 조치가 생성되면 원래 볼륨을 동일한 대상 볼륨에 복제할 수 없습니다. 대신 새 복제 관계를 만들어야 합니다.

시작하기 전에

두 영역 간에 비동기 블록 복제를 사용 설정하려면 인프라 운영자 (IO)가 먼저 각 영역의 관련 스토리지 클러스터를 피어링하여 필요한 스토리지 인프라를 설정해야 합니다. 그런 다음 블록 스토리지가 프로비저닝된 조직과 연결된 스토리지 가상 머신을 피어링해야 합니다.

그런 다음 VolumeReplicationRelationship 리소스를 관리할 수 있는 app-volume-replication-admin-global 역할이 있는지 확인합니다. 전역 API를 사용할 수 없는 경우 volume-replication-admin 역할을 사용하여 영역 VolumeReplicationRelationshipReplica 리소스를 직접 수정할 수 있습니다.

복제 설정

VolumeReplicationRelationship 커스텀 리소스 (CR)는 비동기 블록 복제 API를 제공합니다. 이 CR은 전역 관리 API에 있습니다. 특정 블록 기기의 복제를 사용 설정하려면 전역 관리 API에서 VolumeReplicationRelationship CR을 만들어야 합니다.

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

이 예시에서는 my-org이라는 조직에 my-project이라는 프로젝트가 생성되어 있고 my-block-pvc라는 PVC가 이미 프로비저닝되었다고 가정합니다. clusterRef은 PVC가 있는 클러스터의 이름입니다.

사양의 sourcedestination 필드는 데이터가 각각 에서 복제되는 위치를 나타냅니다. 이 예에서는 데이터가 xx-xxxx-zone1에서 xx-xxxx-zone2로 복제됩니다.

전역 API에서 VolumeReplicationRelationship CR을 가져와 복제 관계의 상태를 확인합니다. 다음 예시를 참고하세요. 출력은 간소화를 위해 잘렸습니다.

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

장애 조치 만들기

어떤 이유로든 소스 영역을 사용할 수 없는 경우 대상 영역의 조직 관리 플레인에서 VolumeFailover CR을 만들 수 있습니다. v2 조직의 경우 관리 API 서버입니다. v1 조직의 경우 조직 관리자 클러스터입니다. 예를 들어 대상 영역으로 xx-xxxx-zone2을 지정하는 VolumeReplicationRelationship가 생성되고 PVC가 my-org 조직에 있는 경우 VolumeFailover CR은 xx-xxxx-zone2my-org 관리 플레인에 생성됩니다. 이렇게 하면 두 영역 간의 복제 관계가 중단되고 대상 영역의 PVC가 워크로드에 의해 마운트될 수 있습니다.

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

그런 다음 성공적인 장애 조치가 CR 상태에 반영됩니다.

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

장애 조치가 생성되면 my-pvc-repl VolumeReplicationRelationshipBroken Off 상태로 전환됩니다. 이제 xx-xxxx-zone2의 PVC를 마운트할 수 있습니다.

이 시점에서 VolumeReplicationRelationship는 다음 예와 비슷하게 표시됩니다. 이번에도 이 출력은 간단한 설명을 위해 일부 내용만 표시되어 있습니다.

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

이제 이 CR에서 실행할 수 있는 유일한 작업이 VolumeReplicationRelationship이므로 이를 삭제해도 됩니다.

볼륨 크기 조절

언제든지 소스 볼륨의 크기가 조절되면 VolumeReplicatioRelationship이 생성될 때 사용자를 대신하여 생성되는 대상 영역의 해당 볼륨도 일치하도록 크기가 조절되어야 합니다.

가상 머신 디스크 복제

VolumeReplicationRelationship은 비동기 가상 머신 디스크 (VM 디스크) 복제 API도 서비스합니다. 복제되는 소스 디스크를 기본 디스크라고 합니다. 복제되는 대상 디스크를 보조 디스크라고 합니다. 기본 디스크에서 비동기 복제를 시작하면 보조 디스크가 자동으로 생성됩니다.

권한 및 액세스 요청

VM 디스크를 복제하려면 프로젝트 VirtualMachine 관리자 역할이 있어야 합니다. 단계를 따라 VM 디스크가 있는 프로젝트의 네임스페이스에 프로젝트 VirtualMachine 관리자 (project-vm-admin) 역할이 있는지 확인합니다.

gdcloud CLI를 사용하는 VM 작업의 경우 프로젝트 IAM 관리자에게 프로젝트 VirtualMachine 관리자 역할과 프로젝트 뷰어 (project-viewer) 역할을 모두 할당해 달라고 요청하세요.

비동기 복제 시작

gdcloud 또는 kubectl를 사용하여 VM 디스크에서 비동기 복제를 시작합니다.

gdcloud

gdcloud compute disks start-async-replication PRIMARY_DISK_NAME \
  --project PROJECT --zone PRIMARY_ZONE \
  --secondary-disk SECONDARY_DISK_NAME --secondary-zone SECONDARY_ZONE

다음을 바꿉니다.

변수정의
PRIMARY_DISK_NAME 복제되는 소스 디스크의 이름입니다.
PROJECT 기본 디스크의 GDC 프로젝트입니다.
PRIMARY_ZONE 기본 디스크가 있는 영역입니다.
SECONDARY_DISK_NAME 복제할 대상 디스크의 이름입니다.
SECONDARY_ZONE 보조 디스크가 있어야 하는 영역입니다.

API

kubectl --kubeconfig GLOBAL_MANAGEMENT_API \
  apply -f - <<EOF
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
  name: VRR_NAME
  namespace: PROJECT
spec:
  source:
    virtualMachineDisk:
      virtualMachineDiskRef: PRIMARY_DISK_NAME
    zoneRef: PRIMARY_ZONE
  destination:
    volumeOverrideName: SECONDARY_DISK_NAME
    zoneRef: SECONDARY_ZONE
EOF

다음을 바꿉니다.

변수정의
GLOBAL_MANAGEMENT_API 전역 관리 API 서버의 kubeconfig 파일입니다.
VRR_NAME 볼륨 복제 관계의 이름입니다.
비동기 복제를 중지할 때 동일한 이름을 사용해야 합니다.
PROJECT 기본 디스크의 GDC 프로젝트입니다.
PRIMARY_DISK_NAME 복제되는 소스 디스크의 이름입니다.
PRIMARY_ZONE 기본 디스크가 있는 영역입니다.
SECONDARY_DISK_NAME 복제할 대상 디스크의 이름입니다.
SECONDARY_ZONE 보조 디스크가 있어야 하는 영역입니다.

비동기 복제 관계 나열

kubectl를 사용하여 프로젝트의 비동기 복제 관계를 나열합니다.

kubectl --kubeconfig GLOBAL_MANAGEMENT_API get volumereplicationrelationships -n my-project

다음을 바꿉니다.

  • PROJECT: 기본 디스크의 GDC 프로젝트입니다.
  • GLOBAL_MANAGEMENT_API: 전역 관리 API 서버의 kubeconfig 파일입니다.

출력은 다음과 같습니다.

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

비동기 복제 중지

gdcloud 또는 kubectl를 사용하여 기본 VM 디스크에서 비동기 복제를 중지합니다.

gdcloud

gdcloud compute disks stop-async-replication PRIMARY_DISK_NAME \
  --project PROJECT --zone PRIMARY_ZONE

다음을 바꿉니다.

변수정의
PRIMARY_DISK_NAME 복제되는 소스 디스크의 이름입니다.
PROJECT 기본 디스크의 GDC 프로젝트입니다.
PRIMARY_ZONE 기본 디스크가 있는 영역입니다.

API

  1. 기본 VM 디스크에 해당하는 볼륨 복제 관계를 찾습니다.

    kubectl --kubeconfig GLOBAL_MANAGEMENT_API 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. 이전 단계에 나열된 각 볼륨 복제 관계를 삭제합니다. VRR_NAMES을 볼륨 복제 관계의 이름으로 바꿉니다.

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

    다음을 바꿉니다.

    변수정의
    GLOBAL_MANAGEMENT_API 전역 관리 API 서버의 kubeconfig 파일입니다.
    PROJECT 기본 디스크의 GDC 프로젝트입니다.
    PRIMARY_DISK_NAME 복제되는 소스 디스크의 이름입니다.
    PRIMARY_ZONE 기본 디스크가 있는 영역입니다.

어떤 이유로든 소스 영역을 사용할 수 없는 경우 볼륨 장애 조치 생성을 통해 복제를 중지하세요.

복제된 디스크를 VM에 연결

복제가 사용 설정된 동안에는 보조 디스크를 VM에 연결할 수 없습니다. 복제가 중지된 후 보조 디스크를 새로 만든 VM 또는 기존 VM에 연결할 수 있습니다.