6.4. 状態の転送 (State Transfer)
状態の転送は、ノードがクラスターに参加するか、またはクラスターを離れるときにはいつでも Red Hat JBoss Data Grid で自動的に発生します。
新規ノードは、ディストリビューションモードとレプリケーションモードの両方でクラスターに参加する際に、既存ノードからキャッシュの状態を受信します。さらに状態の転送は、ノードがディストリビューションモードでクラスターを出た後に状態を再分散する際にノードに発生します。
状態の転送は、キャッシュがインメモリーの状態か、または永続状態であるかにかかわらず発生する可能性があります。
- レプリケーションモードでは、クラスターに参加するノードは、現在キャッシュ内の他のノードにあるデータのコピーを受信します。これは、既存のノードが現在のキャッシュの状態の一部を配置するときに発生します。
- ディストリビューションモードでは、一貫性のあるハッシュで決定される、キー領域全体のスライスが含まれます。新規ノードがクラスターに参加すると、それぞれの既存ノードから取られたキー領域のスライスが受信されます。状態の転送により、新規ノードでキー領域のスライスが受信され、既存のノードが以前に対象としていたデータの一部が減少します。
6.4.1. 非ブロッキング状態転送
Red Hat JBoss Data Grid における 非ブロッキング状態転送は、状態の転送が進行中である場合のクラスターまたはノードが応答できない時間を最小限にすることを目的としています。
JBoss Data Grid における非ブロッキング状態転送
- 状態の遷移を実行することを可能にします (クラスターのパフォーマンスが低下します)。ただし、状態の遷移時にパフォーマンスが低下すると、例外がスローされず、プロセスを続行できます。
- マージ後のデータ競合を解決するためのメカニズムは追加しませんが、今後これを追加することについては実行可能です。
6.4.2. JMX による状態転送の抑制
保守を行うためにクラスターの停止および再起動を行うにあたり、JMX を使用して状態転送を抑制することができます。この操作は、より効率的なクラスターのシャットダウンと起動を許可し、グリッドを停止する際のメモリー不足のエラーの発生リスクを取り除きます。
新規ノードがクラスターに参加し、再調整が抑制される際に、
getCache()
呼び出しは、再調整が再度有効にされないか、または stateTransfer.awaitInitialTransfer
が false
に設定されない限り、stateTransfer.timeout
が期限切れになった後にタイムアウトになります。
状態転送および再調整を無効にすることは、部分的なクラスターのシャットダウンや再起動の場合に有効ですが、状態転送が無効にされているために部分的なクラスターのシャットダウンでデータが失われる可能性があります。
6.4.3. rebalancingEnabled 属性
再調整の抑制は、
rebalancingEnabled
JMX 属性によってのみトリガーでき、これには特定の設定は不要です。
rebalancingEnabled
属性は、いずれのノードでも LocalTopologyManager
JMX Mbean から、クラスター全体に対して変更することができます。この属性はデフォルトではtrue
であり、プログラムを使って設定することができます。
Hot Rod などのサーバーは、起動時に設定で宣言されるすべてのキャッシュを起動するよう試みます。再調整が無効にされる場合、キャッシュは起動に失敗します。そのため、サーバー環境で以下の設定を使用することが必須になります。
<await-initial-transfer="false"/>