附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱 Oracle Cloud Infrastructure Free Tier 入門。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
使用 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 區域之間的運算、資料庫和應用程式轉換。客戶可以自動執行復原一或多個業務系統所需的步驟,無需重新設計或重新建構現有的基礎架構、資料庫或應用程式,也不需要特殊的管理或轉換伺服器。
部署架構
備註:主要區域為雪梨,而 DR 區域為墨爾本。
目標
-
根據架構,我們將在主要雪梨區域建立一個名為
Mushop-Syd
的 DR 保護群組 (DRPG)。 -
主要 DRPG 包含構成應用程式的不同 OCI 資源集合,且在執行 DR 作業時,必須將其視為合併群組。我們已將 OKE 和 Oracle Autonomous Database Serverless (Autonomous Database Serverless) 新增至主要 DRPG。本教學課程也提供部署 MuShop 應用程式和部署所需之所有其他資源的步驟。
-
在待命墨爾本區域建立類似的 DRPG。OKE 和 Autonomous Database Serverless (待命模式) 已新增至 DRPG。負載平衡器不是 DRPG 的一部分,但會在兩個網站獨立執行,如部署架構中醒目提示。
-
兩個 DRPG 之間會形成關聯。
-
在待命 DRPG (墨爾本) 中,會建立 DR 計畫。此計畫代表 DR 工作流程 (一系列步驟)。
-
執行 DR 計畫。系統會執行切換,計畫將服務從主要 DRPG 轉換成待命 DRPG。切換計畫會藉由關閉主要區域中的應用程式堆疊,然後在待命區域中啟動,來執行順序轉換。因此,切換計畫需要兩個區域都提供應用程式堆疊元件和其他必要的 OCI 服務。
必要條件
-
管理員權限或設定 OCI Full Stack DR 所需的 Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 原則。如需詳細資訊,請參閱設定身分識別與存取管理 (IAM) 原則以使用 OCI Full Stack DR 和 OCI Full Stack DR 原則。
-
環境設定:
export COMPARTMENT_ID=ocid1.compartment.oc1.. export DB_NAME=fsdrdemoadb export DB_DISPLAY_NAME=fsdrdemoadb export DB_PASSWORD=<Your DB Password> export WALLET_PW=<Your DB Password> export DB_SERVICE_NAME=${DB_NAME}_tp export WALLET_ZIP=/tmp/Wallet_${DB_NAME}.zip export STANDBY_WALLET_ZIP=/tmp/Wallet_${DB_NAME}_Standby.zip export PRIMARY_REGION=ap-sydney-1 export STANDBY_REGION=ap-melbourne-1 export STANDBY_DB_NAME=${DB_NAME}_remote
新增下列行至名為
env
的檔案,並作為其來源。source env
注意:
- 如需有關無 Autonomous Database Serverless 密碼條件的詳細資訊,請參閱關於 Autonomous Database 的使用者密碼。
- Autonomous Database 無伺服器名稱只能包含文數字字元。
- 取代上述環境變數中的
DB_PASSWORD
和WALLET_PW
。
作業 1:安裝並設定 Oracle Autonomous Database
-
建立主要 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}
-
擷取主要 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)
-
建立待命 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
-
從主要 Oracle Autonomous Database 下載並擷取自治式資料庫公事包。
oci db autonomous-database generate-wallet --autonomous-database-id ${DB_ID}\ --password ${WALLET_PW} --file ${WALLET_ZIP} --region $PRIMARY_REGION
-
將公事包解壓縮至主要公事包。
unzip ${WALLET_ZIP} -d /tmp/wallet_primary
注意:
- 請讓此公事包方便使用,因為稍後我們需要將它新增為 OKE 加密密碼。
- 必須個別下載主要和待命區域的公事包,因為
tnsnames.ora
DNS 項目不同。
-
擷取待命 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)
-
從待命 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
-
解壓縮待命公事包。
unzip ${STANDBY_WALLET_ZIP} -d /tmp/wallet_standby
作業 2:建立 OKE 叢集
在主要和 DR 站台上建立 OKE 叢集。如需詳細資訊,請參閱使用 Oracle Cloud Infrastructure Container Engine for Kubernetes 建立叢集。
我們使用快速建立選項來建立含有下列資訊的叢集:
- 叢集名稱:輸入
primary-syd-oke-demo-cluster
(雪梨) 和standby-mel-oke-demo-cluster
(墨爾本)。 - Kubernetes API 端點:選取公用。
- 節點類型:選取受管理。
- 選取專用工作 (Private Workers) 。
- 資源配置:選取 VM 標準 E3 Flex (4 OCPU,64 GB 記憶體) 。
- 選取 Oracle Linux 8 。
若要存取您的叢集,請前往 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 加密密碼
-
建立命名空間。
kubectl create ns mushop
-
新增 Oracle Autonomous Database 管理員密碼加密密碼。
kubectl create secret generic oadb-admin \ --namespace mushop \ --from-literal=oadb_admin_pw=${DB_PASSWORD}
-
新增 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}
-
新增主要公事包加密密碼。
kubectl create secret generic oadb-wallet \ --namespace mushop --from-file=/tmp/wallet_primary
工作 4:設定 MuShop 應用程式
注意:應用程式只會在主要區域 (
ap-sydney-1
) 部署。
-
複製儲存區域。
git clone git@github.com:naikvenu/fsdr-demo.git
-
前往圖表資料夾。
cd fsdr-demo/helm-chart/
-
更新圖表相依性。
helm dependency update ./setup
-
安裝並設定圖表。
helm upgrade --install mushop-utils setup --dependency-update --namespace mushop-utilities --create-namespace
-
尋找傳入控制器
EXTERNAL-IP
位址。PRIMARY_EXTERNAL_IP=$(kubectl get svc -n mushop-utilities mushop-utils-ingress-nginx-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
-
在 OKE 叢集上安裝應用程式。
helm upgrade --install -f ./mushop/values-dr.yaml \ fsdrmushop mushop -n mushop
-
使用傳入 IP 存取主要 MuShop 應用程式。
kubectl get svc mushop-utils-ingress-nginx-controller \ --namespace mushop-utilities
-
若要驗證應用程式,請存取
http://<primary-site-ingress-ip-address>
,並確保您看到列出的所有 MuShop 目錄產品且無錯誤。
作業 5:在待命網站設定 OKE 叢集
注意:由於我們使用溫暖的待命方法,因此我們需要建立 OKE 叢集並執行一些基本功能,例如傳入控制器。以下步驟可協助您達成此目標。
-
若要在待命網站存取您的叢集,請前往 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
-
複製儲存區域。
git clone git@github.com:naikvenu/fsdr-demo.git
或
git clone https://github.com/naikvenu/fsdr-demo
-
前往圖表資料夾。
cd fsdr-demo/helm-chart/
-
更新圖表相依性。
helm dependency update ./setup
-
安裝並設定圖表。您必須部署傳入控制器 (OCI 負載平衡器) 才能存取應用程式。
注意:此步驟只會部署傳入控制器 (OCI 負載平衡器),不會部署完整應用程式。
helm upgrade --install mushop-utils setup --dependency-update --namespace mushop-utilities --create-namespace
-
尋找傳入控制器
EXTERNAL-IP
位址。STANDBY_EXTERNAL_IP=$(kubectl get svc -n mushop-utilities mushop-utils-ingress-nginx-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
-
建立 MuShop 命名空間。
kubectl create namespace mushop
-
建立公事包的加密密碼。
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 主控台,依序瀏覽至可觀察性與管理、監控、狀況檢查、按一下建立狀況檢查,然後輸入下列資訊。
- 名稱:輸入
FSDR-APP-HEALTHCHECK
。 - 目標:輸入主要和待命負載平衡器的 IP。
- 協定:選取 http 。
- 連接埠:輸入 80 。
- 目標路徑:輸入
/
。 - 方法 (Method):選取 GET 。
- 逾時:輸入 30 。
- 間隔 (Interval):輸入 30 秒。
工作 8:設定流量管理操控原則 ( 選擇性 )
移至 OCI 主控台,瀏覽至網路、DNS 管理、流量管理操控原則、按一下建立流量管理操控原則,然後輸入下列資訊。
- 名稱:輸入
FSDR-POLICY
。 - TTL:輸入 60 秒。
- Pool 1:
- 名稱:輸入
Primary
。 - 類型:選取 A 。
- 資料:輸入主要負載平衡器的 IP。
- 名稱:輸入
- Pool 2:
- 名稱:輸入
Standby
。 - 類型:選取 A 。
- 資料:輸入待命負載平衡器的 IP。
- 名稱:輸入
- 選取集區優先順序:
- Pool1
- Pool2
- 附加在任務 7 中建立的狀況檢查。
作業 9:設定 OCI Full Stack DR
-
在兩個區域中建立 DRPG。移至 OCI 主控台,瀏覽至 Migration & Disaster Recovery 並按一下 DR 保護群組。例如,
primary-drpg-sydney
和standby-drpg-melbourne
。 -
建立 DRPG 的關聯。移至 OCI 主控台,瀏覽至移轉與災害復原、 DR 保護群組,然後按一下關聯。
-
新增資源至 DRPG (雪梨地區)。移至 OCI 主控台,瀏覽至移轉與災害復原、 DR 保護群組、成員,然後按一下新增成員。
-
新增 OKE 叢集和 Oracle Autonomous Database。
-
新增資源至 DRPG (墨爾本區域) - OKE 叢集和 Oracle Autonomous Database。
-
在待命區域 (墨爾本) 建立 DR 計畫。移至 OCI 主控台,瀏覽至移轉與災害復原、 DR 保護群組、計畫,然後按一下建立計畫。
下圖顯示協調整個應用程式堆疊復原的 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 一樣。
-
-
執行切換。此步驟必須從待命網站 (墨爾本) 執行。
移至 OCI 主控台,瀏覽至移轉與災害復原、 DR 保護群組,然後按一下執行 DR 計畫。
作業 10:測試並驗證應用模組
從待命區域存取應用程式,並確保一切正常運作。應用程式應可在 https://mushop.domain.com
存取,或使用 http://standbyloadbalancerIP.com
位址。
確定您可以存取目錄項目,表示待命資料庫已完全恢復運作。
注意:在本教學課程中,我們已排除在 OCI 負載平衡器上以及使用 OCI Web 應用程式防火牆上包含 SSL 憑證的步驟。這兩個元件可新增至生產環境。
接下來的步驟
您已經瞭解部署在 OCI Kubernetes Engine 上的微服務電子商務應用程式如何設定 OCI Full Stack DR 服務,以在溫暖待命模式中啟用災難復原。我們顯示此應用程式如何無縫接軌地容錯移轉,無需任何手動介入。如需詳細資訊,請參閱相關連結一節中的 OCI Full Stack DR 文件。
相關連結
-
Oracle Cloud Infrastructure (OCI) Full Stack Disaster Recovery
-
使用 Oracle Cloud Infrastructure Full Stack Disaster Recovery 的 run 命令呼叫自訂命令檔
認可
-
作者 - Venugopal Naik (主要雲端架構師)
-
貢獻者 - Raphael Teixeira (FSDR 技術人員主要成員),Suraj Ramesh (MAA 首席產品經理)
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Automate a Switchover and Failover Plan for a Demo Application Deployed on OCI Kubernetes Engine with OCI Full Stack Disaster Recovery
G23620-01
December 2024