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バージョンの展開を積極的にサポートまたはテストしなくなりました。