ノート:

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リージョンはロンドンです。

目的

前提条件

タスク1: PostgreSQLのインストールおよび構成

  1. 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
    
  2. Linuxファイアウォールが接続を受信できるようにします。

    sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent
    sudo firewall-cmd --reload
    
  3. postgresql.conf (xxxxxで検出)ファイルを編集して接続を許可し、walパラメータを次のように変更します。

    ...
    listen_addresses = '*'
    ...
    wal_level = logical
    wal_log_hints = on
    ...
    
  4. データベースに接続し、レプリケーション・ユーザーを作成します。

    sudo su postgres
    psql
    
    CREATE ROLE replica_user WITH REPLICATION LOGIN PASSWORD 'YourUserPassword';
    
  5. このユーザーを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
    
  6. PostgreSQLデータベースを再起動して変更を適用します。

    sudo systemctl restart postgresql
    
  7. 2番目のサーバーでこの手順を繰り返します。

タスク2: PostgreSQLデータベースのレプリケート

このタスクでは、ネイティブのPostgreSQLデータベース・レプリケーションを構成します。

  1. プライマリ・データベースに接続し、レプリカ・スロットを作成します。

    sudo su postgres
    psql
    
    select pg_create_physical_replication_slot('replica_0');
    
  2. セカンダリ・データベースに接続し、次のコマンドを実行してレプリケーションを作成します。

    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
    
  3. プライマリ・データベースでレプリケーションがフローしていることを確認します。

    select * from pg_stat_replication;
    

    ストリーミング・プロセスで1行表示できるはずです。

タスク3: スイッチオーバー計画の作成

タスク3.1: ディザスタ・リカバリ保護グループ(DRPG)の作成および関連付け

  1. プライマリ・リージョン(フランクフルト)で、「ハンバーガー」メニューをクリックし、「移行とディザスタ・リカバリ」「ディザスタ・リカバリ」「ディザスタ・リカバリ保護グループ」および「ディザスタ・リカバリ保護グループの作成」にナビゲートします。

    アッシュバーンでの障害時リカバリ保護グループの作成

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

    アッシュバーンでの障害時リカバリ保護グループの作成

  3. プライマリ・リージョン(フランクフルト)で、次の情報を入力し、「関連付け」をクリックします。

    • ロール: Primary
    • ピア・リージョン: UK South (London)
    • ピアDR保護グループ: postgresql-lon

    プライマリとスタンバイの関連付け

タスク3.2: プライマリおよびスタンバイDRPGへのメンバーの追加

  1. プライマリDRPG (postgresql-fra)で、「メンバー」を選択し、コンピュートVM (postgresql01)をメンバーとして追加します。

    プライマリ・メンバーの追加

    ノート:コンピュートをメンバーとして追加するときに、PostgreSQLデータベースのアクティブ/パッシブ設定があるため、コンピュート・インスタンス・タイプで「非移動インスタンス」を選択します。

  2. スタンバイDRPG (postgresql-lon)で、「メンバー」を選択し、コンピュートVM (postgresql02)をメンバーとして追加します。

    スタンバイ・メンバーの追加

    ノート:コンピュートをメンバーとして追加するときに、PostgreSQLデータベースのアクティブ/パッシブ設定があるため、コンピュート・インスタンス・タイプで「非移動インスタンス」を選択します。

タスク3.3: スタンバイDRPG (ロンドン)でのスイッチオーバー計画の作成

スイッチオーバー計画:プライマリDRPGからスタンバイDRPGへのサービスの計画移行を実行するDR計画のタイプ。

  1. スタンバイDRPG postgresql-lonにスイッチオーバー計画を作成します。

  2. 「プラン」を選択し、「プランの作成」をクリックします。

  3. 「名前」postgresql-switchover-frankfurt-londonと入力し、「プラン・タイプ」Switchover (planned)を選択します。

  4. 「作成」をクリックします。

プランの切替え

ノート:必ず、スタンバイDRPG (ロンドン)からスイッチオーバー計画を作成してください。

タスク3.4: 様々なユーザー定義プラン・グループによるスイッチオーバー・プランのカスタマイズ

コンピュート(移動していないインスタンス)を両方のDR保護グループのメンバーとして追加しました。追加のユーザー定義プラン・グループでスイッチオーバー・プランをカスタマイズする必要があります。また、次のbashスクリプトを作成してOCI Object Storageにアップロードする必要があり、スイッチオーバー時にこれらのスクリプトを起動できます。

ノート:これらのスクリプトは、ロンドン・リージョンのバケットにアップロードする必要があります。

計画グループ

DRスイッチオーバーの一般的なワークフローは次のとおりです。

  1. フランクフルト・リージョンでPostgreSQLデータベースを停止:計画グループには、フランクフルト・リージョンでPostgreSQLデータベースを停止するステップがあります。

  2. ロンドン・リージョンでPostgreSQLデータベースをプロモート:計画グループには、ロンドン・リージョンでPostgreSQLデータベースをプロモートするステップがあります。

  3. PostgreSQLデータベース・レプリケーション方向の変更:計画グループには、PostgreSQLデータベース・レプリケーション方向(LON-FRA)を変更するステップがあります。

ノート:ステップが同じ順序で実行されていることを確認してください。

次のユーザー定義プラン・グループを作成します

  1. フランクフルト・リージョンでPostgreSQLデータベースを停止プラン・グループを作成します。

    1. 「プラン・グループ」で、「グループの追加」をクリックして、フランクフルト・リージョンでPostgreSQLデータベースを停止するカスタム・プラン・グループを作成します。「グループ名」Stop PostgreSQL Database at Frankfurt Regionと入力します。

      FRAでのPostgreSQLデータベースの停止

    2. 「ステップの追加」をクリックして、次の情報を入力します。計画グループに1つのステップを追加します。

      • 必ず「リージョン」Frankfurtとして、「ターゲット・インスタンス」postgresql01として選択してください。オブジェクト・ストレージ・スクリプトの実行を選択し、スクリプトの場所でOCIオブジェクト・ストレージ・バケットposgres-dr-lonを選択します。

      • スクリプトstop_postgresql.shの詳細とスクリプトの場所を入力します。このスクリプトは、FRAリージョンのPostgreSQLデータベースを停止します。

      • 「ステップの追加」をクリックして、追加したステップを確認します。

      PostgreSQLデータベースの停止ステップ

  2. 「Promote PostgreSQL Database at London region」プラン・グループを作成します。

    1. 「プラン・グループ」で、「グループの追加」をクリックして、ロンドンでPostgreSQLデータベースをプロモートするカスタム・プラン・グループを作成します。「グループ名」Promote PostgreSQL Database at London Regionと入力します。

      LONでのPostgreSQLデータベースの昇格

    2. 「ステップの追加」をクリックして次の詳細を入力します。計画グループに1つのステップを追加します。

      • 必ず「リージョン」Londonとして、ターゲット・インスタンスpostgresql02として選択してください。オブジェクト・ストレージ・スクリプトの実行を選択し、スクリプトの場所でOCIオブジェクト・ストレージ・バケットposgres-dr-lonを選択します。

      • スクリプトpromote_postgresql.shの詳細とスクリプトの場所を入力します。このスクリプトは、FRAリージョンのPostgreSQLデータベースを停止します。

      • 「ステップの追加」をクリックして、追加したステップを確認します。

      PostgreSQLデータベースの昇格ステップ

  3. 「PostgreSQLデータベース・レプリケーション方向の変更」計画グループを作成します。

    1. 「プラン・グループ」で、「グループの追加」をクリックして、PostgreSQLデータベース・レプリケーション方向を変更するカスタム・プラン・グループを作成します。「グループ名」Promote PostgreSQL Database at London Regionと入力します。

      PostgreSQLデータベース・レプリケーションdirectionNの変更

    2. 「ステップの追加」をクリックして、次の情報を入力します。計画グループに1つのステップを追加します。

      • 必ず「リージョン」Frankfurtとして、「ターゲット・インスタンス」postgresql01として選択してください。オブジェクト・ストレージ・スクリプトの実行を選択し、スクリプトの場所でOCIオブジェクト・ストレージ・バケットposgres-dr-lonを選択します。

      • スクリプトchange_replication_direction.shの詳細とスクリプトの場所を入力します。このスクリプトは、FRAリージョンのPostgreSQLデータベースを停止します。

      • 「ステップの追加」をクリックして、追加したステップを確認します。

      PostgreSQLデータベース・レプリケーション方向ステップの変更

プラン グループ ロンドン

タスク4: 事前チェックの実行およびスイッチオーバー計画の実行

「事前チェックの実行」オプションは、DR計画のすべてのステップと、そのステップに関連付けられたメンバーのクイック検証を実行します。

  1. スイッチオーバー計画postgresql-switchover-frankfurt-londonで、「事前チェックの実行」をクリックして事前チェックを実行します。

    スイッチオーバー事前チェック

    正常に完了したことを確認します。

    スイッチオーバー事前チェック・ステータス

  2. スイッチオーバー計画postgresql-switchover-frankfurt-londonから、「ディザスタ・リカバリ計画の実行」をクリックして計画を実行します。

    ディザスタ・リカバリ計画の実行

  3. プランのステータスを確認し、プラン内のすべてのステップが成功していることを確認します。

    障害回復プラン・ステータスの実行

  4. スイッチオーバー計画は、すべての計画グループを特定の順序で実行します。計画の実行に成功すると、PostgreSQLデータベースがロンドン・リージョンのマスターに昇格されます。

  5. DRPGで自動的にロールが変更されます。現在、ロンドンがプライマリとなり、フランクフルトがスタンバイ・ロールを持つことになります。

  6. ロンドンでPostgreSQLデータベースを確認します。

タスク5: スイッチバックするスタンバイDRPG (フランクフルト)でのスイッチオーバー計画の作成

タスク5.1: スタンバイDRPGでのスイッチオーバー計画の作成(ロンドン)

  1. スタンバイDRPG postgresql-franにスイッチオーバー計画を作成します。

  2. 「プラン」を選択し、「プランの作成」をクリックします。

  3. 「名前」postgresql-switchover-london-frankfurtと入力し、「プラン・タイプ」Switchover (planned)を選択します。

  4. 「作成」をクリックします。

計画グループ

ノート:必ず、スタンバイDRPG (フランクフルト)からスイッチオーバー計画を作成してください。

タスク5.2: 様々なユーザー定義プラン・グループによるスイッチオーバー・プランのカスタマイズ

追加のユーザー定義プラン・グループでスイッチオーバー・プランをカスタマイズする必要があります。また、次のbashスクリプトを作成してOCI Object Storageにアップロードする必要があり、スイッチオーバー中にこれらのスクリプトを起動できます。

ノート:これらのスクリプトは、フランクフルト・リージョンのバケットにアップロードする必要があります。

DRスイッチオーバーの一般的なワークフローは次のとおりです。

  1. PostgreSQLデータベースを巻き戻す:データベースを巻き戻すための計画グループ。フランクフルトはロンドンのデータベースからコンテンツを同期する。

  2. ロンドンへのPostgreSQLデータベース・レプリケーションの再確立:計画グループには、フランクフルトからロンドン・リージョンへのPostgreSQLデータベースのレプリケートを開始するステップがあります。

ノート:ステップが同じ順序で実行されていることを確認してください。

次の2つのユーザー定義プラン・グループの作成

  1. 「PostgreSQLデータベースの巻き戻し」プラン・グループを作成します。

    1. 「プラン・グループ」で、「グループの追加」をクリックして、フランクフルト・リージョンでPostgreSQLデータベースを巻き戻すカスタム・プラン・グループを作成します。「グループ名」Rewind PostgreSQL Databases at Frankfurt Regionと入力します。

      FRAでのPostgreSQLデータベースの巻き戻し

    2. 「ステップの追加」をクリックして、次の情報を入力します。計画グループに1つのステップを追加します。

      • 必ず「リージョン」Frankfurtとして、「ターゲット・インスタンス」postgresql01として選択してください。オブジェクト・ストレージ・スクリプトの実行を選択し、スクリプトの場所でOCIオブジェクト・ストレージ・バケットposgres-dr-lonを選択します。

      • スクリプトrewind_postgresql.shの詳細とスクリプトの場所を入力します。このスクリプトは、FRAリージョンのPostgreSQLデータベースを停止します。

      • 「ステップの追加」をクリックして、追加したステップを確認します。

      PostgreSQLデータベース・ステップを巻き戻します

  2. 「ロンドンへのPostgreSQLデータベース・レプリケーションの再確立」プラン・グループを作成します。

    1. 「プラン・グループ」で、「グループの追加」をクリックして、ロンドンへのPostgreSQLデータベース・レプリケーションを再確立するカスタム・プラン・グループを作成します。「グループ名」Promote PostgreSQL Database at London Regionと入力します。

      LONでのPostgreSQLデータベース・レプリケーションの再確立

    2. 「ステップの追加」をクリックして、次の情報を入力します。計画グループに1つのステップを追加します。

      • 必ず「リージョン」Londonとして、「ターゲット・インスタンス」postgresql02として選択してください。オブジェクト・ストレージ・スクリプトの実行を選択し、スクリプトの場所でOCIオブジェクト・ストレージ・バケットposgres-dr-lonを選択します。

      • スクリプトreplicate_postgresql.shの詳細とスクリプトの場所を入力します。このスクリプトは、FRAリージョンのPostgreSQLデータベースを停止します。

      • 「ステップの追加」をクリックして、追加したステップを確認します。

      PostgreSQLデータベース・レプリケーション・ステップの再確立

タスク6: 事前チェックの実行およびスイッチオーバー計画の実行

「事前チェックの実行」は、DR計画のすべてのステップと、そのステップに関連付けられたメンバーのクイック検証を実行します。

  1. スイッチオーバー計画postgresql-switchover-london-frankfurtで、「事前チェックの実行」をクリックして事前チェックを実行します。

    スイッチオーバー事前チェック

    正常に完了したことを確認します。

    スイッチオーバー事前チェック・ステータス

  2. スイッチオーバー計画postgresql-switchover-london-frankfurtから、「ディザスタ・リカバリ計画の実行」をクリックして計画を実行します。

    ディザスタ・リカバリ計画の実行

  3. プランのステータスを確認し、プラン内のすべてのステップが成功していることを確認します。

    障害回復プラン・ステータスの実行

  4. スイッチオーバー計画は、すべての計画グループを特定の順序で実行します。計画の実行に成功すると、PostgreSQLデータベースがフランクフルト・リージョンのマスターに昇格されます。

  5. DRPGで自動的にロールが変更されます。現在、フランクフルトがプライマリになり、ロンドンがスタンバイ・ロールになります。

  6. フランクフルトでPostgreSQLデータベースを確認します。

次のステップ

OCI Full Stack DRを使用して、PostgreSQLデータベース・スイッチオーバーを自動的に実行し、ディザスタ・リカバリ操作をスイッチバックする方法を確認しました。詳細は、「関連リンク」セクションのOCI Full Stack DRドキュメントを参照してください。

承認

その他の学習リソース

docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。