注意:

使用 OCI Full Stack Disaster Recovery 为部署在 OCI Kubernetes Engine 上的演示应用自动执行切换和故障转移计划

简介

本教程演示了 Oracle Cloud Infrastructure Full Stack Disaster Recovery (OCI Full Stack DR) 用例,其中在 Oracle Cloud Infrastructure Kubernetes Engine(OCI Kubernetes Engine 或 OKE)集群上部署了演示电子商务应用程序。

在编写本教程时,OCI Full Stack DR 宣布 OKE 的可用性有限。在有限发行版中,我们可以在基于 OKE 的应用(例如 MuShop)上试用 OCI Full Stack DR。MuShop 是一个基于微服务的演示应用,它使用各种其他 Oracle Cloud Infrastructure (OCI) 服务作为一个应用。

我们将使用热备用方法:灾难恢复 (Disaster Recovery,DR) 模型,其中在备用区域中预部署部分或所有应用程序组件,以实现更快的 DR 转换。尽管这种模式涉及更高的运营成本,但它提供了更低的恢复时间目标 (RTO)。

OCI Full Stack DR 只需单击一下即可编排全球 OCI 区域之间的计算、数据库和应用转换。客户无需重新设计或重新设计现有基础设施、数据库或应用,即可自动执行恢复一个或多个业务系统所需的步骤,而无需专门的管理或转换服务器。

部署体系结构

OKE 部署体系结构

注:主区域为 Sydney ,DR 区域为 Melbourne

目标

先决条件

任务 1:安装和设置 Oracle Autonomous Database

  1. 创建主 Oracle Autonomous Database。

    oci db autonomous-database create --compartment-id ${COMPARTMENT_ID} \
    --db-name ${DB_NAME} --admin-password ${DB_PASSWORD} --db-version 19c \
    --cpu-core-count 1 --data-storage-size-in-tbs 1 \
    --display-name ${DB_DISPLAY_NAME} --region ${PRIMARY_REGION}
    
  2. 提取主 Oracle Autonomous Database OCID。

    DB_ID=$(oci db autonomous-database list -c ${COMPARTMENT_ID} \
    --region ${PRIMARY_REGION} --display-name $DB_NAME \
    --query "data[?\"db-name\"=='${DB_NAME}'].id | [0]" --raw-output)
    
  3. 创建备用 DR 并启用跨区域 Oracle Data Guard。

    oci db autonomous-database create-adb-cross-region-data-guard-details \
    --compartment-id ${COMPARTMENT_ID} --db-name ${DB_NAME} --source-id ${DB_ID} \
    --cpu-core-count 1 --data-storage-size-in-tbs 1 \
    --region ${FAILOVER_REGION} --db-version 19c
    
  4. 从主 Oracle Autonomous Database 下载并提取自治数据库 wallet。

    oci db autonomous-database generate-wallet --autonomous-database-id ${DB_ID}\
    --password ${WALLET_PW} --file ${WALLET_ZIP} --region $PRIMARY_REGION
    
  5. 解压缩主钱包。

    unzip ${WALLET_ZIP} -d /tmp/wallet_primary
    

    注:

    • 保持这个钱包方便,因为我们需要稍后将其添加为 OKE 密钥。
    • 必须为主区域和备用区域单独下载 wallet,因为 tnsnames.ora DNS 条目不同。
  6. 提取备用 Oracle Autonomous Database OCID。

    STANDBY_DB_ID=$(oci db autonomous-database list -c ${COMPARTMENT_ID} \
    --region ${STANDBY_REGION} --display-name $STANDBY_DB_NAME \
    --query "data[?\"db-name\"=='${DB_NAME}'].id | [0]" --raw-output)
    
  7. 从备用 Oracle Autonomous Database 下载并提取自治数据库 wallet。

    oci db autonomous-database generate-wallet --autonomous-database-id \
    ${STANDBY_DB_ID} --password ${WALLET_PW} \
    --file ${STANDBY_WALLET_ZIP} --region $STANDBY_REGION
    
  8. 解压缩备用 wallet。

    unzip ${STANDBY_WALLET_ZIP} -d /tmp/wallet_standby
    

任务 2:创建 OKE 群集

在主站点和 DR 站点上创建 OKE 集群。有关详细信息,请参阅使用 Oracle Cloud Infrastructure Container Engine for Kubernetes 创建集群

我们已使用快速创建选项创建具有以下信息的集群:

要访问集群,请转到 OCI 控制台,导航到开发人员服务容器和对象,然后单击 Kubernetes 集群 (OKE)

或者

运行以下命令以访问您的集群。

oci ce cluster create-kubeconfig --cluster-id <cluster-id> --file $HOME/.kube/config --region ap-sydney-1 --token-version 2.0.0  --kube-endpoint PUBLIC_ENDPOINT

任务 3:在主站点设置 Kubernetes 密钥

  1. 创建名称空间。

    kubectl create ns mushop
    
  2. 添加 Oracle Autonomous Database 管理员密码密钥。

    kubectl create secret generic oadb-admin \
          --namespace mushop \
          --from-literal=oadb_admin_pw=${DB_PASSWORD}
    
  3. 添加 Oracle Autonomous Database 连接密钥。

    kubectl create secret generic oadb-connection \
          --namespace mushop \
          --from-literal=oadb_wallet_pw=${WALLET_PW} \
          --from-literal=oadb_service=${DB_SERVICE_NAME}
    
  4. 添加主 wallet 密钥。

    kubectl create secret generic oadb-wallet \
          --namespace mushop --from-file=/tmp/wallet_primary
    

任务 4:设置 MuShop 应用程序

注:应用程序仅部署在主区域 (ap-sydney-1)。

  1. 克隆系统信息库。

    git clone git@github.com:naikvenu/fsdr-demo.git
    
  2. 转至图表文件夹。

    cd fsdr-demo/helm-chart/
    
  3. 更新图表相关性。

    helm dependency update ./setup
    
  4. 安装和设置图表。

    helm upgrade --install mushop-utils setup --dependency-update --namespace mushop-utilities --create-namespace
    
  5. 找到入站控制器 EXTERNAL-IP 地址。

    PRIMARY_EXTERNAL_IP=$(kubectl get svc -n mushop-utilities mushop-utils-ingress-nginx-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    
  6. 在 OKE 群集上安装应用程序。

    helm upgrade --install -f ./mushop/values-dr.yaml \
       fsdrmushop mushop -n mushop
    
  7. 使用入站 IP 访问主 MuShop 应用程序。

    kubectl get svc mushop-utils-ingress-nginx-controller \
       --namespace mushop-utilities
    
  8. 要验证应用程序,请访问 http://<primary-site-ingress-ip-address> 并确保您看到列出的所有 MuShop 目录产品没有错误。

任务 5:在备用站点上设置 OKE 群集

注:由于使用的是热备用方法,因此我们需要创建 OKE 集群并运行一些基本操作,例如入站控制器。以下步骤将帮助您做到这一点。

  1. 要在备用站点访问集群,请转到 OCI 控制台,导航到开发人员服务容器和对象,然后单击 Kubernetes 集群 (OKE)

    或者

    运行以下命令以在备用站点访问您的集群。

    oci ce cluster create-kubeconfig --cluster-id <cluster-id> --file $HOME/.kube/config --region ap-sydney-1 --token-version 2.0.0  --kube-endpoint PUBLIC_ENDPOINT
    
  2. 克隆系统信息库。

    git clone git@github.com:naikvenu/fsdr-demo.git
    

    或者

    git clone  https://github.com/naikvenu/fsdr-demo
    
  3. 转至图表文件夹。

    cd fsdr-demo/helm-chart/
    
  4. 更新图表相关性。

    helm dependency update ./setup
    
  5. 安装和设置图表。部署入站控制器(OCI 负载平衡器)以访问应用需要执行此操作。

    注:此步骤将仅部署入站控制器(OCI 负载平衡器),而不会部署整个应用程序。

    helm upgrade --install mushop-utils setup --dependency-update --namespace mushop-utilities --create-namespace
    
  6. 找到入站控制器 EXTERNAL-IP 地址。

    STANDBY_EXTERNAL_IP=$(kubectl get svc -n mushop-utilities mushop-utils-ingress-nginx-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    
  7. 创建 MuShop 名称空间。

    kubectl create namespace mushop
    
  8. 为 wallet 创建密钥。

    kubectl create secret generic oadb-wallet \
          --namespace mushop --from-file=/tmp/wallet_standby
    

    注:我们正在使用备用 wallet。

任务 6:设置 DNS 区域(可选

在主区域中,转至 OCI 控制台,导航到网络DNS 管理区域,然后单击创建区域

Configuration:
The Zone type : Primary
‘A’ record: “mushop”

区域名称应与购买的域名匹配。输入要添加到域中的名称服务器。

可通过 https://mushop.<your-domain>.com 访问该应用程序。

任务 7:创建运行状况检查(可选

设置 OCI DNS 流量引导策略需要进行健康检查。

运行以下命令以创建运行状况检查。

oci health-checks http-monitor create --compartment-id ${COMPARTMENT_ID} --display-name fsdr-test --interval-in-seconds 30 --targets '[“${PRIMARY_EXTERNAL_IP}”]' --protocol http --path "/" --port 80

或者

转到 OCI 控制台,导航到可观察性和管理监视健康检查,单击创建健康检查,然后输入以下信息。

任务 8:配置流量管理引导策略(可选

转到 OCI 控制台,导航到 NetworkingDNS ManagementTraffic Management Steering Policies ,单击 Create Traffic Management Steering Policy 并输入以下信息。

任务 9:设置 OCI 全栈 DR

  1. 在两个区域中创建一个 DRPG。转到 OCI 控制台,导航到迁移和灾难恢复,然后单击 DR 保护组。例如,primary-drpg-sydneystandby-drpg-melbourne

  2. 关联 DRPG。转到 OCI 控制台,导航到迁移和灾难恢复DR 保护组,然后单击关联

  3. 将资源添加到 DRPG(悉尼区域)。转到 OCI 控制台,导航到迁移和灾难恢复DR 保护组成员,然后单击添加成员

  4. 添加 OKE 集群和 Oracle Autonomous Database。

    DRPG 成员

  5. 将资源添加到 DRPG(墨尔本区域)- OKE 集群和 Oracle Autonomous Database。

    DRPG 成员

  6. 在备用区域(墨尔本)创建 DR 计划。转到 OCI 控制台,导航到迁移和灾难恢复DR 保护组计划,然后单击创建计划

    DRPG 成员

    下图显示了为整个应用程序堆栈(可以包括其他服务以及 OKE)编排恢复的 DR 计划。

    如图所示,我们为 OKE 提供了内置步骤。OCI Full Stack DR 服务运行内部开发的备份工具。此工具将定期执行集群的部署、副本集、云池、CronJobs、守护进程集等备份。

    备份将存储在我们在成员属性中指定的 OCI Object Storage 存储桶中。

    • OKE- 停止备份和清除(主):这将停止备份并终止 OKE 群集中的所有提及资源。

    • OKE- 恢复(备用):使用备份,它将恢复 DR OKE 群集中的最新备份,因此您将在 OKE 群集中创建所有资源。

    • OKE- 调度反向备份(备用):为回退计划设置反向备份。

    如果使用的是 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC),则需要配置跨区域卷组(块存储)和跨区域 FSS 复制(文件存储),并将它们添加为 DRPG 中的成员。这将创建其他计划组,例如我们对 OKE 和 Oracle Autonomous Database 的看法。

  7. 执行切换。必须从备用站点(墨尔本)执行此步骤。

    转到 OCI 控制台,导航到迁移和灾难恢复DR 保护组,然后单击执行 DR 计划

任务 10:测试并验证应用程序

从备用区域访问应用程序并确保一切正常工作。应用程序应可访问 https://mushop.domain.com 或使用 http://standbyloadbalancerIP.com 地址。

确保可以访问目录项,以指示备用数据库已完全正常运行。

DRPG 成员

注:在本教程中,我们已排除在 OCI 负载平衡器上以及使用 OCI Web 应用程序防火墙中包含 SSL 证书的步骤。这两个组件可以添加到生产环境中。

后续步骤

您已了解如何在 OCI Kubernetes Engine 上部署基于微服务的电子商务应用,并使用 OCI Full Stack DR 服务进行配置,以在热备用模式下启用灾难恢复。我们展示了此应用程序如何在没有任何手动干预的情况下无缝故障转移。有关详细信息,请参阅相关链接部分中的 OCI Full Stack DR 文档。

确认

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心