7 RMS の詳細説明
本章では、RMS状態遷移機構について説明します。特に、各状態の判別はどのようにして行われるのか、
RMSはどのようにして状態変化を起こし、またどのようにして状態の変化に対応するのかについて説明 します。本章で説明する内容は以下のとおりです。
初期化 RMSの詳細説明
7.1.2 メッセージ
RMSオブジェクトは以下の目的でメッセージ通信を行います。
● 他のオブジェクトへ要求を送信する。
● オブジェクトの状態変化を通知する。
通常、オブジェクトは直接の親と子のみ通信を行います。
RMSは受信した外部要求を、まず親 userApplication オブジェクトへ送信し、それから子に転送し ます。userApplicationオブジェクトは、状態の変化 (Faulted状態への状態の遷移など) に基づい て固有の要求を生成することもできます。userApplicationオブジェクトから発生する要求は、親か ら子へ転送されます (トップダウン)。
7.2 初期化
RMS が起動すると、全てのグラフノードの初期状態は Unknown となります。RMS は、個々のグラフ ノードが自らの状態を判断するために必要な情報を獲得してから、この状態を変更します。
グラフノードが自らの状態を判断するために必要な情報とは、以下のとおりです。
● ディテクタを保持するグラフノードの場合 —ディテクタからの最初の通知
● 子を持つグラフノード —子の状態に関するメッセージ 上記より、以下の2つの結論が導き出されます。
● ディテクタの存在しないリーフノードは、ディテクタからの通知を受けることがなく、かつ、グ ラフノードの状態を子の状態からも類推することができないことになります。この場合、Unknown の状態が残ってしまうため、RMS構成としては認められない構成となります。
● Unknownからの状態遷移は、リーフノードからuserApplication オブジェクトへと続くボト ムアップ形式で行われます。リーフノードの上位グラフノードは全て、自己の状態を識別するた めには、まず、子の状態を取得する必要があります。
userApplicationオブジェクトの状態がUnknownから変更された段階で、userApplicationの初 期化処理が完了し、RMSの制御が開始されます。
userApplicationオブジェクトの初期化プロセスは、互いのuserApplicationに対して無関係で行 われます。したがって、あるuserApplicationオブジェクトがOnline、OfflineまたはStandby の状態に変化しても、他のuserApplicationオブジェクトはUnknownの状態のままである場合があ ります。
SysNodeオブジェクトの初期化プロセスもまた、他とは無関係に行われます。SysNode オブジェクト は、ディテクタの通知を受信した後に初期のUnknown状態から他の状態へ遷移します。
Unknown状態は初期状態のときのみ存在し、一度Unknown状態から他の状態へ変化したグラフノード が、Unkwnon 状態に戻ることはありません。ただし、hvreset を起動した場合は例外です。このコマ ンドはグラフツリー全体を再初期化します。グラフノードは強制的にUnknown状態に戻され、初期化処 理が再度実行されます。
以下にfuji2RMSおよびfuji3RMS上で実行するよう構成設定されたアプリケーションappを例にとっ てRMSの処理を説明します。
● fuji2RMSおよびfuji3RMSの各ノードには、そのノードと同じ名前のSysNodeオブジェクトが 1つ存在します。
● アプリケーションが実行される各SysNodeでは、対応するuserApplicationオブジェクトが タイプandOpの子を持ち、これらの子にはこのSysNodeの名前がHostName属性として与えら れています。このアプリケーションでのノードの優先順位は、userApplicationオブジェクト でノードを定義した順序によって決定します。
RMSの詳細説明 初期化
● この論理ANDオブジェクトの子として、他の資源 (Cmdlineサブアプリケーションやローカルファ イルシステム) がそれぞれの内部的な依存関係に基づいて構成されます。
オブジェクト階層を図 133に示します。
図133:初期化の例におけるオブジェクト階層
図の階層には、アプリケーションの親として、SysNodeオブジェクトが含まれています。慣例で記載さ れることがありますが、SysNodeオブジェクトはいかなる形でもアプリケーションオブジェクトに依存 していません。しかし、SysNode オブジェクトを記載することにより、アプリケーションの子である andOpオブジェクトがどのノードを表しているのかが明確になります。SysNodeオブジェクトは GUI が生成するグラフにも表示されますが、その場合は、アプリケーションが現在実行されているノードを 示すことが主目的です。
RMS Wizard Toolsによって作成されたこの構成のRMSグラフを図 134に示します。fuji2RMSとappと
を結ぶ線が緑色で表示され、アプリケーションがOnlineであることを示しています。
図134:初期化におけるシステムグラフの例 — RMS Wizard Toolsの構成 lfs
SysNode
userApplication andOp
gResource gResource
fuji2RMS fuji3RMS
app
andOp1 andOp2
cmd
初期化 RMSの詳細説明
図 135は、「hvdisp -a」による出力を示しています。
図135:初期化におけるhvdisp出力の例 — RMS Wizard Toolsの構成
グラフには、正しい動作を保証するために自動的に挿入されるコネクタオブジェクトと依存オブジェク トが追加されています。さらにRMS Wizard Toolsによって自動生成されたオブジェクトには、抽象化さ れたグラフ図 133内の簡略化された一般的な名称よりも複雑な名称が使われています。RMSの基本操作 を理解するために、追加のオブジェクトや複雑な名前を理解する必要はありません。したがって、以下 の例では、抽象化されたグラフを中心に一般的な名前を使用して、分かりやすく説明します。
例1
図 133に示された構成では、以下のような処理が順に行われます。これはfuji2RMSで動作するモニタ の場合でも同じです。
1. RMSが起動します。
2. SysNodeオブジェクトのディテクタはクラスタノードの状態をベースモニタに通知します。
3. cmdおよびlfsリソースのディテクタは、それぞれの状態をOfflineと報告します。
4. lfsはリーフノードであるため、即座にOffline化して、その状態変化を親に通知します。
5. ディテクタの通知と子の通知を受信すると、cmd には、それぞれの状態を決定するために必要な 情報が揃ったことになります。cmdはOffline化し、その状態変化を親andOp1に通知します。
andOp2は、fuji2RMSのベースモニタにより無視されるリモートノードです。
6. andOp1は、ディテクタを持たない論理オブジェクトです。このオブジェクトは子のメッセージを
利用して自らのOffline状態を検出し、その状態変化をappに通知します。
7. appも、ディテクタを持たないオブジェクトです。ローカルノードに対応する子andOpがOffline 化すると、appもOffline化します。
8. appのローカル子オブジェクト全てが、Unknown状態に遷移すると、初期化プロセスは完了しま す。
RMSの詳細説明 Online処理
7.3 Online 処理
userApplicationオブジェクトをOnline処理すると、通常userApplicationがOnline状態に 遷移します。1つのuserApplicationオブジェクトのOnline処理は、他のuserApplicationオ ブジェクトのOnline処理とは無関係で独立に行われます。
以下のような状況が発生すると、userApplicationのOnline処理が正しく終了しない場合があります。
● PreCheckScriptでuserApplicationをOnlineにすべきではないと判断された。
● Online処理中に異常 (Fault) が発生した。
これらの場合について、以下のセクションで説明していきます。
7.3.1 Online 要求
Online要求を生成することをuserApplicationの切替えと呼びます。これは、userApplication をOnlineに切替えること、またはuserApplicationを他のクラスタノードに切替えることを意味し
ています (132ページの"7.6 切替え処理"も参照してください)。
以下の操作でOnline要求を生成することができます。
● GUIまたはCLI (hvswitch) を使った手動要求
● GUIまたはCLI (hvcm) を使ったRMS起動時の自動要求
● アプリケーションのAutoSwitchOver属性によって制御される自動要求:
– AutoSwitchOverに、ResourceFailureを設定しており、障害 (Fault) が発生した場合 – AutoSwitchOverに、ShutDownを設定しており、ノードが停止した場合
– AutoSwitchOverに、HostFailureを設定しており、ノードが強制停止した場合 7.3.1.1 手動方式
手動方式を使用する場合でも、userApplicationには、以下の2つの切替方式があります。切替方式 は以下のとおりです。
● 優先切替え — RMSがuserApplicationをどのSysNode上でOnlineにするかを選択しま す。userApplicationはRMSによって最も優先順位の高いSysNodeへ切替えられます。
userApplicationオブジェクトのPriorityList属性の順序によって、SysNodeオブジェ クトの優先順位は決定します。
● 指定切替え —ユーザがuserApplicationをどのSysNode上でOnlineにするかを選択しま す。userApplicationは指定されたSysNodeへ切替えられます。
優先切替えの場合も、指定切替えの場合も、切替え先として指定できるSysNodeオブジェクトは、その 状態がOnlineでなければなりません。
GUIを使った手動要求
GUIを使ってOnline要求を生成するには、以下の手順で行います。
1. RMSグラフ上で、userApplicationを右クリックします。ポップアップメニューが表示され
ます。
2. ポップアップメニューの [切替え] または [Online] を左クリックします。
CLIを使用した手動要求
各userApplicationへのOnline要求は、hvswitchを使用します。hvswitchコマンドの使用方法 とオプションについては、hvswitchのマニュアルページを参照してください。
Online処理 RMSの詳細説明
7.3.1.2 自動方式
自動方式では、userApplicationは優先切替えのみで動作します。
RMS起動時の自動要求
クラスタシステムで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のオブジェクトが存在する 恐れがあります。
障害 (Fault) 発生時の自動切替え
userApplicationで異常 (Fault) を検出した場合、またはuserApplictionが動作中のSysNode の異常 (Fault) を検出した場合、RMSは優先切替えを起動します。自動切替えは、userApplication のAutoSwitchOver属性によって、以下のとおり制御されます。
● AutoSwitchOverに、ResourceFailureを設定しており、障害 (Fault) が発生した場合
● AutoSwitchOverに、ShutDownを設定しており、ノードが停止した場合
● AutoSwitchOverに、HostFailureを設定しており、ノードが強制停止した場合 AutoSwitchOverがNoに設定されていると、自動切替えは行われません。
7.3.2 PreCheckScript
Online処理を開始する前に、PreCheckScriptで、Online処理が必要かどうか、または可能かどう かが確認されます。この処理が必要な理由は、一部のアプリケーションが Online 処理で起動できず、
Faulted状態になることを避けるためです。
PreCheckScriptは、Online処理が開始する前に起動され、Online処理が必要かどうかを判断しま す。その判断基準はPreCheckScriptが0で終了 (正常終了) することです。PreCheckScriptが0 以外の終了コードで終了した場合は、Online処理は破棄され、警告メッセージがswitchlogに記載され ます。
PreCheckScriptの終了結果
PreCheckScriptが起動すると、userApplicationの状態はWait状態に遷移します。PreCheckScript が失敗すると、userApplicationグラフノードは以前の状態 (通常はOfflineまたはFaulted) に戻り ます。