セイテクエンジニアのブログ 製品コラム カスタム監視でHyper-Vレプリカの監視を強化-BOM for Windows活用例
2024年11月20日配信
執筆者:セイ・テクノロジーズ エバンジェリスト
かつて山市良と呼ばれていたおじさんのブログの最近の記事「メモ. Hyper-Vのもう1つの可用性オプション、Hyper-Vレプリカ」では、2台のHyper-Vホスト間で簡単に構築実装可能な「Hyper-Vレプリカ」を紹介しています。
「BOM for Windows Ver.8.0 SR1」(以下、BOM)には、Hyper-Vレプリカの監視に対応した監視テンプレートが同梱されています。標準のテンプレートにカスタム監視を追加して、さらに監視を強化する方法を紹介します。
BOMには、Windows ServerのHyper-Vレプリカの監視に対応した監視テンプレート「Hyper-Vレプリカ監視」が同梱されており、これをBOMサーバーにインポートするだけですぐにHyper-Vレプリカの監視を開始することができます(画面1)。この監視テンプレートは、Hyper-Vレプリカが依存する「Hyper-V Virtual Machine Management」のサービス監視、およびHyper-Vレプリカ関連のイベントログ監視が定義済みになっているものです。Hyper-Vレプリカの異常を検知することはできますが、Hyper-Vレプリカの状態(正常性や最終同期時刻など)までの監視には対応していません。
画面1 Windows ServerのHyper-Vレプリカは、監視テンプレート「Hyper-Vレプリカ監視」で監視可能
Hyper-Vの役割がインストールされているWindows Serverでは、PowerShell Hyper-Vモジュールのコマンドレットを使用できます。例えば、Hyper-Vレプリカのプライマリ/レプリカサーバーで「Get-VMReplication」コマンドレットを実行すると、Hyper-Vレプリカで保護されたHyper-V仮想マシン(VM)のレプリケーション設定、レプリケーションの状態(ReplicationState)、レプリケーションの正常性(ReplicationHealth)、最終同期日時(LastReplicationTime)の情報を取得することができます(画面2)。
Hyper-V|Windows PowerShell(Microsoft Learn)
Get-VMReplication|Windows PowerShell(Microsoft Learn)
画面2 Get-VMReplicationを実行すると、レプリケーションが有効なVMの設定とレプリケーション状態、正常性、最終同期日時を確認できる
Get-VMReplicationコマンドレットで取得できる、レプリケーションの状態、正常性、最終同期日時をBOMに取り込むために、3つのPowerShellスクリプトを作成しました。
「hvreplstate.ps1」は、レプリケーションの状態が「エラー(Error)」となっているVMの数を返します。0であれば正常であり、レプリケーションの状態は「FailOverWaitingCompletion」「FailedOver」「ReadyForInitialReplication」「Replicating」「Resynchronizing」「ResynchronizeSuspended」「Suspended」「SyncedReplicationComplete」「WaitingForInitialReplication」「WaitingForStartResynchronize」のいずれかであることを示しています。
[hvreplstate.ps1](プレーンテキストで表示)
$vms = Get-VMReplication $replstate = 0 if ($vms -eq $null) { return 0 } else { foreach ($vm in $vms) { if ($vm.ReplicationState -eq "Error") { $replstate++ } } return $replstate } |
「hvreplhealth.ps1」は、VMごとにレプリケーションの正常性(Normal、Warning、またはCritical)の情報を取得し、「Normal」であれば0、「Warning」であれば1、「Critical」であれば2として、VMが1台だけであればその数を返します。複数のVMが存在する場合はその合計値を返します。したがって、すべて正常であれば0、1以上であれば注意、2以上であれば危険と評価できるでしょう。
[hvreplhealth.ps1](プレーンテキストで表示)
$vms = Get-VMReplication $replstate = 0 if ($vms -eq $null) { return 0 } else { foreach ($vm in $vms) { if ($vm.ReplicationHealth -eq "Normal") { } elseif ($vm.ReplicationHealth -eq "Warning") { $replstate = $replstate + 1 } else { $replstate = $replstate + 2 } } return $replstate } |
「hvreplsynctime.ps1」は、レプリケーションが有効なVMごとに、レプリカの最終同期日時と現在の日時との差分(秒)を取得し、複数のVMがある場合は最も経過時間が長い秒数を返します。Hyper-Vレプリカは、30秒、5分(300秒)、または15分(1500秒)の間隔で差分データを同期するため、同期間隔を超えた秒数である場合は注意、最後に同期されてから長い時間が経過している場合は危険と評価できるでしょう。
[hvreplsynctime.ps1](プレーンテキストで表示)
$vms = Get-VMReplication $elaspedsec = 0 if ($vms -eq $null) { return 0 } else { foreach ($vm in $vms) { $tempsec = ((Get-Date) - (Get-Date($vm.LastReplicationTime))).TotalSeconds if ($elaspedsec -lt $tempsec) { $elaspedsec = [int]$tempsec } } return $elaspedsec } |
このPowerShellスクリプトを、BOMがインストールされているHyper-Vサーバーのローカルパスに保存し、各スクリプトに対応した「カスタム監視」を追加します。各監視設定のプロパティでは、「設定」タブのプログラム名に「powershell.exe」と入力し、引数にスクリプトのパスを入力します(画面3)。あとは、監視間隔としきい値を環境に合わせて調整すれば監視設定は完了です。これらのカスタム監視を追加すると、「BOMマネージャー」上でHyper-Vレプリカの現在の状態をより把握しやすくなるでしょう(画面4)。
画面3 PowerShellスクリプトをカスタム監視設定で定期的に実行するように構成する
画面4 レプリケーションを(意図的に)一時停止すると、BOM標準の監視テンプレートでは捉えられていないレプリケーション正常性の変化をカスタム監視が拾い上げている
2025年01月15日 | サーバー設定仕様書の「自動更新を構成する」が実機と一致しない-SSD-assistance FAQ(仮) |
---|---|
2024年12月25日 | サーバー設定仕様書のプロセッサ数と合計コア数について-SSD-assistance FAQ(仮) |
2024年12月13日 | Windows Serverのインストール用USBメディアの作り方-Windows FAQ(仮) |
2024年12月06日 | Azure(従量課金制)の使用コスト監視-BOM for Windows活用例 |
2024年11月20日 | カスタム監視でHyper-Vレプリカの監視を強化-BOM for Windows活用例 |
2024年11月13日 | カスタム監視でフェールオーバークラスターの監視を強化-BOM for Windows活用例 |
2024年11月06日 | IEのアンインストールの可否について-BOM for Windows FAQ(仮) |
2024年10月30日 | Windows Server CoreにBOMをインストールしてみた(サポート外) |
2024年10月23日 | ネットワークドライブの容量監視-BOM for Windows FAQ(仮) |
2024年10月16日 | PowerShell: Excelシートからセルの値を取得したい-Windows FAQ(仮) |