断片のライフサイクル

断片は、さまざまな状態とイベントを経由してレプリカ生成をサポートします。断片のライフサイクルには、オンラインになること、 ランタイム、シャットダウン、フェイルオーバー、およびエラー処理があります。サーバー状態変更を処理するため、レプリカ断片はプライマリー断片 にプロモート可能です。

ライフサイクル・イベント

プライマリー断片とレプリカ断片は、配置されて開始されると、一連のイベントを経由してオンラインとなり、listen モードとなります。

プライマリー断片

カタログ・サービスは、プライマリー断片を区画に配置します。カタログ・サービスは、プライマリー断片のロケーションの平衡化、およびプライマリー断片に対するフェイルオーバーの開始の作業も行います。

ある断片がプライマリー断片になると、このプライマリー断片はカタログ・サービスからレプリカのリストを受信します。新規のプライマリー断片は、レプリカ・グループを作成し、すべてのレプリカを登録します。

プライマリーが作動可能となると、「ビジネス用にオープン」メッセージが、プライマリーの実行されているコンテナーの SystemOut.log ファイルに表示されます。オープン・メッセージ、つまり CWOBJ1511I メッセージには、開始したプライマリー断片のマップ名、マップ・セット名、および区画番号がリストされます。

CWOBJ1511I: mapName:mapSetName:partitionNumber (primary) is open for business.
カタログ・サービスが断片をどのように配置するかに関する情報については、断片配置を参照してください。
レプリカ断片

レプリカ断片は、問題を検出した場合を除き、主にプライマリー断片に制御されます。通常のライフサイクルでは、プライマリー断片が、レプリカ断片を配置、登録、および登録抹消します。

プライマリー断片がレプリカ断片を初期化すると、メッセージでログが表示されます。このログには、レプリカが実行されている場所が記述され、レプリカ断片が使用可能であることが示されます。オープン・メッセージ、つまり CWOBJ1511I メッセージには、レプリカ断片のマップ名、マップ・セット名、および区画番号がリストされます。このメッセージは、次のとおりです。

CWOBJ1511I: mapName:mapSetName:partitionNumber (synchronous replica) is open for business.
または
CWOBJ1511I: mapName:mapSetName:partitionNumber (asynchronous replica) is open for business.

非同期レプリカ断片: 非同期レプリカ断片はデータを求めてプライマリーをポーリングします。 レプリカは、プライマリーからデータを受信しないと、それはレプリカがプライマリーに追いついたことを意味するため、自動的にポーリング時間を調整します。 プライマリーに障害が起こったことを示すエラーを受け取った場合、またはネットワークに問題があった場合も、レプリカは調整します。

非同期レプリカが複製を開始すると、非同期レプリカは、以下のメッセージをレプリカ用の SystemOut.log ファイルに出力します。 このメッセージは、1 回の CWOBJ1511 メッセージにつき複数回出力される可能性があります。 レプリカが別のプライマリーに接続する場合、あるいはテンプレート・マップが追加された場合、このメッセージは再度出力されます。
CWOBJ1543I: The asynchronous replica objectGridName:mapsetName:partitionNumber started or 
continued replicating from the primary. Replicating for maps: [mapName]

同期レプリカ断片: 同期レプリカ断片が最初に開始するときは、まだピア・モードにはなっていません。 レプリカ断片がピア・モードになっていると、レプリカ断片は、データがプライマリーに着信するときにプライマリーからデータを受信します。ピア・モードに入る前に、レプリカ断片には、プライマリー断片上のすべての既存データのコピーが必要となります。

同期レプリカは、非同期レプリカと同様に、データを求めてポーリングすることでプライマリー断片からデータをコピーします。 同期レプリカは、既存データをプライマリーからコピーする際、ピア・モードに切り替わり、プライマリーがデータを受信すると同時にデータの受信を開始します。

レプリカ断片がピア・モードに達すると、レプリカ断片は、メッセージをレプリカ用の SystemOut.log ファイルに出力します。所要時間は、レプリカ断片が、プライマリー断片から最初のデータをすべて取得するのに要した時間の長さを指します。プライマリー断片によって複製される既存のデータが存在しない場合、所要時間は、ゼロまたは非常に低く表示されます。このメッセージは、1 回の CWOBJ1511 メッセージにつき複数回出力される場合があります。レプリカが別のプライマリーに接続する場合、あるいはテンプレート・マップが追加された場合、このメッセージは再度出力されます。
CWOBJ1526I: Replica objectGridName:mapsetName:partitionNumber:mapName entering peer 
mode after X seconds.

同期レプリカ断片がピア・モードになっていると、プライマリー断片はすべてのピア・モードの同期レプリカにトランザクションを複製しなければなりません。 同期レプリカ断片のデータは、プライマリー断片のデータと同じレベルに保たれます。同期レプリカの最小数または minSync をデプロイメント・ポリシーで設定している場合、同期レプリカの最小数がコミットに賛成してからトランザクションはプライマリーで正常にコミットできます。

リカバリー・イベント

レプリカ生成は、障害およびエラー・イベントからリカバリーするように設計されています。あるプライマリー断片が失敗すると、別のレプリカが引き継ぎます。エラーがレプリカ断片上にある場合、レプリカ断片は、リカバリーを試行します。カタログ・サービスは、新規プライマリー断片または新規レプリカ断片の配置とトランザクションを制御します。

レプリカ断片がプライマリー断片となる

レプリカ断片は、2 つの理由でプライマリー断片となります。プライマリー断片が停止または失敗した場合と、バランスを取る決定が行われて、前のプライマリー断片を新規ロケーションに移動した場合です。

カタログ・サービスは、新規プライマリー断片を、既存の同期レプリカ断片から選択します。プライマリーを移動させる必要があり、レプリカがない場合は、一時レプリカを配置して遷移を完了します。 新規プライマリー断片は、すべての既存レプリカを登録し、トランザクションを新規プライマリー断片として受け入れます。既存のレプリカ断片に正しいレベルのデータが存在する場合、現行データは、レプリカ断片が新規プライマリー断片に登録されると同時に保存されます。非同期レプリカは新規プライマリーに対してポーリングします。

図 1. partition0 区画用の ObjectGrid マップ・セットの配置例。これは、minSyncReplicas 値を 1 に、 maxSyncReplicas 値を 2 に、maxAsyncReplicas 値を 1 にするというデプロイメント方針です。
マシン A には、区画 0 のプライマリー断片があります。マシン B とマシン C には、
非同期レプリカ断片があります。マシン D には、非同期レプリカ断片
があります。
図 2. プライマリー断片のコンテナーに障害が起こる
マシン A で実行しているプライマリー断片のコンテナーに障害が起こります。
図 3. ObjectGrid コンテナー 2 にある同期レプリカ断片が プライマリー断片になる
マシン B で、同期レプリカ断片がプライマリー断片に
なります。
図 4. マシン B にプライマリー断片が含まれています。自動修復モードがどのように設定されているか、およびコンテナーが使用可能かどうかに 基づいて、新しい同期レプリカ断片がマシンに配置されるかどうかが 決まります。
マシン B にプライマリー断片が置かれるようになり、
マシン C には同期レプリカ断片があり、マシン D には非同期レプリカ断片
があります

レプリカ断片のリカバリー

同期レプリカ断片は、プライマリー断片によって制御されます。ただし、レプリカ断片は、問題を検出すると、登録イベントをトリガーして、データの状態を訂正することができます。レプリカは、現行データをクリアして、新しいコピーをプライマリーから取得します。

レプリカ断片が登録イベントを開始すると、そのレプリカはログ・メッセージを出力します。

CWOBJ1524I: Replica listener 
objectGridName:mapSetName:partition must re-register with the primary. 
Reason: Exception listed
トランザクションの処理中にレプリカ断片上でエラーが発生した場合には、そのレプリカ断片は不明な状態です。トランザクションはプライマリー断片上で正常に処理されましたが、レプリカ上で何らかの異常が発生しました。この状態を訂正するため、レプリカは再登録イベントを開始します。プライマリーからのデータの新しいコピーを使用して、レプリカ断片は続行できます。同じ問題が再発生する場合、レプリカ断片は、連続して再登録を行いません。 詳しくは、障害イベント を参照してください。

障害イベント

レプリカは、リカバリーできないエラー状態を検出した場合、データの複製を停止することがあります。

多すぎる登録試行

レプリカがデータを正常にコミットせずに、登録を複数回トリガーする場合、レプリカは停止します。停止により、レプリカがエンドレス登録ループに入ることが防止されます。デフォルトでは、レプリカ断片は、登録を連続して 3 回試行してから、停止します。

レプリカ断片が何度も登録しすぎる場合、レプリカは、次のメッセージをログに出力します。

CWOBJ1537E: objectGridName:mapSetName:partition exceeded the maximum number 
of times to reregister (timesAllowed) without successful transactions..
レプリカが再登録によってリカバリーできない場合は、レプリカ断片に関連するトランザクションに、広範囲な問題が存在する可能性があります。トランザクションからのキーまたは値の展開中にエラーが発生する場合、クラスパス上のリソースが欠落しているという問題が考えられます。

ピア・モードに入る際の障害

プライマリー (チェックポイント・データ) からの既存のバルク・データの処理中に、レプリカがピア・モードに入ろうとしてエラーが発生した場合、レプリカはシャットダウンします。シャットダウンは、レプリカが正しくない初期データで開始するのを防止します。レプリカは、再登録すれば、プライマリーから同じデータを受信するため、再試行はしません。

レプリカ断片がピア・モードに入ることに失敗した場合、レプリカ断片は、次のメッセージをログに出力します。

CWOBJ1527W Replica objectGridName:mapSetName:partition:mapName failed to enter peer mode after numSeconds seconds.
レプリカがピア・モードに入ることに失敗した理由を説明する追加のメッセージがログに表示されます。

再登録またはピア・モード障害後のリカバリー

レプリカが再登録できないか、ピア・モードに入ることができない場合、そのレプリカは、新規配置イベントが発生するまで非アクティブ状態になります。新規配置イベントは、新規サーバーの開始または停止である場合があります。配置イベントは、PlacementServiceMBean Mbean で triggerPlacement メソッドを使用して開始することもできます。