EDB Postgres Distributed configuration
======================================

TPAは、以前はBDR
（双方向レプリケーション）バージョン3.7、4.x、および5.xと呼ばれていたEDB
Postgres Distributed（PGD）をインストールして構成できます。

PGDパッケージへのアクセスは、EDBのパッケージリポジトリのみを介して行われます。パッケージをダウンロードするには、有効なEDBサブスクリプショントークンが必要です。

このドキュメントでは、PGD構成のいくつかの側面に触れていますが、詳細については、
 `PGD documentation <https://enterprisedb.com/docs/pgd/latest/>`_  を参照してください。

はじめに
--------

TPAは、Postgres自分自身とともに、PGDとすべてのPGDインスタンスに依存関係をインストールします。

基本的なPostgresセットアップを完了してPostgresを起動した後、TPAは\ ``bdr_database``
を作成し、以下で説明するさまざまな手順に従ってPGDクラスターのセットアップに進みます。

インストール
------------

TPAは、使用中のPostgres（Postgres、Postgres
Extended、またはEPASなど）のバージョンとフレーバーに応じて、正しいPGDパッケージをインストールします。

``bdr_version``
を設定して、インストールするPGDのメジャーバージョン（つまり、3、4、5）を決定します。
``bdr_package_version``
を設定して、インストールする正確なパッケージを決定します（例：最新の5.0.xをインストールするには
‘5.0\*’）。

クラスターセットアップの概要
----------------------------

必要なパッケージをインストールし、PGDをロードするようにPostgresを構成し、サーバーを起動した後、TPAはPGDノード、グループ、レプリケーションセット、およびその他のリソースのセットアップに進みます。

TPAが実行する手順の概要は次のとおりです。

-  参加するインスタンスごとにPGDノードを作成します（
   bdr.create_node（）を使用）

-  ``bdr_node_groups``
   に応じて、1つ以上のPGDノードグループを作成します（
   bdr.create_node_group()を使用）

-  必要に応じて、レプリケーションセットを作成して、どの変更をレプリケートするかを正確に制御します（ノードグループのタイプとメンバーシップに応じて。

-  個々のインスタンスで関連するノードグループに参加します

-  サブグループRAFTまたはプロキシルーティングを有効にするなど、追加の構成を実行します。

（このプロセスには、各インスタンスでいくつかを順番に、そして他のものを並列に、複雑な一連のクエリを実行することが含まれます。手順を簡単にするために、TPAは任意のPGDプライマリインスタンスをクラスターの「first_bdr_primary」として指定し、これを使用しますインスタンスは、これらのクエリのほとんどを実行します。それ以外の点では、インスタンスは特別なものではなく、そのIDはPGD構成自分自身にとって重要ではありません。）

インスタンスロール
------------------

``role`` に\ ``bdr``
を持つすべてのインスタンスはPGDインスタンスであり、暗黙的に\ ``postgres``
サーバーインスタンスでもあります。

``readonly`` をロールに持つPGDインスタンスはロジカルスタンバイノード（
``pause_in_standby``
が設定されたPGDノードグループに参加します）であり、プロモーションの対象です。

``subscriber-only``
をロールに持つPGDインスタンスはサブスクライバー専用ノードであり、レプリケートされた変更を受信しますが、公開はしません。

そのロールに\ ``witness`` を持つPGDインスタンスは、監視ノードです。

上記のすべてのPGDインスタンスは、暗黙的に\ ``primary``
インスタンスでもあります。例外は、ロールに\ ``replica``
を持つインスタンスです。これは、アップストリームのPGDインスタンスの物理ストリーミングレプリカを示します。このようなインスタンスは、推奨されるPGDアーキテクチャには含まれておらず、現在TPAでサポートされていません。

構成設定
--------

以下で説明する設定は、通常、\ ``cluster_vars``
で設定して、クラスター内のすべてのPGDインスタンスに対して均一に設定されるようにする必要があります。場合によっては（
``bdr_database``
など）、異なるインスタンスに異なる値を設定できますが、結果は未定義です（たとえば、すべてのインスタンスの\ ``bdr_node_groups``
の値はまったく同じでなければなりません）。

``cluster_vars``
の下のクラスター全体に均一の値を設定して、PGD構成を定義することを強くお勧めします。

bdr_database
^^^^^^^^^^^^

``bdr_database`` （デフォルト：bdrdb）はPGDで初期化されます。

bdr_node_group
^^^^^^^^^^^^^^

``bdr_node_group``
の設定（デフォルト：クラスター名に基づく）は、インスタンスがどのPGDクラスターに属するかを識別します。また、外部コンポーネント（pgd-proxyまたはharp-proxyなど）の特定のクラスターを識別するためにも使用されます。

bdr_node_groups
^^^^^^^^^^^^^^^

これは、グループ参加ステージの前に作成する必要があるPGDノードグループのリストです（クラスターに追加のサブグループが必要な場合）。

一般に、 ``tpaexec configure``
は、選択されたアーキテクチャに基づいて適切な値を生成します。

.. code:: yaml

   cluster_vars:
     bdr_node_groups:
     - name: topgroup
     - name: abc_subgroup
       node_group_type: data
       parent_group_name: topgroup
       options:
         location: abc
     …

最初のエントリーは、クラスターの\ ``bdr_node_group``
用である必要があります。

リスト内の後続の各エントリは、\ ``parent_group_name``
を指定する必要があり、\ ``node_group_type``
を指定できます（オプション）。

各エントリには、グループオプションのオプションのキー/値マッピングがある場合があります。利用可能なオプションはPGDバージョンによって異なります。

bdr_child_group
^^^^^^^^^^^^^^^

``bdr_child_group`` がインスタンスに（\ ``bdr_node_groups``
で言及されているグループの名前に）設定されている場合、
``bdr_node_group`` の代わりにそのグループに参加します。

bdr_commit_scopes
^^^^^^^^^^^^^^^^^

これは :ref:`commit scopes <EDB Postgres Distributed configuration>` のオプションのリストです

PGDデータベースに存在する必要があります（PGD 4.1以降で使用可能）。

.. code:: yaml

   cluster_vars:
     bdr_commit_scopes:
     - name: somescope
       origin: somegroup
       rule: ALL (somegroup) ON received …`
     - name: otherscope
       origin: othergroup
       rule: …
     …

各エントリは、コミットスコープの\ ``name`` 、\ ``origin``
グループの名前、およびコミットスコープ\ ``rule``
を指定する必要があります。グループは、\ ``bdr_node_groups``
のエントリに対応している必要があります。

``bdr_commit_scopes``
を明示的に設定した場合、TPAは必要に応じてコミットスコープを作成、変更、または削除し、データベースが構成と一致するようにします。設定しない場合、既存のコミットスコープはそのままになります。

雑記
----

フック
^^^^^^

TPAは、PGDクラスターセットアッププロセス中に、
bdr-node-pre-creation、bdr-post-group-creation、および
bdr-pre-group-join :ref:`フック <フック>` を呼び出します。

データベースの照合
^^^^^^^^^^^^^^^^^^

TPAは、クラスター内のすべてのインスタンスのPGDデータベースに同じ照合（LC_COLLATE）設定があることを確認します。同じPGDクラスター内のデータベースに異なる照合順序を持つことは、データ損失のリスクです。

古いバージョンのPGD
-------------------

TPAは、 BDR v1（パッチ適用バージョンのPostgres 9.4を使用）、v2（Postgres
9.6を使用）、またはv3.7より前のPGDバージョンの展開を積極的にサポートまたはテストしなくなりました。
