「押さえておきたいvSphere の基本」の可用性編として、2回に分けてvSphereのリソースコントロールの機能と可用性を高める機能のご紹介をしたいと思います。
1回目の今回は、vSphere上でゲストOSを運用する際、特定のESXiホストの負荷が高くなった場合、柔軟なリソースコントロールと稼働ホストの分散により、ゲストOSへの稼働に影響を最小限に抑える機能をご紹介します。
利用ケースとして、複数のESXiホストが稼働している状況で、各ホストのリソースを効率よく活用することにより、ゲストOS間のパフォーマンス劣化を防止することやより高い統合率での仮想環境の運用が可能になります。
その他、サーバリソースを追加した場合、新たに追加されたサーバのリソースの効率的な利用などもあります。
仮想マシンが増えてきた場合、それらの仮想マシンの負荷を想定して、どのサーバー上で稼働させればパフォーマンス最適化が図れるかを設計することは困難ですし、仮に設計が出来たとしても、時間の経過と共に負荷状態は変化していきますので常に最適な状態で運用し続けることは困難です。
そこで、非常に強力な機能としてvSphereにはDRS(vSphere Distributed Resource Scheduler)があります。
どのエディションで利用可能かについては「vSphere のエディションの比較」サイトを参照ください。注意点としてDRS機能を有効にするにDRS利用可能なエディションでクラスタを作成する必要があります。
DRSには以下の役割を持っています。
- ユーザーによる、VMパフォーマンス要件の最適化。
- VMのリソースの分離と共有を提供。
- 効率的なインフラストラクチャ活用とリソース管理。
- 包括的なクラスタ管理。
上記役割を満たすためのメカニズムとして以下の機能があります。
- 初期配置/ロードバランシング
- QoSの施行:共有、予約、制限、リソースプール
- ポリシーの施行:アフィニティルール、アンチアフィニティルール
- ホストメンテナンス時の退避
1.初期配置/ロードバランシング
DRSの「初期配置/ロードバランシング」を利用する際に、一番重要な考え方となるのが「VM の要求を満たす」つまり「VMやアプリケーションが問題なく稼働する」と言うことです。
1つ例を示します。
図1のようにクラスタ内の特定ホストのリソース(CPU・メモリ)が不足した結果、そのホスト上で稼働するVMが十分な要求リソースを確保出来なくなった場合、DRSにより不均衡解消に働きます。一方、図2のようにクラスタ内のホストが十分にリソースが確保されている場合、ホスト上で稼働しているVM数に少々のバラつきがあっても、DRSは発動されません。
図1.クラスタ内の特定ホストのリソースが不足した場合
図2.クラスタ内のホストは十分にリソースが確保されている場合
では、どのような方法でホストの「負荷」と「ばらつき」を評価するかというと、構成するホストの負荷(ホストの負荷 = (VMの負荷の合計) / (ホストのキャパシティ))のばらつきを標準偏差として管理し、この標準偏差の値が、設定されたしきい値(保守的~積極的の5段階で設定)を超えた場合、vMotionを利用して仮想マシンをほかのサーバーに移行させます。
また、vMotionの実行も自動でVMがホスト間を移動するのではなく、管理者側に判断を仰ぐということも可能となっています(可用性ガイド参照)。
2.QoSの施行:共有、予約、制限、リソースプール
各VMの要求リソースリソースのコントロールをうまく行うことにより、VMの稼働を安定させることが可能となります。その方法としてリソースプールという機能がDRSでは設定可能となっています。
リソースプールの主な特徴は以下となっています。
- リソースの分離のための、強力なリソース抽象化機能
- ビジネス要件に応じて、リソースプールを作成可能
- プール内でのリソース共有と、プール間でのリソース隔離
リソースプールをうまく活用することにより、ホスト毎のリソース管理ではなく、クラスタ単位でリソースの管理が行えます。
このリソースプールは「予約」「制限」「シェア値」の設定により柔軟なリソース管理が可能です。
また、それぞれの設定項目に関しては、次のガイドライン(リソース割り当て設定の推奨事項)に従うことにより、仮想マシンのパフォーマンスを向上させるのに役立ちます。
合計使用可能リソースが頻繁に変化することが予想される場合は、[シェア] を使用して、仮想マシン間で適正にリソースを割り当てます。[シェア] を使用していて、ホストをアップグレードする場合、各シェアがより多くのメモリ、CPU、またはストレージ I/O リソースを表していても、各仮想マシンの優先順位は変わりません (同じシェア数のままです)。
[予約] では、ユーザーが使用可能にしたい量ではなく、条件に合った最小の CPU またはメモリの量を指定します。ホストは、仮想マシンのシェア数、需要予測、および制限に基づいて、使用可能な追加のリソースを割り当てます。予約によって表される具体的なリソースの量は、仮想マシンの追加や削除など、環境を変更しても変化しません。
仮想マシンの予約を指定する場合、すべてのリソースをコミットしないでください (10% 以上を未予約にしてください)。システム内のすべての容量が完全に予約された状態に近づくほど、アドミッション コントロールに違反せずに予約とリソース プール階層に変更を加えることが困難になっていきます。DRS の有効なクラスタでは、クラスタの容量またはクラスタ内の個々のホストの容量を完全にコミットする予約によって、DRS が仮想マシンをホスト間で移行できなくなることがあります。次のガイドラインは、仮想マシンのパフォーマンスを向上させるのに役立ちます。
合計使用可能リソースが頻繁に変化することが予想される場合は、[シェア] を使用して、仮想マシン間で適正にリソースを割り当てます。[シェア] を使用していて、ホストをアップグレードする場合、各シェアがより多くのメモリ、CPU、またはストレージ I/O リソースを表していても、各仮想マシンの優先順位は変わりません (同じシェア数のままです)。
[予約] では、ユーザーが使用可能にしたい量ではなく、条件に合った最小の CPU またはメモリの量を指定します。ホストは、仮想マシンのシェア数、需要予測、および制限に基づいて、使用可能な追加のリソースを割り当てます。予約によって表される具体的なリソースの量は、仮想マシンの追加や削除など、環境を変更しても変化しません。
仮想マシンの予約を指定する場合、すべてのリソースをコミットしないでください (10% 以上を未予約にしてください)。システム内のすべての容量が完全に予約された状態に近づくほど、アドミッション コントロールに違反せずに予約とリソース プール階層に変更を加えることが困難になっていきます。DRS の有効なクラスタでは、クラスタの容量またはクラスタ内の個々のホストの容量を完全にコミットする予約によって、DRS が仮想マシンをホスト間で移行できなくなることがあります。
3.ポリシーの施行
DRSでは仮想マシン間の依存性を、ルール設定により制御が可能となっています。
それぞれの動きの特徴と利用シーンを下表でまとめます。
まとめ
以上のように、DRSをうまく活用していただき、効率よい仮想環境の構築・運用をしていただければと思います。