ノート:
- このチュートリアルでは、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 psql
CREATE 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 psql
select 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