ページの先頭行へ戻る
Enterprise Postgres 15 クラスタ運用ガイド(データベース多重化編)

4.4 すべてのデータベースサーバまたはインスタンスが停止した場合の対処

すべてのデータベースサーバまたはデータベースサーバ上のインスタンスが停止して、業務が継続できなくなった場合について、説明します。

参照

データベース多重化運用への復旧

データベース多重化運用へ復旧するには、“4.1.1.2 スタンバイサーバの組込み”および“4.1.1.3 プライマリサーバの切り戻し”を参照してください。

これらの復旧操作の流れを以下の図に示します。

図4.3 復旧操作の流れ

以下の手順で実施してください。

  1. アプリケーションの停止

    アプリケーションの実行を停止します。

  2. プライマリサーバの特定

    以下のいずれかの方法で、停止する前に起動していたプライマリサーバを特定してください。

    • 各サーバ上のシステムログを参照して、以下のメッセージが出力されているサーバを特定します。

      メッセージ
      MirroringControllerOpen[30017]: LOG: プライマリサーバへの昇格処理が完了しました (MCA00062)
    • 各サーバ上でmc_ctlコマンドをstatusモードで実行して、none(inactivated primary)と表示されるサーバを検索します。

  3. プライマリサーバのMirroring Controllerの停止

    プライマリサーバに対して、mc_ctlコマンドをstopモードで実行します。

    systemdを使用してMirroring Controllerの自動起動・停止の設定を実施している場合は、mc_ctlコマンドではなく、systemctlコマンドを使用してください。詳細は、“2.12 多重化したインスタンスとMirroring Controllerの自動起動・停止の設定”を参照してください。

    例)
    $ mc_ctl stop -M /mcdir/inst1

    注意

    Mirroring Controllerの強制停止

    Mirroring Controllerが停止しない場合は、mc_ctlコマンドのstopモードに-eオプションを指定して実行します。

    例)
    $ mc_ctl stop -M /mcdir/inst1 -e
  4. プライマリサーバのリカバリ

    まず、“運用ガイド”の“異常時の対処”を参照して、異常原因の特定とリカバリを実施してください。

    次に、バックアップデータをもとにしたpgx_rcvallコマンドによるリカバリの方法でプライマリサーバを復旧します。

    2.14.2 データベースのバックアップ運用”のpgx_dmpallコマンドによるバックアップ運用を行っている場合は、以下の手順でリカバリを実施してください。

    1. プライマリサーバおよびスタンバイサーバの両方で以下の操作を行って、最新の日付を示すバックアップデータ、およびアーカイブログが存在するサーバを調べます。

      • pgx_rcvallコマンドに-lオプションを付けて実行して、最新の日付を示すバックアップデータを特定します。

      • 以下のように最新の日付を示すアーカイブログを特定します。

        例)
        $ ls -ltr <バックアップデータ格納先ディレクトリ>/*_wal
    2. 最新のバックアップデータがスタンバイサーバに存在する場合は、バックアップ格納先ディレクトリごとプライマリサーバのバックアップ格納先ディレクトリに複写(注意1)して上書きします(注意2)。

    3. 最新のアーカイブログおよびトランザクションログファイルがスタンバイサーバに存在する場合は、プライマリサーバのバックアップ格納先ディレクトリに複写(注意1)して上書きします(注意2)。

    4. プライマリサーバ上で、pgx_rcvallコマンドをプライマリサーバのバックアップ格納先ディレクトリを指定して実行します。

    注意

    1. バックアップデータにシンボリックリンクが含まれることがあるため、シンボリックリンクが通常ファイルに変換されることがないようにtarコマンドなどを使用して複写してください。

    2. バックアップ格納先ディレクトリのコピーを退避できる場合は、上書きしてしまわないように退避してください。

    参照

    pgx_rcvallコマンドの詳細については、“運用ガイド”の“異常時の対処”を参照してください。

  5. Mirroring Controller管理ディレクトリのリカバリ

    バックアップデータからMirroring Controller管理ディレクトリ配下のファイルをコピーして、リカバリを実施します。

  6. プライマリサーバのインスタンスとMirroring Controllerの起動

    自動切り替え/切り離しを有効化する場合

    インスタンス管理者ユーザーで、mc_ctlコマンドをstartモードで実行します。

    例)
    $ mc_ctl start -M /mcdir/inst1
    自動切り替え/切り離しを有効化しない場合

    インスタンス管理者ユーザーで、mc_ctlコマンドをstartモードで-Fオプションを指定して実行します。

    例)
    $ mc_ctl start -M /mcdir/inst1 -F

    ポイント

    自動切り替え/切り離しはMirroring Controllerが起動したあとに、mc_ctlコマンドのenable-failoverモード、または、disable-failoverモードを使用することにより自動切り替え/切り離しを有効、または無効にすることが可能です。

  7. アプリケーションの再開

    アプリケーションの実行を再開します。

  8. スタンバイサーバのMirroring Controllerの停止

    スタンバイサーバに対して、mc_ctlコマンドをstopモードで実行します。

    systemdを使用してMirroring Controllerの自動起動・停止の設定を実施している場合は、mc_ctlコマンドではなく、systemctlコマンドを使用してください。詳細は、“2.12 多重化したインスタンスとMirroring Controllerの自動起動・停止の設定”を参照してください。

    例)
    $ mc_ctl stop -M /mcdir/inst1
  9. スタンバイサーバのリカバリ

    2.5.2 スタンバイサーバのインスタンスの作成・設定・登録”を参照して、プライマリサーバからスタンバイサーバを復旧(セットアップ)します。

  10. スタンバイサーバの組込み

    スタンバイサーバ上で、インスタンスおよびMirroring Controllerを起動します。

    自動切り替え/切り離しを有効化する場合

    インスタンス管理者ユーザーで、mc_ctlコマンドをstartモードで実行します。

    例)
    $ mc_ctl start -M /mcdir/inst1
    自動切り替え/切り離しを有効化しない場合

    インスタンス管理者ユーザーで、mc_ctlコマンドをstartモードで-Fオプションを指定して実行します。

    例)
    $ mc_ctl start -M /mcdir/inst1 -F

    ポイント

    自動切り替え/切り離しはMirroring Controllerが起動したあとに、mc_ctlコマンドのenable-failoverモード、または、disable-failoverモードを使用することにより自動切り替え/切り離しを有効、または無効にすることが可能です。