Prerequisites
=============

フェールオーバーマネージャークラスターを構成する前に、次の前提条件を満たす必要があります。

Java 11以降のインストール
-------------------------

フェールオーバーマネージャーを使用する前に、最初にJavaバージョン11以降をインストールする必要があります。
Failover
ManagerはOpenJDKでテストされています。そのバージョンのJavaをインストールすることを強くお勧めします。
`Installation instructions for Java <https://openjdk.java.net/install/>`_ はプラットフォーム固有です。

フェールオーバーマネージャーエージェントが使用しているJavaのバージョンを更新または変更する前に、エージェントを停止し、更新後に再度起動する必要があります。これはOSのアップグレードにも適用され、エージェントが使用しているJavaインストールが変更される可能性があります。
:ref:`Configuring for Eager Failover <Configuring for Eager Failover>` を使用しない限り、エージェントを停止しても実行中のデータベースサーバーに影響はありません。

..  Note::
   RHELおよびその派生のOpenJDKバージョン11に一時的な問題があります。フェールオーバーマネージャーを起動すると、次のようなエラーが表示される場合があります。

``java.lang.Error: java.io.FileNotFoundException: /usr/lib/jvm/java-11-openjdk-11.0.20.0.8-2.el8.x86_64/lib/tzdb.dat (No such file or directory)``

このメッセージが表示された場合、回避策は、
``sudo dnf install tzdata-java``
コマンドを使用して、不足しているパッケージを手動でインストールすることです。

SMTPサーバーを提供します
------------------------

ユーザー定義の通知スクリプト、電子メール、またはその両方で指定されたとおりに、フェールオーバーマネージャーから通知を受信できます。

- 電子メール通知を使用している場合、フェールオーバーマネージャーシナリオの各ノードでSMTPサーバーが実行されている必要があります。

- ``script.notification`` プロパティに値を指定する場合、\ ``user.email``
  フィールドを空白のままにすることができます。
  SMTPサーバーは必要ありません。

イベントが発生すると、フェールオーバーマネージャーはスクリプト提供されている場合を呼び出し、クラスタープロパティファイルの\ ``user.email``
パラメーターで指定された任意の電子メールアドレスに通知電子メールを送信することもできます。
SMTPサーバーの使用の詳細については、 `Red Hat deployment guide <https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-email-mta.html>`_ を参照してください。

ストリーミングレプリケーションの構成
------------------------------------

フェールオーバーマネージャーでは、プライマリノードとスタンバイノードの間でPostgreSQLストリーミングレプリケーションを構成する必要があります。フェールオーバーマネージャーは、他の種類のレプリケーションをサポートしていません。

``primary_conninfo`` および\ ``restore_command`` プロパティは、
``-sourcenode``
オプションで特に指定しない限り、スイッチオーバー中にランダムなスタンバイノードから停止したプライマリにコピーされます。

pg_hba.confを変更します
-----------------------

プライマリノードとスタンバイノードで\ ``pg_hba.conf``
を変更し、クラスター内のすべてのノード間の通信を許可するエントリを追加する必要があります。この例は、プライマリノード上の\ ``pg_hba.conf``
ファイルに作成するエントリを示しています。

.. code:: shell


   #  access for itself

   host fmdb efm 127.0.0.1/32 md5

   #  access for standby

   host fmdb efm 192.168.27.1/32 md5

   #  access for witness

   host fmdb efm 192.168.27.34/32 md5

そこで

``efm`` は、有効なデータベースユーザーの名前を指定します。

``fmdb`` は、efmユーザーが接続できるデータベースの名前を指定します。

デフォルトでは、 ``pg_hba.conf``
ファイルはPostgresインストールの下の\ ``data`` ディレクトリにあります。
``pg_hba.conf``
ファイルを変更した後、変更を有効にするには、各ノードで構成ファイルをリロードする必要があります。次のコマンドを使用できます。

systemctl reload edb-as-
========================

``x`` はPostgresバージョンを指定します。

データベースサーバーの自動起動の使用
------------------------------------

プライマリノードが再起動すると、フェールオーバーマネージャーは、プライマリノードでデータベースがダウンしていることを検出し、スタンバイノードをプライマリの役割に昇格させる場合があります。これが発生した場合、再起動されたプライマリノードのFailover
Managerエージェントは、\ ``recovery.conf``
ファイルを書き込む機会を得られず、\ ``recovery.conf``
ファイルはデータベースサーバーの起動を妨げます。この場合、再起動されたプライマリノードは、2番目のプライマリノードとしてクラスターに戻ります。

この状態を防ぐには、データベースサーバーの前にFailover
Managerエージェントが自動起動するようにします。エージェントはアイドルモードで起動し、クラスター内に既にプライマリが存在するかどうかを確認します。プライマリノードがある場合、エージェントは、\ ``recovery.conf``
または\ ``standby.signal``
ファイルが存在することを確認します。どちらのファイルも存在しない場合、エージェントは\ ``recovery.conf``
ファイルを作成します。

ファイアウォールを介した通信を確保する
--------------------------------------

Linuxファイアウォールつまりiptablesがフェールオーバーマネージャーノードのホストで有効になっている場合、クラスター内のフェールオーバーマネージャープロセス間のTCP通信を許可するルールをファイアウォール構成に追加する必要があります。例

::


   #  iptables -I INPUT -p tcp --dport 7800 -j ACCEPT

   /sbin/service iptables save

このコマンドは、ポート7800を開きます。フェールオーバーマネージャーは、クラスタープロパティファイルの\ ``bind.address``
で指定されたポートに対応するポートを介して接続します。 ``admin.port``
で指定されたポートを開く必要はありません。
efmユーティリティが実行されるときに、ローカル通信にのみ使用されます。

データベースユーザーが十分な権限を持っていることを確認します
------------------------------------------------------------

``efm.properties`` ファイルの\ ``db.user``
プロパティで指定されたデータベースユーザーには、Failover
Managerに代わって次の機能を呼び出すための十分な権限が必要です。

``pg_current_wal_lsn()``

``pg_last_wal_replay_lsn()``

``pg_wal_replay_resume()``

``pg_wal_replay_pause()``

``reconfigure.num.sync`` または\ ``reconfigure.sync.primary``
プロパティが\ ``true`` に設定されている場合、
db.userには\ ``pg_read_all_stats`` 特権と\ ``pg_reload_conf()``
を実行する権限が必要です。

これらの各機能の詳細については、 
`PostgreSQL core documentation <https://www.postgresql.org/docs/current/index.html>`_ を参照してください。

``update.physical.slots.period`` プロパティを使用する場合、
db.userには\ ``REPLICATION``
特権が必要です。データベーススーパーユーザーは、必要な権限を提供できます。

.. code:: sql

   ALTER USER <user_name> REPLICATION;

ユーザーは、構成変数の値を読み取る権限も必要です。データベーススーパーユーザーは、
PostgreSQL ``GRANT`` コマンドを使用して、必要な権限を提供できます。

.. code:: sql

   GRANT pg_read_all_settings TO <user_name>;

``pg_read_all_settings`` の詳細については、
`PostgreSQL core documentation <https://www.postgresql.org/docs/current/default-roles.html>`_ を参照してください。
