スケールアウト ファイルサーバーを構築する!!

Windows Server 2016に”記憶域スペースダイレクト”(S2D)と言う機能が実装されました。
(技術的にはフェールオーバークラスタリング機能がベースとなっています)
これは、各サーバーにマウントされたディスク(DAS)を、仮想ストレージプールとして共有し、各サーバー間でデータを同期する事ができるのです。いままで、Azureでは、難しかった共有ストレージっぽい環境が作成できるのです!!
共有ストレージを利用することで、仮想マシンを増設(スケールアウト)できるので、耐障害性を高めると共に、リソース(CPU,Mem,NIC,Storage)の増強も図れます。

ディスク構成について

①すべてSSD(Premium Storage)。パフォーマンス重視
②すべてHDD(Standard Storage)。容量重視
③SSD+HDD混在。キャッシュとしてSSDを利用 ※Azure上では構成できません
ちなみに、キャッシュディスク容量は、保存容量に含まれません。

ディスク冗長について

①双方向ミラーリング:2台構成の場合。IOPSを求めるならコレ。容量効率50%
②3方向ミラーリング:3台構成の場合。上記よりさらにSLAが高い構成。容量効率33.3%
③デュアル パリティ(消失訂正符号):4~16台の場合。容量効率50~80%
※Azureの場合、ホットスペアの考慮は不要

“サーバー” “キャッシュディスク” “キャパシティディスク”どの箇所に障害が発生しても影響は同じです。下記の場合、3方向ミラーリング、デュアル パリティでもデータがロストします。


それでは、やってみましょ~

今回は、2台構成のファイルサーバーを構築していきます!

先ずは、Azureでの環境を構築します。
・リソースグループ
仮想ネットワーク
ストレージアカウント(Quorum Disk用)
仮想マシン(Active Directory) x2 ※オンプレでも可
・仮想マシン(ファイルサーバー用) x2
※仮想マシンあたり、2つ以上の追加ディスクが必要
可用性セット、静的IP、ドメイン参加、Managed Disk対応

以下、仮想マシン(ファイルサーバー用) で実施。管理者権限でPowerShellを起動
赤字は環境に合わせてください。

変数にノードを登録”FS01″ “FS02″はファイルサーバーのホスト名
$nodes = (“FS01“, “FS02“)

役割をインストール
icm $nodes {Install-WindowsFeature FS-FileServer}

機能をインストール
icm $nodes {Install-WindowsFeature Failover-Clustering -IncludeAllSubFeature -IncludeManagementTools}

構成の検証を実施
Test-Cluster -node $nodes

クラスターの作成。クラスタ名とVIPを設定。DNSに登録される。
New-Cluster -Name FS_Cluster -Node $nodes -NoStorage -StaticAddress 10.0.18.99

スプリットブレイン対策のための、クォーラムディスク(BLOB)を指定
Set-ClusterQuorum -CloudWitness -AccountName blob01 -AccessKey PKpPb15Q==

記憶域スペースダイレクトを有効化し、接続済みのストレージを仮想プールに追加
Enable-ClusterS2D

仮想プールから仮想ボリュームを作成
※残念ですが、シンプロビジョニング機能はありません。
New-Volume -StoragePoolFriendlyName S2D* -FriendlyName VDisk01 -FileSystem CSVFS_REFS -Size 1024GB

[ボリューム拡張方法]
Get-VirtualDisk VDisk01 | Resize-VirtualDisk -Size 2TB
$VirtualDisk = Get-VirtualDisk VDisk01
$Partition = $VirtualDisk | Get-Disk | Get-Partition | Where PartitionNumber -Eq 2
$Partition | Resize-Partition -Size ($Partition | Get-PartitionSupportedSize).SizeMax

クラスタの役割を[スケールアウトファイルサーバー]に設定。DNSに登録される。
Add-ClusterScaleOutFileServerRole -Name FS -Cluster FS_Cluster

共有ディレクトリ”Data”を作成
New-Item -Path C:\ClusterStorage\Volume1\Data -ItemType Directory

ファイル共有”Share”を作成
New-SmbShare -Name Share -Path C:\ClusterStorage\Volume1\Data


それでは、接続してみましょう!

クラスター名”FS”、共有名”Share”で接続できました。

名前を引くと、ラウンドロビンでIPを返答するので負荷分散が可能


おまけ

SSD+HDD混在構成ができない理由

キャッシュディスクを指定するには、”ディスク名”を指定する必要があるのですが、Azure上の仮想ディスクの場合、すべて同じ名前(Virtual Disk)となり指定する事ができません。

※赤枠が追加ディスク  ぜ~~んぶ同じ名前だよ!!

ちなみに、キャッシュディスクを作成するコマンド
Enable-ClusterS2D -CacheDeviceModel “Virtual Disk”
※指定したディスクをキャッシュディスクとして、残りをキャパシティディスクにする。


最後に、

記憶域スペースダイレクトは”RDMA”を推奨しています。ユーザーアクセス以外に、サーバー間でのデータ同期が発生するので、ネットワークパフォーマンスは重要なのです。
RDMA対応のNICと言えば、”Mellanox ConnectX”が対応しております。
ここで、ピンと来た方は “くらう道” 熟読者です!
Azure上の仮想マシンで”Mellanox ConnectX”を利用する方法がありますよね~
まさにチート技 「SR-IOV」を試す!!」で書きましたが、仮想マシンから直接NICを利用する事ができます。

あともう一つ”ReFS”を推奨しているので、仲良くお付き合いしましょう!