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/cache-managers/<cacheManagerName>/health
-
AdvancedCache
API のgetAvailability()
メソッドを使用して、組み込みキャッシュの可用性をプログラム的に取得します。
7.2.3. キャッシュを使用できるようにする
キャッシュを強制的に DEGRADED
モードから解除することで、キャッシュを読み取りおよび書き込み操作に利用できるようにします。
デプロイメントでデータ喪失や不整合を許容できる場合にのみ、クラスターを強制的に DEGRADED
モードから解除する必要があります。
手順
以下のいずれかの方法で、キャッシュを利用できるようにします。
REST API でリモートキャッシュの可用性を変更します。
POST /v2/caches/<cacheName>?action=set-availability&availability=AVAILABLE
AdvancedCache
API で、組み込みキャッシュの可用性をプログラム的に変更します。AdvancedCache ac = cache.getAdvancedCache(); // Retrieve cache availability boolean available = ac.getAvailability() == AvailabilityMode.AVAILABLE; // Make the cache available if (!available) { ac.setAvailability(AvailabilityMode.AVAILABLE); }