以下に、開示する仮想機器管理装置、仮想機器管理方法及び仮想機器管理プログラムの実施形態について、図面に基づいて詳細に説明する。なお、本実施形態により開示する発明が限定されるものではない。
(第1の実施形態)
図1は、第1の実施形態に係る仮想機器管理システムの構成の一例を示す図である。図1に示すように、仮想機器管理システムは、ユーザ端末101、物理機器103a、物理機器103b、物理機器103c、クラウドコントローラ108、及び仮想機器管理装置109を有する。ここで言う「物理機器」とは、仮想機器を生成可能な物理サーバ、ストレージ装置、及びネットワーク機器等である。なお、物理機器103a、物理機器103b及び物理機器103cを区別しない場合には、物理機器103と記載する。また、仮想機器管理システムが有する物理機器103の数は図1に示す数に限定されるものではなく、任意に変更可能である。
ユーザ端末101は、ユーザが利用する端末であり、ユーザの指示に応じて仮想機器の作成を仮想機器管理装置109に要求する。物理機器103は、クラウドコントローラ108から仮想機器の作成や削除依頼を受け、実際の仮想機器を作成したり削除したりする。例えば、物理機器103は、仮想機器を作成する指示をクラウドコントローラ108から受付け、仮想機器を作成する。
例えば、物理機器103aは、図示しない仮想ボリューム制御部を有し、仮想ボリューム104aと、仮想ボリューム105aとを作成する。また、物理機器103bは、図示しない仮想ネットワーク制御部を有し、仮想L2ネットワーク104bと、仮想ルータ105bと、仮想ロードバランサ106bとを作成する。なお、仮想ネットワーク制御部は、例えば「Neutron」によって実現される。また、物理機器103cは、図示しない仮想マシン制御部を有し、仮想マシン104cと、仮想マシン105cとを作成する。なお、仮想マシン制御部は、例えば「Nova」によって実現される。
また、物理機器103の稼働状態には、「稼働中」、「予備」及び「故障中/メンテ中」3つの状態がある。「稼働中」は、物理機器が稼働中であることを示す。「予備」は、物理機器が予備系として設けられ稼働中ではないことを示す。「故障中/メンテ中」は、物理機器が故障中やメンテナンス中であることを示す。なお、仮想機器管理システムにおいて、「予備」の物理機器が設けられなくてもよい。
また、物理機器103には、物理資源の容量に応じて、仮想機器を配置するために利用可能な物理資源の容量が定義される。ここで、物理資源には、例えば、物理メモリ、CPU(Central Processing Unit)、ネットワークポートなどが含まれる。なお、仮想マシンは、フレーバー(仮想マシンのスペック指定)に応じてメモリサイズが異なるため、作成する仮想マシンに応じて利用される物理資源の容量は異なる。しかしながら説明の便宜上、以下では、全ての仮想機器1つにつき、使用される物理資源の容量が同じであるものと仮定する。そして、1つの仮想機器を配置するために使用される物理資源の容量を1単位とし、「1スペース」と呼ぶ。言い換えると、1スペースには、1つの仮想機器を配置可能であり、1つの仮想機器を作成する場合には、いずれかの物理機器のスペースが1つ消費される。
また、物理機器内のスペースの状態は、「空き」、「使用中」、及び「障害用バッファ」の3種類で管理されるものとする。ここで、「空き」は、仮想機器が配置されていないスペースであることを示す。「使用中」は、仮想機器が配置されているスペースであることを示す。「障害用バッファ」は、障害復旧用に確保されたスペースであることを示す。
また、物理機器103aは、高可用ソフトウェア107aを備えている。同様に、物理機器103bは、高可用ソフトウェア107bを備えており、物理機器103cは、高可用ソフトウェア107cを備えている。なお、高可用ソフトウェア107a〜107cを区別しない場合には高可用ソフトウェア107と記載する。この高可用ソフトウェア107には、例えば「Pacemaker」等が利用できる。高可用ソフトウェア107は、物理機器103の障害を検知し、仮想機器管理装置109に物理機器の障害を通知する。かかる場合、物理機器103は、仮想機器を再配置させる指示をクラウドコントローラ108から受付け、障害の生じた物理機器103に配置された仮想機器を再配置する。
なお、「Pacemaker」は、信頼性の高い故障検出メカニズムを備えており、スプリットブレイン対策が確立している。「Pacemaker」は、スプリットブレイン状態(孤立状態)を、Quorumモジュール等による多数決原理で検出する。
クラウドコントローラ108は、物理機器103と仮想機器管理装置109とに接続されている。このクラウドコントローラ108は、CPU(Central Processing Unit)、メモリ、データ保持領域、及びネットワーク通信機能を有する装置である。クラウドコントローラ108は、仮想機器管理装置109からAPI(Application Programming Interface)経由で仮想機器の作成依頼を受付け、受付けた作成依頼に基づいて、仮想機器の作成を物理機器103に指示する。例えば、クラウドコントローラ108は、OpenStack等である。
仮想機器管理装置109は、ユーザ端末101と物理機器103とクラウドコントローラ108とに接続されている。仮想機器管理装置109は、CPU、メモリ、データ保持領域、及びネットワーク通信機能を有する装置であり、例えば、図1に示すように、仮想機器管理装置109は、仮想機器配置スケジューラDB(Data Base)110及び仮想機器配置スケジューラ機能部111を有する。
仮想機器配置スケジューラDB110は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、又は、ハードディスク、光ディスク等の記憶装置などである。仮想機器配置スケジューラDB110は、仮想機器配置情報及び物理資源情報を記憶する。仮想機器配置情報は、各仮想機器がどの物理機器上に配置されているかを示す情報である。物理資源情報は、各物理機器の稼働状態と物理機器が有する物理資源の空き容量とを示す情報である。なお、仮想機器配置情報の詳細については、図7を用いて後述し、物理資源情報の詳細については、図8を用いて後述する。
仮想機器配置スケジューラ機能部111は、物理機器の稼働状態と物理機器が有する物理資源の使用状態とを参照して、ビジネス要件に応じた仮想機器を配置する。例えば、仮想機器配置スケジューラ機能部111は、ユーザ端末101から、仮想機器の作成を要求された場合、仮想機器の作成要求と仮想機器配置スケジューラDB110の情報とを用いて、仮想機器の作成を仲介する。ここで、仮想機器配置スケジューラ機能部111は、仮想マシンや仮想ルータ等の仮想機器を新規に作成する通常のオペレーション時に、仮想機器を配置する物理機器を決め、クラウドコントローラ108に物理機器を指定して仮想機器の作成を依頼する。
図2は、仮想機器配置スケジューラ機能部111による仮想機器の作成処理を説明するための図である。図2では、3台の物理機器103a〜103cに、仮想ルータであるLR11〜LR16、LR21〜LR26、及びLR31〜LR36を仮想機器として作成する場合を示す。なお、3台の物理機器103a〜103cはいずれも稼働中であるものとする。また、図2の例では、仮想機器が仮想ルータである場合を示すが、仮想機器は、仮想マシン等のその他の仮想機器であってもよい。
図2に示すように、仮想機器配置スケジューラ機能部111は、仮想機器LR11〜LR16の配置先として物理機器103aを選択し、仮想機器LR21〜LR26の配置先として物理機器103bを選択し、仮想機器LR31〜LR36の配置先として物理機器103cを選択する。そして、仮想機器配置スケジューラ機能部111は、クラウドコントローラ108に配置を依頼する。すなわち、仮想機器配置スケジューラ機能部111は、物理機器103aに仮想機器LR11〜LR16を作成するようにクラウドコントローラ108に依頼する。また、仮想機器配置スケジューラ機能部111は、物理機器103bに仮想機器LR21〜LR26を作成するようにクラウドコントローラ108に依頼し、物理機器103cに仮想機器LR31〜LR36を作成するようにクラウドコントローラ108に依頼する。
また、仮想機器配置スケジューラ機能部111は、例えば、いずれかの物理機器103に障害が生じた場合に、仮想機器配置スケジューラDB110の情報を用いて、仮想機器の再配置を仲介する。ここで、仮想機器配置スケジューラ機能部111は、高可用ソフトウェア107及びクラウドコントローラ108と連携することで障害復旧時に仮想機器を再配置する。図3は、仮想機器配置スケジューラ機能部111による仮想機器の再配置処理を説明するための図である。図3では、3台の物理機器103a〜103cのうち、仮想機器としてLR21〜LR26を配置する物理機器103bに障害が生じた場合を示す。なお、3台の物理機器103a〜103cはいずれも稼働中であるものとする。
図3に示すように、仮想機器配置スケジューラ機能部111は、物理機器103bに障害が生じたことを検出する。そして、仮想機器配置スケジューラ機能部111は、仮想機器配置スケジューラDB110の情報を用いて、仮想機器LR21〜LR26の再配置先を決定する。図3に示す例では、仮想機器配置スケジューラ機能部111は、LR21、LR23、及びLR25の再配置先として物理機器103aを選択し、LR22、LR24、及びLR26の再配置先として物理機器103cを選択する。
そして、仮想機器配置スケジューラ機能部111は、クラウドコントローラ108に再配置を依頼する。すなわち、仮想機器配置スケジューラ機能部111は、物理機器103aに仮想機器LR21、LR23、及びLR25を作成するようにクラウドコントローラ108に依頼する。また、仮想機器配置スケジューラ機能部111は、物理機器103cに仮想機器LR22、LR24、及びLR26を作成するようにクラウドコントローラ108に依頼する。
この結果、物理機器103aは、仮想機器LR21、LR23、及びLR25を再構築し、仮想機器LR11〜LR16に加えて、仮想機器LR21、LR23、及びLR25を配置する。また、物理機器103cは、仮想機器LR22、LR24、及びLR26を再構築し、仮想機器LR31〜LR36に加えて、仮想機器LR22、LR24、及びLR26を配置する。
このように、仮想機器配置スケジューラ機能部111は、物理機器103bに障害が生じた場合、物理機器103bに配置された仮想機器LR21〜LR26を、物理機器103aと物理機器103cとに再配置する。すなわち、仮想機器配置スケジューラ機能部111は、複数台の物理機器を仮想機器の復旧先として利用するので、物理機器故障時の仮想機器復旧時間を短縮できる。
続いて、このような仮想機器管理システムにおける処理動作について、図4及び図5を用いて説明する。図4は、仮想機器管理システムにおける仮想機器を作成する処理動作を説明するための図である。
図4に示すように、ユーザ端末101は、仮想機器作成依頼を、仮想機器配置スケジューラ機能部111に送信する(ステップS1)。仮想機器配置スケジューラ機能部111は、仮想機器配置スケジューラDB110を参照し(ステップS2)、物理資源情報を確認する(ステップS3)。これにより仮想機器配置スケジューラ機能部111は、仮想機器を作成する物理機器103を決定し、APIパラメータを準備する(ステップS4)。
次に、仮想機器配置スケジューラ機能部111は、決定した物理機器103に仮想機器を作成させるようにクラウドコントローラ108に依頼する(ステップS5)。続いて、クラウドコントローラ108は、物理機器103に仮想機器の作成を依頼する(ステップS6)。
そして、物理機器103は、仮想機器を作成し(ステップS7)、仮想機器の作成が完了したことをクラウドコントローラ108に通知する(ステップS8)。続いて、クラウドコントローラ108は、仮想機器の作成が完了したことを仮想機器配置スケジューラ機能部111に通知する(ステップS9)。そして、仮想機器配置スケジューラ機能部111は、仮想機器の作成が完了したことをユーザ端末101に通知する(ステップS10)。
図5は、仮想機器管理システムにおける仮想機器を再配置する処理動作を説明するための図である。図5では、いずれかの物理機器103に障害が生じた場合に、仮想機器配置スケジューラ機能部111が仮想機器の再配置を仲介する動作を説明する。図5に示すように、仮想機器管理システムでは、物理機器103a、物理機器103b及び物理機器103cが相互に機器状態を監視している(ステップS21、ステップS22)。以下では、物理機器103aに障害が生じた場合について説明する。ここで、物理機器103aで障害が起きた際は、物理機器103a上の高可用ソフトウェアは物理機器103a上のプロセスを停止し、障害を仮想機器配置スケジューラ機能部111に通知する。物理機器103b及び物理機器103cも同様に物理機器103aの障害を仮想機器配置スケジューラ機能部111に通知する。ここで、物理機器103aが完全に故障している場合は、物理機器103aから仮想機器配置スケジューラ機能部111に障害の発生を通知はできないが、物理機器103b及び物理機器103cは、物理機器103aの故障を仮想機器配置スケジューラ機能部111に通知できる。このため、仮想機器配置スケジューラ機能部111は、物理機器103aの故障を知ることができる。なお図5に示す例では、物理機器103aが完全に故障し、物理機器103aから障害の発生を仮想機器配置スケジューラ機能部111に通知できない場合を示す。
かかる場合、物理機器103bは、物理機器103aに障害が生じたことを仮想機器配置スケジューラ機能部111に通知する(ステップS23)。そして、仮想機器配置スケジューラ機能部111は、物理機器103bにACK(ACKnowledgement)を応答する(ステップS24)。同様に、物理機器103cは、物理機器103aに障害が生じたことを仮想機器配置スケジューラ機能部111に通知する(ステップS25)。そして、仮想機器配置スケジューラ機能部111は、物理機器103cにACKを応答する(ステップS26)。ここで、仮想機器配置スケジューラ機能部111は、最初に受信した通知に従って仮想機器の再配置を始めるが、2番目以降に受信した通知に対してもACKを応答する。
仮想機器配置スケジューラ機能部111は、仮想機器配置スケジューラDB110を参照し(ステップS27)、物理資源情報を確認する(ステップS28)。これにより仮想機器配置スケジューラ機能部111は、物理機器103b及び物理機器103cの物理資源の空き容量を取得して、仮想機器を再配置する物理機器103を決定し、APIパラメータを準備する(ステップS29)。ここで、仮想機器配置スケジューラ機能部111は、複数台の物理機器103を仮想機器の復旧先として選択することで、高速の復旧を可能とする。
次に、仮想機器配置スケジューラ機能部111は、再配置する仮想機器を物理機器103bに作成させるようにクラウドコントローラ108に依頼する(ステップS30)。続いて、クラウドコントローラ108は、物理機器103bに仮想機器の作成を依頼する(ステップS31)。同様に、仮想機器配置スケジューラ機能部111は、再配置する仮想機器を物理機器103cに作成させるようにクラウドコントローラ108に依頼する(ステップS32)。続いて、クラウドコントローラ108は、物理機器103cに仮想機器の作成を依頼する(ステップS33)。ここで、仮想機器配置スケジューラ機能部111は、選択した配置先を指定してクラウドコントローラ108のAPIを呼び出す。これにより、クラウドコントローラ108は、指定された物理機器103に対して仮想機器作成を依頼する。
そして、物理機器103bは、仮想機器を作成し(ステップS34)、仮想機器の作成が完了したことをクラウドコントローラ108に通知する(ステップS35)。続いて、クラウドコントローラ108は、仮想機器の作成が完了したことを仮想機器配置スケジューラ機能部111に通知する(ステップS36)。同様に、物理機器103cは、仮想機器を作成し(ステップS37)、仮想機器の作成が完了したことをクラウドコントローラ108に通知する(ステップS38)。続いて、クラウドコントローラ108は、仮想機器の作成が完了したことを仮想機器配置スケジューラ機能部111に通知する(ステップS39)。
続いて、図6を用いて、仮想機器管理装置109が実現する仮想機器配置スケジューラDB110及び仮想機器配置スケジューラ機能部111について説明する。図6は、仮想機器管理装置109が実現する仮想機器配置スケジューラDB110及び仮想機器配置スケジューラ機能部111を説明するための図である。
図6に示すように、仮想機器配置スケジューラDB110は、仮想機器配置情報テーブル110a及び物理資源情報テーブル110bを記憶する。仮想機器配置情報テーブル110aは、各仮想機器がどの物理機器上に配置されているかを示す仮想機器配置情報を記憶する。
図7は、仮想機器配置情報テーブル110aのデータ構造の一例を示す図である。図7に示すように、仮想機器配置情報テーブル110aは、「仮想機器ID」と、「物理機器ID」とを対応付けた仮想機器配置情報を記憶する。ここで、仮想機器配置情報テーブル110aが記憶する「仮想機器ID」は、物理機器103に作成された仮想機器を一意に識別する識別子を示す。例えば、「仮想機器ID」には、「仮想ボリューム#1」、「仮想ボリューム#2」等のデータ値が格納される。仮想機器配置情報テーブル110aが記憶する「物理機器ID」は、物理機器103を一意に識別する識別子を示す。例えば、「物理機器ID」には、「物理機器#1」、「物理機器#2」等のデータ値が格納される。
一例をあげると、図7に示す仮想機器配置情報テーブル110aは、識別子が「物理機器#1」である物理機器103には、仮想機器「仮想ボリューム#1」及び「仮想ボリューム#2」が配置されていることを示す。また、図7に示す仮想機器配置情報テーブル110aは、識別子が「物理機器#2」である物理機器103には、仮想機器「仮想L2ネットワーク#1」、「仮想ルータ#1」及び「仮想ロードバランサ#1」が配置されていることを示す。また、図7に示す仮想機器配置情報テーブル110aは、識別子が「物理機器#3」である物理機器103には、仮想機器「仮想マシン#1」及び「仮想マシン#2」が配置されていることを示す。
図6に戻る。物理資源情報テーブル110bは、各物理機器の稼働状態と物理機器が有する物理資源の空き容量とを示す物理資源情報を記憶する。図8は、物理資源情報テーブル110bのデータ構造の一例を示す図である。図8に示すように、物理資源情報テーブル110bは、「物理機器ID」と「稼働状態」と「空き」と「使用中」と「障害用」とを対応付けた物理資源情報を記憶する。
ここで、物理資源情報テーブル110bが記憶する「物理機器ID」は、物理機器103を一意に識別する識別子を示す。例えば、「物理機器ID」には、「物理機器#1」、「物理機器#2」等のデータ値が格納される。
また、物理資源情報テーブル110bが記憶する「稼働状態」は、物理機器が稼働中であるか否かを示す。例えば、物理機器が稼働中である場合、「稼働状態」には「稼働中」が格納される。なお、図8では図示していないが、物理機器が予備系として設けられ稼働中ではない場合、「稼働状態」には「予備」が格納される。また、物理機器が故障中やメンテナンス中である場合、「稼働状態」には「故障中/メンテ中」が格納される。
また、「空き」は、物理機器が有する物理資源の容量のうち空き容量を示す。例えば、「空き」には、「3」、「5」、「4」等の値が格納される。また、「使用中」は、物理機器が有する物理資源の容量のうち使用中の容量を示す。例えば、「使用中」には、「1」、「3」、「2」等の値が格納される。また、「障害用」は、物理機器が有する物理資源の容量のうち復旧用に確保された容量を示す。例えば、「障害用」には、「2」等の値が格納される。
一例をあげると、図8に示す物理資源情報テーブル110bは、物理機器#1は、稼働中であり、物理資源の空き容量が「3」であり、使用中の容量が「1」であり、復旧用に確保された容量が「2」であることを示す。また、図8に示す物理資源情報テーブル110bは、物理機器#2は、稼働中であり、物理資源の空き容量が「5」であり、使用中の容量が「3」であり、復旧用に確保された容量が「2」であることを示す。同様に、図8に示す物理資源情報テーブル110bは、物理機器#3は、稼働中であり、物理資源の空き容量が「4」であり、使用中の容量が「2」であり、復旧用に確保された容量が「2」であることを示す。
図6に戻る。仮想機器配置スケジューラ機能部111は、作成依頼受付部111aと、配置先選択部111bと、障害検出部111cと、再配置先選択部111dと、作成要求部111eとを有する。
作成依頼受付部111aは、仮想機器の作成要求をユーザ端末101から受付ける。作成依頼受付部111aは、受付けた仮想機器の作成要求を配置先選択部111bに受け渡す。
配置先選択部111bは、仮想機器を新規に作成する際に、仮想機器を配置する物理機器を選択する。ここで、配置先選択部111bは、仮想機器を出来るだけ分散して配置するように物理機器103を選択する。言い換えると、配置先選択部111bは、「稼働中」の「空き」スペースの数が平準化するように仮想機器を配置する。
図9は、配置先選択部111bによる処理動作を説明するための図である。図9では、物理機器#1〜物理機器#6の6台の物理機器を有する仮想機器管理システムにおいて、仮想機器を新規に作成する場合について説明する。ここで、物理機器#1〜物理機器#5の稼働状態は「稼働中」であり、物理機器#6の稼働状態は「予備」である。また、物理機器#1のスペースの状態は、「空き」2、「使用中」1、「障害用バッファ」2であり、物理機器#2のスペースの状態は、「空き」0、「使用中」3、「障害用バッファ」2であり、物理機器#3のスペースの状態は、「空き」4、「使用中」0、「障害用バッファ」2である。また、物理機器#4のスペースの状態は、「空き」0、「使用中」5、「障害用バッファ」2であり、物理機器#5のスペースの状態は、「空き」2、「使用中」0、「障害用バッファ」2であり、物理機器#6のスペースの状態は、「空き」3、「使用中」0、「障害用バッファ」2である。
例えば、配置先選択部111bは、配置先選択時に、稼働状態が「稼働中」である物理機器の空きスペースの量をチェックし、最も空きスペースが多い稼働中の物理機器を特定する。より具体的には、配置先選択部111bは、作成する仮想機器のうち1つの仮想機器(例えば、仮想機器#1)を選択する。そして、図9に示すスペースの状態である場合には、「空き」が4である物理機器#3を、最も空きスペースが多い稼働中の物理機器に特定する。なお、配置先選択部111bは、「障害用バッファ」を通常オペレーション時には利用しない。そして、配置先選択部111bは、特定した物理機器#3を選択した仮想機器#1の配置先として選択する。
続いて、配置先選択部111bは、配置先として選択する処理を、作成を依頼された全ての仮想機器の配置先を選択するまで繰り返す。一例をあげると、配置先選択部111bは、図9に示す数字順に仮想機器を配置するように物理機器を選択する。このように、配置先選択部111bは、最も空きスペースが多い稼働中の物理機器のスペースの一部を選択することで「空き」スペースの数を平準化する。
また、配置先選択部111bは、稼働状態が「稼働中」である物理機器のスペースが全て埋まった場合に、稼働状態が「予備」である物理機器に仮想機器を配置する。このため、配置先選択部111bは、図9に示す8番のスペースまで仮想機器を配置したら、予備の物理機器に仮想機器を配置する。すなわち、配置先選択部111bは、図9に示す例において、仮想機器を9台以上作成する場合には、稼働状態が「予備」である物理機器に仮想機器を配置する。
図6に戻る。障害検出部111cは、障害の生じた物理機器103を検出する。ここで、障害検出部111cは、各物理機器103が有する高可用ソフトウェア107と連携することで、障害の生じた物理機器103を検出する。図10は、障害検出部111cによる処理動作を説明するための図である。
図10では、物理機器103a〜103cを図示しており、物理機器103aに障害が発生した場合について説明する。また、図10では、物理機器103が有する機能のうち、物理機器103aには、自装置の障害発生時に機能する構成部を示し、物理機器103b及び物理機器103cには、他装置の障害を検知した場合に機能する構成部を示す。
図10に示すように、物理機器103の障害の検知には、高可用ソフトウェア107a〜107cが用いられる。全ての物理機器103は、CIB(Cluster Information Base)に、クラスタ内の全物理機器103の状態を保持する。高可用ソフトウェア107は、RA(Resource Agent)を用いて自物理機器の状態を確認する。なお、RAとは、例えば、仮想ボリューム制御部や仮想マシン制御部に相当する。
また、高可用ソフトウェア107は、Heartbeatにより、クラスタ内のどの物理機器も他の物理機器の状態を知り得る。このため、高可用ソフトウェア107は、heartbeatパケットを使ってクラスタ内に状態を通知する。この仕組みにより、各物理機器は他の物理機器の状態を知る。高可用ソフトウェア107は、ある物理機器からのheartbeatパケットが継続的にロストすると、他の物理機器は当該物理機器がダウンしたとみなす。
物理機器103は、仮想機器配置スケジューラ機能部111に物理機器に生じた障害を通知するため、通知RAと通知プロセスとを備える。例えば、Pacemakerが自物理機器の故障を検出した場合、通知RAを使用して仮想機器配置スケジューラ機能部111に自物理機器の故障を通知する。一方、通知プロセスは、常駐プロセスとして設定され、CIBの状態を定期的に確認する。そして、通知プロセスは、他物理機器の故障を検出すると、他物理機器に障害が生じたことを仮想機器配置スケジューラ機能部111に通知する。通知RAによる通知及び通知プロセスによる通知は、ACKが仮想機器配置スケジューラ機能部111から返るまで一定回数繰り返される。
続いて、仮想機器配置スケジューラ機能部111において、障害検出部111cは、通知を受信したらACKを応答し、再配置先選択部111dに仮想機器の再配置処理を実行させる。また、障害検出部111cは、2通目以降の通知を無視してACKを応答する。これにより、複数の物理機器から通知を受けることで冗長化対策をとることができるとともに、復旧処理を繰り返さないようにする。
なお、高可用ソフトウェア107は、自物理機器の停止に失敗する場合がある。仮想マシンの場合、復旧により、複数の仮想マシンが同時に存在してしまい、データ領域への同時アクセスによりデータ破壊の可能性が出てしまう。そこで、高可用ソフトウェア107が「Pacemaker」である場合、STONITHモジュールを用いて、確実に故障物理機器を落とす。STONITHは、IPMI(Intelligent Platform Management Interface)経由で、故障物理機器を停止することで、故障物理機器が動作し続けないことを保証する。Quorumで過半数を形成した多数派の物理機器が、STONITHを起動することで、誤発動を防止する。なお、Quorumは過半数で判断するため、クラスタの物理機器数が少ない場合に、ある物理機器が故障したら、正常な物理機器が過半数を確保できなくなる。このため、クラスタから故障物理機器を切り離す減設作業が必要である。また、図10では、高可用ソフトウェア107が、Pacemakerである場合を示しているが、他の高可用ソフトウェアでも同様のメカニズムで障害の発生を検知したり、障害の発生を通知したりすることが可能である。
図6に戻る。再配置先選択部111dは、物理機器に生じた障害を通知された場合に、仮想機器を再作成する物理機器を選択する。ここで、再配置先選択部111dは、障害の生じた物理機器以外の物理機器にできるだけ順番に割り振られるように物理機器を選択する。例えば、再配置先選択部111dは、障害の生じた物理機器以外の物理機器のうち物理資源の空き容量のある物理機器を複数特定する。そして、再配置先選択部111dは、特定した複数の物理機器の物理資源を、障害の生じた物理機器に配置された仮想機器の再配置先として選択する。
図11は、再配置先選択部111dによる処理動作を説明するための図である。図11では、物理機器#1〜物理機器#6の6台の物理機器を有する仮想機器管理システムにおいて、物理機器#4が故障した際の復旧について説明する。ここで、物理機器#1〜物理機器#5の稼働状態は「稼働中」であり、物理機器#6の稼働状態は「予備」である。また、物理機器#1のスペースの状態は、「空き」2、「使用中」1、「障害用バッファ」2であり、物理機器#2のスペースの状態は、「空き」0、「使用中」3、「障害用バッファ」2であり、物理機器#3のスペースの状態は、「空き」4、「使用中」0、「障害用バッファ」2である。また、物理機器#4のスペースの状態は、「空き」0、「使用中」10、「障害用バッファ」2であり、物理機器#5のスペースの状態は、「空き」2、「使用中」0、「障害用バッファ」2であり、物理機器#6のスペースの状態は、「空き」3、「使用中」0、「障害用バッファ」2である。
例えば、再配置先選択部111dは、障害の生じた物理機器以外の物理機器のうち物理資源の空き容量のある物理機器を複数特定する。ここで、再配置先選択部111dは、物理機器の障害発生時には、「空き」のスペースに加えて、「障害用バッファ」のスペースも使用する。これにより、再配置先選択部111dは、「空き」が0の物理機器も含めて、より多くの物理機器が復旧処理を分担できるようにする。図11に示す例では、再配置先選択部111dが、稼働中である物理機器#1〜物理機器#3及び物理機器#5を特定した場合を示す。
そして、再配置先選択部111dは、特定した複数の物理機器の物理資源を、障害の生じた物理機器#4に配置された仮想機器の再配置先として選択する。例えば、再配置先選択部111dは、特定した複数の物理機器に順序付けを行う。ここで、再配置先選択部111dは、特定した複数の物理機器の物理資源の空き容量が多い順に、特定した複数の物理機器に順序付けを行う。例えば、再配置先選択部111dは、「空き」のスペースと「障害用バッファ」のスペースとの合計スペースを物理資源の空き容量とし、合計スペースが多い順に物理機器に順序付けを行う。図11の例では、再配置選択部111dが、合計スペースが6である物理機器#3、合計スペースが5である物理機器#1、合計スペースが4である物理機器#5、そして、合計スペースが2である物理機器#2の順で順序付けした場合を示す。
続いて、再配置先選択部111dは、障害の生じた物理機器に配置された仮想機器それぞれの再配置先として、順序に基づいて選択した物理機器の物理資源を選択する処理を繰り返す。一例をあげると、再配置先選択部111dは、図11に示す数字順に仮想機器を再配置するように物理機器を選択する。より具体的には、再配置選択部111dは、物理機器#3、物理機器#1、物理機器#5、そして、物理機器#2の順で選択した物理機器の物理資源を仮想機器の再配置先として選択する処理を繰り返す。ここで、再配置先選択部111dは、「空き」のスペースや「障害用バッファ」のスペースが無くなるまでは、各物理機器に仮想機器を順番に配置する。また、再配置先選択部111dは、スペースが無くなった物理機器は飛ばすようにする。
なお、再配置先選択部111dは、稼働状態が「稼働中」である全ての物理機器の「空き」のスペース及び「障害用バッファ」のスペースが満たされるまで、稼働状態が「予備」である物理機器を選択しない。このように、仮想機器配置スケジューラ機能部111は、「空き」のスペースに加えて、仮想機器の作成時には利用されない「障害用バッファ」のスペースを予め準備しておき、障害時に多くの物理機器に仮想機器を再配置することで、高速の復旧を可能とする。また、再配置選択部111dは、障害が発生した物理機器に配置された仮想機器の全てを再配置可能ではない場合には、特定した物理機器の「空き」のスペースと「障害用バッファ」のスペースとに再配置可能な範囲で、仮想機器ごとに再配置先を選択する。
また、Pacemakerのクラスタ構成は、最大8台程度で組み、障害の検知を行う。また、仮想機器配置スケジューラ機能部111は、クラスタを跨いで別物理機器に仮想機器を作成してもよいため、再作成が依頼される物理機器はクラスタのサイズ以上でも良い。また、全てが埋まった際に利用される予備機は存在してもしなくてもよい。クラスタ構成上はN−Act、0−Sbyで、Standby機を準備する必要はないため、物理機器の利用効率を高めることも出来る。
図6に戻る。作成要求部111eは、配置先選択部111bにより選択された物理機器103に、仮想機器を作成するようにクラウドコントローラ108に依頼する。また、作成要求部111eは、再配置先選択部111dにより選択された物理機器103に、仮想機器を作成するようにクラウドコントローラ108に依頼する。
図12は、仮想機器の作成を要求された場合の仮想機器配置スケジューラ機能部111による処理手順を示すフローチャートである。図12に示すように、作成依頼受付部111aは、仮想機器の作成をユーザ端末101から依頼されたか否かを判定する(ステップS101)。ここで、作成依頼受付部111aは、仮想機器の作成をユーザ端末101から依頼されたと判定した場合(ステップS101、Yes)、作成を依頼された仮想機器を特定する(ステップS102)。なお、作成依頼受付部111aは、仮想機器の作成をユーザ端末101から依頼されたと判定しなかった場合(ステップS101、No)、繰り返し物理機器の作成をユーザ端末101から依頼されたか否かを判定する。
続いて、配置先選択部111bは、作成を依頼された仮想機器を1つ選択する(ステップS103)。そして、配置先選択部111bは、空き容量の最も多い物理機器を特定する(ステップS104)。また、配置先選択部111bは、空き容量の最も多い物理機器を特定できたか否かを判定する(ステップS105)。ここで、配置先選択部111bは、空き容量の最も多い物理機器を特定できたと判定した場合(ステップS105、Yes)、ステップS109に移行する。一方、配置先選択部111bは、空き容量の最も多い物理機器を特定できたと判定しなかった場合(ステップS105、No)、予備系の物理機器が存在するか否かを判定する(ステップS106)。ここで、配置先選択部111bは、予備系の物理機器が存在すると判定しなかった場合(ステップS106、No)、処理を終了する。
一方、配置先選択部111bは、予備系の物理機器が存在すると判定した場合(ステップS106、Yes)、空き容量の最も多い予備系の物理機器を特定する(ステップS107)。また、配置先選択部111bは、空き容量の最も多い予備系の物理機器を特定できたか否かを判定する(ステップS108)。ここで、配置先選択部111bは、空き容量の最も多い予備系の物理機器を特定できたと判定しなかった場合(ステップS108、No)、処理を終了する。一方、配置先選択部111bは、空き容量の最も多い予備系の物理機器を特定できたと判定した場合(ステップS108、Yes)、ステップS109に移行する。
ステップS109において、配置先選択部111bは、特定した物理機器を選択した仮想機器の配置先に選択する(ステップS109)。そして、配置先選択部111bは、作成を依頼された全ての仮想機器の配置先を選択したか否かを判定する(ステップS110)。ここで、配置先選択部111bは、作成を依頼された全ての仮想機器の配置先を選択したと判定しなかった場合(ステップS110、No)、作成を依頼された全ての仮想機器の配置先を選択するまでステップS103からステップS110までの処理を繰り返し実行する。
一方、配置先選択部111bは、作成を依頼された全ての仮想機器の配置先を選択したと判定した場合(ステップS110、Yes)、クラウドコントローラ108に配置を依頼し(ステップS111)、処理を終了する。
図13は、物理機器103に障害が発生した場合の仮想機器配置スケジューラ機能部111による処理手順を示すフローチャートである。図13に示すように、障害検出部111cは、物理機器の障害を通知されたか否かを判定する(ステップS201)。ここで、障害検出部111cは、物理機器の障害を通知されたと判定した場合(ステップS201、Yes)、仮想機器配置情報テーブル110aを参照して、障害が発生した物理機器に配置された仮想機器を特定する(ステップS202)。なお、障害検出部111cは、物理機器の障害を通知されたと判定しなかった場合(ステップS201、No)、繰り返し物理機器の障害を通知されたか否かを判定する。
続いて、再配置先選択部111dは、空き容量及び障害用容量の少なくともいずれかがある物理機器を複数特定する(ステップS203)。そして、再配置先選択部111dは、複数の物理機器を特定できたか否かを判定する(ステップS204)。ここで、再配置先選択部111dは、複数の物理機器を特定できたと判定しなかった場合(ステップS204、No)、予備系の物理機器が存在するか否かを判定する(ステップS205)。ここで、再配置先選択部111dは、予備系の物理機器が存在すると判定しなかった場合(ステップS205、No)、ステップS207に移行する。
一方、再配置先選択部111dは、予備系の物理機器が存在すると判定した場合(ステップS205、Yes)、空き容量及び障害用容量の少なくともいずれかがある予備系の物理機器を特定する(ステップS206)。そして、再配置先選択部111dは、稼働中及び予備系を合わせて1以上の物理機器を特定できたか否かを判定する(ステップS207)。ここで、再配置先選択部111dは、稼働中及び予備系を合わせて1以上の物理機器を特定できたと判定した場合(ステップS207、Yes)、ステップS211に移行する。一方、再配置先選択部111dは、稼働中及び予備系を合わせて1以上の物理機器を特定できたと判定しなかった場合(ステップS207、No)、処理を終了する。
再配置先選択部111dは、ステップS204において、複数の物理機器を特定できたと判定した場合(ステップS204、Yes)、特定した複数の物理機器に、障害が発生した物理機器に配置された仮想機器を全て再配置可能であるか否かを判定する(ステップS208)。ここで、再配置先選択部111dは、障害が発生した物理機器に配置された仮想機器を全て再配置可能であると判定した場合(ステップS208、Yes)、ステップS211に移行する。一方、再配置先選択部111dは、障害が発生した物理機器に配置された仮想機器を全て再配置可能であると判定しなかった場合(ステップS208、No)、予備系の物理機器が存在するか否かを判定する(ステップS209)。ここで、再配置先選択部111dは、予備系の物理機器が存在すると判定した場合(ステップS209、Yes)、空き容量及び障害用容量の少なくともいずれかがある予備系の物理機器を特定する(ステップS210)。
ステップS211において、再配置先選択部111dは、特定した物理機器に順序付けを行う(ステップS211)。例えば、再配置先選択部111dは、空き容量及び障害用容量が多い順に、特定した物理機器に順序付けを行う。なお、再配置先選択部111dは、特定した物理機器が1つである場合には、ステップS211の処理を省略してもよい。
続いて、再配置先選択部111dは、仮想機器の再配置先を選択する(ステップS212)。例えば、再配置先選択部111dは、障害の生じた物理機器に配置された仮想機器それぞれの再配置先として、順序に基づいて選択した物理機器の物理資源を選択する処理を繰り返す。なお、再配置先選択部111dは、障害が発生した物理機器に配置された仮想機器の全てを再配置可能ではない場合には、特定した物理機器の空き容量及び障害用容量に再配置可能な範囲で、仮想機器ごとに再配置先を選択する。
そして、再配置先選択部111dは、クラウドコントローラ108に再配置を依頼し(ステップS213)、処理を終了する。なお、再配置先選択部111dは、仮想機器管理システムにおいて予備系の物理機器がない場合には、ステップS205、ステップS206、ステップS209及びステップS210の処理を省略してもよい。
上述したように、第1の実施形態に係る仮想機器管理装置109は、障害の生じた物理機器以外の物理機器のうち物理資源の空き容量のある物理機器を複数特定する。そして、第1の実施形態に係る仮想機器管理装置109は、特定した複数の物理機器の物理資源を、障害の生じた物理機器に配置された仮想機器の再配置先として選択する。すなわち、第1の実施形態に係る仮想機器管理装置109は、複数台の物理機器を仮想機器の復旧先として利用する。これにより、第1の実施形態に係る仮想機器管理装置109は、仮想機器を復旧するまでの時間を短縮することができる。
より具体的には、従来方式では、N−Act、M−Sbyでクラスタを組み物理機器に障害が起きた際に、Pacemaker等の高可用ソフトウェアの機能によりStandby機にフェールオーバーし、OpenStack等のクラウドコントローラのDBを元に仮想機器を再構築していた。ここで、従来方式では、HAクラスタソフトウェアを用いたフェールオーバーは、1台のStandby機に仮想機器を新たに再構築するため、全仮想機器の復旧に時間がかかるという問題がある。
一方、第1の実施形態に係る仮想機器管理装置109では、N−Act、0−Sbyでクラスタを組み、物理機器に障害が起きた際は、高可用ソフトウェアの機能により障害を検知するが、フェールオーバーせずに物理機器の障害を仮想機器管理装置109に通知する。仮想機器管理装置109は、各仮想機器に対して、再配置する複数の物理機器を決定し、配置する物理機器を指定してクラウドコントローラ108に再作成依頼を行う。そして、クラウドコントローラ108は、指定された物理機器に仮想機器を作成する。
このように、第1の実施形態に係る仮想機器管理装置109は、故障した物理機器上で動作していた仮想機器を、複数台の物理機器に再作成することで高速に復旧する。言い換えると、仮想機器管理装置109は、複数台の物理機器を復旧先として利用するため、物理機器故障時の仮想機器復旧時間が短縮される。例えば、移行先物理機器が3台の場合は、復旧処理時間が1/3に短縮できる。
また、第1の実施形態に係る仮想機器管理装置109は、Pacemaker等の高可用ソフトウェアでN−Act、0−Sbyでクラスタを組み障害検知を行う。ここで、第1の実施形態に係る仮想機器管理装置109は、クラスタの枠を超えて故障復旧を行うことが出来るため、移行先物理機器の台数をクラスタサイズ以上にとることもできる。これにより、復旧時間をより短縮できる。
更に、仮想機器管理システムでは、障害検知のためのクラスタはN−Act、0−Sbyであるため、Standby用の物理機器を準備する必要がなく、物理機器数の増大を抑えることができる。
第1の実施形態に係る仮想機器管理装置109は、物理機器に障害が起きた際の、仮想機器復旧を高速に行う事を狙っているが、実施形態はこれに限定されるものではない。例えば、物理機器が完全に故障した場合以外の、以下のユースケースにも、拡張して対応することが出来る。例えば、物理機器が完全には故障していなくても、複数あるファンの一つが故障した場合等は、サーバを停止してファン交換したい場合がある。かかる場合、仮想機器管理装置109は、物理機器上の仮想機器一括移動のAPI/GUIをオペレータに提供する。そして、仮想機器管理装置109は、API/GUI経由でのオペレータの依頼を受けて、故障復旧時と同様に仮想機器を一括で別物理機器に移動する。これにより、例えば管理者は、ファンの一つが故障した物理機器をメンテナンスすることが出来る。
なお、上述した実施形態では、配置先選択部111bは、仮想機器を新規に作成する通常のオペレーション時に、仮想機器を出来るだけ分散して配置するように物理機器103を選択するものとして説明したが実施形態はこれに限定されるものではない。例えば、配置先選択部111bは、仮想機器を新規に作成する通常のオペレーション時には、仮想機器を分散させることなく配置するように物理機器103を選択するようにしてもよい。
また、図11に示す例では、再配置先選択部111dが、特定した複数の物理機器の物理資源の空き容量が多い順に、特定した複数の物理機器に順序付けを行う場合について説明したが、実施形態はこれに限定されるものではない。例えば、再配置先選択部111dは、物理資源の空き容量とは関係なく、特定した複数の物理機器に任意に順序付けを行うようにしてもよい。
(第2の実施形態)
さて、これまで本発明の実施形態について説明したが、本発明は上述した実施形態以外にも、その他の実施形態にて実施されてもよい。そこで、以下では、その他の実施形態を示す。
(システム構成)
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上述の文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
(プログラム)
また、上記第1の実施形態に係る仮想機器管理装置109が実行する処理をコンピュータが実行可能な言語で記述した仮想機器管理プログラムを生成することもできる。この場合、コンピュータが仮想機器管理プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる仮想機器管理プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された仮想機器管理プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、図1等に示した仮想機器管理装置109と同様の機能を実現する仮想機器管理プログラムを実行するコンピュータの一例を説明する。
図14は、仮想機器管理プログラムを実行するコンピュータ1000を示す図である。図14に示すように、コンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM(Read Only Memory)1011およびRAM(Random Access Memory)1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1031に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1041に接続される。ディスクドライブ1041には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース1050には、例えば、マウス1051およびキーボード1052が接続される。ビデオアダプタ1060には、例えば、ディスプレイ1061が接続される。
ここで、図14に示すように、ハードディスクドライブ1031は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093およびプログラムデータ1094を記憶する。上記実施形態で説明した仮想機器管理プログラムは、例えばハードディスクドライブ1031やメモリ1010に記憶される。
また、仮想機器管理プログラムは、例えば、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1031に記憶される。具体的には、上記実施形態で説明した障害検出部111cと同様の情報処理を実行する検出手順と、再配置先選択部111dと同様の情報処理を実行する選択手順と、作成要求部111eと同様の情報処理を実行する依頼手順とが記述されたプログラムモジュール1093が、ハードディスクドライブ1031に記憶される。
また、仮想機器管理プログラムによる情報処理に用いられるデータは、プログラムデータ1094として、例えば、ハードディスクドライブ1031に記憶される。そして、CPU1020が、ハードディスクドライブ1031に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出して、上述した各手順を実行する。
なお、仮想機器管理プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1031に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ1041等を介してCPU1020によって読み出されてもよい。あるいは、仮想機器管理プログラムに係るプログラムモジュール1093やプログラムデータ1094は、LAN(Local Area Network)やWAN(Wide Area Network)等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
(その他)
なお、本実施形態で説明した特定プログラムは、インターネットなどのネットワークを介して配布することができる。また、特定プログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。