本页面介绍如何在不使用 Cloud Storage 的情况下为 Cassandra 计划备份。在此方法中,备份会存储在您指定的远程服务器上,而不是 Cloud Storage 存储桶中。Apigee 使用 SSH 与远程服务器通信。
您必须将备份安排为 cron
作业。将备份时间表应用于 Hybrid 集群后,系统会根据运行时平面中的时间表定期执行 Kubernetes 备份作业。该作业会在 Hybrid 集群中的每个 Cassandra 节点上触发备份脚本,该脚本收集节点上的所有数据,创建数据的归档(压缩)文件,并将归档文件发送到 overrides.yaml
文件中指定的服务器。
以下步骤包括完成特定任务(例如创建 SSH 密钥对)的常见示例。使用适合您的安装的方法。
该流程包括以下几个部分:
设置服务器和 SSH
- 为您的备份指定 Linux 或 Unix 服务器。此服务器必须可从 Apigee Hybrid 运行时层面通过 SSH 访问。它必须有足够的存储空间来存储备份。
- 在服务器上设置 SSH 服务器,或确保该服务器已配置安全的 SSH 服务器。
- 创建 SSH 密钥对并将私钥文件存储在可从 Hybrid 运行时层面访问的路径中。您必须对密钥对使用空白密码,否则备份将失败。例如:
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 形式的账号名称时,您可以快速识别哪个账号附带密钥。 - 在备份服务器上创建名为
apigee
的用户账号。确保新的apigee
用户在/home
下有一个主目录。 - 在备份服务器上,在新的
/home/apigee
目录中创建一个.ssh
目录。 - 将公钥(上例中的
ssh_key.pub
)复制到新/home/apigee/.ssh
目录下名为authorized_keys
的文件中。例如:cd /home/apigee
mkdir .ssh
cd .ssh
vi authorized_keys
- 在备份服务器上,在
/home/apigee/
目录中创建备份目录。备份目录可以是任何目录,只要apigee
用户可以访问该目录即可。例如:cd /home/apigee
。mkdir cassandra-backup
- 测试连接。您需要确保 Cassandra pod 可以使用 SSH 连接到备份服务器:
- 登录到 Cassandra pod 的 shell。例如:
kubectl exec -it -n apigee APIGEE_CASSANDRA_DEFAULT_0 -- /bin/bash
其中 APIGEE_CASSANDRA_DEFAULT_0 是 Cassandra pod 的名称。将其更改为您要从其进行连接的 pod 的名称。
- 使用已装载 Cassandra pod 和服务器 IP 地址的 SSH 私钥,通过 SSH 连接到您的备份服务器:
ssh -i /var/secrets/keys/key apigee@BACKUP_SERVER_IP
- 登录到 Cassandra pod 的 shell。例如:
设置备份的时间表和目标位置
您可以在 overrides.yaml
文件中设置备份的时间表和目标位置。
- 将以下参数添加到
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: "/Users/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key" 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
)在本地文件系统中的路径。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 * * *
- 使用
apigeectl
将备份配置应用于集群的存储范围:$APIGEECTL_HOME/apigeectl apply --datastore -f YOUR_OVERRIDES_FILE
其中,YOUR_OVERRIDES_FILE 是您刚刚修改的替换文件的路径。
- 验证备份作业。例如:
kubectl get cronjob -n apigee
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE apigee-cassandra-backup 33 * * * * False 0 <none> 94s