(57)【特許請求の範囲】
【請求項１】
稼働系装置および待機系装置によって共有される共有ストレージと、
前記稼働系装置上で動作する稼働系仮想マシンの仮想マシン用メモリ領域の内容（メモリ領域データ）を前記稼働系装置から前記共有ストレージに転送して二重化するメモリ領域データ二重化部と、
前記稼働系装置の障害発生を検出する障害検出部と、
前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンのメモリ領域データを前記共有ストレージから前記待機系装置に転送するメモリ領域データ取得部と、
前記障害検出部により障害発生が検出されると、前記メモリ領域データ取得部によって取得されたメモリ領域データを用いて、前記待機系装置において待機系仮想マシンを動作させるとともに、前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンの機能を前記待機系仮想マシンで継続するよう切り替える切替部と、
を備え、
前記メモリ領域データ取得部は、前記障害検出部により障害発生が検出されていない通常時に、前記共有ストレージに記憶される稼働系仮想マシンのメモリ領域データについてその一部を前記待機系装置に転送しておき、前記障害検出部により障害発生が検出されると、検出された稼働系装置において動作する稼働系仮想マシンのメモリ領域データの残りを、前記共有ストレージから前記待機系装置に転送することを特徴とするフォールトトレラントシステム。
【請求項２】
前記障害検出部は、前記稼働系装置における前記障害発生を検出することに加えて、前記稼働系装置における障害発生の兆候を検出し、
前記メモリ領域データ取得部は、前記障害検出部により前記障害発生の兆候が検出されると、検出された稼働系装置において動作する稼働系仮想マシンについて前記共有ストレージに記憶されるメモリ領域データの前記待機系装置への転送を開始し、その後、前記障害発生の兆候が検出された稼働系装置について障害発生が検出されると、該メモリ領域データの転送を継続して完了することを特徴とする請求項１に記載のフォールトトレラントシステム。
【請求項３】
請求項１または２に記載のフォールトトレラントシステムにおいて、前記メモリ領域データ二重化部を有する稼働系装置。
【請求項４】
請求項１または２に記載のフォールトトレラントシステムにおいて、前記メモリ領域データ取得部と、前記切替部と、を有する待機系装置。
【請求項５】
稼働系装置および待機系装置によって共有される共有ストレージを用いて、
前記稼働系装置上で動作する稼働系仮想マシンの仮想マシン用メモリ領域の内容（メモリ領域データ）を前記稼働系装置から前記共有ストレージに転送して二重化し、
前記稼働系装置の障害発生を検出すると、
前記障害発生を検出した稼働系装置において動作する稼働系仮想マシンのメモリ領域データを前記共有ストレージから前記待機系装置に転送し、
前記待機系装置において、前記共有ストレージから転送されたメモリ領域データを用いて待機系仮想マシンを動作させ、
前記障害発生を検出した稼働系装置において動作する稼働系仮想マシンの機能を前記待機系仮想マシンで継続するよう切り替え、
稼働系装置の障害発生が検出されていない通常時に、前記共有ストレージに記憶される稼働系仮想マシンのメモリ領域データについてその一部を前記待機系装置に転送しておき、
前記稼働系装置の障害発生が検出されると、検出された稼働系装置において動作する稼働系仮想マシンのメモリ領域データの残りを、前記共有ストレージから前記待機系装置に転送することを特徴とするフェイルオーバー方法。
【請求項６】
待機系装置が、
稼働系装置上で動作する稼働系仮想マシンの仮想マシン用メモリ領域の内容（メモリ領域データ）が二重化された共有ストレージを用いて、
前記稼働系装置の障害発生が検出されると、
前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンのメモリ領域データを前記共有ストレージから取得し、
前記共有ストレージから取得したメモリ領域データを用いて待機系仮想マシンを動作させ、
前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンの機能を前記待機系仮想マシンで継続するよう切り替え、
前記稼働系装置の障害発生が検出されていない通常時に、前記共有ストレージに記憶される稼働系仮想マシンのメモリ領域データについてその一部を前記待機系装置に転送しておき、
前記稼働系装置の障害発生が検出されると、障害発生が検出された稼働系装置において動作する稼働系仮想マシンのメモリ領域データの残りを、前記共有ストレージから取得すする
ことを特徴とするフェイルオーバー方法。
【請求項７】
稼働系装置上で動作する稼働系仮想マシンの仮想マシン用メモリ領域の内容（メモリ領域データ）が二重化された共有ストレージを用いて、
前記稼働系装置の障害発生が検出されると、前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンのメモリ領域データを前記共有ストレージから取得するメモリ領域データ取得ステップと、
前記メモリ領域データ取得ステップで取得されたメモリ領域データを用いて待機系仮想マシンを動作させる待機系仮想マシン動作ステップと、
前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンの機能を前記待機系仮想マシンで継続するよう切り替える切替ステップと、
前記稼働系装置の障害発生が検出されていない通常時に、前記共有ストレージに記憶される稼働系仮想マシンのメモリ領域データについてその一部を前記待機系装置に転送しておく転送ステップと、
前記稼働系装置の障害発生が検出されると、障害発生が検出された稼働系装置において動作する稼働系仮想マシンのメモリ領域データの残りを、前記共有ストレージから取得する取得ステップと
を待機系装置に実行させるフェイルオーバープログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシンのフォールトトレランスを実現する技術に関する。
【背景技術】
【０００２】
サービスを提供するサーバシステムでは、サーバに障害が発生してもサービスを継続するフォールトトレランスが求められる。そのため、そのようなサーバシステムでは、稼働系サーバおよび待機系サーバからなる冗長構成が採用される。サーバが仮想マシンである場合も、稼働系の仮想マシンが動作するサーバとは異なるサーバに待機系の仮想マシンを動作させることにより、フォールトトレランスを実現する技術が知られている。
【０００３】
例えば、特許文献１には、待機系サーバを必要としない仮想マシンのフォールトトレラントシステムが記載されている。この関連技術は、複数のサーバ上でそれぞれ複数の仮想マシンを動作させる。詳細には、各サーバは、１つ以上のプライマリの仮想マシンと、１つ以上のセカンダリの仮想マシンとを動作させる。また、あるサーバで稼働するプライマリの仮想マシンに対して、ペアとなるセカンダリの仮想マシンは、他のサーバで動作するよう構成される。そして、プライマリの仮想マシンのデータが動作するサーバから、ペアとなるセカンダリの仮想マシンが動作するサーバに対して、プライマリの仮想マシンのデータを定期的に送信する。これにより、この関連技術は、待機系サーバを必要とせずに、各サーバで稼働する仮想マシンのフォールトトレランスを実現している。
【０００４】
また、特許文献２には、稼働系の仮想マシンおよび待機系の仮想マシン間でのデータ転送量を削減する技術が記載されている。この関連技術は、稼働系の仮想マシンが動作するマシンおよび待機系の仮想マシンが動作するマシン間でストレージを共有することを前提とする。そして、稼働系の仮想マシンは、共有ストレージに読み出し命令が発生すると、読み出し命令の読み込み位置、読み出し位置および読み出しサイズを記憶する。そして、稼働系の仮想マシンは、読み込み位置、読み出し位置および読み出しサイズを待機系に転送する。また、待機系の仮想マシンは、受信した読み込み位置、読み出し位置および読み出しサイズにしたがって、仮想マシンメモリに、共有ストレージ上のデータを読み込む。これにより、この関連技術は、稼働系および待機系の仮想マシン間で、仮想マシンメモリの内容そのものを転送する必要がなく、データ転送量を削減している。
【０００５】
また、特許文献２には、この関連技術が、複数の仮想マシンに対するフォールトトレランスの実現にも適用可能であることが記載されている。この関連技術は、ある稼働系マシンで動作する仮想マシンに同期する仮想マシンと、他の稼働系マシンで動作する仮想マシンに同期する仮想マシンとを、１つの待機系装置上で動作させる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１２−１９０１７５号公報
【特許文献２】特開２０１２−２２１０６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１および特許文献２に記載されたものは、待機系の仮想マシンを動作させるためのコストが高いという課題がある。以下、待機系の仮想マシンを動作させるためのコストを、単に、待機系にかかるコストとも記載する。
【０００８】
例えば、特許文献１に記載された関連技術は、Ｎ個の稼働系の仮想マシンに対して同数の待機系の仮想マシンを必要とする。さらに、この関連技術は、合計Ｎ×２個の仮想マシンを分散して動作させるため、複数の仮想マシンの動作を可能にする複数のマシンを必要とする。ここで、複数の仮想マシンを動作させることが可能なマシンは、一般にコストが高くなる。そのため、この関連技術は、稼働系の仮想マシン数が多いほど、待機系にかかるコストを増大させる。
【０００９】
また、特許文献２に記載された関連技術は、Ｎ個の稼働系の仮想マシンに対して同数の待機系のマシンを必要とする。そのため、この関連技術は、稼働系の仮想マシンの数が多いほど、より多くの待機系装置が必要となり、待機系にかかるコストを増大させる。
【００１０】
あるいは、特許文献２に記載された関連技術は、Ｎ個の稼働系の仮想マシンに対して、Ｎ個の仮想マシンの動作を可能にする待機系のマシンを必要とする。上述のように、複数の仮想マシンを動作させることが可能なマシンは、一般にコストが高い。また、稼働系の仮想マシンの数が多いほど、待機系のマシンは、より多くの仮想マシンを動作させるためにより多くのリソースを必要とする。そのため、この関連技術は、稼働系の仮想マシンの数が多いほど、待機系にかかるコストを増大させる。
【００１１】
このように、上述の関連技術では、システムの規模が大きくなるほど、待機系の仮想マシンを動作させるためのマシンまたはリソースが増えて行く。そのため、待機系にかかるコスト（マシン費用、メンテナンス費用、電力費用等）が増大するという課題があった。
【００１２】
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、仮想マシンによって構成されるサーバシステムの規模が増大しても、待機系にかかるコストを抑えてフォールトトレランスを実現する技術を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明のフォールトトレラントシステムは、稼働系装置および待機系装置によって共有される共有ストレージと、前記稼働系装置上で動作する稼働系仮想マシンの仮想マシン用メモリ領域の内容（メモリ領域データ）を前記稼働系装置から前記共有ストレージに転送して二重化するメモリ領域データ二重化部と、前記稼働系装置の障害発生を検出する障害検出部と、前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンのメモリ領域データを前記共有ストレージから前記待機系装置に転送するメモリ領域データ取得部と、前記障害検出部により障害発生が検出されると、前記メモリ領域データ取得部によって取得されたメモリ領域データを用いて、前記待機系装置において待機系仮想マシンを動作させるとともに、前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンの機能を前記待機系仮想マシンで継続するよう切り替える切替部と、を備える。
【００１４】
また、本発明の稼働系装置は、上述のフォールトトレラントシステムにおいて、前記メモリ領域データ二重化部を有する。
【００１５】
また、本発明の待機系装置は、上述のフォールトトレラントシステムにおいて、前記メモリ領域データ取得部と、前記切替部と、を有する。
【００１６】
また、本発明のフェイルオーバー方法は、稼働系装置および待機系装置によって共有される共有ストレージを用いて、前記稼働系装置上で動作する稼働系仮想マシンの仮想マシン用メモリ領域の内容（メモリ領域データ）を前記稼働系装置から前記共有ストレージに転送して二重化し、前記稼働系装置の障害発生を検出すると、前記障害発生を検出した稼働系装置において動作する稼働系仮想マシンのメモリ領域データを前記共有ストレージから前記待機系装置に転送し、前記待機系装置において、前記共有ストレージから転送されたメモリ領域データを用いて待機系仮想マシンを動作させ、前記障害発生を検出した稼働系装置において動作する稼働系仮想マシンの機能を前記待機系仮想マシンで継続するよう切り替える。
【００１７】
また、本発明の他のフェイルオーバー方法は、待機系装置が、稼働系装置上で動作する稼働系仮想マシンの仮想マシン用メモリ領域の内容（メモリ領域データ）が二重化された共有ストレージを用いて、前記稼働系装置の障害発生が検出されると、前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンのメモリ領域データを前記共有ストレージから取得し、前記共有ストレージから取得したメモリ領域データを用いて待機系仮想マシンを動作させ、前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンの機能を前記待機系仮想マシンで継続するよう切り替える。
【００１８】
また、本発明のフェイルオーバープログラムは、稼働系装置上で動作する稼働系仮想マシンの仮想マシン用メモリ領域の内容（メモリ領域データ）が二重化された共有ストレージを用いて、前記稼働系装置の障害１発生が検出されると、前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンのメモリ領域データを前記共有ストレージから取得するメモリ領域データ取得ステップと、前記メモリ領域データ取得ステップで取得されたメモリ領域データを用いて待機系仮想マシンを動作させる待機系仮想マシン動作ステップと、前記障害発生が検出された稼働系装置において動作する稼働系仮想マシンの機能を前記待機系仮想マシンで継続するよう切り替える切替ステップと、を待機系装置に実行させる。
【００１９】
また、本発明の他のフェイルオーバー方法は、稼働系装置が、自装置および待機系装置によって共有される共有ストレージに、自装置上で動作する稼働系仮想マシンの仮想マシン用メモリ領域の内容（メモリ領域データ）を転送して二重化する。
【００２０】
また、本発明の他のフェイルオーバープログラムは、自装置および待機系装置によって共有される共有ストレージに、自装置上で動作する稼働系仮想マシンの仮想マシン用メモリ領域の内容（メモリ領域データ）を転送して二重化するメモリ領域データ二重化ステップを、稼働系装置に実行させる。
【発明の効果】
【００２１】
本発明は、仮想マシンによって構成されるサーバシステムの規模が増大しても、待機系にかかるコストを抑えてフォールトトレランスを実現する技術を提供することができる。
【図面の簡単な説明】
【００２２】
【図１】本発明の第１の実施の形態としてのフォールトトレラントシステムの構成を示すブロック図である。
【図２】本発明の第１の実施の形態としてのフォールトトレラントシステムの内部構成の一例を示す図である。
【図３】本発明の第１の実施の形態としてのフォールトトレラントシステムの機能ブロック構成を示す図である。
【図４】本発明の第１の実施の形態としてのフォールトトレラントシステムのメモリ領域データ二重化動作を説明するフローチャートである。
【図５】本発明の第１の実施の形態としてのフォールトトレラントシステムの障害検出動作を説明するフローチャートである。
【図６】本発明の第１の実施の形態としてのフォールトトレラントシステムのフェイルオーバー動作を説明するフローチャートである。
【図７】本発明の第２の実施の形態としてのフォールトトレラントシステムの機能ブロック構成を示す図である。
【図８】本発明の第２の実施の形態としてのフォールトトレラントシステムの障害検出動作を説明するフローチャートである。
【図９】本発明の第３の実施の形態としてのフォールトトレラントシステムの機能ブロック構成を示す図である。
【図１０】本発明の第３の実施の形態としてのフォールトトレラントシステムのフェイルオーバー動作を説明するフローチャートである。
【図１１】本発明の第４の実施の形態としてのフォールトトレラントシステムの機能ブロック構成を示す図である。
【図１２】本発明の第４の実施の形態としてのフォールトトレラントシステムの障害検出・フェイルオーバー動作を説明するフローチャートである。
【図１３】本発明の第５の実施の形態としてのフォールトトレラントシステムの機能ブロック構成を示す図である。
【図１４】本発明の第５の実施の形態としてのフォールトトレラントシステムの障害検出・フェイルオーバー動作を説明するフローチャートである。
【発明を実施するための形態】
【００２３】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００２４】
（第１の実施の形態）
本発明の第１の実施の形態としてのフォールトトレラントシステム１の構成を図１に示す。図１において、フォールトトレラントシステム１は、１つ以上の稼働系装置１０と、待機系装置２０と、共有ストレージ３０と、障害検出装置４０とを備える。なお、図１には、３つの稼働系装置、１つの待機系装置、１つの共有ストレージ、および、１つの障害検出装置を示しているが、本発明のフォールトトレラントシステムが含む各装置の数を限定するものではない。稼働系装置１０および待機系装置２０は、それぞれ、ネットワークを介して共有ストレージ３０と通信可能に接続される。また、稼働系装置１０および待機系装置２０は、それぞれ、ネットワークを介して障害検出装置４０と通信可能に接続される。
【００２５】
図２に、フォールトトレラントシステム１を構成する各装置のハードウェア構成の一例を示す。
【００２６】
図２において、稼働系装置１０は、ＣＰＵ（Central Processing Unit）１００１、メモリ１００２、ローカルストレージ１００３、および、ネットワークインタフェース１００４等のハードウェア要素を含むコンピュータ装置によって構成可能である。メモリ１００２は、ＲＡＭ（Random Access Memory）およびＲＯＭ（Read Only Memory）等によって構成される。ローカルストレージ１００３は、仮想マシン制御プログラムおよび稼働系フォールトトレラントプログラム等を記憶している。ネットワークインタフェース１００４は、ネットワークに接続するインタフェースである。
【００２７】
ＣＰＵ１００１は、ローカルストレージ１００３から仮想マシン制御プログラムを読み込んで実行する。これにより、メモリ１００２上で、ハイパーバイザー１０１が動作する。また、ハイパーバイザー１０１は、メモリ１００２上に仮想マシン１００を構築して動作させる。以降、稼働系装置１０上で動作する仮想マシン１００を、稼働系仮想マシン１００とも記載する。稼働系仮想マシン１００は、メモリ１００２内に確保される仮想マシン用メモリ領域１０２を用いて動作する。また、稼働系仮想マシン１００のローカルデータは、共有ストレージ３０内に保存される。
【００２８】
また、ＣＰＵ１００１は、ローカルストレージ１００３から稼働系フォールトトレラントプログラムを読み込んで実行する。これにより、ＣＰＵ１００１は、ネットワークインタフェース１００４を制御しながら、稼働系装置１０上に後述の機能ブロックを実現する。
【００２９】
待機系装置２０は、ＣＰＵ２００１、メモリ２００２、ローカルストレージ２００３、および、ネットワークインタフェース２００４等を含むコンピュータ装置によって構成可能である。メモリ２００２は、ＲＡＭおよびＲＯＭ等によって構成される。ローカルストレージ２００３は、仮想マシン制御プログラムおよび待機系フォールトトレラントプログラム等を記憶している。ネットワークインタフェース２００４は、ネットワークに接続するインタフェースである。
【００３０】
ＣＰＵ２００１は、メモリ２００２から仮想マシン制御プログラムを読み込んで実行する。これにより、メモリ２００２上で、ハイパーバイザー２０１が動作する。また、ハイパーバイザー２０１は、メモリ２００２上に仮想マシン２００を構築して動作させることが可能である。ただし、いずれの稼働系装置１０にも障害が発生していない通常時において、待機系装置２０の仮想マシン２００は停止している。以降、待機系装置２０上で動作し得る仮想マシン２００を、待機系仮想マシン２００とも記載する。待機系仮想マシン２００は、メモリ２００２内に確保される仮想マシン用メモリ領域２０２を用いて動作する。また、待機系仮想マシン２００は、共有ストレージ３０内に保存されるいずれかの稼働系仮想マシン１００のローカルデータを用いて動作することが可能となるよう構成される。
【００３１】
また、ＣＰＵ２００１は、メモリ２００２から待機系フォールトトレラントプログラムを読み込んで実行する。これにより、ＣＰＵ２００１は、ネットワークインタフェース２００４を制御しながら、待機系装置２０上における後述の機能ブロックを実現する。
【００３２】
共有ストレージ３０は、ネットワークに接続され、稼働系装置１０および待機系装置２０によって共有される。なお、共有ストレージ３０をネットワークに接続するためのネットワークインタフェースおよびその動作を制御するプロセッサ、メモリ等のハードウェア要素については、図示を省略している。例えば、共有ストレージ３０は、ＳＡＮ（Storage Area Network）システムまたはＮＡＳ（Network Attached Storage）によって構成されていてもよい。また、共有ストレージ３０は、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）として機能する装置であってもよい。
【００３３】
障害検出装置４０は、ＣＰＵ４００１、メモリ４００２、ローカルストレージ４００３、および、ネットワークインタフェース４００４等のハードウェア要素を含むコンピュータ装置によって構成可能である。メモリ４００２は、ＲＡＭおよびＲＯＭ等によって構成される。ローカルストレージ４００３は、本実施の形態の障害検出装置４０を動作させるためのプログラムを記憶している。ネットワークインタフェース４００４は、ネットワークに接続するインタフェースである。ＣＰＵ４００１は、ローカルストレージ４００３からプログラムを読み込んで実行することにより、ネットワークインタフェース４００４を制御しながら、障害検出装置４０の後述の機能を実現する。
【００３４】
なお、フォールトトレラントシステム１を構成する各装置およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００３５】
次に、フォールトトレラントシステム１の機能ブロック構成を図３に示す。図３において、稼働系装置１０は、メモリ領域データ二重化部１１を有する。また、待機系装置２０は、メモリ領域データ取得部２１と、切替部２２とを有する。また、障害検出装置４０は、障害検出部４１を有する。
【００３６】
メモリ領域データ二重化部１１は、稼働系仮想マシン１００によって利用される仮想マシン用メモリ領域１０２の内容（メモリ領域データ）を共有ストレージ３０に記憶させることによってデータを二重化する。メモリ領域データには、稼働系仮想マシン１００によって利用される仮想的なメモリ（主記憶装置）のデータ、ＣＰＵコンテキスト、ネットワーク送信用バッファ内容等が含まれている。なお、メモリ領域データ二重化部１１は、メモリ領域データを、自装置上の仮想マシンの情報であることを識別可能に、共有ストレージ３０に記憶させる。例えば、メモリ領域データ二重化部１１は、共有ストレージ３０に、稼働系仮想マシン１００の識別情報に対応付けてメモリ領域データを記憶させてもよい。また、例えば、メモリ領域データ二重化部１１は、メモリ領域データを、所定タイミング毎に共有ストレージ３０に遅延コピーしてもよい。また、例えば、メモリ領域データ二重化部１１は、メモリ領域データのうちダーティページを遅延コピーするようにしてもよい。なお、メモリ領域データ二重化部１１は、メモリ領域データを共有ストレージ３０に記憶させて二重化する手法として、各種公知の技術を採用可能である。
【００３７】
共有ストレージ３０は、稼働系仮想マシン１００毎に、それぞれのメモリ領域データを記憶する。
【００３８】
障害検出部４１は、稼働系装置１０における障害の発生を検出する。稼働系装置１０における障害発生を検出する手法としては、コンピュータ装置の物理的な障害を検出する各種公知の手法を採用することが可能である。また、障害検出部４１は、稼働系装置１０における障害発生を示す検出情報を、待機系装置２０に通知する。例えば、障害検出部４１は、障害が発生した稼働系装置１０を識別する情報を、検出情報として待機系装置２０に通知してもよい。
【００３９】
メモリ領域データ取得部２１は、障害発生が検出された稼働系装置１０において動作する稼働系仮想マシン１００のメモリ領域データを、共有ストレージ３０から取得する。例えば、メモリ領域データ取得部２１は、取得したメモリ領域データを、自装置のメモリ２００２内の仮想マシン用メモリ領域２０２に保存する。以降、障害発生が検出された稼働系装置１０において動作する稼働系仮想マシン１００を、単に、「障害が発生した稼働系仮想マシン１００」とも記載する。
【００４０】
切替部２２は、障害検出部４１により障害発生が検出されると、メモリ領域データ取得部２１によって取得されたメモリ領域データを用いて、待機系仮想マシン２００を動作させる。例えば、切替部２２は、障害が発生した稼働系仮想マシン１００のメモリ領域データが保存された自装置の仮想マシン用メモリ領域２０２を用いて動作するよう、待機系仮想マシン２００を起動すればよい。また、切替部２２は、障害が発生した稼働系仮想マシン１００のローカルデータとして共有ストレージ３０に保存された情報をローカルデータとして用いるよう、待機系仮想マシン２００を起動すればよい。
【００４１】
そして、切替部２２は、障害発生が発生した稼働系仮想マシン１００の機能を、自装置上で起動した待機系仮想マシン２００で継続するよう切り替える処理（フェイルオーバ）を行う。
【００４２】
以上のように構成されたフォールトトレラントシステム１の動作について、図面を参照して説明する。
【００４３】
まず、フォールトトレラントシステム１のメモリ領域データ二重化動作を図４に示す。
【００４４】
図４では、まず、稼働系装置１０のメモリ領域データ二重化部１１は、自装置上で動作する稼働系仮想マシン１００によって利用中のメモリ領域データを、共有ストレージ３０に記憶させる（ステップＳ１）。
【００４５】
前述のように、メモリ領域データ二重化部１１は、メモリ領域データのうちダーティページを共有ストレージ３０に記憶させてもよい。また、メモリ領域データ二重化部１１は、メモリ領域データを、自装置の情報であることを識別可能に、共有ストレージ３０に記憶させる。
【００４６】
以上の動作を、メモリ領域データ二重化部１１は、所定間隔毎に繰り返す。これにより、共有ストレージ３０には、各稼働系装置１０上で動作する稼働系仮想マシン１００毎にメモリ領域データが二重化される。
【００４７】
次に、フォールトトレラントシステム１の障害検出動作を図５に示す。
【００４８】
図５では、まず、障害検出装置４０の障害検出部４１は、各稼働系装置１０に障害が発生しているか否かを確認する（ステップＳ１１）。
【００４９】
ここで、障害が発生している稼働系装置１０がある場合、障害検出部４１は、その稼働系装置１０を表す情報を、待機系装置２０に通知する（ステップＳ１２）。
【００５０】
以上の動作を、障害検出部４１は、所定間隔毎に繰り返す。
【００５１】
次に、フォールトトレラントシステム１のフェイルオーバー動作を図６に示す。
【００５２】
図６では、まず、待機系装置２０は、障害検出装置４０から障害発生を通知されると（ステップＳ２１でＹ）、以下の動作を開始する。
【００５３】
ここでは、まず、メモリ領域データ取得部２１は、共有ストレージ３０から、障害が発生した稼働系仮想マシン１００について記憶されているメモリ領域データを取得する（ステップＳ２２）。そして、メモリ領域データ取得部２１は、取得したメモリ領域データを、自装置の仮想マシン用メモリ領域２０２に展開する。
【００５４】
次に、切替部２２は、自装置の仮想マシン用メモリ領域２０２を用いて動作するよう待機系仮想マシン２００を起動する（ステップＳ２３）。
【００５５】
次に、切替部２２は、稼働系仮想マシン１００の機能を待機系仮想マシン２００で継続するよう切り替えを行う（ステップＳ２４）。
【００５６】
以上で、フェイルオーバー動作の説明を終了する。
【００５７】
次に、本発明の第１の実施の形態の効果について述べる。
【００５８】
本発明の第１の実施の形態としてのフォールトトレラントシステムは、仮想マシンによって構成されるサーバシステムの規模が増大しても、待機系にかかるコストを抑えてフォールトトレランスを実現することができる。
【００５９】
その理由は、それぞれの稼働系装置のメモリ領域データ二重化部が、稼働系仮想マシンのメモリ領域データを、共有ストレージに記憶させることによって二重化するからである。そして、障害検出装置によって稼働系装置の障害が検出されると、待機系装置のメモリ領域データ取得部が、共有ストレージから、障害発生が検出された稼働系装置上の仮想マシンのメモリ領域データを取得する。そして、待機系装置の切替部が、取得したメモリ領域データを用いて待機系仮想マシンを起動し、障害が発生した稼働系仮想マシンの機能を待機系仮想マシンで継続するよう切り替えるからである。
【００６０】
このように、本実施の形態は、共有ストレージに各稼働系仮想マシンのメモリ領域データを記憶することによって二重化し、障害発生時に、該当する稼働系仮想マシンのメモリ領域データを待機系装置に転送して稼働系仮想マシンを起動し切替を行う。そのため、本実施の形態は、稼働系仮想マシンと同数の待機系仮想マシンを待機させておく必要がなく、少なくとも１台の待機系装置があればよい。また、待機系装置は、少なくとも１つの待機系仮想マシンを動作可能な性能があればよく、大量のリソースを必要としない。例えば、待機系装置は、稼働系装置と略同性能であればよい。その結果本実施の形態は、稼働系仮想マシン数に関わらず、待機系にかかるコストを抑えてフォールトトレランスを実現することができる。例えば、本実施の形態は、障害の発生がそれほど頻繁でなく、稼働系と待機系とが１対１の場合では待機系が待機状態となっていることが多いシステムにおいて、特に効果を奏する。
【００６１】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。本発明の第１の実施の形態では、本発明の障害検出部の一実施形態である障害検出装置が、稼働系装置の障害を検出して待機系装置に通知する構成について説明した。本実施の形態では、本発明の障害検出部の一実施形態を、稼働系装置および待機系装置に分散して配置する例について説明する。
【００６２】
なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００６３】
まず、本発明の第２の実施の形態としてのフォールトトレラントシステム２の構成を図７に示す。図７において、フォールトトレラントシステム２は、本発明の第１の実施の形態としてのフォールトトレラントシステム１に対して、稼働系装置１０に替えて稼働系装置５０と、待機系装置２０に替えて待機系装置６０とを備え、障害検出装置４０を含まない点が異なる。なお、フォールトトレラントシステム２のハードウェア構成は、図２に示した本発明の第１の実施の形態のハードウェア要素のうち、障害検出装置４０を除いたハードウェア要素によって構成可能である。ただし、フォールトトレラントシステム２を構成する各装置およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００６４】
稼働系装置５０は、本発明の第１の実施の形態としての稼働系装置１０と同一の構成に加えて、障害検出部５２を備える。
【００６５】
障害検出部５２は、自装置が正常に動作していることを確認する処理を行う。また、障害検出部５２は、自装置が正常に動作していることを確認した場合、正常動作していることを表す情報（確認情報）を、待機系装置６０に送信する。例えば、障害検出部５２は、自装置が共有メモリを更新したか否かを所定間隔毎に確認してもよい。この場合、障害検出部５２は、共有メモリの更新を確認した場合、自装置が正常に動作しているとして、その旨を表す確認情報を、待機系装置６０に送信する。
【００６６】
待機系装置６０は、本発明の第１の実施の形態としての待機系装置２０と同一の構成に加えて、障害検出部６３を備える。
【００６７】
障害検出部６３は、稼働系装置５０からの確認情報の受信状況に基づいて、稼働系装置５０における障害発生を検出する。例えば、障害検出部６３は、稼働系装置５０から定期的に送信されるはずの確認情報を、所定期間受信していない場合に、その稼働系装置５０において障害が発生したと判断してもよい。
【００６８】
以上のように構成されたフォールトトレラントシステム２の動作について、図面を参照して説明する。なお、フォールトトレラントシステム２のメモリ領域データ二重化動作およびフェイルオーバー動作については、図４および図６を参照して説明した本発明の第１の実施の形態の動作と同様であるため、本実施の形態における説明を省略する。ここでは、フォールトトレラントシステム２の障害検出動作を、図８に示す。なお、図８では、左図は稼働系装置５０の動作を示し、右図は待機系装置６０の動作を示す。また、左右を結ぶ破線の矢印は、データの流れを示すものとする。
【００６９】
図８において、まず、稼働系装置５０の障害検出部５２は、自装置が正常動作しているか否かを確認し、確認情報を待機系装置６０に送信する（ステップＳ３１）。
【００７０】
なお、稼働系装置５０が正常動作していない場合、このステップは実行されない。
【００７１】
そして、障害検出部５２は、所定間隔毎に、ステップＳ３１の動作を繰り返す。
【００７２】
次に、待機系装置６０の障害検出部６３は、稼働系装置５０から確認情報を受信する（ステップＳ３３）。
【００７３】
次に、障害検出部６３は、前回の確認情報の受信からの経過時間が所定時間以上となっている稼働系装置５０があるか否かを判断する（ステップＳ３４）。
【００７４】
ここで、前回の確認情報の受信からの経過時間が所定時間以上となっている稼働系装置５０がある場合、障害検出部６３は、その稼働系装置５０に障害が発生したと判断する。そして、障害検出部６３は、障害が発生した稼働系装置５０を、切替部２２に通知する（ステップＳ３５）。
【００７５】
以上で、フォールトトレラントシステム２は、障害検出動作を終了する。
【００７６】
そして、障害の発生を通知された切替部２２は、メモリ領域データ取得部２１を用いて、図６におけるステップＳ２２〜Ｓ２４を実行し、フェイルオーバーを実施する。
【００７７】
なお、本実施の形態において、各稼働系装置５０の障害検出部５２は、自装置が正常動作していることを表す確認情報を、待機系装置６０だけでなく、さらに他の稼働系装置５０に送信してもよい。この場合、障害検出部５２は、他の稼働系装置５０からの確認情報の受信状況に基づいて、他の稼働系装置５０における障害発生を検出する。例えば、障害検出部５２は、他の稼働系装置５０から定期的に送信されるはずの確認情報を、所定期間受信していない場合に、その稼働系装置５０において障害が発生したと判断してもよい。そして、この場合、障害検出部５２は、障害発生を検出した他の稼働系装置５０を表す情報を、待機系装置６０に送信すればよい。
【００７８】
また、さらに、本実施の形態において、待機系装置６０の障害検出部６３は、自装置が正常動作していることを表す確認情報を、稼働系装置５０に送信してもよい。この場合、稼働系装置５０の障害検出部５２は、待機系装置６０からの確認情報の受信状況に基づいて、待機系装置６０における障害発生を検出する。そして、待機系装置６０に障害発生を検出した場合、稼働系装置５０は、その旨を出力してもよい。あるいは、フォールトトレラントシステム２が複数の待機系装置６０を備える場合、稼働系装置５０の障害検出部５２は、障害発生の待機系装置６０を他の待機系装置６０に通知してもよい。これにより、障害が発生していない待機系装置６０が、フェイルオーバーを実施可能となる。
【００７９】
次に、本発明の第２の実施の形態の効果について述べる。
【００８０】
本発明の第２の実施の形態としてのフォールトトレラントシステムは、仮想サーバによって構成されるサーバシステムにおいて、待機系にかかるコストを抑えてフォールトトレランスを実現する際に、稼働系装置の障害をより確実に検出することができる。
【００８１】
その理由は、稼働系装置の障害検出部が、自装置の正常動作を確認すると確認情報を待機系装置に送信し、待機系装置の障害検出部が、稼働系装置からの確認情報の受信状況に基づいて、稼働系装置における障害発生を検出するからである。
【００８２】
また、さらには、稼働系装置の障害検出部が、他の稼働系装置との間で確認情報を送受信することにより他の稼働系装置における障害発生を検出する構成をとる場合の効果について説明する。この場合、本実施の形態は、稼働系装置の障害発生をさらに精度よく検出してフェイルオーバーを実施可能となる。なぜなら、待機系装置は、ある稼働系装置Ａからの確認情報の受信状況に加えて、他の稼働系装置Ｂからの稼働系装置Ａに関する障害発生の通知に基づいて、稼働系装置Ａの障害を検出可能となるからである。例えば、ある稼働系装置Ａが正常動作していても、待機系装置および稼働系装置Ａ間のネットワークに障害が発生する場合がある。このような場合、待機系装置は、稼働系装置Ａからの確認情報の受信状況に基づくだけでは、稼働系装置Ａに障害が発生していると判断することになる。このとき、稼働系装置Ｂからの稼働系装置Ａに関する障害発生の通知がなければ、待機系装置は、ネットワーク障害であると判断可能になるからである。
【００８３】
また、さらには、待機系装置の障害検出部が、自装置が正常動作していることを表す確認情報を稼働系装置に送信し、稼働系装置が待機系装置の障害発生を検出する構成をとる場合の効果について説明する。この場合、本実施の形態は、待機系装置における障害発生を利用者に報知することができる。また、本実施の形態は、複数の待機系装置のうち正常動作している待機系装置を用いて、より確実にフェイルオーバーを実施することができる。
【００８４】
このように、本実施の形態は、障害検出部を各稼働系装置および待機系装置に分散配置して互いに正常動作を確認することにより、より精度よく、より確実にフォールトトレランスを実現することができる。
【００８５】
（第３の実施の形態）
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。本発明の第１および第２の実施の形態では、共有ストレージ３０上にある稼働系仮想マシンのメモリ領域データを、待機系の仮想マシン用メモリ領域へ書き込む処理を、フェイルオーバーを発生させるタイミングで行っていた。このため、本発明の第１および第２の実施の形態は、通常時から待機系を動作させておくシステムに比べて、待機系にかかるコストを削減できる代わりに、フェイルオーバーで発生するダウンタイムが増加するという課題があった。本実施の形態では、このような第１および第２の実施の形態の課題に対する対策を施す例について説明する。
【００８６】
なお、本実施の形態の説明において参照する各図面において、本発明の第１および第２の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００８７】
まず、本発明の第３の実施の形態としてのフォールトトレラントシステム３の構成を図９に示す。図９において、フォールトトレラントシステム３は、本発明の第２の実施の形態としてのフォールトトレラントシステム２に対して、待機系装置６０に替えて待機系装置７０を備える点が異なる。また、待機系装置７０は、本発明の第２の実施の形態における待機系装置６０に対して、メモリ領域データ取得部２１に替えてメモリ領域データ取得部７１を備える点が異なる。なお、フォールトトレラントシステム３のハードウェア構成は、図２に示した本発明の第１の実施の形態のハードウェア要素のうち、障害検出装置４０を除いたハードウェア要素によって構成可能である。ただし、フォールトトレラントシステム３を構成する各装置およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００８８】
メモリ領域データ取得部７１は、稼働系装置５０に障害が発生していない通常時に、共有ストレージ３０に記憶される各稼働系仮想マシン１００のメモリ領域データについて、それぞれの一部を取得しておく。詳細には、メモリ領域データ取得部７１は、通常時において、所定タイミング毎に、各メモリ領域データの一部を取得し更新すればよい。また、メモリ領域データ取得部７１は、取得した各稼働系仮想マシン１００のメモリ領域データの一部を、自装置のメモリ２００２内の仮想マシン用メモリ領域２０２に書き込んでおく。つまり、仮想マシン用メモリ領域２０２には、各稼働系仮想マシン１００のメモリ領域データの一部が、保存され更新されることになる。各メモリ領域データのうち取得する一部分のサイズについては、あらかじめ定められていてもよい。例えば、各稼働系仮想マシン１００に割り当てられた仮想マシン用メモリ領域１０２のサイズが３ＧＢ（ギガバイト）である場合、メモリ領域データ取得部７１は、そのうち１ＧＢずつを所定タイミング毎に取得・更新してもよい。
【００８９】
また、例えば、メモリ領域データのうち取得する一部の内容は、更新頻度に基づき決定されてもよい。例えば、メモリ領域データ取得部７１は、共有ストレージ３０上に記憶されている稼働系仮想マシン１００のメモリ領域データのうち、更新頻度の少ない部分を優先して取得してもよい。具体的には、メモリ領域データ取得部７１は、共有ストレージ３０上に記憶されている稼働系仮想マシン１００のメモリ領域データのうち、所定の低頻度更新条件を満たすデータを取得してもよい。あるいは、メモリ領域データ取得部７１は、共有ストレージ３０上に記憶されている稼働系仮想マシン１００のメモリ領域データのうち、その更新頻度の低い方から順に所定サイズまでのデータを取得してもよい。
【００９０】
そして、メモリ領域データ取得部７１は、障害発生時には、障害発生が検出された稼働系装置５０において動作する稼働系仮想マシン１００のメモリ領域データの残りを、共有ストレージ３０から取得する。例えば、前述のように、各稼働系仮想マシン１００のメモリ領域データ３ＧＢのうち１ＧＢずつを仮想マシン用メモリ領域２０２にロードしていた場合について説明する。この場合、メモリ領域データ取得部７１は、仮想マシン用メモリ領域２０２にロードされているデータのうち、障害が発生していない稼働系仮想マシン１００のメモリ領域データを破棄する。そして、メモリ領域データ取得部７１は、障害が発生した稼働系仮想マシン１００のメモリ領域データの残り２ＧＢを、共有ストレージ３０から取得して仮想マシン用メモリ領域２０２にロードすればよい。
【００９１】
以上のように構成されたフォールトトレラントシステム３の動作について、図面を参照して説明する。なお、メモリ領域データ二重化動作については、図４を参照して説明した本発明の第１の実施の形態と同様であるため、本実施の形態における説明を省略する。また、障害検出動作については、図８を参照して説明した本発明の第２の実施の形態と同様であるため、本実施の形態における説明を省略する。
【００９２】
ここでは、フォールトトレラントシステム３のフェイルオーバー動作を図１０に示す。なお、待機系装置７０は、各稼働系装置５０について、以下の動作を実行するものとする。
【００９３】
図１０において、まず、メモリ領域データ取得部７１は、通常時において、共有ストレージ３０に記憶される稼働系仮想マシン１００のメモリ領域データについて、その一部を取得する（ステップＳ４１）。
【００９４】
次に、メモリ領域データ取得部７１は、障害検出部６３により障害発生が検出されたか否かを判断する（ステップ４２）。
【００９５】
ここで、この稼働系装置５０に障害が発生していなければ、メモリ領域データ取得部７１は、所定間隔経過後に、ステップＳ４１からの動作を繰り返す。
【００９６】
一方、この稼働系装置５０に障害が発生した場合、メモリ領域データ取得部７１は、次のように動作する。すなわち、メモリ領域データ取得部７１は、障害発生が検出されたこの稼働系装置５０において動作する稼働系仮想マシン１００のメモリ領域データの残りを、共有ストレージ３０から取得する（ステップＳ４４）。
【００９７】
以降、待機系装置７０は、ステップＳ２３〜Ｓ２４まで本発明の第１の実施の形態と同様に動作する。これにより、障害が発生した稼働系仮想マシン１００のメモリ領域データを用いて、待機系仮想マシン２００が起動される。そして、稼働系仮想マシン１００から待機系仮想マシン２００に運用が切り替えられる。
【００９８】
以上で、フェイルオーバー動作の説明を終了する。
【００９９】
次に、本発明の第３の実施の形態の効果について述べる。
【０１００】
本発明の第３の実施の形態としてのフォールトトレラントシステムは、仮想サーバによって構成されるサーバシステムにおいて、待機系にかかるコストを抑えてフォールトトレランスを実現しながら、フェイルオーバー時のダウンタイムを短縮することができる。
【０１０１】
その理由について説明する。本実施の形態では、それぞれの稼働系装置のメモリ領域データ二重化部が、稼働系仮想マシンのメモリ領域データを、共有ストレージに記憶させることによって二重化する。そして、待機系装置のメモリ領域データ取得部が、通常時に、共有ストレージから各稼働系仮想マシンのメモリ領域データの一部を取得する。そして、稼働系装置に障害が検出されると、メモリ領域データ取得部が、障害を発生した稼働系装置上の仮想マシンのメモリ領域データの残りを、共有ストレージから取得するからである。そして、待機系装置の切替部が、通常時に取得しておいた一部および障害発生時に取得した残りを合わせたメモリ領域データを用いて待機系仮想マシンを起動し、障害が発生した稼働系仮想マシンの機能を待機系仮想マシンで継続するよう切り替えるからである。
【０１０２】
このように、本実施の形態は、共有ストレージに各稼働系仮想マシンのメモリ領域データを二重化しておき、障害発生時に、該当する稼働系仮想マシンを起動し切替を行うので、本発明の第１の実施の形態と同様に、少なくとも１台の待機系装置があればよい。さらに、本実施の形態は、障害が発生した稼働系仮想マシンのメモリ領域データを、全て障害発生時に待機系装置に転送するのではなく、通常時に一部を転送しておき、障害発生時には残りを転送する。これにより、本実施の形態は、待機系にかかるコストを削減しながらも、障害発生時に転送が必要となるメモリ領域データ量を減らして、ダウンタイムを短縮することができる。
【０１０３】
さらに、本実施の形態は、待機系装置のメモリ領域データ取得部が、通常時に共有ストレージから取得するメモリ領域データの一部として、更新頻度の少ないものを優先する場合、待機系装置の通常時におけるメモリ領域データの取得負荷を減らすことができる。
【０１０４】
（第４の実施の形態）
次に、本発明の第４の実施の形態について図面を参照して詳細に説明する。本実施の形態では、本発明の第１および第２の実施の形態におけるフェイルオーバー時のダウンタイム増加という前述の課題に対して、本発明の第３の実施の形態とは異なる対策を施す例について説明する。
【０１０５】
なお、本実施の形態の説明において参照する各図面において、本発明の第１および第２の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【０１０６】
まず、本発明の第４の実施の形態としてのフォールトトレラントシステム４の構成を図１１に示す。図１１において、フォールトトレラントシステム４は、本発明の第２の実施の形態としてのフォールトトレラントシステム２に対して、待機系装置６０に替えて待機系装置８０を備える点が異なる。また、待機系装置８０は、本発明の第２の実施の形態における待機系装置６０に対して、メモリ領域データ取得部２１に替えてメモリ領域データ取得部８１と、障害検出部６３に替えて障害検出部８３とを備える点が異なる。なお、フォールトトレラントシステム４のハードウェア構成は、図２に示した本発明の第１の実施の形態のハードウェア要素のうち、障害検出装置４０を除いたハードウェア要素によって構成可能である。ただし、フォールトトレラントシステム４を構成する各装置およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【０１０７】
障害検出部８３は、稼働系装置５０における障害発生の検出に加えて、稼働系装置５０における障害発生の兆候を検出する。具体的には、障害検出部８３は、各稼働系装置５０について、前回の確認情報受信からの経過時間に基づいて、障害発生の兆候および障害発生を判断すればよい。
【０１０８】
例えば、障害検出部８３は、各稼働系装置５０について、前回の確認情報受信からの経過時間が第１閾値を超えると、障害発生の兆候を検出したと判断してもよい。この場合、障害検出部８３は、経過時間がさらに第２閾値を超えると、障害発生を検出したと判断してもよい。ただし、この場合、第２閾値は、第１閾値より大きい値である。また、第１閾値は、確認情報が送信されるよう定められた所定間隔より大きい値である。
【０１０９】
具体例として、稼働系装置５０が正常動作している場合は、その共有メモリが１００ミリ秒ごとに更新されるよう設計されている場合を想定する。この場合、稼働系装置５０の障害検出部５２は、自装置の共有メモリ領域が更新されているか否かを確認する処理を、１００ミリ秒ごとに実施し、確認情報を送信するよう構成されているとする。また、第１閾値として４００ミリ秒、第２閾値として８００ミリ秒が設定されているとする。この場合、障害検出部８３は、４００ミリ秒以上確認情報を受信していない稼働系装置５０に、障害発生の兆候を検出したと判断する。また、障害検出部８３は、さらに４００ミリ秒（合計８００ミリ秒）以上確認情報を受信していない稼働系装置５０に、障害発生を検出したと判断する。
【０１１０】
メモリ領域データ取得部８１は、障害検出部８３により障害発生の兆候が検出されると、次のように動作するよう構成される。すなわち、この場合、メモリ領域データ取得部８１は、障害発生の兆候が検出された稼働系装置５０において動作する稼働系仮想マシン１００について、共有ストレージ３０に記憶されるメモリ領域データの取得を開始する。以降、障害発生の兆候が検出された稼働系装置５０において動作する稼働系仮想マシン１００を、単に「障害発生の兆候が検出された稼働系仮想マシン１００」とも記載する。その後、障害発生の兆候が検出された稼働系装置５０についてさらに障害発生が検出されると、メモリ領域データ取得部８１は、次のように動作するよう構成される。すなわち、この場合、メモリ領域データ取得部８１は、障害発生が検出された稼働系仮想マシン１００のメモリ領域データの取得を、継続して完了する。
【０１１１】
なお、障害発生の兆候が検出された稼働系装置５０において障害発生が検出されなかった場合、メモリ領域データ取得部８１は、障害発生の兆候が検出された稼働系仮想マシン１００のメモリ領域データの取得を中止すればよい。例えば、メモリ領域データ取得部８１は、障害発生の兆候が検出されてから、前述の第２閾値となる経過時間を過ぎても障害発生が検出されない場合、該当する稼働系仮想マシン１００のメモリ領域データの取得を中止すればよい。
【０１１２】
以上のように構成されたフォールトトレラントシステム４の動作について、図面を参照して説明する。なお、メモリ領域データ二重化動作については、図４を参照して説明した本発明の第１の実施の形態と同様であるため、本実施の形態における説明を省略する。
【０１１３】
ここでは、フォールトトレラントシステム４の障害検出・フェイルオーバー動作を図１２に示す。なお、待機系装置８０は、各稼働系装置５０について、以下の動作を実行するものとする。
【０１１４】
図１２では、まず、待機系装置８０の障害検出部８３は、この稼働系装置５０について、障害発生の兆候があるか否かを確認する（ステップＳ５１）。例えば、前述のように、障害検出部８３は、前回の確認情報受信からの経過時間が第１閾値を超えたか否かを判断してもよい。
【０１１５】
ここで、障害発生の兆候があると判断した場合、メモリ領域データ取得部８１は、障害発生の兆候が検出された稼働系仮想マシン１００について、共有ストレージ３０からメモリ領域データの取得を開始する（ステップＳ５２）。
【０１１６】
次に、障害検出部８３は、障害発生の兆候があるこの稼働系装置５０について、障害が発生しているか否かを確認する（ステップＳ５３）。例えば、前述のように、障害検出部８３は、該当する稼働系装置５０について、前回の確認情報受信からの経過時間が第２閾値を超えたか否かを判断してもよい。
【０１１７】
ここで、障害が発生していると判断した場合、メモリ領域データ取得部８１は、該当する稼働系仮想マシン１００のメモリ領域データの取得を継続して完了する（ステップＳ６４）。
【０１１８】
なお、この稼働系装置５０において障害発生が検出されなかった場合、メモリ領域データ取得部８１は、該当する稼働系仮想マシン１００のメモリ領域データの取得を中止すればよい。
【０１１９】
以降、待機系装置６０は、ステップＳ２３〜Ｓ２４まで本発明の第１の実施の形態と同様に動作する。これにより、障害発生が検出された稼働系仮想マシン１００のメモリ領域データを用いて、待機系仮想マシン２００が起動される。そして、稼働系仮想マシン１００から待機系仮想マシン２００に運用が切り替えられる。
【０１２０】
以上で、フェイルオーバー動作の説明を終了する。
【０１２１】
次に、本発明の第４の実施の形態の効果について述べる。
【０１２２】
本発明の第４の実施の形態としてのフォールトトレラントシステムは、仮想マシンによって構成されるサーバシステムにおいて、待機系にかかるコストを抑えてフォールトトレランスを実現しながら、フェイルオーバー時のダウンタイムを短縮することができる。
【０１２３】
その理由について説明する。本実施の形態では、それぞれの稼働系装置のメモリ領域データ二重化部が、稼働系仮想マシンのメモリ領域データを、共有ストレージに記憶させることによって二重化する。そして、障害検出部が、各稼働系装置について障害の兆候を確認する。そして、障害発生の兆候が検出されると、待機系装置のメモリ領域データ取得部が、障害発生の兆候が検出された稼働系仮想マシンのメモリ領域データについて、共有ストレージからの取得を開始するからである。そして、さらに、障害発生の兆候が検出された待機系装置に障害発生が検出されると、該当するメモリ領域データの取得を継続して完了するからである。そして、切替部が、取得が完了したメモリ領域データを用いて待機系仮想マシンを起動し、障害発生装置上の稼働系仮想マシンの機能を待機系仮想マシンで継続するよう切り替えるからである。
【０１２４】
このように、本実施の形態は、共有ストレージに各稼働系仮想マシンのメモリ領域データを二重化しておき、障害発生時に、該当する稼働系仮想マシンを起動し切替を行うので、本発明の第１の実施の形態と同様に、少なくとも１台の待機系装置があればよい。さらに、本実施の形態は、障害発生が検出された稼働装置上の稼働系仮想マシンのメモリ領域データを、障害が発生してから全て待機系装置に転送するのではなく、障害発生の兆候を検出した時点で、その取得を開始する。そして、本実施の形態は、障害発生時には、該当するメモリ領域データの取得を継続して完了する。これにより、本実施の形態は、待機系装置にかかるコストを削減しながらも、障害発生してから転送が必要となるメモリ領域データ量を減らして、ダウンタイムを短縮することができる。
【０１２５】
（第５の実施の形態）
次に、本発明の第５の実施の形態について図面を参照して詳細に説明する。本実施の形態では、本発明の第３および第４の実施の形態を組み合わせる例について説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第３および第４の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【０１２６】
まず、本発明の第５の実施の形態としてのフォールトトレラントシステム５の構成を図１３に示す。図１３において、フォールトトレラントシステム５は、本発明の第４の実施の形態としてのフォールトトレラントシステム４に対して、待機系装置８０に替えて待機系装置９０を備える点が異なる。待機系装置９０は、本発明の第４の実施の形態における待機系装置８０に対して、メモリ領域データ取得部８１に替えてメモリ領域データ取得部９１を備える点が異なる。なお、フォールトトレラントシステム５のハードウェア構成は、図２に示した本発明の第１の実施の形態のハードウェア要素のうち、障害検出装置４０を除いたハードウェア要素によって構成可能である。ただし、フォールトトレラントシステム５を構成する各装置およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【０１２７】
メモリ領域データ取得部９１は、通常時には、本発明の第３の実施の形態におけるメモリ領域データ取得部７１と同様に構成される。つまり、メモリ領域データ取得部９１は、稼働系装置５０に障害が発生していない通常時において、共有ストレージ３０に記憶される各稼働系仮想マシン１００のメモリ領域データについて、それぞれの一部を取得しておく。そして、メモリ領域データ取得部９１は、取得した各稼働系仮想マシン１００のメモリ領域データを、自装置のメモリ２００２内の仮想マシン用メモリ領域２０２に書き込んでおく。
【０１２８】
また、メモリ領域データ取得部９１は、障害検出部８３により障害発生の兆候が検出されると、次のように動作するよう構成される。この場合、メモリ領域データ取得部９１は、障害発生の兆候が検出された稼働系仮想マシン１００について、共有ストレージ３０に記憶されるメモリ領域データのうち、通常時に取得されていない残りのデータの取得を開始する。その後、障害発生の兆候が検出された稼働系装置５０についてさらに障害発生が検出されると、メモリ領域データ取得部９１は、メモリ領域データの取得を継続し完了すればよい。
【０１２９】
以上のように構成されたフォールトトレラントシステム５の動作について、図面を参照して説明する。なお、フォールトトレラントシステム５のメモリ領域データ二重化動作については、図４を参照して説明した本発明の第１の実施の形態と同様であるため、本実施の形態における説明を省略する。ここでは、フォールトトレラントシステム５の障害検出・フェイルオーバー動作を図１４に示す。なお、待機系装置９０は、各稼働系装置５０について、以下の動作を実行するものとする。
【０１３０】
図１４では、まず、メモリ領域データ取得部９１は、この稼働系装置５０上で動作する稼働系仮想マシン１００について、共有ストレージ３０に記憶されるメモリ領域データの一部を取得する（ステップＳ４１）。
【０１３１】
次に、メモリ領域データ取得部９１は、この稼働系装置５０において、障害発生の兆候が検出されたか否かを判断する（ステップＳ５１）。
【０１３２】
ここで、障害発生の兆候が検出されていなければ、メモリ領域データ取得部９１は、所定間隔経過後に、ステップＳ４１からの動作を繰り返す。
【０１３３】
一方、この稼働系装置５０に障害発生の兆候が検出された場合、メモリ領域データ取得部９１は、次のように動作する。すなわち、メモリ領域データ取得部９１は、障害発生の兆候が検出された稼働系仮想マシン１００のメモリ領域データのうち、通常時に取得されていない残りについて、共有ストレージ３０からの取得を開始する（ステップＳ６１）。
【０１３４】
以降、待機系装置９０は、本発明の第４の実施の形態としての待機系装置８０と同様に、ステップＳ５３、Ｓ５４、Ｓ２３、Ｓ２４を実行する。これにより、待機系装置９０は、障害発生の兆候が検出された稼働系装置５０についてさらに障害発生が検出された場合、該当する稼働系仮想マシン１００のメモリ領域データの取得を継続して完了する。そして、障害発生が検出された稼働系仮想マシン１００のメモリ領域データを用いて、待機系仮想マシン２００が起動される。そして、稼働系仮想マシン１００から待機系仮想マシン２００に運用が切り替えられる。
【０１３５】
以上で、フェイルオーバー動作の説明を終了する。
【０１３６】
次に、本発明の第５の実施の形態の効果について述べる。
【０１３７】
本発明の第５の実施の形態としてのフォールトトレラントシステムは、仮想マシンによって構成されるサーバシステムにおいて、待機系にかかるコストを抑えてフォールトトレランスを実現しながら、フェイルオーバー時のダウンタイムをより短縮することができる。
【０１３８】
その理由について説明する。本実施の形態では、待機系装置のメモリ領域データ取得部が、通常時に各稼働系装置のメモリ領域データの一部を取得しておく。そして、メモリ領域データ取得部が、障害発生の兆候の検出時に、兆候が検出された稼働系仮想マシンについて、通常時に取得されていなかったメモリ領域データの残りの取得を開始する。そして、障害発生の兆候が検出された稼働系装置における障害発生が検出されると、メモリ領域データ取得部が、メモリ領域データの残りの取得を継続して完了し、切替部が、待機系仮想マシンを起動して運用の切り替えを行うからである。
【０１３９】
このように、本実施の形態は、本発明の第３および第４の実施の形態におけるダウンタイム短縮のための構成を組み合わせることにより、さらに、ダウンタイムを短縮することができる。
【０１４０】
なお、上述した本発明の第４および第５の実施の形態において、障害検出部は、障害発生の兆候から障害発生までを第１閾値および第２閾値の２段階で検出する例について説明した。これに限らず、障害検出部は、障害発生の兆候から障害発生までを３段階以上に分けて検出してもよい。
【０１４１】
また、上述した本発明の第２から第５の実施の形態において、各稼働系装置の障害検出部が、共有メモリの更新の有無を確認することによって正常動作しているか否かを確認する例について説明した。これに限らず、各実施の形態における障害検出部は、稼働系装置の障害を検出する各種公知の技術を採用しても実現可能である。
【０１４２】
また、上述した本発明の各実施の形態において、フォールトトレラントシステムが、複数台の稼働系装置に対して１台の待機系装置を有する例を中心に説明した。これに限らず、フォールトトレラントシステムは、Ｎ台（Ｎ＞１）の待機系装置を備えていてもよい。この場合、各実施の形態は、Ｎ台の稼働系装置に同時に障害が発生した場合にも対応可能となる。具体的には、この場合、各待機系装置は、障害発生装置上の稼働系仮想マシンのそれぞれに対するフェイルオーバーを実施可能となる。このように構成した場合、各実施の形態は、複数の稼働系装置で同時に発生する障害にも対応することができ、信頼性を向上させる。なお、この場合であっても、各実施の形態は、稼働系仮想マシンと同数の待機系仮想マシンを必要とせず、稼働系仮想マシンより少ない数の待機系仮想マシンを動作させることが可能であればよい。したがって、この場合であっても、各実施の形態は、待機系にかかるコストを削減できる。
【０１４３】
また、上述した本発明の各実施の形態において、稼働系装置および待機系装置は、それぞれ１つずつの仮想マシンを動作させる例を中心に説明した。これに限らず、各実施の形態は、複数の仮想マシンを動作させることが可能な稼働系装置または待機系装置を含んでいてもよい。このような場合であっても、各実施の形態は、稼働系仮想マシンと同数の待機系仮想マシンを必要とせず、稼働系仮想マシンより少ない数の待機系仮想マシンを動作させることが可能であればよい。したがって、この場合であっても、各実施の形態は、待機系にかかるコストを削減できる。
【０１４４】
また、上述した本発明の各実施の形態において、稼働系装置のローカルデータが共有ストレージに記憶され、フェイルオーバー時には、待機系仮想マシンが、共有ストレージ上で稼働系仮想マシンが用いていたローカルデータを引き継ぐものとして説明した。これに限らず、各稼働系仮想マシンのローカルデータは、待機系仮想マシンによって引き継ぎ可能な場所に記憶されていればよい。例えば、待機系装置が、各稼働系仮想マシンが利用するローカルデータを全て記憶可能な容量のストレージを有していてもよい。この場合、待機系装置のストレージを、ｄｒｄｂ（Distributed Replicated Block Device）等の分散ストレージシステムとして機能させてもよい。これにより、稼働系仮想マシンは、そのローカルデータを待機系装置のストレージに記憶させることが可能となる。そして、この場合、フェイルオーバー時には、待機系仮想マシンが、自身が動作する待機系装置のストレージにおいて該当する稼働系仮想マシンのローカルデータを引き継げばよい。
【０１４５】
また、上述した本発明の各実施の形態において、稼働系装置における障害発生によりフェイルオーバーを実施した後は、待機系装置が、本発明の稼働系装置として動作してもよい。また、この場合、障害から復旧した稼働系装置は、本発明の待機系装置として動作してもよい。このような場合、各実施の形態の稼働系装置は、待機系装置の機能ブロックをさらに有していればよい。また、各実施の形態の待機系装置は、稼働系装置の機能ブロックをさらに有していればよい。また、この場合、フォールトトレラントシステムに含まれる装置のうちいずれの装置が待機系装置となるかを表す情報は、共有ストレージ上に保存されていてもよい。
【０１４６】
また、上述した本発明の各実施の形態において、フォールトトレラントシステムを構成する各装置の各機能ブロックが、記憶装置またはＲＯＭに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【０１４７】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した各装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータの記憶装置（記憶媒体）に格納しておいてもよい。そして、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【０１４８】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【０１４９】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【符号の説明】
【０１５０】
１、２、３、４、５    フォールトトレラントシステム
１０、５０    稼働系装置
１１    メモリ領域データ二重化部
２０、６０、７０、８０、９０    待機系装置
２１、７１、８１、９１    メモリ領域データ取得部
２２    切替部
３０    共有ストレージ
４０    障害検出装置
４１  障害検出部
５２、６３、８３    障害検出部
１００    稼働系仮想マシン
２００    待機系仮想マシン
１０１、２０１    ハイパーバイザー
１０２、２０２    仮想マシン用メモリ領域
１００１、２００１、４００１    ＣＰＵ
１００２、２００２、４００２    メモリ
１００３、２００３、４００３    ローカルストレージ
１００４、２００４、４００４    ネットワークインタフェース
【図１】
0006464704.tif 000002
【図２】
0006464704.tif 000003
【図３】
0006464704.tif 000004
【図４】
0006464704.tif 000005
【図５】
0006464704.tif 000006
【図６】
0006464704.tif 000007
【図７】
0006464704.tif 000008
【図８】
0006464704.tif 000009
【図９】
0006464704.tif 000010
【図１０】
0006464704.tif 000011
【図１１】
0006464704.tif 000012
【図１２】
0006464704.tif 000013
【図１３】
0006464704.tif 000014
【図１４】
0006464704.tif 000015