BDR configuration

TPAexecは、以前はBDR (双方向レプリケーション)バージョン3.6、3.7、4.x、および5.xとして知られていたPGD( Postgres Distributed )をインストールして構成できます。

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

このドキュメントではBDR構成のいくつかの側面に触れていますが、詳細については

PGD documentation を参照してください。

はじめに

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

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

インストール

TPAexecは、使用中のPostgres(Postgres、Postgres Extended、またはEPAS)のバージョンとフレーバーに応じて、正しいBDRパッケージをインストールします。

bdr_version を設定して、インストールするBDRのメジャーバージョン(3、4、5)を決定します。 bdr_package_version を設定して、インストールする正確なパッケージを決定します(例、最新の3.6.xをインストールするには「3.6*」)。

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

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

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

  • 参加するインスタンスごとにBDRノードを作成します( bdr.create_node()を使用)

  • bdr_node_groups に応じて1つ以上のBDRノードグループを作成します( bdr.create_node_group()を使用)

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

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

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

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

インスタンスロール

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

ロールにreadonly を持つBDRインスタンスは、昇格の対象となるロジカルスタンバイノード( pause_in_standby が設定されたBDRノードグループに参加します)です。

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

ロールにwitness を持つBDRインスタンスは監視ノードです。

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

構成設定

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

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

bdr_database

bdr_database (デフォルト:bdrdb)はBDRで初期化されます。

bdr_node_group

bdr_node_group の設定(デフォルト:クラスター名に基づく)は、インスタンスが含まれるBDRクラスターを識別します。また、外部コンポーネント(例: pgd-proxyまたはharp-proxy)の特定のクラスターを識別するためにも使用されます。

bdr_node_groups

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

一般に、 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 を指定できます。

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

bdr_child_group

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

bdr_commit_scopes

これは commit scopes のオプションのリストです

BDRデータベースに存在する必要があります( BDR 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は必要に応じてコミットスコープを作成、変更、または削除し、データベースが構成と一致するようにします。設定しない場合、既存のコミットスコープはそのままになります。

その他

フック

TPAexecは、 BDRクラスターのセットアッププロセス中に、 bdr-node-pre-creation、bdr-post-group-creation、およびbdr-pre-group-join

TPA hooks を呼び出します。

データベースの照合

TPAexecは、クラスタ内のすべてのインスタンスのBDRデータベースの照合(LC_COLLATE)設定が同じであることを確認します。同じBDRクラスター内のデータベースに異なる照合があると、データ損失のリスクがあります。

古いバージョンのBDR

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