userApplicationオブジェクトをOnline処理すると、通常userApplicationがOnline状態に遷移します。1つのuserApplicationオブジェクトのOnline処理は、他のuserApplicationオブジェクトのOnline処理とは無関係で独立に行われます。
以下のような状況が発生すると、userApplicationのOnline処理が正しく終了しない場合があります。
PreCheckScriptでuserApplicationをOnlineにすべきではないと判断された。
Online処理中に異常 (Fault) が発生した。
これらの場合について、以下のセクションで説明していきます。
Online要求を生成することをuserApplicationの切替えと呼びます。これは、userApplicationをOnlineに切替えること、またはuserApplicationを他のクラスタノードに切替えることを意味しています ("2.1.6 切替え処理"も参照してください)。
以下の操作でOnline要求を生成することができます。
GUIまたはCLI (hvswitch) を使った手動要求
GUIまたはCLI (hvcm) を使ったRMS起動時の自動要求
アプリケーションのAutoSwitchOver属性によって制御される自動要求:
AutoSwitchOverに、ResourceFailureを設定しており、障害 (Fault) が発生した場合
AutoSwitchOverに、ShutDownを設定しており、ノードが停止した場合
AutoSwitchOverに、HostFailureを設定しており、ノードが強制停止した場合
手動方式
手動方式を使用する場合でも、userApplicationには、以下の2つの切替方式があります。切替方式は以下のとおりです。
優先切替え-RMSがuserApplicationをどのSysNode上でOnlineにするかを選択します。userApplicationはRMSによって最も優先順位の高いSysNodeへ切替えられます。userApplicationオブジェクトのPriorityList属性の順序によって、SysNodeオブジェクトの優先順位は決定します。
指定切替え-ユーザがuserApplicationをどのSysNode上でOnlineにするかを選択します。userApplicationは指定されたSysNodeへ切替えられます。
優先切替えの場合も、指定切替えの場合も、切替え先として指定できるSysNodeオブジェクトは、その状態がOnlineでなければなりません。
GUIを使ってOnline要求を生成するには、以下の手順で行います。
RMSグラフ上で、userApplicationを右クリックします。ポップアップメニューが表示されます。
ポップアップメニューの [切替え] または [Online] を左クリックします。
各userApplicationへのOnline要求は、hvswitchを使用します。hvswitchコマンドの使用方法とオプションについては、hvswitchのマニュアルページを参照してください。
自動方式
自動方式では、userApplicationは優先切替えのみで動作します。
クラスタシステムでRMSを最初に起動した時に、以下の条件すべてが満たされていると、RMSは最も優先順位の高いクラスタノード上でuserApplicationをOnlineに切替えます。
userApplicationに関連付けられた全SysNodeオブジェクトがOnlineになっている。
他のクラスタノードでuserApplicationがOnlineおよび不整合 (Inconsistent) になっていない。
userApplicationのAutoStartUp属性が設定されている。
userApplicationのグラフにFaulted状態のオブジェクトがない。
これは、同時に複数のクラスタノードでuserApplicationがOnlineに遷移しないために必要な条件です。
userApplicationが起動後すでにOnline状態にあれば、AutoStartUpが設定されていない場合やすべてのSysNodeがOnline状態にない場合でも、userApplicationに対する自動起動要求が直ちに生成されます。これは、OnlineのuserApplicationのグラフを整合状態にすることを目的としています。そうでないと、Online状態のアプリケーションのグラフにOfflineのオブジェクトが存在する恐れがあります。
userApplicationで異常 (Fault) を検出した場合、またはuserApplicationが動作中のSysNodeの異常 (Fault) を検出した場合、RMSは優先切替えを起動します。自動切替えは、userApplicationのAutoSwitchOver属性によって、以下のとおり制御されます。
AutoSwitchOverに、ResourceFailureを設定しており、障害 (Fault) が発生した場合
AutoSwitchOverに、ShutDownを設定しており、ノードが停止した場合
AutoSwitchOverに、HostFailureを設定しており、ノードが強制停止した場合
AutoSwitchOverがNoに設定されていると、自動切替えは行われません。
Online処理を開始する前に、PreCheckScriptで、Online処理が必要かどうか、または可能かどうかが確認されます。この処理が必要な理由は、一部のアプリケーションがOnline処理で起動できず、Faulted状態になることを避けるためです。
PreCheckScriptは、Online処理が開始する前に起動され、Online処理が必要かどうかを判断します。その判断基準はPreCheckScriptが0で終了 (正常終了) することです。PreCheckScriptが0以外の終了コードで終了した場合は、Online処理は破棄され、警告メッセージがswitchlogに記載されます。
PreCheckScriptの終了結果
PreCheckScriptが起動すると、userApplicationの状態はWait状態に遷移します。PreCheckScriptが失敗すると、userApplicationグラフノードは以前の状態 (通常はOfflineまたはFaulted) に戻ります。
AutoSwitchOver
PreCheckScriptが失敗し、AutoSwitchOver属性にResourceFailureが設定されている場合は、指定切替え要求の場合を除き、Online要求は自動的に次に優先順位の高いクラスタノードに転送されます。(指定切替え要求の場合を除く)
PreCheckScript が成功した場合、ベースモニタはPreOnline 要求を生成します。リソースグラフと比較して、 PreOnline 要求処理は以下のとおりです。
要求が親グラフノードから、子のグラフノードへ送信される。
親のグラフノードはWait状態になる。ただし、スクリプトは起動されない。
子グラフノードが要求を受け、リーフノードでPreOnlineScriptが起動される。
スクリプトが終了すると、親グラフノードへ確認を送信する。
すべての子が確認を送信し終ると、その親のグラフノードでPreOnlineScriptが実行される。
上記の手順は、RMSグラフに関連して、Online処理におけるスクリプトがボトムアップ方式で実行されることを示しています。
userApplicationグラフノードは、PreOnlineScriptを実行する最後のグラフノードであり、PreOnlineScriptの実行後にOnline要求を生成し、その要求をリーフノードへ送ります。ただし、Online処理とPreOnline処理は異なる処理です。
RMSグラフに関するOnline処理は以下のとおりです。
RMSがOnlineScriptを実行する。
個々のグラフノードのディテクタがOnline状態を通知するまでシステムは待ち続ける。グラフノードにディテクタが存在しない場合は、OnlineScript終了後、Online状態の送信を待たずにPostOnlineScriptを実行する。
PostOnlineScriptが実行される。
Online処理の成功が親グラフノードへ転送される。
親グラフノードがWait状態からOnline状態へ遷移する。
RMSでは、「userApplicationがOnline状態である」ということは、userApplicationを構成するすべてのグラフノードがOnline状態であることになります。ここでいうOnline状態とは、実際のアプリケーションの状態を示すものではありません。実際のアプリケーションはRMSで制御されてはいないか、userApplicationオブジェクト (より一般的にはCmdlineの子オブジェクト) 用に構成設定されたOnlineScript (PostOnlineScriptの場合もある) で起動されているかのいずれかになります。userApplicationオブジェクトがOnline状態であるということは、スクリプトの実行が正常に終了したことを示しているだけです。
注意
スクリプトが実際のアプリケーションの状態にどのような影響を及ぼすのかは、アプリケーション自身によって決まります。RMSはユーザ業務に対し直接の制御は何ら行いません。詳細については、"1.2.2 RMS構成と実システム"を参照してください。
例2
この例での処理の流れは次のとおりです。
AutoStartUp属性がyesに設定されている。
PreOnlineScript定義を持つリソースオブジェクトがない。
起動時に、すべてのオブジェクトがOffline状態である。
Online処理は次のとおりです。
RMSが起動します。
AutoStartUp属性がyesに設定されているため、fuji2RMS上のuserApplicationオブジェクトappがPreOnline要求を生成します。
この要求は、lfsリーフノードに転送されます。この例ではPreOnlineScriptが構成設定されたオブジェクトが存在しないため、lfsは、appに対してPreOnline処理が正常終了したことを示すメッセージを送信します。
appはPreOnline完了のメッセージを受信すると、Online要求を生成し、lfsリーフノードに送信します。
lfsオブジェクトがOnlineScriptを実行し、ディスクをOnline化します。
lfsのディテクタがOnlineの通知を行うと、Online処理の成功が直ちにcmdオブジェクトに向かって上方に通知されます (オブジェクトにPostOnlineScriptが存在した場合は、成功メッセージが転送される前に実行されています)。
cmdオブジェクトが自らのOnlineScriptを起動します。
cmdのディテクタが成功の通知を行うと、そのメッセージは直ちにandOp1に転送されます。
andOp1オブジェクトはディテクタを持たないオブジェクトで、この例ではOnlineScriptも持っていません。ローカルの子からOnline 状態の通知があると、直ちに自らの親オブジェクトに対してapp成功のメッセージを転送します。
appで成功メッセージを受信すると、RMSがOnlineScriptを実行し、アプリケーションが起動します。appにディテクタが存在せず、PostOnlineScriptが設定されていないため、appはOnlineScriptの完了直後にOnline状態に変化します。
Online処理中の予期しないレポート(Unexpected report)とは、Online処理中に通知されるが、BM(ベースモニタ)により無視されるOnline状態以外のレポートのことです。
BM(ベースモニタ)により無視されるOnline状態以外のレポートは、あるオブジェクトが属するユーザアプリケーションのOnline処理が開始してから、そのオブジェクトのOnline処理が成功または失敗するまでの間に通知されることがあります。
なお、オブジェクトのOnline処理が失敗するケースについては、"2.1.3.5 Online処理中のFault"を参照してください。
Online処理中にエラーが発生すると、影響するグラフノードはFault処理を開始し、親グラフノードにエラーを通知します ("2.1.5 Fault処理"も参照してください)。Online処理中に異常が発生するのは、以下のような場合です。
Online処理終了時点で、あるリソースオブジェクトのディテクタから最後に報告された状態がOfflineまたはFaulted状態である場合。
スクリプトが0以外の値で終了した。
スクリプトが復帰せずタイムアウトになり実行に失敗した。
オブジェクトのOnlineScriptが完了し、ディテクタから一定時間内にOnline状態が通知されなかった。
条件 a の場合は、オブジェクトが属するuserApplicationのOnline処理が 完了した後にFault処理が開始されます。
反対に、条件 b、cおよびdの場合は、条件が満たされるとすぐにFault処理が開始されます。
RMSの初期化時にuserApplicationのRMSグラフ全体がOnlineになっている場合があります。この場合、PreCheckScriptは実行されず、関連するグラフノードはUnknown状態からスクリプトを起動せずに直接Online状態に遷移します。
Online時の要求
userApplicationがすでにOnline状態である場合にOnline要求を受信すると、その要求は他のグラフノードに通常どおりに転送されます。"2.1.3 Online処理"での説明との相違点は、すでにOnline状態のグラフノードが要求や応答を転送する場合、スクリプトの実行もWait状態への遷移も行われないということです。特にPreCheckScriptは実行されません。
RMSの初期化時に常にOnline状態になっているオブジェクトの典型例は、物理ディスクのgResourceオブジェクトです。物理ディスクは通常、ソフトウェアインタフェースでは停止できないからです。
Online時の要求が存在しない場合
userApplicationがすでにOnline状態にあり、RMSが初期化済の場合に、Online要求が受信されないと、userApplicationはあたかも明示的なOnline要求を受信したかのように、自らのグラフのOnline処理を実行します。この結果、ローカルグラフの状態は前の例とまったく同じになります。
アプリケーションがすでにOnline状態にある場合にデータの喪失を防止する
RMSの主な目的は、同じアプリケーションがクラスタ内の複数のノードに対して同時に処理を行った場合のデータ喪失を防止することにあります。このため上記のいずれの例でも、アプリケーションのグラフのOnline処理が終わると、ローカルノードのベースモニタはuserApplicationオブジェクトがOnline状態にあることを他のノードのベースモニタに通知し、対応するアプリケーションがクラスタ内の他の場所でOnline化するのを防止します。
注意
RMSの初期化直後に複数のクラスタノードでHA型であるuserApplicationがOnlineになっていると、重大な問題が発生する可能性があります。この場合、RMSはFATAL ERRORメッセージを生成して、以後のuserApplicationに対する要求を抑止します。これにより、クラスタの不整合によって発生する障害の可能性を最小限に抑えます。
このセクションで説明した状況は、手動介入の結果です。手動介入の間にアプリケーションのインスタンスが完了していたり、ディスク資源が複数ノードで実行されていたりすると、RMSが初期化される前にデータの不整合が生じている恐れがあります。