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