SnapMirror를 사용하여 볼륨을 복제합니다
Astra Control Provisioner를 사용하면 재해 복구를 위한 데이터 복제를 위해 한 클러스터의 소스 볼륨과 피어링된 클러스터의 타겟 볼륨 간에 미러 관계를 생성할 수 있습니다. 이름이 지정된 CRD(사용자 지정 리소스 정의)를 사용하여 다음 작업을 수행할 수 있습니다.
-
볼륨 간 미러 관계 생성(PVC)
-
볼륨 간 미러 관계를 제거합니다
-
미러 관계를 해제합니다
-
재해 상태(페일오버) 중에 2차 볼륨 승격
-
계획된 페일오버 또는 마이그레이션 중에 클러스터에서 클러스터로 애플리케이션의 무손실 전환 수행
복제 사전 요구 사항
시작하기 전에 다음과 같은 사전 요구 사항이 충족되는지 확인하십시오.
-
* Astra Control Provisioner *: Astra Control Provisioner 버전 23.10 이상이 ONTAP를 백엔드로 사용하는 소스 및 대상 Kubernetes 클러스터 모두에 있어야 합니다.
-
* 라이센스 *: 소스 및 대상 ONTAP 클러스터 모두에서 데이터 보호 번들을 사용하는 ONTAP SnapMirror 비동기 라이센스를 활성화해야 합니다. 을 참조하십시오 "ONTAP의 SnapMirror 라이센스 개요" 를 참조하십시오.
-
* 클러스터 및 SVM *: ONTAP 스토리지 백엔드를 피어링해야 합니다. 을 참조하십시오 "클러스터 및 SVM 피어링 개요" 를 참조하십시오.
두 ONTAP 클러스터 간의 복제 관계에 사용되는 SVM 이름이 고유한지 확인합니다. -
* Astra Control Provisioner 및 SVM *: 피어링된 원격 SVM을 대상 클러스터의 Astra Control Provisioner에서 사용할 수 있어야 합니다.
-
볼륨 복제는 ONTAP-NAS 및 ONTAP-SAN 드라이버에서 지원됩니다.
대칭 복사된 PVC를 작성합니다
다음 단계를 수행하고 CRD 예제를 사용하여 운영 볼륨과 보조 볼륨 간의 미러 관계를 생성합니다.
-
운영 Kubernetes 클러스터에서 다음 단계를 수행합니다.
-
를 사용하여 StorageClass 객체를 생성합니다
trident.netapp.io/replication: true
매개 변수.예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"
-
이전에 생성된 StorageClass를 사용하여 PVC를 생성합니다.
예kind: PersistentVolumeClaim apiVersion: v1 metadata: name: csi-nas spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: csi-nas
-
로컬 정보로 MirrorRelationship CR을 생성합니다.
예kind: TridentMirrorRelationship apiVersion: trident.netapp.io/v1 metadata: name: csi-nas spec: state: promoted volumeMappings: - localPVCName: csi-nas
Astra Control Provisioner는 볼륨과 볼륨의 현재 DP(Data Protection) 상태에 대한 내부 정보를 가져온 다음 MirrorRelationship의 상태 필드를 채웁니다.
-
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
-
-
보조 Kubernetes 클러스터에서 다음 단계를 수행합니다.
-
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
-
대상 및 소스 정보를 사용하여 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"
Astra Control Provisioner는 구성된 관계 정책 이름(또는 ONTAP의 기본값)을 사용하여 SnapMirror 관계를 생성하고 초기화합니다.
-
이전에 생성한 StorageClass를 사용하여 PVC를 생성하여 보조(SnapMirror 대상) 역할을 합니다.
예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
Astra Control Provisioner가 TridentMirrorRelationship CRD를 확인하고 관계가 없는 경우 볼륨을 생성하지 못합니다. 이 관계가 있으면 Astra Control Provisioner는 새로운 FlexVol 볼륨을 MirrorRelationship에 정의된 원격 SVM과 함께 피어링된 SVM에 배치합니다.
-
볼륨 복제 상태입니다
Trident Mirror Relationship(TMR)은 PVC 간 복제 관계의 한쪽 끝을 나타내는 CRD입니다. 대상 TMR에는 Astra Control Provisioner에게 원하는 상태를 알려주는 상태가 있습니다. 대상 TMR의 상태는 다음과 같습니다.
-
* 설립 * : 로컬 PVC는 미러 관계의 대상 볼륨이며, 이것은 새로운 관계입니다.
-
* 승진된 * : 로컬 PVC는 현재 유효한 미러 관계가 없는 ReadWrite 및 마운트 가능합니다.
-
* 재설립 * : 로컬 PVC는 미러 관계의 대상 볼륨이며 이전에 해당 미러 관계에 있었습니다.
-
대상 볼륨이 대상 볼륨 내용을 덮어쓰므로 대상 볼륨이 소스 볼륨과 관계가 있는 경우 다시 설정된 상태를 사용해야 합니다.
-
볼륨이 소스와 이전에 관계가 없는 경우 재설정된 상태가 실패합니다.
-
비계획 페일오버 중에 보조 PVC를 승격합니다
보조 Kubernetes 클러스터에서 다음 단계를 수행합니다.
-
TridentMirrorRelationship의 _spec.state_field를 로 업데이트합니다
promoted
.
계획된 페일오버 중에 보조 PVC를 승격합니다
계획된 장애 조치(마이그레이션) 중에 다음 단계를 수행하여 보조 PVC를 승격합니다.
-
운영 Kubernetes 클러스터에서 PVC의 스냅샷을 생성하고 스냅샷이 생성될 때까지 기다립니다.
-
운영 Kubernetes 클러스터에서 SnapshotInfo CR을 생성하여 내부 세부 정보를 가져옵니다.
예kind: SnapshotInfo apiVersion: trident.netapp.io/v1 metadata: name: csi-nas spec: snapshot-name: csi-nas-snapshot
-
보조 Kubernetes 클러스터에서 TridentMirrorRelationship_CR 의 _spec.state_field를 _promitted 및 spec.promotedSnapshotHandle 으로 업데이트하여 스냅샷의 내부 이름으로 업데이트합니다.
-
보조 Kubernetes 클러스터에서 승격될 TridentMirrorRelationship의 상태(status.state 필드)를 확인합니다.
페일오버 후 미러 관계를 복구합니다
미러 관계를 복구하기 전에 새 1차 사이트로 만들 측면을 선택합니다.
-
보조 Kubernetes 클러스터에서 TridentMirrorRelationship의 _spec.remoteVolumeHandle_field 값이 업데이트되었는지 확인합니다.
-
보조 Kubernetes 클러스터에서 TridentMirrorRelationship의 _spec.mirror_field를 로 업데이트합니다
reestablished
.
추가 작업
Astra Control Provisioner는 운영 볼륨과 2차 볼륨에서 다음 작업을 지원합니다.
1차 PVC를 새로운 2차 PVC로 복제합니다
이미 1차 PVC와 2차 PVC가 있는지 확인하십시오.
-
설정된 보조(대상) 클러스터에서 PersistentVolumeClaim 및 TridentMirrorRelationship CRD를 삭제합니다.
-
운영(소스) 클러스터에서 TridentMirrorRelationship CRD를 삭제합니다.
-
설정하려는 새 2차(대상) PVC에 대해 1차(소스) 클러스터에 새 TridentMirrorRelationship CRD를 생성합니다.
대칭 복사, 1차 또는 2차 PVC의 크기를 조정합니다
PVC는 평소대로 크기를 조정할 수 있으며, 데이터 양이 현재 크기를 초과할 경우 ONTAP는 자동으로 대상 flevxols를 확장합니다.
PVC에서 복제를 제거합니다
복제를 제거하려면 현재 보조 볼륨에 대해 다음 작업 중 하나를 수행합니다.
-
2차 PVC에서 MirrorRelationship을 삭제합니다. 이렇게 하면 복제 관계가 끊어집니다.
-
또는 spec.state 필드를 _promessed_로 업데이트합니다.
PVC 삭제(이전에 미러링됨)
Astra Control Provisioner는 복제된 PVC를 확인하고 볼륨을 삭제하기 전에 복제 관계를 해제합니다.
TMR을 삭제합니다
미러링된 관계의 한 쪽에서 TMR을 삭제하면 Astra Control Provisioner가 삭제를 완료하기 전에 나머지 TMR이 _promessed_state로 전환됩니다. 삭제하도록 선택한 TMR이 이미 _PROJED_STATE에 있는 경우 기존 미러 관계가 없으며 TMR이 제거되고 Astra Control Provisioner가 로컬 PVC를 _ReadWrite_로 승격합니다. 이렇게 삭제하면 ONTAP의 로컬 볼륨에 대한 SnapMirror 메타데이터가 해제됩니다. 이 볼륨이 향후 미러 관계에 사용될 경우 새 미러 관계를 생성할 때 _establed_volume 복제 상태의 새 TMR을 사용해야 합니다.
ONTAP가 온라인 상태일 때 미러 관계를 업데이트합니다
미러 관계는 설정된 후 언제든지 업데이트할 수 있습니다. 를 사용할 수 있습니다 state: promoted
또는 state: reestablished
관계를 업데이트하는 필드
대상 볼륨을 일반 ReadWrite 볼륨으로 승격할 때 _promotedSnapshotHandle_을 사용하여 현재 볼륨을 복구할 특정 스냅샷을 지정할 수 있습니다.
ONTAP이 오프라인일 때 미러 관계를 업데이트합니다
Astra Control이 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_에서 가져올 수 있습니다.