Cassandra CSI 備份與還原

從 Apigee hybrid 1.9 開始,您可以使用 CSI (容器儲存介面) 快照備份及還原混合式資料。CSI 備份會產生磁碟快照,並以加密資料的形式儲存在雲端儲存空間。CSI 備份不需要 Google Cloud Storage bucket 或遠端伺服器來儲存備份資料。

建議您為 Google Cloud、AWS 或 Azure 中代管的混合執行個體使用 CSI 備份。

本頁說明如何使用混合式 CSI 備份和還原功能。如需混合備份與還原作業的總覽,請參閱「Cassandra 備份與還原總覽」。

備份與還原限制

使用 CSI 備份和還原功能時,請注意下列限制:

  • 所設定儲存空間類別使用的 CSI 驅動程式必須支援 CSI 快照。如需驅動程式資訊,請參閱這份 Kubernetes CSI 驅動程式清單
  • 系統僅支援部分平台,僅支援 Google Cloud、AWS 和 Azure 平台。
  • 由於磁碟區快照限制,因此不支援 OpenShift Container Platform。
  • 僅支援雲端平台。不支援地端平台。
  • CSI 備份資料和非 CSI 混合備份資料不相容。非 CSI 備份無法用於 CSI 還原,CSI 備份也無法用於非 CSI 還原。
  • CSI 驅動程式的安裝和功能由 CSI 驅動程式供應商負責。
  • 使用者有責任確保叢集資源充足,可佈建 CSI 快照。
  • 使用者有責任移除舊的快照資料。

設定 CSI 備份

如要使用 CSI 安排混合備份作業,請按照下列步驟操作:

  1. 如果先前未設定混合備份:
    1. 執行下列 create-service-account 指令,建立具有標準 roles/storage.objectAdmin 角色的 Google Cloud 服務帳戶 (SA)。 這個 SA 角色可讓您將備份資料寫入 Cloud Storage。在 hybrid-base-directory/hybrid-files 目錄中執行下列指令:
      ./tools/create-service-account --env non-prod --dir ./service-accounts
      這個指令會建立名為 apigee-non-prod 的單一服務帳戶,供非正式環境使用,並將下載的金鑰檔案放在 ./service-accounts 目錄中。 如要進一步瞭解 Google Cloud 服務帳戶,請參閱「建立及管理服務帳戶」。
    2. create-service-account 指令會儲存含有服務帳戶私密金鑰的 JSON 檔案。檔案會儲存在執行指令的目錄中。您將在後續步驟中用到這個檔案的路徑。
  2. 開啟 overrides.yaml 檔案。設定下列參數,如範例覆寫檔案所示。

    1. backup 區塊中設定下列一般參數。如果您已為非 CSI 混合備份解決方案設定這些參數,則可將相同參數用於 CSI 快照。 如要進一步瞭解每個值,請參閱備份屬性參考表

      針對 backup

      • enabled:設為 true 即可啟用排定的備份。
      • 映像檔中的 pullPolicy:設為 Always
      • serviceAccountPath: 服務帳戶的路徑。
      • schedule:提供 Cron 運算式排程
    2. 為 CSI 專屬備份設定下列參數:
      • Cassandra 儲存空間群組值:設定的 Cassandra 儲存空間類別必須支援 CSI 快照,CSI 備份和還原功能才能運作。如要檢查儲存空間類別是否支援 CSI 快照,請執行下列指令來取得可用的儲存空間類別:
        kubectl get sc
        查看各儲存空間類別的「Provisioner」輸出內容。使用 CSI 的佈建器名稱通常會包含「.csi.」部分,例如「pd.csi.storage.gke.io」。在這個 Kubernetes CSI 驅動程式清單中,尋找佈建者名稱。 如果供應商的「其他功能」欄包含「SNAPSHOT」一詞,則使用供應商的儲存空間類別支援 CSI 快照。

        在儲存空間群組中新增這些參數。這兩個值都必須提供。

        • storageclass:已啟用 CSI 快照的儲存空間級別名稱。
        • 容量:磁碟容量。
      • 雲端服務供應商類型:

        確認 CSI 快照功能後,請修改覆寫檔案,使用 CSI 備份和還原功能:

        • cloudProvider:backup 中將 cloudProviderrestore 設為 CSI

備份設定範例

本節顯示範例 overrides.yaml 檔案中與備份相關的部分。
cassandra:
  hostNetwork: false
  replicaCount: 3
   storage:
    storageclass: standard-rwo
    capacity: 100Gi
  image:
     pullPolicy: Always

  backup:
   enabled: true
   image:
     pullPolicy: Always
   serviceAccountPath: "/Users/myuser/apigee-hybrid/hybrid-files/service-accounts/mycompany-hybrid-apigee-cassandra.json"
   cloudProvider: "CSI"
   schedule: "0 * * 11 *"

啟動手動備份

系統會根據 overrides.yaml 檔案中設定的 cron 排程,自動產生 CSI 備份。

如要啟動手動 CSI 備份作業,請使用下列指令:

kubectl create job -n apigee --from=cronjob/apigee-cassandra-backup backup-pod-name
其中 backup-pod-name 是要建立的備份 Pod 名稱。

驗證備份

如要確認備份作業是否成功,其中一種方法是使用下列指令,檢查 Kubernetes 叢集上的磁碟區快照:

kubectl get volumesnapshot -n apigee

輸出內容會顯示叢集上目前的快照清單。CSI 備份程序會為每個 Cassandra 磁碟建立快照。產生的快照數量應與叢集中的 Cassandra Pod 總數相符。

還原備份

使用這個程序還原先前產生的 CSI 備份。如需還原備份的一般資訊和程序總覽,請參閱還原總覽頁面

如要啟動 CSI 備份還原作業,請按照混合式非 CSI 單一區域還原的指示操作,但請在 overrides.yamlrestore 區塊中使用下列值。如要進一步瞭解每個值,請參閱備份屬性參考資料表,並參閱還原設定範例

  • enabled:設為 true,即可還原以 snapshotTimestamp 時間戳記參照的備份。
  • snapshotTimestamp:提供先前 CSI 備份的時間戳記。
  • serviceAccountPath: 服務帳戶的路徑。
  • 映像檔中的 pullPolicy:設為 Always

如要尋找要還原的 snapshotTimestamp 值,請執行下列指令,取得可用快照清單:

kubectl get volumesnapshot -n apigee
在傳回的清單中,快照名稱會包含時間戳記:
pvc-us-west2-b-20220803004907-47beff0e306d8861
在本範例中,時間戳記為 20220803004907

還原設定範例

本節顯示範例 overrides.yaml 檔案中與還原相關的部分。
cassandra:
  hostNetwork: false
  replicaCount: 3
   storage:
    storageclass: standard-rwo
    capacity: 100Gi
  image:
     pullPolicy: Always

  restore:
    enabled: true
    snapshotTimestamp: "20220908222130"
    serviceAccountPath: "/Users/myuser/apigee-hybrid/hybrid-files/service-accounts/mycompany-hybrid-apigee-cassandra.json"
    cloudProvider: "CSI"
    image:
      pullPolicy: Always

遷移至 CSI 備份與還原

如果您先前未使用混合備份與還原功能,可以按照「設定 CSI 備份」中的操作說明建立新的 CSI 備份,不必執行本節中的步驟。這些步驟將引導您從非 CSI 備份和還原解決方案遷移至 CSI 備份。

  1. 使用目前設定的非 CSI 備份方法產生新的備份。
  2. 變更混合式 overrides.yaml 檔案中的備份設定,使用 CSI 備份覆寫,如備份設定範例所示。
  3. overrides.yaml 檔案中套用變更:
    $APIGEECTL_HOME/apigeectl apply -f YOUR_OVERRIDES_FILE
  4. 驗證備份工作:
    kubectl get cronjob -n apigee
  5. 備份工作完成後,請確認已建立快照。產生的快照數量應等同於 Hybrid 執行個體中的 Cassandra 節點數量。
    kubectl get volumesnapshot -n apigee