Windows Server 2012 R2 におけるネットワーク障害からの仮想マシンの復旧について

こんにちは。Windows プラットフォーム サポートの野村です。今回は、Windows Server 2012 R2 の新機能である "保護されているネットワーク" により、ネットワーク障害から仮想マシンが復旧するシナリオについてご紹介します。

Windows Server のフェールオーバー クラスターの機能は仮想マシンの実行状態、およびクラスター ネットワークとクラスター ストレージの正常性をを常時監視しています。さらに、仮想マシンのネットワークと仮想スイッチの接続の障害検知も行います。

Windows Server 2012 R2 では、ネットワーク障害が発生した場合にライブ マイグレーションによって、仮想マシンをフェールオーバー クラスターの他のノードに移動させる新機能を導入しました。これにより、仮想マシン内で起動しているサービスが中断してしまうようなネットワーク障害が発生した場合でも、仮想マシンをネットワーク アクセスが提供できるノードへ移動することで、可用性を向上させることができます。既定では、この機能を提供するプロパティである [保護されているネットワーク接続] が全ての仮想ネットワーク アダプターにおいて有効になっています。

なお、ライブ マイグレーション先のノードにおいて使用可能なネットワークが無い場合、上述の仮想マシンのライブ マイグレーションは実行されません。これは、そもそもライブ マイグレーションを開始させるリソースを所有していないノードへ仮想マシンが移動することを避けるためです。クラスター ノード上の必要なネットワークとシステム リソースが利用可能である限り、そのノードは仮想マシンの移動先として選択されます。

また、同時にライブ マイグレーションが可能な仮想マシンの台数には制限があります。ホスト上のネットワーク障害により影響を受ける仮想マシンが、同時ライブ マイグレーション可能台数よりも多い場合、仮想マシンのライブ マイグレーションは一旦キューに登録されます。ネットワーク障害が復旧し再び利用可能になると、ライブ マイグレーション キューに登録されている仮想マシンのライブ マイグレーションはキャンセルされます。

[保護されているネットワーク接続] のプロパティは、仮想マシンのネットワーク アダプターの設定では [高度な機能] の新しいプロパティです。このプロパティにより、ネットワーク障害が起きた際に、仮想マシンを他のノードへ移動させて可用性を保つための重要なネットワーク アダプターにするかどうかを選択することができます。

例えば、仮想マシンに外部ネットワークとバックアップとして使用するネットワークの 2 つの仮想スイッチが接続されている場合、バックアップ用ネットワーク アダプターに対してプロパティを無効にし、外部用ネットワークに対して有効にする、といった仮想ネットワーク アダプター単位の設定が可能です。この場合、もし、バックアップ用ネットワークに障害が発生しても、仮想マシンは移動しませんが、外部用ネットワークに障害があった場合、仮想マシンはネットワークが有効なノードにライブ マイグレーションされます。

なお、多くのネットワーク障害のシームレスな処理および冗長性確保のためにも、運用に際して重要なネットワークに対してはネットワーク チーミングを使用することを推奨しています。

 

<シミュレーション>

Windows Server 2012 R2 の新機能である "保護されているネットワーク" がどのように機能するか、以下の例で確認してみましょう。

以下の図 1 は、仮想マシンを所有する 2 ノードのクラスターを表しています。

(※本ブログでのネットワーク構成は数ある構成の中でも 1 例です。ネットワークの構成はアダプターの数や速さ等によって変わります。)

各ノードの親パーティション (管理パーティション) には、それぞれのノードに対して専用のネットワーク アダプターがあります。また、各ノードには Hyper-V の仮想スイッチとして構成された 2 番目のネットワーク アダプターがあります。仮想マシンには、その仮想スイッチと接続するように構成された統合ネットワーク アダプターがあります。

仮想スイッチが使用している物理ネットワーク アダプターで障害が起きた場合、ノード B は仮想マシンが使用するネットワークと繋がっているため、仮想マシンはノード B にライブ マイグレーションします。各サーバー間のプライベート ネットワークが機能しているため、仮想マシンはノード A からノード B にライブ マイグレーションすることができます。 diagram_1

(図 1)

 

// ネットワーク障害が起きても、仮想マシンのライブ マイグレーションが起きない仮想ネットワーク アダプターの構成について

上述のクラスターと同様な構成で、各ノードに別のネットワーク アダプターを追加して仮想スイッチと接続した場合を考えていきます (図 2 を参照してください)。2 つ目の仮想ネットワーク アダプターに仮想マシンを配置して、新しい仮想スイッチに接続します。このシナリオでは、そのネットワークはバックアップとして利用されるか、短期間の障害ではクライアントが仮想マシンを使用することに影響を与えない場合の仮想マシン間の通信に利用されます。この新規のネットワークを "Backup" と呼ぶこととします。

この新しいネットワークは短期間の障害は許容するため、仮想ネットワーク アダプターに重要なネットワークとして構成しないようにします。これにより、Backup ネットワークは切断してしまっても、仮想マシンがクラスターの別のノードに移動することはありません。

これを行うためには、仮想マシンの設定を開いて、バックアップのネットワークの仮想ネットワーク アダプターを展開し、[高度な機能] をチェックしてください。そこで、[保護されているネットワーク] のチェックをオフにしてください (下記の図 3 を参照してください)。

既定では、[保護されているネットワーク] の設定はすべての仮想ネットワーク アダプターにおいて有効になっています。 diagram_2

(図 2)

ScreenShot

(図 3)

 

// PowerShell により、仮想ネットワーク アダプターをネットワーク障害に反応させないようにする場合について

ここでは、上述の設定を行う PowerShell のコマンドおよび、"VM1" という名前の仮想マシンの仮想ネットワーク アダプターに対するコマンドの出力結果をご紹介します。このコマンドは、クラスターを構成しているいずれのノードからでも実行できます (コマンドを実行するノード上にその仮想マシンがホストされていなくても可能です)。なお、クラスターを構成していないノードから本コマンドを実行する場合は、コマンドの初めに Get-Cluster コマンドレットを実行し、クラスターの名前を指定してください。

PS C:\Windows\system32> Get-ClusterGroup VM1 |Get-VM | Get-VMNetworkAdapter | FL VMName,SwitchName,MacAddress,ClusterMonitored

 

VMName           : VM1

SwitchName       : Corp

MacAddress       : 00155D867239

ClusterMonitored : True

 

VMName           : VM1

SwitchName       : Storage

MacAddress       : 00155D86723A

ClusterMonitored : True

 

VMName           : VM1

SwitchName       : Private

MacAddress       : 00155D86723B

ClusterMonitored : True

 

次に、"Private" という名前の仮想スイッチを使用するネットワーク アダプターの "ClusterMonitored" プロパティを無効にする PowerShell のコマンドをご紹介します。

(※ プロパティは "ClusterMonitored" ですが、変更するプロパティは "NotMonitoredInCluster" です。従って、-NotMonitoredInCluster に True を明示することにより、"ClusterMonitored" プロパティを false に変更できます。逆もまた同様です。)

 

PS C:\Windows\system32> Get-ClusterGroup VM1 |Get-VM | Get-VMNetworkAdapter | Where-Object {$_.SwitchName -eq “Private”} | Set-VmNetworkAdapter -NotMonitoredInCluster $True

PS C:\Windows\system32> Get-ClusterGroup VM1 |Get-VM | Get-VMNetworkAdapter | FL VMName,SwitchName,MacAddress,ClusterMonitored

 

VMName           : VM1

SwitchName       : Corp

MacAddress       : 00155D867239

ClusterMonitored : True

 

VMName           : VM1

SwitchName       : Storage

MacAddress       : 00155D86723A

ClusterMonitored : True

 

VMName           : VM1

SwitchName       : Private

MacAddress       : 00155D86723B

ClusterMonitored : False

 

<"保護されているネットワーク接続" の検証について>

仮想マシンが起動しているサーバーの物理ネットワーク アダプターのネットワーク ケーブルを抜くことで、上記の動作を検証することが可能です。

ここで注意していただきたいことは、クラスターが仮想マシンがネットワーク障害の影響を受けていることを検知するのに、1 分程度かかる場合があるということです。クラスター上の各仮想マシンは仮想マシンのエラーを監視するクラスター リソースを保持しており、既定で 60 秒毎に仮想スイッチの状態をチェックしています。

つまり、仮想マシンによっては監視タイミングに依存して、"仮想スイッチが障害の発生している物理 NIC に接続されていること" が検知されるまでに最大で 60 秒かかる場合があります。

そのため、障害が起こった仮想スイッチを使用している仮想マシンが複数存在する場合でも、全ての仮想マシンで同時にライブ マイグレーションが行われるわけではありません。

なお、先述いたしましたように、ネットワーク障害が復旧した場合、待機中のライブ マイグレーションはキャンセルされ、仮想マシンは元のノードで稼働します。また、既に実行中のライブ マイグレーションはキャンセルされずに仮想マシンは移行されます。

 

以上の通り、"保護されているネットワーク" の機能によるネットワーク障害からの仮想マシンの復旧についてお伝えいたします。本ブログが皆様のお役に立てましたら、幸いです。

<参考情報>

- Windows Server 2012 R2 Virtual Machine Recovery from Network Disconnects

https://blogs.msdn.com/b/clustering/archive/2013/09/04/10446482.aspx

- Windows Server 2012 R2 の "保護されているネットワーク" について

https://blogs.technet.microsoft.com/askcorejp/2016/01/27/windows-server-2012-r2/

- 仮想マシンのライブ マイグレーションの概要

https://technet.microsoft.com/ja-jp/library/hh831435.aspx