(57)【要約】【課題】管理ＯＳがゲストＯＳのＩＤに基づいて分配先を決めて転送することで、設定や転送ルートの簡素化を可能とする技術を提供する。【解決手段】複数のオペレーティングシステムを切り替えて動作させることで複数の仮想計算機を実現する情報処理装置が、データを受信し、前記複数のオペレーティングシステムのいずれかと対応させて設けたバックエンドドライバ部に、該対応したオペレーティングシステムのフロントエンドドライバ部へ前記データを送り、前記複数のオペレーティングシステムのそれぞれを識別する複数の識別情報を記憶した識別テーブルを参照して、前記データを分配するオペレーティングシステムを決定し、該オペレーティングシステムのフロントエンドドライバ部へ対応する前記バックエンドドライバ部から前記データを送ることで前記複数の仮想計算機に対する負荷分散を行う。【選択図】図１
2010066931.tif 000002
【特許請求の範囲】
【請求項１】
複数のオペレーティングシステムを切り替えて動作させることで複数の仮想計算機を実現する情報処理装置であって、
データを受信する受信部と、
前記複数のオペレーティングシステムのいずれかと対応し、該対応したオペレーティングシステムのフロントエンドドライバ部へ前記データを送るバックエンドドライバ部と、
前記複数のオペレーティングシステムのそれぞれを識別する複数の識別情報を記憶した識別テーブルと、
前記識別テーブルを参照して、前記データを分配するオペレーティングシステムを決定し、該オペレーティングシステムのフロントエンドドライバ部へ対応する前記バックエンドドライバ部から前記データを送ることで前記複数の仮想計算機に対する負荷分散を行う分配部と、
を備えた情報処理装置。
【請求項２】
前記複数のフロントエンドドライバ部のＩＰアドレス及びＭＡＣアドレスをそれぞれ他のフロントエンドドライバ部と同じ値に設定した請求項１に記載の情報処理装置。
【請求項３】
前記複数のオペレーティングシステムとバックエンドドライバ部との対応関係を記憶したドライバテーブルに、前記データを分配するオペレーティングと対応するバックエンドドライバが記録されていない場合、前記分配部が宛先テーブルを参照して該オペレーティングシステムと対応する外部サーバのアドレス宛てに前記データを送信させる請求項１又は２に記載の情報処理装置。
【請求項４】
前記複数のオペレーティングシステムが、前層に属するオペレーティングシステムから後層に属するオペレーティングシステムにデータを転送する複数階層構造をとり、各階層に複数のオペレーティングシステムが属する場合に、前層に属する各オペレーティングシステムが後層に属する複数のオペレーティングシステムに対して前記データを分配する前記分配部及びバックエンドドライバ部を備えた請求項１から３の何れかに記載の情報処理装置。
【請求項５】
自装置内で実行される前記複数のオペレーティングシステム及び他の情報処理装置で実行されるオペレーティングシステムが何れの情報処理装置に属するかを示す情報を記憶するゲスト管理テーブルを参照し、自装置内に属するオペレーティングシステムにデータを送る場合には前記分配部に前記バックエンドドライバ部を介して当該オペレーティングシステムに前記データを送り、他の情報処理装置に属するオペレーティングシステムにデータを送る場合には前記分配部に送信部を介して当該他のコンピュータに前記データを送信させるＯＳ状態判定部を備えた請求項１から４の何れかに記載の情報処理装置。
【請求項６】
前記複数のオペレーティングシステムの状態を通知する状態通知部からの通知に応じて前記ゲスト管理テーブルに前記複数のオペレーティングシステムの状態を記憶させるＯＳ状態収集部を備え、
前記ＯＳ状態判定部が前記オペレーティングシステムの状態に基づき前記データを分配させるオペレーティングシステムを絞り込む請求項５に記載の情報処理装置。
【請求項７】
複数のオペレーティングシステムを切り替えて動作させることで複数の仮想計算機を実現する情報処理装置が、
データを受信するステップと、
前記複数のオペレーティングシステムのいずれかと対応させて設けたバックエンドドライバ部に、該対応したオペレーティングシステムのフロントエンドドライバ部へ前記デー
タを送るステップと、
前記複数のオペレーティングシステムのそれぞれを識別する複数の識別情報を記憶した識別テーブルを参照して、前記データを分配するオペレーティングシステムを決定し、該オペレーティングシステムのフロントエンドドライバ部へ対応する前記バックエンドドライバ部から前記データを送ることで前記複数の仮想計算機に対する負荷分散を行うステップと、
を実行する負荷分散方法。
【請求項８】
前記複数のフロントエンドドライバ部のＩＰアドレス及びＭＡＣアドレスをそれぞれ他のフロントエンドドライバ部と同じ値に設定した請求項７に記載の負荷分散方法。
【請求項９】
前記複数のオペレーティングシステムとバックエンドドライバ部との対応関係を記憶したドライバテーブルに、前記データを分配するオペレーティングと対応するバックエンドドライバが記録されていない場合、宛先テーブルを参照して該オペレーティングシステムと対応する外部サーバのアドレス宛てに前記データを送信させる請求項７又は８に記載の負荷分散方法。
【請求項１０】
複数のオペレーティングシステムを切り替えて動作させることで複数の仮想計算機を実現する情報処理装置に、
データを受信するステップと、
前記複数のオペレーティングシステムのいずれかと対応させて設けたバックエンドドライバ部に、該対応したオペレーティングシステムのフロントエンドドライバ部へ前記データを送るステップと、
前記複数のオペレーティングシステムのそれぞれを識別する複数の識別情報を記憶した識別テーブルを参照して、前記データを分配するオペレーティングシステムを決定し、該オペレーティングシステムのフロントエンドドライバ部へ対応する前記バックエンドドライバ部から前記データを送ることで前記複数の仮想計算機に対する負荷分散を行うステップと、
を実行させる負荷分散プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の仮想計算機（仮想マシン）に負荷を分散する技術に関する。
【背景技術】
【０００２】
複数のサーバに負荷を分散するためには、従来、専用の負荷分散装置を用いていたが、近年、コンピュータに負荷分散用のソフトウェアを導入して、負荷分散を行う方式が増えてきている。
【０００３】
例えばＬＶＳ（Linux Virtual Server）を導入した代表サーバが代表ＩＰ宛てのパケットを受信すると、他の複数のサーバに対してＮＡＴ、ＩＰトンネリング、ダイレクトフォワーディングなどによって複数のサーバに分配する。
【０００４】
また、図１８に示すように物理的に一つのコンピュータが複数の仮想マシンを実現している場合に、管理ＯＳが選択的に各仮想マシン（ゲストＯＳ）へパケットを転送することで仮想マシンに対する負荷分散を行うことも提案されている。
【０００５】
また、本願発明に関連する先行技術として、例えば、下記の特許文献１に開示される技術がある。
【０００６】
【特許文献１】特開２００７−２０６９５５号公報
【特許文献２】特開２００５−１９０２７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、図１８の構成では、管理ＯＳが転送先をＩＰアドレスやＭＡＣアドレスで区別してパケットを転送しているため、転送するルートが複雑であった。
【０００８】
例えば、管理ＯＳは、物理的なインタフェース９１で受信したパケットを仮想のブリッジインタフェース９２を介して仮想インタフェース９３に分散し、該仮想インタフェース９３からゲストＯＳの仮想インタフェース９４へ転送する。
【０００９】
また、図１８の構成では、複数のゲストＯＳがそれぞれ異なるＩＰアドレス及びＭＡＣアドレスとなるように設定する必要があり、該設定が煩雑でミスが発生し易いという問題があった。
【００１０】
そこで、管理ＯＳがゲストＯＳのＩＤに基づいて分配先を決めて転送することで、設定や転送ルートの簡素化を可能とする技術を提供する。
【課題を解決するための手段】
【００１１】
上記課題を解決する本発明の態様としては、例えば負荷分散機能を有した情報処理装置、負荷分散方法、負荷分散プログラム及び記録媒体が挙げられる。
【００１２】
本情報処理装置は、
複数のオペレーティングシステムを切り替えて動作させることで複数の仮想計算機を実現する情報処理装置であって、
代表アドレス宛てのデータを受信する受信部と、
前記複数のオペレーティングシステムのそれぞれと対応し、該対応したオペレーティン
グシステムのフロントエンドドライバ部へ前記データを送るバックエンドドライバ部と、
前記複数のオペレーティングシステムをそれぞれ識別する複数の識別情報を記憶した識別テーブルを参照して、前記データを分配するオペレーティングシステムを決定し、該オペレーティングシステムのフロントエンドドライバ部へ対応する前記バックエンドドライバ部から前記データを送ることで前記複数の仮想計算機に対する負荷分散を行う分配部と、を備えた。
【００１３】
前記情報処理装置において、前記複数のフロントエンドドライバ部のＩＰアドレス及びＭＡＣアドレスをそれぞれ他のフロントエンドドライバ部と同じ値に設定しても良い。
【００１４】
前記情報処理装置において、前記複数のオペレーティングシステムとバックエンドドライバ部との対応関係を記憶したドライバテーブルに、前記データを分配するオペレーティングと対応するバックエンドドライバが記録されていない場合、前記分配部が宛先テーブルを参照して該オペレーティングシステムと対応する外部サーバのアドレス宛てに前記データを送信させても良い。
【００１５】
前記複数のオペレーティングシステムが、前層に属するオペレーティングシステムから後層に属するオペレーティングシステムにデータを転送する複数階層構造をとり、各階層に複数のオペレーティングシステムが属する場合に、前層に属する各オペレーティングシステムが後層に属する複数のオペレーティングシステムに対して前記データを分配する前記分配部及びバックエンドドライバ部を備えても良い。
【００１６】
前記情報処理装置において、自装置内で実行される前記複数のオペレーティングシステム及び他の情報処理装置で実行されるオペレーティングシステムが何れの情報処理装置に属するかを示す情報を記憶するゲスト管理テーブルを参照し、自装置内に属するオペレーティングシステムにデータを送る場合には前記分配部に前記バックエンドドライバ部を介して当該オペレーティングシステムに前記データを送り、他の情報処理装置に属するオペレーティングシステムにデータを送る場合には前記分配部に送信部を介して当該他のコンピュータに前記データを送信させるＯＳ状態判定部を備えても良い。
【００１７】
前記情報処理装置において、前記複数のオペレーティングシステムの状態を通知する状態通知部からの通知に応じて前記ゲスト管理テーブルに前記複数のオペレーティングシステムの状態を記憶させるＯＳ状態収集部を備え、
前記ＯＳ状態判定部が前記オペレーティングシステムの状態に基づき前記データを分配させるオペレーティングシステムを絞り込んでも良い。
【００１８】
本負荷分散方法は、複数のオペレーティングシステムを切り替えて動作させることで複数の仮想計算機を実現する情報処理装置が、
代表アドレス宛てのデータを受信するステップと、
前記複数のオペレーティングシステムのそれぞれと対応させて設けたバックエンドドライバ部に、該対応したオペレーティングシステムのフロントエンドドライバ部へ前記データを送るステップと、
前記複数のオペレーティングシステムをそれぞれ識別する複数の識別情報を記憶した識別テーブルを参照して、前記データを分配するオペレーティングシステムを決定し、該オペレーティングシステムのフロントエンドドライバ部へ対応する前記バックエンドドライバ部から前記データを送ることで前記複数の仮想計算機に対する負荷分散を行うステップと、を実行する。
【００１９】
また、前記負荷分散方法において、前記複数のフロントエンドドライバ部のＩＰアドレス及びＭＡＣアドレスをそれぞれ他のフロントエンドドライバ部と同じ値に設定すること
が可能である。
【００２０】
前記負荷分散方法において、前記複数のオペレーティングシステムとバックエンドドライバ部との対応関係を記憶したドライバテーブルに、前記データを分配するオペレーティングと対応するバックエンドドライバが記録されていない場合、宛先テーブルを参照して該オペレーティングシステムと対応する外部サーバのアドレス宛てに前記データを送信させても良い。
【００２１】
前記負荷分散方法において、前記複数のオペレーティングシステムが、前層に属するオペレーティングシステムから後層に属するオペレーティングシステムにデータを転送する複数階層構造をとり、各階層に複数のオペレーティングシステムが属する場合に、前層に属する各オペレーティングシステムが後層に属する複数のオペレーティングシステムに対して前記データを分配する前記分配部及びバックエンドドライバ部を備えても良い。
【００２２】
前記負荷分散方法において、自装置内で実行される前記複数のオペレーティングシステム及び他の情報処理装置で実行されるオペレーティングシステムが何れの情報処理装置に属するかを示す情報を記憶するゲスト管理テーブルを参照し、自装置内に属するオペレーティングシステムにデータを送る場合には前記バックエンドドライバ部を介して当該オペレーティングシステムに前記データを送り、他の情報処理装置に属するオペレーティングシステムにデータを送る場合には送信部を介して当該他のコンピュータに前記データを送信させても良い。
【００２３】
前記負荷分散方法において、前記複数のオペレーティングシステムの状態を通知する状態通知部からの通知に応じて前記ゲスト管理テーブルに前記複数のオペレーティングシステムの状態を記憶させる、
前記オペレーティングシステムの状態に基づき前記データを分配させるオペレーティングシステムを絞り込んでも良い。
【００２４】
また、本負荷分散プログラムは上記負荷分散方法をコンピュータに実行させるプログラムであっても良い。更に、本記録媒体は、この負荷分散プログラムをコンピュータが読み取り可能な記録媒体に記録したものであっても良い。コンピュータに、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【００２５】
ここで、コンピュータが読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータから読み取ることができる記録媒体をいう。このような記録媒体の内コンピュータから取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、CD-ROM、CD-R/W、DVD、DAT、８mmテープ、メモリカード等がある。
【００２６】
また、コンピュータに固定された記録媒体としてハードディスクやＲＯＭ（リードオンリーメモリ）等がある。
【発明の効果】
【００２７】
本発明によれば、複数の仮想計算機に対して負荷分散を行う際の設定や転送ルートの簡素化を可能とする技術を提供できる。
【発明を実施するための最良の形態】
【００２８】
〈実施例１〉
図１は、本実施例に係るデータの転送機能を有する情報処理装置の機能説明図、図２は、本実施例に係る負荷分散機能を有した情報処理装置の概念図である。
図１に示すように、本実施例の情報処理装置１０は、複数のゲストＯＳを動作させることで、仮想的に複数のサーバとして機能する。また、情報処理装置１０は、管理ＯＳを動作させ、複数のゲストＯＳの管理を行う。例えば、管理ＯＳは、通信制御部１５で受信したデータを分配部２１で各ゲストＯＳに分配する。なお、複数のゲストＯＳが実現するサーバは仮想なので、各サーバの通信制御部２３も仮想である。従って通信制御部２３と接続する管理ＯＳの通信制御部２２も仮想である。実際には情報処理装置１０のＣＰＵ上で、複数のゲストＯＳと管理ＯＳを時分割で実行する際に、メモリ等を介してデータを受け渡す。
【００２９】
図２は、本実施例に係る情報処理装置１０の構成を示す図面であり、特にソフトウェアの構成をその中段に示す。図２に示すように、本例の情報処理装置１０は、管理ＯＳがハイパーバイザを介して複数の仮想計算機（ＶＭ：Virtual Machine）を動作させる構成で
ある。ハードウェア１は、処理装置やメモリ等を備え、記憶装置１４から読み出したプログラムを実行することで、中段に示した管理ＯＳやドライバＯＳ、ゲストＯＳ、ハイパーバイザの機能を実現する。
【００３０】
図３は、本実施例に係る情報処理装置１０のハードウェア構成図である。図３に示すように、情報処理装置１０は、処理装置（例えばＣＰＵ：central processing unit）１１
や、メインメモリ(図中「MEMORY」)１２、入出力インタフェース(図中「I/O」)１３を備
えたコンピュータである。
以下、図１〜図３を用いて、本実施例を説明する。
【００３１】
入出力インタフェース１３には、演算処理の為のデータやソフトウェアを記憶した記憶装置（一例としてハードディスク、図中「ＨＤ」）１４、他のコンピュータとの通信を制御する通信制御部（ネットワークインタフェース、図中「ＣＣＵ」）１５、コンソール（ＣＯＮ）１６が接続されている。また、コンソール１６は、オペレータによる入力操作を行う操作部（キーボード等）や表示出力を行う表示部を有している。
【００３２】
情報処理装置１０は、ＣＰＵ１１が記憶装置１４から読み出したプログラムに従って処理を行う。即ち、管理ＯＳ、ドライバＯＳ、ハイパーバイザ、ゲストＯＳ（第１ＯＳ）、フロントエンドドライバ、バックエンドドライバ等のプログラムが、後述の処理を情報処理装置に実行させることで、複数の仮想計算機を有する仮想計算機システムを実現させている。
【００３３】
管理ＯＳは、情報処理装置１０が起動すると自動で起動され、ドメイン０として動作する。管理ＯＳは、ドライバドメインやゲストドメインなどを含めた情報処理装置全体の操作、管理を行うためのＯＳである。なお、管理ＯＳは、ドライバＯＳとしても動作可能である。
【００３４】
また、管理ＯＳは、前記複数の仮想計算機に対する負荷分散を行う分配部２１の機能も実現する。即ち、分配部としてＣＰＵ１１は、ラウンドロビンやランダム等の負荷分散処理によりデータを分配するサーバを決め、識別テーブルを参照して、該サーバと対応するゲストＯＳの識別情報を求める。なお、識別テーブルは、各ゲストＯＳを識別する識別情報、本実施例ではドメインＩＤと、当該ゲストＯＳが実現するサーバとを対応付けて格納している。
【００３５】
そして、求めたドメインＩＤと対応するバックエンドドライバ名をバックエンドドライバテーブルから求め、該バックエンドドライバへデータを送る。なお、バックエンドドライバテーブルは、ゲストＯＳの識別情報としてのドメインＩＤと、当該ゲストＯＳへデータを送るバックエンドドライバを特定するためのドライバ名とを対応付けて記憶している
。
【００３６】
更に、ＣＰＵ１１は、管理ＯＳのバックエンドドライバに従い、バックエンドドライバ部２２として動作し、ゲストＯＳのフロントエンドドライバに従い、フロントエンドドライバ部２３としても動作する。なお、管理ＯＳのバックエンドドライバ部２２は、前記複数のゲストＯＳのフロントエンドドライバのそれぞれと一対一に対応して設けられており、対応したゲストＯＳのフロントエンドドライバ２３部へデータを送る。
【００３７】
ハイパーバイザは、各ＯＳのディスパッチや、各ＯＳが実行する特権命令のエミュレーション、ＣＰＵ１１に関するハードウェア制御等を行う。なお、ハイパーバイザが管理ＯＳを含んでも良い。
【００３８】
ドライバＯＳは、記憶装置１４や通信制御部１５、コンソール１６等のＩ／Ｏ装置を制御する。ＶＭシステムにおいては、複数のゲストＯＳがそれぞれＩ／Ｏ装置を有しているのではなく、各ゲストＯＳの入出力をドライバＯＳに依頼し、ドライバＯＳが代行することで各ゲストＯＳの入出力制御を仮想化している。
【００３９】
例えば、管理ＯＳからゲストＯＳにデータを送る場合、管理ＯＳのバックエンドドライバが、データをハイパーバイザに渡し、ハイパーバイザがゲストＯＳのフロントエンドドライバが用いるメモリ領域にデータを書き込むことで、仮想的にデータを送信している。
【００４０】
ドライバＯＳは、管理ＯＳ上やゲストＯＳ上でも動作可能である。なお、ゲストＯＳ上でドライバＯＳを動作させた場合に、そのＯＳがドライバＯＳとなる。
【００４１】
ゲストＯＳは、ハイパーバイザを介して割り当てられたハードウェア資源を用いて仮想的に情報処理装置の機能を実現する。即ち、各ゲストＯＳは、通常の情報処理装置にインストールされているＯＳと同じであり、複数のゲストＯＳがそれぞれ複数の情報処理装置の機能（仮想計算機）を実現する。
【００４２】
通信制御部１５は、インターネット等のネットワークを介した他のコンピュータとの通信を制御する所謂ネットワークアダプタである。通信制御部１５は、他のコンピュータへデータを送信する送信部、及び他のコンピュータからデータを受信する受信部に相当する。
【００４３】
記憶装置１４或はメインメモリ１２は、図４に示すドメインＩＤテーブル（識別テーブル）３１とバックエンドドライバテーブル３２を格納している。
【００４４】
例えば図４に示すように、分配部２１がサーバ＃２へデータを分配する場合、分配部２１はドメインＩＤテーブル３１を参照して対応するドメインＩＤ＃２を求める。更に分配部２１は、ドメインＩＤ＃２と対応するバックエンドドライバのドライバ名＃２を求める。
【００４５】
図５は、これらの構成の情報処理装置１０において負荷分散を行う方法の説明図である。
【００４６】
先ず、ネットワークインタフェース１５は、パケットを受信するとドライバＯＳの実ドライバ２４に受信したパケットを渡す（Ｓ１）。
【００４７】
実ドライバ２４は、受信したパケットを分配部２１に伝達する（Ｓ２）。
【００４８】
分配部２１は、パケットの送信先ＩＰアドレスを確認し、負荷分散を行う代表ＩＰアドレス宛てであれば、パケットを分配するサーバを選択し、ドメインＩＤテーブル３１を参照して該サーバを実現するゲストＯＳのドメインＩＤ、例えばドメインＩＤ＃２を求める。（Ｓ３）ここで分配部２１がパケットを分配するサーバを選択する方法は、ラウンドロビンやランダム等、所定の順で決定するものや、送信元アドレスやリクエストの種類に応じて所定のアルゴリズムで決定するものなど、公知の如何なる方法でも良い。
【００４９】
また、分配部２１は、図４に示すバックエンドドライバテーブルを参照し、パケットの分配先としてＳ３で決定したドメインＩＤと対応するバックエンドドライバ２２にパケットを渡す（Ｓ４）。
【００５０】
バックエンドドライバ部２２は、分配部２１からのパケットを、対応するゲストＯＳのフロントエンドドライバ部２３へ送る（Ｓ５）。
【００５１】
これにより代表アドレス宛ての負荷を複数の仮想サーバに分散できる。
【００５２】
例えば、複数のゲストＯＳがそれぞれウエブ、アプリケーション、データベース等のサーバ機能に特化している場合に、分配部２１が受信したパケットのリクエストの種類に基づき適応する機能のゲストＯＳへ該パケットを分配すれば、装置全体として効率良く処理を行うことができる。
【００５３】
また、本実施例の分配部２１は、パケットを各サーバへ分配する際、各サーバのアドレスではなく、ドメインＩＤといった識別情報によって各ゲストＯＳを識別してパケットを分配する。従来、複数のサーバに負荷分散する場合には、分配先のサーバをアドレスで識別していた。このため、各サーバにそれぞれ固有のアドレスを設定する必要があった。しかし、本実施例では、識別情報によって各ゲストＯＳを識別するので、各ゲストＯＳのアドレスは自由に設定できる。例えば各ゲストＯＳにおけるＩＰアドレス及びＭＡＣアドレスを他のゲストＯＳと同じ値に設定できる。従って、アドレスの設定作業が容易になり、ミスの発生を抑えることができる。
【００５４】
また、パケットをゲストＯＳに転送する際、仮想ブリッジを介する必要が無くなるので、転送ルートが簡素化され、性能の低下を防ぐことができる。
【００５５】
〈実施例２〉
図６は、パケットを自装置内の仮想サーバだけでなく、他の情報処理装置（リアルサーバ）２０に対しても分配する例を示している。
【００５６】
本実施例２は、前述の実施例１と比べて他の情報処理装置にパケットを分配する構成が異なっており、その他の構成は同じである。このため、同一の要素には同符号を付すなどして再度の説明を省略している。
【００５７】
本実施例の記憶装置１４或はメインメモリ１２は、図７に示すように、ドメインＩＤ（識別）テーブル３１とバックエンドドライバテーブル３２に加え、宛先ＩＰテーブル３３を格納している。
【００５８】
宛先ＩＰテーブル３３は、パケットの分配先となるリアルサーバのアドレスを格納している。本実施例では、パケットを分配するゲストＯＳのドメインＩＤとリアルサーバのＩＰアドレスとを対応付けて記憶している。
【００５９】
図８は、本実施例２の構成の情報処理装置１０において負荷分散を行う方法の説明図である。
【００６０】
ネットワークインタフェース１５がパケットを受信すると、ドライバＯＳの実ドライバ２４を介して（Ｓ１）、受信したパケットを分配部２１に伝達し（Ｓ２）、分配部２１が、ラウンドロビン等の所定のアルゴリズムによりパケットを転送するサーバを決定し、該サーバのゲストＯＳを示す識別情報（ドメインＩＤ）をドメインＩＤテーブル３１から求める（Ｓ３）。
【００６１】
また、分配部２１は、図７に示すバックエンドドライバテーブル３２を参照し、分配先として決定したゲストＯＳと対応するバックエンドドライバ名求める（Ｓ２１）。
【００６２】
分配部２１は、決定したゲストＯＳに対するバックエンドドライバ名がバックエンドドライバテーブル３２から得られたか否かを判定し（Ｓ２２）、得られた場合には当該バックエンドドライバ名のバックエンドドライバ部２２にパケットを送る（Ｓ２３）。例えば、パケットをゲストＩＤ＃３に分配するのであれば、バックエンドドライバ名＃３のバックエンドドライバ部２２へパケットを送る。
【００６３】
バックエンドドライバ部２２は、分配部２１からのパケットを対応するゲストＯＳのフロントエンドドライバ部２３へ送る（Ｓ５）。
【００６４】
一方、Ｓ２１で決定したゲストＯＳに対応するバックエンドドライバ部２２が得られなかった場合、当該ゲストＯＳは、情報処理装置１０内に無い、即ち情報処理装置外に存在する。このため分配部２１は、宛先ＩＰテーブル３３を参照して、パケットを分配する宛先ＩＰアドレスを求める。例えばパケットをゲストＩＤ＃３に分配するのであれば、リアルサーバ２０のＩＰアドレス＃３を決定する（Ｓ２４）。
【００６５】
そして、分配部２１は、通信制御部１５を介してパケットを決定したＩＰアドレス宛てに送信する（Ｓ２５）。
【００６６】
このように、本実施例によれば、仮想サーバとリアルサーバが混在した環境で負荷分散を行うことができる。
【００６７】
〈実施例３〉
図９は、複数の仮想計算機により多階層システムを構築した例を示している。
【００６８】
本実施例３は、多階層システムを対象としており、また多階層システムで前層のゲストＯＳが後層に対してパケットを分配する構成とした点が実施例１あるいは実施例２と異なっており、その他の構成は同じである。このため、実施例１または実施例２と同一の要素には同符号を付すなどして再度の説明を省略している。
【００６９】
図９に示すように、本実施例では、複数のゲストＯＳが階層的に設けられており、前層に属するオペレーティングシステムから後層に属するオペレーティングシステムにデータを分配する多階層構成としている。
【００７０】
特に、本実施例では、パケットの転送経路の前側から順に、ウエブ層（プレゼンテーション層、図９中「Ｗｅｂ層」）、アプリケーション層（図９中「ＡＰ層」）、データ層（図９中「ＤＢ層」）の３層構成をとっている。
【００７１】
ウエブ層及びアプリケーション層に属するゲストＯＳは、ゲストＯＳの機能に加え、前
述した管理ＯＳの分配部２１やバックエンドドライバ部２２、フロントエンドドライバ部２３の機能も実現している。データ層に属するゲストＯＳは、ゲストＯＳの機能に加え、前述したフロントエンドドライバ部２３の機能も実現している。
【００７２】
従って、管理ＯＳからウエブ層のゲストＯＳへパケットを分配する場合、図５のとおり、管理ＯＳの分配部２１が分配するウエブ層のサーバを決め、識別テーブルを参照して当該サーバに対応するドメインＩＤを求め、バックエンドドライバテーブルを参照して当該ドメインＩＤに対応するバックエンドドライバ名を求め、該バックエンドドライバ名のバックエンドドライバ部２２へパケットを送る。
【００７３】
また、ウエブ層のゲストＯＳからアプリケーション層のゲストＯＳへパケットを分配する場合、ウエブ層のゲストＯＳが図５における管理ＯＳの機能を実現し、ウエブ層の管理ＯＳの分配部２１が分配するアプリケーション層のサーバを決め、識別テーブルを参照して当該サーバに対応するドメインＩＤを求め、バックエンドドライバテーブルを参照して当該ドメインＩＤに対応するバックエンドドライバ名を求め、該バックエンドドライバ名のバックエンドドライバ部２２へパケットを送る。
【００７４】
また、アプリケーション層のゲストＯＳからデータ層のゲストＯＳへパケットを分配する場合、アプリケーション層のゲストＯＳが図５における管理ＯＳの機能を実現し、アプリケーション層の管理ＯＳの分配部２１が分配するデータ層のサーバを決め、識別テーブルを参照して当該サーバに対応するドメインＩＤを求め、バックエンドドライバテーブルを参照して当該ドメインＩＤに対応するバックエンドドライバ名を求め、該バックエンドドライバ名のバックエンドドライバ部２２へパケットを送る。
【００７５】
また、ウエブ層又はアプリケーション層のゲストＯＳが、図８における管理ＯＳの機能を実現し、実施例２と同様に宛先ＩＰテーブルを備え、対応するバックエンドドライバが存在しない場合に分配部が外部のリアルサーバにパケットを分配する構成としても良い。
【００７６】
このように、本実施例によれば、一つのハードウェア（情報処理装置）で、多階層システムを構成することができる。
【００７７】
〈実施例４〉
図１０は、実施例４に係る情報処理装置の概略図である。
【００７８】
本実施例４では、ゲストＯＳが複数の情報処理装置の何れに属しているかを管理し、複数の情報処理装置のうち、パケットを転送するゲストＯＳが属する情報処理装置に該パケットを振分けるディスパッチャ（振分け部）４０を備えた。本実施例４のシステムは、ディスパッチャ４０と、情報処理装置１０と、情報処理装置２０を備えている。情報処理装置１０は、前述の実施例１と同じである。また、情報処理装置２０は、ハードウェア構成が情報処理装置１０と同じである。そして、情報処理装置１０及び情報処理装置２０が備えたゲストＯＳは、それぞれ独立に動作しており、各々ユニークなドメインＩＤが付されている。  
【００７９】
ディスパッチャ４０は、宛先管理テーブルを備えており、該宛先管理テーブルをを参照して送信するゲストＯＳを決め、ゲスト管理テーブルを参照して、決めたゲストＯＳが属している管理ＯＳに該パケットを送信する。
【００８０】
宛先管理テーブルは、図１１に示すように、リクエストパケットの情報とゲストＯＳのＩＤとを対応付けて記憶している。
【００８１】
ゲスト管理テーブルは、図１４に示すように、各ゲストＯＳを示すドメインＩＤと、各ゲストＯＳが属する管理ＯＳのＩＤと、各ゲストＯＳの状態を対応付けて記憶している。
【００８２】
ディスパッチャ４０は、前記振分けを行う回路を有した専用の装置（ハードウェア）であっても良いが、情報処理装置がソフトウェアに従って実現しても良い。
【００８３】
図１２の例では、一方の情報処理装置１０の管理ＯＳ１が前記ディスパッチャ４０の機能を実現している。
【００８４】
図１２の情報処理装置１０において、ディスパッチャ４０は、ＯＳ状態判定部４１やＯＳ状態収集部４２を備えている。
【００８５】
また、管理ＯＳ１，管理ＯＳ２は、ＯＳ状態送信エージェント（状態通知部）４３の機能を実現している。ＯＳ状態送信エージェント４３は、ゲストＯＳの状態をＯＳ状態収集部４２に送信する。
【００８６】
更に、ゲストＯＳもＯＳ状態送信エージェント４３の機能を実現している。
【００８７】
ゲストＯＳのＯＳ状態送信エージェント４３は、現在ゲストＯＳが稼動中かサスペンド中か等の現在状態、ウエブやデータベースといったゲストＯＳの機能の種別、ゲストＯＳに対応するドメインＩＤ等の情報を、ＯＳ状態として管理ＯＳのＯＳ状態送信エージェント４３に通知する。そして管理ＯＳ１，ＯＳ２のＯＳ状態送信エージェント４３が、ゲスト管理テーブルにＯＳ状態を記憶させる。なお、情報処理装置１０内でのＯＳ状態送信エージェントの通信は、ＸｅｎＢｕｓやハイパーバイザ等、任意の経路を用いて良い。また、管理ＯＳ２のＯＳ状態送信エージェント４３は、通信制御部１５からネットワークを介して管理ＯＳ１のＯＳ状態収集部４２に通知している。なお、ゲストＯＳからネットワークを介してＯＳ状態収集部４２へＯＳ状態を通知しても良い。
【００８８】
図１３は、この動作シーケンスを示す図である。各ＯＳ状態送信エージェント４３は、定期的に情報を収集し、ＯＳ状態収集部４２に送信している。ＯＳ情報収集部４２は、受信した各ゲストＯＳの状態をゲスト管理テーブルに記録する。
【００８９】
図１４は、前記ＯＳ状態収集部４２によって記録されたゲスト管理テーブルの例を示している。ディスパッチャ４０は、リクエストに応じてパケットを転送するゲストＯＳを決め、ゲスト管理テーブルを参照して転送先に決めたゲストＯＳが正常であれば当該ゲストＯＳが属する管理ＯＳにパケットを転送する。
【００９０】
図１５は、パケットを転送するゲストＯＳの状態を判定するＯＳ状態判定部４１の動作の説明図である。
【００９１】
先ず、パケットを受信すると、ディスパッチャ４０のＯＳ状態判定部４１はパケットからＩＰアドレスとポート番号を抽出する（Ｓ３１）。
【００９２】
ＯＳ状態判定部４１は、宛先管理テーブルを検索し（Ｓ３２）、宛先管理テーブルに抽出されたＩＰアドレス／ポート番号が存在するか否かを判定する（Ｓ３３）。ＩＰアドレス／ポートが宛先管理テーブルに存在すれば、ＯＳ状態判定部４１はＩＰアドレス／ポート番号に対応するゲストＯＳのドメインＩＤを取得し（Ｓ３４）、ゲスト管理テーブルを検索して取得したドメインＩＤに対応する宛先管理ＯＳのＩＤと該当ゲストＯＳの状態を取得する（Ｓ３５）。そして、ＯＳ状態判定部は取得したゲストＯＳの状態が正常に稼動中（running）か否（stop，suspend）かを判定し（Ｓ３６）、正常であれば分配部（パケ
ットバッファ）２１にパケットの転送を指示する（Ｓ３７）。
【００９３】
また、前記ゲストＯＳの状態が正常で無ければ、ＯＳ状態判定部４１は利用するゲストＯＳの変更処理に移行し（Ｓ３８）、ドメインＩＤテーブルを参照して利用するゲストＯＳのドメインＩＤを決める（Ｓ３９）。このゲストＯＳについて、ＯＳ状態判定部４１はゲスト管理テーブルを検索して宛先管理ＯＳのＩＤと該当ゲストＯＳの状態を取得し（Ｓ４０）、当該ゲストＯＳの状態が正常か否かを判定する（Ｓ４１）。以上の処理は、正常な宛先ゲストＯＳが決まるまで繰り返す。
【００９４】
そして、宛先ゲストＯＳの状態が正常であれば、宛先管理テーブルの宛先を正常と判定されたゲストＯＳに変更し（Ｓ４２）、分配部２１にパケット転送を指示する（Ｓ３７）。
【００９５】
一方、ステップ３３で、Ｓ３２で抽出したＩＰアドレス／ポートが宛先管理テーブルに存在しない場合、ＯＳ状態判定部４１は利用ゲストＯＳの新規追加処理に移行し（Ｓ４３）、ドメインＩＤテーブルを参照して利用するゲストＯＳのドメインＩＤを決める（Ｓ４４）。このゲストＯＳについて、ゲスト管理テーブルを検索して宛先管理ＯＳのＩＤと該当ゲストＯＳの状態を取得し（Ｓ４５）、当該ゲストＯＳの状態が正常か否かを判定し（Ｓ４６）、正常な宛先ゲストＯＳが決まるまで繰り返す。
【００９６】
そして、宛先ゲストＯＳの状態が正常であれば、ＯＳ状態判定部４１は宛先管理テーブルに新規エントリを追加し（Ｓ４７）、分配部２１にパケット転送を指示する（Ｓ３７）。
【００９７】
分配部２１は、分配するゲストＯＳが自装置内に属していればバックエンドドライバテーブルを参照して対応するバックエンドドライバにパケットを送る。また、分配部２１は、分配するゲストＯＳが他の情報処理装置２０に属している場合には、宛先管理テーブルを参照して該情報処理装置２０のＩＰアドレスを求め、通信制御部１５からネットワークを介して送信する。
【００９８】
このように本実施例によれば、ゲストＯＳをマイグレーション（移動）した場合でも、移動先の情報処理装置のＯＳ状態送信エージェント４３が当該ゲストＯＳの状態をＯＳ状態収集部４２に通知し、ゲスト管理テーブルに反映させるので、ディスパッチャ４０により移動先のゲストＯＳへパケットを送ることができる。
【００９９】
例えば図１６のごとくゲストＯＳ２を情報処理装置１０から情報処理装置２０へマイグレーションした場合であっても、ゲストＯＳ２のＯＳ状態送信エージェント４３がＯＳ状態収集部４２に通知してゲスト管理テーブルに反映させるので、移動前と同様に通信が可能になる。
【０１００】
また、上記各実施例１−４では、分配部２１、バックエンドドライバ２２、ディスパッチャ４０を管理ＯＳが備えたが、これに限らず他のＯＳが備えても良い。例えば図１７は、分配部２１やバックエンドドライバ２２をドライバＯＳで実現した例である。なお、分配部２１及びバックエンドドライバ２２の動作については前述と同じである。更にディスバッチャ４０をドライバＯＳで実現しても良い。
【０１０１】
〈その他〉
本発明は、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
例えば、以下に付記した構成であっても上述の実施形態と同様の効果が得られる。また
、これらの構成要素は可能な限り組み合わせることができる。
【０１０２】
（付記１）
複数のオペレーティングシステムを切り替えて動作させることで複数の仮想計算機を実現する情報処理装置であって、
データを受信する受信部と、
前記複数のオペレーティングシステムのいずれかと対応し、該対応したオペレーティングシステムのフロントエンドドライバ部へ前記データを送るバックエンドドライバ部と、
前記複数のオペレーティングシステムのそれぞれを識別する複数の識別情報を記憶した識別テーブルを参照して、前記データを分配するオペレーティングシステムを決定し、該オペレーティングシステムのフロントエンドドライバ部へ対応する前記バックエンドドライバ部から前記データを送ることで前記複数の仮想計算機に対する負荷分散を行う分配部と、
を備えた情報処理装置。
【０１０３】
（付記２）
前記複数のフロントエンドドライバ部のＩＰアドレス及びＭＡＣアドレスをそれぞれ他のフロントエンドドライバ部と同じ値に設定した付記１に記載の情報処理装置。
【０１０４】
（付記３）
前記複数のオペレーティングシステムとバックエンドドライバ部との対応関係を記憶したドライバテーブルに、前記データを分配するオペレーティングと対応するバックエンドドライバが記録されていない場合、前記分配部が宛先テーブルを参照して該オペレーティングシステムと対応する外部サーバのアドレス宛てに前記データを送信させる付記１又は２に記載の情報処理装置。
【０１０５】
（付記４）
前記複数のオペレーティングシステムが、前層に属するオペレーティングシステムから後層に属するオペレーティングシステムにデータを転送する複数階層構造をとり、各階層に複数のオペレーティングシステムが属する場合に、前層に属する各オペレーティングシステムが後層に属する複数のオペレーティングシステムに対して前記データを分配する前記分配部及びバックエンドドライバ部を備えた付記１から３の何れかに記載の情報処理装置。
【０１０６】
（付記５）
自装置内で実行される前記複数のオペレーティングシステム及び他の情報処理装置で実行されるオペレーティングシステムが何れの情報処理装置に属するかを示す情報を記憶するゲスト管理テーブルを参照し、自装置内に属するオペレーティングシステムにデータを送る場合には前記分配部に前記バックエンドドライバ部を介して当該オペレーティングシステムに前記データを送り、他の情報処理装置に属するオペレーティングシステムにデータを送る場合には前記分配部に送信部を介して当該他のコンピュータに前記データを送信させるＯＳ状態判定部を備えた付記１から４の何れかに記載の情報処理装置。
【０１０７】
（付記６）
前記複数のオペレーティングシステムの状態を通知する状態通知部からの通知に応じて前記ゲスト管理テーブルに前記複数のオペレーティングシステムの状態を記憶させるＯＳ状態収集部を備え、
前記ＯＳ状態判定部が前記オペレーティングシステムの状態に基づき前記データを分配させるオペレーティングシステムを絞り込む付記５に記載の情報処理装置。
【０１０８】
（付記７）
複数のオペレーティングシステムを切り替えて動作させることで複数の仮想計算機を実現する情報処理装置が、
データを受信するステップと、
前記複数のオペレーティングシステムのいずれかと対応させて設けたバックエンドドライバ部に、該対応したオペレーティングシステムのフロントエンドドライバ部へ前記データを送るステップと、
前記複数のオペレーティングシステムのそれぞれを識別する複数の識別情報を記憶した識別テーブルを参照して、前記データを分配するオペレーティングシステムを決定し、該オペレーティングシステムのフロントエンドドライバ部へ対応する前記バックエンドドライバ部から前記データを送ることで前記複数の仮想計算機に対する負荷分散を行うステップと、
を実行する負荷分散方法。
【０１０９】
（付記８）
前記複数のフロントエンドドライバ部のＩＰアドレス及びＭＡＣアドレスをそれぞれ他のフロントエンドドライバ部と同じ値に設定した付記７に記載の負荷分散方法。
【０１１０】
（付記９）
前記複数のオペレーティングシステムとバックエンドドライバ部との対応関係を記憶したドライバテーブルに、前記データを分配するオペレーティングと対応するバックエンドドライバが記録されていない場合、宛先テーブルを参照して該オペレーティングシステムと対応する外部サーバのアドレス宛てに前記データを送信させる付記７又は８に記載の負荷分散方法。
【０１１１】
（付記１０）
前記複数のオペレーティングシステムが、前層に属するオペレーティングシステムから後層に属するオペレーティングシステムにデータを転送する複数階層構造をとり、各階層に複数のオペレーティングシステムが属する場合に、前層に属する各オペレーティングシステムが後層に属する複数のオペレーティングシステムに対して前記データを分配する前記分配部及びバックエンドドライバ部を備えた付記７から９の何れか１項に記載の負荷分散方法。
【０１１２】
（付記１１）
自装置内で実行される前記複数のオペレーティングシステム及び他の情報処理装置で実行されるオペレーティングシステムが何れの情報処理装置に属するかを示す情報を記憶するゲスト管理テーブルを参照し、自装置内に属するオペレーティングシステムにデータを送る場合には前記バックエンドドライバ部を介して当該オペレーティングシステムに前記データを送り、他の情報処理装置に属するオペレーティングシステムにデータを送る場合には送信部を介して当該他のコンピュータに前記データを送信させる付記７から１０の何れか１項に記載の負荷分散方法。
【０１１３】
（付記１２）
前記複数のオペレーティングシステムの状態を通知する状態通知部からの通知に応じて前記ゲスト管理テーブルに前記複数のオペレーティングシステムの状態を記憶させる、
前記オペレーティングシステムの状態に基づき前記データを分配させるオペレーティングシステムを絞り込む付記１１に記載の負荷分散方法。
【０１１４】
（付記１３）
複数のオペレーティングシステムを切り替えて動作させることで複数の仮想計算機を実
現する情報処理装置に、
データを受信するステップと、
前記複数のオペレーティングシステムのいずれかと対応させて設けたバックエンドドライバ部に、該対応したオペレーティングシステムのフロントエンドドライバ部へ前記データを送るステップと、
前記複数のオペレーティングシステムのそれぞれを識別する複数の識別情報を記憶した識別テーブルを参照して、前記データを分配するオペレーティングシステムを決定し、該オペレーティングシステムのフロントエンドドライバ部へ対応する前記バックエンドドライバ部から前記データを送ることで前記複数の仮想計算機に対する負荷分散を行うステップと、
を実行させる負荷分散プログラム。
【０１１５】
（付記１４）
前記複数のフロントエンドドライバ部のＩＰアドレス及びＭＡＣアドレスをそれぞれ他のフロントエンドドライバ部と同じ値に設定した付記１３に記載の負荷分散プログラム。
【０１１６】
（付記１５）
前記複数のオペレーティングシステムとバックエンドドライバ部との対応関係を記憶したドライバテーブルに、前記データを分配するオペレーティングと対応するバックエンドドライバが記録されていない場合、宛先テーブルを参照して該オペレーティングシステムと対応する外部サーバのアドレス宛てに前記データを送信させる付記１３又は１４に記載の負荷分散プログラム。
【０１１７】
（付記１６）
前記複数のオペレーティングシステムが、前層に属するオペレーティングシステムから後層に属するオペレーティングシステムにデータを転送する複数階層構造をとり、各階層に複数のオペレーティングシステムが属する場合に、前層に属する各オペレーティングシステムが後層に属する複数のオペレーティングシステムに対して前記データを分配する前記分配部及びバックエンドドライバ部を備えた付記１３から１５の何れか１項に記載の負荷分散プログラム。
【０１１８】
（付記１７）
自装置内で実行される前記複数のオペレーティングシステム及び他の情報処理装置で実行されるオペレーティングシステムが何れの情報処理装置に属するかを示す情報を記憶するゲスト管理テーブルを参照し、自装置内に属するオペレーティングシステムにデータを送る場合には前記バックエンドドライバ部を介して当該オペレーティングシステムに前記データを送り、他の情報処理装置に属するオペレーティングシステムにデータを送る場合には送信部を介して当該他のコンピュータに前記データを送信させる付記１３から１６の何れか１項に記載の負荷分散プログラム。
【０１１９】
（付記１８）
前記複数のオペレーティングシステムの状態を通知する状態通知部からの通知に応じて前記ゲスト管理テーブルに前記複数のオペレーティングシステムの状態を記憶させる、
前記オペレーティングシステムの状態に基づき前記データを分配させるオペレーティングシステムを絞り込む付記１７に記載の負荷分散プログラム。
【図面の簡単な説明】
【０１２０】
【図１】データの転送機能の説明図
【図２】負荷分散機能を有した情報処理装置の概念図
【図３】情報処理装置のハードウェア構成図
【図４】ドメインＩＤ（識別）テーブルとバックエンドドライバテーブルの説明図
【図５】負荷分散方法の説明図
【図６】リアルサーバに対しても分配する例を示す図
【図７】実施例２のテーブル構成を示す図
【図８】実施例２の負荷分散方法の説明図
【図９】多階層システムを構築した例を示す図
【図１０】実施例４に係る情報処理装置の概略図
【図１１】ゲスト管理テーブルの説明図
【図１２】実施例４に係る情報処理装置の具体例を示す図
【図１３】ＯＳ状態判定部の動作シーケンスを示す図
【図１４】ゲスト管理テーブルの例を示す図
【図１５】ＯＳ状態判定部の動作の説明図
【図１６】ゲストＯＳをマイグレーションした例を示す図
【図１７】分配部及びバックエンドドライバをドライバＯＳで実現した例を示す図
【図１８】従来の負荷分散機能を備えた情報処理装置を示す図
【図１】
2010066931.tif 000003
【図２】
2010066931.tif 000004
【図３】
2010066931.tif 000005
【図４】
2010066931.tif 000006
【図５】
2010066931.tif 000007
【図６】
2010066931.tif 000008
【図７】
2010066931.tif 000009
【図８】
2010066931.tif 000010
【図９】
2010066931.tif 000011
【図１０】
2010066931.tif 000012
【図１１】
2010066931.tif 000013
【図１２】
2010066931.tif 000014
【図１３】
2010066931.tif 000015
【図１４】
2010066931.tif 000016
【図１５】
2010066931.tif 000017
【図１６】
2010066931.tif 000018
【図１７】
2010066931.tif 000019
【図１８】
2010066931.tif 000020