こんにちは。システムセンターサポート担当の住です。
これまでにSCVMM の管理者が遭遇しやすい障害状況などを 「SCVMM の落とし穴」 としてご紹介してきましたが、今回がシリーズ最終回となります。
過去の投稿についてはこちらをご覧ください。
最終回は、「過剰コミット」についてです。
前回同様、これまでにも技術情報やブログ等で紹介されていますが、非常に理解しづらいものの、管理者の方にとって重要な問題となる「過剰コミット」について、詳しく見ていきます。
序章
まずは、「過剰コミット」とは何かを見てみます。 管理コンソールのホスト ワークスペースから、ホスト クラスター のプロパティを開いてみてください。「全般」タブをみると、「クラスター予約状態」の欄が以下の様に「過剰コミット」と表示される場合があります。「クラスター予約」とは、クラスターとして確保しておきたいリソース(特にメモリ)を指します。このクラスターとして確保しておきたいリソースが、一定値以下であると判断された場合に、クラスター予約の状態が「過剰コミット」状態となり、管理コンソールから新規の仮想マシン作成や仮想マシンのノード間の移動などが制限されます。
続いて「クラスター予約状態」が「過剰コミット」となった場合の具体的な症状を見てみましょう。過剰コミット状態では、管理コンソールからクラスター内に新たに仮想マシンを作成したり、配置したりする事ができなくなります。
大きなメモリを割り当てた仮想マシンの場合、ノードによってはこのように明示的に配置出来ない理由が記述されますが、別のノードでは、単に「過剰コミット」としか表示されません。
ただし「過剰コミット状態」とは、あくまでも SCVMM がホスト クラスターを管理する場合の概念であり、実際の Hyper-V やフェールオーバー クラスタ ー機能には、このような概念がありません。つまり、SCVMM (=管理コンソール)上でHAVM の移動や新規作成がエラーとなっても、Hyper-V マネージャや、フェールオーバー クラスター マネージャ上からは、問題なく仮想マシンの作成や配置ができます。
そもそも、クラスター予約の状態はどのようにして「過剰コミット」となるのでしょう。それを知るにはまず、「クラスター予約(ノード数)」について考える必要があります。
このダイアログ上にある「クラスター予約(ノード数)」は、設定されたノード数が処理不能状態に陥った場合でも、クラスター内の仮想マシンが全て正常に稼動できるノードの数となります。つまり、「1」が設定された場合には、1台のホスト ノードが障害となった場合でも、残りの仮想マシンホストによって全ての仮想アプリケーションが実行可能である事を期待しています。「0」を設定した場合には、「0台までの障害に耐えられる」ことになります。これは、このクラスターでは(意図的なシャットダウンも含めて)障害となるノードを想定していない、という意味になります。過剰コミットとは、こうして規定されたクラスター予約を基準に "残りのノードでは全ての仮想マシンが実行出来ない" と判定される状態を指します。それでは、どのような計算によって、SCVMM が「過剰コミット」状態と判断するのでしょうか。
続いては、この点を見ていきましょう。
スロットの考え方
SCVMM がクラスターとして全仮想マシンを稼動可能かどうかの判断の基準となる尺度として、「スロット」というものさしがあります。この「スロット」は、過剰コミットの計算の時にだけ使われる尺度ですので、他のオペレーションでは、まず出てきません。それだけに、理解しづらい概念の一つです。スロットは、クラスター リソースとしての高可用性仮想マシン(以下 HAVM)に割り当てられた、最も大きなメモリ サイズになります。この際、HAVM が起動しているかどうかは問われません。SCVMM は、このスロットのサイズを基準にして、クラスター全体が全ての HAVM を稼動させることが可能かどうかを判断します。
それでは、具体的な例を基にして、どのようにして SCVMM が 「過剰コミット」と判断するのか見てみましょう。
「過剰コミット」の計算式
過剰コミットの計算式については、一部間違いがございました。正しい計算式につきましては、以下からご確認ください。 (2014. 06. 17 追記)
[ 改訂版 ]SCVMM の落とし穴 その7 – 「過剰コミット」について
過剰コミットの計算は以下の様に行われます。
(物理メモリ量 – ホスト予約(メモリ) - ホスト ノード上の全HAVM に割り当てられたメモリ量の合計) / 1. で決定したスロット サイズ
例として、以下の様な構成の4 ノードのクラスターを考えてみましょう。
ノード 1 (N1, 32GB)
VM1 (8GB), VM2 (6GB), VM3 (4GB), VM4 (2GB)
3 スロット/ 1 スロット
ノード 2 (N2, 32GB)
VM5 (8GB), VM6 (6GB), VM7 (2GB), VM8 (2GB)
3 スロット / 1 スロット
ノード 3 (N3, 32GB)
VM9 (6GB), VM10 (2GB), VM11 (1GB), VM12 (1GB)
2 スロット / 2 スロット
ノード 4 (N4, 32GB)
VM13 (2GB), VM14 (2GB), VM15 (2GB), VM16 (2GB)
1 スロット / 2 スロット
クラスター予約(ノード数)は1です。各ホストに設定されたホスト予約(メモリ)は、 既定値(512MB)とします。
ここで大事なのは、スロット サイズの計算やスロットの数の計算で、HAVM がオンラインであるか、オフラインであるかは問題ではない点です。つまり、停止中の HAVM であっても、稼働中の HAVM であっても、同じように計算されます。
また、ディスク サイズについては一切考慮されません。これは HAVM では基本的にクラスター ボリュームに配置されるためです。
この「スロット」サイズに基づく、考え方は一見すると複雑に見えますが、要は最もリソースを消費するノードが障害となった場合に、他のノードが障害となったノードが抱えるリソースを全てランダムに割り当てられたとしても耐え得る事を保証します。
まとめ
もしホスト クラスターが「過剰コミット」となって仮想マシンの移動が行えなくなった場合には、一旦クラスター予約(ノード数)を0にして、仮想マシンに割り当てられたメモリを変更したり、仮想マシンの配置を変更したりしてみてください。前述の様に、クラスター予約数は、障害が許容されるノード数ですので、「0」を設定すると、全てのノードがリソースとして利用できるようになり、過剰コミット状態は解消されます。しかしこれは、仮想マシンの移動や作成を一時的に実行するために使用して、クラスター予約を「0」のまま運用する事は避けてください。また繰り返しになりますが、「クラスター予約」は、SCVMM 独自の管理機能ですので、クラスター予約の状態が「過剰コミット」状態となっていても、Hyper-V やフェールオーバー クラスターには影響しません。Hyper-V マネージャや、フェールオーバー クラスター マネージャ上から、仮想マシンのメモリ設定や再配置を行うことは可能ですので、適切な方法で過剰コミット状態を解消してください。
これまで良くあるお問い合わせをベースに、SCVMM 2008 R2 の管理者が陥りやすい障害事例とその解決方法を「SCVMM の落とし穴」シリーズとしてお伝えしてきましたが、今回で最後となります。今後も、修正プログラム情報など SCVMM 2008 R2 に関する情報は公開していく予定ですので、よろしくお願いします。
参考情報
ブログ:ホスト クラスタの過剰コミット状態についてhttp://blogs.technet.com/b/askcorejp/archive/2010/02/12/3312460.aspx
TechNet: 高可用性の計画http://technet.microsoft.com/ja-jp/library/cc764243.aspx
KB 2463008: How to determine if a cluster is over-committed in System Center Virtual Machine Manager 2008http://support.microsoft.com/kb/2463008 (英語)
ブログ: How to determine if a cluster is over-committed in System Center Virtual Machine Manager 2008http://blogs.technet.com/b/scvmm/archive/2010/11/17/how-to-determine-if-a-cluster-is-over-committed-in-system-center-virtual-machine-manager-2008.aspx (英語)
Tomoyuki Sumi