セイテクエンジニアのブログ 製品コラム 記憶域スペースダイレクト(S2D)の容量、障害監視ーBOM for Windows活用例
2024年07月24日配信
執筆者:セイ・テクノロジーズ エバンジェリスト
記憶域スペースダイレクト(S2D)は、専用の共有記憶域装置を必要としない、ソフトウェア定義のクラスター用記憶域です。その使用状況と、物理ディスクの障害を「BOM for Windows Ver.8.0 SR1」(以下、BOM)で監視する方法を紹介します。
記憶域スペースダイレクト(Storage Spaces Direct≪S2D≫)は、Windows Server 2016以降およびAzure Stack HCIが備えるソフトウェア定義の記憶域ソリューションです。
記憶域スペース ダイレクトの概要(Microsoft)
S2Dを使用すると、フェールオーバークラスター用に共有記憶域装置を用意しなくても、2台から最大16台の物理サーバーのそれぞれに接続された物理ディスクを、ソフトウェア定義の記憶域プールとして結合できます。S2Dの記憶域プールの記憶域は、キャッシュや階層(PMMem、NVMe、SSD、HDD)、回復性(シンプル、ミラー、パリティ)、シンプロビジョニング機能(Azure Stack HCI 21H2以降)を備えた仮想ディスクとして切り出すことができ、クラスターの共有ボリューム(Cluster Shared Volumes≪CSV≫)として高可用性アプリケーション(Hyper-V、SQL Server、ファイルサーバーなど)の格納域として利用することができます。
複数の物理ディスクを使用して記憶域スペースおよび記憶域スペースダイレクト(S2D)の記憶域プールを作成すると、その物理ディスクは非表示になり、代わりに、記憶域から作成された仮想ディスク(仮想マシンの仮想ハードディスクとは異なります)が、物理ディスクと全く同じように見え、そして扱うことができます。その仮想ディスクにドライブ文字が割り当てられているのであれば、BOM標準の「ディスク容量監視」監視項目で空き容量を監視することができますが、フェールオーバークラスターのCSVとして利用されるS2D上の仮想ディスク/ボリュームは、「C:¥ClusterStorage」の下にマウント(C:¥ClusterStorage¥<ボリューム名>)されるため、「ディスク容量監視」監視項目では対応できません。
Windows Serverの「フェールオーバークラスターマネージャー」スナップインや「Windows Admin Center」の「クラスターマネージャー」を使用すると、CSVの容量や空き領域をGUIで確認することができます。その情報をコマンドラインから取得するには、通常のボリュームにも利用できる汎用的な「Get-Volume」コマンドを使用できます(画面1)。
画面1 S2Dの記憶域スペースから作成したCSVの容量監視には、Get-Volumeを使用できる
例えば、フェールオーバークラスターの任意のノード(クラスターを構成する物理サーバー)で次のコマンドラインを実行すると、ボリュームのサイズと空き領域(バイト)を取得できます。除算すれば空き領域の割合を取得できます。
PS C:¥> (Get-Volume -FriendlyName "ボリューム名").Size PS C:¥> (Get-Volume -FriendlyName "ボリューム名").SizeRemaining |
シン(Thin、仮想)プロビジョニングタイプの仮想ディスクの場合は、物理容量を超えたサイズを事前に割り当てておくことができるため、Get-Volumeで取得できる値に加えて、記憶域プールの使用状況にも注意する必要があります。既定の名称(S2D on クラスター名)で作成されたS2Dの記憶域プールの場合は、次のコマンドラインを実行することで、プール全体の容量と、割り当て済みサイズを確認することができます。除算すれば、未割り当て(空き)領域の割合を取得できます(画面2)。
PS C:¥> (Get-StoragePool -FriendlyName "S2D*").Size PS C:¥> (Get-StoragePool -FriendlyName "S2D*").AllocatedSize |
画面2 Get-VolumeおよびGet-StoragePoolを使用して、S2Dのボリュームと記憶域スペースの空き領域の割合を取得する
記憶域プールは、1台または1台以上のディスク障害を許容します。許容されるディスク障害の数は回復性オプションやディスクの数、ノードの数で決まりますが(以下のドキュメントを参照)、どのような回復性オプションで構築する場合でも1台のディスク障害までは記憶域へのアクセスやデータが失われることがありません。しかし、許容できない数のディスク障害が発生する前に、障害ディスクを交換するなどして、早急に正常な状態に復帰させることが重要です。
Azure Stack HCI および Windows Server クラスターでのフォールト トレランスと記憶域の効率性(Microsoft)
フェールオーバークラスターの任意のノードで次のコマンドラインを実行すると、S2Dの記憶域スペースに使用されている物理ディスクの一覧を取得することができます。「HealthStatus」が「Healty」なら正常、それ以外なら何らかの異常があると分かります(画面3)。
PS C:¥> Get-StorageSubsystem -FriendlyName "Cluster*"| Get-PhysicalDisk |
画面3 S2D記憶域プールを構成する物理ディスクの正常性の取得
S2Dの正常性状態の確認には、Windows Server 2016からフェールオーバークラスタリング機能に導入された「ヘルス」サービスを使用することもできます。
ヘルス サービスの障害を表示する(Microsoft)
フェールオーバークラスターの任意のノードで次のコマンドレットを実行すると、ヘルスサービスがS2Dのクラスター全体に影響を与える障害が返されます。ほとんどの場合、ハードウェアまたは構成に関連する障害です。なお、1台のディスク障害はクラスター全体に影響するものではないため、ヘルスサービスは障害として報告しません。障害がない場合、コマンドレットからは(成功ストリームに対して)何も返されませんが、コンソール(警告ストリームに対して)「警告: 現在、障害はありません。」と表示されます。これはスクリプト作成時に注意が必要な点です(警告ストリームはパイプラインに渡せないなど)。
PS C:¥> Get-HealthFault |
ここまで紹介したPowerShellのコマンドラインを、BOMのカスタム監視で実行することを想定してスクリプト化しました。
「get-s2dfreespace.ps1」と「get-s2dpoolfreespace.ps1」は、引数にそれぞれボリューム名(必須)とプール名(省略可)を指定して実行すると空き領域の割合(%)を返します。[get-s2dpdhealth.ps1]は実行すると、異常のあるディスク数を返します。 [get-s2dhealth.ps1]は、クラスター全体に影響する詳細があれば1を、なければ0を返します。
[get-s2dpdhealth.ps1]と[get-s2dhealth.ps1]は、引数としてログファイルのパスを指定することで、障害情報をログファイルに書き込むことが可能です。なお、Windows PowerShell(powershell.exe)の既定のファイルエンコードはUTF-16 LEですが、メール送信アクションでメール本文に埋め込むことができるように、シフトJIS(ANSI)エンコードで作成するようにしました。
[get-s2dfreespace.ps1](引数にボリューム名を指定、必須)
BOMに新規に監視グループを作成し、その中に監視設定として4つのカスタム監視を作成します。これらの監視設定は、プログラム名「powershell.exe」の引数として上の4つのPowerShellスクリプトと、引数としてボリューム名やログファイル名を指定します(画面4)。ログファイル名にBOM予約済み変数を使用して「'$(DetectedDataDir)¥$(MonitorID).txt'」のように指定すると、メール送信アクションでメールへの送信や本文への埋め込みに便利です(画面5)。
画面4 カスタム監視の設定例
画面5 メール送信アクションの設定例
ステータスのしきい値は、各スクリプトが返す値やその意味を考慮して調整してください。例えば、この例の「S2D物理ディスク異常」(get-s2dpdhealth.ps1)では、1台までのディスク障害は許容されるため1以上を「注意」、2以上を「危険」に、「S2Dヘルス状態」(get-s2dhealth.ps1)では、1以上を「注意」および「警告」に設定しており、そのステータスになった場合メール送信アクションを実行するようにしています(画面6)。
画面6 メール送信アクションで本文に埋め込まれたログファイルの内容
次の「get-s2dhealthv2.ps1」は、get-s2dhealth.ps1の改良版です。引数にファイルパスを指定することで、物理ディスクの状態に関わらず、CSV形式で物理ディスクの状態を出力します。その出力には、物理ディスクが接続されたノード名も含めました。ただし、物理ディスクが抜かれた状態の場合、unknownと出力します。物理ディスクが接続されたノード名の取得については、かつて山市良と呼ばれていたおじさんのブログの「メモ. 依頼品: 記憶域スペースダイレクト(S2D)のディスク障害をコマンドで監視したい」をご覧ください。
[get-s2dpdhealthv2.ps1](引数にログファイルのパスを指定、省略可)