Using the efm utility
=====================

Failover Managerは、クラスター管理を支援する\ ``efm``
ユーティリティを提供します。 RPMインストーラーは、Failover
Managerのインストール時に、ユーティリティを\ ``/usr/edb/efm-5.<x>/bin``
ディレクトリに追加します。

efm allow-node
--------------

``efm allow-node <cluster_name> <address>``

``efm allow-node``
コマンドを呼び出して、指定されたノードをクラスターに参加させます。コマンドを呼び出すときに、クラスターの名前と参加ノードのIPアドレスを指定します。

このコマンドは、efm、efmグループのメンバー、またはrootによって呼び出される必要があります。

efm disallow-node
-----------------

``efm disallow-node <cluster_name> <address>``

``efm disallow-node``
コマンドを呼び出して、指定されたノードを許可ホストリストから削除し、ノードがクラスターに参加しないようにします。
``efm disallow-node``
コマンドを呼び出すときに、クラスターの名前とノードのアドレスを指定します。このコマンドは、efm、efmグループのメンバー、またはrootによって呼び出される必要があります。

..  Note::
   クラスターからノードを削除し、再度追加する予定がない場合、代わりに :ref:`efm remote-members <efm remote-members>` コマンドを使用できます。

efm cluster-status
------------------

``efm cluster-status <cluster_name>``

``efm cluster-status``
コマンドを呼び出して、フェールオーバーマネージャークラスターの状態を表示します。ステータスレポートの詳細については、
:ref:`Monitoring a Failover Manager cluster <Monitoring a Failover Manager cluster>` を参照してください。

efm cluster-status-json
-----------------------

``efm cluster-status-json <cluster_name>``

``efm cluster-status-json``
コマンドを呼び出して、フェールオーバーマネージャークラスターの状態をJSON形式で表示します表示される情報の形式は\ ``efm cluster-status``
コマンドで生成された表示とは異なりますが、情報ソースは同じです。

次の例は、3つのノードを持つ正常なクラスターのステータスを照会することにより生成されます。

.. code:: text

   {
       "nodes": {
           "172.16.144.176": {
               "type": "Witness",
               "db": "N\/A",
               "vip": "",
               "vip_active": false
           },
           "172.16.144.177": {
               "type": "Primary",
               "db": "UP",
               "vip": "",
               "vip_active  :   false"
               "lsnReceive :   0/14001478"
               "lsn    :   0/14001478"
               "lsnInfo    :"
           },
           "172.16.144.180": {
               "type": "Standby",
               "db": "UP",
               "vip": "",
               "vip_active  :   false"
               "lsnReceive :   0/14001478"
               "lsn    :   0/14001478"
               "lsnInfo    :"
           }
       },
       "allowednodes": [
           "172.16.144.177",
           "172.16.144.160",
           "172.16.144.180",
           "172.16.144.176"
       ],
       "membershipcoordinator": "172.16.144.177",
       "failoverpriority": [
           "172.16.144.180"
       ],
       "minimumstandbys": 0,
       "missingnodes": [],
       "messages": []
   }

efm create-standby
------------------

!!!注 バージョン5.0のみの重要な情報
このコマンドがスタンバイノードで実行される場合ローカルデータベースが実行され、監視されている場合、コマンドが完了した後にエージェントを再起動する必要があります。エージェントが誤った内部状態のままになる可能性があるという既知の問題があります。このノードが後でプライマリに昇格し、データベースに障害が発生した場合、この状態によりフェールオーバーが発生しない場合があります。これは、「アイドル」ノードローカルデータベースが実行されていない、または監視されていないノードには影響しません。
5.1リリースで修正されました。

``efm create-standby <cluster_name> [-prompt] [-slot <slot_name>] [-waldir <directory>]``

``efm create-standby``
コマンドを呼び出して、このノードに新しいスタンバイデータベースを作成します。ローカルエージェントが実行されており、クラスター内にプライマリエージェントが存在する必要があります。コマンドプロセスは次のことを行います。

- ローカルエージェントに接続して、現在のプライマリデータベースを見つけます。

- ローカルデータベースを停止し、ローカルエージェントをアイドル状態にします必要な場合。

- 現在の\ ``synchronous_standby_names`` 構成設定を読み取ります。

- ``slot``
  パラメーターが指定された場合、プライマリデータベースに接続して、その名前のスロットが存在する場合は削除し、スタンバイが使用するこの名前で新しいスロットを作成します。

- ローカルデータディレクトリを削除します。 ``waldir``
  パラメーターが指定された場合、現在のログ先行書き込みディレクトリも削除されます。

- ``pg_basebackup``
  を実行して、スタンバイデータベースを作成します。必要に応じてpg_basebackupの\ ``--waldir``
  パラメーターを使用します。

- 必要に応じて、 ``synchronous_standby_names`` 構成設定を設定します。

- スタンバイデータベースを起動し、監視を再開します。

``-prompt``
オプションが指定されている場合、コマンドは続行する前に、生成された\ ``pg_basebackup``
コマンドを含む実行されるステップを出力します。次のエージェントプロパティが使用されます。

- ``db.service.owner`` は、 ``pg_basebackup``
  コマンドを実行するユーザーを指定します。

- ``sudo.user.command``
  は、上記のユーザーとしてコマンドを実行する方法を指定します。

- ``db.bin`` は、\ ``pg_basebackup`` の場所を指定します。

- ``db.data.dir`` は、ターゲットディレクトリを指定します。

- ``db.port``
  は、プライマリデータベースへのアクセスに使用されるポートを指定します。

- ``application.name`` は、使用する\ ``application_name``
  を指定します設定されている場合。

!!!注 このコマンドは、フェールオーバーマネージャー5.0で導入されました。
5.0のみで、コマンドを実行するにはスーパーユーザー権限が必要です。

次の例は、 ``-prompt`` および\ ``-slot``
オプションの両方が指定された場合のコマンド出力を示しています。

.. code:: text


   #  /usr/edb/efm-5.2/bin/efm create-standby efm -slot s2 -prompt

   Found primary node1 from cluster status.
   Verify primary address node1 does not match this agents bind address node2 or external address .
   Will signal local agent to run database stop command and become idle if not already.
   Will connect to primary on node1 to drop slot s2 if it exists.
   Will remove the /opt/postgres/data/pg_wal and /opt/postgres/data directories, and run pg_basebackup using the following parameters:
   - R -D /opt/postgres/data -X stream -S s2 -C
   ...with connection string: host=node1 port=5432 application_name=node2
   Will set synchronous_standby_names to: any 2 ("node1", "node3", "node4")

   Do you want to continue? [y/N]:y
   Signalling local agent to stop db and become idle if needed.
   Replication slot s2 does not exist on primary node1.
   Removing directories/files and running pg_basebackup.
   Starting database.
   Waiting briefly for database to finish startup.
   Attempting to resume local efm agent monitoring.
   Resume command successful on local agent.

efm encrypt
-----------

``efm encrypt <cluster_name> [--from-env]``

クラスタプロパティファイルにパスワードを含める前に、 ``efm encrypt``
コマンドを呼び出してデータベースパスワードを暗号化します\ ``--from-env``
オプションを含めて、\ ``EFMPASS``
環境変数で指定された値を使用し、ユーザー入力なしで実行するようにフェールオーバーマネージャーに指示します。詳細については、
:ref:`Encrypting your database password <Encrypting your database password>` を参照してください。

efm promote
-----------

``efm promote cluster_name [-switchover [-sourcenode <address>][-quiet][-noscripts]``

``efm promote``
コマンドは、スタンバイからプライマリへの手動フェールオーバーを実行するようにフェールオーバーマネージャーに指示します。

データベースクラスターのメンテナンス時間帯に、クラスター内のすべてのスタンバイがプライマリと最新の状態であることがstatusコマンドで報告された場合にのみ、手動プロモーションを試行します。

``–switchover``
句を含めてスタンバイノードを昇格させ、プライマリノードをスタンバイノードとして再構成します。
``-sourcenode``
キーワードを含め、ノードアドレスを指定して、スタンバイにする古いプライマリノードにリカバリ設定をコピーするノードを指定します。スイッチオーバープロセス中の通知を抑制するには、
``-quiet`` キーワードを含めます。 ``-noscripts``
キーワードを含めて、フェンシングまたはポストプロモーションスクリプトを呼び出さないようにフェールオーバーマネージャーに指示します。

このコマンドは、efm、efmグループのメンバー、またはrootによって呼び出される必要があります。

..  Note::
   このコマンドは、クラスタープロパティファイルの`auto.failover` パラメーターで指定された値を無視するようにサービスに指示します。

efm remote-members
------------------

``efm reset-members <cluster_name>``

``efm reset-members``
コマンドを呼び出して、キャッシュされたノードアドレスをフェールオーバーマネージャークラスターから削除します。ノードがクラスターから完全に削除された後にこのコマンドを実行して、クラスターが削除されたノードのアドレスに接続しようとしないようにします。これにより、\ ``DOWN``
ノードに障害が発生した後、このクラスターから切断された後も削除されます。

このコマンドを実行すると、クラスター内の各ノードで次のことが行われます。

1. ``.nodes``
   ファイルのアドレスを現在のクラスターメンバーにリセットします。これは、
   ``stable.nodes.file`` プロパティが\ ``true``
   に設定されている場合でも発生します。

2. 許可ノードホストリストを更新して、現在のメンバーのみを含めます。

3. すべてのエージェントを互いに一時的に切断し、再接続します。

実行中のデータベースは、この操作の影響を受けません。操作が完了したら、スタンバイ優先度リストの更新が必要になる場合があります。詳細については、
:ref:`efm set-priority <efm set-priority>` コマンドを参照してください。

efm resume
----------

``efm resume <cluster_name>``

``efm resume``
コマンドを呼び出して、以前に停止したデータベースの監視を再開します。このコマンドは、efm、efmグループのメンバー、またはrootによって呼び出される必要があります。

efm set-priority
----------------

``efm set-priority <cluster_name> <address> <priority>``

``efm set-priority``
コマンドを呼び出して、フェールオーバー優先度をスタンバイノードに割り当てます。値は、フェールオーバーが発生した場合にノードを使用する順序を指定します。このコマンドは、efm、efmグループのメンバー、またはrootによって呼び出される必要があります。

priorityオプションを使用して、優先度リスト内のノードの場所を指定します。たとえば、\ ``1``
の値を指定して、ノードがプライマリスタンバイであり、フェールオーバーが発生した場合に昇格する最初のノードになることを示します。
``0``
の優先度値は、スタンバイをプロモートしないようにフェールオーバーマネージャーに指示します。

efm stop-cluster
----------------

``efm stop-cluster <cluster_name>``

``efm stop-cluster``
コマンドを呼び出して、すべてのノードでフェールオーバーマネージャーを停止します。このコマンドは、フェールオーバーマネージャーに、クラスター内の各ノードに接続し、既存のメンバーにシャットダウンするように指示します。このコマンドは実行中のデータベースには影響しませんが、コマンドが完了すると、フェールオーバー保護は実施されません。

..  Note::
   `efm stop-cluster` コマンドを呼び出すと、許可されたノード情報がすべて許可ノードホストリストから削除されます。

このコマンドは、efm、efmグループのメンバー、またはrootによって呼び出される必要があります。

efm upgrade-conf
----------------

``efm upgrade-conf <cluster_name> [-source <directory>]``

``efm upgrade-conf`` コマンドを呼び出して、既存のFailover
Managerインストールから構成ファイルをコピーし、Failover
Managerインストールに必要なパラメーターを追加します。ユーティリティを呼び出すときに、以前のクラスターの名前を指定します。デフォルトモードでフェールオーバーマネージャーを実行している場合、このコマンドはスーパーユーザー特権で呼び出す必要があります。

オプションの\ ``-source``
フラグの詳細について、またはsudoを使用しないフェールオーバーマネージャー構成からアップグレードする場合、
:ref:`Eager FailoverモードでのFailover Managerのアップグレード <Eager FailoverモードでのFailover Managerのアップグレード>` を参照してください。

efm node-status-json
--------------------

``efm node-status-json <cluster_name>``

``efm node-status-json``
コマンドを呼び出して、ローカルノードの状態をJSON形式で表示しますこのコマンドの実行が成功すると、終了コードとして\ ``0``
が返されます。データベースに障害が発生するか、エージェントのステータスがIDLEになった場合、コマンドは終了コードとして\ ``1``
を返します。

次に、 ``efm node-status-json`` コマンドの出力例を示します。

.. code:: text

   {
     "type":"Standby",
     "address":"172.16.144.130",
     "db":"UP",
     "vip":"",
     "vip_active":"false"
    }

efm –help
---------

``efm --help``

``efm --help``
コマンドを呼び出して、フェールオーバーマネージャーユーティリティコマンドのオンラインヘルプを表示します。
