Windows Server 2019 の Hyper-V クラスター環境のメンテナンス操作時の注意事項

Last Update: feedback 共有

いつも弊社製品をご利用いただきまして誠にありがとうございます。

Windows プラットフォームサポートの石田です。

今回は Windows Server 2019 にて Hyper-V クラスターを構成している環境でのメンテナンス時の注意点についてご案内させていただきます。

特に、クラスターの共有ボリューム (CSV) の所有者ノードに対して更新プログラムの適用や定期メンテナンスなど OS の再起動やクラスターサービスの再起動などを行われる際には、予め本記事でご紹介させていただいております対応を実施していないと、その CSV 上で動作している仮想マシンが予期せず再起動してしまう場合がございますのでご注意ください。

対象:

Windows Server 2019 にて Hyper-V クラスターを構成し、仮想マシンの記憶域に CSV を設定されている環境

事象:

CSV 所有者ノードのクラスターサービスの停止や OS のシャットダウン/再起動を行うと、CSV への I/O が一定時間ブロックされる状況が発生します。
その影響で動作中の仮想マシンの I/O が失敗したり、仮想マシンが予期せず再起動することがあります。

原因:

CSV の所有者となっているノードにてクラスターサービスの停止や OS のシャットダウン/再起動を行う際は CSV リソースの移動を行ってからクラスター サービスの停止処理が実施されます。

また、CSV リソースの移動が行われると、新たな所有者ノードから全ノードに対して CSV の所有者の切り替えを行う MapDisk という処理を依頼し、全てのノードからその完了通知を待ちます。

対象のノードのクラスターサービスが完全に停止する前に、MapDisk を受け取ると、クラスターサービスの停止処理と MapDisk の処理が競合してしまい所有者ノードへの MapDisk の完了通知が送れない状況が発生します。

その後、クラスターサービスの停止処理はタイムアウト (2 分) して完了しますが、MapDisk の完了通知が送れない状況が発生したことでCSV がアクティブの状態に回復するまでに時間がかかり、対象の CSV で動作している仮想マシンの I/O が通常よりも長く待たされてしまう状況が発生します。

対応策:

以下のいずれかの対応を実施します。なお、弊社では項番 1 の “ノードの一時停止 (ドレイン) の実施” を推奨しております。

  1. ノードの一時停止 (ドレイン) の実施

    CSV 所有者ノードのクラスターサービスの停止や OS の再起動を行う際は、事前にノードの一時停止 (ドレイン) を行い
    リソースを別のノードに移動させてから実施します。

    操作方法

    PowerShell を管理者モードで起動して以下のコマンドレットを実行します。

    1
    2
    PS C:\> Suspend-ClusterNode "対象のノード名" -Drain
    (実行例) PS C:\> Suspend-ClusterNode node1 -Drain
  2. 全ノードにてCsvResiliencyTimeoutMs レジストリ値の設定

    CSV リソースの移動中は仮想マシンから発行された I/O はブロックされ待ち状態となりますが、その影響で CSV 上の仮想ディスク (VHD) への I/O が失敗しないように余裕を持ったタイムアウト値 CsvResiliencyTimeoutMs を設定します。

    全てのノードにて以下の CsvResiliencyTimeoutMs レジストリ値を設定します。既定では CsvResiliencyTimeoutMs は存在しませんが内部的には 30 秒として動作しております。

    CsvResiliencyTimeoutMs に 180000 を設定するとタイムアウト値は 3 分として動作いたします。

    設定方法

    コマンドプロンプトを管理者モードで起動して以下のコマンドを実行します。

    1
    C:\> reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vhdmp\Parameters /v CsvResiliencyTimeoutMs /t REG_DWORD /d 180000

    設定を反映させるために、OS の再起動を実施します。サービス稼働中のクラスター環境の場合は、項番 1 の “ノードの一時停止 (ドレイン)” を実施してから再起動を行います。

以上となります。