6.6. パーティション処理


Red Hat Data Grid クラスターは、データが保存される多数のノードから構築されます。ノード障害の発生時にデータが失われないように、Red Hat Data Grid は Red Hat Data Grid parlance PROVISIONING-で複数のノードに同じ data xmvn-gitopscache エントリーをコピーします。このレベルのデータ冗長性は numOwners 設定属性で設定され、numOwners ノードが同時にクラッシュした限り、Red Hat Data Grid には利用可能なデータのコピーがあります。

ただし、numOwnersを超えるノードがクラスターから消えるという壊滅的な状況が発生する可能性があります。

スプリットブレイン
たとえば、ルーターのクラッシュにより、クラスターは 2 つ以上のパーティションに分割されるか、または個別に動作するサブクラスターに分割されます。このような場合、異なるパーティションから読み取り/書き込みを行う複数のクライアントが、同じキャッシュエントリーの異なるバージョンを参照し、多くのアプリケーションで問題があります。冗長ネットワークやIP ボンディングなど、スプリットブレインが発生する可能性を軽減する方法があることに注意してください。これらは、問題の発生期間のみを縮小します。
numOwners ノードを順番にクラッシュ
numOwners ノードが連続してクラッシュし、Red Hat Data Grid にクラッシュ間の状態を適切にリバランスする時間がない場合、結果は部分的なデータが失われることになります。

このセクションで説明されているパーティション処理機能により、スプリットブレインが発生したときに、キャッシュで実行できる操作を設定できます。Red Hat Data Grid は複数のパーティション処理ストラテジーを提供します。これは、Brewer の CAP 理論により、パーティションの有無を判断できます。以下は、指定されるストラテジーの一覧です。

Expand
ストラテジー詳細CAP

DENY_READ_WRITES

パーティションに特定のセグメントのすべての所有者がない場合、そのセグメント内のすべてのキーの読み取りと書き込みの両方が拒否されます。

一貫性

ALLOW_READS

このパーティションに存在する場合は特定のキーの読み取りを許可しますが、このパーティションにセグメントのすべての所有者が含まれている場合にのみ書き込みを許可します。これは、このパーティションで利用可能なものの、クライアントアプリケーションの観点から見えても決定論的ではない場合に一部のエントリーが読み取り可能であるため、一貫したアプローチです。

一貫性

ALLOW_READ_WRITES

各パーティションのエントリが分岐することを許可し、パーティションのマージ時に競合解決を試みます。

可用性

アプリケーションの要件によって、適切なストラテジーを決定する必要があります。たとえば、DENY_READ_WRITES は、高い整合性要件を持つアプリケーションにより適しています。つまり、システムからデータを読み取ったデータを正確にする必要があります。Red Hat Data Grid がベストエフォートキャッシュとして使用される場合、パーティションは完全に容認でき、ALLOW_READ_WRITES は一貫性を保つため、より適している可能性があります。

以下のセクションでは、Red Hat Data Grid が各パーティション処理ストラテジーの スプリットブレイン および 連続する失敗 を処理する方法を説明します。これには、マージ ポリシー を使用したパーティションマージ後の Red Hat Data Grid による自動競合解決がどのように使用できるかのセクションがあります。最後に、パーティション処理ストラテジーおよびマージポリシーの設定方法 を説明するセクションを説明します。

6.6.1. スプリットブレイン

スプリットブレインの状況では、各ネットワークパーティションは独自のJGroupsビューをインストールし、他のパーティションからノードを削除します。パーティションが互いに認識していないため、2つ以上のパーティションに分割されているかどうかを直接判断する方法はありません。代わりに、明示的な脱退メッセージを送信せずに1つ以上のノードがJGroupsクラスターから消えたときに、クラスターが分割されたと想定します。

6.6.1.1. 分割ストラテジー

このセクションでは、スプリットブレインが発生したときに各パーティション処理ストラテジーがどのように動作するかを詳細に説明します。

6.6.1.1.1. ALLOW_READ_WRITES

各パーティションは、AVAILABLE モードで残りのすべてのパーティションで、独立したクラスターとして機能します。つまり、各パーティションはデータの一部のみを確認でき、各パーティションはキャッシュに競合する更新を書き込む可能性があることを意味します。これらの競合をマージすると、ConflictManager と設定された EntryMergePolicy を利用することで自動的に解決されます。

6.6.1.1.2. DENY_READ_WRITES

分割が検出されると、各パーティションは即座にリバランスを開始しませんが、まずは代わりに DEGRADED モードになるかどうかを確認します。

  • 少なくとも1つのセグメントがすべての所有者を失った場合(最後のリバランスが終了してから少なくともnumOwnersノードが残っていることを意味します)、パーティションは DEGRADED モードに入ります。
  • 最新の安定したトポロジー に、パーティションに単純なノード (floor(numNodes/2) + 1) が含まれていない場合は、パーティションも DEGRADED モードになります。
  • それ以外の場合、パーティションは正常に機能し、リバランスを開始します。

安定したトポロジーは、リバランス操作が終了するたびに更新され、コーディネーターによって別のリバランスが不要であると判断されます。

これらのルールは、複数のパーティションが AVAILABLE モードになるようにし、他のパーティションが DEGRADED モードになるようにします。

パーティションが DEGRADED モードの場合、完全に所有されているキーへのアクセスのみを許可します。

  • このパーティション内のノード上のコピーをすべて持つエントリーのリクエスト(読み取りおよび書き込み)は異常な状態です。
  • 消えたノードによって部分的または完全に所有されているエントリの要求は、AvailabilityExceptionで拒否されます。

これにより、パーティションが同じキーに異なる値を書き込めないようにし(キャッシュの一貫性を保つ)、また、1 つのパーティションが他のパーティションで更新されたキーを読み取れないようにすることができます(古いデータはありません)。

強調を行うには、numOwners = 2 を使用した分散モードに設定されている初期クラスター M = {A, B, C, D} を検討してください。さらに、owners(k1) = {A,B}owners(k2) = {B,C}、およびowners(k3) = {C,D}となる3つのキーk1k2、および k3(キャッシュに存在するかどうかは不明)について考えてみます。次に、ネットワークは N1 = {A, B}N2 = {C, D} の 2 つのパーティションに分割され、DEGRADED モードに入り、以下のように動作します。

  • N1では、k1は読み取り/書き込みに使用でき、k2(部分的に所有)とk3(所有されていない)は使用できず、それらにアクセスすると、AvailabilityException が発生します。
  • N2 ではk1 および k2 は読み取り/書き込みには使用できません。k3 が利用できます。

パーティション処理プロセスの関連する要素として、スプリットブレインが発生すると、作成されるパーティションは、キーの所有権を算出するために元のセグメントマッピング(スプリットブレインの前に存在したもの)に依存します。k1k2、または k3 がすでに存在しているかどうかは重要で、それらの可用性は同じです。

さらに別の時点でネットワークが回復し、N1パーティションとN2パーティションがマージして最初のクラスターMに戻ると、Mは劣化モードを終了し、再び完全に使用可能になります。このマージ操作中、Mは再利用可能になったため、ConflictManager と設定された EntryMergePolicy を使用して、スプリットブレインの発生と検出の間に発生した可能性のある競合をチェックします。

別の例として、クラスターは O1 = {A, B, C} および O2 = {D} の 2 つのパーティションに分割して、パーティションO1が完全に使用可能になるようにすることができます(残りのメンバーのキャッシュエントリのバランスを取り直します)。ただし、パーティション O2 は分割を検出し、パフォーマンスが低下します。キーは完全に所有されていないため、AvailabilityExceptionによる読み取り操作または書き込み操作は拒否されます。

その後、O1 および O2 のパーティションが M にマージし直すと、ConflictManager は競合を解決しようとし、もう一度 D が完全に利用可能になります。

6.6.1.1.3. ALLOW_READS

パーティションは DENY_READ_WRITES と同じ方法で処理されます。ただし、パーティションが DEGRADED モードの場合に、部分的に所有されたキー上の読み取り操作は、AvailabilityException をスローしません。

6.6.1.2. 現在の制限

2 つのパーティションは、分離して開始できます。マージしない限り、一貫性のないデータの読み込み、書き込みを行うことができます。今後は、カスタムの可用性ストラテジーを許可します(例: 特定のノードがクラスターの一部であるか、または外部のマシンにアクセスできるかどうかを確認など)。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る