Skip to main content
본 한국어 번역은 사용자 편의를 위해 제공되는 기계 번역입니다. 영어 버전과 한국어 버전이 서로 어긋나는 경우에는 언제나 영어 버전이 우선합니다.

SnapMirror를 사용하여 볼륨 복제

Trident는 재해 복구를 위한 데이터 복제를 위해 한 클러스터의 소스 볼륨과 피어링된 클러스터의 타겟 볼륨 간의 미러 관계를 지원합니다.  Trident Mirror Relationship(TMR)이라는 네임스페이스 Custom Resource Definition(CRD)을 사용하여 다음 작업을 수행할 수 있습니다.

  • 볼륨(PVC) 간의 미러 관계 생성

  • 볼륨 간의 미러 관계를 제거합니다

  • 미러 관계를 중단합니다

  • 재해 조건(페일오버) 중에 보조 볼륨을 승격합니다

  • 클러스터 간 애플리케이션의 무손실 전환 수행(계획된 페일오버 또는 마이그레이션 중)

복제 사전 요구 사항

시작하기 전에 다음 사전 요구 사항이 충족되었는지 확인하십시오.

ONTAP 클러스터
  • Trident: ONTAP를 백엔드로 사용하는 소스 및 타겟 Kubernetes 클러스터 모두에 Trident 버전 22.10 이상이 있어야 합니다.

  • 라이선스: 데이터 보호 번들을 사용하는 ONTAP SnapMirror 비동기 라이선스는 소스 및 타겟 ONTAP 클러스터 모두에서 활성화되어야 합니다. 자세한 내용은 "SnapMirror ONTAP 라이센싱 개요"를 참조하십시오.

    ONTAP 9.10.1부터 모든 라이센스는 여러 기능을 활성화하는 단일 파일인 NetApp 라이센스 파일(NLF)로 제공됩니다. 자세한 내용은 "ONTAP One에 포함된 라이센스"을 참조하십시오.

    참고 SnapMirror 비동기 보호 기능만 지원됩니다.
피어링
  • 클러스터 및 SVM: ONTAP 스토리지 백엔드는 피어링되어야 합니다. 자세한 내용은 "클러스터 및 SVM 피어링 개요"을 참조하십시오.

    중요함 두 ONTAP 클러스터 간의 복제 관계에 사용되는 SVM 이름이 고유한지 확인하십시오.
  • Trident 및 SVM: 피어링된 원격 SVM은 타겟 클러스터의 Trident에서 사용할 수 있어야 합니다.

지원되는 드라이버

NetApp Trident는 다음 드라이버가 지원하는 스토리지 클래스를 사용하여 NetApp SnapMirror 기술로 볼륨 복제를 지원합니다. ontap-nas: NFS ontap-san: iSCSI ontap-san: FC ontap-san: NVMe/TCP(최소 ONTAP 버전 9.15.1 필요)

참고 SnapMirror를 사용한 볼륨 복제는 ASA r2 시스템에서 지원되지 않습니다. ASA r2 시스템에 대한 자세한 내용은 "ASA r2 스토리지 시스템에 대해 알아보세요"를 참조하십시오.

미러링된 PVC 생성

다음 단계를 따르고 CRD 예제를 사용하여 운영 볼륨과 2차 볼륨 간의 미러 관계를 생성하십시오.

단계
  1. 기본 Kubernetes 클러스터에서 다음 단계를 수행하십시오.

    1. trident.netapp.io/replication: true 매개 변수를 사용하여 StorageClass 객체를 생성합니다.

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: csi-nas
      provisioner: csi.trident.netapp.io
      parameters:
        backendType: "ontap-nas"
        fsType: "nfs"
        trident.netapp.io/replication: "true"
    2. 이전에 생성한 StorageClass로 PVC를 생성합니다.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: csi-nas
      spec:
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 1Gi
        storageClassName: csi-nas
    3. 로컬 정보를 사용하여 MirrorRelationship CR을 생성합니다.

      kind: TridentMirrorRelationship
      apiVersion: trident.netapp.io/v1
      metadata:
        name: csi-nas
      spec:
        state: promoted
        volumeMappings:
        - localPVCName: csi-nas

      Trident는 볼륨에 대한 내부 정보와 볼륨의 현재 데이터 보호(DP) 상태를 가져온 다음 MirrorRelationship의 상태 필드를 채웁니다.

    4. TridentMirrorRelationship CR을 가져와 PVC의 내부 이름과 SVM을 얻으십시오.

      kubectl get tmr csi-nas
      kind: TridentMirrorRelationship
      apiVersion: trident.netapp.io/v1
      metadata:
        name: csi-nas
        generation: 1
      spec:
        state: promoted
        volumeMappings:
        - localPVCName: csi-nas
      status:
        conditions:
        - state: promoted
          localVolumeHandle: "datavserver:trident_pvc_3bedd23c_46a8_4384_b12b_3c38b313c1e1"
          localPVCName: csi-nas
          observedGeneration: 1
  2. 보조 Kubernetes 클러스터에서 다음 단계를 수행하십시오.

    1. trident.netapp.io/replication: true 매개변수를 사용하여 StorageClass를 생성합니다.

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: csi-nas
      provisioner: csi.trident.netapp.io
      parameters:
        trident.netapp.io/replication: true
    2. 대상 및 소스 정보를 사용하여 MirrorRelationship CR을 생성합니다.

      kind: TridentMirrorRelationship
      apiVersion: trident.netapp.io/v1
      metadata:
        name: csi-nas
      spec:
        state: established
        volumeMappings:
        - localPVCName: csi-nas
          remoteVolumeHandle: "datavserver:trident_pvc_3bedd23c_46a8_4384_b12b_3c38b313c1e1"

      Trident는 구성된 관계 정책 이름(또는 ONTAP의 기본값)으로 SnapMirror 관계를 생성하고 초기화합니다.

    3. 이전에 생성한 StorageClass를 사용하여 보조(SnapMirror 타겟) 역할을 하는 PVC를 생성합니다.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: csi-nas
        annotations:
          trident.netapp.io/mirrorRelationship: csi-nas
      spec:
        accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: csi-nas

      Trident는 TridentMirrorRelationship CRD를 확인하고, 관계가 존재하지 않으면 볼륨 생성을 실패합니다. 관계가 존재하는 경우, Trident는 새 FlexVol 볼륨이 MirrorRelationship에 정의된 원격 SVM과 피어링된 SVM에 배치되도록 합니다.

볼륨 복제 상태

Trident 미러 관계(TMR)는 PVC 간의 복제 관계의 한쪽 끝을 나타내는 CRD입니다. 대상 TMR에는 원하는 상태를 Trident에 알려주는 상태가 있습니다. 대상 TMR은 다음과 같은 상태를 가집니다.

  • Established: 로컬 PVC는 미러 관계의 타겟 볼륨이며, 이는 새로운 관계입니다.

  • 승격됨: 로컬 PVC는 ReadWrite이며 마운트 가능하고, 현재 미러 관계가 적용되지 않습니다.

  • 재설정됨: 로컬 PVC는 미러 관계의 타겟 볼륨이며 이전에도 해당 미러 관계에 있었습니다.

    • 타겟 볼륨이 소스 볼륨과 관계를 맺은 적이 있는 경우 타겟 볼륨 콘텐츠를 덮어쓰므로 재설정된 상태를 사용해야 합니다.

    • 볼륨이 이전에 소스와 관계를 맺지 않았던 경우 재설정된 상태가 실패합니다.

예기치 않은 페일오버 시 보조 PVC 승격

보조 Kubernetes 클러스터에서 다음 단계를 수행하십시오.

  • TridentMirrorRelationship의 spec.state 필드를 `promoted`으로 업데이트합니다.

계획된 페일오버 중에 보조 PVC를 승격합니다

계획된 페일오버(마이그레이션) 중에 다음 단계를 수행하여 보조 PVC를 승격시키십시오.

단계
  1. 기본 Kubernetes 클러스터에서 PVC의 스냅샷을 생성하고 스냅샷이 생성될 때까지 기다립니다.

  2. 기본 Kubernetes 클러스터에서 SnapshotInfo CR을 생성하여 내부 정보를 얻습니다.

    kind: SnapshotInfo
    apiVersion: trident.netapp.io/v1
    metadata:
      name: csi-nas
    spec:
      snapshot-name: csi-nas-snapshot
  3. 보조 Kubernetes 클러스터에서 TridentMirrorRelationship CR의 spec.state 필드를 _promoted_로 업데이트하고 _spec.promotedSnapshotHandle_을 스냅샷의 internalName으로 업데이트합니다.

  4. 보조 Kubernetes 클러스터에서 TridentMirrorRelationship의 상태(status.state 필드)가 promoted로 승격되었는지 확인합니다.

페일오버 후 미러 관계 복원

미러 관계를 복원하기 전에 새 운영 환경으로 지정할 측을 선택합니다.

단계
  1. 보조 Kubernetes 클러스터에서 TridentMirrorRelationship의 spec.remoteVolumeHandle 필드 값이 업데이트되었는지 확인하십시오.

  2. 보조 Kubernetes 클러스터에서 TridentMirrorRelationship의 spec.mirror 필드를 `reestablished`로 업데이트합니다.

추가 작업

Trident는 운영 볼륨과 2차 볼륨에서 다음 작업을 지원합니다.

기본 PVC를 새 보조 PVC로 복제합니다

기본 PVC와 보조 PVC가 이미 있는지 확인하십시오.

단계
  1. 설정된 보조(대상) 클러스터에서 PersistentVolumeClaim 및 TridentMirrorRelationship CRD를 삭제합니다.

  2. 기본(소스) 클러스터에서 TridentMirrorRelationship CRD를 삭제합니다.

  3. 설정하려는 새로운 보조(대상) PVC에 대해 기본(소스) 클러스터에 새 TridentMirrorRelationship CRD를 생성합니다.

미러링된 운영 또는 보조 PVC의 크기 조정

PVC는 정상적으로 크기를 조정할 수 있으며, 데이터 양이 현재 크기를 초과하면 ONTAP은 대상 FlexVol을 자동으로 확장합니다.

PVC에서 복제를 제거합니다

복제를 제거하려면 현재 보조 볼륨에서 다음 작업 중 하나를 수행하십시오.

  • 보조 PVC에서 MirrorRelationship을 삭제합니다. 이렇게 하면 복제 관계가 끊어집니다.

  • 또는 spec.state 필드를 _promoted_로 업데이트하십시오.

PVC 삭제(이전에 미러링됨)

Trident는 복제된 PVC를 확인하고 볼륨 삭제를 시도하기 전에 복제 관계를 해제합니다.

TMR 삭제

미러링 관계의 한쪽에서 TMR을 삭제하면 Trident가 삭제를 완료하기 전에 나머지 TMR이 promoted 상태로 전환됩니다. 삭제 대상으로 선택된 TMR이 이미 promoted 상태인 경우 기존 미러 관계가 없으므로 해당 TMR이 제거되고 Trident는 로컬 PVC를 ReadWrite_로 승격시킵니다. 이 삭제는 ONTAP의 로컬 볼륨에 대한 SnapMirror 메타데이터를 해제합니다. 향후 이 볼륨을 미러 관계에 사용하려면 새 미러 관계를 생성할 때 _established 볼륨 복제 상태의 새 TMR을 사용해야 합니다.

ONTAP이 온라인 상태일 때 미러 관계를 업데이트합니다

미러 관계는 설정 후 언제든지 업데이트할 수 있습니다. state: promoted 또는 state: reestablished 필드를 사용하여 관계를 업데이트할 수 있습니다. 대상 볼륨을 일반 ReadWrite 볼륨으로 승격할 때 _promotedSnapshotHandle_을 사용하여 현재 볼륨을 복원할 특정 스냅샷을 지정할 수 있습니다.

ONTAP이 오프라인일 때 미러 관계를 업데이트합니다

Trident가 ONTAP 클러스터에 직접 연결되지 않은 상태에서 CRD를 사용하여 SnapMirror 업데이트를 수행할 수 있습니다. 다음 TridentActionMirrorUpdate 예제 형식을 참조하십시오.

apiVersion: trident.netapp.io/v1
kind: TridentActionMirrorUpdate
metadata:
  name: update-mirror-b
spec:
  snapshotHandle: "pvc-1234/snapshot-1234"
  tridentMirrorRelationshipName: mirror-b

status.state TridentActionMirrorUpdate CRD의 상태를 나타냅니다. Succeeded, In Progress, 또는 Failed 값을 가질 수 있습니다.