Cassandra CSI 備份與還原

您可以使用 CSI (容器儲存空間介面) 快照來備份及還原混合式資料。CSI 備份會觸發底層儲存空間系統使用提供的 CSI 驅動程式拍攝的磁碟快照。CSI 備份不需要 Google Cloud Storage 值區或遠端伺服器來儲存備份資料。

建議在 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。在管理工具適用的目錄中執行下列指令:
      • Helm 資訊套件: $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/
      • apigeectlHYBRID_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 可啟用排定的備份。
      • image 中的 pullPolicy:設為 Always
      • schedule:提供 Cron 運算式排程
    2. 設定 CSI 專屬備份的參數:
      • Cassandra 儲存空間群組值:已設定的 Cassandra 儲存空間類別必須支援 CSI 快照,才能執行 CSI 備份和還原作業。如要檢查儲存空間類別是否支援 CSI 快照,請執行下列指令,取得可用的儲存空間類別:
        kubectl get sc
        查看各儲存空間級別的「Provisioner」輸出內容。使用 CSI 的 Provisioner 名稱通常會包含「.csi.」部分,例如「pd.csi.storage.gke.io」。請在這個 Kubernetes CSI 驅動程式清單中尋找提供者名稱。如果供應工具的「其他功能」欄包含「快照」字樣,則使用供應工具的儲存空間類別會支援 CSI 快照。

        在儲存空間群組中新增這些參數。這兩個值都是必填項目。

        • storageclass:支援 CSI 快照的儲存空間級別名稱。
        • capacity:磁碟的容量。
      • 雲端供應商類型:

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

        • cloudProvider:backuprestore 中的 cloudProvider 設為 CSI

備份設定範例

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

  backup:
    enabled: true
    image:
      pullPolicy: Always
    cloudProvider: "CSI"
    schedule: "0 * * 11 *"

啟動手動備份

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

如要啟動手動 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 備份的時間戳記。
  • image 中的 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"
    cloudProvider: "CSI"
    image:
      pullPolicy: Always

遷移至 CSI 備份與還原

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

  1. 使用目前設定的非 CSI 備份方法產生新的備份。
  2. 變更混合 overrides.yaml 檔案中的備份設定,以便使用 CSI 備份覆寫值,如備份設定範例所示。
  3. 套用 overrides.yaml 檔案中的變更:

    Helm

    helm upgrade datastore apigee-datastore/ \
      --namespace apigee \
      --atomic \
      -f OVERRIDES_FILE.yaml
    

    apigeectl

    $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE.yaml
  4. 驗證備份工作:
    kubectl get cronjob -n apigee
  5. 備份工作完成後,請確認快照已建立。產生的快照數量應與混合型執行個體中的 Cassandra 節點數量相同。
    kubectl get volumesnapshot -n apigee