在多个区域中恢复

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

在多区域部署中,Apigee Hybrid 部署在不同数据中心之间的多个地理位置中。如果一个或多个区域发生故障,但运行状况良好的区域仍然存在,则您可以使用运行状况良好的区域和最新数据恢复发生故障的 Cassandra 区域。

如果所有混合区域发生灾难性故障,您可以恢复 Cassandra。请务必注意,如果您的部署中有多个 Apigee 组织,则恢复过程将恢复所有组织的数据。在多组织设置中,支持仅恢复特定组织。

本主题介绍了缓解故障区域的两种方法:

  • 恢复故障区域 - 介绍基于健康状况良好的区域恢复故障区域的步骤。
  • 恢复故障区域 - 介绍从备份恢复故障区域的步骤。仅当所有 Hybrid 区域都受到影响时,才需要使用此方法。

恢复故障区域

如需从健康状况良好的区域恢复故障区域,请执行以下步骤:

  1. 将 API 流量从受影响的区域重定向到正常工作的区域。相应地规划容量,以支持从故障区域转移的流量。
  2. 停用受影响的区域。对于每个受影响的区域,请按照停用 Hybrid 区域中所述的步骤执行操作。等待停用完成,然后再继续执行下一步操作。

  3. 恢复受影响的区域。如需恢复,请创建一个新区域,如 GKE、GKE On-Prem 和 AKS 上的多区域部署中所述。

使用备份进行恢复

Cassandra 备份可以位于 Cloud Storage 或远程服务器上,具体取决于您的配置。如需从备份恢复 Cassandra,请执行以下步骤:

  1. 打开要恢复的区域的替换文件。
  2. cassandra:hostNetwork 设置为 false
  3. 应用替换文件:
    helm upgrade datastore apigee-datastore/ \
      --install \
      --namespace apigee \
      -f OVERRIDES_FILE
    
  4. 在继续操作之前,请检查以确保 hostNetwork 设置为 false
    kubectl -n apigee get apigeeds -o=jsonpath='{.items[].spec.components.cassandra.hostNetwork}'
  5. 从您要恢复的区域中删除 Hybrid:
    helm delete DATASTORE_RELEASE_NAME \
      --namespace apigee
    

    其中,DATASTORE_RELEASE_NAME 是您在区域中安装 Cassandra 的数据存储区的版本名称,例如 datastore-region1

  6. 使用备份恢复所需区域。如需了解详情,请参阅从备份恢复区域

  7. 移除已删除的区域引用,并在 KeySpaces 元数据中添加已恢复的区域引用。
  8. 使用 nodetool status 选项获取 Cassandra 数据中心名称。
    kubectl exec -n apigee -it apigee-cassandra-default-0 -- bash
          nodetool  -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status |grep -i Datacenter

    其中:

    • APIGEE_JMX_USER 是 Cassandra JMX 操作用户的用户名。用于通过 Cassandra JMX 接口进行身份验证和通信。请参阅:cassandra:auth:jmx:username
    • APIGEE_JMX_PASSWORD 是 Cassandra JMX 操作用户的密码。请参阅:cassandra:auth:jmx:password
  9. 更新 KeySpaces 复制功能。
    1. 创建客户端容器并通过 CQL 接口连接到 Cassandra 集群。
    2. 从 CQL 接口获取用户键空间列表:
      cqlsh CASSANDRA_SEED_HOST -u APIGEE_DDL_USER -p APIGEE_DDL_PASSWORD
            --ssl -e "select keyspace_name from system_schema.keyspaces;"|grep -v system

      其中:

      • CASSANDRA_SEED_HOST 是 Cassandra 多区域种子主机。对于大多数多区域安装,请使用第一个区域中主机的 IP 地址。请参阅为多区域配置 Apigee Hybridcassandra:externalSeedHost
      • APIGEE_DDL_USERAPIGEE_DDL_PASSWORD 是 Cassandra 数据定义语言 (DDL) 用户的管理员用户名和密码。默认值为“ddl_user”和“iloveapis123”。

        请参阅配置属性参考文档中的 cassandra.auth.ddl.password 和 Apache Cassandra cqlsh 文档中的命令行选项

    3. 对于每个键空间,请从 CQL 接口运行以下命令以更新复制设置:
      ALTER KEYSPACE KEYSPACE_NAME WITH replication = {'class': 'NetworkTopologyStrategy', 'DATACENTER_NAME':3};

      其中:

      • KEYSPACE_NAME 是上一步输出中列出的键空间的名称。
      • DATACENTER_NAME 是您在第 8 步中通过 nodetool status 选项获取的 Cassandra 数据中心的名称。