EDB Postgres Distributed configuration#
TPAは、 EDB Postgres DistributedPGD、旧名BDR双方向レプリケーションバージョン3.7、4.x、および5.xをインストールおよび構成できます。
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ではサポートされていません。
構成設定#
以下で説明する設定は、クラスター内のすべての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は、 PGDクラスターセットアッププロセス中にbdr-node-pre-creation、bdr-post-group-creation、およびbdr-pre-group-join
TPA hooks を呼び出します。
データベースの照合順序#
TPAは、クラスター内のすべてのインスタンスのPGDデータベースが同じ照合順序LC_COLLATE設定があることを確認します。同じPGDクラスター内のデータベースに異なる照合順序があると、データ損失のリスクが発生します。