SnapMirrorによるボリュームのレプリケート
Astra Control Provisionerを使用すると、ディザスタリカバリ用にデータをレプリケートするために、一方のクラスタのソースボリュームとピアクラスタのデスティネーションボリュームの間にミラー関係を作成できます。名前空間カスタムリソース定義(CRD)を使用して、次の操作を実行できます。
-
ボリューム(PVC)間のミラー関係を作成する
-
ボリューム間のミラー関係の削除
-
ミラー関係を解除する
-
災害時(フェイルオーバー)にセカンダリボリュームを昇格する
-
クラスタからクラスタへのアプリケーションのロスレス移行の実行(計画的なフェイルオーバーまたは移行時)
レプリケーションの前提条件
作業を開始する前に、次の前提条件を満たしていることを確認してください。
-
* Astra Control Provisioner *:ONTAPをバックエンドとして利用するソースとデスティネーションの両方のKubernetesクラスタに、Astra Control Provisionerバージョン22.10以降が必要です。
-
ライセンス:Data Protection Bundleを使用するONTAP SnapMirror非同期ライセンスが、ソースとデスティネーションの両方のONTAPクラスタで有効になっている必要があります。を参照してください "ONTAP のSnapMirrorライセンスの概要" を参照してください。
-
*クラスタとSVM *:ONTAPストレージバックエンドにピア関係が設定されている必要があります。を参照してください "クラスタと SVM のピアリングの概要" を参照してください。
2つの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)の状態をフェッチし、MirrorRelationshipのstatusフィールドに値を入力します。
-
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関係を作成し、初期化します。
-
セカンダリ(SnapMirrorデスティネーション)として機能するStorageClassを作成して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
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でマウント可能であり、ミラー関係は現在有効ではありません。
-
* reestablished *:ローカルPVCはミラー関係のデスティネーションボリュームであり、以前はそのミラー関係に含まれていました。
-
デスティネーションボリュームはデスティネーションボリュームの内容を上書きするため、ソースボリュームとの関係が確立されたことがある場合は、reestablished状態を使用する必要があります。
-
ボリュームが以前にソースとの関係になかった場合、再確立状態は失敗します。
-
計画外フェールオーバー時にセカンダリPVCを昇格する
セカンダリKubernetesクラスタで次の手順を実行します。
-
TridentMirrorRelationshipの_spec.state_フィールド を次のように更新します。
promoted
。
計画的フェイルオーバー中にセカンダリPVCを昇格
計画的フェイルオーバー(移行)中に、次の手順を実行してセカンダリPVCをプロモートします。
-
プライマリKubernetesクラスタでPVCのSnapshotを作成し、Snapshotが作成されるまで待ちます。
-
プライマリ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_フィールド を_promoted_に更新し、_spec.promotedSnapshotHandle_をSnapshotのinternalNameにします。
-
セカンダリKubernetesクラスタで、TridentMirrorRelationshipのステータス(status.stateフィールド)がPromotedになっていることを確認します。
フェイルオーバー後にミラー関係をリストアする
ミラー関係をリストアする前に、新しいプライマリとして作成する側を選択します。
-
セカンダリKubernetesクラスタで、TridentMirrorRelationshipの_spec.remoteVolumeHandle_fieldの値が更新されていることを確認します。
-
セカンダリKubernetesクラスタで、TridentMirrorRelationshipの_spec.mirror_fieldを
reestablished
。
その他の処理
Astra Control Provisionerでは、プライマリボリュームとセカンダリボリュームに対する次の処理がサポートされます。
新しいセカンダリPVCへのプライマリPVCの複製
プライマリPVCとセカンダリPVCがすでに存在していることを確認します。
-
PersistentVolumeClaim CRDとTridentMirrorRelationship CRDを、確立されたセカンダリ(デスティネーション)クラスタから削除します。
-
プライマリ(ソース)クラスタからTridentMirrorRelationship CRDを削除します。
-
確立する新しいセカンダリ(デスティネーション)PVC用に、プライマリ(ソース)クラスタに新しいTridentMirrorRelationship CRDを作成します。
ミラー、プライマリ、またはセカンダリPVCのサイズ変更
PVCは通常どおりサイズ変更できます。データ量が現在のサイズを超えると、ONTAPは自動的に宛先フレフxolを拡張します。
PVCからのレプリケーションの削除
レプリケーションを削除するには、現在のセカンダリボリュームで次のいずれかの操作を実行します。
-
セカンダリPVCのMirrorRelationshipを削除します。これにより、レプリケーション関係が解除されます。
-
または、spec.stateフィールドを_promoted_に更新します。
(以前にミラーリングされていた)PVCの削除
Astra Control Provisionerは、ボリュームの削除を試行する前に、レプリケートされたPVCをチェックし、レプリケーション関係を解放します。
TMRの削除
ミラー関係の一方のTMRを削除すると、Astra Control Provisionerが削除を完了する前に、残りのTMRが_promoted_stateに移行します。削除対象として選択したTMRがすでに_promoted_stateである場合は、既存のミラー関係は存在せず、TMRが削除され、Astra Control ProvisionerがローカルPVCを_ReadWrite_に昇格します。この削除により、ONTAP内のローカルボリュームのSnapMirrorメタデータが解放されます。このボリュームを今後ミラー関係で使用する場合は、新しいミラー関係を作成するときに、レプリケーション状態が_established_volumeである新しいTMRを使用する必要があります。
ONTAPがオンラインのときにミラー関係を更新
ミラー関係は、確立後にいつでも更新できます。を使用できます state: promoted
または state: reestablished
関係を更新するフィールド。
デスティネーションボリュームを通常のReadWriteボリュームに昇格する場合は、_promotedSnapshotHandle_を使用して、現在のボリュームのリストア先となる特定のSnapshotを指定できます。
ONTAPがオフラインの場合にミラー関係を更新
CRDを使用すると、Astra ControlからONTAPクラスタに直接接続せずに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_のいずれかの値を指定できます。