附註:

使用 OCI Full Stack Disaster Recovery,將部署在 OCI Kubernetes 引擎上之示範應用程式的切換和容錯移轉計畫自動化

簡介

本教學課程示範一個 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 為基礎之應用程式的 OCI Full Stack DR,例如 MuShop,這是一種以微服務為基礎的示範應用程式,使用各種其他 Oracle Cloud Infrastructure (OCI) 服務作為一個應用程式。

我們將使用暖待命方法:災害復原 (DR) 模型,其中部分或所有應用程式元件都已預先部署在待命區域中,以加速災害復原轉換。雖然此模型涉及較高的作業成本,但其提供較低的復原時間目標 (RTO)。

OCI Full Stack DR 只需按一下,即可協調全球 OCI 區域之間的運算、資料庫和應用程式轉換。客戶可以自動執行復原一或多個業務系統所需的步驟,無需重新設計或重新建構現有的基礎架構、資料庫或應用程式,也不需要特殊的管理或轉換伺服器。

部署架構

OKE 部署架構

備註:主要區域為雪梨,而 DR 區域為墨爾本

目標

必要條件

作業 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 下載並擷取自治式資料庫公事包。

    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 加密密碼。
    • 必須個別下載主要和待命區域的公事包,因為 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 下載自治式資料庫公事包並進行擷取。

    oci db autonomous-database generate-wallet --autonomous-database-id \
    ${STANDBY_DB_ID} --password ${WALLET_PW} \
    --file ${STANDBY_WALLET_ZIP} --region $STANDBY_REGION
    
  8. 解壓縮待命公事包。

    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. 新增主要公事包加密密碼。

    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. 建立公事包的加密密碼。

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

    注意:我們使用的是待命公事包。

作業 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 主控台,瀏覽至網路DNS 管理流量管理操控原則、按一下建立流量管理操控原則,然後輸入下列資訊。

作業 9:設定 OCI Full Stack DR

  1. 在兩個區域中建立 DRPG。移至 OCI 主控台,瀏覽至 Migration & Disaster Recovery 並按一下 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 會員

    下圖顯示協調整個應用程式堆疊復原的 DR 計畫,這些計畫可包含其他服務以及 OKE。

    正如您從影像所看到的,我們已經內建 OKE 的步驟。OCI Full Stack DR 服務執行內部開發的備份工具。此工具會定期進行叢集的部署、複本集、Pod、CronJobs、協助程式集等備份。

    備份會儲存在我們於成員特性中指定的 OCI 物件儲存的儲存桶中。

    • 確定 - 停止備份與清除 (主要):這會停止備份,並終止 OKE 叢集中所有提及的資源。

    • OKE - 回復 (待命):使用備份,它會回復 DR 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 Help Center