31.3. ネットワークパーティションリカバリの例
以下の例は、ネットワークパーティションが Red Hat JBoss Data Grid クラスターでどのように実行および処理され、結果的にマージされるかを示しています。次のシナリオ例は、詳細に説明されています。
numOwners
が 3 に設定された分散 4 ノードクラスター (「NumOwners が 3 の分散 4 ノードキャッシュの例」を参照)numOwners
が 2 に設定された分散 4 ノードクラスター (「NumOwners が 2 の分散 4 ノードキャッシュの例」を参照)numOwners
が 3 に設定された分散 5 ノードクラスター (「NumOwners が 3 の分散 5 ノードキャッシュの例」を参照)numOwners
が 4 に設定されたレプリケート 4 ノードクラスター (「NumOwners が 4 のレプリケーション 4 ノードキャッシュの例」を参照)numOwners
が 5 に設定されたレプリケート 5 ノードクラスター (「NumOwners が 5 のレプリケーション 5 ノードキャッシュの例」を参照)numOwners
が 8 に設定されたレプリケート 8 ノードクラスター (「NumOwners が 8 のレプリケーション 8 ノードキャッシュの例」を参照)
31.3.1. NumOwners が 3 の分散 4 ノードキャッシュの例
最初のシナリオ例には、4 つのデータエントリー (
k1
、k2
、k3
、および k4
) を含む 4 ノード分散キャッシュが含まれます。このキャッシュでは、numOwners
が 3 と等しくなります。つまり、各データエントリーごとに、キャッシュ内のさまざまなノードの 3 つのコピーが必要です。
図31.1 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ
図で示されたように、ネットワークパーティションの実行後は、ノード 1 とノード 2 がパーティション 1 を形成し、ノード 3 とノード 4 がパーティション 2 を形成します。分割後に、2 つのパーティションは劣化モードになります (図では網かけ表示されたノードにより表されます)。これは、どちらのパーティションでも、最後の安定したビューから 3 つ (
numOwners
の値) 以上のノードが残っていないためです。結果として、4 つのエントリー (k1
、k2
、k3
、および k4
) は読み書きできません。新しいエントリーはいずれかの劣化パーティションで書き込みできます (どちらのパーティションでもエントリーの 3 つのコピーを格納できません)。
図31.2 パーティションのマージ後のキャッシュ
JBoss Data Grid は結果的に、分割された 2 つのパーティションをマージします。状態転送は不要であり、マージされた新しいキャッシュは利用可能モードになります (4 つのノードと 4 つのデータエントリー (
k1
、k2
、k3
、および k4
) から構成されます)。
31.3.2. NumOwners が 2 の分散 4 ノードキャッシュの例
2 つ目のシナリオ例には、4 つのノードから構成される分散キャッシュが含まれます。このシナリオでは、
numOwners
が 2 となり、4 つのデータエントリー (k1
、k2
、k3
、および k4
) それぞれがキャッシュ内に 2 つのコピーを持ちます。
図31.3 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ
ネットワークパーティションの実行時に、パーティション 1 および 2 は劣化モードになります (図では網かけ表示されたノードとして表されます)。各パーティション内では、エントリーは読み取るか、または書き込みことができます (両方のコピーが同じパーティション内にある場合)。パーティション 1 では、データエントリー
k1
は読み書きできます (numOwners
が 2 であり、エントリーの両方のコピーがパーティション 1 に保持されるため)。パーティション 2 では、同じ理由により k4
は読み書きできます。エントリー k2
および k3
は両方のパーティションで利用できません (いずれのパーティションにもこれらのエントリーのすべてのコピーが含まれないため)。新しいエントリー k5
は、k5
の両方のコピーを所有するパーティションにのみ書き込むことができます。
図31.4 パーティションのマージ後のキャッシュ
JBoss Data Grid は結果的に、分割された 2 つのパーティションを 1 つのキャッシュにマージします。状態転送は不要であり、キャッシュは利用可能モードに戻ります (4 つのノードと 4 つのデータエントリー (
k1
、k2
、k3
、および k4
) から構成されます)。
31.3.3. NumOwners が 3 の分散 5 ノードキャッシュの例
3 つ目のシナリオ例には、5 つのノードがあり、
numOwners
が 3 に等しい分散キャッシュが含まれます。
図31.5 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ
ネットワークパーティションの実行後に、キャッシュは 2 つのパーティションに分割されます。パーティション 1 にはノード 1、ノード 2、およびノード Node 3 が含まれ、パーティション 2 にはノード 4 とノード 5 が含まれます。パーティション 2 は、キャッシュ内のノードの合計の過半数を含まないため劣化モードになります。パーティション 1 は、ノードの過半数を含み、
numOwners
ノードよりも少ない数を失ったため、利用可能モードのままになります。
このパーティションは劣化モードであり、データのすべてのコピーを所有できないため、新しいエントリーをパーティション 2 に追加することはできません。
図31.6 パーティション 1 の再調整と別のエントリーの追加
パーティションの分割後に、パーティション 1 はノードの過半数を保持するため、不明なエントリーを置き換えるコピーを作成することによりパーティション自体を再調整できます。上記の図に示されたように、再調整を行うと、キャッシュ内の各エントリーの 3 つのコピーを確保できます (
numOwners
は 3)。結果として、3 つのそれぞれのノードにはキャッシュ内の各エントリーのコピーが含まれます。次に、新しいエントリー (k6
) をキャッシュに追加します。numOwners
値は引き続き 3 であり、パーティション 1 には 3 つのノードがあるため、各ノードには k6
のコピーが含まれます。
図31.7 パーティションのマージ後のキャッシュ
結果的に、パーティション 1 および 2 が 1 つのキャッシュにマージされます。各データエントリーには 3 つのコピーしか必要ないため (
numOwners
=3)、JBoss Data Grid はノードを再調整し、データエントリーがキャッシュ内の 4 つのノード間で分散されるようにします。マージされた新しいキャッシュは完全に利用可能になります。
31.3.4. NumOwners が 4 のレプリケーション 4 ノードキャッシュの例
4 つ目のシナリオ例には、4 つのノードがあり、
numOwners
が 4 に等しいレプリケートキャッシュが含まれます。
図31.8 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ
ネットワークパーティションの実行後に、パーティション 1 にはノード 1 とノード 2 が含まれ、ノード 3 とノード 4 はパーティション 2 に含まれます。両方のパーティションは、過半数のノードを含まないため、劣化モードになります。すべての 4 つのキー (
k1
、k2
、k3
、および k4
) は読み書きできません。これは、2 つのパーティションのどちらも 4 つのキーのすべてのコピーを所有しないためです。
図31.9 パーティションのマージ後のキャッシュ
JBoss Data Grid は結果的に、分割された 2 つのパーティションを 1 つのキャッシュにマージします。状態転送は不要であり、キャッシュは利用可能モードで元の状態に戻ります (4 つのノードと 4 つのデータエントリー (
k1
、k2
、k3
、および k4
) から構成されます)。
31.3.5. NumOwners が 5 のレプリケーション 5 ノードキャッシュの例
5 つ目のシナリオ例には、5 つのノードがあり、
numOwners
が 5 に等しいレプリケーションキャッシュが含まれます。
図31.10 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ
ネットワークパーティションの実行後に、キャッシュは 2 つのパーティションに分割されます。パーティション 1 にはノード 1 とノード 2 が含まれ、パーティション 2 にはノード 3、ノード 4、およびノード 5 が含まれます。パーティション 1 は、ノードの過半数を含まないため劣化モードになります (網かけ表示されたノードで表されます)。ただし、パーティション 2 は利用可能なままになります。
図31.11 両方のパーティションが 1 つのキャッシュにマージされる
この例では、JBoss Data Grid がパーティションをマージすると、パーティション 2 (完全に利用可能) がプライマリーパーティションと見なされます。状態はパーティション 1 とパーティション 2 から転送されます。マージされたキャッシュは完全に利用可能になります。
31.3.6. NumOwners が 8 のレプリケーション 8 ノードキャッシュの例
6 つ目のシナリオは、8 つのノードがあり、
numOwners
が 8 に等しいレプリケートキャッシュを対象としています。
図31.12 ネットワークパーティション実行前とネットワークパーティション実行後のキャッシュ
ネットワークパーティションは、クラスターを 3 つのノードから構成されるパーティション 1 と 5 つのノードから構成されるパーティション 2 に分割します。パーティション 1 は劣化状態になりますが、パーティション 2 は利用可能なままです。
図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 のマージ
図31.14 ケース 1: パーティション 2A と 2B のマージ
パーティション分割されたネットワークの最初の解決法では、パーティション 2B の状態の情報をパーティション 2A にコピーします。結果としてパーティション 2 が作成され、ノード 5、 ノード 6、ノード 7、およびノード 8 が含まれます。新しくマージされたパーティションは利用可能になります。
図31.15 ケース 2: パーティション 1 と 2A のマージ
パーティション分割されたネットワークの 2 つ目の解決法では、パーティション 1 とパーティション 2A をマージします。マージされたパーティションには、ノード 1、ノード 2、ノード 3、ノード 4、およびノード 5 が含まれます。どちらのパーティションも最新の安定したトポロジーを含まないため、結果としてマージされたパーティションは劣化モードのままになります。
図31.16 ケース 3: パーティション 1 と 2B のマージ
パーティション分割されたネットワークの 3 つ目の解決法では、パーティション 1 とパーティション 2B をマージします。パーティション 1 は、パーティション 2B から状態情報を受け取り、マージされたパーティションは利用可能になります。
図31.17 ケース 4: パーティション 1、パーティション 2A、およびパーティション 2B のマージ
パーティション分割されたネットワークの 4 つ目の最後の解決法では、パーティション 1、パーティション 2A、およびパーティション 2B をマージしてパーティション 1 を形成します。状態はパーティション 2B からパーティション 1 および 2A の両方のパーティションに転送されます。結果的に、キャッシュには 8 つのノード (ノード 1、ノード 2、ノード 3、ノード 4、ノード 5、ノード 6、ノード 7、およびノード 8) が含まれ、キャッシュは利用可能になります。