Windows Server 2012ではファイル共有プロトコルが強化され、SMB 3.0となった。クラスタ環境対応やスケールアウト/マルチチャンネル対応などによるパフォーマンス改善、そして管理機能の強化と、改善点は多岐にわたる。本稿ではその概要をまとめておく。
Windows Server 2012ではファイル共有サービスの強化を行うにあたり、従来からのファイル共有プロトコル(SMBプロトコル)に対して、大幅な強化が行われている。本稿ではそのSMBの概要についてまとめておく。
Windows Server 2012やWindows 8では、従来からWindows OSで利用されてきたファイル共有プロトコル「SMB(Server Message Block)」を改良した、「SMB 3.0」が実装されている。SMB3.0では、クラスタ環境対応やマルチチャンネル/スケールアウト/SMBダイレクト対応などによるパフォーマンス改善、PowerShellなどによる管理機能の強化など、数多くの改良が行われている。SMB 3.0の機能強化の概要を次表にまとめておくが、より詳細な情報については以下のサイトなどを参照していただきたい。
機能 | 概要 |
---|---|
SMB透過フェイルオーバー | ファイル・サーバをクラスタ化して、フェイルオーバーしてもクライアントから継続してアクセスできるようにする機能。ファイル共有を利用するアプリケーションを再起動するなどの処理は不要 |
SMBスケールアウト | ファイル・サーバ・クラスタ内のすべてのノードから同時にクラスタ共有ボリューム(CSV)上のファイルにアクセス可能(以前のバージョンでは、クラスタ内のどれか1台からのみ同時にアクセス可能)。これにより、クラスタのノード数を増やしただけ、ファイル・サーバの帯域をスケールアウトでき、クライアントの負荷分散が可能になる |
SMBマルチチャンネル | 同時に複数のNICを使って送受信することにより、ネットワーク帯域を拡大したり、負荷分散や障害対策を実現する機能 |
SMBダイレクト | RDMAという、CPUの介在なしでデータを転送する機能を持つアダプタを使うことにより、高速・低レイテンシの通信を実現する機能 |
オフロード・データ転送(ODX) | ローカルのCPUやネットワークを使うことなく、リモートのストレージ内でデータを直接コピーする機能 |
サーバ・アプリケーションのためのパフォーマンス・カウンタ | SMB 3.0の動作状況をモニタするための新しいパフォーマンス・カウンタが用意された |
パフォーマンスの最適化 | SQL ServerのOLTPなど、サーバ・アプリケーションのI/Oは小規模なランダム読み/書きが多いため、それに合わせてSMBが最適化された。またデフォルトのMTU(最大転送単位)を1Mbytesに拡大し、大規模なシーケンシャル・アクセスのパフォーマンス向上を図っている |
SMB暗号化 | ファイル・アクセスの通信を暗号化する機能。サーバとクライアント間の通信セッションごとに暗号化するかどうかを指定できる |
SMBリモート・ファイル記憶域 | クラスタ上に共有ボリュームを作成して、Hyper-Vの仮想マシン・ファイルやSQL Serverのデータベース・ファイルなどを配置できる。Hyper-Vのライブ・マイグレーションにも対応 |
SMBファイル共有のVSS | クラスタ共有ボリュームのVSS(ボリューム・シャドウ・コピー)を作成できる(以前のVSSはローカル・ディスクでしか取れなかった)。これにより、リモートのファイル・サーバ上のアプリケーション・ファイルなどを、ローカルのPCからバックアップできる |
SMBディレクトリ・リース | リモート・ファイル・サーバのディレクトリやファイルのメタデータ情報をローカルにキャッシュすることにより、特に、遅延時間の大きいブランチ・オフィスにおけるファイル・アクセスの応答時間が改善される。サーバのデータに変更があるとクライアントに通知されるので、キャッシュの一貫性も保たれる。ホーム・フォルダ(読み書き可、共有なし)とパブリケーション(読み出し専用、共有あり)の両方に対応 |
SMB PowerShell | PowerShellによるSMBファイル共有サービスの管理が可能 |
SMB 3.0関連の機能改善点 |
SMB 3.0はWindows Server 2012やWindows 8で利用できるSMBのバージョンだが、以前のWindows OSでサポートされているSMBのバージョンは3.0ではない。以下にSMBのバージョンと実装されているWindows OS、SMBの主要な機能などを示しておく。バージョン番号が大きいものは、それ以前のバージョンの機能を含んでいる。
SMB | 実装されているWindows OS | 概要 |
---|---|---|
SMB 1.0 | Windows 9x/Windows Me/Windows NT/Windows 2000/Windows XP/Windows Server 2003 | ・一番基本的なファイル共有プロトコル ・CIFS(インターネット上でのSMB)のサポート |
SMB 2.0 | Windows Vista/Windows Server 2008 | ・複数のSMBコマンドの連結 ・切断時の透過的な再接続処理 ・バッファリング・サイズの拡大 ・ファイル・プロパティのキャッシュ ・スケーラビリティの拡大 ・シンボリック・リンクのサポート |
SMB 2.1 | Windows 7/Windows Server 2008 R2 | ・1MbytesのラージMTU(デフォルトは64Kbytes)サポート ・クライアントoplockリース・モデル ・スリープ・モードのサポート |
SMB 3.0 | Windows 8/Windows Server 2012 | ・SMB透過フェイルオーバー ・SMBマルチチャンネル、ほか(全機能については上の表参照) |
SMBのバージョン SMBのバージョン番号と主な機能。例えばSMB 2.0はSMB 1.0の機能をすべて内包している。 |
Windows OSによってサポートされているSMBプロトコルのバージョンは異なるが、基本的には次のように、サーバ側とクライアント側のSMBのバージョンを比較して、低い方に合わせてアクセスされる(バージョンのネゴシエーションが行われる)。新しいバージョンのOSから古いバージョンのOSへアクセスする場合は古い方のバージョンのSMBが使われ(ダウンレベル・アクセスという)、その分だけ機能も限定されることになる。例えば今回解説しているSMB 3.0の機能を使いたければ、サーバもクライアントもWindows 8かWindows Server 2012にする必要がある。どちらかがWindows 7やWindows Server 2008 R2なら、使用されるプロトコルや機能はSMB 2.1に制限される。
以下、いくつかSMB 3.0の主要な機能を取り上げて、詳しく見ていこう。
「SMB透過フェイルオーバー」とは、クラスタ化したWindows Server 2012のファイル・サーバ(のクラスタ共有ボリュームCSV)上に共有フォルダを作成しておくと、何らかの障害などでクラスタがフェイルオーバーしても、クライアントからは自動的に別ノードに再接続し、処理を継続できるという機能である。接続先が切り替わっても、クライアントからのアクセスはそのまま継続するので、処理を続行できる。
SMBのサーバとクライアント間に複数のネットワーク・パス(ネットワーク接続)が存在していることが検出されると、同時に複数のパス(通信路、コネクション)を開設し、パケットを分散して送受信してデータを読み書きする。これにより、1つのネットワーク・インターフェイス・カード(NIC)だけでは得られないような高速なアクセスが可能になる。また、ネットワーク・インターフェイスやケーブルなどの障害で通信ができなくなっても、自動的にほかのパスを使って通信を継続できるので、耐障害性も高くなる。
この機能を利用するためには、次のいずれかの構成のハードウェアが必要となる。
*1 InfiniBandとは、イーサネットのようなバス型ではなく、ポイント・トゥ・ポイントで接続する高速通信インターフェイス技術。構成にもよるが、数十〜数百Gbit/sといった高速通信が可能だ。ハイエンドのサーバやデータセンターなどでよく使われている。
・いま知っておくべきWebサービスのための高速ネットワーク技術(Master of IP Network)
複数のネットワーク・インターフェイスを利用する場合、1台のスイッチを経由してサーバとクライアント間を結んでもよいし、異なるスイッチ(サブネットワーク)を経由して接続してもよい。いずれにしろ、SMBのサーバとクライアント間に複数のパスがあれば、自動的に判断して通信が行われる。図にすると、次のようなものがある。
ハードウェアの構成やSMBサービスの設定などによって、どのように負荷が分散されているかを調べたり、同時に最大何コネクション使うように設定されているかなどを知るには、以下のサイトの情報を参照していただきたい。PowerShellを使ってSMBサービスの設定や、通信状態などをチェックする方法が紹介されている。
SMBマルチチャンネルではSMBのレベルで複数のチャネルを束ねているが、もっと下位のレベルで複数のNICを束ねて1つのNICのように扱う「NICチーミング(NIC teaming)」という技術もある。NICチーミングは、従来はNICカードでサポートされている機能であったが、Windows Server 2012ではこれをOSレベルでサポートしている。NICカードでのサポートでは、ベンダごとに設定方法が異なるし、(通常は)同じベンダの同じ製品を揃えなければ利用できないが、OSレベルでサポートされることにより、異なるNIC製品であっても、速度さえ同じならばまとめてNICチーミングを構成できるというメリットがある。
NICチーミングで作成したインターフェイスの属性を見ると、次のようになっており、元のNICの速度が全部合計された速度になっていることが分かる。
「SMBダイレクト」は、「RDMA(Remote Direct Memory Access)」をサポートした特殊なネットワーク・アダプタ(InfiniBandなど)を使った場合に利用できる機能である。RDMAとは、ソフトウェア(デバイス・ドライバやネットワーク・プロトコル・スタック)などを介さずに、アダプタ自身で受信したデータを直接メイン・メモリ上へ書き込んだり、逆にメモリ上のデータを送信したりできる。これにより、CPUの負荷を大幅に削減しながらも、高速な通信が可能になる。
これはSMB 3.0だけの機能ではなく、正確にはWindows Server 2012のファイル・サービスの機能の1つであるが、ファイル・コピーのパフォーマンスを大幅に改善するために「オフロード・データ転送(ODX)」という機能もサポートされている。通常ファイル・コピー操作を行うと、コピー元ストレージからの読み出しとコピー先ストレージへの書き込みはすべてCPUが処理する。ファイルがローカルのディスク上ではなく、リモートのファイル・サーバやSAN、iSCSIなどで接続されたストレージ上にある場合は、ネットワークやInfiniBand、Fibre Channel(FC)なども使ってデータを読み書きすることになる。だがもし、コピー元とコピー先のファイルが同じストレージ・デバイス上にあるなら、原理的にはいちいちネットワークを介してデータをコピーする必要はなく、ストレージ・デバイス上で直接データを読み書き(移動)すれば、CPUやネットワークに負荷を与えず、しかも高速にコピーできる。これを実現するのがオフロード・データ転送である。
Windows Server 2012にオフロード・データ転送に対応したストレージ・デバイスを接続しておくと、同じストレージ上でのコピーであることが検出された場合、同一ストレージ内で直接データが転送される。これにより、ローカルのCPUやネットワークをほとんど使用することなく、ファイル・コピーが行われる。例えばリモートのファイル・サーバ上にある巨大なバックアップ・ファイルやVHDXファイルを(同じサーバ内で)コピーしても、ネットワークの速度には関わらず、リモートのファイル・サーバ上でコピー処理が完結する。
Windows Server 2012のSMB 3.0では、ファイル共有ごとに通信内容を暗号化させるかどうかを選択できるようになっている。特別なハードウェアなどは何もいらず、共有設定のプロパティで暗号化をオンにするだけでよい。ブランチ・オフィスからインターネットのVPNなどを経由してリモートのファイル・サーバなどへアクセスする場合、通信内容をのぞき見られて情報が漏洩するリスクを軽減できる。
Windows 8/Windows Server 2012では、SMB 3.0の動作状態をチェックするための機能として、パフォーマンス・カウンタ(パフォーマンス・モニタ)やPowerShellによる管理機能が追加されている。従来は、SMB関連の設定やセッションの状態などを調べるには、netコマンドや(タスク・マネージャから起動する)リソース・モニタを利用することが多かった。例えばセッションの状態を調べるには「net session」や「net use」「net config server/workstation」「net file」などのコマンドが利用できるし、リソース・モニタの「ディスク」や「ネットワーク」カテゴリなどでもチェックできる。
これらの方法もそのまま使えるが、SMB 3.0ではさらにPowerShellのSmbShareモジュールのコマンドレットも利用できる。「net 〜」コマンドよりも詳細な情報が得られるし、コマンド体系も統一されているので使いやすい。
※SmbShare関連のコマンドの一覧
PS C:¥> get-command -module smbshare
CommandType Name ModuleName
----------- ---- ----------
Function Block-SmbShareAccess SmbShare
Function Close-SmbOpenFile SmbShare
Function Close-SmbSession SmbShare
Function Get-SmbClientConfiguration SmbShare
Function Get-SmbClientNetworkInterface SmbShare
Function Get-SmbConnection SmbShare
Function Get-SmbMapping SmbShare
Function Get-SmbMultichannelConnection SmbShare
Function Get-SmbMultichannelConstraint SmbShare
Function Get-SmbOpenFile SmbShare
Function Get-SmbServerConfiguration SmbShare
Function Get-SmbServerNetworkInterface SmbShare
Function Get-SmbSession SmbShare
Function Get-SmbShare SmbShare
……(以下省略)……
※SMBサーバの設定の確認
PS C:¥> Get-SmbServerConfiguration
AnnounceServer : False
AsynchronousCredits : 64
AutoShareServer : True
AutoShareWorkstation : True
CachedOpenLimit : 5
AnnounceComment :
EnableDownlevelTimewarp : False
EnableLeasing : True
EnableMultiChannel : True
EnableStrictNameChecking : True
AutoDisconnectTimeout : 0
DurableHandleV2TimeoutInSeconds : 30
EnableAuthenticateUserSharing : False
……(以下省略)……
※SMBクライアントの設定の確認
PS C:¥> Get-SmbClientConfiguration
ConnectionCountPerRssNetworkInterface : 4
DirectoryCacheEntriesMax : 16
DirectoryCacheEntrySizeMax : 65536
DirectoryCacheLifetime : 10
EnableBandwidthThrottling : True
EnableByteRangeLockingOnReadOnlyFiles : True
EnableLargeMtu : True
EnableMultiChannel : True
DormantFileLimit : 1023
……(以下省略)……
※ネットワーク・インターフェイスの確認
PS C:¥> Get-SmbServerNetworkInterface | fl
ScopeName : *
InterfaceIndex : 12
RssCapable : False
RdmaCapable : False
Speed : 1 Gbps
IpAddress : 10.20.2.102
……(以下省略)……
今回はSMB 3.0の機能について簡単に紹介してきた。クラスタやマルチチャンネル/スケールアウト対応、RDMAサポート、ディレクトリ・キャッシュによる性能向上など、かなり大幅な機能強化が図られている。クラスタ環境での運用方法やマルチチャンネル/NICチーミングの使い方など、より実践的な使い方については今後改めて紹介する。
【2013/05/07】オフロード・データ転送(ODX)に関する記述を追加しました。
Copyright© Digital Advantage Corp. All Rights Reserved.