Cassandra CSI 备份和恢复

从 Apigee Hybrid 1.9 开始,您可以使用 CSI(容器存储接口)快照来备份和恢复 Hybrid 数据。CSI 备份会生成磁盘快照并将其作为加密数据存储在 Cloud Storage 中。CSI 备份不需要 Google Cloud Storage 存储桶或远程服务器即可存储备份数据。

建议对托管在 Google Cloud、AWS 或 Azure 中的 Hybrid 实例使用 CSI 备份。

本页面介绍使用 Hybrid CSI 备份和恢复的步骤。如需大致了解 Hybrid 备份和恢复,请参阅 Cassandra 备份和恢复概览

备份和恢复限制

使用 CSI 备份和恢复时,请注意以下限制:

  • 配置的存储类别使用的 CSI 驱动程序必须支持 CSI 快照。如需了解驱动程序信息,请参阅此 Kubernetes CSI 驱动程序列表
  • 并非所有平台都受支持。仅支持 Google Cloud、AWS 和 Azure 平台。
  • 由于卷快照限制,不支持 OpenShift Container Platform。
  • 仅支持云平台。不支持本地平台。
  • CSI 备份数据与非 CSI Hybrid 备份数据不兼容。非 CSI 备份不能用于 CSI 恢复,CSI 备份不能用于非 CSI 恢复。
  • CSI 驱动程序安装和运行由 CSI 驱动程序供应商负责。
  • 用户负责确保有足够的集群资源可用于预配 CSI 快照。
  • 用户负责移除旧快照数据。

设置 CSI 备份

如需使用 CSI 安排 Hybrid 备份,请执行以下步骤:

  1. 如果您之前未设置 Hybrid 备份:
    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 Hybrid 备份解决方案设置这些参数,则可以为 CSI 快照使用相同的参数。如需详细了解每个值,请参阅备份属性参考表

      对于 backup

      • enabled:设置为 true 以启用计划备份。
      • pullPolicy in image:设置为 Always
      • serviceAccountPath:服务账号的路径。
      • schedule:提供 cron 表达式时间表
    2. 为 CSI 专用备份设置以下参数:
      • Cassandra 存储组值:已配置的 Cassandra 存储类别必须支持 CSI 快照,才能进行 CSI 备份和恢复。如需检查存储类别是否支持 CSI 快照,请运行以下命令获取可用的存储类别:
        kubectl get sc
        查看每个存储类别的“Provisioner”输出。使用 CSI 的预配工具名称中通常具有“.csi”部分,例如“pd.csi.storage.gke.io”。在此 Kubernetes CSI 驱动程序列表中查找预配工具名称。如果预配工具的“Other Features”列包含“SNAPSHOT”一词,则使用该预配工具的存储类别支持 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
   serviceAccountPath: "/Users/myuser/apigee-hybrid/hybrid-files/service-accounts/mycompany-hybrid-apigee-cassandra.json"
   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 备份的恢复,请按照 Hybrid 非 CSI 单区域恢复的说明操作,但在 overrides.yamlrestore 块中使用以下值。请参阅备份属性参考表了解每个值的详细信息,并参阅恢复配置示例查看示例。

  • enabled:设置为 true 以启用使用 snapshotTimestamp 时间戳引用的备份的恢复。
  • snapshotTimestamp:提供先前 CSI 备份的时间戳。
  • serviceAccountPath:服务账号的路径。
  • pullPolicy in image:设置为 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 备份和恢复

如果您之前没有使用过 Hybrid 备份和恢复,则可以按照设置 CSI 备份中的说明创建新的 CSI 备份,无需执行本部分中的步骤。以下步骤将指导您从非 CSI 备份和恢复解决方案迁移到 CSI 备份。

  1. 使用当前配置的非 CSI 备份方法生成新的备份。
  2. 示例备份配置中所示。
  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