Proxies, Raft, and Raft subgroups

PGDは、最上位グループがPGDインストール内のすべてのデータノードにまたがるRaftモデルを使用してメタデータを管理します。 Raftリーダーはトップレベルグループによって選出され、トップレベルグループの状態をグループ内の他のすべてのノードに伝播します。

トップレベルグループの特定のオペレーションでは、Raftリーダーを確立し、接続する必要があります。これらの操作の例には、ノードの追加と削除、

ローカルシーケンスからgallocシーケンスへの変換 シーケンスの範囲の割り当てが含まれます。

また、トップレベルグループ内のノードの絶対多数(それらの半分と1つ)が互いに到達できる必要があることも意味します。したがって、5つのノードを持つトップレベルグループでは、Raftリーダーを確立するには、少なくとも3つのノードが互いに到達可能である必要があります。

プロキシルーティング

Raftも使用する機能の1つはプロキシルーティングです。プロキシルーティングでは、プロキシがノードグループ内のデータノードへの書き込みを調整できる必要があります。このデータノードは書き込みリーダーです。書き込みリーダーがオフラインになった場合、接続されたアプリケーションの継続性を維持するために、プロキシはデータノードによって選択された新しい書き込みリーダーに切り替えられる必要があります。

PGD 5ではノードグループごとにプロキシルーティングを構成できますが、推奨される構成は グローバル および ローカル ルーティングです。

グローバルルーティング

グローバルルーティングは、トップレベルグループを使用してプロキシルーティングを管理します。グループ内のすべての書き込み可能なデータノード(監視またはサブスクライブ専用ノードではない)は、すべてのプロキシの書き込みリーダーになる資格があります。トップレベルグループ内のプロキシへの接続は、トップレベルグループ内のデータノードにルーティングされます。

グローバルルーティングでは、トップレベルグループ全体に1つの書き込みリーダーしかありません。

ローカルルーティング

ローカルルーティングは、多くの場合場所にマッピングされるサブグループを使用して、サブグループ内のプロキシルーティングを管理します。ローカルルーティングは、書き込みを地理的に分離するためによく使用されます。トップレベルのコンセンサスが失われた場合でも、ルーティングを継続することが重要です。

これは、PGDでは、トップレベルのコンセンサスが失われた場合でも、クエリと非同期データ操作(DML)を機能させるためです。ただし、グローバルルーティングの場合と同様に、トップレベルのコンセンサスを使用すると、そのコンセンサスが失われたときに新しい書き込みリーダーを選択できないことを意味します。ローカルグループは、独立したコンセンサスメカニズムとその複雑さを追加せずに、トップレベルのコンセンサスに頼ることはできません。

PGD 5では、この問題にエレガントに対処するために、サブグループRaftサポートが導入されました。サブグループラフトのサポートにより、PGDトップレベルグループのサブグループは、必要なリーダーを独立して選出できます。彼らは、他のサブグループまたはトップレベルのRaftコンセンサスとは無関係に書き込みリーダーを選択できる委任されたRaftグループを形成することによってこれを行います。サブグループ内のプロキシへの接続は、サブグループ内のデータノードにルーティングされます。

ローカルルーティングでは、サブグループごとに書き込みリーダーがあります。

詳細情報

  • Raft subgroups and TPA は、Trusted Postgres ArchitectでデプロイするときにPGDでRaftサブグループを有効にする方法を示しています。

  • Working with Raft subgroups and PGD CLI は、PGD CLIがRaftサブグループの存在とステータスについてどのようにレポートするかを示します。

  • Migrating to Raft subgroups は、既存のインストールを移行し、TPAなしでRaftサブグループを有効にするためのガイドです。

  • Raft elections in depth は、Raftを使用して書き込みリーダーが選出される方法を詳細に調べます。