Two data groups, active-active
==============================

2つのデータグループパターンは、地理的に離れた2つのデータセンターにまたがり、それぞれがローカルの高可用性HAのために独自の独立したRaftコンセンサスグループを実行しています。グループごとに3つ以上のデータノードがある場合、各グループは自分のサイト内でマジョリティベースのコミットスコープを使用できます。

両方のデータセンターは、ローカルの読み取りと書き込みを同時に提供し、グループ間のレプリケーションにより、両方の場所を最新の状態に保ちます。

.. figure:: /images/two-data-groups.png
   :width: 70% 
   :alt: Two data groups topology

   Two data groups topology

図の凡例
--------

シンボルは、ノードタイプ、グループコンテナ、および接続タイプを表します。

.. figure:: /images/legend.png
   :width: 70% 
   :alt: Diagram legend showing node types, group containers, and connection types

   Diagram legend showing node types, group containers, and connection
   types

このパターンを使用する場合
--------------------------

このパターンは、金融サービス、医療、および2つのアクティブな場所にまたがるデータ損失ゼロのジオレプリケーションを必要とするアプリケーションに適しています。どちらのデータセンターも、競合の解決と同時に書き込みを提供し、場所を超えて真のアクティブ-アクティブオペレーションを提供します。

このパターンには次のような利点があります。

- 真のディザスターリカバリーを提供し、完全なデータセンターDCの障害を乗り切ります。

- アクティブ-アクティブで実行され、両方のDCがローカルレイテンシーの読み取りおよび書き込みを処理します。

- コンプライアンス要件のための地理的冗長性。

- ローカルルーティングでは、各DCはほとんどの操作で独立して動作します。

注意すべき制限がいくつかあります。

- オプティミスティックなクロスリージョンの一貫性処理では、競合は避けられません。

- DC障害時の書き込みレイテンシーとゼロデータ損失は緊張しています。コミットスコープが強くなると、レイテンシーが増加します。

- RaftマジョリティDC損失がないと、グローバル割り当てシーケンスgallocは、最終的に割り当てられたレンジとブロックを使い果たします。

- グローバルルーティングは使用できません。
  1つのDCが失われると、クラスター全体のRaftマジョリティが壊れます。

Raftマジョリティとgallocの制限は、以下で説明するように、監視の場所を追加することにより対処できます。

監視の場所の追加
----------------

単一の監視ノードを含む3番目の場所を追加することにより、Raftマジョリティとgallocの制限が解決されます。
WitnessはRaftコンセンサスに参加しますが、ユーザーデータを保存しません。奇数のクォーラム7つの投票者6つのデータノードと1つの監視により、クラスターは1つのDCが失われた場合でもRaftマジョリティを維持し、グローバルルーティングを復元し、gallocシーケンスが割り当てられたレンジを使い果たさないようにします。

その構成は自分自身でローカルHAを実現できないため、グループごとの監視なしでグループごとに2つのデータノードのみを使用する場合にも、監視の場所が必要です。

.. figure:: /images/two-data-groups-witness.png
   :width: 70% 
   :alt: Two data groups with witness topology

   Two data groups with witness topology

このパターンに推奨されるコミットスコープ
----------------------------------------

- **マジョリティプロテクト**
  グループ内のマジョリティノードへの同期複製。実稼働使用に最も一般的に推奨されるスコープ。

- **クォーラムコミット**
  ノードがローカルにコミットする前に、すべての参加ノードにわたってコミット決定を調整し、コミットする前に両方のリージョンにわたってトランザクションが持続することを保証します。決済やコアバンキングなど、厳密な分散一貫性を必要とするワークロードに推奨されます。
  ``MAJORITY FOR EACH GROUP IN CLUSTER QUORUM COMMIT ABORT ON (timeout = 6s)``
  を使用します。これは、新しい書き込みリーダーが、以前のリーダーによって確認された最新のコミットデータを持つことを保証します。

- **CAMO** グループごとに2つのデータノードと1つの監視を使用する場合、
  CAMOは同期レプリケーションを介した厳密に1回のトランザクション保証を追加します。

- **ローカルプロテクト**
  ローカルノードのみの耐久性を備えた非同期レプリケーション。実稼働環境での使用はお勧めしません。

コミットスコープは、パフォーマンス、耐久性、一貫性、スケーラビリティにわたってさまざまなトレードオフを行います。

.. figure:: /images/two-data-group-behavior.png
   :width: 70% 
   :alt: Two data groups behavior diagram

   Two data groups behavior diagram
