在单个区域中恢复

本页面介绍如何在单个区域中恢复 Cassandra。

在单区域部署中,Apigee Hybrid 部署在单个数据中心或区域中。如果您的部署中有多个 Apigee 组织,则恢复过程会恢复所有组织的数据。在多组织设置中,您无法恢复特定的组织。

从备份恢复区域

根据您用于 Apigee Hybrid 的管理工具选择相应说明:

Helm

  1. overrides.yaml 文件中更新 Cassandra 恢复详细信息:

    namespace: YOUR_RESTORE_NAMESPACE # Use the same namespace as in your original cluster.
    cassandra:
      hostNetwork: false
    ...
    restore:
      enabled: true
      serviceAccountPath: "SA_JSON_FILE_PATH"
      dbStorageBucket: "CLOUD_STORAGE_BUCKET_PATH"
      cloudProvider: "GCP"  # required verbatim "GCP" (all caps)
      snapshotTimestamp: "TIMESTAMP"
    ...
    backup:
      enabled: false
    ...
    

    其中:

    属性 说明
    namespace

    YOUR_RESTORE_NAMESPACE

    用于恢复的命名空间。使用原始集群中的同一命名空间。

    cassandra:hostNetwork

    hostNetwork 是必需的,应始终设置为 false

    restore:enabled 恢复功能默认处于停用状态。您必须将此属性设为 true
    restore:serviceAccountPath

    SA_JSON_FILE_PATH

    文件系统上指向为备份创建的服务账号的路径。

    restore:dbStorageBucket

    CLOUD_STORAGE_BUCKET_PATH

    存储备份数据的 Cloud Storage 存储桶路径,格式如下:gs://BUCKET_NAMEgs:// 是必需的。

    restore:cloudProvider

    GCP

    cloudProvider: "GCP" 属性是必需的属性。

    restore:snapshotTimestamp

    TIMESTAMP

    要恢复的备份快照的时间戳。如需查看可以使用哪些时间戳,请转到 dbStorageBucket 并查看存储桶中存在的文件。每个文件名都包含时间戳值。例如:backup_20210203213003_apigee-cassandra-default-0.tgz

    其中,20210203213003 是您在希望恢复该时间点创建的备份时使用的 snapshotTimestamp 值。

    backup:enabled 您应该将此属性设为 false(以防它之前被设置为 true)。
  2. 如果您一开始没有干净集群,请按照对 helm 停用 Hybrid 区域文档进行操作,以将现有 Hybrid 安装置于干净状态(您可以让 Cert Manager 保持安装状态)。这会使您所处的状态如同您在第 11 步开始之前一直按照 Helm 运行时设置手册进行操作一样。

  3. 确认 Apigee 命名空间中没有剩余的 Pod:

    kubectl get pods -n apigee
            kubectl get pods -n apigee-system
  4. 如果您使用的是 CSI 备份,请通过运行以下命令来确保您可以查看要用于恢复过程的卷快照:

    kubectl get volumesnapshot -n apigee
              
  5. 按照安装手册中的第 11 步的说明逐个安装所有 Hybrid 组件。请注意,apigee-cassandra-restore Pod 将在您运行命令安装 datastore 后创建,但只有在安装 apigee-org 组件后,它才会进入 running 状态。

如需详细了解 Cassandra 备份和恢复,请参阅 Cassandra 备份概览

apigeectl

在配置中,Cassandra 备份可以位于 Cloud Storage 或远程服务器上。无论是哪种情况,请执行以下步骤进行恢复:

  1. 验证 Hybrid 版本。
    apigeectl version
    确保该版本与在存储空间中创建备份文件的版本相同。
  2. 确认您要恢复到的 Kubernetes 集群没有之前的 Apigee Hybrid 安装。如果您要恢复到现有集群,请使用以下命令删除现有 Apigee Hybrid 安装:
    apigeectl delete -f overrides.yaml
    kubectl -n apigee get apigeedatastore,apigeeredis,apigeetelemetry,org,env,arc # The output should be empty.
    apigeectl delete --all -f overrides.yaml
  3. 打开 overrides.yaml 文件,并将 restore 属性设置为所需的值:

    Cloud Storage

    参数

    namespace: YOUR_RESTORE_NAMESPACE # Use the same namespace as in your original cluster.
    cassandra:
      hostNetwork: false
      ...
      restore:
        enabled: true
        serviceAccountPath: "SA_JSON_FILE_PATH"
        dbStorageBucket: "CLOUD_STORAGE_BUCKET_PATH"
        cloudProvider: "GCP"  # required verbatim "GCP" (all caps)
        snapshotTimestamp: "TIMESTAMP"
      ...
      backup:
        enabled: false
        serviceAccountPath: "SA_JSON_FILE_PATH"
        dbStorageBucket: "CLOUD_STORAGE_BUCKET_PATH"
        cloudProvider: "GCP"  # required verbatim "GCP" (all caps)
        schedule: "SCHEDULE"
    

    示例

    namespace: apigee
    cassandra:
      hostNetwork: false
      ...
      restore:
        enabled: true
        serviceAccountPath: "/Users/myhome/.ssh/my_cassandra_backup.json"
        dbStorageBucket: "gs://myname-cassandra-backup"
        cloudProvider: "GCP"
        snapshotTimestamp: "20201001183903"
    
      ...
      backup:
        enabled: false
        serviceAccountPath: "/Users/myhome/.ssh/my_cassandra_backup.json"
        dbStorageBucket: "gs://myname-cassandra-backup"
        cloudProvider: "GCP"
        schedule: "0 2 * * *"
      ...

    其中:

    属性 说明
    namespace

    YOUR_RESTORE_NAMESPACE

    用于恢复的命名空间。使用原始集群中的同一命名空间。

    cassandra:hostNetwork

    hostNetwork 是必需的,应始终设置为 false

    restore:enabled 恢复功能默认处于停用状态。您必须将此属性设为 true
    restore:serviceAccountPath

    SA_JSON_FILE_PATH

    文件系统上指向为备份创建的服务账号的路径。

    restore:dbStorageBucket

    CLOUD_STORAGE_BUCKET_PATH

    存储备份数据的 Cloud Storage 存储桶路径,格式如下:gs://BUCKET_NAMEgs:// 是必需的。

    restore:cloudProvider

    GCP

    cloudProvider: "GCP" 属性是必需的属性。

    restore:snapshotTimestamp

    TIMESTAMP

    要恢复的备份快照的时间戳。如需查看可以使用哪些时间戳,请转到 dbStorageBucket 并查看存储桶中存在的文件。每个文件名都包含时间戳值。例如:backup_20210203213003_apigee-cassandra-default-0.tgz

    其中,20210203213003 是您在希望恢复该时间点创建的备份时使用的 snapshotTimestamp 值。

    backup:enabled 您应该将此属性设为 false(以防它之前被设置为 true)。
    backup:serviceAccountPath

    SA_JSON_FILE_PATH

    文件系统上指向运行 ./tools/create-service-account 时所下载的服务账号 JSON 文件的路径

    backup:dbStorageBucket

    CLOUD_STORAGE_BUCKET_PATH

    Cloud Storage 存储桶路径,格式如下:gs://BUCKET_NAMEgs:// 是必需的。

    backup:cloudProvider

    GCP

    cloudProvider: "GCP" 属性是必需的属性。

    backup:schedule

    SCHEDULE

    备份的开始时间,使用标准 crontab 语法指定。默认值:0 2 * * *

    非 Cloud Storage

    参数

      namespace: YOUR_RESTORE_NAMESPACE # Use the same namespace as in your original cluster.
      cassandra:
        hostNetwork: false
        ...
        restore:
          enabled: true
          keyFile: "PATH_TO_PRIVATE_KEY_FILE"
          server: "BACKUP_SERVER_IP"
          storageDirectory: "/home/apigee/BACKUP_DIRECTORY"
          cloudProvider: "HYBRID"  # required verbatim "HYBRID" (all caps)
          snapshotTimestamp: "TIMESTAMP"
        ...
        backup:
          enabled: false
          keyFile: "PATH_TO_PRIVATE_KEY_FILE"
          server: "BACKUP_SERVER_IP"
          storageDirectory: "/home/apigee/BACKUP_DIRECTORY"
          cloudProvider: "HYBRID" # required verbatim "HYBRID" (all caps)
          schedule: "SCHEDULE"
      

    示例

      namespace: apigee
      cassandra:
        hostNetwork: false
        ...
        restore:
          enabled: true
          keyFile: "/Users/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key"
          server: "34.56.78.90"
          storageDirectory: "/home/apigee/cassbackup"
          cloudProvider: "HYBRID"
          snapshotTimestamp: "20201001183903"
        ...
        backup:
          enabled: false
          keyFile: "/Users/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key"
          server: "34.56.78.90"
          storageDirectory: "/home/apigee/cassbackup"
          cloudProvider: "HYBRID"
          schedule: "0 2 * * *"
        ...

    其中:

    属性 说明
    namespace

    YOUR_RESTORE_NAMESPACE

    用于恢复的命名空间。使用原始集群中的同一命名空间。

    cassandra:hostNetwork

    hostNetwork 是必需的,应始终设置为 false

    restore:enabled 恢复功能默认处于停用状态。您必须将此属性设为 true
    restore:keyFile

    PATH_TO_PRIVATE_KEY_FILE

    SSH 私钥文件(在创建 SSH 密钥对的步骤中命名为 ssh_key)在本地文件系统中的路径。

    restore:server

    BACKUP_SERVER_IP

    您的备份服务器的 IP 地址。

    restore:storageDirectory

    BACKUP_DIRECTORY

    备份服务器上备份目录的名称。 此目录必须是 home/apigee 中的目录(备份目录在创建备份目录的步骤中命名为 cassandra_backup)。

    restore:cloudProvider

    HYBRID

    cloudProvider: "HYBRID" 属性是必需的属性。

    restore:snapshotTimestamp

    TIMESTAMP

    要恢复的备份快照的时间戳。如需查看可以使用哪些时间戳,请转到 dbStorageBucket 并查看存储桶中存在的文件。每个文件名都包含时间戳值。例如 backup_20210203213003_apigee-cassandra-default-0.tgz

    其中,20210203213003 是您在希望恢复该时间点创建的备份时使用的 snapshotTimestamp 值。

    backup:enabled 您应该将此属性设为 false(以防它之前被设置为 true)。
    backup:keyFile

    PATH_TO_PRIVATE_KEY_FILE

    SSH 私钥文件(在创建 SSH 密钥对的步骤中命名为 ssh_key)在本地文件系统中的路径。

    backup:server

    BACKUP_SERVER_IP

    您的备份服务器的 IP 地址。

    backup:storageDirectory

    BACKUP_DIRECTORY

    备份服务器上备份目录的名称。此目录必须是 home/apigee 中的目录(备份目录在创建备份目录的步骤中命名为 cassandra_backup)。

    backup:cloudProvider

    HYBRID

    cloudProvider: "HYBRID" 属性是必需的属性。

    backup:schedule

    SCHEDULE

    备份的开始时间,使用标准 crontab 语法指定。默认值:0 2 * * *

  4. 创建新的 Hybrid 运行时部署。这将创建新的 Cassandra 集群并开始将备份数据恢复到该集群中:
    ${APIGEECTL_HOME}/apigeectl init  -f overrides/overrides.yaml
    ${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml
    ${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml --restore
    ${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml

验证恢复作业进度,并确认 apigeeds 和其他所有 Pod 都已启动:

  1. 检查 apigeeds
    kubectl get apigeeds -n apigee
  2. 检查所有其他 Pod:
    kubectl get pods -n apigee

成功完成恢复并确认运行时组件健康后,我们建议在集群上配置备份:

  1. overrides-restore.yaml 文件中移除 restore 配置。
  2. backup 配置添加到 overrides-restore.yaml 文件中。
  3. 使用以下命令应用 backup 配置:

    Helm

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

    apigeectl

    ./apigeectl apply -f ../overrides.yaml