(57)【要約】【課題】現用系の仮想計算機（ＶＭ）と待機系のＶＭとの同期を開始するためには、全メモリ内容を含む初回スナップショットのコピーが必要になること。【解決手段】現用系のＶＭが稼働する第１の計算機と、待機系のＶＭが稼働する第２の計算機とを有する。第１の計算機は、現用系のＶＭの全メモリを含む初回スナップショットを第２の計算機に送信して新たな待機系のＶＭを生成する。第１の計算機は、自計算機上のＶＭを待機系に切り換えて第２の計算機に対して待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を送信し、上記初回スナップショットを第２の計算機上の現用系のＶＭの初回のスナップショットとして認識し、以後、第２の計算機から受信するスナップショットに基づいて自計算機の待機系のＶＭの状態を更新する。【選択図】図１３
2014139706.tif 000002
【特許請求の範囲】
【請求項１】
現用系の仮想計算機が稼働する第１の計算機と、
待機系の仮想計算機が稼働する第２の計算機と
を有し、
前記第１の計算機は、前記現用系の仮想計算機の全メモリを含む初回スナップショットを前記第２の計算機に送信して新たな前記待機系の仮想計算機を生成し、自計算機上の前記仮想計算機を待機系に切り換えて前記第２の計算機に対して前記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を送信し、自計算機上の前記待機系の仮想計算機の状態を前記第２の計算機上の前記現用系の仮想計算機の初回のスナップショットとして認識し、以後、前記第２の計算機から受信するスナップショットに基づいて自計算機の前記待機系の仮想計算機の状態を更新する、
フォールトトレラントシステム。
【請求項２】
前記第１の計算機は、
前記現用系の仮想計算機の初回スナップショットを取得して前記第２の計算機へ送信し、以後、第１のチェックポイントが到来する毎に、前記現用系の前記仮想計算機のスナップショットを取得して前記第２の計算機へ送信する第１のスナップショット管理手段
を有し、
前記第２の計算機は、
前記第１の計算機から受信した前記現用系の仮想計算機の初回スナップショットに基づいて、自計算機上に待機系の仮想計算機を新たに生成し、生成完了の通知を前記第１の計算機へ送信する第２のスナップショット管理手段
を有し、
前記第１のスナップショット管理手段は、前記生成完了の通知を前記第２の計算機から受信すると、前記第１のチェックポイントで取得された前記スナップショットがあれば当該スナップショットを前記第２の計算機へ送信した後、切り換え準備完了の通知を前記第２の計算機から受信するのを検出し、
前記第２のスナップショット管理手段は、前記生成完了の通知の前記送信後、前記第１のチェックポイントで取得された前記スナップショットを受信していれば当該スナップショットに基づいて自計算機の前記待機系の仮想計算機の状態を前記現用系の仮想計算機の状態に一致させた後に前記切り換え準備完了の通知を前記第１の計算機へ通知し、現用系への切り換え指示を前記第１の計算機から受信するのを検出し、
前記第１のスナップショット管理手段は、前記切り換え準備完了の通知を前記第２の計算機から受信すると、前記現用系の仮想計算機を待機系に切り換えて前記第２の計算機に対して前記現用系への切り換え指示を送信し、
前記第２のスナップショット管理手段は、前記現用系への切り換え指示を前記第１の計算機から受信すると、前記待機系の仮想計算機を現用系に切り換え、以後、第２のチェックポイントが到来する毎に、前記現用系の仮想計算機のスナップショットを取得して前記第１の計算機へ送信し、
前記第１のスナップショット管理手段は、前記第１の計算機の前記待機系の仮想計算機の状態を前記第２の計算機の前記現用系の仮想計算機の初回スナップショットとして認識し、以後、前記第２の計算機から受信した前記現用系の仮想計算機のスナップショットに基づいて、前記第１の計算機の前記待機系の仮想計算機の状態を前記現用系の仮想計算機の状態に一致させる
請求項１に記載のフォールトトレラントシステム。
【請求項３】
前記第２の計算機が複数存在する場合、前記第１の計算機の前記第１のスナップショット管理手段は、前記第２の計算機の負荷率を選択の基準として、前記複数の第２の計算機の中から一の前記第２の計算機を選択する
請求項２に記載のフォールトトレラントシステム。
【請求項４】
前記第１のスナップショット管理手段は、前記複数の第２の計算機の中から負荷率が最小の一の前記第２の計算機を選択する
請求項３に記載のフォールトトレラントシステム。
【請求項５】
前記第１のスナップショット管理手段は、前記複数の第２の計算機の中から負荷率が閾値以下の一の前記第２の計算機を選択する
請求項３に記載のフォールトトレラントシステム。
【請求項６】
それぞれ現用系の仮想計算機が稼働する複数の第３の計算機を有し、
前記第１の計算機は、前記複数の第３の計算機の前記現用系の仮想計算機に対応する複数の待機系の仮想計算機を有し、前記第３の計算機の障害時、前記稼働系の仮想計算機を現用系に切り換え、前記現用系の仮想計算機の全メモリを含む初回スナップショットを前記第２の計算機に送信して新たな待機系の仮想計算機を生成する前記処理では、該切り換え後の現用系の仮想計算機を対象として、全メモリを含む初回スナップショットの前記第２の計算機への送信による新たな待機系の仮想計算機の生成を行う
請求項１乃至５の何れかに記載のフォールトトレラントシステム。
【請求項７】
１つ以上の待機系の仮想計算機が稼働する第２の計算機に接続され、
現用系の仮想計算機と、
スナップショット管理手段と
を有し、
前記スナップショット管理手段は、前記現用系の仮想計算機の全メモリを含む初回スナップショットを前記第２の計算機に送信して新たな前記待機系の仮想計算機を生成し、自計算機上の前記仮想計算機を待機系に切り換えて前記第２の計算機に対して前記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を送信し、自計算機上の前記待機系の仮想計算機の状態を前記第２の計算機上の前記現用系の仮想計算機の初回のスナップショットとして認識し、以後、前記第２の計算機から受信するスナップショットに基づいて自計算機の前記待機系の仮想計算機の状態を更新する、
計算機。
【請求項８】
前記スナップショット管理手段は、
前記現用系の仮想計算機の初回スナップショットを取得して前記第２の計算機へ送信し、以後、第１のチェックポイントが到来する毎に、前記現用系の前記仮想計算機のスナップショットを取得して前記第２の計算機へ送信し、
前記生成完了の通知を前記第２の計算機から受信すると、前記第１のチェックポイントで取得された前記スナップショットがあれば当該スナップショットを前記第２の計算機へ送信した後、切り換え準備完了の通知を前記第２の計算機から受信するのを検出し、
前記切り換え準備完了の通知を前記第２の計算機から受信すると、前記現用系の仮想計算機を待機系に切り換えて前記第２の計算機に対して前記現用系への切り換え指示を送信し、
前記第１の計算機の前記待機系の仮想計算機の状態を前記第２の計算機の前記現用系の仮想計算機の初回スナップショットとして認識し、以後、前記第２の計算機から受信した前記現用系の仮想計算機のスナップショットに基づいて、前記第１の計算機の前記待機系の仮想計算機の状態を前記現用系の仮想計算機の状態に一致させる
請求項７に記載の計算機。
【請求項９】
前記第２の計算機が複数存在する場合、前記スナップショット管理手段は、前記第２の計算機の負荷率を選択の基準として、前記複数の第２の計算機の中から一の前記第２の計算機を選択する
請求項７または８に記載の計算機。
【請求項１０】
前記スナップショット管理手段は、前記複数の第２の計算機の中から負荷率が最小の一の前記第２の計算機を選択する
請求項９に記載の計算機。
【請求項１１】
前記スナップショット管理手段は、前記複数の第２の計算機の中から負荷率が閾値以下の一の前記第２の計算機を選択する
請求項９に記載の計算機。
【請求項１２】
前記第１の計算機は、それぞれ現用系の仮想計算機が稼働する複数の第３の計算機における前記現用系の仮想計算機に対応する複数の待機系の仮想計算機を有し、
前記スナップショット管理手段は、前記第３の計算機の障害時、前記稼働系の仮想計算機を現用系に切り換え、前記現用系の仮想計算機の全メモリを含む初回スナップショットを前記第２の計算機に送信して新たな待機系の仮想計算機を生成する前記処理では、該切り換え後の現用系の仮想計算機を対象として、全メモリを含む初回スナップショットの前記第２の計算機への送信による新たな待機系の仮想計算機の生成を行う
請求項７乃至１１の何れかに記載の計算機。
【請求項１３】
現用系の仮想計算機が稼働する第１の計算機に接続され、
待機系の仮想計算機と、
スナップショット管理手段と
を有し、
前記スナップショット管理手段は、前記現用系の仮想計算機の全メモリを含む初回スナップショットを前記第１の計算機から受信して新たな前記待機系の仮想計算機を生成し、前記第１の計算機上の前記仮想計算機が待機系に切り換えられた後に前記第１の計算機から送信される、前記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を受信すると、前記待機系の仮想計算機を前記現用系の仮想計算機へ切り換え、該切り換え後の前記現用系の仮想計算機の初回のスナップショットを前記第１の計算機へ送信する処理を省略し、以後、第２のチェックポイントが到来する毎に、前記現用系の前記仮想計算機のスナップショットを取得して前記第１の計算機へ送信する
計算機。
【請求項１４】
前記チェックポイント管理手段は、
前記第１の計算機から受信した前記現用系の仮想計算機の初回スナップショットに基づいて、自計算機上に待機系の仮想計算機を新たに生成し、生成完了の通知を前記第１の計算機へ送信し、
前記生成完了の通知の前記送信後、前記第１の計算機から第１のチェックポイントで取得されたスナップショットを受信していれば当該スナップショットに基づいて自計算機の前記待機系の仮想計算機の状態を前記現用系の仮想計算機の状態に一致させた後に切り換え準備完了の通知を前記第１の計算機へ通知し、現用系への切り換え指示を前記第１の計算機から受信するのを検出し、
前記現用系への切り換え指示を前記第１の計算機から受信すると、前記待機系の仮想計算機を現用系に切り換え、該切り換え後の前記現用系の仮想計算機の初回のスナップショットを前記第１の計算機へ送信する処理を省略し、以後、前記第２のチェックポイントが到来する毎に、前記現用系の仮想計算機のスナップショットを取得して前記第１の計算機へ送信する
請求項１３に記載の計算機。
【請求項１５】
現用系の仮想計算機が稼働する第１の計算機と、待機系の仮想計算機が稼働する第２の計算機とを有するフォールトトレラントシステムの制御方法であって、
前記第１の計算機が、前記現用系の仮想計算機の全メモリを含む初回スナップショットを前記第２の計算機に送信して新たな前記待機系の仮想計算機を生成し、自計算機上の前記仮想計算機を待機系に切り換えて前記第２の計算機に対して前記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を送信し、自計算機上の前記待機系の仮想計算機の状態を前記第２の計算機上の前記現用系の仮想計算機の初回のスナップショットとして認識し、以後、前記第２の計算機から受信するスナップショットに基づいて自計算機の前記待機系の仮想計算機の状態を更新する、
フォールトトレラントシステム制御方法。
【請求項１６】
１つ以上の待機系の仮想計算機が稼働する第２の計算機に接続された計算機を、
現用系の仮想計算機と、
前記現用系の仮想計算機の全メモリを含む初回スナップショットを前記第２の計算機に送信して新たな待機系の仮想計算機を生成し、自計算機上の前記仮想計算機を待機系に切り換えて前記第２の計算機に対して前記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を送信し、自計算機上の前記待機系の仮想計算機の状態を前記第２の計算機上の前記現用系の仮想計算機の初回のスナップショットとして認識し、以後、前記第２の計算機から受信するスナップショットに基づいて自計算機の前記待機系の仮想計算機の状態を更新するスナップショット管理手段と
して機能させるためのプログラム。
【請求項１７】
現用系の仮想計算機が稼働する第１の計算機に接続された計算機を、
待機系の仮想計算機と、
前記現用系の仮想計算機の全メモリを含む初回スナップショットを前記第１の計算機から受信して新たな前記待機系の仮想計算機を生成し、前記第１の計算機上の前記仮想計算機が待機系に切り換えられた後に前記第１の計算機から送信される、前記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を受信すると、前記待機系の仮想計算機を前記現用系の仮想計算機へ切り換え、該切り換え後の前記現用系の仮想計算機の初回のスナップショットを前記第１の計算機へ送信する処理を省略し、以後、第２のチェックポイントが到来する毎に、前記現用系の前記仮想計算機のスナップショットを取得して前記第１の計算機へ送信するスナップショット管理手段と
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フォールトトレラントシステム、その制御方法、計算機、およびプログラムに関する。
【背景技術】
【０００２】
可用性を高めた計算機システムとして、ホットスタンバイ構成のＨＡクラスタ（High availability cluster）、ＦＴサーバ（Fault Tolerant server）が知られている。
【０００３】
ＨＡクラスタは、複数台のサーバを相互接続し、システムの冗長化を図る。現在稼動している（現用系）サーバに障害が発生した場合、待機系として用意されていた別のサーバが処理を引き継ぐため、クラスタ全体としては異常なく稼動し続けているように見える。主な方式として、アクティブスタンバイ方式とレプリケーション方式とがある。
【０００４】
アクティブスタンバイ方式のＨＡクラスタでは、現用系と待機系でストレージを共有する。現用系は、待機系を同期させるのに必要な、アプリケーションに依存した情報を共有ストレージに書き、待機系はフェイルオーバー時にこの情報を用いてリカバリ処理を行うため、アプリケーションやＯＳから見て、透過的に可用性を得ることができない。また、フェイルオーバーには時間を要し、その間はサービスが提供できなくなる。
【０００５】
レプリケーション方式のＨＡクラスタでは、現用系と待機系が個別にストレージを持ち、現用系のアプリケーションに到着したリクエストを待機系にも転送することで、待機系に現用系と同じ状態遷移をさせる。一般に、複数の系の状態を一致させることを、同期をとると言う。現用系に障害が発生して停止した場合、待機系のアプリケーションの状態は現用系と同期しているため、現用系を切り離して処理を待機系に切り換えてサービスを継続することができる。しかし、クラスタリングするアプリケーション毎にレプリケーションの仕組みを追加しなければならないため、アプリケーションやＯＳから見て、透過的に可用性を得ることができない。
【０００６】
このようにＨＡクラスタでは、アプリケーションやＯＳに可用性を意識した仕組みを追加しなければならない。これに対して、ＦＴサーバでは、アプリケーションやＯＳが特別な処理を必要としないで、透過的にサービスを継続することができる。ＦＴサーバを実現する方式は、ハードウェア方式とソフトウェア方式とに大別される。
【０００７】
ハードウェア方式のＦＴサーバは、ＣＰＵ、メモリ、ストレージなどの主要なハードウェアコンポーネントを冗長化し、あるコンポーネントに障害が発生した場合は、そのコンポーネントを切り離して動作を継続する。ＣＰＵやメモリ、チップセットを含むモジュールをＣＰＵサブシステム、各種ＩＯデバイスを含むモジュールをＩＯサブシステムと定義すると、コンポーネントを二重化する一般的なＦＴサーバではＣＰＵサブシステムとＩＯサブシステムとで二重化の方式が異なる。ＣＰＵサブシステムは、クロック単位でハードウェアの動作を完全に一致させる。これをロックステップと呼ぶ。二重化されたＣＰＵサブシステムは両方とも完全に同じ動作をしているので、障害発生時はその障害が発生したＣＰＵサブシステムを論理的に切り離し、正常なＣＰＵサブシステムに瞬時に処理を切り換えて動作を継続させる。ＩＯサブシステムは、ロックステップこそしていないが、障害が発生した場合、直ちに他方のＩＯサブシステムに切り換える。ハードウェア方式のＦＴサーバは、極めて高い可用性を実現することができる。しかし、特殊なハードウェアで構成されるため、同程度の性能を持つ一般サーバと比較して導入コストがかかる。
【０００８】
一方、ソフトウェア方式のＦＴサーバは、物理計算機上で１つまたは複数のＯＳを動作させることを可能とした仮想化技術を使用する。物理計算機上に仮想的に構築される計算機を、仮想計算機あるいは仮想マシンと呼ぶ。ソフトウェア方式のＦＴサーバでは、物理計算機を冗長化し、現用系の仮想計算機と待機系の仮想計算機とをそれぞれ異なる物理計算機上に配置する。現用系の仮想計算機が属する物理計算機でハードウェアの故障等の障害が発生した場合、その仮想計算機が行っている処理を他の物理計算機上の待機系の仮想計算機で継続して実行する。アプリケーションやＯＳから見て、透過的にサービスを継続するために、ソフトウェア方式のＦＴサーバでは、現用系と待機系の仮想計算機の状態を一致させる処理、すなわち同期を行う。
【０００９】
現用系と待機系の仮想計算機を同期させる方式には、主に仮想ロックステップ方式とチェックポイント方式の２つの方式がある。仮想ロックステップ方式は、現用系の仮想計算機に対する入力を、待機系の仮想計算機に対しても与えることにより、待機系の仮想計算機の状態を現用系の仮想計算機と同じように遷移させる。仮想計算機間の同期に必要なデータ量が少なくて済む利点がある反面、現用系と待機系とでＣＰＵの種類が異なると動作しないといった課題がある。
【００１０】
他方、チェックポイント方式は、定期的に、現用系の仮想計算機のイメージ（ＣＰＵ、メモリ、ストレージなど）を待機系に送り、待機系の仮想計算機の状態を現用系の仮想計算機の状態に一致させる。チェックポイント方式は、仮想ロックステップ方式と比較して実装が容易であり、ＣＰＵの特定の機能に依存しないため、幅広い製品に実装できる利点がある。その反面、仮想計算機のイメージはデータ量が多いため、仮想ロックステップ方式よりも１回の同期にかかるオーバーヘッドが大きいという課題がある。
【００１１】
この課題を解決するために、前回のチェックポイント以降に更新された現用系の仮想計算機のイメージのみを待機系に送ることが本発明に関連する第１の関連技術として提案されている（例えば非特許文献１参照）。この第１の関連技術では、チェックポイントが到来すると、現用系の仮想計算機を一旦停止させることでメインメモリへの更新を遮断し、前回のチェックポイント以降に更新のあったメインメモリのページであるダーティページの全てを、メインメモリに設けたバッファにローカルコピーする。そして、ローカルコピーを完了すると、停止させていた現用系の仮想計算機を再起動し、並行して、上記コピーされたダーティページを上記バッファから待機系へと転送する。
【００１２】
また、複数の現用系の物理計算機と複数の待機系の物理計算機とをスイッチを介して共通のディスクアレイ装置に接続し、複数の現用系の物理計算機上で動作している現用系の仮想計算機のスナップショットを、上記スイッチを介して上記ディスクアレイ装置に定期的に保存することが、本発明に関連する第２の関連技術として提案されている（例えば特許文献１参照）。そして、この第２の関連技術では、或る現用系の物理計算機の障害時、複数の待機系の物理計算機の何れかを上記スイッチを介して上記ディスクアレイ装置に接続し、上記ディスクアレイ装置に保存されている現用系の仮想計算機の直近のスナップショットを使用して、待機系の物理計算機に新たに仮想計算機を生成し、この生成した仮想計算機によって上記障害に遭遇した現用系の仮想計算機の処理を引継ぐようにしている。
【００１３】
また、複数の現用系の物理計算機に対して１台の待機系の物理計算機と１台以上の他の物理計算機とを有するソフトウェア方式のＦＴサーバが、本発明に関連する第３の関連技術として提案されている（例えば非特許文献２参照、特に図3.2-1、図3.2-30）。この第３の関連技術では、複数の現用系の物理計算機上の複数の現用系の仮想計算機の状態と、上記１台の待機系の物理計算機上に存在する対応する待機系の仮想計算機の状態とを、現用系でイベントが発生したことを契機に一致させるという方法で同期させる。そして、何れかの現用系の物理計算機の障害時、まず、待機系の物理計算機上の対応する待機系の仮想計算機を使ってフェイルオーバする。次いで、待機系の物理計算機から他の物理計算機（非特許文献２では予備系と称している）に高速マイグレーションという手法を用いて、現用系の仮想計算機を移動する。
【００１４】
本発明に関連する第２の関連技術によれば、現用系の物理計算機に対して待機系の物理計算機を１対１に備えておく必要はない。しかしながら、複数の現用系の物理計算機上で稼働する仮想計算機のスナップショットを共有記憶装置に定期的に保存し、何れかの現用系の物理計算機の障害時に共有記憶装置に保存されたスナップショットを使用して待機系の物理計算機に仮想計算機を生成し、この生成した仮想計算機によって上記障害に遭遇した物理計算機上の仮想計算機が行っていた処理を引継ぐ方法では、サービス中断時間が長くなる。その理由は、スナップショットを使用して待機系の物理計算機に新たに仮想計算機を生成するためには全メモリのコピーを行う必要があり、一般に長い時間を必要とするためである。
【００１５】
これに対して本発明に関連する第３の関連技術によれば、何れかの現用系の物理計算機に障害が発生した場合、待機系の物理計算機上の対応する待機系の仮想計算機を用いてフェイルオーバするため、サービス中断時間を短縮することができる。また本発明に関連する第３の関連技術によれば、上記フェイルオーバ後、直ちに待機系の物理計算機から他の物理計算機に現用系の仮想計算機を移動させることによって、待機系の物理計算機の負荷を軽減している。
【先行技術文献】
【非特許文献】
【００１６】
【非特許文献１】Brendan Cully、外５名、“Remus: HighAvailability via Asynchronous Virtual Machine Replication”、[online]、[平成２４年９月５日検索]、インターネット〈URL:http://www.cs.ubc.ca/~andy/papers/remus-nsdi-final.pdf〉
【非特許文献２】「経済産業省  平成２２年度  産業技術研究開発委託費（次世代高信頼・省エネ型IT 基盤技術開発事業）クラウドコンピューティングのアカウンタビリティを向上させる研究・開発事業  事業報告書」、平成２３年３月３１日、エヌ・ティ・ティ・コミュニケーションズ株式会社。
【特許文献】
【００１７】
【特許文献１】特開２００７−１８３７０１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
ところで、可用性を維持するためには、他の物理計算機に移動させた現用系の仮想計算機に対して新たに同期先となる待機系の仮想計算機を設定し、現用系の仮想計算機と待機系の仮想計算機との同期を開始しなければならない。例えば、現用系の仮想計算機が稼働する第１の計算機と、待機系の仮想計算機が稼働する第２の計算機とを有するフォールトトレラントシステムにおいて、第１の計算機上の現用系の仮想計算機を第２の計算機に移動させた場合、第２の計算機上に移動した現用系の仮想計算機に対して新たに同期先となる待機系の仮想計算機を設定し、現用系の仮想計算機と待機系の仮想計算機との同期を開始しなければならない。一般に同期を開始する際には、現用系の仮想計算機の全メモリ内容を含む初回スナップショットを取得して、新たに同期先となる物理計算機へ送信する必要がある。
【００１９】
本発明の目的は、上述した課題、すなわち、現用系の仮想計算機と待機系の仮想計算機との同期を開始するためには現用系の仮想計算機のＣＰＵのコンテキストや全メモリ内容を含む初回スナップショットの転送が必要になる、という課題を解決するフォールトトレラントシステムを提供することにある。
【課題を解決するための手段】
【００２０】
本発明の第１の観点に係るフォールトトレラントシステムは、
現用系の仮想計算機が稼働する第１の計算機と、
待機系の仮想計算機が稼働する第２の計算機と
を有し、
上記第１の計算機は、上記現用系の仮想計算機の全メモリを含む初回スナップショットを上記第２の計算機に送信して新たな待機系の仮想計算機を生成し、自計算機上の上記仮想計算機を待機系に切り換えて上記第２の計算機に対して上記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を送信し、自計算機上の上記待機系の仮想計算機の状態を上記第２の計算機上の上記現用系の仮想計算機の初回のスナップショットとして認識し、以後、上記第２の計算機から受信するスナップショットに基づいて自計算機の上記待機系の仮想計算機の状態を更新する、
といった構成を採用する。
【００２１】
また、本発明の第２の観点に係る計算機は、
１つ以上の待機系の仮想計算機が稼働する第２の計算機に接続され、
現用系の仮想計算機と、
スナップショット管理手段と
を有し、
上記スナップショット管理手段は、上記現用系の仮想計算機の全メモリを含む初回スナップショットを上記第２の計算機に送信して新たな待機系の仮想計算機を生成し、自計算機上の上記仮想計算機を待機系に切り換えて上記第２の計算機に対して上記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を送信し、自計算機上の上記待機系の仮想計算機の状態を上記第２の計算機上の上記現用系の仮想計算機の初回のスナップショットとして認識し、以後、上記第２の計算機から受信するスナップショットに基づいて自計算機の上記待機系の仮想計算機の状態を更新する、
といった構成を採用する。
【００２２】
また、本発明の第３の観点に係る計算機は、
現用系の仮想計算機が稼働する第１の計算機に接続され、
待機系の仮想計算機と、
スナップショット管理手段と
を有し、
上記スナップショット管理手段は、上記現用系の仮想計算機の全メモリを含む初回スナップショットを上記第１の計算機から受信して新たな上記待機系の仮想計算機を生成し、上記第１の計算機上の上記仮想計算機が待機系に切り換えられた後に上記第１の計算機から送信される、上記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を受信すると、上記待機系の仮想計算機を上記現用系の仮想計算機へ切り換え、該切り換え後の上記現用系の仮想計算機の初回のスナップショットを上記第１の計算機へ送信する処理を省略し、以後、第２のチェックポイントが到来する毎に、上記現用系の上記仮想計算機のスナップショットを取得して上記第１の計算機へ送信する、
といった構成を採用する。
【００２３】
また本発明の第４の観点に係るフォールトトレラントシステム制御方法は、
現用系の仮想計算機が稼働する第１の計算機と、待機系の仮想計算機が稼働する第２の計算機とを有するフォールトトレラントシステムの制御方法であって、
上記第１の計算機が、上記現用系の仮想計算機の全メモリを含む初回スナップショットを上記第２の計算機に送信して新たな待機系の仮想計算機を生成し、自計算機上の上記仮想計算機を待機系に切り換え自計算機上の上記仮想計算機を待機系に切り換えて上記第２の計算機に対して上記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を送信し、自計算機上の上記待機系の仮想計算機の状態を上記第２の計算機上の上記現用系の仮想計算機の初回のスナップショットとして認識し、以後、上記第２の計算機から受信するスナップショットに基づいて自計算機の上記待機系の仮想計算機の状態を更新する、
といった構成を採用する。
【００２４】
また本発明の第５の観点に係るプログラムは、
１つ以上の待機系の仮想計算機が稼働する第２の計算機に接続された計算機を、
現用系の仮想計算機と、
上記現用系の仮想計算機の全メモリを含む初回スナップショットを上記第２の計算機に送信して新たな待機系の仮想計算機を生成し、自計算機上の上記仮想計算機を待機系に切り換えて上記第２の計算機に対して上記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を送信し、自計算機上の上記待機系の仮想計算機の状態を上記第２の計算機上の上記現用系の仮想計算機の初回のスナップショットとして認識し、以後、上記第２の計算機から受信するスナップショットに基づいて自計算機の上記待機系の仮想計算機の状態を更新するスナップショット管理手段と
して機能させる。
【００２５】
また本発明の第６の観点に係るプログラムは、
現用系の仮想計算機が稼働する第１の計算機に接続された計算機を、
待機系の仮想計算機と、
上記現用系の仮想計算機の全メモリを含む初回スナップショットを上記第１の計算機から受信して新たな上記待機系の仮想計算機を生成し、上記第１の計算機上の上記仮想計算機が待機系に切り換えられた後に上記第１の計算機から送信される、上記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を受信すると、上記待機系の仮想計算機を上記現用系の仮想計算機へ切り換え、該切り換え後の上記現用系の仮想計算機の初回のスナップショットを上記第１の計算機へ送信する処理を省略し、以後、第２のチェックポイントが到来する毎に、上記現用系の上記仮想計算機のスナップショットを取得して上記第１の計算機へ送信するスナップショット管理手段と
して機能させる。
【発明の効果】
【００２６】
本発明は上述した構成を有するため、現用系の仮想計算機に対して新たに同期先となる待機系の仮想計算機を設定して現用系の仮想計算機と待機系の仮想計算機との同期を開始する際、現用系の仮想計算機の初回スナップショットの転送を省くことができ、少ない負荷で可用性を維持することができる。
【図面の簡単な説明】
【００２７】
【図１】本発明の第１の実施形態にかかるフォールトトレラントシステムのブロック図である。
【図２】本発明の第１の実施形態における物理計算機（第３の物理計算機）のチェックポイント管理部が実行する処理の一例を示すフローチャートである。
【図３】本発明の第１の実施形態における物理計算機（第１の物理計算機）のチェックポイント管理部が実行する処理の一例を示すフローチャートである。
【図４】本発明の第１の実施形態における物理計算機（第２の物理計算機）のチェックポイント管理部が実行する処理の一例を示すフローチャートである。
【図５】本発明の第１の実施形態にかかるフォールトトレラントシステムで物理計算機（第３の物理計算機）に障害が発生した際に行われるフェイルオーバの説明図である。
【図６】本発明の第１の実施形態にかかるフォールトトレラントシステムにおいて、障害発生によるフェイルオーバ直後に物理計算機（第２の物理計算機）上に待機系の仮想計算機が新規に生成される様子を示す図である。
【図７】本発明の第１の実施形態にかかるフォールトトレラントシステムにおいて、物理計算機（第２の物理計算機）上の待機系の仮想計算機が現用系に切り換わり、物理計算機（第１の物理計算機）上の現用系の仮想計算機が待機系に切り換わった状態を示す図である。
【図８】本発明の第２の実施形態にかかるフォールトトレラントシステムのブロック図である。
【図９】本発明の第２の実施形態における物理計算機（第１の物理計算機）のチェックポイント管理部が実行する処理の一例を示すフローチャートである。
【図１０】本発明の第２の実施形態にかかるフォールトトレラントシステムで物理計算機（第３の物理計算機）に障害が発生した際に行われるフェイルオーバの説明図である。
【図１１】本発明の第２の実施形態にかかるフォールトトレラントシステムにおいて、障害発生によるフェイルオーバ直後に物理計算機（第２の物理計算機）の１つが待機系に選択され、その上に待機系の仮想計算機が新規に生成される様子を示す図である。
【図１２】本発明の第２の実施形態にかかるフォールトトレラントシステムにおいて、物理計算機（第２の物理計算機）上の待機系の仮想計算機が現用系に切り換わり、物理計算機（第１の物理計算機）上の現用系の仮想計算機が待機系に切り換わった状態を示す図である。
【図１３】本発明の第３の実施形態にかかるフォールトトレラントシステムのブロック図である。
【発明を実施するための形態】
【００２８】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
図１を参照すると、本発明の第１の実施形態にかかるフォールトトレラントシステム１００は、ハードウェアとしてｎ台（ｎは２以上の整数）の物理計算機１１０と、これらｎ台の物理計算機１１０に共通な１台の物理計算機１２０と、何れかの物理計算機１１０に障害が発生した場合にそれに代えて使用する１台の他の物理計算機１３０とを有する。また、ｎ台の物理計算機１１０と１台の物理計算機１２０と１台の物理計算機１３０とはネットワーク１４０を通じて相互に通信可能に接続されている。
【００２９】
各々の物理計算機１１０は、サーバ装置などで構成され、ハードウェアとして、１以上のプロセッサ、メインメモリ、通信カード等（何れも図示せず）を有する。また、各々の物理計算機１１０は、ソフトウェアとして、仮想計算機環境を提供するハイパーバイザ（Ｈｙｐｅｒｖｉｓｏｒ）１１１と、このハイパーバイザ１１１が提供する仮想計算機環境の下で動作する仮想計算機１１２とを有する。
【００３０】
また、物理計算機１２０は、サーバ装置などで構成され、ハードウェアとして、１以上のプロセッサ、メインメモリ、通信カード等（何れも図示せず）を有する。また、物理計算機１２０は、ソフトウェアとして、仮想計算機環境を提供するハイパーバイザ１２１と、このハイパーバイザ１２１が提供する仮想計算機環境の下で動作するｎ個の仮想計算機１２２とを有する。
【００３１】
さらに、物理計算機１３０は、サーバ装置などで構成され、ハードウェアとして、１以上のプロセッサ、メインメモリ、通信カード等（何れも図示せず）を有する。また、物理計算機１３０は、ソフトウェアとして、仮想計算機環境を提供するハイパーバイザ１３１を有する。
【００３２】
物理計算機１２０のｎ個の仮想計算機１２２は、ｎ台の物理計算機１１０のｎ個の仮想計算機１１２と１対１に対応している。即ち、仮想計算機１２２−１は仮想計算機１１２−１に対応し、…、仮想計算機１２２−ｎは仮想計算機１１２−ｎに対応する。このように物理計算機１２０上では、ｎ個の仮想計算機１２２が存在するため、物理計算機１２０のメインメモリの容量は、物理計算機１１０のメインメモリに比べて大きくなっている。以下、特定の仮想計算機を意味する場合、参照番号に−ｉ（ｉは１〜ｎの何れか）を付加する。
【００３３】
ここで、初期状態においては、各々の物理計算機１１０の仮想計算機１１２は現用系として動作し、物理計算機１２０の仮想計算機１２２は待機系として動作する。また物理計算機１３０には、物理計算機１１０、１２０と同じフォールトトレラントグループを構成する現用系および待機系の仮想計算機は存在しない。但し、物理計算機１３０には、他のフォールトトレラントグループに属する待機系の仮想計算機や、仮想計算機以外のアプリケーションプログラムが存在していても構わない。そして、何れかの現用系の仮想計算機１１２−ｉが動作する物理計算機１１０−ｉにハードウェア障害等の障害が発生すると、物理計算機１２０上の対応する仮想計算機１２２−ｉが待機系から現用系に切り換わり、障害に遭遇した仮想計算機１１２−ｉが行っている処理を現用系となった仮想計算機１２２−ｉで継続して実行する。さらに、現用系となった仮想計算機１２２−ｉに対して待機系となる新規な仮想計算機を物理計算機１３０に生成し、そして、物理計算機１２０の負荷を軽減するために、物理計算機１２０の現用系の仮想計算機１２２−ｉを待機系に、物理計算機１３０上に生成した待機系の仮想計算機を現用系に切り換えるようにしている。
【００３４】
物理計算機１１０のハイパーバイザ１１１は、スナップショット管理部１１３を有する。また、物理計算機１２０のハイパーバイザ１２１は、スナップショット管理部１２３を有する。さらに、物理計算機１３０のハイパーバイザ１３１は、スナップショット管理部１３３を有する。スナップショット管理部１１３とスナップショット管理部１２３とスナップショット管理部１３３とは、物理計算機１１０と物理計算機１２０と物理計算機１３０とをＦＴサーバとして機能させるためのソフトウェアである。
【００３５】
物理計算機１１０側のスナップショット管理部１１３は、チェックポイントが到来する毎に、自物理計算機１１０上の現用系の仮想計算機１１２のスナップショットを取得してネットワーク１４０経由で物理計算機１２０へ送信するスナップショット取得機能を有する。このスナップショット取得機能では、チェックポイントにおける仮想計算機１１２の状態をスナップショットとして取得する。スナップショットして取得する仮想計算機１１２の状態は、仮想計算機１１２の状態を当該スナップショット時点に復元するのに必要なデータ、例えば仮想計算機１１２に割り当てられているＣＰＵの状態（プログラムカウンタやレジスタの状態）やメモリの状態を含む。本発明に関連する第１の関連技術に記載されるように、転送するデータ量を削減するために、仮想計算機１１２のメモリ状態は前回のスナップショット以降に更新されたメモリページ（ダーティページ）のみを含むようにして良い。
【００３６】
物理計算機１２０側のスナップショット管理部１２３は、物理計算機１１０から受信した現用系の仮想計算機１１２のスナップショットに基づいて、自物理計算機１２０上の対応する待機系の仮想計算機１２２の状態を現用系の仮想計算機１１２の状態に一致させる同期機能を有する。この同期機能では、物理計算機１１０から受信した現用系の仮想計算機１１２の時刻ｔ時点のスナップショットに基づいて、対応する待機系の仮想計算機１２２の状態を上記時刻ｔ時点の現用系の仮想計算機１１２の状態に一致させる。
【００３７】
またスナップショット管理部１２３は、さらに、何れかの物理計算機１１０で障害が発生した場合、当該障害の発生した物理計算機１１０の現用系の仮想計算機１１２に対応する自物理計算機１２０上の待機系の仮想計算機１２２を、待機系から現用系に切り換えるフェールオーバ機能を有する。
【００３８】
またスナップショット管理部１２３は、さらに、物理計算機１３０に対して自物理計算機１２０上の現用系の仮想計算機の全メモリ内容を含む初回スナップショットを送信して待機系の仮想計算機を新規に生成するように要求し、その後にチェックポイントが到来する毎に、現用系の仮想計算機のスナップショットを取得して物理計算機１３０に送信する機能を有する。またスナップショット管理部１２３は、物理計算機１３０から仮想計算機の生成完了の通知を受信すると、物理計算機１３０から切り換え準備完了の通知を受信するのを待ち合わせる機能を有する。このとき、上記初回スナップショット以降に上記現用系の仮想計算機のチェックポイントで取得されたスナップショットがあれば、スナップショット管理部１２３は、当該スナップショットを物理計算機１３０へ転送した後に、物理計算機１３０から切り換え準備完了の通知を受信するのを待ち合わせる。さらにスナップショット管理部１２３は、物理計算機１３０のスナップショット管理部１３３から、切り換え準備完了の通知を受信すると、自物理計算機１２０上の現用系の仮想計算機１２２を待機系に切り換え、物理計算機１３０に対して現用系への切り換えを指示する機能を有する。またさらに、スナップショット管理部１２３は、待機系に切り換えた仮想計算機１２２の状態を物理計算機１３０の現用系の仮想計算機の初回スナップショットとして認識し、以後、物理計算機１３０から受信した上記現用系の仮想計算機のスナップショットに基づいて、自物理計算機１３０の上記待機系の仮想計算機の状態を上記現用系の仮想計算機の状態に一致させる機能を有する。
【００３９】
物理計算機１３０側のスナップショット管理部１３３は、物理計算機１２０からの仮想計算機の新規生成要求に従って、自物理計算機１３０に待機系の仮想計算機を新規に生成し、生成完了を物理計算機１２０へ通知する機能を有する。また、スナップショット管理部１３３は、仮想計算機の生成完了を通知した後、切り換え準備完了を物理計算機１２０へ通知する機能を有する。なお、スナップショット管理部１３３は、物理計算機１２０から初回スナップショットを受信した後、チェックポイントで取得されたスナップショットを物理計算機１２０から受信していれば、この受信したスナップショットを用いて待機系の仮想計算機の状態を現用系の仮想計算機の状態に一致させる同期化を行った後、切り換え準備完了を物理計算機１２０に対して通知する。また、スナップショット管理部１３３は、切り換え準備完了を通知した後、物理計算機１２０から現用系への切り換え指示を受信すると、仮想計算機を待機系から現用系に切り換える機能を有する。さらにスナップショット管理部１３３は、チェックポイントが到来する毎に、現用系となった仮想計算機のスナップショットを取得し、物理計算機１２０へ転送するスナップショット取得機能を有する。
【００４０】
次に本実施形態にかかるフォールトトレラントシステム１００の動作を図１乃至図４を参照して説明する。図２は各々の物理計算機１１０のスナップショット管理部１１３の処理の一例を示すフローチャート、図３は物理計算機１２０のスナップショット管理部１２３の処理の一例を示すフローチャート、図４は物理計算機１３０のスナップショット管理部１３３の処理の一例を示すフローチャートである。
【００４１】
初期の状態においては、各々の物理計算機１１０の仮想計算機１１２は現用系として動作し、物理計算機１２０の仮想計算機１２２は待機系として動作している。各々の物理計算機１１０のハイパーバイザ１１１が有するスナップショット管理部１１３は、自物理計算機１１０上の現用系の仮想計算機１１２の全メモリ内容を含む初回スナップショットを生成し、待機系の物理計算機１２０へ転送する（図２のステップＳ１０１）。待機系の物理計算機１２０のハイパーバイザ１２１が有するスナップショット管理部１２１は、上記初回スナップショットを受信し、自物理計算機１２０上に待機系の仮想計算機１２２を新規に生成する。その後、各々の物理計算機１１０のハイパーバイザ１１１が有するスナップショット管理部１１３は、チェックポイントが到来したか否かを検出する（図２のＳ１０２）。チェックポイントとは、現用系の仮想計算機１１２と待機系の仮想計算機１２２との同期を採るタイミングである。チェックポイントの検出方法は任意である。例えば、予め設定された時間周期Ｔ１毎にチェックポイントが到来したものと検出して良い。以下、物理計算機１１０−ｉが時刻ｔで検出したチェックポイントをＣＴｉｔと記す。
【００４２】
スナップショット管理部１１３は、チェックポイントＣＴｉｔを検出すると、自物理計算機１１０−ｉの仮想計算機（現用系）１１２のスナップショットを取得し、ネットワーク１４０経由で物理計算機１２０へ送信する（Ｓ１０３）。送信されるスナップショットには、他の仮想計算機１１２のスナップショットと区別できるように、フォールトトレラントシステム１００で一意な識別情報が付加される。
【００４３】
スナップショット管理部１１３は、スナップショットの送信が完了すると、ステップＳ１０２に戻り、次のチェックポイントの到来を検出する。
【００４４】
物理計算機１２０のハイパーバイザ１２１が有するスナップショット管理部１２３は、物理計算機１１０−ｉからスナップショットを受信すると（図３のＳ１１１）、この受信したスナップショットを用いて、仮想計算機（待機系）１２２−ｉの状態を仮想計算機（現用系）１１２−ｉの状態に一致させる（Ｓ１１２）。具体的には、スナップショット管理部１２３は、仮想計算機１２２−ｉに割り当てられている物理計算機１２０のメインメモリを、受信したスナップショットに含まれるページで上書きする。
【００４５】
またスナップショット管理部１２３は、複数の現用系の物理計算機１１０における障害の有無を検出する（Ｓ１１３）。障害の検出方法は任意である。例えば、スナップショット管理部１２３は、各々の物理計算機１１０からネットワーク１４０経由で物理計算機１２０に対して一定周期で送信される特定の信号（例えばハートビート信号）の受信の有無を検出することによって障害の有無を検出して良い。
【００４６】
スナップショット管理部１２３は、何れかの物理計算機１１０−ｉの障害を検出すると、自物理計算機１２０の対応する仮想計算機１２２−ｉを待機系から現用系へ切り換える（Ｓ１１４）。
【００４７】
次にスナップショット管理部１２３は、物理計算機１３０に対して、上記現用系となった仮想計算機１２２−ｉに対して待機系となる仮想計算機の生成を要求する（Ｓ１１５）。具体的には、スナップショット管理部１２３は、現用系の仮想計算機１２２−ｉを一時的に停止してその全メモリのコピーを含むスナップショットを取得し、この取得したスナップショットを初回のスナップショットとして添えて仮想計算機の新規生成を物理計算機１３０に対して要求する。そして、スナップショット管理部１２３は、要求先の物理計算機１３０から仮想計算機の生成完了の通知を受信するのを待ち合わせる（Ｓ１１６）。スナップショット管理部１２３は、仮想計算機の生成完了の通知を物理計算機１３０から受信すると（Ｓ１１６でＹＥＳ）、上記初回スナップショット以降に上記現用系の仮想計算機１２２−ｉのチェックポイントで取得されたスナップショットがあるか否かを判定する（Ｓ１１７）。若し、あれば当該スナップショットを物理計算機１３０へ転送し（Ｓ１１８）、物理計算機１３０から切り換え準備完了の通知を受信するのを待ち合わせる（Ｓ１１９）。また、スナップショットがなければ（Ｓ１１７でＮＯ）、ステップＳ１１８をスキップし、物理計算機１３０から切り換え準備完了の通知を受信するのを待ち合わせる（Ｓ１１９）。スナップショット管理部１２３は、要求先の物理計算機１３０から切り換え準備完了の通知を受信すると（Ｓ１１９でＹＥＳ）、仮想計算機１２２−ｉのステータスを現用系から待機系に切り換え（Ｓ１２０）、物理計算機１３０に対して仮想計算機を待機系から現用系へ切り換えるように指示する（Ｓ１２１）。このとき、スナップショット管理部１２３は、待機系に切り換えた仮想計算機１２２−ｉの状態を、物理計算機１３０の後述する現用系の仮想計算機の初回のスナップショットとして認識する。これは、物理計算機１２０から物理計算機１３０への仮想計算機１２２−ｉの初回スナップショットのコピー直後には、物理計算機１２０の仮想計算機１２２−ｉと物理計算機１３０に生成される仮想計算機のメモリ状態が完全に一致しているためである。また、その後にチェックポイントによって仮想計算機１２２−ｉのスナップショットが取得されていても、それらが物理計算機１２０から物理計算機１３０へ送信されて、後述するように物理計算機１３０上に生成された仮想計算機のメモリ状態に反映される、すなわち同期化されるためである。
【００４８】
以後、スナップショット管理部１２３は、ステップＳ１１１に戻る。このため、物理計算機１３０から後述する現用系の仮想計算機の２回目以降のスナップショットを受信すると、この受信したスナップショットにより、待機系となった仮想計算機１２２−ｉの状態を更新することになる。
【００４９】
他方、物理計算機１３０側のスナップショット管理部１３３は、物理計算機１２０から初回のスナップショットを含む仮想計算機の新規生成要求を受信すると（図４のＳ１３１）、自物理計算機１３０に待機系の仮想計算機を新たに生成する（Ｓ１３２）。仮想計算機の生成は、具体的には、自物理計算機１３０のメインメモリに新たな仮想計算機のメモリ領域を確保し、この確保したメモリ領域に受信した初回スナップショットを書き込むことで行われる。
【００５０】
次に、スナップショット管理部１３３は、現用系が動作中の物理計算機１２０に対し仮想計算機の生成完了を通知する（Ｓ１３３）。次に、スナップショット管理部１３３は、現用系が動作中の物理計算機１２０からスナップショットを受信したか否かを判定し（Ｓ１３４でＹＥＳ）、受信したならば、受信したスナップショットを用いて待機系の仮想計算機の状態を現用系の仮想計算機の状態に一致させる同期化を行い（Ｓ１３５）、切り換え準備完了を物理計算機１２０に対して通知して（Ｓ１３６）、現用系への切り換え指示を受信するのを待ち合わせる（Ｓ１３７）。一方、スナップショットを受信していない場合には、スナップショット管理部１３３は、ステップＳ１３５の処理をスキップし、切り換え準備完了を物理計算機１２０に対して通知して（Ｓ１３６）、現用系への切り換え指示を受信するのを待ち合わせる（Ｓ１３７）。次に、スナップショット管理部１３３は、物理計算機１２０から現用系への切り換え指示を受信すると、仮想計算機のステータスを待機系から稼働系に切り換える（Ｓ１３８）。
【００５１】
その後、スナップショット管理部１３３は、チェックポイントが到来する毎に（Ｓ１３９）、現用系の仮想計算機のスナップショットを取得し、２回目以降のスナップショットとして物理計算機１２０へ転送する（Ｓ１４０）。
【００５２】
図５乃至図７は、現用系の物理計算機１１０−１に障害が発生した際、その物理計算機１１０−１上の現用系の仮想計算機１１２−１が実行していた業務処理を、物理計算機１３０の後述する仮想計算機１３２が実行するように至るまでの推移を模式的に示している。
【００５３】
まず図５に示すように、物理計算機１１０−１に障害が発生すると、物理計算機１２０の仮想計算機１２２−１が待機系から現用系へ切り換えられ、仮想計算機１２２−１が、仮想計算機１１２−１で実行されていた業務処理を実行する。続いて、図６に示すように、物理計算機１２０の現用系の仮想計算機１２２−１に対して待機系となる仮想計算機１３２が物理計算機１３０に新たに生成される。この仮想計算機１３２の新規生成時には、仮想計算機１２２−１の全メインメモリの記憶データを含む初回スナップショットが物理計算機１２０から物理計算機１３０へネットワーク１４０経由で送信される。そして、物理計算機１３０に待機系の仮想計算機１３２が生成され、物理計算機１２０から物理計算機１３０へ現用系の切り換え指示があると、図７に示すように、仮想計算機１３２が待機系から現用系に切り換えられると同時に、物理計算機１２０の稼働計算機１２２−１が現用系から待機系に切り換えられる。
【００５４】
以上は、物理計算機１１０−１に障害が発生した場合の動作であるが、他の物理計算機１１０−２〜２１０−ｎに障害が発生した場合にも同様の動作が行われる。
【００５５】
また、以上は、物理計算機１１０に障害が発生した場合の動作であるが、物理計算機１１０の交換等を行うために物理計算機１１０をシステムから切り離す際にも、同様の手順で、物理計算機１１０が実行している業務処理を他の物理計算機１３０で実行させるようにすることが可能である。
【００５６】
以上説明したように本実施形態によれば、以下のような効果が得られる。
【００５７】
経済的な運用が可能である。その理由は、複数の現用系の物理計算機１１０に対して共通な１つの物理計算機１２０を備えていればよく、待機系の物理計算機を１対１に備えておく必要がないためである。
【００５８】
サービス中断時間を短縮することができる。その理由は、物理計算機１２０上に既に生成されている仮想計算機１２２を待機系から現用系へ切り換えるのに要する時間は、物理計算機に新たな仮想計算機を生成するのに要する時間に比べて短いためである。
【００５９】
現用系の物理計算機１１０の障害後も高可用性を維持することができる。その理由は、物理計算機１２０の現用系となった仮想計算機１２２に対して待機系となる仮想計算機１３２を、他の物理計算機１３０に生成し、仮想計算機の冗長性を維持するためである。
【００６０】
物理計算機１２０の負荷を軽減することができる。その理由は、新たに待機系となった仮想計算機１３２を現用系に切り換えると同時に、物理計算機１２０の現用系の仮想計算機１２２を待機系に切り換えることによって、物理計算機１２０に現用系の仮想計算機が長く存在しないようにしているためである。
【００６１】
現用系となった仮想計算機１３２の初回スナップショットを、フェイルオーバ先の物理計算機１３０から待機系の物理計算機１２０へ転送してコピーする処理を省略することができ、初回スナップショットの送受信に伴う物理計算機１２０、１３０の負荷を軽減することができる。その理由は、物理計算機１２０のスナップショット管理部１２３は、待機系に切り換えた仮想計算機１２２の状態を、現用系に切り換わった仮想計算機１３２の初回スナップショットとして認識するためである。
【００６２】
[第２の実施形態]
図８を参照すると、本発明の第２の実施形態にかかるフォールトトレラントシステム２００は、図１に示した本発明の第１の実施形態にかかるフォールトトレラントシステム１００と比較して、他の物理計算機１３０がｍ台（ｍは２以上の整数）存在する点と、物理計算機１２０のスナップショット管理部１２３が選択手段１２４を有する点で、相違する。
【００６３】
スナップショット管理部１２３の選択手段１２４は、ｍ台の物理計算機１３０の中から新たに仮想計算機を生成する一の物理計算機を選択する機能を有する。選択の方法は任意である。例えば、選択手段１２４は、物理計算機の負荷率に基づいて選択して良い。物理計算機の負荷率は、当該物理計算機のＣＰＵの負荷率、メモリの負荷率、入出力の負荷率の何れか１つ、または２つ、または全てを考慮して決定される値であって良い。例えば、選択手段１２４は、ｍ台の物理計算機１３０の各々に対して、直近の負荷率（平均値あるいは最大値等）を問い合わせ、負荷率が最も低い物理計算機１３０を選択して良い。あるいは、負荷率が予め定められた閾値以下の物理計算機１３０を選択して良い。ｍ台の物理計算機１３０の直近の負荷率が、図示しない他の計算機で測定されている場合、当該計算機から物理計算機１３０の負荷率を取得するようにしても良い。
【００６４】
ここで、初期状態においては、各々の物理計算機１１０の仮想計算機１１２は現用系として動作し、物理計算機１２０の仮想計算機１２２は待機系として動作する。また物理計算機１３０には、物理計算機１１０、１２０と同じフォールトトレラントグループを構成する現用系および待機系の仮想計算機は存在しない。但し、物理計算機１３０には、他のフォールトトレラントグループに属する待機系の仮想計算機や、仮想計算機以外のアプリケーションプログラムが存在していても構わない。そして、何れかの現用系の仮想計算機１１２−ｉが動作する物理計算機１１０−ｉにハードウェア障害等の障害が発生すると、物理計算機１２０上の対応する仮想計算機１２２−ｉが待機系から現用系に切り換わり、障害に遭遇した仮想計算機１１２−ｉが行っている処理を現用系となった仮想計算機１２２−ｉで継続して実行する。さらに、現用系となった仮想計算機１２２−ｉに対して待機系となる新規な仮想計算機を何れかの物理計算機１３０に生成し、そして、物理計算機１２０の負荷を軽減するために、物理計算機１２０の現用系の仮想計算機１２２−ｉを待機系に、物理計算機１３０上に生成した待機系の仮想計算機を現用系に切り換えるようにしている。
【００６５】
図９は物理計算機１２０のスナップショット管理部１２３の処理の一例を示すフローチャートである。なお、物理計算機１１０、１３０のスナップショット管理部１１３、１３３の処理の流れは、図２、図４と同じである。以下、本実施形態にかかるフォールトトレラントシステム２００の動作を、第１の実施形態との相違点を中心に説明する。
【００６６】
初期の状態において、各々の物理計算機１１０のハイパーバイザ１１１が有するスナップショット管理部１１３は、第１の実施形態と同様の動作を行う。具体的には、チェックポイントが到来したか否かを検出し（図２のＳ１０２）、或るチェックポイントＣＴｉｔを検出すると、自物理計算機１１０−ｉの仮想計算機（現用系）１１２のスナップショットを取得し、ネットワーク１４０経由で物理計算機１２０へ送信する（Ｓ１０３）。そして、スナップショット管理部１１３は、ステップＳ１０２に戻り、次のチェックポイントの到来を検出する。
【００６７】
物理計算機１２０のハイパーバイザ１２１が有するスナップショット管理部１２３は、物理計算機１１０−ｉからスナップショットを受信すると（図９のＳ２１１）、この受信したスナップショットを用いて、仮想計算機（待機系）１２２−ｉの状態を仮想計算機（現用系）１１２−ｉの状態に一致させる（Ｓ２１２）。具体的には、スナップショット管理部１２３は、仮想計算機１２２−ｉに割り当てられている物理計算機１２０のメインメモリのメモリ領域を、受信したスナップショットに含まれるページで上書きする。またスナップショット管理部１２３は、複数の現用系の物理計算機１１０における障害の有無を検出する（Ｓ２１３）。そして、何れかの物理計算機１１０−ｉの障害を検出すると、自物理計算機１２０の対応する仮想計算機１２２−ｉを待機系から現用系へ切り換える（Ｓ２１４）。これにより、新たに現用系となった仮想計算機１２２−ｉが、仮想計算機１１２−ｉに代わって、サービスを提供する。すなわち、フェイルオーバが行われる。
【００６８】
ここまでの動作は、第１の実施形態と同じである。
【００６９】
次にスナップショット管理部１２３は、新たに待機系として使用する１台の物理計算機をｍ台の物理計算機１３０の中から選択する（Ｓ２１５）。選択の方法は任意であるが、ここでは、物理計算機の負荷率に基づいて選択するものとする。この場合、スナップショット管理部１２３の選択手段１２４は、例えば、ｍ台の物理計算機１３０の各々に対して、ネットワーク１４０経由で直近の負荷率（平均値あるいは最大値等）を問い合わせ、負荷率が最も低い物理計算機１３０、あるいは、負荷率が予め定められた閾値以下の物理計算機１３０を選択する。ここで、選択した物理計算機を物理計算機１３０−ｊ（ｊは１〜ｍの何れか）と記す。
【００７０】
次に、スナップショット管理部１２３は、選択した物理計算機１３０−ｊに対して、上記現用系となった仮想計算機１２２−ｉの待機系となる仮想計算機の生成を要求する（Ｓ２１６）。具体的には、スナップショット管理部１２３は、現用系の仮想計算機１２２−ｉを一時的に停止してその初回スナップショットを取得し、この取得した初回スナップショットを添えて仮想計算機の新規生成を物理計算機１３０−ｊに対して要求する。
【００７１】
以降のスナップショット管理部１２３のステップＳ２１７〜Ｓ２２２の動作は、第１の実施形態における図３のステップＳ１１６〜Ｓ１２１の動作と同じである。
【００７２】
他方、選択された物理計算機１３０−ｊ側のスナップショット管理部１３３−ｊは、物理計算機１２０から初回のスナップショットを含む仮想計算機の生成要求を受信すると（図４のＳ１３１）、自物理計算機１３０−ｊに待機系の仮想計算機を新たに生成する（Ｓ１３２）。仮想計算機の生成は、具体的には、自物理計算機１３０−ｉのメインメモリに新たな仮想計算機のメモリ領域を確保し、この確保したメモリ領域に受信したスナップショットを書き込むことで行われる。以降のスナップショット管理部１３３−ｊの動作は、第１の実施形態における動作と同じである。
【００７３】
図１０乃至図１２は、現用系の物理計算機１１０−１に障害が発生した際、その物理計算機１１０−１上の現用系の仮想計算機１１２−１が実行していた業務処理を、物理計算機１３０−１の仮想計算機１３２−１が実行するように至るまでの推移を模式的に示している。
【００７４】
まず図１０に示すように、物理計算機１１０−１に障害が発生すると、物理計算機１２０の仮想計算機１２２−１が待機系から現用系へ切り換えられ、仮想計算機１２２−１が、仮想計算機１１２−１で実行されていた業務処理を実行する。続いて、図１１に示すように、例えば負荷率の最も小さな物理計算機１３０−１が新たな待機系に選択され、現用系の仮想計算機１２２−１の待機系となる仮想計算機１３２−１が物理計算機１３０−１に新たに生成される。この仮想計算機１３２−１の新規生成時には、仮想計算機１２２−１の全メインメモリの記憶データを含む初回スナップショットが物理計算機１２０から物理計算機１３０−１へネットワーク１４０経由で送信される。そして、物理計算機１３０−１に待機系の仮想計算機１３２−１が生成され、物理計算機１２０から物理計算機１３０へ現用系の切り換え指示があると、図１２に示すように、仮想計算機１３２−１が待機系から現用系に切り換えられると同時に、物理計算機１２０の稼働計算機１２２−１が現用系から待機系に切り換えられる。
【００７５】
以上は、物理計算機１１０−１に障害が発生した場合の動作であるが、他の物理計算機１１０−２〜１１０−ｎや新たに待機系となった物理計算機１３０−１に障害が発生した場合にも同様の動作が行われる。
【００７６】
また、以上は、物理計算機１１０に障害が発生した場合の動作であるが、物理計算機１１０の交換等を行うために物理計算機１１０をシステムから切り離す際にも、同様の手順で、物理計算機１１０が実行している業務処理を他の物理計算機１３０で実行させるようにすることが可能である。
【００７７】
以上説明したように本実施形態によれば、第１の実施形態と同様の効果が得られると共に、以下のような効果が得られる。
【００７８】
新たな仮想計算機を生成する他の物理計算機を複数台の物理計算機１３０の中から負荷率を基準に選択する構成によれば、負荷率が閾値以上の物理計算機を選択してしまったり、或いは閾値以下であっても他の物理計算機１３０に比べて負荷率の相対的に大きな物理計算機を選択してしまうことがなくなる。このため、選択した物理計算機上に仮想計算機を生成して現用系として稼働させた場合に、負荷が閾値より遥かに高まって動作が不安定になったり、負荷分散が図れないといった問題を解消することができる。
【００７９】
[第３の実施形態]
図１３を参照すると、本発明の第３の実施形態にかかるフォールトトレラントシステム３００は、第１の計算機３１０と、第２の計算機３２０とを有する。第１の計算機３１０は、現用系の仮想計算機３１１を有する。
【００８０】
初期の状態において、第１の計算機３１０では現用系の仮想計算機３１１が稼働している。冗長性を維持する際、以下のような動作が行われる。
【００８１】
第１の計算機３２１は、現用系の仮想計算機３１１の全メモリを含む初回スナップショットを第２の計算機３２０に送信して新たな待機系の仮想計算機３２１を生成する。次に、第１の計算機３１０は、自計算機上の仮想計算機３１１を待機系に切り換えて、第２の計算機３２０に対して上記待機系の仮想計算機を現用系の仮想計算機へ切り換える指示を送信し、自計算機上の上記待機系の仮想計算機の状態を第２の計算機３２０上の現用系の仮想計算機３２２の初回のスナップショットとして認識する。そして、第１の計算機３１０は、以後、第２の計算機３２０から受信するスナップショットに基づいて自計算機の待機系の仮想計算機３１２の状態を更新する。
【００８２】
このように本実施形態によれば、第２の計算機３２０上の現用系の仮想計算機３２２に対して新たに同期先となる待機系の仮想計算機３１２を設定して現用系の仮想計算機３２２と待機系の仮想計算機３１２との同期を開始する際、現用系の仮想計算機３２２の初回スナップショットのコピーを省くことができ、少ない負荷で可用性を維持することができる。その理由は、第１の計算機３１０は、待機系に切り換えた仮想計算機３１２の状態を、仮想計算機３２２の初回スナップショットとして認識するためである。
【符号の説明】
【００８３】
１００…フォールトトレラントシステム
１１０…物理計算機（第３の物理計算機）
１１１…ハイパーバイザ
１１２…仮想計算機
１１３…スナップショット管理部
１２０…物理計算機（第１の物理計算機）
１２１…ハイパーバイザ
１２２…仮想計算機
１２３…スナップショット管理部
１２４…選択手段
１３０…物理計算機（第２の物理計算機）
１３１…ハイパーバイザ
１３３…スナップショット管理部
【図１】
2014139706.tif 000003
【図２】
2014139706.tif 000004
【図３】
2014139706.tif 000005
【図４】
2014139706.tif 000006
【図５】
2014139706.tif 000007
【図６】
2014139706.tif 000008
【図７】
2014139706.tif 000009
【図８】
2014139706.tif 000010
【図９】
2014139706.tif 000011
【図１０】
2014139706.tif 000012
【図１１】
2014139706.tif 000013
【図１２】
2014139706.tif 000014
【図１３】
2014139706.tif 000015