EDB Postgres Distributed configuration#

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

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

このドキュメントでは、 PGD構成のいくつかの側面について触れていますが、詳細の信頼できる説明については、 PGD documentation を参照してください。

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 は、選択したアーキテクチャに基づいて適切な値を生成します。

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 のオプショナルリストです

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

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 TPA hooks を呼び出します。

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

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

PGDの古いバージョン#

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