前々回は、「Windows Server 2016 TP5」から利用可能になったフェイルオーバークラスタリングのHyper-V向け新機能の1つ、「仮想マシンのノードフェアネス」を説明しました。今回は、「仮想マシンの開始順序」を説明します。
Windows Server 2016 Technical Preview 5(TP5)のフェイルオーバークラスタリング機能には、「仮想マシンの開始順序(Virtual Machine Start Order)」という新機能が追加されました。これは、Hyper-Vホストクラスタ上で稼働する仮想マシンや仮想マシンのグループを、あらかじめ定義しておいた依存関係に基づいて順番に開始できるというオーケストレーション機能です。
これまで、クラスタ化されていないHyper-Vホストでは、仮想マシンごとに「自動開始アクション」の設定で「自動起動待ち時間」を構成することができました。これは、物理コンピュータの起動時に仮想マシンを自動開始させる場合、仮想マシン間のリソースの競合を減らす目的で行う調整です。クラスタ化されたHyper-Vホストクラスでは、クラスタサービスの開始時に仮想マシンを自動的にオンラインにする(開始する)か、しないかを選択できるだけでした。
そのため、依存関係にある仮想マシンを適切な順番で開始するためには、Hyper-VやHyper-Vホストクラスタの仮想マシンの自動開始機能をオフにして、適切な順序で手動で開始するか、あるいはスクリプトを記述して自動化するなどの運用で対処する必要がありました。あるいは、System Center OrchestratorのRunbookを利用して自動化するという方法もあります。
Windows Server 2016では、標準機能として新たに「仮想マシンの開始順序」が利用可能になることで、大規模なHyper-Vホストクラスタ上に展開した多階層アプリケーションを効率よく開始できそうです。ただし、筆者が実際に検証してみた限りでは、これはオフライン状態のシステムを開始する際に利用できるものであり、障害発生時のフェイルオーバー時には考慮されないのではないかと思います。その点には留意してください。
多階層アプリケーション全体のフェイルオーバーについては、「Microsoft Azure Site Recovery」を利用したオンプレミスの2つのサイト間、またはオンプレミスとAzure間のフェイルオーバーの利用をお勧めします。Azure Site Recoveryでは「復旧計画」を事前に定義しておくことで、仮想マシンや仮想マシンのグループを適切な順番で開始したり、スクリプトの自動実行などの追加のタスクを組み込んだりすることができます。
Windows Server 2016 TP5では、「仮想マシンの開始順序」の設定は、全て「New-ClusterGroupSet」「Add-ClusterGroupToSet」「Add-ClusterGroupSetDependency」「Add-ClusterGroupDependency」などのWindows PowerShellコマンドレットで構成する必要があります。GUI管理ツールの「フェイルオーバークラスターマネージャー」は、この機能に対応したものは用意されていません。
現時点で、この機能に関して公開されている情報は極めて少ないため、試行錯誤して何とか構成してみました。結論から言うと、“何となく”動作させることはできました。しかし、仮想マシンと仮想マシングループの使い分けの分かりにくさ、コマンドレットの不具合と思われる挙動があり、まだまだ開発途上の機能という感じでした。今後、コマンドレット名やパラメータが変更される可能性も高いため、以降は「こんなことができるようになるんだ」という参考程度に見てください。
今回は、以下の画面1に示す5つの仮想マシンをHyper-Vホストクラスタ上に作成し、図1のような3階層のシステムとして構成します。ただし、仮想マシンの中身は全てOSをインストールしただけのダミーであり、実際のアプリケーションやビジネスロジック、データベースなどは存在しません。
この構成でアプリ層の仮想マシンを開始すれば、依存関係にあるデータベース層グループ(DbTier)、ミドル層グループ(MidTier)の順番で仮想マシンが自動的に開始するように設定することを目指します。
本当ならば、アプリ層もグループ化(多重化)したかったのですが、依存関係の最上位は単一の仮想マシンでないとうまく構成できませんでした。筆者の工夫が足りなかったのかもしれませんし、現状では、そのような仕様なのかもしれません。
試行錯誤の結果、Windows PowerShellコマンドレットで、次のように構成することができました(画面2)。
$cim = New-CimSession cluster01 New-ClusterGroupSet -Name MidTier -CimSession $cim New-ClusterGroupSet -Name DbTier -CimSession $cim Add-ClusterGroupToSet -Name MidTier -Group havm01 -CimSession $Cim Add-ClusterGroupToSet -Name MidTier -Group havm02 -CimSession $cim Add-ClusterGroupToSet -Name DbTier -Group havm-db01 -CimSession $Cim Add-ClusterGroupToSet -Name DbTier -Group havm-db02 -CimSession $Cim Add-ClusterGroupSetDependency -Name MidTier -ProviderSet DbTier -CimSession $cim Add-ClusterGroupDependency -Name havm-myapp -ProviderSet MidTier -CimSession $cim
仮想マシンのグループ(ClusterGroupSet)を作成するには「New-ClusterGroupSet」コマンドレットを使用し、「Add-ClusterGroupToSet」コマンドレットでグループ(ClusterGroupSet)に仮想マシンを追加します。また、仮想マシンのグループ(ClusterGroupSet)間の依存関係は、「Add-ClusterGroupSetDependency」コマンドレットで定義します。さらに、単一の仮想マシンと仮想マシングループ(ClusterGroupSet)の依存関係は、「Add-ClusterGroupDependency」コマンドレットで定義します。
以上のように、現状、Windows PowerShellコマンドレットの使い分けもパラメータも、非常に分かりにくいという印象です。2016年9月末に予定されている正式リリース版では、この辺りが改善されることを期待しています。なお、改善に伴い、この構成方法は大きく変更される可能性もありますので、本稿の構成例は参考程度にしてください。
Copyright © ITmedia, Inc. All Rights Reserved.