EDB Postgres Distributed configuration

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

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

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

はじめに

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

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

これは PGD documentation のオプションのリストです

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は、PGDクラスターセットアッププロセス中に、 bdr-node-pre-creation、bdr-post-group-creation、および bdr-pre-group-join commit scopes を呼び出します。

データベースの照合

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

古いバージョンのPGD

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