以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態のクラスタシステムを示す図である。
クラスタシステム1は、オートスケールサーバ監視装置10、オートスケールサーバ20および物理サーバ30,40を有する。オートスケールサーバ監視装置10、オートスケールサーバ20および物理サーバ30,40は、ネットワーク50に接続されている。
物理サーバ30,40は、複数の仮想マシンを実行可能である。例えば、物理サーバ30は、仮想マシン31,32を実行可能である。物理サーバ40は、仮想マシン41,42を実行可能である。仮想マシンは、スケールアウトやスケールインが可能である。
オートスケールサーバ20は、各仮想マシンの負荷を収集し、各仮想マシンの負荷に基づいて、仮想マシンのスケールアウトやスケールインを制御する。例えば、オートスケールサーバ20は、仮想マシン32が停止しているときに、仮想マシン31の負荷が第1の閾値を超えた状態が継続すると、物理サーバ30上で仮想マシン32を起動させ、仮想マシン31だけでなく仮想マシン32にも負荷を分散させる。また、オートスケールサーバ20は、仮想マシン31,32が稼動しているときに、仮想マシン31,32の負荷(平均の負荷または一方の負荷)が第2の閾値(第2の閾値<第1の閾値)を下回ると、仮想マシン32を停止させ、リソース使用量を減少させる。オートスケールサーバ20は、物理サーバ40における仮想マシン41,42のスケールアウトやスケールインも同様に制御する。負荷の判定を行う仮想マシンのグループは、運用に応じて決定される(例えば、仮想マシン31,41,42の負荷に応じて、仮想マシン32を起動させてもよい)。
オートスケールサーバ監視装置10は、オートスケールサーバ20を監視する。また、オートスケールサーバ監視装置10は、オートスケール対象である仮想マシン31,32,41,42を監視する。具体的には、オートスケールサーバ監視装置10は、稼働中の仮想マシンと定期的に通信することで、該当の仮想マシンの死活監視を行う。オートスケールサーバ監視装置10は、何れかの仮想マシンの異常を検知すると、異常を検知したことをユーザに通知する。
ただし、オートスケール対象の仮想マシンは、オートスケールサーバ20によるオートスケール制御によって起動されたり、停止されたりする。このため、オートスケールサーバ監視装置10は、オートスケール対象の仮想マシンの何れかで定期通信の途絶を検知したとき、当該仮想マシンがスケールインによって停止されたか否かを、オートスケールサーバ20に問い合わせる。定期通信の途絶がスケールインに起因するのであれば、当該途絶は異常ではない。一方、定期通信の途絶がスケールインに起因するのでなければ、当該途絶は異常とみなされる。ただし、オートスケールサーバ20が異常などにより停止することもある。オートスケールサーバ監視装置10は、オートスケールサーバ20の稼動状態を監視し、オートスケールサーバ20の復旧を支援する機能を提供する。
オートスケールサーバ監視装置10は、記憶部11および処理部12を有する。また、オートスケールサーバ20は、記憶部21および処理部22を有する。
記憶部11,21は、RAMなどの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部12,22は、CPU、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部12,22はプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。
記憶部11は、オートスケールサーバ20が管理する仮想マシン31,32,41,42の情報を記憶する。例えば、記憶部11は、テーブル61を記憶する。テーブル61は、オートスケールサーバ監視装置10による仮想マシン31,32,41,42それぞれの死活監視の状況(定期通信の成否)を示す。ここで、仮想マシン31の識別情報は「VM(Virtual Machine)1」である。仮想マシン32の識別情報は「VM2」である。仮想マシン41の識別情報は「VM3」である。仮想マシン42の識別情報は「VM4」である。また、テーブル61では、(例えば、最新の定期通信のタイミングにおいて)該当の仮想マシンと定期通信を行えたことを「ON」、定期通信を行えなかったことを「OFF」で表す。
ここで、記憶部21も、仮想マシン31,32,41,42の状態を示す情報を記憶する。例えば、記憶部21は、テーブル71を記憶する。テーブル71は、記憶部21のうち、不揮発性の記憶領域に格納される。テーブル71は、オートスケール制御に用いられる情報であり、仮想マシン31,32,41,42それぞれの状態を示す状態情報である。例えば、「normal」は正常稼働中を示す。「scale-in」は、スケールインにより停止されていることを示す。「error」は、異常により停止されていることを示す。処理部22は、仮想マシン31,32,41,42の稼動状態の収集やオートスケールの結果に応じて、テーブル71の各仮想マシンの状態を更新する。
処理部12は、オートスケール対象の仮想マシンを示す情報をオートスケールサーバ20から取得してテーブル61を生成し、オートスケールサーバ監視装置10による死活監視の対象の仮想マシンを決定してもよい。
処理部12は、オートスケールサーバ20と定期的に通信し、オートスケールサーバ20が停止したことを検知すると、オートスケールサーバ20の要求に応じて、仮想マシンの情報をオートスケールサーバ20に送信する。
まず、オートスケールサーバ20が稼働中の場合を考える(ステップST1)。このとき、処理部12は、仮想マシン31,41,42との定期通信を行えたが、仮想マシン32との定期通信を行えなかった(通信不可になった)とする。処理部12は、仮想マシン31,41,42(「VM1,VM3,VM4」)について「ON」、仮想マシン32(「VM2」)について、「OFF」をテーブル61に記録する。処理部12は、仮想マシン32のオートスケールの状況を、オートスケールサーバ20に問い合わせる。
このとき、オートスケールサーバ20では、テーブル71に示されるように、仮想マシン31,41,42については「normal」であり、仮想マシン32については「scale-in」と管理されている。すなわち、仮想マシン32は、スケールインによって停止された状態である。このため、処理部22は、仮想マシン32がスケールインによって停止された状態である旨をオートスケールサーバ監視装置10に応答する。
処理部12は、オートスケールサーバ20による応答を受信し、当該応答により、仮想マシン32がスケールインによって停止された状態であることを検知する。このため、処理部12は、仮想マシン32との通信不可(定期通信の途絶)を異常とみなさない。処理部12は、仮想マシン31,41,42に対する死活監視を継続する。
次に、オートスケールサーバ20が異常などによって停止中の場合を考える(ステップST2)。処理部12は、オートスケールサーバ20との定期通信を正常に行えなかった場合に、オートスケールサーバ20が停止中であることを検知する。処理部12は、オートスケールサーバ20が停止中である間も、稼働中の仮想マシン31,41,42と定期的に通信し、仮想マシン31,41,42の死活監視を継続する。そして、処理部12は、仮想マシン42(「VM4」)との通信不可(定期通信の途絶)を検出する。すると、処理部12は、テーブル61をテーブル62に更新する。具体的には、処理部12は、「VM4」を「ON」から「OFF」に変更する。
次に、オートスケールサーバ20が停止中の状態から復旧した場合を考える(ステップST3)。処理部12は、オートスケールサーバ20からの要求を受け付けると、オートスケールサーバ20が起動したことを検知する。オートスケールサーバ20からの要求は、仮想マシンの情報の要求でもよいし、オートスケールサーバ監視装置10に対する定期通信に関する所定の要求(あるいは応答)でもよい。すると、処理部12は、テーブル62に基づいて、オートスケールサーバ20が停止していた間に、仮想マシン42との定期通信の途絶を検知したことをオートスケールサーバ20に送信する。仮想マシン42との定期通信の途絶は、オートスケールサーバ20の停止中に発生している。このため、当該途絶は、仮想マシン42のスケールインに起因するものではない。したがって、処理部22は、オートスケールサーバ監視装置10から仮想マシン42の定期通信の途絶の通知を受信すると、テーブル71をテーブル72に更新する。具体的には、処理部22は、「VM4」を「normal」から「error」に変更する。
処理部12は、仮想マシン42が「error」として管理されていることをオートスケールサーバ20から取得して、仮想マシン42の異常をユーザに通知してもよい。
なお、ステップST3では、処理部12は、テーブル62における各仮想マシンの情報を、オートスケールサーバ20に送信してもよい。処理部22は、テーブル62の仮想マシンの情報と、テーブル72の仮想マシンの情報とを照合することで、何れの仮想マシンで異常が生じているかを判定できる。例えば、処理部22は、テーブル62で「OFF」かつテーブル71で「normal」である仮想マシンを異常(「error」)と判定し、それ以外の仮想マシンを異常なし(「normal」や「scale-in」など)と判定してもよい。
オートスケールサーバ監視装置10によれば、オートスケールサーバ20と定期的に通信され、オートスケールサーバ20が管理する仮想マシンの情報が記憶される。オートスケールサーバ20が停止したことが検知されると、オートスケールサーバ20の要求に応じて、仮想マシンの情報が送信される。
これにより、オートスケールサーバ20が停止し、復旧したときに仮想マシンの最新の情報を基に復旧することができる。
ここで、オートスケールサーバ監視装置10の機能を用いない場合を考える。この場合、オートスケールサーバ20の停止中に、仮に、仮想マシン41が異常などによって停止しても、オートスケールサーバ20が起動した後に、オートスケールサーバ20は当該仮想マシンの停止を把握できていない。オートスケールサーバ20は、テーブル71によって各仮想マシンのオートスケール制御を行うことになる。すなわち、オートスケールサーバ20が管理する仮想マシンの情報と、現実の仮想マシンの稼働状況とに不整合が生じた状態になる。この場合、オートスケールサーバ20は、仮想マシン41,42に対する適切なオートスケール制御を行えない。また、オートスケールサーバ20が仮想マシン42の停止を検知するまでに、比較的長い時間(例えば、10分から数十分など)を要することもある。この間に、仮想マシン41の負荷が高まると、オートスケール制御を適切に行えずに、仮想マシン41で実行されるアプリケーションなどの処理に影響を及ぼす可能性もある。
そこで、オートスケールサーバ監視装置10により、オートスケールサーバ20の停止中の仮想マシンの情報を取得し、オートスケールサーバ20の復旧時に、当該仮想マシンの情報をオートスケールサーバ20に提供する。これにより、オートスケールサーバ20において管理されている仮想マシンの情報と、現実の仮想マシンの稼働状況との不整合を解消した状態で、オートスケールサーバ20を復旧させることができる。このため、オートスケールサーバ20は、復旧した直後から、オートスケール制御を正常に再開することができる。その結果、各仮想マシンの負荷をオートスケール制御により適切に分散でき、各仮想マシンで実行されるアプリケーションなどの処理への影響を抑えられる。
なお、クラスタシステム1の例では、オートスケールサーバ監視装置10による監視の対象を、オートスケールサーバ20およびオートスケールサーバ20によるオートスケール対象の仮想マシン(仮想マシン31,32,41,42)とした。一方、オートスケールサーバ監視装置10による監視対象の仮想マシンはこれに限られない。オートスケールサーバ監視装置10は、オートスケール対象の仮想マシンおよびオートスケール対象ではない仮想マシンの死活監視を行ってもよい。オートスケールサーバ監視装置10は、オートスケール対象ではない仮想マシンについて定期通信の途絶を検出すると、オートスケールサーバ20への問い合わせを省略して、当該仮想マシンで異常が発生したことをユーザに通知することができる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態のクラスタシステムの例を示す図である。
第2の実施の形態のクラスタシステムは、ユーザに対して仮想マシンの利用環境を提供する情報処理システムである。第2の実施の形態のクラスタシステムは、監視サーバ100、オートスケールサーバ200および物理サーバ300,400を有する。
監視サーバ100、オートスケールサーバ200および物理サーバ300,400は、ネットワーク60に接続される。ネットワーク60は、例えば、データセンタなどに敷設されたLAN(Local Area Network)である。ネットワーク60は、ネットワーク70に接続される。ネットワーク70は、例えば、インターネットやWAN(Wide Area Network)である。ネットワーク70には、ユーザ端末500,600が接続される。
監視サーバ100は、オートスケールサーバ200の監視を行うサーバコンピュータである。また、監視サーバ100は、物理サーバ300,400で動作する仮想マシンの監視を行う。監視サーバ100は、第1の実施の形態のオートスケールサーバ監視装置10の一例である。
オートスケールサーバ200は、物理サーバ300,400で動作する仮想マシンのオートスケール(自動スケール)制御を行うサーバコンピュータである。オートスケールサーバ200は、第1の実施の形態のオートスケールサーバ20の一例である。
物理サーバ300,400は、複数の仮想マシンを実行可能なサーバコンピュータである。例えば、物理サーバ300は、ハイパーバイザと呼ばれるソフトウェアを実行し、物理サーバ300におけるCPUやRAMなどのハードウェアリソースを物理サーバ300上の仮想マシンに割り振る。同様に、物理サーバ400は、ハイパーバイザを実行し、物理サーバ400におけるCPUやRAMなどのハードウェアリソースを物理サーバ400上の仮想マシンに割り振る。物理サーバ300,400は、第1の実施の形態の物理サーバ30,40の一例である。
ユーザ端末500,600は、ユーザが利用するクライアントコンピュータである。ユーザ端末500,600は、物理サーバ300,400上の仮想マシンで実行されるアプリケーションに対する処理要求を送信する。また、ユーザ端末500,600は、仮想マシンによる処理結果を受信する。
第2の実施の形態のクラスタシステムでは、ユーザにより円滑に仮想マシンを利用できるように、オートスケールサーバ200による仮想マシンのオートスケール制御が行われる。ただし、オートスケールサーバ200が、異常などによって停止することもある。そこで、監視サーバ100により、オートスケールサーバ200が停止した場合でも、オートスケール制御への影響を低減する機能を提供する。以下の説明では、仮想マシンを、VMと略記することがある。また、オートスケールを、AS(Auto Scaling)と略記することがある。
図3は、監視サーバのハードウェア例を示すブロック図である。
監視サーバ100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106およびNIC(Network Interface Card)107を有する。なお、CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを含んでもよい。また、監視サーバ100は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、監視サーバ100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD103は、OSやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、監視サーバ100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、監視サーバ100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
入力信号処理部105は、監視サーバ100に接続された入力デバイス112から入力信号を取得し、CPU101に出力する。入力デバイス112としては、マウス・タッチパネル・タッチパッド・トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、監視サーバ100に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
NIC107は、ネットワーク60に接続され、ネットワーク60を介して他のコンピュータと通信を行うインタフェースである。NIC107は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。
図4は、スケールアウトおよびスケールインの例を示す図である。
図4(A)は、スケールアウトを例示する。物理サーバ300が仮想マシン310,320を実行し、物理サーバ400が仮想マシン410,420を実行している場合を考える。例えば、仮想マシン310,320,410,420は、オートスケールの対象となる仮想マシンの1つのグループに属し、ユーザが利用するアプリケーション(あるいはアプリケーション群)の処理を分散して実行する。
オートスケールサーバ200は、仮想マシン310,320,410,420の負荷を定期的に収集する。例えば、オートスケールサーバ200は、仮想マシン310,320,410,420の平均の負荷が所定期間継続して第1閾値を上回った場合、仮想マシン310,320,410,420の負荷が高まっていると判断し、仮想マシンのスケールアウトを行う。例えば、オートスケールサーバ200は、物理サーバ300により仮想マシン330を起動させ、仮想マシン310,320,410,420の負荷の一部を、仮想マシン330に分散させる。
図4(B)は、スケールインを例示する。物理サーバ300が仮想マシン310,320を実行し、物理サーバ400が仮想マシン410,420を実行している場合を考える。オートスケールサーバ200は、仮想マシン310,320,410,420の負荷を定期的に収集する。例えば、オートスケールサーバ200は、仮想マシン310,320,410,420の平均の負荷が所定期間継続して第2閾値を下回った場合、仮想マシン310,320,410,420の負荷が低くなっていると判断し、仮想マシンのスケールインを行う。ここで、第2閾値は、第1閾値よりも小さい。例えば、オートスケールサーバ200は、物理サーバ400における仮想マシン420を停止させ、仮想マシン420に割り当てていたリソースを解放する。
図5は、クラスタシステムの機能例を示すブロック図である。
監視サーバ100は、記憶部120および監視部130を有する。記憶部120は、RAM102やHDD103の記憶領域により実現される。監視部130は、CPU101がRAM102に記憶されたプログラムを実行することで実現される。
記憶部120は、オートスケールサーバ管理テーブルおよびVM管理テーブルを記憶する。オートスケールサーバ管理テーブルは、オートスケールサーバ200の稼動状態を示す情報である。VM管理テーブルは、各仮想マシンに対する定期通信の成否を示す情報である。
監視部130は、物理サーバ300,400上の各仮想マシンおよびオートスケールサーバ200の監視を行う。監視部130は、VM監視部131およびASサーバ連携部132を有する。
VM監視部131は、物理サーバ300,400上の各仮想マシンと定期的に通信し、各仮想マシンとの疎通確認を行う。例えば、VM監視部131は、各仮想マシンから疎通確認用のパケットを受信することで、疎通確認を行う。疎通確認用のパケットは、例えば、ICMP(Internet Control Message Protocol)のエコー要求でもよいし、VM監視部131により送信されたエコー要求に対する仮想マシンからのエコー応答でもよい。あるいは、VM監視部131は、SNMP(Simple Network Management Protocol)などのその他のプロトコルを用いて疎通確認を行ってもよい。VM監視部131による監視対象の仮想マシンは、何れもオートスケールの制御対象の仮想マシンである。VM監視部131は、監視対象とする仮想マシンを、オートスケールサーバ200に問い合わせてもよい。
ASサーバ連携部132は、オートスケールサーバ(ASサーバ)200と連携する。ASサーバ連携部132は、オートスケールサーバ200と定期的に通信し、オートスケールサーバ200の死活監視を行う。例えば、ASサーバ連携部132は、オートスケールサーバ200に対して、定期的に仮想マシンの状態を問い合わせることで、オートスケールサーバ200の死活監視を行ってもよい。問い合わせに対してオートスケールサーバ200から応答があれば、オートスケールサーバ200は稼動している。一方、問い合わせに対してオートスケールサーバ200から応答がなければ、オートスケールサーバ200は停止している。
オートスケールサーバ200が稼動している場合、ASサーバ連携部132は、監視対象の仮想マシンのうち、疎通確認を行えなかった仮想マシンがスケールインにより停止されたか否かを、オートスケールサーバ200に問い合わせる。該当の仮想マシンがスケールインにより停止された場合、ASサーバ連携部132は、疎通確認を行えなかったことを異常としない。該当の仮想マシンがスケールインにより停止されていない場合、ASサーバ連携部132は、疎通確認を行えなかった仮想マシンを異常と判断し、システム管理者に通知する。例えば、ASサーバ連携部132は、該当の仮想マシンの異常発生を示す画面をディスプレイ111に表示させてもよい。または、ASサーバ連携部132は、該当の仮想マシンの異常発生を示すメッセージを、ネットワーク50に接続された、システム管理者が使用する端末装置(図示を省略している)に送信してもよい。
オートスケールサーバ200が停止している場合、ASサーバ連携部132は、疎通確認を行えなかった仮想マシンがスケールインにより停止されたか否かを、オートスケールサーバ200に問い合わせることはできない。このため、ASサーバ連携部132は、問い合わせを保留する。その後、オートスケールサーバ200が起動すると、疎通確認の再開により、ASサーバ連携部132は、オートスケールサーバ200の起動を検知する。そして、ASサーバ連携部132は、オートスケールサーバ200の停止中に、疎通確認が途絶えた仮想マシンが存在する場合、当該仮想マシンの情報を、オートスケールサーバ200に送信する。
オートスケールサーバ200は、記憶部210およびAS制御部220を有する。記憶部210は、オートスケールサーバ200のRAMやHDDの記憶領域を用いて実現される。AS制御部220は、オートスケールサーバ200のCPUがオートスケールサーバ200のRAMに記憶されたプログラムを実行することで実現される。
記憶部210は、オートスケール制御に用いられる情報を記憶する。具体的には、記憶部210は、オートスケールグループテーブル、VMテーブルおよびオートスケールポリシーテーブルを記憶する。
オートスケールグループテーブルは、オートスケールグループを示す情報である。オートスケールグループは、オートスケール制御の対象となる仮想マシンのグループである。1つのオートスケールグループに属する仮想マシンの負荷に応じて、当該オートスケールグループに属する仮想マシンのオートスケール制御が行われる。VMテーブルは、オートスケール制御の対象の仮想マシンを示す情報である。VMテーブルは、仮想マシンの状態を含む。仮想マシンの状態には、(1)仮想マシンが正常に稼動している、(2)仮想マシンに異常あり、(3)スケールインにより縮退している(スケールインのために停止している)、(4)スケールアウトのために起動中、などが考えられる。オートスケールポリシーテーブルは、オートスケール制御のポリシー(スケールインやスケールアウトを行うための条件)を示す情報である。
ここで、オートスケールグループテーブル、VMテーブルおよびオートスケールポリシーテーブルは、記憶部210のうち、不揮発性の記憶領域(例えば、HDDの記憶領域)に格納される。また、オートスケールグループテーブル、VMテーブルおよびオートスケールポリシーテーブルは、オートスケール制御に用いられる場合、複製されて、記憶部210のうち、揮発性の記憶領域(例えば、RAMの記憶領域)に一時的に格納されることもある。この場合、揮発性の記憶領域に保持されているときの各テーブルの更新内容は、AS制御部220により不揮発性の記憶領域に格納された複製元の各テーブルにも反映される。
AS制御部220は、物理サーバ300,400上の仮想マシン(例えば、仮想マシン310,320,410,420を含む複数の仮想マシン)のオートスケール制御(AS制御)を行う。AS制御部220は、仮想マシンの負荷の情報を定期的に収集する。例えば、AS制御部220は、SNMPなどのプロトコルを用いて仮想マシンの負荷を収集してもよい。AS制御部220は、収集した負荷と、当該仮想マシンが属するオートスケールグループのオートスケールポリシーとに基づいて、スケールインやスケールアウトを物理サーバ300,400に指示する。
ここで、障害などによりオートスケールサーバ200が停止することがある。オートスケールサーバ200の停止中は、AS制御部220によるオートスケール制御も停止する。AS制御部220は、オートスケールサーバ200の停止後、オートスケールサーバ200が起動した際に、オートスケールサーバ200が停止していた間の疎通確認に応じた仮想マシンの情報を監視サーバ100から取得する。AS制御部220は、取得した仮想マシンの情報に基づいて、記憶部210に記憶されたVMテーブルにおける仮想マシンの状態を更新する。AS制御部220は、更新後のVMテーブルに基づいて、仮想マシンの負荷の収集を再開し、オートスケール制御を再開する。
図6は、オートスケールサーバ管理テーブルの例を示す図である。
オートスケールサーバ管理テーブル121は、記憶部120に格納される。オートスケールサーバ管理テーブル121は、オートスケールサーバID(IDentifier)および稼働中フラグの項目を含む。
オートスケールサーバIDの項目には、オートスケールサーバ200の識別情報(オートスケールサーバID)が登録される。オートスケールサーバ200のオートスケールサーバIDは、例えば、「装置A」である。稼働中フラグの項目には、オートスケールサーバ200が稼働しているか否かを示す稼働中フラグが登録される。稼働中フラグ「True」は稼働していることを示す。稼働中フラグ「False」は稼動していない(すなわち、停止している)ことを示す。例えば、オートスケールサーバ管理テーブル121には、オートスケールサーバIDが「装置A」、稼働中フラグが「True」というレコードが登録される。
図7は、VM管理テーブルの例を示す図である。
VM管理テーブル122は、記憶部120に格納される。VM管理テーブル122は、VM名、通信用IP(Internet Protocol)アドレス、オートスケールVM動作中フラグおよびオートスケール情報更新フラグの項目を含む。
VM名の項目には、仮想マシンの名称(仮想マシンのID)が登録される。通信用IPアドレスの項目には、仮想マシンのIPアドレスが登録される。オートスケールVM動作中フラグの項目には、死活監視の成否(すなわち、該当の仮想マシンが動作しているか否か)を示すオートスケールVM動作中フラグが登録される。オートスケールVM動作中フラグ「True」は、該当の仮想マシンとの定期通信が正常に行われた(すなわち、該当の仮想マシンが動作している)ことを示す。オートスケールVM動作中フラグ「False」は、該当の仮想マシンとの定期通信が正常に行われなかった(すなわち、該当の仮想マシンが停止している)ことを示す。オートスケール情報更新フラグの項目には、オートスケールサーバ200の停止中に、該当の仮想マシンに関してオートスケールVM動作中フラグの更新が発生したか否かを示すオートスケール情報更新フラグが登録される。オートスケール情報更新フラグ「True」は、当該更新が発生したことを示す。オートスケール情報更新フラグ「False」は、当該更新が発生しなかったことを示す。オートスケール情報更新フラグの初期値は「False」である。
例えば、VM管理テーブル122には、VM名が「Grp1_VM1」、通信用IPアドレスが「100.10.99.1」、オートスケールVM動作中フラグが「True」、オートスケール情報更新フラグが「False」というレコードが登録される。このレコードは、VM名「Grp1_VM1」の仮想マシンの通信用IPアドレスが「100.10.99.1」であることを示す。また、当該仮想マシンが稼動しており、オートスケールサーバ200の停止中におけるオートスケールVM動作中フラグの更新が発生していないことを示す。
また、例えば、VM管理テーブル122には、VM名が「SampleVM」、通信用IPアドレスが「200.200.200.2」、オートスケールVM動作中フラグが「False」、オートスケール情報更新フラグが「True」というレコードが登録される。このレコードは、VM名「SampleVM」の仮想マシンの通信用IPアドレスが「200.200.200.2」であることを示す。また、当該仮想マシンが停止しており、オートスケールサーバ200の停止中におけるオートスケールVM動作中フラグの更新が発生したことを示す。
図8は、オートスケールグループテーブルの例を示す図である。
オートスケールグループテーブル211は、記憶部210に格納される。オートスケールグループテーブル211は、オートスケールグループID、利用可能CIDR(Classless Inter-Domain Routing)、オートスケールポリシーID、最小台数および最大台数の項目を含む。
オートスケールグループIDの項目には、オートスケールグループの識別情報(オートスケールグループID)が登録される。利用可能CIDRの項目には、利用可能なCIDRが登録される。オートスケールポリシーIDの項目には、該当のオートスケールグループに対して適用されるオートスケールポリシーの識別情報(オートスケールポリシーID)が登録される。ここで、オートスケールポリシーIDに対応するオートスケールポリシーの具体的な内容は、後述するオートスケールポリシーテーブルに予め登録されている。最小台数の項目には、該当のオートスケールグループにおける仮想マシンの最小数が登録される。最大台数の項目には、該当のオートスケールグループにおける仮想マシンの最大数が登録される。
例えば、オートスケールグループテーブル211には、オートスケールグループIDが「グループ1」、利用可能CIDRが「100.10.99.0/24」、オートスケールポリシーIDが「ルール1,3」、最小台数が「1」、最大台数が「10」というレコードが登録される。このレコードは、オートスケールグループID「グループ1」のオートスケールグループでは、利用可能CIDRが「100.10.99.0/24」であり、オートスケールポリシーID「ルール1,3」のオートスケールポリシーが適用され、仮想マシンの最小数が1個、最大数が10個であることを示す。
図9は、VMテーブルの例を示す図である。
VMテーブル212は、記憶部210に格納される。VMテーブル212は、VM名、オートスケールグループID、通信用IPアドレスおよびVM状態の項目を含む。
VM名の項目には、仮想マシンのVM名が登録される。オートスケールグループIDの項目には、当該仮想マシンが属するオートスケールグループのオートスケールグループIDが登録される。通信用IPアドレスの項目には、仮想マシンのIPアドレスが登録される。VM状態の項目には、仮想マシンの状態が登録される。前述のように、仮想マシンの状態には、仮想マシンが正常に稼動している、仮想マシンに異常あり(ERROR)、スケールインにより縮退している(スケールインのために停止している)、スケールアウトのために起動中、などが考えられる。
例えば、VMテーブル212には、VM名が「Grp1_VM1」、オートスケールグループIDが「グループ1」、通信用IPアドレスが「100.10.99.1」、VM状態が「正常」というレコードが登録される。このレコードは、VM名「Grp1_VM1」の仮想マシンがオートスケールグループID「グループ1」のオートスケールグループに属し、当該仮想マシンのIPアドレスが「100.10.99.1」であり、当該仮想マシンが正常に稼動していることを示す。
また、例えば、VMテーブル212には、VM名が「Grp1_VM2」、オートスケールグループIDが「グループ1」、通信用IPアドレスが「100.10.99.2」、VM状態が「ERROR」というレコードが登録される。このレコードは、VM名「Grp1_VM2」の仮想マシンがオートスケールグループID「グループ1」のオートスケールグループに属し、当該仮想マシンのIPアドレスが「100.10.99.2」であり、当該仮想マシンで異常が発生していることを示す。
また、例えば、VMテーブル212には、VM名が「Grp1_VM3」、オートスケールグループIDが「グループ1」、通信用IPアドレスが「100.10.99.3」、VM状態が「スケールイン縮退」というレコードが登録される。このレコードは、VM名「Grp1_VM3」の仮想マシンがオートスケールグループID「グループ1」のオートスケールグループに属し、当該仮想マシンのIPアドレスが「100.10.99.3」であり、スケールインにより停止していることを示す。
また、例えば、VMテーブル212には、VM名が「Grp2_VM3」、オートスケールグループIDが「グループ2」、通信用IPアドレスが「100.11.0.32」、VM状態が「スケールアウト中」というレコードが登録される。このレコードは、VM名「Grp2_VM3」の仮想マシンがオートスケールグループID「グループ2」のオートスケールグループに属し、当該仮想マシンのIPアドレスが「100.11.0.32」であり、スケールアウトのため起動中であることを示す。
図10は、オートスケールポリシーテーブルの例を示す図である。オートスケールポリシーテーブル213は、記憶部210に格納される。オートスケールポリシーテーブル213は、オートスケールポリシーID、トリガーおよびトリガー詳細の項目を含む。
オートスケールポリシーIDの項目には、オートスケールポリシーの識別情報(オートスケールポリシーID)が登録される。トリガーの項目には、オートスケール制御のトリガーとなる監視対象のリソース(仮想マシンにより認識される論理的なリソースでもよい)が登録される。トリガー詳細の項目には、オートスケール制御のトリガーに関する条件が登録される。
例えば、オートスケールポリシーテーブル213には、オートスケールポリシーIDが「ルール1」、トリガーが「CPU使用率」、トリガー詳細が「1分毎のCPU平均使用率を取得し、連続5回80%を上回るとスケールアウト」というレコードが登録される。
このレコードは、オートスケールポリシーID「ルール1」のオートスケールポリシーでは、仮想マシンのCPU使用率をトリガーとしており、1分毎のCPU平均使用率が連続5回80%を上回った場合に、スケールアウトを行うことを示す。ここで、「1分毎のCPU平均使用率」は、該当のオートスケールグループに属する複数の仮想マシンに関する平均でもよいし、該当のオートスケールグループに属する仮想マシン単位の平均でもよい。後者の場合、該当のオートスケールグループに属する少なくとも何れかの仮想マシンにおいて、1分毎のCPU平均使用率が連続5回80%を上回るとスケールアウトを行う。なお、所定時間毎の「CPU平均使用率」(あるいは、「メモリ平均使用率」)の考え方は、他のオートスケールポリシーについても同様である。
また、例えば、オートスケールポリシーテーブル213には、オートスケールポリシーIDが「ルール2」、トリガーが「メモリ使用率」、トリガー詳細が「5分毎のメモリ平均使用率を取得し、連続3回95%を上回るとスケールアウト」というレコードが登録される。このレコードは、オートスケールポリシーID「ルール2」のオートスケールポリシーでは、仮想マシンのメモリ使用率をトリガーとしており、5分毎のメモリ平均使用率が連続3回95%を上回った場合に、スケールアウトを行うことを示す。
また、例えば、オートスケールポリシーテーブル213には、オートスケールポリシーIDが「ルール3」、トリガーが「CPU使用率」、トリガー詳細が「1分毎のCPU平均使用率を取得し、連続5回10%を下回るとスケールイン」というレコードが登録される。このレコードは、オートスケールポリシーID「ルール3」のオートスケールポリシーでは、仮想マシンのCPU使用率をトリガーとしており、1分毎のCPU平均使用率が連続5回10%を下回った場合に、スケールインを行うことを示す。
また、例えば、オートスケールポリシーテーブル213には、オートスケールポリシーIDが「ルール4」、トリガーが「メモリ使用率」、トリガー詳細が「5分毎のメモリ平均使用率を取得し、連続5回30%を下回るとスケールイン」というレコードが登録される。このレコードは、オートスケールポリシーID「ルール4」のオートスケールポリシーでは、仮想マシンのメモリ使用率をトリガーとしており、5分毎のメモリ平均使用率が連続5回30%を下回った場合に、スケールインを行うことを示す。
次に、上記のクラスタシステムにおける監視サーバ100の処理手順を説明する。
図11は、VM監視の例を示すフローチャートである。
VM監視部131は下記の処理を定期的に実行する。実行の周期は、運用に応じて定められる。周期は、数秒から数十秒程度でもよいし、1分から数分程度でもよい。
(S10)VM監視部131は、監視対象の仮想マシン(監視対象VM)の監視情報を収集する。例えば、VM監視部131は、監視対象の仮想マシンから死活監視用の所定のパケットを受信することで、監視情報を収集する。
(S11)VM監視部131は、監視対象VMの動作状況を更新する。具体的には、VM監視部131は、ステップS10の監視情報の収集結果に基づいて、VM管理テーブル122を更新する。すなわち、VM監視部131は、監視情報を収集できた(死活監視用のパケットを受信できた)仮想マシンのオートスケールVM動作中フラグを「True」に設定する。なお、元々「True」の場合はそのままでよい。
(S12)VM監視部131は、前回の監視情報の収集時から所定時間内に監視情報が届いていない監視対象VMがあるか否かを判定する。所定時間とは、当該監視の周期、または、当該周期に比較的短い時間(当該周期よりも短い時間)を加算した時間である。所定時間内に監視情報が届いていない監視対象VMがある場合、ステップS13に処理が進む。所定時間内に監視情報が届いていない監視対象VMがない場合、ステップS16に処理が進む。
(S13)VM監視部131は、ステップS12で前回の監視情報の収集時から所定時間内に監視情報が届いていないと判断された監視対象VMについて、VM管理テーブル122のオートスケールVM動作中フラグを「False」に設定する。なお、元々「False」の場合はそのままでよい。
(S14)VM監視部131は、オートスケールサーバ管理テーブル121を参照して、稼働中フラグが「True」であるか否かを判定する。稼働中フラグが「True」の場合、ステップS16に処理が進む。稼働中フラグが「False」の場合、ステップS15に処理が進む。
(S15)VM監視部131は、ステップS13でオートスケールVM動作中フラグを「False」に設定した監視対象VMについて、VM管理テーブル122のオートスケール情報更新フラグを「True」に設定する。
(S16)VM監視部131は、監視を継続するか否を判定する。監視を継続する場合、監視の周期の分だけ待機して、ステップS10に処理が進む。監視を継続しない場合、VM監視の処理が終了する。例えば、VM監視部131は、システム管理者による監視の終了の入力を受け付けた場合、監視を継続しないと判定し、それ以外の場合に監視を継続すると判定する。
図12は、オートスケールサーバ監視の例を示すフローチャートである。
ASサーバ連携部132は下記の処理を定期的に実行する。実行の周期は、運用に応じて定められる。周期は、数秒から数十秒程度でもよいし、1分から数分程度でもよい。
(S20)ASサーバ連携部132は、オートスケールサーバ200のVM状態を参照する。具体的には、ASサーバ連携部132は、オートスケールサーバ200に、VMテーブル212における各仮想マシンのVM状態を問い合わせる。
(S21)ASサーバ連携部132は、オートスケールサーバ200が動作中であるか否かを判定する。オートスケールサーバ200が動作中である場合、ステップS23に処理が進む。オートスケールサーバ200が動作中でない、すなわち、停止している場合、ステップS22に処理が進む。例えば、ASサーバ連携部132は、ステップS20の問い合わせに対するオートスケールサーバ200の応答がある場合、オートスケールサーバ200が動作中であると判定する。また、ASサーバ連携部132は、ステップS20の問い合わせに対するオートスケールサーバ200の応答がない場合、オートスケールサーバ200が停止していると判定する。
(S22)ASサーバ連携部132は、オートスケールサーバ管理テーブル121の稼働中フラグを「False」に設定する。元々「False」の場合はそのままでよい。そして、ステップS27に処理が進む。
(S23)ASサーバ連携部132は、オートスケールサーバ管理テーブル121の稼働中フラグを「True」に設定する。元々「True」の場合はそのままでよい。
(S24)ASサーバ連携部132は、VM管理テーブル122のオートスケール情報更新フラグが「True」である監視対象VMがあるか否かを判定する。オートスケール情報更新フラグが「True」である監視対象VMがある場合、ステップS25に処理が進む。オートスケール情報更新フラグが「True」である監視対象VMがない場合、ステップS27に処理が進む。
(S25)ASサーバ連携部132は、オートスケールサーバ200が管理するVM状態を、監視サーバ100のVM管理テーブル122におけるオートスケールVM動作中フラグを基に更新する。具体的には、ASサーバ連携部132は、オートスケール情報更新フラグが「True」である監視対象VMの情報(オートスケールVM動作中フラグ「False」を示す情報)を、オートスケールサーバ200に送信する。
(S26)ASサーバ連携部132は、VM管理テーブル122におけるオートスケール情報更新フラグを「False」に設定する。具体的には、ASサーバ連携部132は、ステップS24でオートスケール情報更新フラグが「True」であった箇所を、「False」に変更する。
(S27)ASサーバ連携部132は、オートスケールサーバ200から取得した各監視対象VMのVM状態に応じて異常の発生を検知し、システム管理者に異常を通知する。例えば、ASサーバ連携部132は、VM管理テーブル122においてオートスケールVM動作中フラグが「False」で、かつ、オートスケールサーバ200に確認したVM状態が「スケールインによる停止」でない仮想マシンを異常と判定する。例えば、ASサーバ連携部132は、ディスプレイ111に異常を示す画像を表示させてもよい。あるいは、ASサーバ連携部132は、システム管理者が利用する端末装置に、異常を示すメッセージを送信してもよい。なお、ステップS22を経由してステップS27が実行される場合、ASサーバ連携部132はオートスケールサーバ200からVM状態を取得できないことになる。この場合、ASサーバ連携部132は、ステップS27をスキップしてステップS28を実行してもよい。あるいは、ASサーバ連携部132は、例外的にオートスケールサーバ200への確認なしに、オートスケールVM動作中フラグが「False」の仮想マシンを異常とみなして、システム管理者に当該仮想マシンの異常を通知してもよい。
(S28)ASサーバ連携部132は、監視を継続するか否かを判定する。監視を継続する場合、監視の周期の分だけ待機して、ステップS20に処理が進む。監視を継続しない場合、オートスケールサーバ監視の処理が終了する。例えば、ASサーバ連携部132は、システム管理者による監視の終了の入力を受け付けた場合、監視を継続しないと判定し、それ以外の場合に監視を継続すると判定する。
次に、監視サーバ100による監視の例を説明する。
図13は、監視サーバによる監視の例を示す図である。
説明を簡単にするため、VM管理テーブル122の各項目のうち、VM名とVM動作中フラグ(オートスケールVM動作中フラグに相当)とを図示し、他の項目の図示を省略する。また、VMテーブル212の各項目のうち、VM名とVM状態とを図示し、他の項目の図示を省略する。また、VM名「VM1」の仮想マシンを、仮想マシンVM1のように表記する(他のVM名についても同様に表記する)。
まず、オートスケールサーバ200が稼働中の場合を考える(ステップST11)。VM管理テーブル122によれば、この段階において、仮想マシンVM1のVM動作中フラグは「True」である。仮想マシンVM2のVM動作中フラグは「False」である。仮想マシンVM3のVM動作中フラグは「True」である。仮想マシンVM4のVM動作中フラグは「True」である。一方、VMテーブル212によれば、仮想マシンVM1のVM状態は「正常」である。仮想マシンVM2のVM状態は「スケールイン縮退」である。仮想マシンVM3のVM状態は「正常」である。仮想マシンVM4のVM状態は「正常」である。VM管理テーブル122で、仮想マシンVM2のVM動作中フラグが「False」なので、監視サーバ100は、オートスケールサーバ200に仮想マシンVM2のVM状態を問い合わせる。オートスケールサーバ200は、VMテーブル212に基づいて、仮想マシンVM2のVM状態「スケールイン縮退」を監視サーバ100に応答する。この場合、監視サーバ100は、仮想マシンVM2から監視情報を取得できなかったことを異常とみなさない。
その後、オートスケールサーバ200が停止した場合を考える(ステップST12)。VMテーブル212は、オートスケールサーバ200が停止している間も、オートスケールサーバ200の不揮発性の記憶装置(例えば、HDD)に保持されている。監視サーバ100は、オートスケールサーバ200に対するVM状態の定期的な問い合わせに対して、オートスケールサーバ200からの応答がないことを検知することで、オートスケールサーバ200が停止したことを検知する。
監視サーバ100は、仮想マシンVM4との通信不可を検知する。すると、監視サーバ100は、VM管理テーブル122において、仮想マシンVM4のVM動作中フラグを「False」に変更することで、VM管理テーブル122をVM管理テーブル123に更新する。監視サーバ100は、仮想マシンVM4について、オートスケールサーバ200が停止している間にVM動作中フラグを「True」から「False」に変更したので、オートスケール情報更新フラグ(図13では図示を省略している)を「True」に設定する。
更にその後、オートスケールサーバ200が復旧した場合を考える(ステップST13)。例えば、監視サーバ100は、オートスケールサーバ200に対するVM状態の定期的な問い合わせに対してオートスケールサーバ200からの応答が再開されたことを検知することで、オートスケールサーバ200の起動を検知する。当該応答は、仮想マシンVM4が「正常」(ただし、実際の状態とは異なる)である旨を含む。監視サーバ100は、オートスケールサーバ200からVM状態の応答を受け付けると、仮想マシンVM4の停止がスケールインによる停止ではないことを検知し、仮想マシンVM4の異常をシステム管理者に通知する。
そして、監視サーバ100は、VM管理テーブル123に基づいて、オートスケールサーバ200が停止している間に仮想マシンVM4との通信不可を検知したことを、オートスケールサーバ200に通知する。オートスケールサーバ200は、当該通知に応じて、VMテーブル212の仮想マシンVM4のVM状態を「ERROR」に変更することで、VMテーブル212をVMテーブル214に更新する。そして、オートスケールサーバ200は、VMテーブル214により各仮想マシンのオートスケール制御を再開する。
なお、監視サーバ100は、オートスケールサーバ200の起動を検知したタイミングではなく、オートスケールサーバ200から仮想マシンVM4のVM状態として「ERROR」を取得したタイミングで仮想マシンVM4の異常を検知し、システム管理者に通知してもよい。
次に、監視の比較例を説明する。
図14は、監視の比較例を示す図である。
比較例では、仮想マシンを監視する監視サーバ700と、仮想マシンに対するオートスケール制御を行うオートスケールサーバ800とを含むシステムを考える。ただし、監視サーバ700は、オートスケールサーバ800と連携する機能を有していない。
監視サーバ700は、各仮想マシンの死活監視の状況を管理するVM監視テーブル701を記憶する。VM監視テーブル701には、VM名とVM動作フラグとが記録される。VM動作フラグは、「True」が動作中、「False」が停止を示す。
オートスケールサーバ800は、各仮想マシンの状態を管理するVM状態テーブル801を記憶する。VM状態テーブル801には、VM名とVM状態とが記録される。
まず、オートスケールサーバ800が稼働中の場合を考える(ステップST21)。VM監視テーブル701によれば、この段階において、仮想マシンVM1のVM動作中フラグは「True」である。仮想マシンVM2のVM動作中フラグは「False」である。仮想マシンVM3のVM動作中フラグは「True」である。仮想マシンVM4のVM動作中フラグは「True」である。一方、VM状態テーブル801によれば、仮想マシンVM1のVM状態は「正常」である。仮想マシンVM2のVM状態は「スケールイン縮退」である。仮想マシンVM3のVM状態は「正常」である。仮想マシンVM4のVM状態は「正常」である。VM監視テーブル701で、仮想マシンVM2のVM動作中フラグが「False」なので、監視サーバ700は、オートスケールサーバ800に仮想マシンVM2のVM状態を問い合わせる。オートスケールサーバ800は、VM状態テーブル801に基づいて、仮想マシンVM2のVM状態「スケールイン縮退」を監視サーバ700に応答する。この場合、監視サーバ700は、仮想マシンVM2から監視情報を取得できなかったことを異常とみなさない。
その後、オートスケールサーバ800が停止した場合を考える(ステップST22)。VM状態テーブル801は、オートスケールサーバ800が停止している間も、オートスケールサーバ800の不揮発性の記憶装置(例えば、HDD)に保持されている。監視サーバ700は、オートスケールサーバ800に対するVM状態の定期的な問い合わせに対して、オートスケールサーバ800からの応答がないことを検知することで、オートスケールサーバ800が停止したことを検知する。
監視サーバ700は、仮想マシンVM4との通信不可を検知する。すると、監視サーバ700は、VM監視テーブル701において、仮想マシンVM4のVM動作中フラグを「False」に変更することで、VM監視テーブル701をVM監視テーブル702に更新する。
更にその後、オートスケールサーバ800が復旧した場合を考える(ステップST23)。例えば、監視サーバ700は、オートスケールサーバ800に対するVM状態の定期的な問い合わせに対してオートスケールサーバ800からの応答が再開されたことを検知することで、オートスケールサーバ800の起動を検知する。監視サーバ700は、VM状態の応答に基づいて、仮想マシンVM4のVM状態が「正常」(ただし、実際の状態とは異なる)であり、スケールインによる停止ではないことを検知すると、システム管理者に仮想マシンVM4の異常を通知する。
オートスケールサーバ800は、VM状態テーブル801によりオートスケール制御を再開する。VM状態テーブル801は、仮想マシンVM4が「正常」として管理されている。このため、オートスケールサーバ800は、仮想マシンVM4が属するオートスケールグループに関してオートスケール制御を適切に行うことができない。また、オートスケールサーバ800が仮想マシンVM4の異常を検知するまでに、10分から数十分かかることもある。この間、ユーザが利用するアプリケーションなどの処理負荷が高まると、適切なスケールアウトを行えず、当該処理に遅延が生じるおそれがある。
一方、第2の実施の形態のクラスタシステムによれば、監視サーバ100とオートスケールサーバ200とを連携させ、オートスケールサーバ200が起動すると、監視サーバ100により最新の仮想マシンの情報をオートスケールサーバ200に提供する。このため、オートスケールサーバ200は、最新の仮想マシンの情報で復旧し、オートスケール制御を再開することができる。このため、オートスケールサーバ200が停止している間に停止した仮想マシンを、オートスケールサーバ200に適切に把握させ、オートスケール制御を適切に再開させることができる。その結果、ユーザが利用するアプリケーションの処理への影響を抑えられる。
[第3の実施の形態]
次に、第3の実施の形態を説明する。前述の第2の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
第2の実施の形態の例では、オートスケールサーバ200によるオートスケールの制御対象の仮想マシンと、監視サーバ100による監視対象の仮想マシンとが一致していたが、監視サーバ100は、オートスケールの制御対象以外の仮想マシンの監視も行える。
図15は、第3の実施の形態の仮想マシンの例を示す図である。
例えば、物理サーバ300が仮想マシン310,320を実行し、物理サーバ400が仮想マシン410,420,430を実行することを考える。このうち、オートスケールサーバ200によるオートスケールの制御対象は、仮想マシン310,320,410,420である。仮想マシン430は、オートスケールサーバ200によるオートスケールの制御の対象外である。一方、監視サーバ100による監視対象は、仮想マシン310,320,410,420,430である。
このように、オートスケールサーバ200によるオートスケールの制御対象の仮想マシンの範囲と、監視サーバ100による監視対象の仮想マシンの範囲とは一致していなくてもよい。監視サーバ100は、オートスケールの制御対象でない仮想マシンに対する死活監視により、当該仮想マシンとの通信不可を検知すると、当該仮想マシンについてのオートスケール状況の確認を行わずに、当該仮想マシンの異常を検知し、システム管理者に通知する。監視サーバ100は、監視対象の仮想マシンがオートスケールの制御対象であるか否かをVM管理テーブルにより管理する。
図16は、VM管理テーブルの例を示す図である。
VM管理テーブル124は、記憶部120に格納される。VM管理テーブル124は、オートスケール可否フラグ、VM名、通信用IPアドレス、オートスケールVM動作中フラグおよびオートスケール情報更新フラグの項目を含む。
オートスケール可否フラグの項目には、該当の仮想マシンがオートスケール制御の対象であるか否かを示す情報が登録される。該当の仮想マシンがオートスケール制御の対象の場合、オートスケール可否フラグは「対象」である。該当の仮想マシンがオートスケール制御の対象外の場合、オートスケール可否フラグは「対象外」である。
VM名、通信用IPアドレス、オートスケールVM動作中フラグおよびオートスケール情報更新フラグの項目に登録される情報は、VM管理テーブル122における同名の項目に登録される情報と同様である。ただし、オートスケールVM動作中フラグおよびオートスケール情報更新フラグの項目は、オートスケール可否フラグが「対象外」の場合、設定なし(図では設定なしをハイフン記号「-」で示す)となる。
例えば、VM管理テーブル124には、オートスケール可否フラグが「対象外」、VM名が「VMnormal」、通信用IPアドレスが「110.10.1.1」、オートスケールVM動作中フラグが設定なし(「-」)、オートスケール情報更新フラグが設定なし(「-」)というレコードが登録される。このレコードは、VM名「VMnormal」の仮想マシンがオートスケールの制御対象外であり、当該仮想マシンのIPアドレスが「110.10.1.1」であることを示す。
また、例えば、VM管理テーブル124には、オートスケール可否フラグが「対象」、VM名が「Grp1_VM1」、通信用IPアドレスが「100.10.99.1」、オートスケールVM動作中フラグが「True」、オートスケール情報更新フラグが「False」というレコードが登録される。このレコードは、VM名「Grp1_VM1」の仮想マシンがオートスケールの制御対象であることを示す。また、当該仮想マシンの通信用IPアドレスが「100.10.99.1」であることを示す。更に、当該仮想マシンが稼動しており、オートスケールサーバ200の停止中におけるオートスケールVM動作中フラグの更新が発生していないことを示す。
次に、VM管理テーブル124を用いた、VM監視部131によるVM監視の処理手順を説明する。第3の実施の形態では、VM監視部131は、図11で説明したVM監視の手順に代えて、下記の手順を実行する。
図17は、VM監視の例を示すフローチャートである。
VM監視部131は下記の処理を定期的に実行する。実行の周期は、運用に応じて定められる。周期は、数秒から数十秒程度でもよいし、1分から数分程度でもよい。
(S30)VM監視部131は、監視対象の仮想マシン(監視対象VM)の監視情報を収集する。例えば、VM監視部131は、監視対象の仮想マシンから死活監視用の所定のパケットを受信することで、監視情報を収集する。
(S31)VM監視部131は、監視対象VMの動作状況を更新する。具体的には、VM監視部131は、ステップS30の監視情報の収集結果に基づいて、VM管理テーブル124を更新する。すなわち、VM監視部131は、監視情報を収集できた(死活監視用のパケットを受信できた)仮想マシンのオートスケールVM動作中フラグを「True」に設定する。なお、元々「True」の場合はそのままでよい。
(S32)VM監視部131は、前回の監視情報の収集時から所定時間内に監視情報が届いていない監視対象VMがあるか否かを判定する。所定時間とは、当該監視の周期、または、当該周期に比較的短い時間(当該周期よりも短い時間)を加算した時間である。所定時間内に監視情報が届いていない監視対象VMがある場合、ステップS33に処理が進む。所定時間内に監視情報が届いていない監視対象VMがない場合、ステップS38に処理が進む。
(S33)VM監視部131は、VM管理テーブル124を参照して、前回の監視情報の収集時から所定時間内に監視情報が届いていない監視対象VMのオートスケール可否フラグが「対象」であるか否かを判定する。「対象」である場合、ステップS35に処理が進む。「対象」でない場合(すなわち、「対象外」である場合)、ステップS34に処理が進む。
(S34)VM監視部131は、該当の仮想マシンの異常をシステム管理者に通知する。例えば、VM監視部131は、ディスプレイ111に異常を示す画像を表示させてもよい。あるいは、VM監視部131は、システム管理者が利用する端末装置に、異常を示すメッセージを送信してもよい。そして、ステップS38に処理が進む。
(S35)VM監視部131は、ステップS32で前回の監視情報の収集時から所定時間内に監視情報が届いていないと判断された監視対象VMについて、VM管理テーブル124のオートスケールVM動作中フラグを「False」に設定する。なお、元々「False」の場合はそのままでよい。
(S36)VM監視部131は、オートスケールサーバ管理テーブル121を参照して、稼働中フラグが「True」であるか否かを判定する。稼働中フラグが「True」の場合、ステップS38に処理が進む。稼働中フラグが「False」の場合、ステップS37に処理が進む。
(S37)VM監視部131は、ステップS35でオートスケールVM動作中フラグを「False」に設定した監視対象VMについて、VM管理テーブル124のオートスケール情報更新フラグを「True」に設定する。
(S38)VM監視部131は、監視を継続するか否を判定する。監視を継続する場合、監視の周期の分だけ待機して、ステップS30に処理が進む。監視を継続しない場合、VM監視の処理が終了する。例えば、VM監視部131は、システム管理者による監視の終了の入力を受け付けた場合、監視を継続しないと判定し、それ以外の場合に監視を継続すると判定する。
なお、第3の実施の形態でもASサーバ連携部132は、図12のオートスケールサーバ監視の手順により、オートスケールサーバ200と連携する。
これにより、オートスケールサーバ200が停止し、復旧したときに仮想マシンの最新の情報を基にオートスケールサーバ200を復旧することができる。
更に、監視サーバ100は、VM管理テーブル124のオートスケール可否フラグに基づいて、オートスケール制御の対象の仮想マシンと、オートスケール制御の対象外の仮想マシンとを区別した監視を行うことができる。監視サーバ100は、オートスケール制御の対象外の仮想マシンについては、オートスケールサーバ200に対するオートスケールに関する問い合わせを省略して、当該仮想マシンの異常を迅速に通知することができる。
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2,第3の実施の形態の情報処理は、CPU101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体113に記録できる。
例えば、プログラムを記録した記録媒体113を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体113に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。