Configuring Postgres Enterprise Manager (PEM)
=============================================

``--enable-pem``
コマンドラインオプションを使用して\ ``tpaexec configure``
コマンドを実行すると、TPAはPEMをインストールおよび構成します。

``--enable-pem``
のデフォルト動作は、クラスター内のすべての\ ``postgres``
インスタンスのpem-agentロールを有効にすることです。 pem-agentロールは、
``--enable-pg-backup-api`` コマンドラインオプションが\ ``--enable-pem``
とともに使用される場合、 Barmanノードにも追加されます。

``pemserver`` という名前の専用インスタンスもクラスターに追加されます。

PEMサーバーはPostgresバックエンドを使用するため、 ``pemserver``
インスタンスは暗黙的にpostgresロールを使用します。これにより、
``pemserver``
はPEMバックエンドとして使用するように構成された有効なPostgresクラスターを取得します。通常のPostgresインスタンスで使用可能なすべての構成オプションは、PEMのバックエンドPostgresインスタンスでも同様に有効です。詳細については、以下を参照してください。

-  :ref:`Configure pg_hba.conf <pg_hba.conf>` 

-  :ref:`Configure postgresql.conf <postgresql.conf>` 

PEMはEDBパッケージリポジトリを介してのみ利用可能なため、有効なサブスクリプションが必要です。

サポートされているアーキテクチャ
--------------------------------

PEMは、 ``--enable-pem``
構成コマンドラインオプションを介してすべてのアーキテクチャでサポートされています。例外は、
EDB Postgres Extendedで使用される場合のBDR
-Always-ONアーキテクチャです。オプションで、生成されたクラスター構成ファイル
``config.yml``
を編集し、クラスター内のPostgresインスタンスからpem-agentロールを割り当てまたは削除して、そこでPEMを有効または無効にすることができます。

PEM構成
-------

TPAは、適切なインスタンス固有の設定でPEMエージェントとPEMサーバーを構成し、残りの設定はデフォルト値に設定されます。構成オプションの一部は、将来的にユーザー構成用に公開される可能性があります。

PEMサーバーのWebインターフェイスは、httpsで実行されるように構成され、その構成にポート443を使用します。
PEMのWebサーバー構成は、自己署名証明書を使用します。

PEMサーバーWebインターフェイスのデフォルトのログイン資格情報は、
Postgresバックエンドデータベースユーザーを使用します。これは、デフォルトでPostgreSQLの場合はpostgres、
EDB Postgres Advanced
Serverクラスターの場合はenterprisedbに設定されます。
``tpaexec show-password $clusterdir $user``
を実行して、Webインターフェイスのログインパスワードを取得できます。

共有PEMサーバー
---------------

一部の展開では、組織内の複数のクラスターを監視および管理するために単一のPEMサーバーを使用する場合があります。
tpaexecでの共有PEMサーバーの展開は、 ``pem_shared``
変数を介してサポートされています。この変数は、既存のPEMサーバーを使用する予定がある特定のクラスター構成のPEMサーバーインスタンスの下で
``vars:`` を介して設定できます。 ``pem_shared``
はブール変数であるため、可能な値はtrueおよびfalseデフォルトです。
PEMサーバインスタンスを共有として宣言する場合、PEMサーバーインスタンスが実際には、最初にPEMサーバーをプロビジョニングおよび展開した別のクラスター構成によって管理されていることを指定されたクラスター構成に伝えます。したがって、PEMのPostgresバックエンドを含むPEMサーバーインスタンスに行う変更は、PEMサーバーインスタンスが共有PEMインスタンスとして宣言されていないクラスターによって管理されます。

複数のクラスターで共有PEMサーバーを使用するための一般的なワークフローは次のとおりです。

1. pem-serverロールを持つ単一のインスタンスを使用してtpaexecクラスターを作成します。
   PEMサーバーとして実行される単一のインスタンスではなく、大規模なクラスターの一部としてプロビジョニングされるシナリオでも、同じワークフローを簡単に使用できます。例として使用する方が簡単で、おそらくメンテナンスも簡単であるため、シングルノードクラスターを使用します。

2. 他のクラスター\ ``pg-cluster``
   などで、この特定のPEMサーバーを共有PEMサーバーインスタンスとして\ ``$clusters/pem-cluster``
   から参照します。 ``bare``
   をプラットフォームとして使用して、新しいPEMサーバーインスタンスを作成しないようにします。また、このクラスターがPEMサーバーインスタンスにアクセスするために使用できるPEMサーバーのIPアドレスを指定します。

.. code:: yml

       - Name: pemserver
         node: 5
         role:
         - pem-server
         platform: bare
         public_ip: 13.213.53.205
         private_ip: 10.33.15.102
         vars:
           pem_shared: true

3. Postgresクラスターでdeployを実行する前に、\ ``pg-cluster``
   がSSHを介してPEMサーバーインスタンスにアクセスできることを確認してください。
   ``ssh-copy-id`` を介して\ ``pg-cluster``
   公開キーをPEMサーバーインスタンスにコピーすることにより、このアクセスを許可できます。次に、SSHを実行して、パスワードを指定せずにログインできることを確認します。

.. code:: bash

       # add pem-clusters key to the ssh-agent (handy for `aws` platform)
       $ cd $clusters/pem-cluster
       $ ssh-add id_pem-clutser
       $ cd $clusters/pg-cluster
       $ ssh-keyscan -4 $pem-server-ip >> known_hosts
       $ ssh-copy-id -i id_pg-cluster.pub -o UserKnownHostsFile=tpa_known_hosts $user@$pem-server-ip
       $ ssh -F ssh_config pemserver

4. PEMサーバーノードでPostgreSQL構成ファイルを更新して、新しい\ ``pg-cluster``
   からの接続を許可します。 ``pem-cluster`` ``config.yml``
   ファイルの\ ``vars:`` の下の\ ``pem_postgres_extra_hba_settings``
   に新しいエントリを追加することにより、PEMサーバー上の既存の\ ``pg_hba.conf``
   ファイルを変更できます。例

.. code:: yml

       instances:
       - Name: pemserver
         location: main
         node: 1
         role:
         - pem-server
         vars:
           pem_postgres_extra_hba_settings:
             - "# Allow pem connections from pg-cluster1.quire"
             - hostssl pem +pem_agent 10.33.15.108/32 cert
             - "# Allow pem connections from pg-cluster1.upside"
             - hostssl pem +pem_agent 10.33.15.104/32 cert
             - "# Allow pem connections from pg-cluster2.zippy"
             - hostssl pem +pem_agent 10.33.15.110/32 cert
             - "# Allow pem connections from pg-cluster2.utopic"
             - hostssl pem +pem_agent 10.33.15.109/32 cert

次に、 ``tpaexec provision $clusters/pem-cluster``
に続いて\ ``tpaexec deploy $clusters/pem-cluster``
を実行します。完了すると、新しい\ ``pg-cluster``
のノードはPEMサーバーのバックエンドと通信できるようになります。

5. ``pg-cluster``
   のノードのPEMエージェントがPEMサーバーバックエンドに接続して登録できるように保証には、
   ``tpaexec deploy``
   を実行する前に\ ``export EDB_PEM_CREDENTIALS_FILE=/path/to/pem/credentials/file``
   を実行する必要があります。資格情報ファイルは、PEMサーバーのバックエンドPostgresインスタンスへのアクセス資格情報を\ ``username:password``
   形式で含むテキストファイルです。

.. code:: bash

       $ cat pem_creds
       postgres:f1I%fw!QmWevdzw#EL#$Ulu1cWhg7&RT

バックエンドパスワードがわからない場合は、 tpaexec ``show-password``
コマンドを使用して取得できます。

.. code:: bash

       tpaexec show-password $pem-clusterdir $user

6. ``tpaexec deploy $clusters/pg-cluster``
   を実行して、共有PEMサーバーインスタンスを使用しながらPEMが新しい\ ``pg-cluster``
   に展開されるようにします。

PEM UIへの接続
--------------

PEM
UIはhttpsインターフェイスで実行されるため、https://$pem-server-ip/pemを介してPEMサーバーの実行中のインスタンスに接続できます。
PEM UIのログイン資格情報は、\ ``postgresql`` の場合は\ ``postgres``
、\ ``epas`` フレーバーの場合は\ ``enterprisedb``
を使用するPostgresバックエンドユーザーに設定されます。 tpaexec
``show-password``
コマンドは、バックエンドユーザーのパスワードを表示します。例

.. code:: bash

   tpaexec show-password $clusterdir $user

:ref:`PEM documentation <Configuring Postgres Enterprise Manager (PEM)>` を参照してください。

PEMの使用と構成の詳細については、こちらをご覧ください。
