「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
前提知識 †
NLBとMSCS/WSFCの同居 †
要件 †
IISと
- ファイル・サーバ(以下FS)
- プリンタ・サーバ(以下PS)
- SQL Server
- JP1
を筐体の数を抑えるため、
これらを1つの筐体に詰めてクラスタ化したい場合にこの要件が上がる。
実現可能性 †
できません(実現不可能)。
クラスタ サービスとネットワーク負荷分散の両方をインストールしたコンピュータを
サポートする必要がある場合、いずれか一方のコンポーネントを削除する必要があります。
これらのコンポーネントのいずれかをアンインストールするには、以下のうち適切な方法を実行します。
- クラスタ サービスを実行する必要があるコンピュータ
コンピュータがサーバー クラスタでクラスタ サービスを実行する必要がある場合、
[ネットワークとダイヤルアップ接続] ツールから NLB を削除します。
- NLB を実行する必要があるコンピュータ
コンピュータで NLB を実行する必要がある場合、クラスタ サービスを削除します。
L7負荷分散 †
NLBとMSCS/WSFCの同居のような、
高い可用性とスケーラビリティを実現するために、L7負荷分散を実現する
というモジュールがIIS7.0から導入されているようです。
IISをMSCS/WSFC環境上でクラスタ化 †
概要 †
ステートレスなIISは、一般的にはNLBクラスタを選択するべきです。
Webアプリケーションが
- セッション・ステートレスでない場合も、
- (セッション・ステートフルである場合)
Session状態を
- State Service Mode
- SQL Server Mode
- Custom Session Provider
- Oracle Providers for ASP.NET
- .etc
に退避するようにする事で、NLBクラスタに対応させることができます。
ただし、NLBとMSCS/WSFCの同居ができないので、
IISを負荷分散クラスタ化せず、
フェイル・オーバー・クラスタ化する場合に限って、
KB970759のスクリプトを使用してMSCS/WSFCクラスタ化します。
問題点 †
KB970759のスクリプトが標準で付属していない †
Windows Server 2008 R2 からはスクリプトが標準で付属しないようなので、
以下のURL(KB970759)にあるスクリプトの内容を理解して、
Microsoft Windows Server 2008 フェールオーバー クラスターで
IIS 7.0 World Wide Web 発行サービスを構成する
http://support.microsoft.com/kb/970759/ja
必要に応じて書き替えて構成・検証するしかなさそうです。
Windows Server 2008 以降でクラスター化された IIS を作成 « SE の雑記
http://engineermemo.wordpress.com/2011/05/15/windows-server-2008-%e4%bb%a5%e9%99%8d%e3%81%a7%e3%82%af%e3%83%a9%e3%82%b9%e3%82%bf%e3%83%bc%e5%8c%96%e3%81%95%e3%82%8c%e3%81%9f-iis-%e3%82%92%e4%bd%9c%e6%88%90/
- MSCS / WSFCクラスタとNLBクラスタは共存ができないため、
MSCS / WSFCクラスタ環境で IIS を冗長化した構成で使う場合には、
[汎用スクリプト] を登録してMSCS / WSFCクラスタ化された IIS を作成していました。
- 2008 では 2003 で使用していたスクリプトが含まれてしまっているのですが、
使用せずに以下の技術情報 (KB970759) のスクリプトを使用します。
2008 R2 では含まれなくなっています。
KB970759のスクリプトの手修正が必要になる。 †
- KB970759のスクリプトの内容を確認すると「既定のWebサイト」のみの対応なので、
Active-Acitve構成に対応させようとした場合、スクリプトの手修正が必要になる。
- サポートはされるが、スクリプト側は自己責任になる。
サポート問合せの時、+使用しているスクリプトの提供が必要になる。
理解が不十分で運用中に問題となる可能性がある。 †
以下の様な不具合が報告されています。
Windows Server TechCenter? > Windows Server フォーラム > Windows Server 2008 全般
> Windows2008 IIS7.0のクラスタ(WSFC)環境で、新しく作成した仮想ディレクトリにアクセスするとHTTP 404エラーが表示される。
http://social.technet.microsoft.com/Forums/ja/windowsserver2008ja/thread/2b8aa4b0-e8ac-49c0-a267-1a01d1f248f6
http://support.microsoft.com/kb/970759
の情報を元に、IISをクラスタのリソースとして登録しました。セットアップは問題なく完了し、動作も良好でした。しかし、後からIISの仮想ディレクトリを作成したところ、作成は問題なく行えるのですが、クライアントからアクセスすると「サーバーエラー 404 ファイルまたはディレクトリが見つかりません」となってしまう場合があります。「場合」について切り分けができていません。ある日は問題なくアクセスできたのに、数日後は404エラーが表示される、といった具体で、一旦ダメになると、サーバを再起動するまでアクセスできないままになります。原因が分かりましたらご教示頂けますでしょうか。
IISのMSCS/WSFCクラスタを検証 †
懸念 †
(1)IISの設定情報は共有されるか? †
- IISの設定情報はクラスタ・ノード間で共有されるか?
- IIS6:メタベース(MetaBase?.xml)
- IIS7:applicationHost.config
(2)JITコンパイルは問題ないか? †
KB970759の手順に共有構成をエクスポートして共有ディスクに入れる手順があるが、
JITコンパイルで生成されるアセンブリなどが、何処にどう格納されるのか?
など動き(のディティール)が良く解らない所がある。
通常、JITコンパイルされるものは以下に格納される。
%windir%\system32\inetsrv\ASP Compiled Templates
フェールオーバー後、
- 正しくJITコンパイルしてくれるのか?
- 若しくはプリコンパイルする必要があるのか?
(3)仮想ディレクトリを共有ディスクに入れることができるか? †
- 仮想ディレクトリを共有ディスクに入れる手順も書かれていない。
- 仮想ディレクトリを共有ディスクに入れ
仮想ディレクトリにプリコンパイルしたものを入れておけば良い?
- なお、仮想ディレクトリに、FSの共有フォルダを指定することは可能である模様。
(実際は、クラスタ化されたFSの共有フォルダを指定する)
- UNC指定でもマウントしたフォルダでも可能の模様ですが、
ユーザ・プロファイルの話が有るのでUNC指定が良いようです。
- アクセス許可設定だけは注意が必要、以下のいずれかを選択。
- フォルダのアクセス許可にコンピュータ・アカウントを足す。
- アプリケーション・プールのアカウントをADアカウントに変更する。
(4)その他、スクリプトを使用しない方法 †
- FSを、クラスタ・アプリケーションに設定。
- IISは、クラスタ・アプリケーションに設定しない。
- この状態で、1つのクラスタ・グループのクラスタ・リソースに
- フロントNIC×1と仮想IP×2(FS用とIIS用)のセットを
追加して、フェイル・オーバー、フェイル・バックできるか?
- 以下を追加して、フェイル・オーバー、フェイル・バックできるか?
- フロントNIC×1に仮想IP×1(IIS用)のセットを追加
- バックNIC×1に仮想IP×1(FS用)のセットを追加
- NICを監視することで障害時に対応する仮想IPを2号機へフェイル・オーバー。
(なお、仮想IPは1つのNICに対して複数指定することもできる筈)
- 後処理スクリプトで2号機のIISを起動
(Stanby側のIISは通常時は停止しているため)
これは、特定のIPをListeningする場合は、
Listeningする仮想IPがフェイル・オーバーしないとIISが起動しないため。
全てのIPをListeningする場合は、起動・停止の制御は不要であるものと思われる。
- IISやUP障害時(フリーズも含む)は切り替えできない。
フロントNICのみを監視しているため。
上記ではフェイル・オーバーのトリガにならない。
結果 †
(1)の検証結果 †
(2)の検証結果 †
(3)の検証結果 †
(4)の検証結果 †
- 同じクラスタ・グループのクラスタ・リソースに、
- NIC×1に仮想IP×2を複数指定して追加できた。
- (NIC×1に仮想IP×1を指定して、)×2を追加できた。
- クラスタ・グループのクラスタ・リソースに追加したNICは、
クラスタネット・ワーク通信を許可する必要がある。
- この場合、既定でクラスタ・アプリケーションでは双方のNIC、仮想IPが使用される。
- なお、IPアドレスは、DHCPでも、固定でも、可能だった。
- IISが、全てのIPをListeningする設定の場合は、netstatで見る限り
IISは、TCP 0.0.0.0:80(0.0.0.0)でListeningしており、起動・停止の制御は不要。
- 仮想ディレクトリに、FSの共有フォルダを指定することは可能だが、
IIS→FSの共有フォルダへのアクセスには、以下の両方のアクセス権が必要。
- ノード2台のコンピュータ・アカウント(IISとFSがクロスした時用)
- IIS AppPool?\DefaultAppPool?(自IISから自FSへアクセスする時用)