在远程服务器中安排备份

本页面介绍如何在不使用 Cloud Storage 的情况下为 Cassandra 计划备份。在此方法中,备份会存储在您指定的远程服务器上,而不是 Cloud Storage 存储桶中。Apigee 使用 SSH 与远程服务器通信。

您必须将备份安排为 cron 作业。将备份时间表应用于 Hybrid 集群后,系统会根据运行时平面中的时间表定期执行 Kubernetes 备份作业。该作业会在 Hybrid 集群中的每个 Cassandra 节点上触发备份脚本,该脚本收集节点上的所有数据,创建数据的归档(压缩)文件,并将归档文件发送到 overrides.yaml 文件中指定的服务器。

以下步骤包括完成特定任务(例如创建 SSH 密钥对)的常见示例。使用适合您的安装的方法。

该流程包括以下几个部分:

设置服务器和 SSH

  1. 选择备份服务器:选择具有足够存储空间的 Linux 或 Unix 服务器,以存储备份数据,并确保可以从 Apigee Hybrid 运行时平面通过 SSH 访问该服务器。
  2. 配置 SSH 服务器:安装 SSH 服务器,或确认现有 SSH 服务器安全无虞。
  3. 创建 SSH 密钥对:生成不带口令的 SSH 密钥对,例如:
    ssh-keygen -t rsa -b 4096 -C exampleuser@example.com
      Enter file in which to save the key (/Users/exampleuser/.ssh/id_rsa): $APIGEE_HOME/hybrid-files/certs/ssh_key
      Enter passphrase (empty for no passphrase):
      Enter same passphrase again:
      Your identification has been saved in ssh_key
      Your public key has been saved in ssh_key.pub
      The key fingerprint is:
      SHA256:DWKo334XMZcZYLOLrd/8HNpjTERPJJ0mc11UYmrPvSA exampleuser@example.com
      The key's randomart image is:
      +---[RSA 4096]----+
      |          +.  ++X|
      |     .   . o.=.*+|
      |    . o . . o==o |
      |   . . . =oo+o...|
      |  .     S +E oo .|
      |   . .   .. . o .|
      |    . . .  . o.. |
      |     .  ...o ++. |
      |      .. .. +o+. |
      +----[SHA256]-----+

    其中:exampleuser@example.com 是一个字符串。 ssh-keygen 命令中 -C 后面的任何字符串都会成为新创建的 ssh 键中包含的注释。输入字符串可以是任何字符串。使用 exampleuser@example.com 形式的账号名称时,您可以快速识别哪个账号附带密钥。

    该命令会生成两个 SSH 密钥文件,一个私钥文件(例如“ssh_key.rsa”)和一个公钥文件(例如“ssh_key.pub”)。

    将私钥保存到运行时平面可以访问的位置。

  4. 添加用户账号:在备份服务器上,创建一个名为 apigee 的用户,且在 /home/apigee 下有一个主目录。确保新的 apigee 用户在 /home 下有一个主目录。
  5. 设置 .ssh 目录:在备份服务器上,在 /home/apigee/.ssh 中创建一个 .ssh 目录。例如:
    cd /home/apigee
          mkdir .ssh
          cd .ssh
          vi authorized_keys
  6. 安装公钥:将公钥放入 /home/apigee/ 目录内的 authorized_keys 文件中。备份目录可以是任何目录,只要 apigee 用户可以访问该目录即可。将 ssh public key 文件的内容粘贴到该文件中。
  7. 验证 SSH 访问权限:从本地机器或集群节点测试连接:
  8. ssh -i PATH_TO_PRIVATE_KEY_FILE apigee@BACKUP_SERVER_IP

设置备份的时间表和目标位置

您可以在 overrides.yaml 文件中设置备份的时间表和目标位置。

  1. 将以下参数添加到 overrides.yaml 文件中:

    参数

    cassandra:
      backup:
        enabled: true
        keyFile: "PATH_TO_PRIVATE_KEY_FILE"
        server: "BACKUP_SERVER_IP"
        storageDirectory: "/home/apigee/BACKUP_DIRECTORY"
        cloudProvider: "HYBRID" # required verbatim "HYBRID" (all caps)
        schedule: "SCHEDULE"

    示例

    cassandra:
      backup:
        enabled: true
        keyFile: "private.key" # path relative to apigee-datastore path
        server: "34.56.78.90"
        storageDirectory: "/home/apigee/cassbackup"
        cloudProvider: "HYBRID"
        schedule: "0 2 * * *"

    其中:

    属性 说明
    backup:enabled 备份默认处于停用状态。您必须将此属性设为 true
    backup:keyFile

    PATH_TO_PRIVATE_KEY_FILE

    SSH 私钥文件(在创建 SSH 密钥对的步骤中命名为 ssh_key)在本地文件系统中的路径。 此路径必须相对于 apigee-datastore 图表目录。

    backup:server

    BACKUP_SERVER_IP

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

    backup:storageDirectory

    BACKUP_DIRECTORY

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

    backup:cloudProvider

    GCP/HYBRID

    对于 Cloud Storage 备份,请将此属性设置为 GCP。例如 cloudProvider: "GCP"

    对于远程服务器备份,请将此属性设置为 HYBRID。例如 cloudProvider: "HYBRID"

    backup:schedule

    SCHEDULE

    备份的开始时间,使用标准 crontab 语法指定。时间采用 Kubernetes 集群的本地时区。默认值:0 2 * * *

  2. 将备份配置应用于集群的存储范围:
    helm upgrade datastore apigee-datastore/ \
      --namespace apigee \
      --atomic \
      -f OVERRIDES_FILE.yaml
    

    其中,OVERRIDES_FILE 是您刚刚修改的替换文件的路径。

  3. 验证备份作业。例如:
    kubectl get cronjob -n apigee
    NAME                      SCHEDULE     SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    apigee-cassandra-backup   33 * * * *   False     0        <none>          94s

问题排查

  1. 测试来自 Cassandra Pod 的连接。您需要确保 Cassandra pod 可以使用 SSH 连接到备份服务器:
    1. 登录到 Cassandra pod 的 shell。例如:
      kubectl exec -it -n apigee APIGEE_CASSANDRA_DEFAULT_0 -- /bin/bash

      其中 APIGEE_CASSANDRA_DEFAULT_0 是 Cassandra pod 的名称。将其更改为您要从其进行连接的 pod 的名称。

    2. 使用装载了 Cassandra pod 和服务器 IP 地址的 SSH 私钥,通过 SSH 连接到您的备份服务器:
      ssh -i /var/secrets/keys/key apigee@BACKUP_SERVER_IP
  2. 如果您在从 Cassandra Pod 访问远程服务器时遇到问题,请再次检查远程服务器上的 SSH 配置,并确保数据存储区升级成功。
  3. 您可以通过在登录 Cassandra Pod 时运行以下命令来检查 Cassandra 是否使用了正确的私钥,并将输出与您创建的私钥进行比较:
    cat /var/secrets/keys/key