OCI Full Stack Disaster Recoveryを使用したPostgreSQLOCI Database with PostgreSQLによるOCI Databaseのコールド・ディザスタ・リカバリの自動化
はじめに
Oracle Cloud Infrastructure Full Stack Disaster Recovery(OCI Full Stack DR)は、世界中のOCIリージョン間のコンピュート、データベース、アプリケーションの移行をワンクリックで調整します。お客様は、既存のインフラストラクチャ、データベースまたはアプリケーションを再設計または再設計することなく、また特殊な管理サーバーや変換サーバーを必要とせずに、1つ以上のビジネス・システムをリカバリするために必要なステップを自動化できます。
OCI Database with PostgreSQLは、インテリジェントなサイジング、チューニング、および高い耐久性を備えたフルマネージドのPostgreSQL互換サービスです。このサービスでは、データベース表が作成および削除されるたびにストレージが自動的にスケーリングされるため、管理が容易になり、ストレージ支出を最適化できます。データは、転送中および保存中の両方で暗号化されます。OCI Database with PostgreSQLは、可用性ドメイン(AD)に障害が発生した場合でも耐久性を提供することで、高可用性を実現するように設計されています。
このチュートリアルでは、OCI Database with PostgreSQLのコールド・ディザスタ・リカバリを自動化する方法を学習します。ここでは、OCI Full Stack DRサービスを利用してスイッチオーバー・プロセスとフェイルオーバー・プロセスを管理する手順について説明します。
ノート:このタイプのディザスタ・リカバリ(DR)戦略は、バックアップおよびリストア・メカニズムに依存するため、リカバリ時間目標(RTO)およびリカバリ・ポイント目標(RPO)のビジネス要件が過度に要求されない非クリティカル・アプリケーションに最適です。
アーキテクチャの説明
このチュートリアルで紹介するアーキテクチャは、OCI仮想マシン(VM)で実行される一般的なWebアプリケーションを、PostgreSQLOCI Database with PostgreSQLでOCI Databaseとシームレスに統合したものです。
OCIロード・バランサは、外部ユーザー接続を効率的に管理するために、両方のリージョンのパブリック・サブネット内にデプロイされます。アプリケーション・ユーザーは、DNSトラフィック・ステアリングを介してリージョンXで現在アクティブなバックエンドにルーティングされます。
図fsdr_psql_backup_restore_dr-Physical_Architecture.pngの説明
ディザスタ・リカバリのアーキテクチャの説明
このWebアプリケーションのDR戦略には、ボリューム・グループ・レプリケーションを使用したVMのブート・ボリュームの完全なレプリケーションなど、包括的なアプローチが含まれます。
PostgreSQLOCI Database with PostgreSQLを使用したOCI Databaseの場合、バックアップ・コピーが有効になり、自動バックアップがリモート・リージョンに定期的にコピーされて、データ保護とディザスタ・リカバリの準備が整います。
図fsdr_psql_backup_restore_dr-Physical_DR_Architecture.pngの説明
このデプロイメントのリカバリ・ソリューションでは、フェイルオーバーやスイッチオーバーなどのリカバリ操作中に一連のカスタムPythonスクリプトを実行するには、OCI Full Stack DRが必要です。
このチュートリアルで参照されるスクリプトは、EMEAテクノロジ・エンジニアリング・チームによって提供され、このDRソリューション用に特別に調整されたフルスタック・ディザスタ・リカバリで入手できます。
このチュートリアルでは、スクリプトをダウンロードする方法と、後のタスクで使用する方法について説明します。
ノート:一般的なガイダンスとして、次のスクリプトが用意されています。独自のスクリプトを使用するか、企業のポリシーおよびセキュリティ要件に従ってスクリプトをカスタマイズできます。
ロード・バランサはリモート・リージョンに事前にプロビジョニングされているため、スイッチオーバーまたはフェイルオーバー中にWebアプリケーションVMがリモート・リージョンに移行されたときにトラフィックをシームレスに処理する準備ができています次の図に示すように、ロード・バランサのシームレスなスイッチオーバーは、現在使用可能なロード・バランサのバックエンド・セットへのヘルスチェック・アタッチ・ルーティングを含むDNSステアリング・ポリシーによって保証されます。詳細は、OCIトラフィック管理を参照してください。
ロード・バランサ・リスナーは、ポート80
(フロントエンド)および8000
(API)で設定され、それぞれデフォルト構成のポート3000
および8585
にルーティングされます。
図fsdr_psql_backup_restore_dr-Physical_Network_Architecture.pngの説明
次の図は、プライマリ・リージョンからリモート・リージョンへの自動バックアップ・コピーのワークフローを示しています。
図fsdr_psql_backup_restore_dr-Logical_Workflow_Auto_Copy_Backup_to_Remote.pngの説明
この場合、バックアップを毎日実行するようにスケジュールし、冗長性を高めるためにリモート・リージョンにコピーすることで、リカバリ・ポイント目標(RPO)が24時間になります。
ノート:
- 自動バックアップを有効にし、リモート・リージョンへのバックアップ・コピーを有効にしてください。このステップがない場合、セカンダリ・リージョンでバックアップを使用できないため、リストア・プロセスが失敗する可能性があります。
- このチュートリアルでは、作成、別のリージョンへの転送、およびバックアップからの新しいデータベース・システムの作成のタスクを自動化することに重点を置いていますが、概説されているOCI Database with PostgreSQLのドキュメントに従って、これらの非常に同じ手順を手動で実行できます。
ユースケースに短いRPOが必要な場合は、より頻繁なバックアップをスケジュールし、提供されたスクリプト(psql_create_bkp.py
およびpsql_copy_bkp.py
)を使用して、ビジネス要件に従ってバックアップを手動でトリガーし、リモート・リージョンにコピーします。また、psql_copy_config.py
を使用して、データベース・システムの拡張およびパラメータのリストアに必要なOCI Database with PostgreSQL構成をリモート・リージョンにコピーできます。
図fsdr_psql_backup_restore_dr-Logical_Workflow_Manual_Backup_Copy_to_Remote.pngの説明
すべてのスクリプトはGitHubで使用でき、次の各項で詳しく説明します。
注意:定期的にバックアップを取得し、リモート・リージョンにコピーするために、ビジネス要件に従ってこのスクリプト(または同様のスクリプト)をスケジュールしてください。このステップがない場合、セカンダリ・リージョンでバックアップを使用できないため、リストア・プロセスが失敗する可能性があります。
リカバリの仕組み
計画されたスイッチオーバーの実行後、ロールは逆転します。プライマリ・ワークロードはリージョン2で実行され、スタンバイはリージョン1で動作します。アーキテクチャは次のようになります。
図fsdr_psql_backup_restore_dr-Physical_Switchover_Architecture.pngの説明
In the current setup, we leverage the OCI private DNS service to manage a DNS record that directs traffic to the active OCI Database with PostgreSQL endpoint.リカバリ・プロセス中に、このDNSレコードはカスタム・スクリプト(psql_update_dns.py
)を介して更新され、新しいOCI Database with PostgreSQLが反映されるため、シームレスなスイッチオーバーまたはフェイルオーバーとサービスの継続性が保証されます。
次の図は、スタンバイ・リージョンでPostgreSQLOCI Database with PostgreSQLバックアップを使用して最新のOCI Databaseをリストアするためのワークフローを示しており、これが新しいプライマリ・リージョンになります。
図fsdr_psql_backup_restore_dr-Logical_Workflow_Switchover_to_Remote.pngの説明
チュートリアル全体での定義と仮定
-
リージョン:
-
リージョン1 (ドバイ):ドバイは当初、プライマリ・リージョンとして機能します。ただし、このロールはスイッチオーバー・プロセス中にスタンバイに移行します。スイッチオーバー・プロセスは、ディザスタ・リカバリ計画の一部として後のタスクで実行されます。
-
リージョン2 (アブダビ):アブダビは、最初はスタンバイ・リージョンとして機能します。このロールは、スイッチオーバー・プロセス後にプライマリに移行します。スイッチオーバー・プロセスは、ディザスタ・リカバリ手順の一部として後続のタスクで実行されます。
-
-
コンパートメント:このデプロイメントおよびOCI Full Stack DRは、ITガバナンスの標準内で動作する任意のコンパートメント・スキームに自由に編成できます。このチュートリアルのすべてのOCIリソースを1つのコンパートメントに編成することを選択しました。
Webアプリケーション仮想マシン
このチュートリアルのWebアプリケーションは、エンド・ツー・エンドのシナリオ・アーキテクチャを紹介することを目的としており、単一のデプロイメント・スクリプト(deploy_application_demo.sh
)によって、WebアプリケーションVMにアプリケーション・スタックが構成およびデプロイされます。アプリケーションのデプロイに関する詳細な手順は、リポジトリlink-to-web-app-sampleにあります。
フロントエンド・プレビュー:レポートに表示される行は、PostgreSQLOCI Database with PostgreSQLを使用したOCI Databaseから直接取得されます。
画像webapp-frontend-preview.pngの説明
目的
このチュートリアルでは、次のタスクについて説明します:
- タスク1: ディザスタ・リカバリのための環境の準備
- タスク2: 両方のリージョンでのDR保護グループ(DRPG)の作成
- タスク3: DR保護グループへのメンバーの追加
- タスク4: リージョン2での基本的なDR計画の作成
- タスク5: リージョン2でのスイッチオーバー・プランのカスタマイズ。
- タスク6: リージョン2でのフェイルオーバー計画のカスタマイズ
- タスク7: リージョン2でDR計画の事前チェックを実行します。
- タスク8: リージョン2でスイッチオーバー計画を実行します。
- タスク9: リージョン1でのDR計画の作成およびカスタマイズ
- タスク10: リージョン1でのフェイルオーバー計画の実行
タスク1: ディザスタ・リカバリのための環境の準備
タスク1.1: ボリューム・グループの作成およびレプリケーションの有効化
リージョン1でサンプルWebアプリケーションVMのボリューム・グループを作成し、それがリージョン2でレプリケートされていることを確認します。各アプリケーションVMのブート・ボリューム(サンプルWebApp)がボリューム・グループのメンバーであり、ボリューム・グループがリージョン2にレプリケートされていることを確認します。
次のイメージは、リージョン2へのレプリケーションが正常に有効化されたWebアプリケーションVMのブート・ボリュームを含む、作成されたボリューム・グループを示しています。詳細は、ボリューム・グループの作成に関する項を参照してください。
画像psql-webapp-create-vol-grp.pngの説明
図psql-webapp-create-vol-grp-2.pngの説明
図psql-webapp-create-vol-grp-3.pngの説明
クロス・リージョン・レプリケーションを構成した後、「サマリー」が表示されるまで「次へ」をクリックし、「作成」をクリックします。
タスク1.2: 自動デプロイメントのためのWebアプリケーションVMの準備
-
/home/opc
フォルダのGitHubリポジトリ(oci-postgressql-colddr)をダウンロード/クローニングします。 -
スクリプトを実行可能にします。
chmod +x deploy_application_demo.sh
-
両方のリージョンで、WebアプリケーションおよびOCI Database with PostgreSQLに必要な詳細で
deploy_application_demo.sh
スクリプトを更新します。WEBAPP_HOME
:デプロイメントのルートの場所(スクリプトの実行元の場所)。たとえば、/home/opc
です。WEBAPP_URL
: APIhttp://webapi.yoururl.eu:8000
でコンピュートを指すURL。PRIMARY_REGION
: OCIプライマリ・リージョン。形式はeu-frankfurt-1
です。STANDBY_REGION
: OCIスタンバイ・リージョン。PRIMARY_SECRET_OCID
:プライマリ・リージョン(ocid1.vaultsecret.oc1.me-dubai-1.xxxxxx
)のPostgreSQLパスワードを持つOCIボールト・シークレットOCID。STANDBY_SECRET_OCID
:スタンバイ・リージョン(ocid1.vaultsecret.oc1.me-abudhabi-1.xxxxxx
)のPostgreSQLパスワードを持つOCIボールト・シークレットOCID。PG_USER
:サンプル・データのロードに使用されるデータベース・ユーザー(postgresql_sample.sql
)。PG_DB
:サンプル・データのロードに使用されるデータベース。デフォルト値はpostgres
です。PG_HOST
:データベースのプライベート・ゾーン・エントリのFQDN。
ノート:
- すべての値が正確に更新されていることを確認します。
- デフォルト構成を使用する場合は、他のパラメータを変更しないままにできます。
-
deploy_application_demo.sh
スクリプトを実行します。./deploy_application_demo.sh
これにより、フロントエンド、バックエンドがデプロイされ、サービスおよびファイアウォールが構成されます。
デプロイメントに成功すると、「デプロイメントが完了しました。」というメッセージが表示されます。
チュートリアルの一部として、ユーザー定義スクリプトの実行にこの同じVMを使用します。DR制御ノードとして機能する VMがコマンドを実行するように構成されていることを確認します。詳細は、Oracle Cloud Infrastructure Full Stack Disaster Recoveryでのrunコマンドを使用したカスタム・スクリプトの起動を参照してください。
タスク1.3: Webステアリング・ポリシーの作成
アプリケーションが常にアクティブ・リージョンを指していることを保証するために、フェイルオーバー・トラフィック管理ステアリング・ポリシーを利用できます。ステアリング・ポリシーをOCI Health Checksサービスと組み合わせると、HTTPモニターを介して、アプリケーション・エンドポイントが60秒(デフォルトのTTL)ごとに検証されます。
-
OCIコンソールに移動し、「ネットワーキング」に移動します。
-
「トラフィック管理ステアリング・ポリシー」をクリックします。
-
「トラフィック管理ステアリング・ポリシーの作成」をクリックします。
画像psql-webapp-dns-create.pngの説明
-
「ポリシー・タイプ」として「フェイルオーバー」を選択します。
- ステアリング・ポリシーの「名前」を入力します。
- ステアリング・ポリシーのコンパートメントを選択します。
- 要件に従ってTTLを選択します。
-
リージョン1のロード・バランサを指して、アンサー・プール1を構成します。
- プールに対してわかりやすい名前を入力します。
- 「レコード」に「タイプ」を選択します。
- リージョン1にWebアプリケーション・ロード・バランサのIPを入力します。
-
リージョン2のロード・バランサを指して、アンサー・プール2を構成します。
- プールの「名前」を入力します。
- 「レコード」に「タイプ」を選択します。
- リージョン2にWebアプリケーション・ロード・バランサのIPを入力します。
-
「プール優先度」を構成します。このコンテキスト優先度はリージョン1に指定されます。
-
「新規追加」をクリックして、OCIヘルス・チェック・ポリシーをアタッチします。
- 「リクエスト・タイプ」に「HTTP」を選択します。
- ヘルス・チェックの「名前」を入力します。
- ヘルス・チェックのコンパートメントを選択します。
-
「拡張」オプションをクリックします。
- Webアプリケーションのポート(この場合は
80
)を入力します。 - Webアプリケーションのパス(この場合は
/
)を入力します。 - 「メソッド」として「GET」を選択します。
- リクエストのタイムアウトを選択します。
- Webアプリケーションのポート(この場合は
-
アタッチされたドメインを構成します。
webapi
エンドポイントのサブドメインを入力します。- ゾーン(ドメイン)を含むコンパートメントを選択します。
- 適切なゾーンを選択します。
webapp
エンドポイントに対してステップ1から3を繰り返します。
-
すべての詳細が正しいかどうかを確認し、「トラフィック管理ステアリング・ポリシーの作成」をクリックします。しばらくすると、completedと表示されます。
-
ステアリング・ポリシーの作成後の概要を確認できます。ページの最後に、「アタッチされたヘルス・チェック」が表示されます。
画像psql-webapp-dxb-dns-create-details.pngの説明
- 「アタッチされたヘルス・チェック」をクリックします。
- 「ヘルス・チェック履歴」にナビゲートします。
-
ここで、現在使用可能なロード・バランサおよび過去の可用性を表示できます。
-
タスク1.4: OCI Full Stack DRのOracle Cloud Infrastructure Identity and Access Managementポリシーの作成
OCI Full Stack DRに必要なOCI IAMポリシーを構成するには、次を参照してください:
タスク1.5: OCI Full Stack DRによって管理される他のサービスのためのOCI IAMポリシーの作成
OCI Full Stack DRには、コンピュート、ネットワーキング、ストレージ、その他のサービスなどの他の主要なOCIサービスを制御および管理する機能が必要です。他のサービスに必要なOCI IAMポリシーを構成するには、フル・スタック・ディザスタ・リカバリによって管理される他のサービスのポリシーおよびOCI IAMポリシーを参照してください。
タスク2: 両方のリージョンでのDR保護グループ(DRPG)の作成
このアプリケーション・スタックの保護グループがまだ存在しない場合は、リージョン1およびリージョン2でDR保護グループを作成します。
タスク2.1: リージョン1での保護グループの作成
-
OCIコンソールに移動し、DR保護グループに移動します。
- OCIリージョン・コンテキストがリージョン1 (ドバイ)に設定されていることを確認します。
- 「移行とディザスタ・リカバリ」をクリックします。
- 「DR保護グループ」をクリックします。
-
リージョン1で基本的なDR保護グループ(DRPG)を作成します。ピア、ロールおよびメンバーは、後のステップで割り当てられます。
- DRPGを作成するコンパートメントを選択します。
- 「DR保護グループの作成」をクリックして、ダイアログを開きます。
- DRPGの「名前」を入力します。
- OCI Full Stack DRログの場合は、「OCI Object Storageバケット」を選択します。
- 「作成」をクリックします。
タスク2.2: リージョン2での保護グループの作成
-
OCIコンソールに移動し、「DR保護グループ」に移動します。
- OCIリージョン・コンテキストがリージョン2 (Abu Dhabi)に設定されていることを確認します。
- 「移行とディザスタ・リカバリ」をクリックします。
- 「DR保護グループ」をクリックします。
-
リージョン2で基本的なDR保護グループ(DRPG)を作成します。ピア、ロールおよびメンバーは、後のステップで割り当てられます。
- DRPGを作成するコンパートメントを選択します。
- 「DR保護グループの作成」をクリックして、ダイアログを開きます。
- DRPGの「名前」を入力します。
- OCI Full Stack DRログの場合は、「OCI Object Storageバケット」を選択します。
- 「作成」をクリックします。
タスク2.3: リージョン1およびリージョン2での保護グループの関連付け
各リージョンのDRPGを互いのピアとして関連付け、プライマリおよびスタンバイのピア・ロールを割り当てます。プライマリおよびスタンバイのロールは、DR操作/DR計画実行の一部としてOCI Full Stack DRによって自動的に変更されます。ロールをいつでも手動で管理する必要はありません。
-
「DR保護グループの詳細」ページに移動します。
- OCIリージョン・コンテキストがリージョン1 (ドバイ)に設定されていることを確認します。
- 「関連付け」をクリックしてプロセスを開始します。
-
次の図に示すようにパラメータを入力してください。
- ロール: 「プライマリ」ロールを選択します。OCI Full Stack DRは、スタンバイ・ロールをリージョン2に自動的に割り当てます。
- ピア・リージョン:他のDRPGが作成されたリージョン2 (アブダビ)を選択します。
- ピアDR保護グループ:作成されたピアDRPGを選択します。
- 「関連付け」をクリックします。
OCI Full Stack DRは、アソシエーションが完了すると、次のイメージに示すように表示されます。
- 現在のプライマリピアDRPGはドバイ(リージョン1)です。
- 現在のスタンバイ・ピアDRPGはアブダビ(リージョン2)です。
画像psql-webapp-dxbauh-drpg-primary.pngの説明
コンテキスト/ビューがグローバルな観点から見ると、次の図に示すようにすべてのDR保護グループを示す場合でも、同じ情報を確認できます。
- 現在のプライマリピアDRPGはドバイ(リージョン1)です。
- 現在のスタンバイ・ピアDRPGはアブダビ(リージョン2)です。
画像psql-webapp-dxbauh-drpg-standby.pngの説明
タスク3: DR保護グループへのメンバーの追加
このタスクでは、リージョン1のプライマリDRPGに次のOCIリソースを追加します。
- Webアプリケーションをホストしているコンピュート・インスタンスは、移動するVMとして追加されます。
- Webアプリケーションのコンピュート・ノードのブート・ボリュームを含むボリューム・グループ。
- プライマリ・ロード・バランサ。
タスク3.1: リージョン1のDRPGへのメンバーの追加
-
次の図に示すように、Region 1のDRPGを選択します。
- OCIリージョン・コンテキストがリージョン1 (ドバイ)であることを確認します。
- 「Region 1」で「DRPG」を選択します。
- 「メンバー」を選択します。
- 「メンバーの追加」をクリックしてプロセスを開始します。
-
WebアプリケーションVMのコンピュート・インスタンスを追加します。
- DR計画に関する警告を確認します。
- メンバーの「リソース・タイプ」として「コンピュート」を入力します。
- Webアプリケーションをホストするコンピュート・インスタンスを選択します。
- 「インスタンスの移動」を選択します。
- 「VNICマッピングの追加」をクリックして、リカバリ中にリージョン2でVNICに割り当てるVCNおよびサブネットを選択します。
- 「詳細オプションの表示」をクリックします。
- 「設定」で、「フォルト・ドメインの保持」を選択します。
- 詳細を確認して、「追加」をクリックします。
画像psql-webapp-dxb-drpg-add-compute.pngの説明
画像psql-webapp-dxb-drpg-add-compute-vnic.pngの説明
画像psql-webapp-dxb-drpg-add-compute-vnic-details.pngの説明
-
WebアプリケーションVMのブート・ボリュームを含むブロック・ボリューム・グループを追加します。
- DR計画に関する警告を確認します。
- 「ボリューム・グループ」をメンバー「リソース・タイプ」として選択します。
- ボリューム・グループを含む正しいコンパートメントが選択されていることを確認し、ボリューム・グループを選択します。
- 詳細を確認して、「追加」をクリックします。
-
この例では、リージョン1のDRPGのメンバーとしてOCIロード・バランサを追加します。
- DR計画に関する警告を確認します。
- 「ロード・バランサ」をメンバーの「リソース・タイプ」として選択します。
- ロード・バランサの正しいコンパートメントが選択されていることを確認し、追加するロード・バランサを選択します。
- リージョン2で使用する「宛先ロード・バランサ」を選択します。
- 「ソース・バックエンド・セット」を選択します。これは、WebアプリケーションVMで使用されるバックエンド・セットです。OCIロード・バランサは、複数のアプリケーション間で共有でき、複数のバックエンド・セットを構成できます。DRスイッチオーバー中は、ここで指定したバックエンド・セットのみがその構成をスタンバイ・リージョンに移動します。
- 「宛先バックエンド・セット」を選択します。これは、リージョン2で作成された空のバックエンド・セットです。
- 詳細を確認し、「追加」をクリックします。
画像psql-webapp-dxb-drpg-add-lb.pngの説明
-
メンバー・セクションにロード・バランサ、ボリューム・グループおよびコンピュート・インスタンスが含まれていることを確認します。
タスク3.2: リージョン2のDRPGへのメンバーの追加
-
次の図に示すように、リージョン2のDRPGを選択します。
- OCIリージョン・コンテキストがリージョン2 (Abu Dhabi)であることを確認します。
- 「Region 2」で「DRPG」を選択します。
- 「メンバー」を選択します。
- 「メンバーの追加」をクリックしてプロセスを開始します。
-
この例では、リージョン2のDRPGのメンバーとしてOCIロード・バランサを追加します。
- DR計画に関する警告を確認します。
- 「ロード・バランサ」をメンバーの「リソース・タイプ」として選択します。
- ロード・バランサの正しいコンパートメントが選択されていることを確認し、追加するロード・バランサを選択します。
- リージョン1で使用する宛先ロード・バランサを選択します。
- 「ソース・バックエンド・セット」を選択します。これは、WebアプリケーションVMで使用されるバックエンド・セットです。OCIロード・バランサは、複数のアプリケーション間で共有でき、複数のバックエンド・セットを構成できます。DRスイッチオーバー中は、ここで指定したバックエンド・セットのみがその構成をスタンバイ・リージョンに移動します。
- 「宛先バックエンド・セット」を選択します。このバックエンド・セットはリージョン2で作成されます。
- 詳細を確認して、「追加」をクリックします。
画像psql-webapp-aux-drpg-add-lb.pngの説明
-
メンバー・セクションにロード・バランサが含まれていることを確認します。
タスク4: リージョン2での基本的なDR計画の作成
このタスクでは、リージョン2 (Abu Dhabi)のスタンバイDR保護グループに関連付けられた初期スイッチオーバーおよびフェイルオーバー計画を作成します。
これらの計画の目的は、ワークロードをプライマリ・リージョン(リージョン1)からスタンバイ・リージョン(リージョン2)にシームレスに移行することです。DR操作の一環として、両方のリージョンのDR保護グループのロールが自動的に元に戻されます。リージョン1の保護グループはスタンバイになり、リージョン2の保護グループはフェイルオーバーまたはスイッチオーバーの後にプライマリ・ロールを引き継ぎます。
OCI Full Stack DRは、前のタスクで追加されたメンバー・リソースから導出された組込みステップを使用して、これらのプランを事前移入します。これらの計画は、後で、リカバリ・プロセス中にOCI Database with PostgreSQLに固有のタスクを管理するようにカスタマイズされます。
スイッチオーバー計画は、常にスタンバイ・ロールを保持する保護グループ内に作成されます。リージョン2(アブダビ)は現在スタンバイ保護グループであるため、そこで計画の作成を開始します。
タスク4.1: DR計画の作成
-
地域2(アブダビ)でDRPGを選択して基本計画を作成します。
- OCIリージョン・コンテキストがリージョン2 (Abu Dhabi)であることを確認します。
- リージョン2でスタンバイDRPGを選択します。
- 「プラン」を選択します。
- 「プランの作成」をクリックしてプロセスを開始します。
-
スイッチオーバー計画を作成します。
- スイッチオーバー・プランの単純でわかりやすい名前を入力します。名前はできるだけ短くする必要がありますが、危機時の混乱や人的ミスを軽減するために一目で理解しやすい名前にする必要があります。
- 「プラン・タイプ」に「スイッチオーバー(計画済)」を選択します。
- 「作成」をクリックします。
-
フェイルオーバー計画を作成します。次の図に示すように、同じプロセスに従って基本的なフェイルオーバー計画を作成します。
- フェイルオーバー計画の「名前」を入力します。
- 「プラン・タイプ」に「フェイルオーバー(計画外)」を選択します。
- 「作成」をクリックします。
リージョン2のスタンバイDR保護グループには、次の図に示すように2つのDR計画が必要です。これらは、リージョン1からリージョン2へのワークロードの移行を処理します。同様の計画をリージョン1で作成し、後のタスクでワークロードをリージョン2からリージョン1に戻します。
図psql-webapp-auh-drpg-plans.pngの説明
タスク5: リージョン2でのスイッチオーバー・プランのカスタマイズ
タスク4で作成される基本的なDR計画には、OCI Full Stack DRに組み込まれたリカバリ・タスクの事前移入されたステップが含まれており、OCI Database with PostgreSQLに固有のリカバリ・タスクを管理するためのステップはありません。このタスクでは、カスタムのユーザー定義のDR計画グループを追加する方法と、スイッチオーバー中に実行する必要があるタスクを管理するステップについて説明します。
- データの一貫性を確保するためにWebアプリケーションVMを正常にシャットダウンした後、データベース・バックアップを作成します。
- 冗長性およびディザスタ・リカバリのために、最新のデータベース・バックアップをリモートOCIリージョン2に転送します。
- リージョン2の最新のデータベース・バックアップをリストアして、スイッチオーバーのための環境を準備します。
- プライベート・データベースDNSレコードを更新して、アプリケーションVMがリージョン2のデータベースにシームレスに接続できるようにします。
- リージョン1でPostgreSQLOCI Database with PostgreSQLデータベースを使用するソースOCI Databaseを終了します。
タスク5.1: スイッチオーバー計画の選択
タスク4で作成したスイッチオーバー計画にナビゲートします。タスク5.3では、新しいグループを追加します。
画像psql-webapp-auh-drpg-create-switchover-add.pngの説明
タスク5.2: (オプション)アーティファクトを終了するDR計画グループの有効化
次の図に示すように、スイッチオーバー計画ではデフォルトで無効になっているプラン・グループが3つあります。これらの計画グループは、テスト中に安心感を与えるために使用不可になり、アーティファクトが削除されず、テスト・フェーズで問題が発生しても実行可能なバックアップ・コピーがそのまま維持されます。
ただし、これらの3つのプラン・グループは、将来のDR操作には不要になるアーティファクトを終了(削除)するように設計されています。これらのプラン・グループを有効にしないと、2つのリージョン間でスイッチオーバーを実行すると、未使用のアーティファクトが時間の経過とともに累積され、どのコンピュート・インスタンスとボリューム・グループをアクティブにするかが混乱する可能性があります。
オプションで、これらのプラン・グループを有効にすると、本番環境に移行する前に不要なアーティファクトを手動でクリーン・アップする必要がなくなります。このプロアクティブなステップにより、本番への移行を合理化し、よりクリーンで管理しやすい環境を維持できます。
図psql-webapp-auh-drpg-create-switchover-details-1.pngの説明
-
プラン・グループを有効にするには、プラン・グループ名の右側にあるコンテキスト・メニューから「すべてのステップの有効化」を選択します。
画像psql-webapp-auh-drpg-create-switchover-enable.pngの説明
画像psql-webapp-auh-drpg-create-switchover-enable-check.pngの説明
-
すべてのプラン・グループが有効になっていることを確認します。
画像psql-webapp-auh-drpg-create-switchover-enable-complete.pngの説明
タスク5.3: カスタム・スクリプトを実行するプラン・グループの作成
まず、カスタムのユーザー定義のDR計画グループを追加して、OCI Database with PostgreSQLバックアップ/リストアDRプロセスの特定のニーズに合わせてDRワークフローを調整します。
これらのプラン・グループは、リージョン1のWebアプリケーションVMから必要なスクリプトを起動します。これにより、OCI Database with PostgreSQLが完全にリストアされ、アプリケーションVMがオンラインになる前に動作することが保証されます。
事前移入されたスイッチオーバー計画には、PostgreSQL - スイッチオーバー、PostgreSQL - DNSの更新およびPostgreSQL - 終了のカスタム計画を追加する必要があります。
-
PostgreSQLOCI Database with PostgreSQLを使用してOCI Databaseのスイッチオーバーを実行するカスタム・プラン・グループを追加します。この操作には、プライマリ・リージョンのデータベースをバックアップし、データベース構成をスタンバイ・リージョンにコピーし、データベース・バックアップをスタンバイ・リージョンにコピーし、最後にスタンバイ・リージョンのデータベースをリストアする必要があります。
- 「グループの追加」をクリックします。
- 単純でわかりやすいプラン・グループの名前を入力します。この例では、
PostgreSQL - Switchover
を使用します。 - 計画グループがDR計画に挿入される位置を選択します。この例では、「次より後に追加」を選択して、組込みプラン・グループの「コンピュート・インスタンス- 起動」の後にユーザー定義プラン・グループを挿入します。
- 「ステップの追加」をクリックして、PostgreSQLスイッチオーバーを実行するスクリプトを指定するダイアログを開きます。
画像psql-webapp-auh-drpg-create-switchover-add-psql-so.pngの説明
「プラン・グループの追加」ステップで、次の情報を入力します。
- 「ステップ名」を入力します。この例では、
PostgreSQL - Switchover
を使用します。プラン・グループ名と同じです。 - このステップが実行されるインスタンスを含むリージョンを選択します。この例では、スクリプトはリージョン1のWebアプリケーションVMで実行されます。
- 「ローカル・スクリプトの実行」を選択します。
- リージョン1のWebアプリケーションVMである「ターゲット・インスタンス」を選択します。
- 「スクリプト・パラメータ」に、パラメータを含むスクリプトのフルパスを入力します。たとえば:
/home/opc/full-stack-dr-scripts-main/oci-postgresql/backup-restore/psql_exec_cold_dr.py -c amo-psql-dbs.json -o switchover
。 - 「ユーザーとして実行」に、
opc
と入力します。 - 「ステップの追加」をクリックします。
画像psql-webapp-auh-drpg-create-switchover-add-psql-so-details.pngの説明
「追加」をクリックします。
画像psql-webapp-auh-drpg-create-switchover-add-psql-details.pngの説明
-
カスタム・プラン・グループを追加して、PostgreSQLデータベースDNSを更新します。
- 「グループの追加」をクリックします。
- プラン・グループの「名前」を入力します。この例では、
PostgreSQL - Update DNS
を使用します。 - 計画グループがDR計画に挿入される位置を選択します。この例では、「次より後に追加」を選択して、組込みプラン・グループPostgreSQL - スイッチオーバーの後にユーザー定義プラン・グループを挿入します。
- 「ステップの追加」をクリックして、PostgreSQLデータベースDNSを更新するスクリプトを指定するダイアログを開きます。
画像psql-webapp-auh-drpg-create-switchover-add-psql-dns.pngの説明
「プラン・グループの追加」ステップで、次の情報を入力します。
- 「ステップ名」を入力します。この例では、
PostgreSQL - Update DNS
を使用します。プラン・グループ名と同じです。 - このステップが実行されるインスタンスを含むリージョンを選択します。この例では、スクリプトはリージョン1のWebアプリケーションVMで実行されます。
- 「ローカル・スクリプトの実行」を選択します。
- リージョン1のWebアプリケーションVMであるターゲット・インスタンスを選択します。
- 「スクリプト・パラメータ」に、パラメータを含むスクリプトのフルパスを入力します。たとえば:
/home/opc/full-stack-dr-scripts-main/oci-postgresql/backup-restore/psql_update_dns.py -c amo-psql-dbs.json -d amo-psql-dbs.amo.vcn01.internal -o switchover
。 - 「ユーザーとして実行」に、
opc
と入力します。 - 「ステップの追加」をクリックします。
画像psql-webapp-auh-drpg-create-switchover-add-psql-dns-details.pngの説明
「追加」をクリックします。
画像psql-webapp-auh-drpg-create-switchover-add-dns-details.pngの説明
-
カスタム・プラン・グループを追加して、PostgreSQLソース・データベースを終了します。
- 「グループの追加」をクリックします。
- プラン・グループの「名前」を入力します。この例では、
PostgreSQL - Terminate
を使用します。 - 計画グループがDR計画に挿入される位置を選択します。この例では、「次より後に追加」を選択して、組込みプラン・グループ「ボリューム・グループ- DR保護グループから削除」の後にユーザー定義プラン・グループを挿入します。
- 「ステップの追加」をクリックして、PostgreSQLデータベース・ソースを終了するスクリプトを指定するダイアログを開きます。
画像psql-webapp-auh-drpg-create-switchover-add-psql-terminate.pngの説明
「プラン・グループの追加」ステップで、次の情報を入力します。
- 「ステップ名」を入力します。この例では、
PostgreSQL - Terminate
を使用します。プラン・グループ名と同じです。 - このステップが実行されるインスタンスを含むリージョンを選択します。この例では、スクリプトはリージョン1のWebアプリケーションVMで実行されます。
- 「ローカル・スクリプトの実行」を選択します。
- リージョン1のWebアプリケーションVMであるターゲット・インスタンスを選択します。
- 「スクリプト・パラメータ」に、パラメータを含むスクリプトのフルパスを入力します。たとえば:
/home/opc/full-stack-dr-scripts-main/oci-postgresql/backup-restore/psql_exec_cold_dr.py -c amo-psql-dbs.json -o terminate
。 - 「ユーザーとして実行」に、
opc
と入力します。 - 「ステップの追加」をクリックします。
画像psql-webapp-auh-drpg-create-switchover-add-psql-terminate-details.pngの説明
「追加」をクリックします。
画像psql-webapp-auh-drpg-create-switchover-add-terminate-details.pngの説明
-
作成したカスタム・プラン・グループに「有効」ステータスが表示されていることを確認します。
スイッチオーバー・プランのカスタマイズが正常に完了しました。
タスク6: リージョン2でのフェイルオーバー計画のカスタマイズ
このタスクでは、フェイルオーバー中に実行する必要があるタスクを管理するための、ユーザー定義のカスタムDR計画グループおよびステップを追加します。
-
リージョン2の最新のデータベース・バックアップをリストアして、スイッチオーバーのための環境を準備します。
-
プライベート・データベースDNSレコードを更新して、アプリケーションVMがリージョン2のデータベースにシームレスに接続できるようにします。
タスク6.1: フェイルオーバー計画の選択
タスク4で作成したフェイルオーバー計画にナビゲートします。
図psql-webapp-auh-drpg-create-failover-details-1.pngの説明
タスク6.2: リージョン2でカスタム・スクリプトを実行するプラン・グループの作成
まず、カスタムのユーザー定義DR計画グループを追加して、PostgreSQLOCI Database with PostgreSQLバックアップ/リストアDRプロセスのOCI Databaseの特定のニーズに合わせてDRワークフローを調整します。
これらのプラン・グループは、WebアプリケーションVMから必要なスクリプトを起動します。
事前移入されたフェイルオーバー計画には、PostgreSQL - フェイルオーバーおよびPostgreSQL - DNSの更新というカスタム計画を追加する必要があります。
-
カスタム・プラン・グループを追加して、PostgreSQLフェイルオーバー・スクリプトを実行します。
- 「グループの追加」をクリックします。
- プラン・グループの「名前」を入力します。この例では、
PostgreSQL - Failover
を使用します。 - 計画グループがDR計画に挿入される位置を選択します。この例では、「次より後に追加」を選択して、組込みプラン・グループの「コンピュート・インスタンス- 起動」の後にユーザー定義プラン・グループを挿入します。
- 「ステップの追加」をクリックして、PostgreSQLデータベースをフェイルオーバーするスクリプトを指定するダイアログを開きます。
画像psql-webapp-auh-drpg-create-failover-add-psql.pngの説明
「プラン・グループの追加」ステップで、次の情報を入力します。
- ステップ名を入力します。この例では、
PostgreSQL - Failover
を使用します。プラン・グループ名と同じです。 - このステップが実行されるインスタンスを含むリージョンを選択します。この例では、スクリプトはリージョン1のWebアプリケーションVMで実行されます。
- 「ローカル・スクリプトの実行」を選択します。
- リージョン1のWebアプリケーションVMであるターゲット・インスタンスを選択します。
- 「スクリプト・パラメータ」に、パラメータを含むスクリプトのフルパスを入力します。たとえば:
/home/opc/full-stack-dr-scripts-main/oci-postgresql/backup-restore/psql_exec_cold_dr.py -c amo-psql-dbs.json -o failover
。 - 「ユーザーとして実行」に、
opc
と入力します。 - 「ステップの追加」をクリックします。
画像psql-webapp-auh-drpg-create-failover-add-psql-fo-details.pngの説明
「追加」をクリックします
画像psql-webapp-auh-drpg-create-failover-add-psql-details.pngの説明
-
カスタム・プラン・グループを追加して、PostgreSQLデータベースDNSを更新します。
- 「グループの追加」をクリックします。
- プラン・グループの「名前」を入力します。この例では、
PostgreSQL - Update DNS
を使用します。 - 計画グループがDR計画に挿入される位置を選択します。この例では、「次以降に追加」を選択して、組込みプラン・グループPostgreSQL - フェイルオーバーの後にユーザー定義プラン・グループを挿入します。
- 「ステップの追加」をクリックして、PostgreSQLデータベースDNSを更新するスクリプトを指定するダイアログを開きます。
画像psql-webapp-auh-drpg-create-failover-add-dns.pngの説明
「プラン・グループの追加」ステップで、次の情報を入力します。
- ステップ名を入力します。この例では、
PostgreSQL - Update DNS
を使用します。プラン・グループ名と同じです。 - このステップが実行されるインスタンスを含むリージョンを選択します。この例では、スクリプトはリージョン1のWebアプリケーションVMで実行されます。
- 「ローカル・スクリプトの実行」を選択します。
- リージョン1のWebアプリケーションVMであるターゲット・インスタンスを選択します。
- 「スクリプト・パラメータ」に、パラメータを含むスクリプトのフルパスを入力します。たとえば:
/home/opc/full-stack-dr-scripts-main/oci-postgresql/backup-restore/psql_update_dns.py -c amo-psql-dbs.json -d xxx-psql-dbs.xxx.vcn01.internal -o failover
。 - 「ユーザーとして実行」に、
opc
と入力します。 - 「ステップの追加」をクリックします。
画像psql-webapp-auh-drpg-create-failover-add-dns-fo-details.pngの説明
「追加」をクリックします。
画像psql-webapp-auh-drpg-create-failover-add-dns-details.pngの説明
-
作成したカスタム・プラン・グループに「有効」ステータスが表示されていることを確認します。
フェイルオーバー計画のカスタマイズが正常に完了しました。
タスク7: リージョン2での事前チェックの実行
スイッチオーバーおよびフェイルオーバーの両方のDR計画がスタンバイ・リージョン2に正常に作成されました。これらの計画により、OCI Full Stack DRは、リージョン1からリージョン2にワークロードを移行できます。後続のタスクでは、スイッチオーバー計画とフェイルオーバー計画の両方の事前チェックを実行して、準備状況を確認し、移行プロセスを検証します。
タスク7.1: スイッチオーバー計画の事前チェックの開始
スイッチオーバーDR計画の事前チェックを実行します。
-
リージョン・コンテキストがスタンバイ・リージョン2に設定されていることを確認します。
-
リージョン2で正しいDR保護グループが選択されていることを確認してください。これはスタンバイ・ロールである必要があります。
-
スイッチオーバー・プラン名をクリックします。
-
「処理」をクリックします。
-
「事前確認の実行」をクリックします。
-
「事前確認の実行」をクリックします。
画像psql-webapp-auh-drpg-create-switchover-precheck-run.pngの説明
-
すべての事前チェックが正常に完了したかどうかを確認します。
画像psql-webapp-auh-drpg-create-switchover-precheck-details-2.pngの説明
タスク7.2: フェイルオーバー計画の事前チェックの開始
フェイルオーバーDR計画の事前チェックを実行します。
-
リージョン・コンテキストがスタンバイ・リージョン2に設定されていることを確認します。
-
リージョン2で正しいDR保護グループが選択されていることを確認してください。これはスタンバイ・ロールである必要があります。
-
フェイルオーバー計画名をクリックします。
-
「処理」をクリックします。
-
「事前確認の実行」をクリックします。
-
「事前確認の実行」をクリックします。
-
すべての事前チェックが正常に完了したかどうかを確認します。
画像psql-webapp-auh-drpg-create-failover-precheck-details-2.pngの説明
タスク8: リージョン2でのスイッチオーバー計画の実行
スイッチオーバーDR計画を実行して、リージョン1からリージョン2へのPostgreSQLOCI Database with PostgreSQLを使用したOCI DatabaseでWebアプリケーションを移行するプロセスを開始します。
-
リージョン・コンテキストがスタンバイ・リージョン2に設定されていることを確認します。
-
リージョン2で正しいDR保護グループが選択されていることを確認してください。これはスタンバイ・ロールである必要があります。
-
スイッチオーバー・プラン名をクリックします。
-
「アクション」をクリックします。
-
「計画の実行」をクリックします。
このタスクでは、リージョン2でスイッチオーバー計画が実行されます。
- 「事前チェックの有効化」の選択を解除します。これは、タスク7ですでに実行されているためです。
- 「計画の実行」をクリックします。
画像psql-webapp-auh-drpg-create-switchover-execute-run.pngの説明
完全なワークロードがリージョン1からリージョン2に完全に移行されるまで、スイッチオーバー計画を監視すること。
スイッチオーバー計画の実行は約39分で正常に完了しました。
画像psql-webapp-auh-drpg-create-switchover-execute-details-1.pngの説明
図psql-webapp-auh-drpg-create-switchover-execute-details-2.pngの説明
スイッチオーバー後: Webアプリケーションは、以前と同じURLを使用して、リージョン2で再度アクセスできるようになります。
画像webapp-frontend-preview.pngの説明
タスク9: リージョン1でのDR計画の作成およびカスタマイズ
OCI Full Stack DRによるスイッチオーバーが正常に完了したことで、リージョン2はプライマリ・リージョンのロールを引き受け、リージョン1はスタンバイ・リージョンとして機能するように移行しました。
タスク1から8で説明した同じアプローチに従って、リージョン1のDR保護グループ内でスイッチオーバーおよびフェイルオーバー計画を作成およびカスタマイズし、スタンバイ・ピア・リージョンとして機能するようになりました。
画像psql-webapp-dxb-drpg-plan-create.pngの説明
ノート:
PostgreSQL - Terminate
は、次のスクリーンショットには表示されません。
画像psql-webapp-dxb-drpg-create-switchover-details-1.pngの説明
画像psql-webapp-dxb-drpg-create-failover-details-1.pngの説明
タスク10: リージョン1でのフェイルオーバー計画の実行
フェイルオーバー計画の実行は、DR戦略の有効性を検証するために障害シナリオをシミュレートするテストを目的としています。このシミュレーションでは、リージョン2の仮想マシン(VM)を意図的に停止することによって、障害が模倣されます。
このシミュレートされた障害からリカバリするには、フェイルオーバーDR計画を実行します。フェイルオーバー・プロセスは、WebアプリケーションVMが起動され、PostgreSQLOCI Database with PostgreSQLを使用したOCI Databaseの最新の使用可能なバックアップがリージョン1にリストアされます。
ノート:フェイルオーバーDR計画は、致命的な計画外イベント中のみ使用してください。データ損失は、フェイルオーバー・プロセス中に発生する可能性があります。
- リージョン・コンテキストがスタンバイ・リージョン1に設定されていることを確認します。
- リージョン1の正しいDR保護グループが選択されていること、それがスタンバイ・ロールであることを確認してください。
- フェイルオーバー計画名をクリックします。
- 「処理」をクリックします。
- 「計画の実行」をクリックします。
画像psql-webapp-dxb-drpg-failover-execute.pngの説明
このタスクは、リージョン1でフェイルオーバー計画を実行します。
- 実際のフェイルオーバー作業であるため、「事前チェックの有効化」の選択を解除したままにします。
- 「計画の実行」をクリックして開始します。
画像psql-webapp-dxb-drpg-failover-execute-run.pngの説明
完全なワークロードがリージョン2からリージョン1に完全に移行されるまで、フェイルオーバー計画を監視すること。
フェイルオーバー計画の実行は約10分で正常に完了しました。
画像psql-webapp-dxb-drpg-create-failover-execute-details-1.pngの説明
画像psql-webapp-dxb-drpg-create-failover-execute-details-2.pngの説明
関連リンク
-
#full-stack-drスラックチャネルに参加する
確認
-
著者 - Antoun Moubarak (Architect、 Office of CTO)、Piotr Kurzynoga (オープン・ソース・データ・ブラック・ベルト)
-
コントリビュータ - Suraj Ramesh (OCI Full Stack DRの製品マネージャー)
その他の学習リソース
docs.oracle.com/learnで他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Automate Cold Disaster Recovery for OCI Database with PostgreSQL using OCI Full Stack Disaster Recovery
G38683-02
Copyright ©2025, Oracle and/or its affiliates.