ノート:

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つ以上のビジネス・システムをリカバリするために必要なステップを自動化できます。

デプロイメント・アーキテクチャ

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: Traffic Management Steering Policyの構成(オプション)

OCIコンソールに移動し、「ネットワーキング」「DNS管理」「Traffic Management Steering Policies」に移動し、「Traffic Management Steering Policyの作成」をクリックして、次の情報を入力します。

タスク9: OCI Full Stack DRの設定

  1. 両方のリージョンにDRPGを作成します。OCIコンソールに移動し、「移行およびディザスタ・リカバリ」に移動して、「DR保護グループ」をクリックします。たとえば、primary-drpg-sydneyおよびstandby-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サービスは、内部で開発されたバックアップ・ツールを実行します。このツールは、デプロイメント、レプリカ・セット、ポッド、CronJobs、デーモン・セットなどのクラスタのバックアップを定期的に取得します。

    バックアップは、メンバー・プロパティで指定したOCIオブジェクト・ストレージ・バケットに格納されます。

    • 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 Application Firewallを使用するSSL証明書を含めるステップを除外しました。これら2つのコンポーネントを本番環境に追加できます。

次のステップ

OCI Kubernetes Engineにデプロイされたマイクロサービスに基づくeコマース・アプリケーションを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を参照してください。