Creating a Failover Manager cluster
===================================

フェールオーバーマネージャーは、プライマリノードでソフトウェアまたはハードウェアに障害が発生した場合に、Postgresプライマリノードをスタンバイノードに自動的にフェールオーバーできる高可用性ツールです。

このチュートリアルでは、テスト環境でのFailover
Managerクラスターの構成について説明します。運用展開用にフェールオーバーマネージャーを構成する前に、フェールオーバーマネージャーのドキュメントの残りの部分を読んで理解します。

例としてEDB Postgres Advanced
Serverを使用して、フェールオーバーマネージャーはPostgreSQLでも動作します。チュートリアルを開始する前に、次の手順に従って基本的なインストールと構成を行います。

- 1つのプライマリノードと1つまたは2つのスタンバイノードにデータベースサーバーをインストールして初期化します。インストールについては、
  `EDB Postgres Advanced Server <https://www.enterprisedb.com/docs/epas/latest/>`_ ドキュメントを参照してください。

- Postgresストリーミングレプリケーションをプライマリノードとスタンバイノードの間で構成および実行する必要があります。ストリーミングレプリケーションの構成の詳細については、
  `Configuring streaming replication <https://www.enterprisedb.com/docs/efm/latest/14_configuring_streaming_replication/>`_ を参照してください。

- 各プライマリノードとスタンバイノードにフェールオーバーマネージャーをインストールします。
  EDB Postgres Advanced
  Serverのインストール中に、各データベースホストでEDBリポジトリを構成しました。
  EDBリポジトリと\ ``yum install``
  コマンドを使用して、クラスターの各ノードにフェールオーバーマネージャーをインストールできます。

.. code:: shell

       yum install edb-efm50

インストールプロセス中に、インストーラーは、
enterprisedbまたはpostgresが所有するクラスターのFailover
Managerサービスを制御するスクリプトを呼び出す特権を持つefmという名前のユーザーを作成します。次の例では、
``efm`` という名前のクラスターを作成します。

プライマリまたはスタンバイノードで構成プロセスを開始します。次に、構成ファイルを他のノードにコピーして、時間を節約します。

1. 作業用構成ファイルを作成します。提供されたサンプルファイルをコピーして、フェールオーバーマネージャー構成ファイルを作成し、別のバージョンをインストールする場合は所有権とバージョン番号を修正します。

.. code:: shell

      cd /etc/edb/efm-5.2

      cp efm.properties.in efm.properties

      cp efm.nodes.in efm.nodes

      chown efm:efm efm.properties

      chown efm:efm efm.nodes

1. プロパティファイルに必要な 
`encrypted password <https://www.enterprisedb.com/docs/efm/latest/04_configuring_efm/02_encrypting_database_password/>`_ を作成します。

.. code:: shell

      /usr/edb/efm-5.2/bin/efm encrypt efm

画面の指示に従って、データベースパスワードの暗号化バージョンを作成します。

1. ``efm.properties`` を更新します。 ``<cluster_name>.properties``
   ファイルこの例では\ ``efm.properties`` には、Failover
   Managerクラスターの接続プロパティと動作を指定するパラメーターが含まれています。プロパティ設定の変更は、フェールオーバーマネージャーの起動時に適用されます。

このチュートリアルで記載されているプロパティは、フェールオーバーマネージャークラスターを構成するために必要な最小限のプロパティです。実稼働システムを構成する場合、Failover
Managerオプションの詳細については `Configuring Failover Manager <https://www.enterprisedb.com/docs/efm/latest/04_configuring_efm/>`_ を確認してください。

すべてのクラスターノードで次のプロパティの値を提供します。

.. csv-table::
  :header: Property,Description
  :widths: 10,30
  :align: left
  :class: longtable

  `db.user`,データベースユーザーの名前。
  `db.password.encrypted`,データベースユーザーの暗号化されたパスワード。
  `db.port`,データベースによって監視されるポート。
  `db.database`,データベースの名前。
  `db.service.owner`,`data`ディレクトリの所有者通常は`postgres`または`enterprisedb` 。データベースがサービスとして実行されている場合にのみ必要です。
  `db.service.name`,データベースサービスの名前サーバーを再起動するために使用されます。データベースがサービスとして実行されている場合にのみ必要です。
  `db.bin`,`bin`ディレクトリへのパス `pg_ctl`への呼び出しに使用されます。
  `db.data.dir`,EFMが`recovery.conf`ファイルまたは`standby.signal`ファイルを検索または作成する`data`ディレクトリ。
  `user.email`,電子メール通知を受信する電子メールアドレス通知テキストはエージェントログファイルにもあります。
  `bind.address`,ノードのローカルアドレスとフェールオーバーマネージャーに使用するポート。フォーマットは次のとおりです。`bind.address=1.2.3.4:7800`
  `is.witness`,監視ノードでは`true`、プライマリまたはスタンバイの場合は`false`。
  `ping.server.ip`,インターネットアクセスのないネットワークで実行している場合は、 `ping.server.ip`をネットワークで使用可能なアドレスに設定します。
  `auto.allow.hosts`,テストクラスターでは、起動を簡素化するために`true`に設定します。運用環境での使用については、フェールオーバーマネージャーユーザーガイドを参照してください。
  `stable.nodes.file`,テストクラスターでは、起動を簡素化するために`true`に設定します。運用環境での使用については、フェールオーバーマネージャーユーザーガイドを参照してください。

1. ``efm.nodes`` を更新します。 ``<cluster_name>.nodes``
   ファイルこの例では\ ``efm.nodes``
   は、起動時にエージェントに読み込まれ、クラスターの残りの部分を見つける方法を指示します、または、最初に起動したノードの場合、後続のノードの承認を簡素化するために使用できます。クラスター内の各ノードのアドレスとポートをこのファイルに追加します。
   1つのノードがメンバーシップコーディネーターとして機能します。リストには、少なくともメンバーシップコーディネーターのアドレスを含めます。例

``1.2.3.4:7800``

``1.2.3.5:7800``

``1.2.3.6:7800``

Failover Managerエージェントは、\ ``efm.nodes``
ファイルのアドレスを検証しません。エージェントは、ファイル内の一部のアドレスに到達できないことを想定していますたとえば、別のエージェントがまだ起動されていません。

1. 他のノードを構成します。 ``efm.properties`` および\ ``efm.nodes``
   ファイルを、サンプルクラスター内の他のノード上の\ ``/etc/edb/efm-5.2``
   にコピーします。ファイルをコピーした後、ファイルの所有権を変更して、ファイルがefm:efmによって所有されるようにします。
   ``efm.properties``
   ファイルは、次のプロパティを除き、すべてのノードで同じにすることができます。

- ノードのローカルアドレスを使用するように\ ``bind.address``
  プロパティを変更します。

- ノードが監視ノードの場合は、\ ``is.witness`` を\ ``true``
  に設定します。ノードが監視ノードの場合、ローカルデータベースインストールに関連するプロパティは無視されます。

1. フェールオーバーマネージャークラスターを起動します。任意のノードで、Failover
   Managerエージェントを起動します。エージェントの名前は\ ``edb-efm-5.2``
   です。プラットフォーム固有のサービスコマンドを使用して、サービスを制御できます。たとえば、RHEL
   7.xまたはRocky Linux/AlmaLinux/RHEL
   8.xホストでは、次のコマンドを使用します。

.. code:: shell

      systemctl start edb-efm-5.2

1. エージェントが起動したら、次のコマンドを実行して、シングルノードクラスターのステータスを確認します。他のノードのアドレスが\ ``Allowed node host``
   リストに表示されます。

.. code:: shell

      /usr/edb/efm-5.2/bin/efm cluster-status efm

1. 他のノードでエージェントを起動します。任意のノードで\ ``efm cluster-status efm``
   コマンドを実行して、クラスターのステータスを確認します。

起動に失敗したエージェントがある場合は、指示に従ってsystemctl/journalctlを使用して、何が問題だったかに関する情報を取得します。フェールオーバーマネージャーバージョン4.xを使用している場合、代わりに起動ログを参照してください。

.. code:: shell

      cat /var/log/efm-4.<x>/startup-efm.log

スイッチオーバーを実行する
--------------------------

クラスターステータス出力が、プライマリノードとスタンバイノードが同期していることを示している場合、スイッチオーバーを実行できます。

.. code:: shell

      /usr/edb/efm-5.2/bin/efm promote efm -switchover

このコマンドは、スタンバイを昇格させ、プライマリデータベースをクラスター内の新しいスタンバイとして再構成します。元に戻すには、コマンドを再度実行します。

オンラインヘルプにアクセスします
--------------------------------

オンラインヘルプにすばやくアクセスするには、次を使用します。

.. code:: shell

   /usr/edb/efm-5.2/bin/efm --help

.. toctree::
  :maxdepth: 3

