Optimizing subscriber-only groups#

PGD 6以降では、 Overview of durability options のトポロジを最適化できるようになりました。

この最適化されたトポロジでは、少数の完全にアクティブなノードデータグループの書き込みリーダーが、加入者専用グループのグループリーダーに変更を複製します。これらのグループリーダーは、加入者専用グループの他のメンバーに変更を複製します。

最適化されたトポロジの要件#

クラスターに次のいずれかがある場合、このモデルを有効にすることはできません。

  • トップレベルグループの直接メンバーであるデータノード

  • データノードサブグループなし

  • プロキシルーティングが有効になっているデータノードサブグループはありません

これらのいずれかに該当する場合、加入者専用グループのノードはフルメッシュトポロジに戻ります。

新しいSOグループとノードレプリケーションの利点を得るには、データノードをサブグループに配置し、サブグループでプロキシルーティングを有効にする必要があります。

最適化されたトポロジの仕組み#

データノードにグループを使用するクラスターの場合、サブスクライバー専用グループは、より効率的なモデルを使用できます。このモデルは、 PGDプロキシの書き込みリーダーと同様に、サブスクライバ専用のグループリーダーを使用します。

各加入者専用グループは、そのグループリーダーを使用して、グループ内の他の加入者専用ノードに変更を複製します。グループリーダーは、入ってくる変更のレプリケーションプロキシとして機能します。

データグループの書き込みリーダーノードは、加入者専用グループのグループリーダーに変更を複製します。データグループ内の他のノードは、自分のデータグループ内のノードおよび他のデータグループのデータノードとのみ複製します。変更を加入者専用グループに直接複製しません。

加入者専用グループリーダー#

PGD 6以降では、各加入者専用グループに独自のグループリーダーが割り当てられます。これは、加入者専用グループには、独自のグループRaftコンセンサスメカニズムがないためです。代わりに、クラスターのトップレベルグループはRaftコンセンサスメカニズムを使用して、各加入者専用グループのグループリーダーの選択を処理します。このグループリーダーの選択は、トポロジ最適化設定に関係なく、PGD 6ではデフォルトでオンになっています。

加入者専用グループのグループリーダーは定期的に接続性がテストされ、使用できない場合、トップレベルグループの投票ノードは、加入者専用グループから新しい加入者専用ノードを選択して、グループリーダーになります。次に、新しいグループリーダーが選択されます。

最適化されたテクノロジーがオフになっているため、この選択はレプリケーショントポロジに影響を与えません。最適化されたトポロジがないと、すべてのデータノードがクラスター内の他のすべてのノードに変更をレプリケートします。

最適化されたトポロジのグループリーダー#

最適化されたトポロジが有効になると、サブスクライバ専用グループのグループリーダーのみがクラスター内の他のデータグループの書き込みリーダーから変更を受け取ります。グループリーダーは、これらの変更を加入者専用グループ内の他のノードに複製する責任を負います。

他の投票ノードは、加入者専用グループのノードからグループリーダーを選択します。グループリーダーが選択されると、クラスター全体が変更を認識し、データグループの書き込みリーダーは、この新しく選択されたグループリーダーノードにのみデータを複製します。データグループ内の他のデータノードは、加入者専用グループのノードにデータを複製しません。

このアプローチは、多数のSOノードが存在する場合に発生する可能性のあるアクティブな接続の爆発を回避し、レプリケーショントラフィックの量を削減します。

サブスクライバ専用ノードとグループは、PGDツリートポロジのビルディングブロックを形成します。

最適化されたモデルの有効化#

デフォルトでは、 PGD 6はフルメッシュトポロジを強制します。これは、ここで説明する最適化がオフであることを意味します。最適化されたトポロジを有効にするには、データノードをサブグループに配置し、サブグループでプロキシルーティングを有効にする必要があります。次に、 GUC bdr.force_full_mesh をoff に設定して、最適化をアクティブにできるようにします。

注釈

このGUCは、各データノードと各ノードの`postgresql.conf` ファイルで設定する必要があります、変更を有効にするには再起動します。

最適化されたトポロジの要件が満たされない場合、加入者専用グループのノードはフルメッシュトポロジに戻ります。これが発生すると、クラスターメッセージ内のノードのログで、次のような最適化が不可能な理由を見つけます。

データノードがトップレベルのノードグループの一部である場合

node: <nodename> is part of top-level nodegroup: <toplevelgroupname>: changing to full mesh".

データグループでプロキシルーティングが有効になっていない場合

node: <nodename> is in nodegroup: <nodegroupname> that does not have proxy routing: changing to full mesh.