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

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

``--enable-pem``
のデフォルトの動作は、クラスター内のすべての\ ``postgres``
インスタンスに対して\ ``pem-agent`` ロールを有効にすることです。
``--enable-pg-backup-api`` コマンドラインオプションが\ ``--enable-pem``
と一緒に使用される場合、 ``pem-agent``
ロールも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``
に、EPASクラスターの場合は\ ``enterprisedb`` に設定されます。
``tpaexec show-password $clusterdir $user``
を実行して、Webインターフェイスのログインパスワードを取得できます。

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

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

複数のクラスターで共有pemサーバーを使用するための一般的なワークフローは次のようになります。

1. ``pem-server``
   ロールを持つ単一のインスタンスでtpaexecクラスターを作成します（この例では「pem-cluster」と呼びます）。
   pemserverとして実行される単一のインスタンスだけでなく、より大きなクラスターの一部としてpemがプロビジョニングされるシナリオでも、同じワークフローを簡単に使用できますが、単一ノードクラスターを使用します。例として使用する方が簡単で、おそらくメンテナンスも簡単。

2.他のクラスター（pg-clusterなど）で、 $clusters/pem-cluster
からこの特定のpemserverを共有pemサーバーインスタンスとして参照し、
``bare``
をプラットフォームとして使用するため、新しいpemserverインスタンスを作成しようとしません。また、このクラスターがpemserverインスタンスへのアクセスに使用できるpemserverの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``
   を実行する必要があります。資格情報ファイルは、pemserverのバックエンドpostgresインスタンスへのアクセス資格情報を\ ``username:password``
   形式で含むテキストファイルです。

.. code:: bash

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

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

.. 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`` および\ ``epas``
フレーバーに\ ``postgres`` または\ ``enterprisedb``
を使用するpostgresバックエンドユーザーに設定されます。
tpaexecのshow-passwordコマンドは、バックエンドユーザーのパスワードを表示します。例：

.. code:: bash

   tpaexec show-password $clusterdir $user

 :ref:`PEM documentation <Configuring Postgres Enterprise Manager (PEM)>` を参照

PEMの設定と使用法の詳細については。
