ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を終える際は、これらの値をクラウド環境に固有の値に置き換えてください。
Oracle Cloud Infrastructure Full Stack Disaster Recoveryを使用したPostgreSQLデータベースのスイッチオーバーおよびフェイルオーバーの自動化
イントロダクション
Oracle Cloud Infrastructure Full Stack Disaster Recovery(OCI Full Stack DR)は、世界中のOracle Cloud Infrastructure(OCI)リージョン間のコンピュート、データベース、アプリケーションの移行をワンクリックで調整します。お客様は、既存のインフラストラクチャ、データベース、またはアプリケーションを再設計または再設計することなく、特別な管理サーバーや変換サーバーを必要とせずに、1つ以上のビジネス・システムをリカバリするために必要なステップを自動化できます。
OCI Full Stack DRは柔軟性の高いサービスであり、ディザスタ・リカバリ(DR)計画のユーザー定義プラン・グループを利用して、OCI Object StorageバケットのDR操作を処理できます。
デプロイメント・アーキテクチャ

ノート:プライマリ・リージョンはフランクフルトで、DRリージョンはロンドンです。
目的
- OCI Full Stack DRを使用して、PostgreSQLデータベースのスイッチオーバーとフェイルオーバーを自動化します。
前提条件
-
管理者権限、またはOCI Full Stack DRに必要なOracle Cloud Infrastructure Identity and Access Management (OCI IAM)ポリシーを構成します。詳細は、OCIフル・スタックDRを使用するIdentity and Access Management (IAM)ポリシーの構成およびOCIフル・スタックDRのポリシーを参照してください。
-
OCI Full Stack DRが
sudoコマンドを実行してスイッチオーバー中にコマンドをマウントおよびアンマウントするため、プライマリとスタンバイの両方でコンピュート・インスタンス実行コマンド・プラグインを有効にする必要があります。OCIコンピュート・インスタンスでのコマンドの実行の詳細は、OCIコンピュート・インスタンスでのコマンドの実行を参照してください。 -
OCI Full Stack DRでrunコマンドを使用します。詳細は、Oracle Cloud Infrastructure Full Stack Disaster Recoveryでの実行コマンドを使用したカスタム・スクリプトの起動を参照してください。
-
同じテナンシにある2つのDynamic Routing Gateways (DRG)間にリモート・ピアリング接続(RPC)を確立します。詳細は、アップグレードされたDRGを介したリモートVCNピアリングを参照してください。
-
両方のマシンが、データベース・レプリケーション用にPostgreSQLポート
5432で通信できることを確認し、それぞれのセキュリティ・リストまたはネットワーク・セキュリティ・グループを構成します。 -
PostegreSQLサーバーに接続するには、サービスとして要塞または要塞ホストを使用します。
-
OCIオブジェクト・ストレージ・バケット(各リージョンに1つ)。
タスク1: PostgreSQLのインストールおよび構成
-
PostgreSQLをインストールするには、お気に入りのSSHクライアントを使用してホストに接続し、次のコマンドを実行します。
sudo dnf install -y postgresql postgresql-server postgresql-contrib sudo /usr/bin/postgresql-setup initdb sudo systemctl enable postgresql sudo systemctl start postgresql -
Linuxファイアウォールが接続を受信できるようにします。
sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent sudo firewall-cmd --reload -
postgresql.conf(xxxxxで検出)ファイルを編集して接続を許可し、walパラメータを次のように変更します。... listen_addresses = '*' ... wal_level = logical wal_log_hints = on ... -
データベースに接続し、レプリケーション・ユーザーを作成します。
sudo su postgres psqlCREATE ROLE replica_user WITH REPLICATION LOGIN PASSWORD 'YourUserPassword'; -
このユーザーを
pg_hba.conf(xxxで検出)ファイルに追加します。host all all all md5 host replication replica_user <IP Host 1> md5 host replication replica_user <IP Host 2> md5 -
PostgreSQLデータベースを再起動して変更を適用します。
sudo systemctl restart postgresql -
2番目のサーバーでこの手順を繰り返します。
タスク2: PostgreSQLデータベースのレプリケート
このタスクでは、ネイティブのPostgreSQLデータベース・レプリケーションを構成します。
-
プライマリ・データベースに接続し、レプリカ・スロットを作成します。
sudo su postgres psqlselect pg_create_physical_replication_slot('replica_0'); -
セカンダリ・データベースに接続し、次のコマンドを実行してレプリケーションを作成します。
sudo systemctl stop postgresql sudo rm -rv /var/lib/pgsql/data/ sudo pg_basebackup -d "host=<IP Host 1> port=5432 user=replica_user password=YourUserPassword" -w -X stream -S replica_0 -v -R -W -D /var/lib/pgsql/data/ --no-password sudo chown postgres -R /var/lib/pgsql/data/ sudo systemctl start postgresql -
プライマリ・データベースでレプリケーションがフローしていることを確認します。
select * from pg_stat_replication;ストリーミング・プロセスで1行表示できるはずです。
タスク3: スイッチオーバー計画の作成
タスク3.1: ディザスタ・リカバリ保護グループ(DRPG)の作成および関連付け
-
プライマリ・リージョン(フランクフルト)で、「ハンバーガー」メニューをクリックし、「移行とディザスタ・リカバリ」、「ディザスタ・リカバリ」、「ディザスタ・リカバリ保護グループ」および「ディザスタ・リカバリ保護グループの作成」にナビゲートします。

-
スタンバイ・リージョン(ロンドン)で、「ハンバーガー」メニューをクリックし、「移行とディザスタ・リカバリ」、「ディザスタ・リカバリ」、「ディザスタ・リカバリ保護グループ」および「ディザスタ・リカバリ保護グループの作成」に移動します。

-
プライマリ・リージョン(フランクフルト)で、次の情報を入力し、「関連付け」をクリックします。
- ロール:
Primary。 - ピア・リージョン:
UK South (London)。 - ピアDR保護グループ:
postgresql-lon。

- ロール:
タスク3.2: プライマリおよびスタンバイDRPGへのメンバーの追加
-
プライマリDRPG (
postgresql-fra)で、「メンバー」を選択し、コンピュートVM (postgresql01)をメンバーとして追加します。
ノート:コンピュートをメンバーとして追加するときに、PostgreSQLデータベースのアクティブ/パッシブ設定があるため、コンピュート・インスタンス・タイプで「非移動インスタンス」を選択します。
-
スタンバイDRPG (
postgresql-lon)で、「メンバー」を選択し、コンピュートVM (postgresql02)をメンバーとして追加します。
ノート:コンピュートをメンバーとして追加するときに、PostgreSQLデータベースのアクティブ/パッシブ設定があるため、コンピュート・インスタンス・タイプで「非移動インスタンス」を選択します。
タスク3.3: スタンバイDRPG (ロンドン)でのスイッチオーバー計画の作成
スイッチオーバー計画:プライマリDRPGからスタンバイDRPGへのサービスの計画移行を実行するDR計画のタイプ。
-
スタンバイDRPG
postgresql-lonにスイッチオーバー計画を作成します。 -
「プラン」を選択し、「プランの作成」をクリックします。
-
「名前」に
postgresql-switchover-frankfurt-londonと入力し、「プラン・タイプ」にSwitchover (planned)を選択します。 -
「作成」をクリックします。

ノート:必ず、スタンバイDRPG (ロンドン)からスイッチオーバー計画を作成してください。
タスク3.4: 様々なユーザー定義プラン・グループによるスイッチオーバー・プランのカスタマイズ
コンピュート(移動していないインスタンス)を両方のDR保護グループのメンバーとして追加しました。追加のユーザー定義プラン・グループでスイッチオーバー・プランをカスタマイズする必要があります。また、次のbashスクリプトを作成してOCI Object Storageにアップロードする必要があり、スイッチオーバー時にこれらのスクリプトを起動できます。
-
stop_postgresql.sh.#!/bin/bash sudo systemctl stop postgresql -
promote_postgresql.sh.#!/bin/bash sudo -u postgres /usr/bin/pg_ctl promote -D /var/lib/pgsql/data/ sudo -u postgres psql -c "select pg_create_physical_replication_slot('replica_1');" -
change_replication_direction.sh.#!/bin/bash sudo rm -rv /var/lib/pgsql/data/ sudo sudo pg_basebackup -d "host=<IP Host 2> port=5432 user=replica_user password=YourUserPassword" -w -X stream -S replica_1 -v -R -W -D /var/lib/pgsql/data/ --no-password sudo chown postgres -R /var/lib/pgsql/data/ sudo systemctl start postgresql sudo -u postgres psql -c "select pg_create_physical_replication_slot('replica_0');"
ノート:これらのスクリプトは、ロンドン・リージョンのバケットにアップロードする必要があります。

DRスイッチオーバーの一般的なワークフローは次のとおりです。
-
フランクフルト・リージョンでPostgreSQLデータベースを停止:計画グループには、フランクフルト・リージョンでPostgreSQLデータベースを停止するステップがあります。
-
ロンドン・リージョンでPostgreSQLデータベースをプロモート:計画グループには、ロンドン・リージョンでPostgreSQLデータベースをプロモートするステップがあります。
-
PostgreSQLデータベース・レプリケーション方向の変更:計画グループには、PostgreSQLデータベース・レプリケーション方向(LON-FRA)を変更するステップがあります。
ノート:ステップが同じ順序で実行されていることを確認してください。
次のユーザー定義プラン・グループを作成します。
-
フランクフルト・リージョンでPostgreSQLデータベースを停止プラン・グループを作成します。
-
「プラン・グループ」で、「グループの追加」をクリックして、フランクフルト・リージョンでPostgreSQLデータベースを停止するカスタム・プラン・グループを作成します。「グループ名」に
Stop PostgreSQL Database at Frankfurt Regionと入力します。
-
「ステップの追加」をクリックして、次の情報を入力します。計画グループに1つのステップを追加します。
-
必ず「リージョン」を
Frankfurtとして、「ターゲット・インスタンス」をpostgresql01として選択してください。オブジェクト・ストレージ・スクリプトの実行を選択し、スクリプトの場所でOCIオブジェクト・ストレージ・バケットposgres-dr-lonを選択します。 -
スクリプト
stop_postgresql.shの詳細とスクリプトの場所を入力します。このスクリプトは、FRAリージョンのPostgreSQLデータベースを停止します。 -
「ステップの追加」をクリックして、追加したステップを確認します。

-
-
-
「Promote PostgreSQL Database at London region」プラン・グループを作成します。
-
「プラン・グループ」で、「グループの追加」をクリックして、ロンドンでPostgreSQLデータベースをプロモートするカスタム・プラン・グループを作成します。「グループ名」に
Promote PostgreSQL Database at London Regionと入力します。
-
「ステップの追加」をクリックして次の詳細を入力します。計画グループに1つのステップを追加します。
-
必ず「リージョン」を
Londonとして、ターゲット・インスタンスをpostgresql02として選択してください。オブジェクト・ストレージ・スクリプトの実行を選択し、スクリプトの場所でOCIオブジェクト・ストレージ・バケットposgres-dr-lonを選択します。 -
スクリプト
promote_postgresql.shの詳細とスクリプトの場所を入力します。このスクリプトは、FRAリージョンのPostgreSQLデータベースを停止します。 -
「ステップの追加」をクリックして、追加したステップを確認します。

-
-
-
「PostgreSQLデータベース・レプリケーション方向の変更」計画グループを作成します。
-
「プラン・グループ」で、「グループの追加」をクリックして、PostgreSQLデータベース・レプリケーション方向を変更するカスタム・プラン・グループを作成します。「グループ名」に
Promote PostgreSQL Database at London Regionと入力します。
-
「ステップの追加」をクリックして、次の情報を入力します。計画グループに1つのステップを追加します。
-
必ず「リージョン」を
Frankfurtとして、「ターゲット・インスタンス」をpostgresql01として選択してください。オブジェクト・ストレージ・スクリプトの実行を選択し、スクリプトの場所でOCIオブジェクト・ストレージ・バケットposgres-dr-lonを選択します。 -
スクリプト
change_replication_direction.shの詳細とスクリプトの場所を入力します。このスクリプトは、FRAリージョンのPostgreSQLデータベースを停止します。 -
「ステップの追加」をクリックして、追加したステップを確認します。

-
-

タスク4: 事前チェックの実行およびスイッチオーバー計画の実行
「事前チェックの実行」オプションは、DR計画のすべてのステップと、そのステップに関連付けられたメンバーのクイック検証を実行します。
-
スイッチオーバー計画
postgresql-switchover-frankfurt-londonで、「事前チェックの実行」をクリックして事前チェックを実行します。
正常に完了したことを確認します。

-
スイッチオーバー計画
postgresql-switchover-frankfurt-londonから、「ディザスタ・リカバリ計画の実行」をクリックして計画を実行します。
-
プランのステータスを確認し、プラン内のすべてのステップが成功していることを確認します。

-
スイッチオーバー計画は、すべての計画グループを特定の順序で実行します。計画の実行に成功すると、PostgreSQLデータベースがロンドン・リージョンのマスターに昇格されます。
-
DRPGで自動的にロールが変更されます。現在、ロンドンがプライマリとなり、フランクフルトがスタンバイ・ロールを持つことになります。
-
ロンドンでPostgreSQLデータベースを確認します。
タスク5: スイッチバックするスタンバイDRPG (フランクフルト)でのスイッチオーバー計画の作成
タスク5.1: スタンバイDRPGでのスイッチオーバー計画の作成(ロンドン)
-
スタンバイDRPG
postgresql-franにスイッチオーバー計画を作成します。 -
「プラン」を選択し、「プランの作成」をクリックします。
-
「名前」に
postgresql-switchover-london-frankfurtと入力し、「プラン・タイプ」にSwitchover (planned)を選択します。 -
「作成」をクリックします。

ノート:必ず、スタンバイDRPG (フランクフルト)からスイッチオーバー計画を作成してください。
タスク5.2: 様々なユーザー定義プラン・グループによるスイッチオーバー・プランのカスタマイズ
追加のユーザー定義プラン・グループでスイッチオーバー・プランをカスタマイズする必要があります。また、次のbashスクリプトを作成してOCI Object Storageにアップロードする必要があり、スイッチオーバー中にこれらのスクリプトを起動できます。
-
rewind_postgresql.sh.#!/bin/bash sudo systemctl stop postgresql sudo rm -rv /var/lib/pgsql/data/ sudo -u postgres pg_basebackup -d "host=<IP Host 2> port=5432 user=replica_user password=YourUserPassword" -v -R -D /var/lib/pgsql/data/ --no-password sudo chown postgres -R /var/lib/pgsql/data/ sudo systemctl start postgresql sudo -u postgres /usr/bin/pg_ctl promote -D /var/lib/pgsql/data/ sudo -u postgres psql -c "select pg_create_physical_replication_slot('replica_0');" -
replicate_postgresql.sh.#!/bin/bash sudo systemctl stop postgresql sudo rm -rv /var/lib/pgsql/data/ sudo pg_basebackup -d "host=<IP Host 2> port=5432 user=replica_user password=YourUserPassword" -w -X stream -S replica_0 -v -R -W -D /var/lib/pgsql/data/ --no-password sudo chown postgres -R /var/lib/pgsql/data/ sudo systemctl start postgresql
ノート:これらのスクリプトは、フランクフルト・リージョンのバケットにアップロードする必要があります。
DRスイッチオーバーの一般的なワークフローは次のとおりです。
-
PostgreSQLデータベースを巻き戻す:データベースを巻き戻すための計画グループ。フランクフルトはロンドンのデータベースからコンテンツを同期する。
-
ロンドンへのPostgreSQLデータベース・レプリケーションの再確立:計画グループには、フランクフルトからロンドン・リージョンへのPostgreSQLデータベースのレプリケートを開始するステップがあります。
ノート:ステップが同じ順序で実行されていることを確認してください。
次の2つのユーザー定義プラン・グループの作成
-
「PostgreSQLデータベースの巻き戻し」プラン・グループを作成します。
-
「プラン・グループ」で、「グループの追加」をクリックして、フランクフルト・リージョンでPostgreSQLデータベースを巻き戻すカスタム・プラン・グループを作成します。「グループ名」に
Rewind PostgreSQL Databases at Frankfurt Regionと入力します。
-
「ステップの追加」をクリックして、次の情報を入力します。計画グループに1つのステップを追加します。
-
必ず「リージョン」を
Frankfurtとして、「ターゲット・インスタンス」をpostgresql01として選択してください。オブジェクト・ストレージ・スクリプトの実行を選択し、スクリプトの場所でOCIオブジェクト・ストレージ・バケットposgres-dr-lonを選択します。 -
スクリプト
rewind_postgresql.shの詳細とスクリプトの場所を入力します。このスクリプトは、FRAリージョンのPostgreSQLデータベースを停止します。 -
「ステップの追加」をクリックして、追加したステップを確認します。

-
-
-
「ロンドンへのPostgreSQLデータベース・レプリケーションの再確立」プラン・グループを作成します。
-
「プラン・グループ」で、「グループの追加」をクリックして、ロンドンへのPostgreSQLデータベース・レプリケーションを再確立するカスタム・プラン・グループを作成します。「グループ名」に
Promote PostgreSQL Database at London Regionと入力します。
-
「ステップの追加」をクリックして、次の情報を入力します。計画グループに1つのステップを追加します。
-
必ず「リージョン」を
Londonとして、「ターゲット・インスタンス」をpostgresql02として選択してください。オブジェクト・ストレージ・スクリプトの実行を選択し、スクリプトの場所でOCIオブジェクト・ストレージ・バケットposgres-dr-lonを選択します。 -
スクリプト
replicate_postgresql.shの詳細とスクリプトの場所を入力します。このスクリプトは、FRAリージョンのPostgreSQLデータベースを停止します。 -
「ステップの追加」をクリックして、追加したステップを確認します。

-
-
タスク6: 事前チェックの実行およびスイッチオーバー計画の実行
「事前チェックの実行」は、DR計画のすべてのステップと、そのステップに関連付けられたメンバーのクイック検証を実行します。
-
スイッチオーバー計画
postgresql-switchover-london-frankfurtで、「事前チェックの実行」をクリックして事前チェックを実行します。
正常に完了したことを確認します。

-
スイッチオーバー計画
postgresql-switchover-london-frankfurtから、「ディザスタ・リカバリ計画の実行」をクリックして計画を実行します。
-
プランのステータスを確認し、プラン内のすべてのステップが成功していることを確認します。

-
スイッチオーバー計画は、すべての計画グループを特定の順序で実行します。計画の実行に成功すると、PostgreSQLデータベースがフランクフルト・リージョンのマスターに昇格されます。
-
DRPGで自動的にロールが変更されます。現在、フランクフルトがプライマリになり、ロンドンがスタンバイ・ロールになります。
-
フランクフルトでPostgreSQLデータベースを確認します。
次のステップ
OCI Full Stack DRを使用して、PostgreSQLデータベース・スイッチオーバーを自動的に実行し、ディザスタ・リカバリ操作をスイッチバックする方法を確認しました。詳細は、「関連リンク」セクションのOCI Full Stack DRドキュメントを参照してください。
関連リンク
承認
-
著者 - Raphael Teixeira (FSDR技術スタッフ主任メンバー)
-
コントリビュータ - Ricardo Malhado (Hyperscaler to OCI Specialist)、Suraj Ramesh (MAAのプリンシパル・プロダクト・マネージャー)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Automate Switchover and Failover for PostgreSQL Database with Oracle Cloud Infrastructure Full Stack Disaster Recovery
F96165-01
April 2024