Skip to main content
此產品有較新版本可以使用。
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

使用 SnapMirror 複製磁碟區

Trident 支援在叢集上的來源磁碟區和對等叢集上的目標磁碟區之間建立鏡像關係,以複製資料進行災難復原。  您可以使用名為 Trident Mirror Relationship(TMR)的命名空間自訂資源定義(CRD)來執行下列操作:

  • 在磁碟區(PVC)之間建立鏡像關係

  • 移除磁碟區之間的鏡射關係

  • 打破鏡像關係

  • 在災難情況下(容錯移轉)提升次要磁碟區

  • 在計劃內故障轉移或遷移期間,實現應用程式在叢集間的無損遷移

複寫的前提條件

在開始之前、請確保符合下列先決條件:

ONTAP 叢集
  • Trident:使用 ONTAP 作為後端的來源 Kubernetes 叢集和目標 Kubernetes 叢集上必須存在 Trident 版本 22.10 或更新版本。

  • 授權:必須在來源和目的地 ONTAP 叢集上啟用使用資料保護套件的 ONTAP SnapMirror 非同步授權。如需詳細資訊,請參閱 "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)

註 ASA r2 系統不支援使用 SnapMirror 的磁碟區複寫。如需 ASA r2 系統的相關資訊、請參閱"了解 ASA r2 儲存系統"

建立鏡射 PVC

請依照這些步驟並使用 CRD 範例,在主磁碟區和次要磁碟區之間建立鏡像關係。

步驟
  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. 建立 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
    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. 建立一個 PVC,將先前建立的 StorageClass 作為輔助(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

      Trident 將檢查 TridentMirrorRelationship CRD,如果關係不存在,則建立磁碟區失敗。如果關係存在,Trident 將確保將新 FlexVol 磁碟區放置在與 MirrorRelationship 中定義的遠端 SVM 對等的 SVM 上。

Volume 複寫狀態

Trident 鏡像關係(TMR)是一種 CRD,它表示 PVC 之間複製關係的一端。目標 TMR 具有一個狀態,該狀態告知 Trident 所需的狀態。目標 TMR 具有以下狀態:

  • 已建立:本地 PVC 是鏡像關係的目標磁碟區,這是一個新的關係。

  • Promoted:本機 PVC 為 ReadWrite 且可掛載,目前沒有鏡像關係生效。

  • 重新建立:本機 PVC 是鏡像關係的目的地 Volume,且先前也處於該鏡像關係中。

    • 如果目標 volume 曾經與來源 volume 有關聯,則必須使用重新建立的狀態,因為它會覆寫目標 volume 的內容。

    • 如果磁碟區之前未與來源建立關係,則重新建立的狀態將會失敗。

在非計劃性容錯移轉期間提升次要 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 欄位)是否已提升。

故障轉移後還原鏡像關係

在還原鏡射關係之前、請選擇您要做為新主要端的一端。

步驟
  1. 在輔助 Kubernetes 叢集上,確保 TridentMirrorRelationship 上 spec.remoteVolumeHandle 欄位的值已更新。

  2. 在輔助 Kubernetes 叢集上,將 TridentMirrorRelationship 的 spec.mirror 欄位更新為 reestablished

其他作業

Trident 支援對主要磁碟區和次要磁碟區執行下列操作:

將主要 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 會導致剩餘的 TMR 在 Trident 完成刪除作業之前轉換為 promoted 狀態。如果選擇刪除的 TMR 已處於 promoted 狀態,表示不存在鏡像關係,此時 TMR 將被移除,Trident 會將本機 PVC 提升為 ReadWrite 狀態。此刪除操作會釋放 ONTAP 中本機磁碟區的 SnapMirror 中繼資料。如果將來在鏡像關係中使用此磁碟區,則在建立新鏡像關係時必須使用狀態為 established 的磁碟區複寫新 TMR。

ONTAP 上線時更新鏡像關係

鏡像關係建立後可隨時更新。您可以使用 `state: promoted`或 `state: reestablished`欄位來更新關係。將目標磁碟區提升為常規 ReadWrite 磁碟區時、您可以使用 promotedSnapshotHandle 指定要將目前磁碟區還原到的特定快照。

ONTAP 離線時更新鏡像關係

您可以使用 CRD 執行 SnapMirror 更新,而無需 Trident 與 ONTAP 叢集直接連線。請參考以下 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 的狀態。它可以取值於 SucceededIn ProgressFailed