SnapMirrorを使用したボリュームのレプリケート
Tridentは、ディザスタリカバリのためにデータをレプリケートする、1つのクラスタ上のソースボリュームとピアクラスタ上のデスティネーションボリューム間のミラー関係をサポートします。 Trident Mirror Relationship(TMR)と呼ばれる名前空間付きのカスタムリソース定義(CRD)を使用して、次の操作を実行できます:
-
ボリューム間のミラー関係を作成する(PVC)
-
ボリューム間のミラー関係を削除する
-
ミラー関係を解除
-
災害時(フェイルオーバー)にセカンダリ ボリュームを昇格する
-
計画されたフェイルオーバーまたは移行中に、クラスタ間でのアプリケーションのロスレス移行を実行します
レプリケーションの前提条件
始める前に、次の前提条件が満たされていることを確認してください:
-
Trident:ONTAPをバックエンドとして利用するソースとデスティネーションの両方のKubernetesクラスタに、Tridentバージョン22.10以降が存在している必要があります。
-
ライセンス:ONTAP SnapMirror データ保護バンドルを使用する非同期ライセンスは、ソースとデスティネーション クラスタの両方で有効にする必要があります。詳細については、 "ONTAP における SnapMirror ライセンスの概要"を参照してください。
ONTAP 9.10.1以降では、すべてのライセンスがNetAppライセンス ファイル(NLF)として提供されます。これは、複数の機能を有効にする単一のファイルです。詳細については、"ONTAP Oneに含まれるライセンス"を参照してください。
SnapMirror非同期保護のみがサポートされています。
-
* クラスタと SVM * : ONTAP ストレージ バックエンドはピアリングする必要があります。詳細については、 "クラスタとSVMのピアリングの概要"を参照してください。
2つの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 の例を使用して、プライマリ ボリュームとセカンダリ ボリューム間のミラー関係を作成します。
-
プライマリ Kubernetes クラスタで次の手順を実行します:
-
`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" -
以前に作成した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-nasTridentはボリュームの内部情報とボリュームの現在のデータ保護(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 クラスタで次の手順を実行します:
-
StorageClassをtrident.netapp.io/replication: trueパラメータで作成します。
例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"Tridentは、設定された関係ポリシー名(または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-nasTridentはTridentMirrorRelationship CRDを確認し、関係が存在しない場合はボリュームの作成に失敗します。関係が存在する場合、Tridentは新しいFlexVolボリュームが、MirrorRelationshipで定義されたリモートSVMとピアリングされたSVM上に配置されるようにします。
-
ボリュームレプリケーションの状態
Tridentミラー リレーションシップ(TMR)は、PVC間のレプリケーション リレーションシップの一方の端を表すCRDです。デスティネーションTMRには状態があり、Tridentに望ましい状態を伝えます。デスティネーションTMRの状態は次のとおりです:
-
確立済み:ローカル PVC はミラー関係のデスティネーション ボリュームであり、これは新しい関係です。
-
昇格:ローカルPVCはReadWriteでマウント可能ですが、現在ミラー関係は有効ではありません。
-
再確立:ローカル PVC はミラー関係のデスティネーション ボリュームであり、以前もそのミラー関係にありました。
-
デスティネーション ボリュームがソース ボリュームと関係があった場合、デスティネーション ボリュームの内容が上書きされるため、再確立された状態を使用する必要があります。
-
ボリュームが以前にソースと関係していなかった場合、再確立された状態は失敗します。
-
計画外のフェイルオーバー中にセカンダリ PVC を昇格する
セカンダリ Kubernetes クラスタで次の手順を実行します:
-
TridentMirrorRelationshipの_spec.state_フィールドを `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_フィールドを_promoted_に更新し、_spec.promotedSnapshotHandle_をスナップショットのinternalNameに更新します。
-
セカンダリKubernetesクラスタで、TridentMirrorRelationshipのステータス(status.stateフィールド)がpromotedになっていることを確認します。
フェイルオーバー後にミラー関係を復元する
ミラー関係をリストアする前に、新しいプライマリとして作成する側を選択します。
-
セカンダリKubernetesクラスタで、TridentMirrorRelationshipの_spec.remoteVolumeHandle_フィールドの値が更新されていることを確認します。
-
セカンダリKubernetesクラスタで、TridentMirrorRelationshipの_spec.mirror_フィールドを `reestablished`に更新します。
追加操作
Tridentは、プライマリボリュームとセカンダリボリュームで次の操作をサポートします:
プライマリPVCを新しいセカンダリPVCにレプリケートする
プライマリ PVC とセカンダリ PVC が既に存在することを確認します。
-
確立されたセカンダリ(デスティネーション)クラスタからPersistentVolumeClaimとTridentMirrorRelationship CRDを削除します。
-
プライマリ(ソース)クラスタから TridentMirrorRelationship CRD を削除します。
-
新しいセカンダリ(デスティネーション) PVC を確立するために、プライマリ(ソース)クラスタ上に新しい TridentMirrorRelationship CRD を作成します。
ミラーリングされたプライマリまたはセカンダリ PVC のサイズを変更する
PVCは通常通りサイズ変更できます。ONTAPは、データの量が現在のサイズを超える場合、デスティネーションのflevxolを自動的に拡張します。
PVCからレプリケーションを削除する
レプリケーションを削除するには、現在のセカンダリ ボリュームで次のいずれかの操作を実行します:
-
セカンダリ PVC 上のMirrorRelationshipを削除します。これにより、レプリケーション関係が切断されます。
-
または、spec.state フィールドを promoted に更新します。
PVC を削除する(以前にミラーリングされたもの)
Tridentはレプリケートされた PVC をチェックし、ボリュームの削除を試みる前にレプリケーション関係を解放します。
TMRを削除する
ミラー関係の片側でTMRを削除すると、残りのTMRは_promoted_状態に移行してから、Tridentが削除を完了します。削除対象として選択されたTMRがすでに_promoted_状態にある場合、既存のミラー関係は存在せず、TMRは削除され、Tridentはローカル PVC を ReadWrite に昇格します。この削除により、ONTAPのローカルボリュームのSnapMirrorメタデータが解放されます。このボリュームが将来ミラー関係で使用される場合は、新しいミラー関係を作成するときに、_established_ボリュームレプリケーション状態を持つ新しいTMRを使用する必要があります。
ONTAPがオンラインのときにミラー関係を更新する
ミラー関係は、確立された後はいつでも更新できます。 `state: promoted`または `state: reestablished`フィールドを使用して関係を更新できます。デスティネーションボリュームを通常のReadWriteボリュームに昇格する場合は、_promotedSnapshotHandle_を使用して、現在のボリュームをリストアする特定のSnapshotを指定できます。
ONTAPがオフラインのときにミラー関係を更新する
CRDを使用すると、Tridentが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_のいずれかの値を取ることができます。