Hyper-V環境で両系活性防止のため強制停止リソースを設定してみました(Windows)

CLUSTERPRO オフィシャルブログ ~クラブロ~

サイト内の現在位置を表示しています。

はじめに

Hyper-V環境において、HAクラスターの両系活性防止を考慮したHAクラスターを構築してみました。

CLUSTERPROでは、両系活性を防止する方法としてネットワークパーティション解決(以降、NP解決)が設定可能です。しかし、NP解決を設定したとしてもOSストールやHAクラスターを構築するサーバー間の通信断などの障害が起きた場合は両系活性が発生する可能性があります。そのような場合にも両系活性を発生させないようにするために強制停止リソースという機能が用意されています。

今回はHyper-V上でHAクラスターを構築し、両系活性防止用にNP解決リソースおよび強制停止リソースを設定する手順を紹介します。

この記事の内容

1. Hyper-V環境での強制停止リソース

強制停止リソースは、CLUSTERPROによって現用系サーバーと待機系サーバー間のハートビート途絶が検出された時に動作する機能で、BMCまたは仮想化基盤が備えているコマンドを使用して現用系サーバーを外部から強制的に停止させることができます。

強制停止リソースは、HAクラスターを構築する環境に合わせていくつかのタイプが用意されていますが、CLUSTERPRO X 5.3ではHyper-V環境向けの強制停止リソースは用意されていないため、Hyper-V環境向けの強制停止スクリプトを作成してカスタムタイプの強制停止リソースから実行します。

強制停止リソースの解説について以下の記事を参照してください。

【参考】
popupCLUSTERPRO X 5.0のご紹介~強制停止リソース~
→ 1. 強制停止リソースとは

2. 強制停止リソースの設定手順

Hyper-V環境でのカスタムの強制停止リソースの設定手順を紹介します。今回はあらかじめフローティングIPリソースを利用したミラーディスク型のHAクラスターを構築しています。構築したHAクラスターの構成図は以下のとおりです。

今回、ホストOSには「Admin001」、ゲストOSには「Admin002」というユーザーを作成しました。「Admin002」ユーザーは強制停止リソース用スクリプトの実行ユーザーとして、アカウント情報をCLUSTERPROに登録する必要があります。このときHAクラスターを構成する各サーバー(ゲストOS)で同一のユーザー名・パスワードを使用する必要があるため、「Admin002」ユーザーのパスワードを統一しています。

■Hyper-V ホスト

  • ホスト名: hyperv-server
  • IPアドレス: 10.5.1.10
  • ユーザー名: Admin001
  • パスワード: 任意

■Hyper-V ゲスト

  • 操作用Client
    ーHyper-V マネージャー上の表示名: guest-client
    ーホスト名: client
    ーIPアドレス: 10.5.1.100
    ーユーザー名: 任意
    ーパスワード: 任意
  • 現用系サーバー
    ーHyper-V マネージャー上の表示名: guest-server1
    ーホスト名: server1
    ーIPアドレス: 10.5.1.120
    ーユーザー名: Admin002
    ーパスワード: 任意
  • 待機系サーバー
    ーHyper-V マネージャー上の表示名: guest-server2
    ーホスト名: server2
    ーIPアドレス: 10.5.1.121
    ーユーザー名: Admin002
    ーパスワード: 現用系サーバーと同じパスワード

■CLUSTERPROバージョン

  • CLUSTERPRO X 5.3 for Windows(内部バージョン: 13.31)

■フェールオーバーグループ(failover)

  • フローティングIPリソース(fip)
    ーIPアドレス:10.5.1.200
  • ミラーディスクリソース(md)
    ークラスタパーティション:E:
    ーデータパーティション:F:

■モニタリソース

  • フローティングIP監視リソース(fipw1)
  • ミラーディスク監視リソース(mdw1)
  • ユーザ空間監視リソース(userw)

「Admin001」ユーザー作成後、所属グループの追加を行います。以下のグループを追加します。

■所属するグループ

  • Administrators
  • Hyper-V Administrators
  • Remote Management Users

「Admin002」ユーザーはPowerShellスクリプトを実行するため、スクリプトの実行ポリシーを設定します。

  • 1.
    Hyper-V ゲスト側でPowerShellを管理者権限で起動し、以下のコマンドを実行します。

> Get-ExecutionPolicy -List

  • 2.
    必要に応じて、以下のコマンドでポリシーを変更します。

> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

2.1 Hyper-V ホストに対するリモート操作の設定

Hyper-V上に作成したゲストOSからHyper-V ホストに対してHyper-V コマンド(例:Stop-VM)を実行するには、ホスト側の管理機能をリモートで利用する必要があります。そのため、ホスト(リモートコンピューター)上でコマンドを実行可能にするための設定を行います。

  • 1.
    リモートからPowerShellの実行を受け付けられるようにします。Hyper-V ホスト側でPowerShellを管理者権限で起動し、以下のコマンドを実行します。

> Enable-PSRemoting

  • 2.
    Hyper-V ホストをHyper-V ゲスト上の信頼できるホストとして登録します。server1とserver2でPowerShellを管理者権限で起動し、以下のコマンドを実行します。

> net start WinRM
> Set-Item WSMan:\localhost\Client\TrustedHosts -Value "<Hyper-V ホストのIPアドレス>"

  • 3.
    資格情報を作成します。今回はHyper-V ホスト側とHyper-V ゲスト側で異なるユーザーやパスワードを設定しているため、リモート接続時に有効な資格情報を渡す必要があります。今回は入力した資格情報を「C:\Users\Admin002\scripts\forcestop.s」配下に「HyperVCred.xml」として格納しました。

> (Get-Credential -Message "Hyper-V 用の認証情報を入力") | Export-Clixml -Path "C:\Users\Admin002\scripts\forcestop.s\HyperVCred.xml"

  • 4.
    作成完了後、以下のコマンドを実行し、Hyper-V上に作成したゲストOSからHyper-V ホストに対して Hyper-V コマンドが実行できるか確認します。

> $Credential = Import-Clixml -Path "C:\Users\Admin002\scripts\forcestop.s\HyperVCred.xml"

> Invoke-Command -ComputerName <Hyper-V ホストのIPアドレス> -Credential $Credential -ScriptBlock {Stop-VM <現用系のHyper-V マネージャー上の表示名> -TurnOff -WhatIf}

  • 成功すると、以下のようなメッセージが表示されます。-WhatIfオプションを指定した場合は実際の操作は行われないため、仮想マシンの停止は行われません。

2.2 アカウントの登録

強制停止リソースのスクリプトをクラスターサーバー上で実行できるように、あらかじめ作成したスクリプト実行用のユーザー「Admin002」をCLUSTERPROのアカウント設定に追加します。

  • 1.
    Cluster WebUIから[クラスタのプロパティ]を開き、[アカウント]タブの[追加]ボタンを押します。

  • 2.
    [ユーザ名]に「Admin002」、[パスワード]に「Admin002」ユーザーのパスワードを入力します。[OK]ボタンを押します。

2.3 フェンシングの設定

両系活性防止のためにフェンシングの設定項目においてNP解決と強制停止を設定します。
今回はNP解決としてPing NP解決リソースを選択し、ターゲットに操作用クライアント(10.5.1.100)を指定しました。なお、Ping NP解決リソースのターゲットには構成情報に登録したインタコネクトLAN経由でPing応答を返却可能な、クラスターサーバー以外の常時稼動している装置を指定する必要があります。実際の環境でNP解決を設定する場合は、構築する環境に合わせて適切なタイプを選択してください。

2.3.1 NP解決の設定

  • 1.
    Cluster WebUIから[クラスタのプロパティ]を開き、[フェンシング]タブを選択します。[追加]を押してPing NP解決リソースを追加し、[ターゲット]を入力します。

2.3.2 強制停止の設定

  • 1.
    続けて、[強制停止]の[タイプ]のプルダウンから[カスタム]を選択し、[プロパティ]ボタンを押します。

[サーバ一覧]タブ

  • 1.
    [サーバ一覧]タブで「server1」を選択し、[追加]ボタンを押します。server2も同様の手順で設定します。

[強制停止]タブ

  • 1.
    [強制停止]タブで「強制停止タイムアウト」として強制停止時の最大待ち時間を設定します。本記事のサンプルスクリプト利用時の強制停止タイムアウトに設定すべき値は次の式で計算することができます。

強制停止タイムアウト秒数 > CHECK_LOOP_MAX × SLEEP_WAIT
    CHECK_LOOP_MAX: 停止チェックの最大試行回数
    SLEEP_WAIT: 停止チェック間隔(秒)

  • CHECK_LOOP_MAXが10回、SLEEP_WAITが3秒である場合は31秒以上の設定が必要となりますが、本記事では余裕を持たせて60秒を設定しています。

スクリプトのサンプル「forcestop.ps1」は以下のリンクよりダウンロード可能です。サンプルを利用する際はファイル名の「_」を「.」に変更します。

  • ※サンプルスクリプトは動作を保証するものではありません。

    変数SERVERSには、HAクラスターを構成する仮想マシンのOS上のホスト名、Hyper-V マネージャー上の表示名とHyper-V ホストのIPアドレスを指定します。変数CHECK_LOOP_MAXとSLEEP_WAITにはそれぞれ停止チェックの最大試行回数と停止チェック間隔を設定します。

  • 2.
    作成したPowerShellスクリプトを「C:\Users\Admin002\scripts\forcestop.s」配下に格納しておきます。

[スクリプト]タブ

  • 1.
    Cluster WebUIに戻り、[スクリプト]タブで「forcestop.bat」を選択し、[編集]ボタンを押します。

  • 2.
    以下のスクリプトの内容を入力します。PowerShellスクリプト「forcestop.ps1」の格納先「C:\Users\Admin002\scripts\forcestop.s」を指定します。編集し終えたら[OK]を押します。

rem ***************************************
rem *               forcestop.bat                    *
rem ***************************************

cd %~dp0
PowerShell "C:\Users\Admin002\scripts\forcestop.s\forcestop.ps1; exit $lastexitcode"
set ret=%ERRORLEVEL%
echo ret: %ret%
exit /b %ret%

  • 3.
    元の画面に戻り、[スクリプト]タブの下の方にある[実行ユーザ]に「Admin002」を選択します。設定が完了したら「OK」ボタンを押して設定を完了します。

2.4 サービス起動遅延時間の設定

CLUSTERPROサービス起動時の遅延時間を設定します。これにより、強制停止リソース実行中に対向サーバーでOS再起動などが実行された場合に、両系活性が発生することや、クラスター起動処理中に強制停止が実行されることを防止します。本記事の構成ではサービス起動遅延時間を以下となるように設定します。

サービス起動遅延時間 >= 強制停止リソースの強制停止タイムアウト + ハートビートタイムアウト + ハートビートインターバル

サービス起動遅延時間は、[クラスタのプロパティ]の[タイムアウト]タブにある[サービス起動遅延時間]で設定できます。

また、DISK方式によるNP解決を行う場合や共有ディスクを利用する場合はサービス起動遅延時間の計算について、別の観点での考慮が必要です。
詳細については、popup【2024年版】サービス起動遅延時間設定機能の紹介も併せて参照ください。

3. 動作確認

操作用Client上からCluster WebUIへ接続し、Cluster WebUIのステータス画面から、server1でフェールオーバーグループ(failover)が起動していること、[サーバ]、[グループ]、[モニタ]が正常に起動していることを確認します。

ネットワークパーティション状態を起こし、強制停止リソースの動作を確認します。ネットワークパーティション状態を起こすため、ファイアウォールの設定によりHAクラスターを構成するサーバー間の通信を全て遮断するようにします。これにより、(1)サーバー間のハートビートが途絶えますが、操作用クライアントへのPing通信は可能であるため、それぞれのサーバーが「相手サーバーで問題が発生した」と判断してフェールオーバーグループを起動しようとします。しかし、(2)待機系サーバーではフェールオーバーグループを起動しようとする前に強制停止リソースが動作して、(3)現用系サーバーが停止したことを確認してからフェールオーバーグループを起動します。そのため、両系活性を防ぐことができます。

待機系サーバーが現用系サーバーのダウンを検出した後のアラートログの出力は以下のようになります。フェールオーバーグループの起動前に強制停止リソースを実行していることが確認できます。

2025/12/10 15:19:30.512 server2 nm 102 サーバserver1が停止しました。
2025/12/10 15:19:35.160 server2 forcestop 5201 サーバ server1 の強制停止を要求しました。(custom, none)
2025/12/10 15:19:35.165 server2 rc 1060 グループ failover をフェイルオーバしています。
2025/12/10 15:19:35.166 server2 rc 1010 グループ failover を起動しています。
2025/12/10 15:19:39.358 server2 mdadmn 3880 ミラーディスクmdのミラーディスクコネクトが切断されています。
2025/12/10 15:19:40.714 server2 rm 1501 監視 fipw1 が起動しました。
2025/12/10 15:19:43.864 server2 rc 1011 グループ failover の起動が完了しました。
2025/12/10 15:19:43.941 server2 rc 1061 グループ failover のフェイルオーバが完了しました。
2025/12/10 15:20:02.311 server2 rm 1504 監視 mdw1 は警告の状態です。 (102 : ミラーディスクmdはミラーリングされていません。)

フェールオーバー完了後、Hyper-V マネージャーから現用系サーバーの起動状態を確認すると「オフ」となっており、現用系サーバーが停止していることを確認できます。

まとめ

今回はHyper-V上で強制停止リソースを利用したHAクラスターの構築手順をご紹介しました。Hyper-V上でネットワークパーティション発生時に両系活性をより確実に防止することができますので、本記事を参考に強制停止リソースの設定をご検討ください。

本記事の構成をご検討の際は、CLUSTERPROのpopup試用版を用いて検証した後、ご提案・構築ください。

利用製品

本記事の環境を構築する際に利用した製品です。

■OS共通
 -CLUSTERPRO X Media 5.3
 -CLUSTERPRO X Startup Kit 5.3
■Windows
 -CLUSTERPRO X 5.3 for Windows VM (1ノードライセンス)
 -CLUSTERPRO X Replicator 5.3 for Windows (1ノードライセンス)

お問い合わせ

本記事やCLUSTERPROに関するお問い合わせは、popupCLUSTERPROの各種お問い合わせ窓口までお問い合わせください。
  • 本記事で紹介しているスクリプトはサンプルであり動作を保証するものではありません。スクリプトの内容についてのお問い合わせ、および、お客様環境に合わせたカスタマイズにつきましてはCLUSTERPRO導入支援サービスにて承っておりますので、上記窓口の"ご購入前のお問い合わせ"フォームまでお問い合わせください。
  • CLUSTERPRO以外のソフトウェアのサポートについてはそれぞれの購入元にお問い合わせください。