IIS7.x サーバーのリソース調整関連の簡易リンク集
今回は、インターネット Web サーバー構築ガイドには載らない、サーバーのリソース調整機能に関するリンク集を作ってみました。
タイトルに IIS7.x と入っていますが、IIS のホスト以外にもいろいろと使用できると思います。
表記つながりでいうと、リンク先のドキュメントは、Windows Server 2008 や IIS 7.0 について書かれているものが大半ですが、現行の Windows Server 2008 R2 、IIS 7.5 の操作において、手順が異なることはありませんので、そのまま読み替えてお使いいただければと思います。
サーバーの “リソース” とは?
リソース ( Resource ) は、直訳すると “資源” ということになります。
では サーバー リソース とはなんでしょう?
文字通り、”給仕人 = サービスを提供するもの” の “資源” ということですが、今回のこのブログの記事では、IIS 7.x を運用する際に使用されるサーバーの CPU、メモリ、ディスク容量などをまとめてこう記述します。
また、今回の記事は、サーバーの負荷を下げる、あるいは分散するという意図でリンクを集めていますので、パフォーマンスチューニングやセキュリティに関しては、今後の記事にご期待ください。
サーバーのリソース調整が必要な理由
“サーバー” は、第三者、つまりはクライアントにリソースをサービスとして提供している存在であるため、場合によっては自らのリソースをクライアントに使い切られてしまったり、複数のクライアントに対し適切にリソースを分配できない状況が発生する場合があります。
そのような状況を回避するために、Windows Server 2008 には、リソースを調整するための機能がツールとして搭載されています。
Windows Server のリソース管理ツールを使用することで、サーバー上で同するサービス ( UNIX でいうところのデーモン ) 、あるいはクライアントごとに適切なリソースを配分することができます。
CPU とメモリのチューニング機能
Windows Server 2008 のすべてのエディションには CPU とメモリの使用率を設定するための Windows システム システム ソース マネージャー が付属しています。
Windows システム システム ソース を追加インストールすることで、”プロセス”、”登録済みサービス”、”ユーザー”、”セキュリティグループ”ごとに CPU の使用割合、コミットメモリとワーキングセット、プロセッサの個数を指定することができます。
(図 : Windows システム リソース マネージャーの画面)
また、スケジュール機能を持っており、定義したリソース割り当てポリシーを、指定したタイミングで適用したり、または、一定期間だけ適用したりといったことも可能です。
Windows システム リソース マネージャーについての詳しい説明は、以下のドキュメントをご参照ください。
Windows システム リソース マネージャーの概要
https://technet.microsoft.com/ja-jp/library/cc732553.aspx
ディスク使用量のチューニング
共有 Web サイトサービスや、ftp などでファイルサービスを提供している場合、ユーザーのディスク使用量をサービスが許容する範囲にとどめるために、その使用量を制限する必要があります。
Windows Sercver 2008 のすべてのエディションには、ディスク使用量を制限するためのディスククォータ機能が 2 種類搭載されており、用途により適宜使い分けることが可能です。
NTFS ディスク クォータ
この機能は、Windows 2000 から搭載された機能で、Windows 7 などのクライアント OS でも使用することができます。
NTFS ディスク クォータは、ユーザーアカウントやセキュリティグループに対し、そのディスク上で使用可能なディスク容量を定義することができます。
(図 : NTFS ディスク クォータの設定画面)
NTFS クォータの概要につきましては、以下の技術情報をご参照ください。
[HOWTO] Windows Server 2003 のディスククォータを使用してディスク容量とディスクの使用を管理する方法
https://support.microsoft.com/kb/326212/ja
(※) Windows Server 2003 について書かれていますが、Windows Server 2008 でも同様です。
NTFS クォータをプログラムコードから使用したい場合は、このブログの記事で過去にサンプルコードを掲載しておりますので、こちらをご参照ください。
NTFS クォータエントリを設定するコード
https://blogs.msdn.com/b/osamum/archive/2010/01/15/ntfs.aspx
ファイル サーバー リソース マージャー
Windows Server 2003 R2 時代に別途、ダウンロードして使用可能になったファイルリソースの管理ツールが、ファイル サーバー リソース マージャー (略称 : FSRM ) です。
Windows Server 2008 ではあらかじめパッケージに含まれており、[ サーバーマネージャー ] の [ 役割の追加 ] で、”ファイルサービス” (※) を選択するとインストールされるようになります。
(※) Windows Web Server 2008 では、[機能の追加] で追加します。
前出の NTFS クォータと、ファイル サーバー リソース マージャー の提供するクォータの違いは、前者がアカウントに対しディスク容量を設定するのに対し、後者はフォルダ単位での制限が可能です。
(図:ファイル サーバー リソース マージャーの画面)
ファイル サーバー リソース マージャー が提供するクォータと、NTFS が提供するディスククォータの違いについては、以下のドキュメントをご参照ください。
ファイル サーバー リソース マネージャのクォータと NTFS ディスク クォータの比較
https://technet.microsoft.com/ja-jp/library/cc770989(WS.10).aspx#BKMK_FSRMvsNTFS
また、ファイル サーバー リソース マージャー は単にディスク容量による制限を行うだけでなく、”ファイルスクリーン” と呼ばれるファイル種別によるコピー制限をかけることも可能です。
ファイル サーバー リソース マージャー および、ファイルスクリーン機能については、以下のドキュメントをご参照ください。
ファイルサーバー リソース マネージャ
https://www.microsoft.com/japan/technet/windowsserver/2008/library/c203b256-30c5-426b-9e33-9d108256097e.mspx?mfr=true
ファイルスクリーンの管理
https://technet.microsoft.com/ja-jp/library/cc732074.aspx
FTP での FSRM フォルダー クォータの使用
https://technet.microsoft.com/ja-jp/library/dd939104.aspx
また、ファイル サーバー リソース マージャーのクォータ、ファイルスクリーンの機能をプログラムコードから使用したい場合は、このブログの記事で過去にサンプルコードを載せていますので、こちらをご参照ください。
コードによるディスククォータの設定
https://blogs.msdn.com/b/osamum/archive/2009/12/21/9939495.aspx
コードによるファイルスクリーン機能の実装
https://blogs.msdn.com/b/osamum/archive/2010/01/08/9945590.aspx
負荷分散について
サーバーへの負荷が増えてくると、現状のサーバーのスペックでは処理が間に合わなくなってくる場合があります。
その場合に採られる方法の 1 つが、CPU やメモリ、ディスクの追加などによって個のサーバーの能力を増強する “スケールアップ” であり、もう 1 つが、負荷を複数のサーバーに分散させる “スケールアウト” です。
ちなみに、この二つは、前者が “垂直スケーラビリティ”、後者が ”水平スケーラビリティ” と呼ばれることもあります。
“スケールアップ” は、個々の処理自体が負荷が高く、並列分散できない場合に用いられ、”スケールアウト” は逆に個々の処理自体は単純であり、並列分散が可能である場合に用いられます。
Web サーバーの処理は、多くの場合、個々のリクエストの処理自体の負荷は高くないため、リクエスト数が増えて負荷が高くなった場合は、”スケールアウト” が用いられます。
Windows Server 2008 標準機能を使用したネットワーク負荷分散
Windows Server 2008 のすべてのエディションには、サーバーへのリクエストを複数台のサーバーに分散するための ネットワーク負荷分散 ( NLB : Network Load Balancing Services ) の機能が搭載されています。
Windows Server 2008 のネットワーク負荷分散には、特別な機器は必要ありません。2 台以上の Windows Server 2008 マシンがあればネットワーク負荷分散を構成することができます。
Windows Server 2008 R2 の負荷分散機能については以下のドキュメントをご参照ください。
ネットワーク負荷分散の概要
https://technet.microsoft.com/ja-jp/library/cc725691.aspx
IIS 拡張によるリソースチューニングと負荷分散
帯域の制御
Web コンテンツの全般的な帯域の制限は、IIS 管理ツールを使用して設定可能ですが、その設定による制御が、メディアファイルのようなサイズの大きいものについては、ベストではない場合があります。
(図:IIS 管理ツールにて、Web サイトを選択し、[操作] パネルから [詳細設定] をクリック)
たとえば、メディア ファイル hehehe.wmv を単純なダウンロード (プログレッシブ ダウンロード) 配信を行っているとしましょう。
IIS は hehehe.wmv に対してのリクエストを受けると、使用が許可されている帯域幅をすべて利用して hehehe.wmv のデータをクライアントにレスポンスします。
クライアント側では、プレイヤーが再生可能な量のデータがダウンロードされた段階で hehehe.wmv の再生が開始され、再生中もダウンロードは継続し、バッファリングされます。
しかし、ユーザーが視聴途中でプレイヤーを終了してしまった場合は、バッファを満たすために使用された帯域は無駄になります。
また、正しくプレイヤーを終了しなかった場合は、サーバーは引き続き、hehehe.wmv のデーターをクライアントにレスポンスし続けます。
この hehehe.wmv が 1 時間近くの動画であったとして、ユーザーが 2 ~ 3 秒見ただけで、プレイヤーを閉じてしまった場合は、ダウンロードに使用された帯域の大部分が無駄に使用されたことになります。
こういった帯域の無駄遣いを解消するために、IIS には、拡張モジュールとして ビットレート調整 ( Bit Rate Throttling ) が用意されています。
ビットレート調整を使用すると、メディアファイルに対しては、エンコードされたビット レートを示すパーセントと同じ配信率で、ファイルがクライアントに配信され、データファイルに関しては、1 秒間の転送サイズを指定することができます。
(図:ビットレート調整の画面)
ビットレート調整の詳細、拡張モジュールの入手については、以下のドキュメントをご参照ください。
ビット レート調整
https://technet.microsoft.com/ja-jp/iis/ee839431.aspx
サーバーを構成するインフラにおいてもネットワーク関連は、非常にコストの関係してくる部分ですので、これらの機能を有効に利用して、サービスにかかる帯域を適切にチューニングしていただければと思います。
ネットワーク負荷分散とリバースプロキシ
Windows Server 2008 にはネットワーク負荷分散機能が搭載されていますが、IIS 拡張にもネットワーク負荷分散機能を持った拡張モジュール Application Request Routing が用意されています。
Application Request Routing は単なるリクエストの振り分けにとどまらず、クライアントとサーバーの間にアフィニティを確立し、特定のクライアントからのすべての要求をサーバー ファーム内の特定の Web アプリケーション サーバーにルーティングすることができます。また、リバースプロキシの機能も備えています。
Application Request Routing の詳細、拡張モジュールの入手については、以下のドキュメントをご参照ください。
Application Request Routing
https://technet.microsoft.com/ja-jp/iis/ee839425.aspx
番外編 : クラスタリングと仮想化
クラスタリング
Windows Server 2008 の Enterprise 以上のエディションにはクラスタを構成するための機能が標準で搭載されています。
IIS7.x でクラスタリングを構成する方法については、以下のドキュメントをご参照ください。
IIS 7. 0 の WWW (World Wide Web 発行サービスは、Microsoft Windows Server 2008 フェールオーバー クラスターで構成します。
https://support.microsoft.com/kb/970759/ ( 機械翻訳 )
しかしながら、NLB を使用している場合は必然的に同じ構成のサーバーが存在し、生存しているサーバーに自動でリクエストが振り分けられるので、多くの場合クラスタリングは不要です。
Windows クラスタを使用するためには、サーバーを Windows ドメインに参加させる必要がありますので、NLB と比較すると工数やコストに見合わない場合があります。
仮想化
Windows Sever 2008 の Standard 以上のエディションには、Hyper-V と呼ばれるハイパーバイザ型の仮想化基盤が用意されており、単一のハードウェアで複数のオペレーティングシステムをホストするすることができます。
Hyper-V についての詳細は、以下のドキュメントを参照してください。
Windows Server 2008 Hyper-V ホーム
https://www.microsoft.com/japan/windowsserver2008/technologies/hyperv.mspx
Windows Server 2008 の Hyper-V RC0 版インストール方法
https://www.microsoft.com/japan/windowsserver2008/virtualization/howtoinstall.mspx
また、Windows Server 2008 から GUI を廃した OS をベースに作られた無償の仮想化基盤、Hyper-V Server も用意されており、ダウンロードして使用することができます。
Microsoft Hyper-V Server 2008
https://www.microsoft.com/japan/servers/hyper-v-server/default.mspx
Hyper-V は仮想 OS のイメージを *.vhd というファイルで扱っています。
*.vhd をプログラムから操作するための API はかなり公開されており、このブログでも過去に *.vhd ファイルをドライブとしてマウントするサンプルを公開していますので、興味のある方はご覧ください。
vhd をドライブとしてマウントするには?
https://blogs.msdn.com/b/osamum/archive/2009/03/16/vhd.aspx
まとめ
今回はサーバーのリソース調整と負荷分散機能という観点で、ツールを使用したチューニング方法についてリンクを紹介しました。
もちろん今回ご紹介した内容のほかにも、リソース調整と負荷分散というくくりだけでも、さらに数多くの設定箇所があります。
しかしながら、設定可能なところがあるから設定しなければいけない、というものでもありません。
Windows OS の既定の設定値は、一般的な運用に合わせて適切にチューニングされていますので、とくに不便を感じない部分に関しては、既定のまま使用していだいて結構です。
ほんとうは、ここらへんのガイドラインも出したいんですけどね。。