7.2. キャッシュの可用性およびデグレードモード
DENY_READ_WRITES または ALLOW_READS パーティション処理ストラテジーのいずれかを使用するように設定すると、データの整合性を維持するために、Data Grid はキャッシュを DEGRADED モードに設定できます。
Data Grid は、以下の条件が満たされる場合に、パーティション内のキャッシュを DEGRADED モードに設定します。
-
1 つ以上のセグメントですべての所有者が失われている。
これは、分散キャッシュの所有者の数と同じか、それ以上の数のノードがクラスターを離れている場合に生じます。 -
パーティションに大多数のノードがない。
大多数のノードとは、最新の安定したトポロジー (クラスターのリバランス操作が最後に正常に完了した時) からのクラスター内のノード合計数の過半数です。
キャッシュが DEGRADED モードの場合、Data Grid は以下を行います。
- エントリーのすべてのレプリカが同じパーティションにある場合にのみ、読み取りおよび書き込み操作を許可する。
パーティションにエントリーのすべてのレプリカが含まれていない場合は、読み取り操作および書き込み操作を拒否し、
AvailabilityExceptionを出力する。注記ALLOW_READSストラテジーを使用すると、Data Grid はDEGRADEDモードのキャッシュで読み取り操作を許可します。
DEGRADED モードは、異なるパーティションの同じキーに対して書き込み操作が行われないようにすることで一貫性を保証します。さらに、DEGRADED モードは、キーが 1 つのパーティションで更新され、別のパーティションで読み取られる場合に発生する古い読み取り操作を防ぎます。
すべてのパーティションが DEGRADED モードにある場合は、クラスターに最新の安定したトポロジーからの過半数のノードが含まれ、各エントリーに少なくとも 1 つのレプリカがある場合にのみ、マージ後にキャッシュが再び利用可能になります。クラスターに各エントリーのレプリカが少なくとも 1 つある場合、キーが失われることはなく、Data Grid はクラスターのリバランス中に所有者の数に基づいて新しいレプリカを作成できます。
あるパーティションで DEGRADED モードに設定されている間、場合によっては、別のパーティションのキャッシュを引き続き利用できます。これが生じると、利用可能なパーティションは通常通りにキャッシュ操作を続行し、Data Grid はそれらのノード間でデータのリバランスを試行します。キャッシュを 1 つにマージするために、Data Grid は必ず利用可能なパーティションから DEGRADED モードのパーティションに状態を転送します。
7.2.1. 低下したキャッシュのリカバリー例 リンクのコピーリンクがクリップボードにコピーされました!
このトピックでは、Data Grid が DENY_READ_WRITES パーティション処理ストラテジーを使用するキャッシュを持つ分割されたクラスターからリカバリーする方法を示しています。
たとえば、Data Grid クラスターには 4 つのノードがあり、各エントリーに対してレプリカが 2 つある分散キャッシュが含まれています (owners=2)。キャッシュには、k1、k2、k3、および k4 の 4 つのエントリーがあります。
DENY_READ_WRITES ストラテジーでは、クラスターがパーティションに分割されると、Data Grid はエントリーのすべてのレプリカが同じパーティションにある場合にのみキャッシュ操作を許可します。
以下の図では、キャッシュがパーティションに分割されている間、Data Grid はパーティション 1 上の k1 およびパーティション 2 の k4 の読み取りおよび書き込み操作を許可します。パーティション 1 またはパーティション 2 の k2 と k3 のにはレプリカが 1 つしかないため、Data Grid はこれらのエントリーの読み取りおよび書き込み操作を拒否します。
ネットワーク条件により、ノードが同じクラスタービューに再ジョインするのが許可されると、Data Grid は状態の送信なしにパーティションをマージし、通常のキャッシュ操作を回復します。
7.2.2. ネットワークパーティション時のキャッシュ可用性の確認 リンクのコピーリンクがクリップボードにコピーされました!
ネットワークパーティション時に、Data Grid クラスターのキャッシュが AVAILABLE モードまたは DEGRADED モードにあるかどうかを判別します。
Data Grid クラスターがパーティションに分割されると、それらのパーティションのノードは DEGRADED モードに入り、データの一貫性を確保できます。DEGRADED モードでは、クラスターは可用性の喪失につながるキャッシュ操作を許可しません
手順
以下のいずれかの方法で、ネットワークパーティションでクラスター化されたキャッシュの可用性を確認します。
-
Data Grid ログで、クラスターが利用可能か、少なくとも 1 つのキャッシュが
DEGRADEDモードにあるかどうかを示すISPN100011メッセージを探します。 Data Grid Console または REST API を使用して、リモートキャッシュの可用性を取得します。
- ブラウザーで Data Grid Console を開き、Data Container タブを選択し、Health 列で可用性のステータスを特定します。
REST API からキャッシュの健全性を取得します。
GET /rest/v2/container/health
GET /rest/v2/container/healthCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
AdvancedCacheAPI のgetAvailability()メソッドを使用して、組み込みキャッシュの可用性をプログラム的に取得します。
7.2.3. キャッシュを使用できるようにする リンクのコピーリンクがクリップボードにコピーされました!
キャッシュを強制的に DEGRADED モードから解除することで、キャッシュを読み取りおよび書き込み操作に利用できるようにします。
デプロイメントでデータ喪失や不整合を許容できる場合にのみ、クラスターを強制的に DEGRADED モードから解除する必要があります。
手順
以下のいずれかの方法で、キャッシュを利用できるようにします。
- Data Grid コンソールを開き、Make available にするオプションを選択します。
REST API でリモートキャッシュの可用性を変更します。
POST /rest/v2/caches/<cacheName>?action=set-availability&availability=AVAILABLE
POST /rest/v2/caches/<cacheName>?action=set-availability&availability=AVAILABLECopy to Clipboard Copied! Toggle word wrap Toggle overflow AdvancedCacheAPI で、組み込みキャッシュの可用性をプログラム的に変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow