はじめまして。日本マイクロソフト、デベロッパー サポート DSI の澤田です。
今回は、お問い合わせの多い、IIS (WWW サービスと FTP サービス) のクラスタリング (フェールオーバークラスタリング) についてお知らせしたいと思います。これから Windows Server上で IIS のクラスター環境の構築をされる方、あるいは、既にクラスター環境で IIS を使用し、フェールーオーバーする障害が発生している方は、是非そのまま最後まで目を通してください。
Windows Server 2008 または Windows Server 2008 R2 上では IIS のクラスタリングがサポートされています。環境構築手順は以下の技術文書にあります。
文書番号: 970759タイトル: Microsoft Windows Server 2008 フェールオーバー クラスターで IIS 7.0 World Wide Web 発行サービスを構成するhttp://support.microsoft.com/kb/970759/ja-jp
文書番号: 974603タイトル: Windows Server 2008 フェールオーバー クラスターで FTP 7.5 を構成する方法http://support.microsoft.com/kb/974603/ja-jp
また、以下の修正プログラムの適用を強くお勧めします。
// Windows Server 2008 環境の場合文書番号: 2163398 タイトル: A memory leak occurs in the Rhs.exe process when you configure IIS 7.0 World Wide Web Publishing Service in a Windows Server 2008 failover clusterhttp://support.microsoft.com/kb/2163398/en-us
// Windows Server 2008 R2 SP1 環境の場合文書番号: 2618982 タイトル: FIX: Memory leak in Rhs.exe after you configure the IIS 7.5 W3SVC service in a Windows Server 2008 R2 SP1 failover clusterhttp://support.microsoft.com/kb/2618982/en-us
技術文書には、IIS をクラスタリングする際の環境構築手順として、大きく以下の 2 つの要素があります。
しかし、クラスターの仮想サーバー名を利用して IIS にアクセスするためには、実は、このどちらの設定も不要です。IIS 7.x および FTP 7.x 以後の IIS では、クラスター固有の機能は提供していません。つまり、クラスター環境で動作しているかどうかに IIS は関与しないのです。各要素の目的は以下の通りです。
クラスター環境を始めとする負荷分散をしている IIS は全てのノードを同じ構成にして利用することが推奨されます。IIS の構成情報は既定で %systemdrive%\system32\inetsrv\config フォルダ以下の applicationHost.config に保存されており、各ノードがローカルに構成情報を保持することになります。各ノードで構成情報を容易に統一する方法として、共有構成の機能があります。
これにより、IIS の構成情報である applicationHost.config は 1 つの共有フォルダ上で一元管理されるようになります。サーバー管理者は、どれか 1 台の Web サーバーまたは FTP サーバーで、インターネット インフォメーション サービス マネージャーや appcmd.exe を使用して IIS の構成を変更すると、全てのノードで自動的にその変更が反映されます。
IIS はクラスター環境で動作しているかどうかは関与しないため、それらにおいて障害が発生しても自動的に別のノードにフェール オーバーすることはありません。
IIS において障害が発生した時に、自動的に別のノードにフェール オーバーさせる機能は、クラスターの汎用スクリプト リソースによって実現しています。技術文書にあるサンプルのスクリプトでは、Web サイトやアプリケーション プールが開始状態にあるかどうか、また、FTP サービスが “RUNNING” の状態にあるかどうかをチェックしています。
このスクリプトをクラスターの汎用スクリプト リソースに登録することにより、クラスターの機能にて定期的に IsAlive/LooksAlive メソッドが呼ばれ、各メソッド内で実装している Web サイト、アプリケーション プール、または、FTP サービスの状態をチェックする処理が行われます。
技術文書にあるサンプル スクリプトを利用した場合、Web サイトやアプリケーション プールが開始状態にない、または、FTP サービスが “RUNNING” の状態にないと、「障害」が発生したと検知され、フェールオーバーします。
例えば、ワーカープロセスが短期間に異常終了を繰り返し、ラピッドフェール保護機能が働いてアプリケーション プールが停止した場合や CPU 監視機能を有効化しており、設定した期間内、ワーカープロセスがCPU を占有したために、CPU 監視機能が働いてアプリケーション プールが停止した場合などは、汎用スクリプト リソースに登録したスクリプトによって「障害」が検知されフェールオーバーします。このような場合は、一般的に、ラピッドフェール保護機能が働いたことや CPU 監視機能が働いたことがイベント ログから確認できます。
また、W3SVC サービスや FTPSVC サービスが停止した場合も、同様に、汎用スクリプト リソースに登録したスクリプトによって「障害」が検知されフェールオーバーします。
しかし、このような機能によりアプリケーション プールが停止したことや、あるいは、W3SVC サービス、 FTPSVC サービスが停止したことをイベント ログから確認することができず、代わりに、以下のようなエラーが記録され、その直後にフェールオーバーしている場合があります。また、フェールオーバーのタイミングで以下のようなエラーが記録され、フェールオーバーが繰り返される (フェールバックする) 場合もあります。
上記イベントは、共有構成を有効にしている IIS および FTP が共有フォルダ上にある構成情報 applicationHost.config を読み取れなかったことを意味します。これは、多くの場合、IIS の構成情報を配置している共有フォルダを、同じクラスター環境上にあるクラスター ディスクに作成している場合に発生します。以下に主な理由と対策を説明します。
共有フォルダがあるクラスター ディスクを保持するクラスター リソースがフェールオーバーするタイミングで、一時的に共有フォルダへのアクセスができない状態が発生します。この時、オフライン ファイルの機能を有効化していないと、Windows Process Activation サービス (以下 WAS) や FTP サービスは構成情報を読み取ることができず、サービスを開始することはできません。
対策: 共有構成を有効にする場合は、必ず、オフライン ファイルの機能を有効にする必要があります。
共有フォルダがあるクラスター ディスクのディスク リソースと WAS や FTP のサービスには依存関係はありません。例えば、全てのクラスター ノードの OS がシャットダウンしている状態で、ある単一のクラスター ノードの OS を起動することを想定します。この時、ディスク リソースのオンライン化より WAS や FTP のサービス開始の方が先に行われる可能性があり、このタイミングでは共有フォルダへのアクセスができません。
この場合、オフライン ファイルの機能を有効にしていても、共有フォルダ \\FileServer\ConfigShare のディスクはローカル ディスクであるため、オフライン ファイルが利用されることがありません。
対策: 構成情報を配置している共有フォルダを同じクラスター環境上のクラスター ディスクではなく、スタンドアロン サーバーや、別のクラスター環境上のクラスター ディスクに配置します。これにより、WAS や FTP サービスが構成情報を読み取るタイミングで、確実に共有フォルダへのアクセスができる、または、アクセスできなくてもオフライン ファイルが利用できるようになります。構成情報を配置している共有フォルダを同じクラスター環境上のクラスター ディスクに配置する場合は、クラスター ディスクのディスク リソースがオンラインになってから、WAS や FTP のサービスを再起動します。
Windows Server 2012 上で IIS 8.0 および FTP 8.0 のクラスタリング構成はサポートされます。*ただし、Microsoft では高可用性を目的とした Web サーバー、FTP サーバー環境は Microsoft Failover Cluster (MSFC) を利用するのではなく、Network Load Balancing (NLB) を利用することを推奨しています。
Windows Server 2012 上で IIS をクラスタリング構成する手順は上述の技術文書から以下の 2 点が変更されています。
オフライン ファイルを利用するためには、デスクトップ エクスペリエンスをインストールする必要があります。Windows Server 2012 ではサーバー マネージャーの [機能] - [ユーザー インターフェイスとインフラストラクチャー] を展開すると、デスクトップ エクスペリエンスがあります。
Windows Server 2012 ではオフライン ファイルと同期センターが統合されています。デスクトップ エクスペリエンスをインストール後、コントロール パネルからオフライン ファイルを有効化するためには、同期センターを開き、左ペインのオフライン ファイルの管理リンクをクリックします。
Windows Server で IIS をクラスタリング構成する際は、技術文書のサンプルのような Web サイト、アプリケーション プール、FTP サービスの状態を監視するスクリプト (clusweb7.vbs や clusftp7.vbs) を汎用スクリプト リソースとして追加します。*汎用サービスと間違い易いので注意してください。汎用サービスに W3SVC サービスや FTP サービスを登録することはサポートされていません。
Windows Server 2012 ではフェールオーバー クラスター マネージャーのユーザー インターフェイスが変更されています。汎用スクリプト リソースを追加する時は、フェールオーバー クラスター マネージャーを起動し、[ロール] を右クリックして、[ロールの構成] メニューを選択します。
それでは、またの機会に。