Cassandra CSI 备份和恢复

您可以使用 CSI(容器存储接口)快照备份和恢复混合数据。CSI 备份会触发底层存储系统使用所提供的 CSI 驱动程序截取的磁盘快照。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。在您的管理工具对应的目录中执行以下命令:
      • 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 Hybrid 备份解决方案设置这些参数,则可以为 CSI 快照使用相同的参数。如需详细了解每个值,请参阅备份属性参考表

      对于 backup

      • enabled:设置为 true 以启用计划备份。
      • pullPolicy in image:设置为 Always
      • 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
    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 备份的时间戳。
  • 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"
    cloudProvider: "CSI"
    image:
      pullPolicy: Always

迁移到 CSI 备份和恢复

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

  1. 使用当前配置的非 CSI 备份方法生成新的备份。
  2. 更改 Hybrid 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. 备份作业完成后,验证快照已创建。生成的快照数量应与 Hybrid 实例中的 Cassandra 节点数量相同。
    kubectl get volumesnapshot -n apigee