Optimizing subscriber-only groups#

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

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

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

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

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

  • データノードのサブグループはありません。

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

この場合、加入者専用グループのノードは自動的にフルメッシュトポロジに戻ります。

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

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

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

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

他の非加入者専用グループの書き込みリーダーノードは、加入者専用グループのグループリーダーに変更を複製します。他のノードは、自分のグループ内と他のデータグループの両方で、自分のデータグループ内でのみ複製します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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.