Windows Server 2008 R2 の クラスターにおけるリソース管理の仕組みとしては、上記のようになります。Windows Server 2008 以降に関してはリソース管理の判断において使用していたプログラムの名称が変わって「リソースコントロールマネージャ」となり、ステータスの死活管理においても「リソースホストサブシステム」となりました。
この「リソースホストサブシステム」のファイル名が「rhs.exe」となります。
クラスターの特長として、ノード端末の停止だけではなく、アプリケーションの障害においても冗長性を確保することがあげられます。このアプリケーションの障害における対応を行うのがリソース管理になります。
クラスター対応アプリケーションには、ほとんどの場合MSFC用のリソースDLLが提供されています。このリソースDLLはアプリケーションに対して適切な監視を行うためのプログラムになります。監視手法として「Looks Alive」(5秒)と「IsAlive」(1分)があり、何か障害が起こるとリソースホストサブシステムがリソースコントロールマネージャに情報を渡し、再起動やフェールオーバーするなどの判断を行います。
ここで着目したいのはリソースホストサブシステムになります。
タスクマネージャーのプロセスを確認するとデフォルトの状態で「rhs.exe」が2つあることが確認できます。これはなぜ2つあるのか?
これに関してはR2から変わったことになります。
以前から言われていたことですが、自社で開発したクラスターアプリケーションを導入する際にはリソースホストサブシステムを分けましょうということでした。その理由は、全てのアプリケーションは1つのリソースホストサブシステムが監視を行っているので、リソースDLLのバグ等によってリソースホストサブシステムが動作しないと、クラスター全体に影響を及ぼすためです。
よって、アプリケーションリソースのプロパティの詳細なポリシーより
□このリソースを別のリソースモニターで実行する
というチェックボックスがあるのでそれをチェックすると、個別のリソースホストサブシステムが監視を行います。これによって、もしこのアプリケーションに対応したリソースDLLがハングしてもクラスター全体に影響を与えることはありません。
実はこの考え方をWinodows Server 2008 R2 のMSFCではある意味実装させたことがわかりました。
Failover Clustering and Network Load Balancing Team Blog)
http://blogs.msdn.com/b/clustering/archive/2009/06/27/9806160.aspx
こちらを参照すると次のように書いてあります。
***********************************
Previously all resources used to run in a single RHS process by default. But this meant that if one resource crashes then the entire RHS process could fail and all resources hosted by this RHS will fail. We’ve improve our default behavior in 2008 R2 by separating our critical resources from our dlls in RHS. Now the Cluster Group (including the quorum resource) and Storage Group (including Available Storage and Clustering Shared Volumes) now all run in a single, isolated RHS process. The other resource dlls will run in one or more additional RHS processes.
***********************************
訳すとこんな感じ
***********************************
以前のバージョンのクラスタでは既定の1つのRHSだけでクラスタ上の全リソースは監視されていた。しかし、これは1つのリソースがクラッシュし(それに巻き込まれて)このRHSが障害すると、それはRHSのプロセス全体とクラスタ上の全リソースが障害となることを意味した。我々はW2008 R2でこの既定のRHSの動作を改善し、クラスタのコアリソースを担当するRHSを分けた。今は「クラスター グループ」と「使用可能記憶域」内にある全リソースを1つのRHSが担当し、他のすべてのリソースはそれとは別のRHSが担当する。
***********************************
要するに、デフォルト仮想サーバーに相当するグループのリソースと、アプリケーションの死活監視はわけますよ~ということですね。
ちなみに「このリソースを別のリソースモニターで実行する」にチェックを入れた際のプロセスを見ると「rhs.exe」が3つあることが確認できますね。