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

TPAは、 EDB Postgres
DistributedPGD、旧名BDR双方向レプリケーションバージョン3.7、4.x、および5.xをインストールおよび構成できます。

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

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

TPAがPGDインストールにアプローチする方法
----------------------------------------

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

基本的なPostgresのセットアップを完了し、
Postgresを起動した後、TPAは\ ``bdr_database``
を作成し、以下の手順を使用してPGDクラスターのセットアップを続行します。

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

TPAは、使用中のPostgresのバージョンとフレーバーたとえば、 Postgres、
Postgres Extended、またはEDB Postgres Advanced
Serverなどに基づいて、正しいPGDパッケージをインストールします。

``bdr_version``
を設定して、インストールするPGDのメジャーバージョン3、4、または5を決定します。
``bdr_package_version``
を設定して、インストールするパッケージを決定します。たとえば、 ``5.0*``
を使用して最新の5.0.xパッケージをインストールします。

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

必要なパッケージをインストールし、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構成にとって重要ではありません。

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

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

ロールに\ ``readonly``
が含まれるPGDインスタンスは、ロジカルスタンバイノード
``pause_in_standby``
設定でPGDノードグループに参加します。昇格の対象です。

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

ロールに\ ``witness`` が含まれるPGDインスタンスは、監視ノードです。

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

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

以下の設定は、クラスター内のすべてのPGDインスタンスに均一に設定されるように、通常は\ ``cluster_vars``
で設定されます。場合によっては、 ``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_node_groups``
で記載されているグループの名前に\ ``bdr_child_group``
が設定されている場合、 ``bdr_node_group``
の代わりにそのグループに参加します。

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

この設定は `commit scopes <https://www.enterprisedb.com/docs/pgd/latest/reference/commit-scopes/>`_ のオプショナルリストです

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は既存のコミットスコープをそのままにしておきます。

その他のノート
--------------

フック
^^^^^^

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

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

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

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

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