ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
OCI Full Stack Disaster Recoveryを使用してOCI Kubernetes Engineにデプロイされたデモ・アプリケーションのスイッチオーバーおよびフェイルオーバー計画を自動化
イントロダクション
このチュートリアルでは、Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes EngineまたはOKE)クラスタにデプロイされたデモEコマース・アプリケーションを使用したOracle Cloud Infrastructure Full Stack Disaster Recovery (OCI Full Stack DR)のユース・ケースを示します。
このチュートリアルの執筆時点で、OCI Full Stack DRは、OKEの限定的な可用性を発表しました。限定リリースでは、他の様々なOracle Cloud Infrastructure (OCI)サービスを1つのアプリケーションとして使用するマイクロサービスベースのデモ・アプリケーションであるMuShopなどのOKEベースのアプリケーションでOCI Full Stack DRを試みます。
ウォーム・スタンバイ・アプローチを使用します。ディザスタ・リカバリ(DR)モデルでは、一部またはすべてのアプリケーション・コンポーネントがスタンバイ・リージョンに事前デプロイされ、より高速なDR遷移が可能になります。このモデルでは運用コストが高くなりますが、リカバリ時間目標(RTO)が低くなります。
OCI Full Stack DRは、世界中のOCIリージョン間の計算、データベース、アプリケーションの移行をワンクリックで調整します。お客様は、専門的な管理サーバーや変換サーバーを必要とせずに、既存のインフラストラクチャ、データベース、またはアプリケーションを再設計または再設計することなく、1つ以上のビジネス・システムをリカバリするために必要なステップを自動化できます。
デプロイメント・アーキテクチャ
ノート:プライマリ・リージョンはシドニーで、DRリージョンはメルボルンです。
目的
-
アーキテクチャに従って、プライマリ・シドニー・リージョンに
Mushop-Syd
という名前のDR保護グループ(DRPG)を作成します。 -
プライマリDRPGには、アプリケーションを構成する様々なOCIリソースのコレクションが含まれており、DR操作の実行時に結合グループとして扱われる必要があります。OKEとOracle Autonomous Database Serverless(Autonomous Database Serverless)をプライマリDRPGに追加しました。このチュートリアルでは、MuShopアプリケーションおよびデプロイメントに必要な他のすべてのリソースをデプロイするステップも示します。
-
同様のDRPGがスタンバイ・メルボルン・リージョンに作成されます。OKEおよびAutonomous Databaseサーバーレス(スタンバイ・モード)がDRPGに追加されます。ロード・バランサはDRPGの一部ではありませんが、デプロイメント・アーキテクチャで強調表示されているように、両方のサイトで独立して実行されます。
-
2つのDRPG間の関連付けが形成されます。
-
スタンバイDRPG (メルボルン)で、DR計画が作成されます。この計画は、DRワークフロー(一連のステップ)を表します。
-
DR計画を実行します。スイッチオーバーが実行され、プライマリDRPGからスタンバイDRPGへのサービスの遷移が計画されます。スイッチオーバー計画は、プライマリ・リージョンのアプリケーション・スタックを停止してから、スタンバイ・リージョンでそれを起動することで、順次遷移を実行します。したがって、スイッチオーバー計画では、アプリケーション・スタック・コンポーネントおよびその他の必要なOCIサービスが両方のリージョンで使用可能である必要があります。
前提条件
-
OCI Full Stack DRについて、管理者権限または必要なOracle Cloud Infrastructure Identity and Access Management (OCI IAM)ポリシーを構成すること。詳細は、OCI Full Stack DRを使用するためのIdentity and Access Management (IAM)ポリシーの構成および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サーバーレスのパスワード基準の詳細は、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エンドポイント: 「パブリック」を選択します。
- ノード・タイプ: 「管理」を選択します。
- 「プライベート・ワーカー」を選択します。
- シェイプ: 「VM Standard E3 Flex (4 OCPU、 64 GB Memory)」を選択します。
- 「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を入力します。
- ターゲット・パス:
/
と入力します。 - 方法: 「GET」を選択します。
- タイムアウト: 30と入力します。
- 間隔: 30秒を入力します。
タスク8: Traffic Management Steering Policyの構成(オプション)
OCIコンソールに移動し、「ネットワーキング」、「DNS管理」、「Traffic Management Steering Policies」に移動し、「Traffic Management Steering Policyの作成」をクリックして、次の情報を入力します。
- 名前:
FSDR-POLICY
と入力します。 - TTL: 60秒を入力します。
- プール1:
- 名前:
Primary
と入力します。 - タイプ: 「A」を選択します。
- Rdata:プライマリ・ロード・バランサのIPを入力します。
- 名前:
- プール2:
- 名前:
Standby
を入力します。 - タイプ: 「A」を選択します。
- Rdata:スタンバイ・ロード・バランサのIPを入力します。
- 名前:
- プールの優先度の選択:
- Pool1
- Pool2
- タスク7で作成したヘルス・チェックをアタッチします。
タスク9: OCI Full Stack DRの設定
-
両方のリージョンにDRPGを作成します。OCIコンソールに移動し、「移行およびディザスタ・リカバリ」に移動して、「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サービスは、内部で開発されたバックアップ・ツールを実行します。このツールは、デプロイメント、レプリカ・セット、ポッド、CronJobs、デーモン・セットなどのクラスタのバックアップを定期的に取得します。
バックアップは、メンバー・プロパティで指定したOCIオブジェクト・ストレージ・バケットに格納されます。
-
OKE - バックアップおよびクリーンアップの停止(プライマリ):これにより、バックアップが停止され、OKEクラスタ内の前述のリソースがすべて終了します。
-
OKE - リストア(スタンバイ):バックアップを使用して、DR OKEクラスタ内の最新のバックアップがリストアされるため、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 Application Firewallを使用するSSL証明書を含めるステップを除外しました。これら2つのコンポーネントを本番環境に追加できます。
次のステップ
OCI Kubernetes Engineにデプロイされたマイクロサービスに基づくeコマース・アプリケーションをOCI Full Stack DRサービスで構成して、ウォーム・スタンバイ・モードでのディザスタ・リカバリを可能にする方法を確認しました。このアプリケーションは、手動操作なしでシームレスにフェイルオーバーできることを示しました。詳細は、「関連リンク」セクションのOCI Full Stack DRのドキュメントを参照してください。
関連リンク
承認
-
著者 - 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
G23616-01
December 2024