フォールト ドメインの認識

適用対象: Windows Server 2022、Windows Server 2019、Windows Server 2016、Azure Stack HCI バージョン 21H2 および 20H2

フェールオーバー クラスタリングでは、複数のサーバーが連携して高可用性 (言い換えれば、ノードのフォールト トレランス) を実現できます。 しかし、今日のビジネスでは、インフラストラクチャの可用性をますます高める必要があります。 クラウドのようなアップタイムを達成するには、シャーシの障害、ラックの停止、自然災害など、発生する可能性が極めて低い事態であっても対策を講じる必要があります。 そのため、Windows Server 2016 のフェールオーバー クラスタリングには、シャーシ、ラック、サイトのフォールト トレランスも導入されています。

障害ドメインとフォールト トレランス

障害ドメインとフォールト トレランスは、密接に関連する概念です。 障害ドメインとは、単一障害点を共有するハードウェア コンポーネントのセットです。 特定のレベルのフォールト トレランスを実現するには、そのレベルに複数の障害ドメインが必要です。 たとえば、ラックのフォールト トレランスを実現するには、サーバーとデータが複数のラックに分散されている必要があります。

このショート ビデオでは、Windows Server 2016 での障害ドメインの概要について説明します。Click this image to watch an overview of fault domains in Windows Server 2016

Windows Server 2019 での障害ドメインの認識

障害ドメインの認識は Windows Server 2019 で利用できますが、既定では無効になっており、Windows レジストリを使用して有効にする必要があります。

Windows Server 2019 で障害ドメインの認識を有効にするには、Windows レジストリに移動し、(Get-Cluster).AutoAssignNodeSite レジストリ キーを 1 に設定します。

    (Get-Cluster).AutoAssignNodeSite=1

Windows 2019 で障害ドメインの認識を有効にするには、Windows レジストリに移動し、(Get-Cluster).AutoAssignNodeSite レジストリ キーを 0 に設定します。

    (Get-Cluster).AutoAssignNodeSite=0

メリット

  • 記憶域スペース ダイレクトを含めて、記憶域スペースでは、データの安全性を最大化するために障害ドメインが使用されます。 記憶域スペースの回復性は、分散型の、ソフトウェアで定義される RAID と概念的に似ています。 すべてのデータの複数コピーは、同期されて保持されます。ハードウェアで障害が発生して、1 つのコピーが失われると、回復性を復元するために、他のコピーが再びコピーされます。 回復性を最適化するには、別個の障害ドメイン内にコピーが保持される必要があります。

  • ヘルス サービスでは、障害ドメインを使用して、より役立つアラートを提供します。 各障害ドメインを場所のメタデータと関連付けることができます。これは後続のアラートに自動的に含まれるようになります。 これらの記述子は、運用や保守の担当者の役に立ちます。これらの記述子でハードウェアを明確にすることにより、エラーを減らすこともできます。

  • ストレッチ クラスタリングでは、ストレージ アフィニティに障害ドメインを使用します。 ストレッチ クラスタリングにより、遠隔地のサーバーを一般的なクラスターに参加させることができます。 最高のパフォーマンスのためには、記憶域を提供するサーバーの近くにあるサーバーでアプリケーションまたは仮想マシンを実行する必要があります。 障害ドメインの認識によって、このストレージ アフィニティが有効になります。

障害ドメインのレベル

障害ドメインには、サイト、ラック、シャーシ、ノードという 4 つの標準的なレベルがあります。 ノードは自動的に検出されます。追加の各レベルはオプションです。 たとえば、展開でブレード サーバーを使用しない場合、シャーシ レベルは合理的でない可能性があります。

Diagram of the different levels of fault domains

使用

PowerShell または XML マークアップを使用して、障害ドメインを指定できます。 どちらの方法も同等であり、完全な機能が提供されます。

重要

障害ドメインを指定してから、可能であれば、記憶域スペース ダイレクトを有効にします。 これにより、シャーシまたはラックのフォールト トレランスのためにプール、階層、および設定 (回復性や列の数など) を準備する自動構成が可能になります。 プールとボリュームが作成された後に、障害ドメイン トポロジの変化に応じてデータが遡及的に移動することはありません。 記憶域スペース ダイレクトを有効にした後に、シャーシ間やラック間でノードを移動するには、Remove-ClusterNode -CleanUpDisks を使用して、最初にノードとそのドライブをプールから削除する必要があります。

PowerShell による障害ドメインの定義

Windows Server 2016 では、障害ドメインを操作するために次のコマンドレットが導入されています。

  • Get-ClusterFaultDomain
  • Set-ClusterFaultDomain
  • New-ClusterFaultDomain
  • Remove-ClusterFaultDomain

このショート ビデオでは、これらのコマンドレットの使用法を説明します。 Click this image to watch a short video on the usage of the Cluster Fault Domain cmdlets

現在の障害ドメイン トポロジを確認するには、Get-ClusterFaultDomain を使用します。 これにより、クラスター内のすべてのノードと、作成したシャーシ、ラック、またはサイトが一覧表示されます。 -Type-Name といったパラメーターを使用して、フィルター処理できます。ただし、これらのパラメーターは必須ではありません。

Get-ClusterFaultDomain
Get-ClusterFaultDomain -Type Rack
Get-ClusterFaultDomain -Name "server01.contoso.com"

新しいシャーシ、ラック、またはサイトを作成するには、New-ClusterFaultDomain を使用します。 -Type パラメーターと -Name パラメーターは必須です。 -Type で有効な値は、ChassisRackSite です。 -Name は、任意の文字列です。 (種類が Node である障害ドメインの場合、この名前は、自動的に設定される実際のノード名である必要があります)。

New-ClusterFaultDomain -Type Chassis -Name "Chassis 007"
New-ClusterFaultDomain -Type Rack -Name "Rack A"
New-ClusterFaultDomain -Type Site -Name "Shanghai"

重要

Windows Server では、作成された障害ドメインが実際の物理的な世界のなにかに対応することの確認は不可能であり、確認が行われることもありません。 (これは当然のように聞こえるかもしれませんが、理解することが重要です)。現実の世界で 1 つのラックにすべてのノードが含まれる場合に、ソフトウェアで 2 つの -Type Rack 障害ドメインを作成しても、ラックのフォールト トレランスが魔法のように実現することはありません。 上記のコマンドレットを使用して、ハードウェアの実際の配置と一致するトポロジを作成する必要があります。

ある障害ドメインを別のものに移動するには、Set-ClusterFaultDomain を使用します。 "親" と "子" という用語は、この入れ子の関係を説明するのに一般的に使用されます。 -Name パラメーターと -Parent パラメーターは必須です。 -Name には、移動する障害ドメインの名前を指定します。-Parent には、移動先の名前を指定します。 複数の障害ドメインを一度に移動するには、それらの名前を列記します。

Set-ClusterFaultDomain -Name "server01.contoso.com" -Parent "Rack A"
Set-ClusterFaultDomain -Name "Rack A", "Rack B", "Rack C", "Rack D" -Parent "Shanghai"

重要

障害ドメインが移動するときは、その子も一緒に移動します。 上記の例で、Rack A が server01.contoso.com の親である場合、server01.contoso.com は、現実の世界と同様に、親 (Rack A) の移動先 (Shanghai サイト) にすでに存在するため、別途 Shanghai サイトに移動する必要はありません。

Get-ClusterFaultDomain の出力で、ParentNameChildrenNames 列に親子関係が確認できます。

また、Set-ClusterFaultDomain を使用して、障害ドメインのその他の特定のプロパティを変更することもできます。 たとえば、任意の障害ドメインに対してオプションの -Location または -Description メタデータを指定できます。 この情報を指定すると、ヘルス サービスからのハードウェアのアラートにこの情報が含まれるようになります。 また、-NewName パラメーターを使用して、障害ドメインの名前を変更することもできます。 種類が Node の障害ドメインの名前は変更しないでください。

Set-ClusterFaultDomain -Name "Rack A" -Location "Building 34, Room 4010"
Set-ClusterFaultDomain -Type Node -Description "Contoso XYZ Server"
Set-ClusterFaultDomain -Name "Shanghai" -NewName "China Region"

作成したシャーシ、ラック、またはサイトを削除するには、Remove-ClusterFaultDomain を使用します。 -Name パラメーターは必須です。 子を含む障害ドメインを削除することはできません。最初に、子を削除するか、または Set-ClusterFaultDomain を使用して子を外部に移動します。 すべての他の障害ドメイン外部に障害ドメインを移動するには、-Parent を空の文字列 ("") に設定します。 種類が Node の障害ドメインを削除することはできません。 複数の障害ドメインを一度に削除するには、それらの名前を列記します。

Set-ClusterFaultDomain -Name "server01.contoso.com" -Parent ""
Remove-ClusterFaultDomain -Name "Rack A"

XML マークアップによる障害ドメインの定義

XML を基にした構文を使用して、障害ドメインを指定できます。 Visual Studio Code (こちらから無料で入手できます) やメモ帳など、使い慣れたテキスト エディターを使用して、保存して再利用できる XML ドキュメントを作成することをお勧めします。

このショート ビデオでは、障害ドメインを指定するための XML マークアップの使用法を説明します。

Click this image to watch a short video on how to use XML to specify fault domains

PowerShell で次のコマンドレットを実行します。Get-ClusterFaultDomainXML これにより、クラスターの現在の障害ドメインの詳細が XML として返されます。 これには、<Topology> の開始と終了タグに囲まれて検出されたすべての <Node> が反映されます。

次のコマンドレットを実行して、この出力をファイルに保存します。

Get-ClusterFaultDomainXML | Out-File <Path>

ファイルを開き、サイト、ラック、シャーシにこれらのノードをどのように配布するかを指定するために、<Site><Rack><Chassis> タグを追加します。 すべてのタグは、一意の Name で識別される必要があります。 ノードについては、既定で設定された名前をそのまま保持する必要があります。

重要

すべての追加タグはオプションですが、推移的な Site > Rack > Chassis > Node の階層に従って、適切に閉じられる必要があります。 名前に加えて、自由形式の Location="..." および Description="..." 記述子を任意のタグに追加することができます。

例: 2 つのサイトのそれぞれに 1 つのラック

<Topology>
  <Site Name="SEA" Location="Contoso HQ, 123 Example St, Room 4010, Seattle">
    <Rack Name="A01" Location="Aisle A, Rack 01">
      <Node Name="Server01" Location="Rack Unit 33" />
      <Node Name="Server02" Location="Rack Unit 35" />
      <Node Name="Server03" Location="Rack Unit 37" />
    </Rack>
  </Site>
  <Site Name="NYC" Location="Regional Datacenter, 456 Example Ave, New York City">
    <Rack Name="B07" Location="Aisle B, Rack 07">
      <Node Name="Server04" Location="Rack Unit 20" />
      <Node Name="Server05" Location="Rack Unit 22" />
      <Node Name="Server06" Location="Rack Unit 24" />
    </Rack>
  </Site>
</Topology>

例: 2 つのシャーシ、ブレード サーバー

<Topology>
  <Rack Name="A01" Location="Contoso HQ, Room 4010, Aisle A, Rack 01">
    <Chassis Name="Chassis01" Location="Rack Unit 2 (Upper)" >
      <Node Name="Server01" Location="Left" />
      <Node Name="Server02" Location="Right" />
    </Chassis>
    <Chassis Name="Chassis02" Location="Rack Unit 6 (Lower)" >
      <Node Name="Server03" Location="Left" />
      <Node Name="Server04" Location="Right" />
    </Chassis>
  </Rack>
</Topology>

新しい障害ドメインの詳細を設定するには、XML を保存して、PowerShell で次を実行します。

$xml = Get-Content <Path> | Out-String
Set-ClusterFaultDomainXML -XML $xml

このガイドでは例を 2 つだけ挙げていますが、多くのその他の方法で <Site><Rack><Chassis><Node> タグを組み合わせて、デプロイの物理トポロジがどのようなものであっても、それを反映させることができます。 上記の例は、これらのタグの柔軟性と、タグを明確にするための自由形式の Location 記述子の価値を説明しています。

省略可能: 場所と説明のメタデータ

任意の障害ドメインに対してオプションの Location または Description メタデータを指定できます。 この情報を指定すると、ヘルス サービスからのハードウェアのアラートにこの情報が含まれるようになります。 この短いビデオでは、このような記述子を追加する価値を示します。

Click to see a short video demonstrating the value of adding location descriptors to fault domains