31.5. ネットワークパーティションリカバリの例

以下の例は、ネットワークパーティションが Red Hat JBoss Data Grid クラスターでどのように実行および処理され、結果的にマージされるかを示しています。次のシナリオ例は、詳細に説明されています。
  1. numOwners が 3 に設定された分散 4 ノードクラスター (「NumOwners が 3 の分散 4 ノードキャッシュの例」を参照)
  2. numOwners が 2 に設定された分散 4 ノードクラスター (「NumOwners が 2 の分散 4 ノードキャッシュの例」を参照)
  3. numOwners が 3 に設定された分散 5 ノードクラスター (「NumOwners が 3 の分散 5 ノードキャッシュの例」を参照)
  4. numOwners が 4 に設定されたレプリケート 4 ノードクラスター (「NumOwners が 4 のレプリケーション 4 ノードキャッシュの例」を参照)
  5. numOwners が 5 に設定されたレプリケート 5 ノードクラスター (「NumOwners が 5 のレプリケーション 5 ノードキャッシュの例」を参照)
  6. numOwners が 8 に設定されたレプリケート 8 ノードクラスター (「NumOwners が 8 のレプリケーション 8 ノードキャッシュの例」を参照)

31.5.1. NumOwners が 3 の分散 4 ノードキャッシュの例

最初のシナリオ例には、4 つのデータエントリー (k1k2k3、および k4) を含む 4 ノード分散キャッシュが含まれます。このキャッシュでは、numOwners が 3 と等しくなります。つまり、各データエントリーごとに、キャッシュ内のさまざまなノードの 3 つのコピーが必要です。
Cache before and after a network partition occurs

図31.1 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ

図で示されたように、ネットワークパーティションの実行後は、ノード 1 とノード 2 がパーティション 1 を形成し、ノード 3 とノード 4 がパーティション 2 を形成します。分割後に、2 つのパーティションは劣化モードになります (図では網かけ表示されたノードにより表されます)。これは、どちらのパーティションでも、最後の安定したビューから 3 つ (numOwners の値) 以上のノードが残っていないためです。結果として、4 つのエントリー (k1k2k3、および k4) は読み書きできません。新しいエントリーはいずれかの劣化パーティションで書き込みできます (どちらのパーティションでもエントリーの 3 つのコピーを格納できません)。
Cache after the partitions are merged

図31.2 パーティションのマージ後のキャッシュ

JBoss Data Grid は結果的に、分割された 2 つのパーティションをマージします。状態転送は不要であり、マージされた新しいキャッシュは利用可能モードになります (4 つのノードと 4 つのデータエントリー (k1k2k3、および k4) から構成されます)。

31.5.2. NumOwners が 2 の分散 4 ノードキャッシュの例

2 つ目のシナリオ例には、4 つのノードから構成される分散キャッシュが含まれます。このシナリオでは、numOwners が 2 となり、4 つのデータエントリー (k1k2k3、および k4) それぞれがキャッシュ内に 2 つのコピーを持ちます。
Cache before and after a network partition occurs

図31.3 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ

ネットワークパーティションの実行時に、パーティション 1 および 2 は劣化モードになります (図では網かけ表示されたノードとして表されます)。各パーティション内では、エントリーは読み取るか、または書き込みことができます (両方のコピーが同じパーティション内にある場合)。パーティション 1 では、データエントリー k1 は読み書きできます (numOwners が 2 であり、エントリーの両方のコピーがパーティション 1 に保持されるため)。パーティション 2 では、同じ理由により k4 は読み書きできます。エントリー k2 および k3 は両方のパーティションで利用できません (いずれのパーティションにもこれらのエントリーのすべてのコピーが含まれないため)。新しいエントリー k5 は、k5 の両方のコピーを所有するパーティションにのみ書き込むことができます。
Cache after partitions are merged

図31.4 パーティションのマージ後のキャッシュ

JBoss Data Grid は結果的に、分割された 2 つのパーティションを 1 つのキャッシュにマージします。状態転送は不要であり、キャッシュは利用可能モードに戻ります (4 つのノードと 4 つのデータエントリー (k1k2k3、および k4) から構成されます)。

31.5.3. NumOwners が 3 の分散 5 ノードキャッシュの例

3 つ目のシナリオ例には、5 つのノードがあり、numOwners が 3 に等しい分散キャッシュが含まれます。
Cache before and after a network partition occurs

図31.5 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ

ネットワークパーティションの実行後に、キャッシュは 2 つのパーティションに分割されます。パーティション 1 にはノード 1、ノード 2、およびノード Node 3 が含まれ、パーティション 2 にはノード 4 とノード 5 が含まれます。パーティション 2 は、キャッシュ内のノードの合計の過半数を含まないため劣化モードになります。パーティション 1 は、ノードの過半数を含み、 numOwners ノードよりも少ない数を失ったため、利用可能モードのままになります。
このパーティションは劣化モードであり、データのすべてのコピーを所有できないため、新しいエントリーをパーティション 2 に追加することはできません。
Partition 1 rebalances and then another entry is added to the partition

図31.6 パーティション 1 の再調整と別のエントリーの追加

パーティションの分割後に、パーティション 1 はノードの過半数を保持するため、不明なエントリーを置き換えるコピーを作成することによりパーティション自体を再調整できます。上記の図に示されたように、再調整を行うと、キャッシュ内の各エントリーの 3 つのコピーを確保できます (numOwners は 3)。結果として、3 つのそれぞれのノードにはキャッシュ内の各エントリーのコピーが含まれます。次に、新しいエントリー (k6) をキャッシュに追加します。numOwners 値は引き続き 3 であり、パーティション 1 には 3 つのノードがあるため、各ノードには k6 のコピーが含まれます。
Cache after partitions are merged

図31.7 パーティションのマージ後のキャッシュ

結果的に、パーティション 1 および 2 が 1 つのキャッシュにマージされます。各データエントリーには 3 つのコピーしか必要ないため (numOwners=3)、JBoss Data Grid はノードを再調整し、データエントリーがキャッシュ内の 4 つのノード間で分散されるようにします。マージされた新しいキャッシュは完全に利用可能になります。

31.5.4. NumOwners が 4 のレプリケーション 4 ノードキャッシュの例

4 つ目のシナリオ例には、4 つのノードがあり、numOwners が 4 に等しいレプリケートキャッシュが含まれます。
Cache Before and After a Network Partition

図31.8 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ

ネットワークパーティションの実行後に、パーティション 1 にはノード 1 とノード 2 が含まれ、ノード 3 とノード 4 はパーティション 2 に含まれます。両方のパーティションは、過半数のノードを含まないため、劣化モードになります。すべての 4 つのキー (k1k2k3、および k4) は読み書きできません。これは、2 つのパーティションのどちらも 4 つのキーのすべてのコピーを所有しないためです。
Cache After Partitions Are Merged

図31.9 パーティションのマージ後のキャッシュ

JBoss Data Grid は結果的に、分割された 2 つのパーティションを 1 つのキャッシュにマージします。状態転送は不要であり、キャッシュは利用可能モードで元の状態に戻ります (4 つのノードと 4 つのデータエントリー (k1k2k3、および k4) から構成されます)。

31.5.5. NumOwners が 5 のレプリケーション 5 ノードキャッシュの例

5 つ目のシナリオ例には、5 つのノードがあり、numOwners が 5 に等しいレプリケーションキャッシュが含まれます。
Cache before and after a network partition occurs

図31.10 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ

ネットワークパーティションの実行後に、キャッシュは 2 つのパーティションに分割されます。パーティション 1 にはノード 1 とノード 2 が含まれ、パーティション 2 にはノード 3、ノード 4、およびノード 5 が含まれます。パーティション 1 は、ノードの過半数を含まないため劣化モードになります (網かけ表示されたノードで表されます)。ただし、パーティション 2 は利用可能なままになります。
Both Partitions Are Merged Into One Cache

図31.11 両方のパーティションが 1 つのキャッシュにマージされる

この例では、JBoss Data Grid がパーティションをマージすると、パーティション 2 (完全に利用可能) がプライマリーパーティションと見なされます。状態はパーティション 1 とパーティション 2 から転送されます。マージされたキャッシュは完全に利用可能になります。

31.5.6. NumOwners が 8 のレプリケーション 8 ノードキャッシュの例

6 つ目のシナリオは、8 つのノードがあり、numOwners が 8 に等しいレプリケートキャッシュを対象としています。
Cache before and after a network partition occurs

図31.12 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ

ネットワークパーティションは、クラスターを 3 つのノードから構成されるパーティション 1 と 5 つのノードから構成されるパーティション 2 に分割します。パーティション 1 は劣化状態になりますが、パーティション 2 は利用可能なままです。
Partition 2 Further Splits into Partitions 2A and 2B

図31.13 パーティション 2 はさらにパーティション 2A と 2B に分割される

この時点で、別のネットワークパーティションはパーティション 2 に影響を与え、パーティション 2 はさらにパーティション 2A と 2B に分割されます。パーティション 2A にはノード 4 とノード 5 が含まれ、パーティション 2B にはノード 6、ノード 7、およびノード 8 が含まれます。パーティション 2A は、ノードの過半数を含まないため劣化モードになります。ただし、パーティション 2B は利用可能なままになります。
考えられる解決シナリオ

このシナリオでは 4 つのキャッシュの解決法があります。

  • ケース 1: パーティション 2A と 2B のマージ
  • ケース 2: パーティション 1 と 2A のマージ
  • ケース 3: パーティション 1 と 2B のマージ
  • ケース 4: パーティション 1、パーティション 2A、およびパーティション 2B のマージ
Case 1: Partitions 2A and 2B Merge

図31.14 ケース 1: パーティション 2A と 2B のマージ

パーティション分割されたネットワークの最初の解決法では、パーティション 2B の状態の情報をパーティション 2A にコピーします。結果としてパーティション 2 が作成され、ノード 5、 ノード 6、ノード 7、およびノード 8 が含まれます。新しくマージされたパーティションは利用可能になります。
Case 2: Partition 1 and 2A Merge

図31.15 ケース 2: パーティション 1 と 2A のマージ

パーティション分割されたネットワークの 2 つ目の解決法では、パーティション 1 とパーティション 2A をマージします。マージされたパーティションには、ノード 1、ノード 2、ノード 3、ノード 4、およびノード 5 が含まれます。どちらのパーティションも最新の安定したトポロジーを含まないため、結果としてマージされたパーティションは劣化モードのままになります。
Case 3: Partition 1 and 2B Merge

図31.16 ケース 3: パーティション 1 と 2B のマージ

パーティション分割されたネットワークの 3 つ目の解決法では、パーティション 1 とパーティション 2B をマージします。パーティション 1 は、パーティション 2B から状態情報を受け取り、マージされたパーティションは利用可能になります。
Case 4: Partition 1, Partition 2A, and Partition 2B Merge Together

図31.17 ケース 4: パーティション 1、パーティション 2A、およびパーティション 2B のマージ

パーティション分割されたネットワークの 4 つ目の最後の解決法では、パーティション 1、パーティション 2A、およびパーティション 2B をマージしてパーティション 1 を形成します。状態はパーティション 2B からパーティション 1 および 2A の両方のパーティションに転送されます。結果的に、キャッシュには 8 つのノード (ノード 1、ノード 2、ノード 3、ノード 4、ノード 5、ノード 6、ノード 7、およびノード 8) が含まれ、キャッシュは利用可能になります。