Step 4 - Installing the PGD software
====================================

PGDソフトウェアのインストール
-----------------------------

リポジトリが構成されたら、 Postgres
Distributedソフトウェアをインストールできます。次の手順に進む前に、各ホストでこれらの手順を実行する必要があります。

-  **パッケージをインストールします。** -
   PGDパッケージをインストールします。これには、サーバー固有のBDRパッケージ、汎用のPGDプロキシおよびCLIパッケージが含まれます。
   ``edb-bdr5-<postgresversion>`` 、\ ``edb-pgd5-proxy``
   、および\ ``edb-pgd5-cli``

-  | **Postgresデータベースサーバーが初期化および起動していることを確認します。**

-  ``systemctl status``
   を使用して、サービスが実行されていることを確認します。

-  サービスが実行されていない場合は、データベースを初期化してサービスを開始します。

-  | **BDR拡張機能を構成します。**

-  ``postgresql.conf`` .

-  の\ ``shared_preload_libraries`` 設定の先頭にBDR拡張機能
   ``$libdir/bdr`` を追加します ``postgresql.conf`` .

-  の\ ``wal_level`` GUC変数を\ ``logical`` に設定します
   ``track_commit_timestamp`` ``track_commit_timestamp``
   に設定してコミットタイムスタンプ追跡をオンにします\ ``postgresql.conf``
   .

-  ``postgresql.conf`` の\ ``max_worker_processes`` を\ ``'16'``
   に設定することにより、最大ワーカープロセスを16以上に増やします。

..  Note The `max_worker_processes` value::
   `max_worker_processes` 値は、クラスターのトポロジ、ピアの数、データベースの数、およびその他の要素から導き出されます。必要な値を計算するには、 :ref:`Postgres configuration/settings <Postgres configuration>` を参照してください。値16は、この例で展開されるクラスターのサイズとして計算されました。大規模なクラスターの場合、増加する必要があります。

-  EnterprisedDB / Postgresユーザーにパスワードを設定します。

-  ルールを\ ``pg_hba.conf``
   に追加して、ノードが相互に接続できるようにします。

-  これらの行が\ ``pg_hba.conf`` に存在することを確認します。

::

       host all all all md5
       host replication all all md5

-  ``.pgpass``
   ファイルを追加して、ノードが相互に認証できるようにします。

-  他のノードにログインするための十分な特権を持つユーザーを構成します。

-  ``.pgpass``
   ファイルの詳細については、Postgresドキュメントの :ref:`The Password File <Monitoring through SQL>` を参照してください。

-  **サーバーを再起動します。** -
   再起動したサーバーが変更した設定で実行されており、
   BDR拡張機能が利用できることを確認します。

-  | **レプリケートデータベースを作成します。**

-  サーバーのデフォルトデータベースEDB Postgres Advanced
   Serverの場合は\ ``edb``
   、PGEおよびコミュニティPostgresの場合は\ ``postgres``
   にログインします。

-  ``CREATE DATABASE bdrdb``
   を使用して、デフォルトのPGDレプリケートデータベースを作成します。

-  ログアウトして\ ``bdrdb`` .

-  にログインします ``CREATE EXTENSION bdr`` を使用して、
   BDR拡張機能とPGDがそのデータベースで実行できるようにします。

次の作業例は、 EDB Postgres Advanced Serverの手順を詳細に示しています。

EDB Postgres Extended
ServerまたはコミュニティPostgresを使用してPGDをインストールする場合、手順は似ていますが、パッケージ名やパスなどの詳細が異なります。これらの違いは
 :ref:`EDB Postgres Extended ServerのPGDのインストール <EDB Postgres Extended ServerのPGDのインストール>` および :ref:`PostgresqlのPGDのインストール <PostgresqlのPGDのインストール>` にまとめられています。

実際の例
--------

パッケージをインストールする
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

最初の手順は、パッケージをインストールすることです。各Postgresパッケージには、それに対応する\ ``edb-bdr5-<postgresversion>``
パッケージがあります。たとえば、 EDB Postgres Advanced Server
Serverepasバージョン16をインストールする場合は、\ ``edb-bdr5-epas16``
をインストールします。

他にインストールするパッケージが2つあります。

-  PGDプロキシの\ ``edb-pgd5-proxy``

-  PGDコマンドラインツールの場合 ``edb-pgd5-cli``

これらのパッケージをすべてRHELまたはRHEL互換Linuxにインストールするには、次のコマンドを実行します。

::

   sudo dnf -y install edb-bdr5-epas16 edb-pgd5-proxy edb-pgd5-cli

データベースが初期化され起動されていることを確認します
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

サーバーが初期化されず、データベースのパッケージ初期化によって起動された場合、またはプロセスを繰り返している場合、サーバーを初期化して起動する必要があります。

サーバーが実行されているかどうかを確認するには、サービスを確認します。
EDB Advanced Serverのサービス名は\ ``edb-as-16``
であるため、次を実行します。

::

   sudo systemctl status edb-as-16

サーバーが実行されていない場合、応答は次のとおりです。

::

   ○ edb-as-16.service - EDB Postgres Advanced Server 16
        Loaded: loaded (/usr/lib/systemd/system/edb-as-16.service; disabled; preset: disabled)
        Active: inactive (dead)

``Active: inactive (dead)``
は、サーバーを初期化して起動する必要があることを示します。

特定のPostgresフレーバーのセットアップスクリプトへのパスを知る必要があります。

EDB Postgres Advanced
Serverの場合、このスクリプトは\ ``/usr/edb/as16/bin``
に\ ``edb-as-16-setup`` としてあります。 ``initdb``
パラメーターを指定してこのコマンドを実行し、UTF-8を使用するようにデータベースを設定するオプションを渡します。

::

   sudo PGSETUP_INITDB_OPTIONS="-E UTF-8" /usr/edb/as16/bin/edb-as-16-setup initdb

データベースが初期化されたら、
BDR拡張機能の構成を続行できるように起動します。

::

   sudo systemctl start edb-as-16

BDR拡張機能の構成
^^^^^^^^^^^^^^^^^

EDB Postgres Advanced
Serverをインストールすると、データベースへの接続時に管理機能を持つシステムユーザーenterprisedbが作成されます。このユーザーを使用して、
BDR拡張機能を構成します。

BDRライブラリのプリロード
^^^^^^^^^^^^^^^^^^^^^^^^^

BDRライブラリを他のライブラリでプリロードする必要があります。 EDB
Postgres Advanced
Serverには、多数のライブラリが既にプリロードされているため、既存のリストにBDRライブラリを先頭に付ける必要があります。

::

   echo -e "shared_preload_libraries = \$libdir/bdr,\$libdir/dbms_pipe,\$libdir/edb_gen,\$libdir/dbms_aq" | sudo -u enterprisedb tee -a /var/lib/edb/as16/data/postgresql.conf >/dev/null

!!!tip このコマンドフォーマット\ ``echo ... | sudo ... tee -a ...``
は、エコーされた文字列を別のユーザーが所有する\ ``postgresql.conf``
ファイルの最後に追加します。

.. ::
   #### `wal_level` を設定します

BDR拡張機能は、論理レプリケーションを実行するようにサーバーを設定する必要があります。これを行うには、
``wal_level`` を\ ``logical`` に設定します。

::

   echo -e "wal_level = logical" | sudo -u enterprisedb tee -a /var/lib/edb/as16/data/postgresql.conf >/dev/null

コミットタイムスタンプ追跡を有効にする
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

BDR拡張機能では、コミットタイムスタンプ追跡を有効にすることも必要です。

::

   echo -e "track_commit_timestamp = on" | sudo -u enterprisedb tee -a /var/lib/edb/as16/data/postgresql.conf >/dev/null

``max_worker_processes`` を増やす
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

複数のノード間で通信するために、 Postgres
Distributedノードは通常より多くのワーカープロセスを実行します。デフォルトの制限8は、小規模なクラスターであっても低すぎます。

``max_worker_processes``
値は、クラスターのトポロジ、ピアの数、データベースの数、およびその他の要素から導き出されます。必要な値を計算するには、
 :ref:`Postgres configuration/settings <Postgres configuration>` を参照してください。

3ノードクラスターを使用するこの例では、値16を使用します。

ワーカープロセスの最大数を16に増やします。

::

   echo -e "max_worker_processes = 16" | sudo -u enterprisedb tee -a /var/lib/edb/as16/data/postgresql.conf >/dev/null

クラスターが大きい場合、この値を増やす必要があります。

Postgres enterprisedbユーザーにパスワードを追加します
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ノード間の接続を許可するには、Postgres
enterprisedbユーザーにパスワードを設定する必要があります。この例では、パスワード
``secret``
を使用します。展開には別のパスワードを選択します。このパスワードは
 :ref:`ノード間の認証を有効にする <ノード間の認証を有効にする>`  に必要です。

::

   sudo -u enterprisedb psql edb -c "ALTER USER enterprisedb WITH PASSWORD secret"

pg_hba.confでノード間認証を有効にする
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

デフォルトで、Postgresはローカル認証とデータベースとの接続を許可しますが、外部ネットワーク接続は許可しません。これを有効にするには、
``pg_hba.conf``
を編集し、レプリケーションユーザーのルールを含む適切なルールを追加します。プロセスを簡素化するには、次のコマンドを使用します。

::

   echo -e "host all all all md5\nhost replication all all md5" | sudo tee -a /var/lib/edb/as16/data/pg_hba.conf

このコマンドは、次を\ ``pg_hba.conf`` に追加します。

::

   host all all all md5
   host replication all all md5

これらのコマンドは、ノードの複製を有効にします。

ノード間の認証を有効にする
^^^^^^^^^^^^^^^^^^^^^^^^^^

レプリケーションのためにノードを接続するプロセスの一部として、PGDは他のノードにログインします。
Postgresが実行されているユーザーとしてそのログインを実行します。 EDB
Postgres
Advancedサーバーの場合、これはenterprisedbユーザーです。そのユーザーが他のノードにログインするには、資格情報が必要です。
``.pgpass``
ファイルを使用して、これらの資格情報を提供します。このファイルは、ユーザーのホームディレクトリに存在する必要があります。
``enterprisedb`` のホームディレクトリは\ ``/var/lib/edb`` です。

次のコマンドを実行してファイルを作成します。

::

   echo -e " *:* :*:enterprisedb:secret" | sudo -u enterprisedb tee /var/lib/edb/.pgpass; sudo chmod 0600 /var/lib/edb/.pgpass

PostgreSQLドキュメントの :ref:`The Password File <Monitoring through SQL>` の\ ``.pgpass``
ファイルの詳細を読むことができます。

サーバーを再起動します
^^^^^^^^^^^^^^^^^^^^^^

これらをすべて変更した後、次の方法でサーバーを再起動することをお勧めします。

::

   sudo systemctl restart edb-as-16

拡張機能がインストールされたことを確認します
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

この時点で、拡張機能が実際に利用可能であり、構成が正しくロードされたかどうかを確認する価値があります。次のようなBDR拡張機能の\ ``pg_available_extensions``
テーブルを照会できます。

::

   sudo -u enterprisedb psql edb -c "select * from pg_available_extensions where name like bdr"

このコマンドは、拡張機能とそのバージョンのエントリを結果ます。

::

    name | default_version | installed_version |                  comment
   - -----+-----------------+-------------------+-------------------------------------------
    bdr  | 5.3.0           |                   | Bi-Directional Replication for PostgreSQL

次のコマンドを使用して、他のサーバー設定を確認することもできます。

::

   sudo -u enterprisedb psql edb -c "show all" | grep -e wal_level -e track_commit_timestamp -e max_worker_processes

レプリケートデータベースを作成する
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

これで、サーバーはPGD用の準備が整いました。次に、 ``bdrdb``
という名前のデータベースを作成し、ログインしたときにBDR拡張機能をインストールする必要があります。

::

   sudo -u enterprisedb psql edb -c "CREATE DATABASE bdrdb"
   sudo -u enterprisedb psql bdrdb -c "CREATE EXTENSION bdr"

最後に、サーバーにログインして接続をテストします。

::

   sudo -u enterprisedb psql bdrdb

サーバーに接続しました。コマンド「\\dx」を実行して、インストールされている拡張機能をリストします。

::

   bdrdb=# \dx
                                   List of installed extensions
          Name       | Version |   Schema   |                   Description
   - -----------------+---------+------------+--------------------------------------------------
    bdr              | 5.3.0   | pg_catalog | Bi-Directional Replication for PostgreSQL
    edb_dblink_libpq | 1.0     | pg_catalog | EnterpriseDB Foreign Data Wrapper for PostgreSQL
    edb_dblink_oci   | 1.0     | pg_catalog | EnterpriseDB Foreign Data Wrapper for Oracle
    edbspl           | 1.0     | pg_catalog | EDB-SPL procedural language
    plpgsql          | 1.0     | pg_catalog | PL/pgSQL procedural language
   (5 rows)

BDR拡張機能がテーブルにリストされ、インストールされていることを示していることに注意してください。

サマリー
--------

EDB Postgres Advanced ServerのPGDのインストール
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

参考までに、この例で使用されるコマンドの概要を次に示します。

::

   sudo dnf -y install edb-bdr5-epas16 edb-pgd5-proxy edb-pgd5-cli
   sudo PGSETUP_INITDB_OPTIONS="-E UTF-8" /usr/edb/as16/bin/edb-as-16-setup initdb
   sudo systemctl start edb-as-16
   echo -e "shared_preload_libraries = \$libdir/bdr,\$libdir/dbms_pipe,\$libdir/edb_gen,\$libdir/dbms_aq" | sudo -u enterprisedb tee -a /var/lib/edb/as16/data/postgresql.conf >/dev/null
   echo -e "wal_level = logical" | sudo -u enterprisedb tee -a /var/lib/edb/as16/data/postgresql.conf >/dev/null
   echo -e "track_commit_timestamp = on" | sudo -u enterprisedb tee -a /var/lib/edb/as16/data/postgresql.conf >/dev/null
   echo -e "max_worker_processes = 16" | sudo -u enterprisedb tee -a /var/lib/edb/as16/data/postgresql.conf >/dev/null
   sudo -u enterprisedb psql edb -c "ALTER USER enterprisedb WITH PASSWORD secret"
   echo -e "host all all all md5\nhost replication all all md5" | sudo tee -a /var/lib/edb/as16/data/pg_hba.conf >/dev/null
   echo -e " *:* :*:enterprisedb:secret" | sudo -u enterprisedb tee /var/lib/edb/.pgpass >/dev/null; sudo chmod 0600 /var/lib/edb/.pgpass
   sudo systemctl restart edb-as-16
   sudo -u enterprisedb psql edb -c "CREATE DATABASE bdrdb"
   sudo -u enterprisedb psql bdrdb -c "CREATE EXTENSION bdr"
   sudo -u enterprisedb psql bdrdb

EDB Postgres Extended ServerのPGDのインストール
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

EDB Postgres Extended Serverを使用してPGDをインストールすると、 EDB
Postgres Advanced Serverインストールと多くの違いがあります。

-  インストールするBDRパッケージの名前は\ ``edb-bdrV-pgextendedNN``
   です。ここで、VはPGDバージョン、NNはPGEバージョン番号です。

-  別のセットアップユーティリティ
   ``/usr/edb/pgeNN/bin/edb-pge-NN-setup`` を呼び出します。

-  サービス名は\ ``edb-pge-NN`` です。

-  システムユーザーはpostgresenterprisedbではありません。

-  postgresユーザーのホームディレクトリは\ ``/var/lib/pgqsl`` です。

-  ``shared_preload_libraries`` に追加する既存のライブラリはありません。

概要EDB Postgres Extended Server 16のPGDのインストール
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

::

   sudo dnf -y install edb-bdr5-pgextended16 edb-pgd5-proxy edb-pgd5-cli
   sudo PGSETUP_INITDB_OPTIONS="-E UTF-8" /usr/edb/pge16/bin/edb-pge-16-setup ekend initdb
   sudo systemctl start edb-pge-16
   echo -e "shared_preload_libraries = \$libdir/bdr" | sudo -u postgres tee -a /var/lib/edb-pge/16/data/postgresql.conf >/dev/null
   echo -e "wal_level = logical" | sudo -u postgres tee -a /var/lib/edb-pge/16/data/postgresql.conf >/dev/null
   echo -e "track_commit_timestamp = on" | sudo -u postgres tee -a /var/lib/edb-pge/16/data/postgresql.conf >/dev/null
   echo -e "max_worker_processes = 16" | sudo -u postgres tee -a /var/lib/edb-pge/16/data/postgresql.conf >/dev/null
   sudo -u postgres psql postgres -c "ALTER USER postgres WITH PASSWORD secret"
   echo -e "host all all all md5\nhost replication all all md5" | sudo tee -a /var/lib/edb-pge/16/data/pg_hba.conf >/dev/null
   echo -e " *:* :*:postgres:secret" | sudo -u postgres tee /var/lib/pgsql/.pgpass >/dev/null; sudo chmod 0600 /var/lib/pgsql/.pgpass
   sudo systemctl restart edb-pge-16
   sudo -u postgres psql postgres -c "CREATE DATABASE bdrdb"
   sudo -u postgres psql bdrdb -c "CREATE EXTENSION bdr"
   sudo -u postgres psql bdrdb

PostgresqlのPGDのインストール
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

PostgresSQLを使用したPGDのインストールには、 EDB Postgres Advanced
Serverインストールと多くの違いがあります。

-  インストールするBDRパッケージの名前は\ ``edb-bdrV-pgNN``
   です。ここで、VはPGDバージョン、NNはPostgreSQLバージョン番号です。

-  別のセットアップユーティリティ
   ``/usr/pgsql-NN/bin/postgresql-NN-setup`` を呼び出します。

-  サービス名は\ ``postgresql-NN`` です。

-  システムユーザーはpostgresenterprisedbではありません。

-  postgresユーザーのホームディレクトリは\ ``/var/lib/pgqsl`` です。

-  ``shared_preload_libraries`` に追加する既存のライブラリはありません。

概要 Postgresql 16のPGDのインストール
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

::

   sudo dnf -y install edb-bdr5-pg16 edb-pgd5-proxy edb-pgd5-cli
   sudo PGSETUP_INITDB_OPTIONS="-E UTF-8" /usr/pgsql-16/bin/postgresql-16-setup initdb
   sudo systemctl start postgresql-16
   echo -e "shared_preload_libraries = \$libdir/bdr" | sudo -u postgres tee -a /var/lib/pgsql/16/data/postgresql.conf >/dev/null
   echo -e "wal_level = logical" | sudo -u postgres tee -a /var/lib/pgsql/16/data/postgresql.conf >/dev/null
   echo -e "track_commit_timestamp = on" | sudo -u postgres tee -a /var/lib/pgsql/16/data/postgresql.conf >/dev/null
   echo -e "max_worker_processes = 16" | sudo -u postgres tee -a /var/lib/pgsql/16/data/postgresql.conf >/dev/null
   sudo -u postgres psql postgres -c "ALTER USER postgres WITH PASSWORD secret"
   echo -e "host all all all md5\nhost replication all all md5" | sudo tee -a /var/lib/pgsql/16/data/pg_hba.conf >/dev/null
   echo -e " *:* :*:postgres:secret" | sudo -u postgres tee /var/lib/pgsql/.pgpass; sudo chmod 0600 /var/lib/pgsql/.pgpass
   sudo systemctl restart postgresql-16
   sudo -u postgres psql postgres -c "CREATE DATABASE bdrdb"
   sudo -u postgres psql bdrdb -c "CREATE EXTENSION bdr"
   sudo -u postgres psql bdrdb
