SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する サーバー
スポンサーリンク


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)分確保することができます。

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

ですがその反面、パフォーマンスがあまり発揮されないという問題があります。

Windows Server 2016で実装された、ミラーリングによって高速化されたパリティで解決する

パフォーマンスが発揮されないという致命的な欠点を抱えていたParityですが、Windows Server 2016/Windows Storage Server 2016から実装された、Mirror-accelerated parity(ミラーリングによって高速化されたパリティ)で解決することができます。

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

ミラーリングによって高速化されたパリティは、上図の様な階層構成を取る「階層記憶域」のうちの一つで、良くアクセスするデータはSSD層(SSD Tier)に、アクセス頻度の低いデータはHDD層(HDD Tier)に格納する物です。

これにより、従来のParity構成の弱点であったパフォーマンスの低さを解決することができます。

ミラーリングによって高速化されたパリティはReFSでフォーマットする必要があります。

脅威のパフォーマンス

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する
さて、実際にミラーリングによって高速化されたパリティを構築したところ、劇的にパフォーマンスを向上させることができました。

今回の構成は、当記事冒頭で紹介した既存のパリティ構成(WD Blue 3TB * 3)を一旦バラし、SSD層用に240GBのSATA3 SSDを2台追加して構築しました。

上図のレイアウト図を見て分かるとおり、SSD層ではミラー構成を取るため2台、HDD層ではパリティ構成を取るため3台以上のHDDが必要となります。

ミラーリングによって高速化されたパリティを構成する

ストレージプールの作成

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

それでは早速「ミラーリングによって高速化されたパリティ」を構成してみましょう。

サーバーマネージャーを立ち上げ、左ペインから「ファイルサービスと記憶域サービス」を開き、記憶域プールの追加を行います。

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

記憶域プールに適当な名前を付け、「次へ」をクリックします。

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

続いてストレージプールに追加するHDDとSSDを選択肢、「次へ」をクリックします。

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

確認画面が表示されるので、問題無いことを確認したら「作成」をクリックします。

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

正常に作成できたら、上図の様にHHDとSSDがメンバーとして追加されたプールが表示されます。

HDD層とSSD層をそれぞれ作成する

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

続いて、PowerShellを管理者として実行し、仮想ディスクの構成を行います。

Get-StoragePool

まずは上図コマンドレットを実行し、ストレージプールが正常に作成されていることを確認します。

例では「tank」というストレージプールを作成しています。
以降に記載しているコマンドレットに「tank」と記載されている部分はご自身で作成したストレージプール名に置き換えてください。

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

続いて下記のコマンドレットを実行し、作成したストレージプールにSSDが2台、HDDが3台以上あることを確認します。

 Get-StoragePool tank | Get-PhysicalDisk | ft FriendlyName,SerialNumber,CanPool,BusType,DeviceID,EnclosureNumber,MediaType,Size -Autosize

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

続いて下記のコマンドレットを実行し、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         :

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

続いて下記のコマンドレットを実行し、DataTierという名前のHDD層(HDD Tier)を作成します。

コマンドレット末尾の-NumberOfColumnsの値はHDD層(HDD Tier)に追加するHDDの台数を記載します。
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とHDDで階層記憶域を構築し、安価で高速なストレージを構築する

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

SSD層(SSD Tier)とHDD層(HDD Tier)の作成が完了したので、次は下記コマンドレットを実行して仮想ディスクの作成を行います。

今回はライトバックキャッシュのサイズを16GBとしています。

-StorageTierSizesの値は、SSD層のサイズ(バイト),HDD層のサイズ(バイト)となります。

SSD層とHDD層のサイズはそれぞれ実容量の1割から2割ほど差し引いた値を設定します。

マイクロソフトによると、パリティデータが複雑さを極めるため、従来より多めの領域を確保する必要があり、必要な領域を計算する方法がないため、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

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

なお上図の様にサーバーマネージャーで記憶域プールの割り当て済みの割合とにらめっこしながらカツカツに設定することもできます。

ReFSボリュームの作成

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

仮想ディスクの作成が完了したら、ディスクの管理を開きます。

すると作成した仮想ディスクがオフライン状態でアタッチされていますので、オンライン -> ディスクの初期化 -> 新しいシンプルボリュームの作成を行います。

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

「ミラーリングによって高速化されたパリティ」の要件にReFSを利用することとありますので、ReFSでフォーマットするようにします。

今更ですが、ReFSでフォーマットしたディスク/仮想ディスクはNFS接続がサポートされていないため、共有フォルダとして利用する際は、CIFSかiSCSIで接続するようにします。

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

全て無事に完了すれば上図の通り、通常のストレージと同じようにWindowsへマウントされます。

ライトバックキャッシュのサイズより大きいファイルを読み書きしたらどうなるか

今回ライトバックキャッシュのサイズを1GBとして設定しましたが、もしライトバックキャッシュのサイズを超えるデータを読み書きしたら、パフォーマンスにどれくらいの影響を与えるのでしょうか。

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

こちらが1GBのファイルを読み書きした際のベンチマーク。

SSDとHDDで階層記憶域を構築し、安価で高速なストレージを構築する

そしてこちらがライドバックキャッシュのサイズより大きい32GBのファイルを読み書きした際のベンチマークです。

確かにスコアとしては少し落ちますが、大きく低下することはない事が確認できました。

最近のエンタープライズ向け高速ストレージと言えば、Dell EMCのPowerMaxやXtremIO、HPEの3PAR StoregeServなどでも見られるオールフラッシュ構成の物を採用する形になりますが、その導入価格は非常に高額です。

中小企業ユーザにとってはハイリスクな製品であるがために、中々手が出せませんが今回の様に「ミラーリングによって高速化されたパリティ」を利用すれば、安価に高速なストレージを構築することができますね。

今回はSSD層にSATA3のSSDを利用しましたが、NVMeストレージも利用できますので、HDDとNVMe、SSDとNVMeなんて構成も可能です。

映像関係などの大容量コンテンツを扱っている中業企業ユーザは一考してみる価値はあるかと思われます。

Source: vir7検証部屋 | Microsoft Docs