Consensus layer considerations

HARPは、分散制御システム(DCS)としても知られるコンセンサスレイヤーのさまざまな実装で動作できるように設計されています。

現在、次のDCS実装がサポートされています。

  • etcd - BDR

この情報は、サポートされているDCS実装とHARPの相互作用に固有です。

BDRドライバーの互換性

bdr ネイティブコンセンサスレイヤーは、 BDRバージョン 3.6.21 および 3.7.3 から利用できます。

投票クォーラムを維持するために、 BDR論理スタンバイノードはEDB Postgres分散クラスターでのコンセンサス通信に参加しません。 DCSクォーラム要件を満たすために、これらを合計ノードリストでカウントしないでください。

クォーラムの維持

どのアーキテクチャのクラスターでも、投票クォーラムを介してコンセンサスを維持するには、少なくともn/2 + 1個のノードが必要です。したがって、3ノードのクラスターは単一ノードの停止を許容でき、5ノードのクラスターは2ノードの停止を許容できます。コンセンサスが失われると、DCSが特定の場所のリードマスターであるノードを決定的に識別できないため、 HARPは動作不能になります。

その結果、どちらのDCSを選択しても、ノードの半分以上が常に_クラスター全体で_使用可能である必要があります。これは、DCSノードを2つ以上のデータセンターに分散する場合、重要な要素になる可能性があります。ネットワークパーティションは、投票過半数を維持できない場所でクォーラムを防止するため、 HARPが動作を停止します。

したがって、コンセンサスレイヤーを構築するときは、奇数のノード(最低3つ)が重要です。理想的なケースは、ノードを少なくとも3つの独立した場所に分散して、単一のネットワークパーティションがコンセンサスを混乱させないようにすることです。

1つの構成例は、2つのデータセンターにプライマリBDRノードと一致する2つのDCSノードを指定し、他の場所に5番目のDCSノード( BDRなど)を指定することです。このような設計を使用すると、2つのBDRデータセンター間のネットワークパーティションは、独立して配置されたノードのおかげでコンセンサスを混乱させません。

マルチコンセンサスバリアント

HARPは、設定されたロケーションごとに1つのリードマスターを想定しています。通常、各場所は location 構成設定を使用してHARPで指定されます。ロケーションごとに個別のDCSクラスターを作成することにより、 HARPとは無関係にこの動作をエミュレートできます。

これを行うには、目的の場所ごとに異なるDCS接続ターゲットを使用するようにconfig.yml でHARPを構成します。

DC-AのHARPノードは次のようなものを使用します。

location: dca
dcs:
  driver: etcd
  endpoints:
    - dcs-a1:2379
    - dcs-a2:2379
    - dcs-a3:2379

DC-Bは、正規の場所にあるノードに対応する異なるホスト名を使用しますが:

location: dcb
dcs:
  driver: etcd
  endpoints:
    - dcs-a1:2379
    - dcs-a2:2379
    - dcs-a3:2379

このデザインには異なるデータセンター間のDCS通信がないため、それらの間のネットワークパーティションはHARPオペレーションに影響しません。この結果、 HARPは他の場所のノードを完全に認識せず、各場所は本質的に別個のHARPクラスターとして動作します。

BDRをDCSとして使用する場合、 BDRはすべての参加者ノードにわたってコンセンサスレイヤーを維持するため、これは不可能です。

このアプローチの潜在的な欠点は、 harpctl が現在の場所の外部のノードと対話できないことです。ノード情報の取得、リードマスターの取得または設定、または他の場所をターゲットとするその他の操作を実行することはできません。基本的に、この組織はharpctl への--location パラメーターを使用不可にします。

TPAexecとコンセンサス

これらの考慮事項もTPAexecに統合されています。 etcdを使用してクラスターをデプロイすると、ロケーションごとに個別のDCSクラスターが構築され、厳密な一貫性を維持しながら高可用性が促進されます。

したがって、この構成例では、 first の場所に割り当てられたDCSノードをグループ化し、 second の場所は別のクラスターです。

cluster_vars:
  failover_manager: harp
  harp_consensus_protocol: etcd

locations:
  - Name: first
  - Name: second

この動作をオーバーライドするには、特定のグループ化を強制するようにharp_location を暗黙的に構成します。

したがって、この例では、すべてのetcdノードを単一の凝集DCSレイヤーに返します。

cluster_vars:
  failover_manager: harp
  harp_consensus_protocol: etcd

locations:
  - Name: first
  - Name: second
  - Name: all_dcs

instance_defaults:
  vars:
    harp_location: all_dcs

harp_location オーバーライドは、従来のデータセンターよりもリージョンのアベイラビリティーゾーンを優先するAmazonなどのクラウドプロバイダーを使用する場合、特定のノードグループを優先するためにも必要になる場合があります。