目次
SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する
Windows Serverでは、HDDを仮想的なグループに追加し、ストレージプールを構築することができます。
構築したストレージプールの上に仮想ディスクを作成し、下記のレベルの中から好きな物を選んでRAIDアレイの様に利用することができます。
- Simple(耐障害性無し)
- Mirror(RAID 1)
- Parity(RAID 5相当)
仮想ディスクのMirrorは耐障害性が高い
RAID 1と言えば、2台のディスクに対し、同じデータを書き込むことで1台HDDが故障しても、データの喪失を防ぐ物です。
Windowsの仮想ディスクではRAID 1相当のモードを双方向ミラーと呼びます。
更に耐障害性を高められる、3方向ミラーモードも用意されており、同じデータを3台のHDDに書き込むことで、ディスクが2本故障してもデータが消失しないモードです。
耐障害性は高いのですが、利用できるディスク領域がParityと比べて少なくなる欠点があります。
Parity(RAID 5)は一定の耐障害性と利用効率が高くなるものの・・・
ディスクの利用効率も高めたいし、ある程度の耐障害性を担保したい場合は、RAID 5相当のParityを利用することになります。
これは最低3本以上のストレージを利用することで、データをN-1台のディスクにデータを分散して書き込み、データ修復用のパリティデータをもう1台のHDDに書き込む
というものです。
なので、利用できる容量はディスク容量×(N-1)分確保することができます。
ですがその反面、パフォーマンスがあまり発揮されないという問題があります。
Windows Server 2016で実装された、ミラーリングによって高速化されたパリティで解決する
パフォーマンスが発揮されないという致命的な欠点を抱えていたParityですが、Windows Server 2016/Windows Storage Server 2016から実装された、Mirror-accelerated parity(ミラーリングによって高速化されたパリティ)で解決することができます。
ミラーリングによって高速化されたパリティは、上図の様な階層構成を取る「階層記憶域」のうちの一つで、良くアクセスするデータはSSD層(SSD Tier)に、アクセス頻度の低いデータはHDD層(HDD Tier)に格納する物です。
これにより、従来のParity構成の弱点であったパフォーマンスの低さを解決することができます。
脅威のパフォーマンス
さて、実際にミラーリングによって高速化されたパリティを構築したところ、劇的にパフォーマンスを向上させることができました。
今回の構成は、当記事冒頭で紹介した既存のパリティ構成(WD Blue 3TB * 3)を一旦バラし、SSD層用に240GBのSATA3 SSDを2台追加して構築しました。
上図のレイアウト図を見て分かるとおり、SSD層ではミラー構成を取るため2台、HDD層ではパリティ構成を取るため3台以上のHDDが必要となります。
ミラーリングによって高速化されたパリティを構成する
ストレージプールの作成
それでは早速「ミラーリングによって高速化されたパリティ」を構成してみましょう。
サーバーマネージャーを立ち上げ、左ペインから「ファイルサービスと記憶域サービス」を開き、記憶域プールの追加を行います。
記憶域プールに適当な名前を付け、「次へ」をクリックします。
続いてストレージプールに追加するHDDとSSDを選択肢、「次へ」をクリックします。
確認画面が表示されるので、問題無いことを確認したら「作成」をクリックします。
正常に作成できたら、上図の様にHHDとSSDがメンバーとして追加されたプールが表示されます。
HDD層とSSD層をそれぞれ作成する
続いて、PowerShellを管理者として実行し、仮想ディスクの構成を行います。
Get-StoragePool
まずは上図コマンドレットを実行し、ストレージプールが正常に作成されていることを確認します。
以降に記載しているコマンドレットに「tank」と記載されている部分はご自身で作成したストレージプール名に置き換えてください。
続いて下記のコマンドレットを実行し、作成したストレージプールにSSDが2台、HDDが3台以上あることを確認します。
Get-StoragePool tank | Get-PhysicalDisk | ft FriendlyName,SerialNumber,CanPool,BusType,DeviceID,EnclosureNumber,MediaType,Size -Autosize
続いて下記のコマンドレットを実行し、CacheTierという名前のSSD層(SSD Tier)を作成します。
Get-StoragePool tank | New-StorageTier -FriendlyName CacheTier -MediaType SSD -ResiliencySettingName Mirror
正常に作成されれば下記のような結果が返ってきます。
ObjectId : {1}\\\root/Microsoft/Windows/Storage/Providers_v2\SPACES_StorageTier.ObjectId="{8a0ea13b- 074d-11e8-9c43-806e6f6e6963}:ST:{68d4893d-f0ef-4d21-98ca-a5fdc1cc6768}{567bfe22-7c5b-4a53-814d -3cff780d70af}" PassThroughClass : PassThroughIds : PassThroughNamespace : PassThroughServer : UniqueId : {567bfe22-7c5b-4a53-814d-3cff780d70af} AllocatedSize : 0 AllocationUnitSize : Auto ColumnIsolation : PhysicalDisk Description : FaultDomainAwareness : PhysicalDisk FootprintOnPool : 0 FriendlyName : CacheTier Interleave : 262144 MediaType : SSD NumberOfColumns : Auto NumberOfDataCopies : 2 NumberOfGroups : 1 ParityLayout : PhysicalDiskRedundancy : 1 ProvisioningType : Fixed ResiliencySettingName : Mirror Size : 0 Usage : Data PSComputerName :
続いて下記のコマンドレットを実行し、DataTierという名前のHDD層(HDD Tier)を作成します。
Get-StoragePool tank | New-StorageTier -FriendlyName DataTier -MediaType HDD -ResiliencySettingName Parity -NumberOfColumns 3
正常に作成されれば下記のような結果が返ってきます。
ObjectId : {1}\\\root/Microsoft/Windows/Storage/Providers_v2\SPACES_StorageTier.ObjectId="{8a0ea13b- 074d-11e8-9c43-806e6f6e6963}:ST:{68d4893d-f0ef-4d21-98ca-a5fdc1cc6768}{debba00b-078a-4018-80d5 -39e938192784}" PassThroughClass : PassThroughIds : PassThroughNamespace : PassThroughServer : UniqueId : {debba00b-078a-4018-80d5-39e938192784} AllocatedSize : 0 AllocationUnitSize : Auto ColumnIsolation : PhysicalDisk Description : FaultDomainAwareness : PhysicalDisk FootprintOnPool : 0 FriendlyName : DataTier Interleave : 262144 MediaType : HDD NumberOfColumns : 3 NumberOfDataCopies : 1 NumberOfGroups : Auto ParityLayout : Rotated Parity PhysicalDiskRedundancy : 1 ProvisioningType : Fixed ResiliencySettingName : Parity Size : 0 Usage : Data PSComputerName :
仮想ディスクの作成
SSD層(SSD Tier)とHDD層(HDD Tier)の作成が完了したので、次は下記コマンドレットを実行して仮想ディスクの作成を行います。
-StorageTierSizesの値は、SSD層のサイズ(バイト),HDD層のサイズ(バイト)となります。
マイクロソフトによると、パリティデータが複雑さを極めるため、従来より多めの領域を確保する必要があり、必要な領域を計算する方法がないため、1割から2割程度差し引くようにとのこと。
$SSD = Get-StorageTier -FriendlyName CacheTier $HDD = Get-StorageTier -FriendlyName DataTier Get-StoragePool tank | New-VirtualDisk -FriendlyName share -WriteCacheSize 16GB -StorageTiers $SSD,$HDD -StorageTierSizes 206158430208,5277655813324
なお上図の様にサーバーマネージャーで記憶域プールの割り当て済みの割合とにらめっこしながらカツカツに設定することもできます。
ReFSボリュームの作成
仮想ディスクの作成が完了したら、ディスクの管理を開きます。
すると作成した仮想ディスクがオフライン状態でアタッチされていますので、オンライン -> ディスクの初期化 -> 新しいシンプルボリュームの作成を行います。
「ミラーリングによって高速化されたパリティ」の要件にReFSを利用することとありますので、ReFSでフォーマットするようにします。
全て無事に完了すれば上図の通り、通常のストレージと同じようにWindowsへマウントされます。
ライトバックキャッシュのサイズより大きいファイルを読み書きしたらどうなるか
今回ライトバックキャッシュのサイズを1GBとして設定しましたが、もしライトバックキャッシュのサイズを超えるデータを読み書きしたら、パフォーマンスにどれくらいの影響を与えるのでしょうか。
こちらが1GBのファイルを読み書きした際のベンチマーク。
そしてこちらがライドバックキャッシュのサイズより大きい32GBのファイルを読み書きした際のベンチマークです。
確かにスコアとしては少し落ちますが、大きく低下することはない事が確認できました。
最近のエンタープライズ向け高速ストレージと言えば、Dell EMCのPowerMaxやXtremIO、HPEの3PAR StoregeServなどでも見られるオールフラッシュ構成の物を採用する形になりますが、その導入価格は非常に高額です。
中小企業ユーザにとってはハイリスクな製品であるがために、中々手が出せませんが今回の様に「ミラーリングによって高速化されたパリティ」を利用すれば、安価に高速なストレージを構築することができますね。
今回はSSD層にSATA3のSSDを利用しましたが、NVMeストレージも利用できますので、HDDとNVMe、SSDとNVMeなんて構成も可能です。
映像関係などの大容量コンテンツを扱っている中業企業ユーザは一考してみる価値はあるかと思われます。
Source: vir7検証部屋 | Microsoft Docs