本部分介绍了如何为在 Apigee Hybrid 运行时层面中安装的 Apache Cassandra 数据库环配置数据备份和恢复。另请参阅 Cassandra 数据存储区。
Cassandra 备份的重要性
备份是防范灾难场景的重要措施。每个备份都是创建备份时存在的当前 Cassandra 数据的一致快照。这包括 Cassandra 数据以及 Cassandra 集群中的架构 / 元数据。通过备份,用户可以将 Apigee Hybrid 实例恢复到之前已知的良好状态,这是在发生灾难时使 Hybrid 实例恢复在线状态的关键步骤。根据 Hybrid 实例大小,单个备份集可以有一个或多个备份文件。例如,如果 Hybrid 实例具有三个 Cassandra 节点,则备份集包含三个备份文件。如果 Hybrid 实例有 30 个 Cassandra 节点,则备份集包含 30 个备份文件。这意味着从备份恢复 Hybrid 实例的时间取决于需要恢复的备份集中的备份文件的数量。
关于 Cassandra 备份,您需要了解哪些信息?
Cassandra 是复制的数据库,配置为在每个区域或数据中心至少有 3 个数据副本。Cassandra 使用流式复制和读取修复来维护在每个区域或数据中心中给定时间点的数据副本。
在混合中,Cassandra 备份默认处于停用状态。不过,最好在数据因灾难性故障丢失时启用 Cassandra 备份。Cassandra 备份适用于灾难恢复,而非恢复因意外删除而丢失的数据。
根据 override.yaml 文件中设置的时间表创建备份。如需了解如何安排备份,请参阅安排 Cassandra 备份部分。将备份时间表应用于 Hybrid 集群后,系统会根据该时间表定期执行 Kubernetes 备份作业。该作业会在 Hybrid 集群中的每个 Cassandra 节点上触发备份脚本,该脚本收集节点上的所有数据,创建归档文件,并将归档文件发送到 override.yaml 文件中的 Cassandra 备份配置指定的 Google Cloud 存储桶。
备份了哪些内容?
本主题中介绍的备份配置可备份以下实体:
- Cassandra 架构,包括用户架构(Apigee 密钥空间定义)
- 每个节点的 Cassandra 分区令牌信息
- Cassandra 数据的快照
备份数据存储在何处?
备份数据存储在您必须创建的 Google Cloud Storage 存储分区中。本主题涵盖创建和配置存储分区。
安排 Cassandra 备份
备份作为运行时层面中的 cron
作业进行安排。如需安排 Cassandra 备份,请执行以下操作:
- 运行以下
create-service-account
命令以创建具有标准roles/storage.objectAdmin
角色的 Google Cloud 服务帐号 (SA)。此 SA 角色允许您将备份数据写入 Cloud Storage。在 Hybrid 安装根目录下执行以下命令:../tools/create-service-account --env prod \ --profile apigee-cassandra \ --name CASSANDRA_BACKUP_SA_NAME \ --dir OUTPUT_DIR
其中:
- CASSANDRA_BACKUP_SA_NAME 是服务帐号的名称。
- OUTPUT_DIR 是该工具将输出服务帐号
.json
文件的目录。
如需详细了解 Google Cloud 服务帐号,请参阅创建和管理服务帐号。./tools/create-service-account --env prod \ --profile apigee-cassandra \ --name my-cassandra-backup-sa --dir ./service-accounts
create-service-account
命令会保存包含服务帐号私钥的 JSON 文件。该文件会保存在执行命令的目录中。执行以下步骤将需要此文件的路径。- 创建 Cloud Storage 存储分区。 为存储分区指定合理的数据保留政策。Apigee 建议采用 15 天的数据保留政策。
- 打开您的
overrides.yaml
文件。 - 添加以下
cassandra.backup
属性以启用备份。请勿移除任何已配置的属性。参数
cassandra: ... backup: enabled: true serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH schedule: BACKUP_SCHEDULE_CODE ...
示例
... cassandra: storage: type: gcepd capacity: 50Gi gcepd: replicationType: regional-pd sslRootCAPath: "/Users/myhome/ssh/cassandra.crt" sslCertPath: "/Users/myhome/ssh/cassandra.crt" sslKeyPath: "/Users/myhome/ssh/cassandra.key" auth: default: password: "abc123" admin: password: "abc234" ddl: password: "abc345" dml: password: "abc456" nodeSelector: key: cloud.google.com/gke-nodepool value: apigee-data backup: enabled: true serviceAccountPath: "/Users/myhome/.ssh/my-cassandra-backup-sa.json" dbStorageBucket: "gs://myname-cassandra-backup" schedule: "45 23 * * 6" ...
其中:
- 将配置更改应用到新集群。例如:
./apigeectl apply -f overrides.yaml
- 验证备份作业。例如:
kubectl get cronjob -n apigee
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE apigee-cassandra-backup 33 * * * * False 0 <none> 94s
属性 | 说明 |
---|---|
backup:enabled |
备份默认处于停用状态。您必须将此属性设为 true 。 |
backup:serviceAccountPath |
SA_JSON_FILE_PATH 文件系统上指向运行 |
backup:dbStorageBucket |
CLOUD_STORAGE_BUCKET_PATH Cloud Storage 存储分区路径,格式如下: |
backup:schedule |
BACKUP_SCHEDULE_CODE 备份的开始时间,使用标准 crontab 语法指定。默认值: |
恢复备份
如果发生灾难性故障(例如 Apigee Hybrid 实例中的所有数据因灾难而无法恢复),则您可以使用备份从头开始恢复 Apigee 基础架构。请注意,如果您进行多地区部署,那从单地区故障中恢复时,应使用停用来清理受影响的区域,然后在受影响的区域中使用 DN 扩展。Apigee Cassandra 部署和运营架构负责处理单个区域的冗余和容错。由于我们建议将 Apigee Hybrid 部署在生产用例的多区域配置中,因此您可以使用记录的区域停用和扩展程序从其中一个其他动态区域恢复区域故障,而不是从备份中恢复。
不要使用备份,原因如下:
- Cassandra 节点故障。
- 应用、开发者和 api_credentials 等数据的意外删除。
- 多区域部署中的一个或多个区域出现故障。
恢复时的注意事项:
- 停用时间:在恢复期间的停机时间。
- 数据丢失:上次有效备份与恢复完成之间存在数据丢失问题。
- 恢复时间:恢复时间取决于数据和集群的大小。
- 择优挑选数据:您无法仅选择要恢复的特定数据。恢复操作会恢复您选择的整个备份。
恢复功能会从备份位置获取数据,并将其恢复到具有相同节点数的新 Cassandra 集群中。不会从旧的 Cassandra 集群获取集群数据。
以下恢复说明适用于使用 Google Cloud Storage 进行备份的单区域部署。对于其他部署,请参阅以下内容:
- 对于不使用 Google Cloud Storage 进行备份的单区域部署,请参阅不使用 Google Cloud 的备份和恢复。
- 对于多区域部署,请参阅 GKE 和 GKE On-Prem 上的多区域部署。
如需恢复 Cassandra 备份,请执行以下操作:
- 使用新命名空间创建新的 Kubernetes 集群以恢复混合运行时部署。您不能使用用于原始混合安装的同一集群/命名空间。
- 在根混合安装目录中,创建新的
overrides-restore.yaml
文件。 - 将完整的配置从原始
overrides.yaml
文件复制到新的overrides-restore.yaml
文件中。例如:cp ./overrides.yaml ./overrides-restore.yaml
- 在新的
overrides-restore.yaml
中添加namespace
和restore
元素,并确保cassandra
属性中的 TLS 身份验证凭据正确无误。参数
namespace: YOUR_RESTORE_NAMESPACE cassandra: ... sslRootCAPath: PATH_TO_ROOT_CA_FILE sslCertPath: PATH_TO_SSL_CERT_FILE sslKeyPath: PATH_TO_SSL_KEY_FILE ... restore: enabled: true snapshotTimestamp: TIMESTAMP serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH image: pullPolicy: Always ...
示例
... namespace: cassandra-restore cassandra: storage: type: gcepd capacity: 50Gi gcepd: replicationType: regional-pd sslRootCAPath: "/Users/myhome/ssh/cassandra.crt" sslCertPath: "/Users/myhome/ssh/cassandra.crt" sslKeyPath: "/Users/myhome/ssh/cassandra.key" auth: default: password: "abc123" admin: password: "abc234" ddl: password: "abc345" dml: password: "abc456" nodeSelector: key: cloud.google.com/gke-nodepool value: apigee-data restore: enabled: true snapshotTimestamp: "20210203213003" serviceAccountPath: "/Users/myhome/.ssh/my_cassandra_backup.json" dbStorageBucket: "gs://myname-cassandra-backup" image: pullPolicy: Always ...
其中:
属性 说明 sslRootCAPath
sslCertPath
sslKeyPath
PATH_TO_ROOT_CA_FILE
PATH_TO_SSL_CERT_FILE
PATH_TO_SSL_KEY_FILE使用用于创建原始 Cassandra 数据库的相同 TLS 身份验证凭据。
namespace
YOUR_RESTORE_NAMESPACE
您在第 1 步中为新的 Cassandra 集群创建的新命名空间的名称。请勿使用原始集群所用的命名空间。
restore:enabled
恢复功能默认处于停用状态。您必须将此属性设为 true
。restore:snapshotTimestamp
TIMESTAMP
要恢复的备份快照的时间戳。如需查看可以使用哪些时间戳,请转到
dbStorageBucket
并查看存储分区中存在的文件。每个文件名都包含时间戳值,如下所示:backup_20210203213003_apigee-cassandra-default-0.tgz
其中,20210203213003 是您在希望恢复该时间点创建的备份时使用的
snapshotTimestamp
值。restore:serviceAccountPath
SA_JSON_FILE_PATH
文件系统上指向为备份创建的服务帐号的路径。
restore:dbStorageBucket
CLOUD_STORAGE_BUCKET_PATH
存储备份数据的 Cloud Storage 存储分区路径,格式如下:
gs://BUCKET_NAME
gs://
是必需的。 - 执行以下命令,更改旧命名空间中任何 Cassandra 节点上的
app
标签:kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
- 创建新的 Hybrid 运行时部署。这将创建新的 Cassandra 集群并开始将备份数据恢复到该集群中:
./apigeectl init -f ../overrides-restore.yaml
./apigeectl apply -f ../overrides-restore.yaml
-
恢复完成后,必须切换流量才能使用新命名空间中的 Cassandra 集群。运行以下命令切换流量:
kubectl get rs -n OLD_NAMESPACE # look for the 'apigee-connect' replicaset
kubectl patch rs -n OLD_NAMESPACE APIGEE_CONNECT_RS_NAME -p '{"spec":{"replicas" : 0}}'
- 流量切换完成后,您可以通过移除
restore
配置并将backup
配置添加到overrides-restore.yaml
文件来重新配置已恢复集群上的备份。将 YOUR_RESTORE_NAMESPACE 替换为第 1 步中创建的新命名空间名称。namespace: YOUR_RESTORE_NAMESPACE cassandra: ... backup: enabled: true serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH schedule: BACKUP_SCHEDULE_CODE ...
然后使用以下命令应用
backup
配置:./apigeectl apply -f ../overrides-restore.yaml
查看恢复日志
您可以检查恢复作业日志,并使用 grep
查找 error
,以确保恢复日志没有错误。
验证恢复已完成
使用以下命令检查恢复操作是否已完成:
kubectl get pods
输出内容类似如下:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 1h apigee-cassandra-default-1 1/1 Running 0 1h apigee-cassandra-default-2 1/1 Running 0 59m apigee-cassandra-restore-b4lgf 0/1 Completed 0 51m
查看恢复日志
使用以下命令查看恢复日志:
kubectl logs -f apigee-cassandra-restore-b4lgf
输出内容类似如下:
Restore Logs: Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] to download file gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1/backup_20190405011309_schema.tgz INFO: download successfully extracted the backup files from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 finished downloading schema.cql to create schema from 10.32.0.28 Warnings : dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 Warnings : dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 INFO: the schema has been restored starting apigee-cassandra-default-0 in default starting apigee-cassandra-default-1 in default starting apigee-cassandra-default-2 in default 84 95 106 waiting on waiting nodes $pid to finish 84 Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] INFO: restore downloaded tarball and extracted the file from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: restore downloaded tarball and extracted the file from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: restore downloaded tarball and extracted the file from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO 12:02:28 Configuration location: file:/etc/cassandra/cassandra.yaml …... INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed Summary statistics: Connections per host : 3 Total files transferred : 2 Total bytes transferred : 0.378KiB Total duration : 5048 ms Average transfer rate : 0.074KiB/s Peak transfer rate : 0.075KiB/s progress: [/10.32.1.1.6]0:1/1 100% 1:1/1 100% [/10.32.0.28]1:1/1 100% 0:1/1 100% [/10.32.3.220]0:1/1 100% 1:1/1 100% total: 100% 0.000KiB/s (avg: 0.074KiB/s) INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed progress: [/10.32.1.1.6]0:1/1 100% 1:1/1 100% [/10.32.0.28]1:1/1 100% 0:1/1 100% [/10.32.3.220]0:1/1 100% 1:1/1 100% total: 100% 0.000KiB/s (avg: 0.074KiB/s) INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed INFO: ./apigee/data/cassandra/data/ks1/user-9fbae960571411e99652c7b15b2db6cc restored successfully INFO: Restore 20190405011309 completed INFO: ./apigee/data/cassandra/data/ks1/user-9fbae960571411e99652c7b15b2db6cc restored successfully INFO: Restore 20190405011309 completed waiting on waiting nodes $pid to finish 106 Restore finished
验证备份作业
您还可以在安排备份 Cron 作业后验证备份作业。安排 Cron 作业后,您应该会看到类似如下的内容:
kubectl get pods
输出内容类似如下:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 2h apigee-cassandra-default-1 1/1 Running 0 2h apigee-cassandra-default-2 1/1 Running 0 2h apigee-cassandra-backup-1.6451.680-pff6s 0/1 Running 0 54s
检查备份日志
备份作业:
- 创建
schema.cql
文件。 - 将它上传到您的存储分区。
- 回应节点以同时备份数据和上传数据。
- 等待所有数据上传完毕。
kubectl logs -f apigee-cassandra-backup-1.6451.680-pff6s
输出类似于以下内容:
myusername-macbookpro:cassandra-backup-utility myusername$ kubectl logs -f apigee-cassandra-backup-1.64577680-f9sc4 starting apigee-cassandra-default-0 in default starting apigee-cassandra-default-1 in default starting apigee-cassandra-default-2 in default 35 46 57 waiting on process 35 Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Requested creating snapshot(s) for [all keyspaces] with snapshot name [20190406190808] and options {skipFlush=false} Snapshot directory: 20190406190808 INFO: backup created cassandra snapshot 20190406190808 tar: Removing leading `/' from member names /apigee/data/cassandra/data/ks1/mytest3-37bc2df0587811e98e8d875b0ed64754/snapshots/ /apigee/data/cassandra/data/ks1/mytest3-37bc2df0587811e98e8d875b0ed64754/snapshots/20190406190808/ /apigee/data/cassandra/data/ks1/mytest3-37bc2df0587811e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Data.db Requested creating snapshot(s) for [all keyspaces] with snapshot name [20190406190808] and options {skipFlush=false} Requested creating snapshot(s) for [all keyspaces] with snapshot name [20190406190808] and options {skipFlush=false} Snapshot directory: 20190406190808 INFO: backup created cassandra snapshot 20190406190808 tar: Removing leading `/' from member names /apigee/data/cassandra/data/system/hints-2666e20573ef38b390fefecf96e8f0c7/snapshots/ /apigee/data/cassandra/data/system/hints-2666e20573ef38b390fefecf96e8f0c7/snapshots/20190406190808/ /apigee/data/cassandra/data/system/hints-2666e20573ef38b390fefecf96e8f0c7/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/prepared_statements-18a9c2576a0c3841ba718cd529849fef/snapshots/ /apigee/data/cassandra/data/system/prepared_statements-18a9c2576a0c3841ba718cd529849fef/snapshots/20190406190808/ /apigee/data/cassandra/data/system/prepared_statements-18a9c2576a0c3841ba718cd529849fef/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/range_xfers-55d764384e553f8b9f6e676d4af3976d/snapshots/ /apigee/data/cassandra/data/system/range_xfers-55d764384e553f8b9f6e676d4af3976d/snapshots/20190406190808/ /apigee/data/cassandra/data/system/range_xfers-55d764384e553f8b9f6e676d4af3976d/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/peer_events-59dfeaea8db2334191ef109974d81484/snapshots/ /apigee/data/cassandra/data/system/peer_events-59dfeaea8db2334191ef109974d81484/snapshots/20190406190808/ /apigee/data/cassandra/data/system/peer_events-59dfeaea8db2334191ef109974d81484/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/built_views-4b3c50a9ea873d7691016dbc9c38494a/snapshots/ /apigee/data/cassandra/data/system/built_views-4b3c50a9ea873d7691016dbc9c38494a/snapshots/20190406190808/ /apigee/data/cassandra/data/system/built_views-4b3c50a9ea873d7691016dbc9c38494a/snapshots/20190406190808/manifest.json …… /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/ /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/ /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Filter.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-CompressionInfo.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Index.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Statistics.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Data.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Index.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Statistics.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-TOC.txt /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Statistics.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Summary.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Filter.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Summary.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Index.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Filter.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Digest.crc32 /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Summary.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Data.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-TOC.txt /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/schema.cql /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-CompressionInfo.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Digest.crc32 /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-TOC.txt /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Data.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Digest.crc32 /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-CompressionInfo.db …… /tmp/tokens.txt / [1 files][ 0.0 B/ 0.0 B] Operation completed over 1 objects. / [1 files][ 0.0 B/ 0.0 B] Operation completed over 1 objects. INFO: backup created tarball and transferred the file to gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: removing cassandra snapshot INFO: backup created tarball and transferred the file to gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: removing cassandra snapshot Requested clearing snapshot(s) for [all keyspaces] INFO: Backup 20190406190808 completed waiting on process 46 Requested clearing snapshot(s) for [all keyspaces] INFO: Backup 20190406190808 completed Requested clearing snapshot(s) for [all keyspaces] waiting on process 57 INFO: Backup 20190406190808 completed waiting result to get schema from 10.32.0.28 INFO: /tmp/schema.cql has been generated Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] tar: removing leading '/' from member names tmp/schema.cql Copying from <TDIN>... / [1 files][ 0.0 B/ 0.0 B] Operation completed over 1 objects. INFO: backup created tarball and transferred the file to gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 finished uploading schema.cql
验证
通过测试 Ingress 的 IP 地址并使用一些流量对其进行测试,验证您的恢复情况。
- 使用以下命令获取
EXTERNAL-IP
:kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.11.123.45 34.56.78.90 15021:32225/TCP,80:32208/TCP,443:31942/TCP,15012:32689/TCP,15443:31936/TCP 1d
-
在命令行中,获取或刷新 gcloud 身份验证凭据,如以下示例所示:
TOKEN=$(gcloud auth print-access-token)
- 使用部署在 Apigee 环境中的现有 apiproxy 以及 API 密钥或访问令牌来测试 Ingress:
Curl -v https://EXTERNAL-IP/basepath -H 'envgroup hostalias'
例如:
curl -v 'https://example.com/oauth/client_credential' \ --resolve edgehybrid-staging-func-runtime-wf.hybrid.e2e.apigeeks.net:443:34.56.78.90 \ -H 'Authorization: Bearer ${TOKEN}'
新集群和流量切割的 DNS 配置
如果您对验证感到满意,请将流量重定向到新集群,并将 dns 条目更改为新的入站 EXTERNAL-IP
地址。