(57)【特許請求の範囲】
【請求項１】
ゲストOSを備える仮想計算機が稼働し、第１のメモリ及び第１の転送部を備える第１の計算機と、第２のメモリ及び前記第１の転送部から転送されたデータを受信する第２の転送部を備える第２の計算機と、を含むフォールトトレラント計算機システムであって、
前記第１の計算機は、
前記第２の計算機での前記ゲストOSの起動のタイミングとは独立に、予め設定された時点における前記ゲストOSの処理内容全体のスナップショットを作成し、前記第１のメモリに保存し、保存された前記スナップショットを、前記第２のメモリに転送する指示を前記第１の転送部に出すと共に、前記第１のメモリに、前記予め設定された時点を起点として設定される複数の第１のタイミングのそれぞれにおける、一つ前の前記第１のタイミングからの前記仮想計算機のスナップショットの差分情報を保存し、その都度、前記第１の転送部に、前記第１の転送部及び前記第２の転送部を介して前記第１のメモリに保存された前記差分情報を前記第２のメモリに転送する指示を出す第１のスナップショットマネージャと、
前記第１の計算機のエラー情報を取得し、前記第１の転送部に対して、前記エラー情報を前記第２の計算機に転送する指示を出す第１のエラーハンドラと、を備え、
前記第１のタイミングは、前記起点から一定時間毎、前記差分情報の量が所定量に到達した時点毎、及び前記差分情報の量が所定量に到達した時点と前回の前記第１のタイミングからの経過時間が所定の最大時間に達した時点とのいずれか早い方の時間毎のいずれかのタイミングであり、
前記第２の計算機は、
前記第１の転送部及び前記第２の転送部を介して転送された前記エラー情報に基づき、前記第１の計算機の障害発生の有無を判断し、障害発生有と判断したとき、計算機切り換え通知を出力する第２のエラーハンドラと、
前記第１の転送部及び前記第２の転送部を介して前記第２のメモリに転送され保存されている前記スナップショットと最初の前記差分情報とに基づき新たな前記スナップショットを生成し、前記第２のメモリに保存し、２回目以降に転送された前記差分情報の受信の都度、該差分情報と前記第２のメモリに保存されている前記スナップショットとに基づき、更に新たな前記スナップショットを生成し、前記第２のメモリに保存するとともに、前記第２のエラーハンドラが出力した前記計算機切り換え通知を受信したとき、前記第２のメモリに保存された前記スナップショットに基づき、前記第２の計算機でゲストOSを起動する第２のスナップショットマネージャと、
を備える、
ことを特徴とするフォールトトレラント計算機システム。
【請求項２】
前記第１のメモリ及び前記第２のメモリは、それぞれ、前記第１の計算機の主記憶装置及び前記第２の計算機の主記憶装置である、
ことを特徴とする請求項１に記載のフォールトトレラント計算機システム。
【請求項３】
前記第１の転送部は、
前記第１の計算機のデータの送信を行う第１のデータ転送部と、
該第１のデータ転送部を制御する第１のＲＤＭＡドライバと、を備え、
前記第２の転送部は、
前記第１のデータ転送部を介してデータの受信を行う第２のデータ転送部と、
該第２のデータ転送部を制御する第２のＲＤＭＡドライバと、を備え、
前記差分情報は、前記第１のＲＤＭＡドライバ及び前記第２のＲＤＭＡドライバの制御により前記第１のデータ転送部及び前記第２のデータ転送部を介して、前記第１のメモリから前記第２のメモリに直接転送される、
ことを特徴とする請求項１又は２に記載のフォールトトレラント計算機システム。
【請求項４】
前記第１のエラーハンドラ及び前記第２のエラーハンドラはそれぞれ前記第１のデータ転送部及び前記第２のデータ転送部に組み込まれている、
ことを特徴とする請求項１乃至３のいずれか１項に記載のフォールトトレラント計算機システム。
【請求項５】
前記エラー情報は、前記第１の計算機が停止したことを判断できる情報である、
ことを特徴とする請求項１乃至４のいずれか１項に記載のフォールトトレラント計算機システム。
【請求項６】
前記エラー情報は、前記第１の計算機の停止につながる恐れのある情報を含む、
ことを特徴とする請求項１乃至５のいずれか１項に記載のフォールトトレラント計算機システム。
【請求項７】
前記差分情報は、前記第１のタイミングにおける、一つ前の前記第１のタイミングからの、前記ゲストOSが利用する前記第１のメモリの保存データの変更内容と、前記ゲストOSの動作を担うCPUのコンテキスト情報とを含む、
ことを特徴とする請求項１乃至６のいずれか１項に記載のフォールトトレラント計算機システム。
【請求項８】
ゲストOSを備える仮想計算機が稼働し、第１のメモリ及び第１の転送部を備える第１の計算機と、第２のメモリ及び前記第１の転送部から転送されたデータを受信する第２の転送部を備える第２の計算機と、を含むフォールトトレラント計算機システムの制御方法であって、
前記第１の計算機が実行する、
前記第２の計算機での前記ゲストOSの起動のタイミングとは独立に、予め設定された時点における前記ゲストOSの処理内容全体のスナップショットを作成し、前記第１のメモリに保存する第１のスナップショット保存ステップと、
前記スナップショットを、前記第１の転送部を介して、前記第２の計算機に転送するスナップショット転送ステップと、
前記第１のメモリに、前記予め設定された時点を起点として設定される複数の第１のタイミングのそれぞれにおける、一つ前の前記第１のタイミングからの前記仮想計算機のスナップショットの差分情報を保存する第１の差分情報保存ステップと、
前記第１のメモリに保存された前記差分情報を、前記第１の転送部を介して前記第２の計算機に転送する転送ステップと、
前記第１の計算機のエラー情報を取得し、前記第１の転送部を介して、前記エラー情報を前記第２の計算機に転送する指示を出すエラー情報取得ステップと、
前記エラー情報取得ステップでの前記転送する指示により、前記エラー情報を前記第１の転送部を介して前記第２の計算機に転送するエラー情報転送ステップと、
を備え、
前記第１のタイミングは、前記起点から一定時間毎、前記差分情報の量が所定量に到達した時点毎、及び前記差分情報の量が所定量に到達した時点と前回の前記第１のタイミングからの経過時間が所定の最大時間に達した時点とのいずれか早い方の時間毎のいずれかのタイミングであり、
前記第２の計算機が実行する、
前記第１の計算機から転送された前記スナップショットを、前記第２の転送部を介して受信し、受信した前記スナップショットを前記第２のメモリに保存する第２のスナップショット保存ステップと、
前記第２の計算機に転送された前記差分情報を、前記第２の転送部を介して受信し、受信した前記差分情報を前記第２のメモリに保存する第２の差分情報保存ステップと、
前記第１の計算機から転送され、前記第２のメモリに保存された前記スナップショットと最初の前記差分情報とに基づき新たな前記スナップショットを生成し、前記第２のメモリに保存し、２回目以降に転送された前記差分情報の受信の都度、該差分情報と前記第２のメモリに保存された前記スナップショットとに基づき、更に新たな前記スナップショットを生成し、前記第２のメモリに保存するスナップショット生成・保存ステップと、
前記第２の計算機に転送された前記エラー情報を前記第２の転送部を介して受信し、受信した前記エラー情報に基づき、前記第１の計算機の障害発生の有無を判断し、障害発生有と判断したとき、計算機切り換え通知を出力する計算機切り換え通知ステップと、
前記計算機切り換え通知がなされたとき、前記第２のメモリに保存された前記スナップショットに基づき、前記第２の計算機でゲストOSを起動するゲストOS起動ステップと、
を備える、
ことを特徴とするフォールトトレラント計算機システムの制御方法。
【請求項９】
ゲストOSを備える仮想計算機が稼働し、第１のメモリ及び第１の転送部を備える第１の計算機と、第２の計算機と、を含むフォールトトレラント計算機システムの制御プログラムであって
前記第２の計算機での前記ゲストOSの起動のタイミングとは独立に、予め設定された時点における前記ゲストOSの処理内容全体のスナップショットを作成し、前記第１のメモリに保存するスナップショット保存ステップと、
前記スナップショットを、前記第１の転送部を介して、前記第２の計算機に転送するスナップショット転送ステップと、
前記第１のメモリに、前記予め設定された時点を起点として設定される複数の第１のタイミングのそれぞれにおける、一つ前の前記第１のタイミングからの前記仮想計算機のスナップショットの差分情報を保存する差分情報保存ステップと、
前記第１のメモリに保存された前記差分情報を、前記第１の転送部を介して前記第２の計算機に転送する転送ステップと、
前記第１の計算機のエラー情報を取得し、前記第１の転送部を介して、前記エラー情報を前記第２の計算機に転送する指示を出すエラー情報取得ステップと、
前記エラー情報取得ステップでの前記転送する指示により、前記エラー情報を前記第１の転送部を介して前記第２の計算機に転送するエラー情報転送ステップと、
を前記第１の計算機に実行させ、
前記第１のタイミングは、前記起点から一定時間毎、前記差分情報の量が所定量に到達した時点毎、及び前記差分情報の量が所定量に到達した時点と前回の前記第１のタイミングからの経過時間が所定の最大時間に達した時点とのいずれか早い方の時間毎のいずれかのタイミングである、
ことを特徴とするフォールトトレラント計算機システムの制御プログラム。
【請求項１０】
ゲストOSを備える仮想計算機が稼働する第１の計算機と、該第１の計算機から転送されるデータを受信する第２の転送部及び第２のメモリを備える第２の計算機と、を含むフォールトトレラント計算機システムの制御プログラムであって、
前記第２の計算機での前記ゲストOSの起動のタイミングとは独立に予め設定された時点における前記ゲストOSの処理内容全体のスナップショットであり、前記第１の計算機から転送された前記スナップショットを、前記第２の転送部を介して受信し、受信した前記スナップショットを前記第２のメモリに保存するスナップショット保存ステップと、
前記第１の計算機から転送される差分情報であり、前記予め設定された時点を起点として設定される複数の第１のタイミングのそれぞれにおける、一つ前の前記第１のタイミングからの前記仮想計算機のスナップショットの前記差分情報を、前記第２の転送部を介して受信し、受信した前記差分情報を前記第２のメモリに保存する差分情報受信・保存ステップと、
前記第１の計算機から転送され、前記第２のメモリに保存された前記スナップショットと最初の前記差分情報とに基づき新たな前記スナップショットを生成し、前記第２のメモリに保存し、２回目以降に転送された前記差分情報の受信の都度、該差分情報と前記第２のメモリに保存された前記スナップショットとに基づき、更に新たな前記スナップショットを生成し、前記第２のメモリに保存するスナップショット生成・保存ステップと、
前記第１の計算機から転送される、前記第１の計算機のエラー情報を、前記第２の転送部を介して受信するエラー情報受信ステップと、
受信した前記エラー情報に基づき、前記第１の計算機の障害発生の有無を判断し、障害発生有と判断したとき、計算機切り換え通知を出力する計算機切り換え通知ステップと、
前記計算機切り換え通知がなされたとき、前記第２のメモリに保存された前記スナップショットに基づき、前記第２の計算機でゲストOSを起動するゲストOS起動ステップと、
を前記第２の計算機に実行させ、
前記第１のタイミングは、前記第１の計算機で設定されたタイミングであり、前記起点から一定時間毎、前記差分情報の量が所定量に到達した時点毎、及び前記差分情報の量が所定量に到達した時点と前回の前記第１のタイミングからの経過時間が所定の最大時間に達した時点とのいずれか早い方の時間毎のいずれかのタイミングである、
ことを特徴とするフォールトトレラント計算機システムの制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フォールトトレラント計算機システム、フォールトトレラント計算機システムの制御方法、及びフォールトトレラント計算機システムの制御プログラムに関する。
【背景技術】
【０００２】
近年は、物理計算機上で複数のOS（Operating System）を動作させることを可能とした仮想化技術が広く使われている。計算機の仮想化によって利用率の低い複数の仮想計算機を１つのサーバ（物理計算機）上にまとめることで、サーバ１台あたりの利用効率を高めるとともに、物理サーバの台数を減らして消費電力を抑えることが可能となる。仮想計算機には、例えば一般の物理計算機上で稼動するOS(ホストOS)上に仮想計算機を動作させる層をつくり、その上で別のOS(ゲストOS)を動作させる方式や、ホストOSを介さず、ハードウェア上に仮想計算機を動作させる層(ハイパーバイザー)を作り、その上でゲストOSを動作させる方式などがある。どちらの方式も一長一短があるが、ゲストOSを用いた計算機の有効利用という点では目的は同じで、現在は両者のどちらも広く用いられている。
【０００３】
フォールトトレラント計算機システムは、専用のハードウェアを介してロックステップ動作している多重化（多くは二重化）された主要なハードウェアを障害発生時に瞬時に切り換えて動作し続ける従来からのハードウェア方式のフォールトトレラント計算機システムのほかに、近年は、前記のような仮想計算機において、その稼働している仮想計算機が属する物理計算機でハードウェア上の故障等による障害が発生した場合に、その仮想計算機が行っている処理を他の物理計算機上の待機している仮想計算機で継続して実行するフォールトトレラント計算機システムが知られている。
【０００４】
ハードウェア方式のフォールトトレラント計算機システムでは、主要なハードウェアを１システム毎に多重化し、高価な専用のハードウェアを使用する必要があるために、システムコストがかさむ。これに対して、ソフトウェアによるフォールトトレラント計算機の切り換えでは専用ハードウェアが不要となり、システム毎のハードウェアを二重化する必要はないためシステムコストが小さくなる。
【０００５】
ソフトウェアによる切り換えの例としては、専用のハードウェアを用いたフォールトトレラント計算機システムで行われているロックステップ動作をソフトウェアにより行い、障害発生時には瞬時に処理を切り換えるという方法がある。
【０００６】
特許文献１は、収集部により、第１の仮想計算機について発生した、第１の仮想計算機に対する入力を伴うイベントに関する同期情報を収集し、この同期情報に従って第２の仮想計算機の入力に係る実行状態を、前記第１の仮想計算機の入力に係る実行状態と同一になるように制御している。
【０００７】
特許文献２では、仮想マシンが動作しているサーバ計算機に障害が発生した場合、障害発生時刻に最も近い時点でディスク装置に採取されたスナップショットに基づき仮想マシンを他のサーバ計算機に再生成する。スナップショットとは、稼働中の計算機のＣＰＵのコンテキストとＣＰＵの動作中に使用する処理用メモリ内のデータ、及びディスク装置内のデータを、所定のタイミング（チェックポイント）で、抜き出したものである。これにより複雑な制御が必要となる同期制御が不要となり、稼働中の仮想マシンが１つであるので消費電力も低減する。
【０００８】
特許文献３は、障害発生時には、第１の計算機のディスク上のコピーイメージに含まれるファイルのリストと計算機の実行コンテキストとを第２の計算機にコピーし、ファイルのリストを参照して、コピーイメージを第１の計算機のディスクから第２の計算機のディスクにコピーする。これにより計算機の切り換え時間の短縮化を図っている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特許第４４６８４２６号公報
【特許文献２】特開２００９−０８０６９２号公報
【特許文献３】特開２００８−０３３４８３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
特許文献１の方式では、二重化されたハードウェアを常に同期させて動作しているため障害発生時の計算機切り換えによる動作復帰は高速であるが、動作中の２台の仮想計算機を同期情報に従って同期させるために複雑な制御が必要である。さらに、常に２つの仮想計算機を動作させるため、仮想計算機２台分の電力を消費する。また、１システムあたりの物理計算機が２台必要となるためシステムコストがかさむ。
【００１１】
特許文献２の方式では、動作中の仮想マシンのスナップショットを共有ディスク装置にコピーし、計算機の切り換え処理のためにこの共有ディスク装置上からスナップショットを読み出すため、系の切り換え時間が長くなってしまう。
【００１２】
仮想計算機が稼働するフォールトトレラント計算機システムにおいて、システムコストを抑えるために特別なハードウェアを使用せずに、ソフトウェアによる系の切り換えを行う場合、切り換え時間の短縮と消費電力の低減を両立させることがポイントとなる。
【００１３】
特許文献３に記載の例は、そのための一つの方法を提示しているが、切り換え直後の計算機にはファイルのリストしかないため、すぐに処理を開始しようとしても参照するデータを含むファイルが使用できる状態になっていない。そのため、処理に必要なファイルをオンデマンドでコピー要求するという手間と時間がかかってしまう。そのためシステムユーザにとっては実質的な系の切り換え時間が十分に短縮されたとは言い難い。
【００１４】
本発明は、上記の事情に鑑みてなされたものであり、特別なハードウェアを使用せずに、簡便且つ高速に系の切り換えが可能な低消費電力のフォールトトレラント計算機システム、フォールトトレラント計算機システムの制御方法、及びフォールトトレラント計算機システムの制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記の目的を達成するために、本願発明の第１の観点に係るフォールトトレラント計算機システムは、
ゲストOSを備える仮想計算機が稼働し、第１のメモリ及び第１の転送部を備える第１の計算機と、第２のメモリ及び前記第１の転送部から転送されたデータを受信する第２の転送部を備える第２の計算機と、を含むフォールトトレラント計算機システムであって、
前記第１の計算機は、
前記第２の計算機での前記ゲストOSの起動のタイミングとは独立に、予め設定された時点における前記ゲストOSの処理内容全体のスナップショットを作成し、前記第１のメモリに保存し、保存された前記スナップショットを、前記第２のメモリに転送する指示を前記第１の転送部に出すと共に、前記第１のメモリに、前記予め設定された時点を起点として設定される複数の第１のタイミングのそれぞれにおける、一つ前の前記第１のタイミングからの前記仮想計算機のスナップショットの差分情報を保存し、その都度、前記第１の転送部に、前記第１の転送部及び前記第２の転送部を介して前記第１のメモリに保存された前記差分情報を前記第２のメモリに転送する指示を出す第１のスナップショットマネージャと、
前記第１の計算機のエラー情報を取得し、前記第１の転送部に対して、前記エラー情報を前記第２の計算機に転送する指示を出す第１のエラーハンドラと、を備え、
前記第１のタイミングは、前記起点から一定時間毎、前記差分情報の量が所定量に到達した時点毎、及び前記差分情報の量が所定量に到達した時点と前回の前記第１のタイミングからの経過時間が所定の最大時間に達した時点とのいずれか早い方の時間毎のいずれかのタイミングであり、
前記第２の計算機は、
前記第１の転送部及び前記第２の転送部を介して転送された前記エラー情報に基づき、前記第１の計算機の障害発生の有無を判断し、障害発生有と判断したとき、計算機切り換え通知を出力する第２のエラーハンドラと、
前記第１の転送部及び前記第２の転送部を介して前記第２のメモリに転送され保存されている前記スナップショットと最初の前記差分情報とに基づき新たな前記スナップショットを生成し、前記第２のメモリに保存し、２回目以降に転送された前記差分情報の受信の都度、該差分情報と前記第２のメモリに保存されている前記スナップショットとに基づき、更に新たな前記スナップショットを生成し、前記第２のメモリに保存するとともに、前記第２のエラーハンドラが出力した前記計算機切り換え通知を受信したとき、前記第２のメモリに保存された前記スナップショットに基づき、前記第２の計算機でゲストOSを起動する第２のスナップショットマネージャと、
を備える、
ことを特徴とする。
【００１６】
本願発明の第２の観点に係るフォールトトレラント計算機システムの制御方法は、
ゲストOSを備える仮想計算機が稼働し、第１のメモリ及び第１の転送部を備える第１の計算機と、第２のメモリ及び前記第１の転送部から転送されたデータを受信する第２の転送部を備える第２の計算機と、を含むフォールトトレラント計算機システムの制御方法であって、
前記第１の計算機が実行する、
前記第２の計算機での前記ゲストOSの起動のタイミングとは独立に、予め設定された時点における前記ゲストOSの処理内容全体のスナップショットを作成し、前記第１のメモリに保存する第１のスナップショット保存ステップと、
前記スナップショットを、前記第１の転送部を介して、前記第２の計算機に転送するスナップショット転送ステップと、
前記第１のメモリに、前記予め設定された時点を起点として設定される複数の第１のタイミングのそれぞれにおける、一つ前の前記第１のタイミングからの前記仮想計算機のスナップショットの差分情報を保存する第１の差分情報保存ステップと、
前記第１のメモリに保存された前記差分情報を、前記第１の転送部を介して前記第２の計算機に転送する転送ステップと、
前記第１の計算機のエラー情報を取得し、前記第１の転送部を介して、前記エラー情報を前記第２の計算機に転送する指示を出すエラー情報取得ステップと、
前記エラー情報取得ステップでの前記転送する指示により、前記エラー情報を前記第１の転送部を介して前記第２の計算機に転送するエラー情報転送ステップと、
を備え、
前記第１のタイミングは、前記起点から一定時間毎、前記差分情報の量が所定量に到達した時点毎、及び前記差分情報の量が所定量に到達した時点と前回の前記第１のタイミングからの経過時間が所定の最大時間に達した時点とのいずれか早い方の時間毎のいずれかのタイミングであり、
前記第２の計算機が実行する、
前記第１の計算機から転送された前記スナップショットを、前記第２の転送部を介して受信し、受信した前記スナップショットを前記第２のメモリに保存する第２のスナップショット保存ステップと、
前記第２の計算機に転送された前記差分情報を、前記第２の転送部を介して受信し、受信した前記差分情報を前記第２のメモリに保存する第２の差分情報保存ステップと、
前記第１の計算機から転送され、前記第２のメモリに保存された前記スナップショットと最初の前記差分情報とに基づき新たな前記スナップショットを生成し、前記第２のメモリに保存し、２回目以降に転送された前記差分情報の受信の都度、該差分情報と前記第２のメモリに保存された前記スナップショットとに基づき、更に新たな前記スナップショットを生成し、前記第２のメモリに保存するスナップショット生成・保存ステップと、
前記第２の計算機に転送された前記エラー情報を前記第２の転送部を介して受信し、受信した前記エラー情報に基づき、前記第１の計算機の障害発生の有無を判断し、障害発生有と判断したとき、計算機切り換え通知を出力する計算機切り換え通知ステップと、
前記計算機切り換え通知がなされたとき、前記第２のメモリに保存された前記スナップショットに基づき、前記第２の計算機でゲストOSを起動するゲストOS起動ステップと、
を備えることを特徴とする。
【００１７】
本願発明の第３の観点に係るフォールトトレラント計算機システムの制御プログラムは、
ゲストOSを備える仮想計算機が稼働し、第１のメモリ及び第１の転送部を備える第１の計算機と、第２の計算機と、を含むフォールトトレラント計算機システムの制御プログラムであって
前記第２の計算機での前記ゲストOSの起動のタイミングとは独立に、予め設定された時点における前記ゲストOSの処理内容全体のスナップショットを作成し、前記第１のメモリに保存するスナップショット保存ステップと、
前記スナップショットを、前記第１の転送部を介して、前記第２の計算機に転送するスナップショット転送ステップと、
前記第１のメモリに、前記予め設定された時点を起点として設定される複数の前記第１のタイミングのそれぞれにおける、一つ前の前記第１のタイミングからの前記仮想計算機のスナップショットの差分情報を保存する差分情報保存ステップと、
前記第１のメモリに保存された前記差分情報を、前記第１の転送部を介して前記第２の計算機に転送する転送ステップと、
前記第１の計算機のエラー情報を取得し、前記第１の転送部を介して、前記エラー情報を前記第２の計算機に転送する指示を出すエラー情報取得ステップと、
前記エラー情報取得ステップでの前記転送する指示により、前記エラー情報を前記第１の転送部を介して前記第２の計算機に転送するエラー情報転送ステップと、
を前記第１の計算機に実行させ、
前記第１のタイミングは、前記起点から一定時間毎、前記差分情報の量が所定量に到達した時点毎、及び前記差分情報の量が所定量に到達した時点と前回の前記第１のタイミングからの経過時間が所定の最大時間に達した時点とのいずれか早い方の時間毎のいずれかのタイミングである、
ことを特徴とする。
【００１８】
本願発明の第４の観点に係るフォールトトレラント計算機システムの制御プログラムは、
ゲストOSを備える仮想計算機が稼働する第１の計算機と、該第１の計算機から転送されるデータを受信する第２の転送部及び第２のメモリを備える第２の計算機と、を含むフォールトトレラント計算機システムの制御プログラムであって、
前記第２の計算機での前記ゲストOSの起動のタイミングとは独立に予め設定された時点における前記ゲストOSの処理内容全体のスナップショットであり、前記第１の計算機から転送された前記スナップショットを、前記第２の転送部を介して受信し、受信した前記スナップショットを前記第２のメモリに保存するスナップショット保存ステップと、
前記第１の計算機から転送される差分情報であり、前記予め設定された時点を起点として設定される複数の第１のタイミングのそれぞれにおける、一つ前の前記第１のタイミングからの前記仮想計算機のスナップショットの前記差分情報を、前記第２の転送部を介して受信し、受信した前記差分情報を前記第２のメモリに保存する差分情報受信・保存ステップと、
前記第１の計算機から転送され、前記第２のメモリに保存された前記スナップショットと最初の前記差分情報とに基づき新たな前記スナップショットを生成し、前記第２のメモリに保存し、２回目以降に転送された前記差分情報の受信の都度、該差分情報と前記第２のメモリに保存された前記スナップショットとに基づき、更に新たな前記スナップショットを生成し、前記第２のメモリに保存するスナップショット生成・保存ステップと、
前記第１の計算機から転送される、前記第１の計算機のエラー情報を、前記第２の転送部を介して受信するエラー情報受信ステップと、
受信した前記エラー情報に基づき、前記第１の計算機の障害発生の有無を判断し、障害発生有と判断したとき、計算機切り換え通知を出力する計算機切り換え通知ステップと、
前記計算機切り換え通知がなされたとき、前記第２のメモリに保存された前記スナップショットに基づき、前記第２の計算機でゲストOSを起動するゲストOS起動ステップと、
を前記第２の計算機に実行させ、
前記第１のタイミングは、前記第１の計算機で設定されたタイミングであり、前記起点から一定時間毎、前記差分情報の量が所定量に到達した時点毎、及び前記差分情報の量が所定量に到達した時点と前回の前記第１のタイミングからの経過時間が所定の最大時間に達した時点とのいずれか早い方の時間毎のいずれかのタイミングである、
ことを特徴とする。
【発明の効果】
【００１９】
本発明によれば、特別なハードウェアを使用せずに、簡便且つ高速に系の切り換えを行うことが可能な低消費電力のフォールトトレラント計算機システム、フォールトトレラント計算機システムの制御方法、及びフォールトトレラント計算機システムの制御プログラムを提供することができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の実施形態に係るフォールトトレラント計算機システムの最小構成例を示すブロック図である。
【図２】実施形態に係るフォールトトレラント計算機システムの構成例を示すブロック図である。
【図３】（a）実施形態に係るフォールトトレラント計算機システムの計算機切り換え処理のうちアクティブ系の処理Aを示すフローチャート、(b)実施形態に係るフォールトトレラント計算機システムの計算機切り換え処理のうちアクティブ系の処理Bを示すフローチャートである。
【図４】（a）実施形態に係るフォールトトレラント計算機システムの計算機切り換え処理のうちスタンバイ系の処理Cを示すフローチャート、（b）実施形態に係るフォールトトレラント計算機システムの計算機切り換え処理のうちスタンバイ系の処理Dを示すフローチャートである。
【図５】実施形態に係るフォールトトレラント計算機システムの計算機切り換え処理チェックポイントの設定例を示す図である。
【図６】実施形態に係るフォールトトレラント計算機システムの計算機切り換え処理チェックポイントの他の設定例を示す図である。
【図７】実施形態に係るフォールトトレラント計算機システムの計算機切り換え処理チェックポイントの更に他の設定例を示す図である。
【図８】実施形態に係るフォールトトレラント計算機システムの変形構成例を示すブロック図である。
【発明を実施するための形態】
【００２１】
（実施形態）
本発明の実施形態に係るフォールトトレラント計算機システムは、少なくとも２台の物理的計算機を有し、各物理的計算機上で仮想計算機が稼働するように構成されている。以下では２台の物理的計算機を有する場合を例に説明する。ここで物理的計算機とは、仮想計算機と区別するために用いるもので、実際の計算機という意味である。図１及び図２は、フォールトトレラント計算機システムの構成例を示す。図１及び図２に示すように、フォールトトレラント計算機システムを構成する２台の物理的計算機の一方をアクティブ系１a、他方をスタンバイ系１bと呼ぶ。アクティブ系１aはユーザにサービスを提供している稼働中の仮想計算機を有する計算機、スタンバイ系１bは、障害発生時に切り替わって稼動を開始するために待機中の仮想計算機を有する計算機である。それぞれの系の仮想計算機に関する構成要素は基本的には同じである。
【００２２】
まず図１について説明する。図１は本発明の実施形態に係るフォールトトレラント計算機システムの最小の構成例を示す。構成要素の番号は図２と対応して付されているため図１では連続番号となっていない。
【００２３】
アクティブ系１aは、ホストOS（図示省略）と、ゲストOS３aと、メモリ４aと、スナップショットマネージャ８aと、転送部１１aとを備え、ゲストOS３aの動作により仮想計算機として動作する。
【００２４】
スタンバイ系１bはホストOS（図示省略）と、メモリ４bと、スナップショットマネージャ８bと、転送部１１bとを備え、実際の計算機として動作する。ゲストOS３bは、最初は動作していないので破線で示されている。
【００２５】
メモリ４aは、ホストOS及びゲストOS３aの双方からアクセス可能で、メモリ４bはスタンバイ系１bのホストOSからアクセス可能である。なお、メモリ４bは、スタンバイ系１bでゲストOS３bが起動した後は、ゲストOS３bからもアクセス可能である。
【００２６】
スナップショットマネージャ８aは、ホストOS及びゲストOS３a上で動作し、後述するゲストOS３aのスナップショットの差分情報を所定のタイミングでゲストOSスナップショット１０aとしてメモリ４aに保存する。
【００２７】
転送部１１aは、メモリ４aに保存されたゲストOSスナップショット１０aをスタンバイ系１bに転送する。
【００２８】
転送部１１bは、転送部１１aから転送されてきたゲストOSスナップショット１０aを受信し、ゲストOSスナップショット１０bとしてメモリ４bに保存する。
【００２９】
スナップショットマネージャ８bは、ホストOS上で動作し、メモリ４bに保存されたゲストOSスナップショット１０bに基づき、差分情報と一体化して完全なゲストOSスナップショット１０bを生成し、メモリ４bに保存するとともに、後述する所定のタイミングで、例えばアクティブ系１aが停止したと判定された場合に、所定のプログラムを起動し、この完全なゲストOSスナップショット１０bに基づきゲストOS３bを起動する。ゲストOS３bの起動によりスタンバイ系１bは仮想計算機が機能するアクティブ系１aとして動作するようになる。
【００３０】
図２は、図１をより詳細に示したものである。図２ではホストOS２a、２bを明示している。本実施形態を図２に従ってより詳細に説明する。
【００３１】
アクティブ系１aは、アクティブ系１aの動作を管理するホストOS２aと、仮想計算機のOSであるゲストOS３aと、ホストOS２a及びゲストOS３aの両方からアクセス可能なメモリ４aと、FT（Fault Tolerant）モジュール５aと、RDMA（Remote Direct Memory Access）ドライバ６aと、データ転送部７aと、を備える。ゲストOS３aと、ホストOS２aとはアクティブ系１aのハードウェアを構成するCPU（Central Processing Unit；図示を省略）が、RAM(Random Access Memory)、ROM(Read Only Memory)等（いずれも図示を省略）を利用してそれぞれ所定のプログラムを動作させることにより機能する。FTモジュール５a及びRDMA（Remote Direct Memory Access）ドライバ６aについても同様である。RDMAドライバ６a及びデータ転送部７aは転送部１１aを構成する。なお、ホストOS２aとゲストOS３aとは、例えばハイパーバイザを通して接続される。仮想計算機の方式によるが、ハイパーバイザで接続する代わりにゲストOS３aがホストOS２a上で動作してもよい。
【００３２】
スタンバイ系１bは、スタンバイ系１bの動作を管理するホストOS２bと、ホストOS２b及び起動後のゲストOS３bの両方からアクセス可能なメモリ４bと、FTモジュール５bと、RDMAドライバ６bと、データ転送部７bと、を備える。ゲストOS３b及びホストOS２bはスタンバイ系１bのハードウェアを構成するCPUが、RAM、ROM等（いずれも図示を省略）を利用してそれぞれ所定のプログラムを動作させることにより機能する。FTモジュール５b及びRDMAドライバ６bについても同様である。ゲストOS３bは未だ起動していない。そのため図１ではゲストOS３bを破線で示した。RDMAドライバ６b及びデータ転送部７bは転送部１１bを構成する。
【００３３】
アクティブ系１aとスタンバイ系１bとは、転送部１１aと転送部１１bとで構成される通信手段を介して互いに接続されている。具体的にはデータ転送部７aと７bとが通信回線で接続されており、この回線を通してデータや各種情報の授受が可能である。
【００３４】
メモリ４a、４bは、物理計算機の記憶装置で、現在よく使用されているディスク装置等の外部記憶装置に比べて高速に情報の記録・保存、読み出しができる、例えば主記憶装置である。実行中のプログラム、データ、及び後述するゲストスナップショットなどを記憶・保存する。
【００３５】
FTモジュール５aは、フォールトトレラント計算機システムを実現するための機能を有するモジュールであり、スナップショットマネージャ８aとエラーハンドラ９aとを備え、ホストOS２a上で動作する。すなわち、FTモジュール５a、従ってスナップショットマネージャ８aとエラーハンドラ９aとは、アクティブ系１aの備えるCPUがそれぞれに関連するプログラムを実行することによりホストOS２a上で機能する。
【００３６】
スナップショットマネージャ８aは、チェックポイントの管理、ゲストOS３aが利用・管理するメモリの保存内容の変更（書き換え）情報の取得、管理、ゲストOSスナップショット１０a（後述）を転送する間隔の決定、決定された転送間隔に対応して、メモリ４aに保存するゲストOSスナップショット１０aの内容の決定と、メモリ４aへの保存、及びRDMAドライバ６aに対してのメモリ４aに保存されているゲストOSスナップショット１０aの転送指示を行う。ゲストOS３aが利用・管理するメモリの保存内容の変更情報をCPUが管理するメモリ４aのダーティページフラグから取得する方法は一般的に知られており具体的な取得方法の詳細な説明は省略する。ゲストOSスナップショット１０aとは、ゲストOS上で稼働している計算機のスナップショットを意味する。また、ダーティページフラグとはデータが変更されたが保存されていないことを意味するフラグである。
【００３７】
エラーハンドラ９aは、アクティブ系１aの障害をできるだけ早くスタンバイ系１bに伝えて系を切り換えるためのエラー情報を、RDMAドライバ６a、データ転送部７aを介してスタンバイ系１bに送信する。スタンバイ系１bがアクティブ系１aの障害を検出するために、例えばハートビート信号を用いることがある。この場合は、エラーハンドラ９aは一定周期のハートビート信号をデータ転送部７aを介してスタンバイ系１bに送る。スタンバイ系１bのデータ転送部７bは、ハートビート信号が一定時間こなかった場合に、障害が発生した、すなわちアクティブ系１aが動作を停止したと判断する。
【００３８】
RDMAドライバ６aは、ホストOS２a上で動作し、FTモジュール５aからの指示を受け、データ転送部７aがエラー情報又はメモリ４aに保存されているゲストOSスナップショット１０aをスタンバイ系１bに転送するように、データ転送部７aを制御する。FTモジュール５aからの指示とは、スナップショットマネージャ８aからのゲストOSスナップショット１０aの転送指示や、エラーハンドラ９aからのエラー情報転送の指示である。
【００３９】
データ転送部７aは、ハードウェアで構成されており、RDMAドライバ６aの制御によりゲストOSスナップショット１０a又はエラー情報をスタンバイ系１bに転送する。具体的にはデータ転送部７aは、RDAMドライバ６aからメモリ保存内容のコピーに必要な情報であるアドレスやレングス、及びエラー情報を受け取り、その情報に応じてデータ転送を行う。ゲストOSスナップショット１０aの転送はゲストOS３aのバックグラウンド処理により実行される。
【００４０】
データ転送部７bは、データ転送部７aから転送されてきたゲストOSスナップショット１０aをメモリ４b内にゲストOSスナップショット１０bとして保存し、転送終了をRDMAドライバ６bに通知する。また、同様に転送されてきたエラー情報や自ら検出したエラー情報をRDMAドライバ６bに送る。
【００４１】
データ転送部７a、７bとその間の接続は、そのデータ転送速度により、設定可能なチェックポイント間隔に影響する。チェックポイントとは、ゲストOSスナップショット１０aをメモリ４aに保存するタイミングのことであり、ここではゲストOSスナップショット１０aをスタンバイ系１bに転送するタイミングをも意味する。一方、計算機の切り換えの際に計算機で稼働中の処理を過去のどの時点まで戻すかを表す時間であるロールバック時間はチェックポイント間隔に影響される。そのため、ロールバック時間を可能な限り短縮するためにはチェックポイント間隔を小さくする必要がある。従って、この接続には、データ転送速度の速い高速のハードウェアを採用することが望ましい。この接続は一般のネットワーク(現在の技術ではギガビットや１０ギガビットのネットワーク)を介しても可能であるが、PCI ExpressなどのIOスロットでDMA（Direct Memory Access）転送を高速に処理する専用のハードウェアを設けてもよい。あるいは、I/O（Input/Output）スロットを通さず、最近のCPUで実現されているようなCPU間を直接接続する方法であってもよい。
【００４２】
RDMAドライバ６bは、データ転送部７bからの通知をFTモジュール５bに送る。
【００４３】
FTモジュール５bは、アクティブ系１a同様、フォールトトレラント計算機システムを実現するための機能を有するモジュールであり、スナップショットマネージャ８bとエラーハンドラ９bとを備え、ホストOS２b上で動作する。
【００４４】
FTモジュール５bに含まれるスナップショットマネージャ８b及びエラーハンドラ９bは、ゲストOSスナップショット１０aをゲストOSスナップショット１０bとしてメモリ４bに保存したという転送終了通知又はエラー情報を受け取り、以下の処理を行う。
【００４５】
エラーハンドラ９bは、エラー情報を受け、障害発生、すなわちアクティブ系１aの動作停止の有無を判定し、判定結果が「停止」の場合、スナップショットマネージャ８bに対して系の切り換え信号を出してゲストOS３bの起動をトリガする。例えば、ハートビート信号を利用する場合は、エラーハンドラ９bは、アクティブ系１aから一定時間以上ハートビート信号がこなかった場合にはRDMAドライバ６bを通してアクティブ系１aに障害が発生したことを知りエラー処理を実行する。
【００４６】
スナップショットマネージャ８bは、ゲストOSスナップショット１０aをゲストOSスナップショット１０bとしてメモリ４bに保存したという通知を受けて、メモリ４bにこれまで保存してあったゲストOSスナップショット１０bと合わせて一つの最新で完全なゲストOSスナップショット１０bにしてメモリ４bに保存するという処理を行う。また、スナップショットマネージャ８bは、エラーハンドラ９bからのゲストOS３bの起動トリガを受け、ゲストOS３b起動用のプログラムを起動することにより、メモリ４bに保存されているゲストOSスナップショット１０bに基づき、ゲストOS３bを起動する。ゲストOS３bの起動後はスタンバイ系はアクティブ系に変わるため、アクティブ系１aでスナップショットマネージャ８aが実行している内容を実行する。なお、ホストOS２bとゲストOS３bとは、アクティブ系１aと同様に、例えばハイパーバイザを通して接続されるか、又は、ハイパーバイザで接続する代わりにゲストOS３bがホストOS２b上で動作してもよい。
【００４７】
次に、図３及び図４に示すフローチャートに従って本システムの計算機切り換え動作について説明する。図３（a）はアクティブ系１aの処理A内容を、図３(b)はアクテイブ系１aの処理Bの内容を示す。図４（a）はスタンバイ系１bの処理Cの内容を、図４（b）はスタンバイ系１bの処理Dの内容を示す。処理A、処理CはゲストOSスナップショット１０aをアクティブ系１aからスタンバイ系１bにコピーする際のそれぞれの計算機における処理を、処理B、処理Dはアクティブ系１aでのエラー情報の取得、転送と、スタンバイ系１bでのエラー情報の処理を示す。
【００４８】
前提条件として、フォールトトレラント計算機システム、すなわち、アクティブ系１a、スタンバイ系１bは起動しているとする。アクティブ系１aの起動とは、ホストOS２aとゲストOS３aの双方が動作状態になることを含む。具体的には、アクティブ系１aでは、電源投入により、まず、ホストOS２aが動作状態となる。ゲストOS３aは、ホストOS２aが動作状態となった後、動作状態となる。なお、ユーザーからの指示により、ゲストOS３aを動作状態にしてもよい。一方、スタンバイ系１bでは、電源投入により、ホストOS２bが動作状態となるが、ゲストOS３bは起動していない。両系は通信回線で接続されている。
【００４９】
始めに、アクティブ系１aでの処理Aについて図３（a）に基づき説明する。データ転送部７aにより、両系のハードウェアが通信回線で接続されていることが確認されると、アクティブ系１aのスナップショットマネージャ８aは、ゲストOS３aの処理内容全体のスナップショットを作成し、メモリ４aにゲストOSスナップショット１０aとして保存し、転送部１１a、すなわちRDMAドライバ６aとデータ転送部７aとを介してこれをスタンバイ系１bに転送する（ステップS10）。ゲストOS３aの処理内容全体のスナップショットとは、ゲストOS３aで使用する全てのファイルと所定の時点での処理用メモリの内容及びCPUのコンテキストを言う。ゲストOS３aの処理内容全体を他系にコピーする方法は仮想化環境のマイグレーションの処理などで利用され、特開2010-039685号公報などに掲載されておりよく知られているので説明を省略する。
【００５０】
次に、アクティブ系１aのスナップショットマネージャ８aは、所定時間、ゲストOSスナップショット１０aの内容に関する変更情報を取得し蓄積する（ステップS11）。この所定時間が経過した時点をチェックポイントと呼ぶ（詳細は後述）。最初のチェックポイントの始点は、ゲストOS３aの処理内容全体のスナップショットを作成した時点である。すなわち、スナップショットマネージャ８aは、チェックポイント毎に、始点又は前回のチェックポイントから、そのチェックポイントまでの間のゲストOSスナップショット１０a の変更分を取得し蓄積する。
【００５１】
次に、アクティブ系１aでは、例えばスナップショットマネージャ８aが、チェックポイントの判定（ステップS12）を行う。チェックポイントの判定とは、チェックポイントの始点又は前回のチェックポイントからの経過時間が、所定時間に達したかどうか、すなわち次のチェックポイントに達したかどうかを判定することを言う。チェックポイント設定の詳細は後述する。
【００５２】
チェックポイントに達していなければ（ステップS12；NO）、ステップS11の処理に戻り、チェックポイントに達していれば（ステップS12；YES）、スナップショットマネージャ８aは、蓄積した変更情報に、そのチェックポイントでの処理用メモリ内容とCPUのコンテキスト情報を加えたものを差分情報としてメモリ４aに保存し、RDMAドライバ６aに対して、この差分情報をスタンバイ系１bに転送する指示を出す。この指示を受けて、RDMAドライバ６aはデータ転送部７aを介してメモリ４aに保存されている差分情報をスタンバイ系１bに転送する制御を行う（ステップS13）。
【００５３】
アクティブ系１aでは、その後、運転を停止する旨の操作がなされていないかどうかを判定し（ステップS14）、運転停止の操作がなされていれば（ステップS14；YES）、処理を終了する。運転停止の操作がなされていなければ（ステップS14；NO）、ステップS11に戻り処理を続行する。なお、ここで言う運転停止は通常の操作による運転停止であり、異常発生による運転停止ではない。
【００５４】
次に、アクティブ系１aでの処理Bについて図３（b）に基づき説明する。アクティブ系１aでは、エラーハンドラ９aがエラー情報を取得し、これをデータ転送部７aを介してスタンバイ系１bに転送する（ステップS20）。この処理Bは上述の処理Aと並行して行われる。
【００５５】
次に、スタンバイ系１bでの処理Cの内容について図４（a）に基づき説明する。スタンバイ系１bでは、図３（a）のステップS11でアクティブ系１a から転送されたゲストOSスナップショット１０aの全体情報を、転送部１１b、すなわちデータ転送部７bが受信し（ステップS30）、RDMA６bの制御により、メモリ４bにゲストOSスナップショット１０bとして保存する（ステップS31）。これでゲストOSスナップショット１０aの全体情報について、アクティブ系１aからスタンバイ系１bへのコピーが完了する。
【００５６】
その後、スタンバイ系１bでは、図３（a）のステップS13で、アクティブ系１aから転送された差分情報を、転送部１１b、すなわちデータ転送部７bが受信し（ステップS32）、RDMA６bの制御により、メモリ４bに保存する。データ転送部７bは、メモリ４bへの差分情報の保存が完了すると保存完了の通知をRDMAドライバ６bを介してスナップショットマネージャ８bに送る。これを受けたスナップショットマネージャ８bは、これまでに保存されていたゲストOSスナップショット１０bに、今回保存された差分情報を加えて、あるいは上書きして、一つの完全なゲストOSスナップショット１０bにして、これをメモリ４bに保存する（ステップS33）。
【００５７】
その後、スタンバイ系１bでは、系の運転を停止する旨の操作がなされていないかどうかを判定する（ステップS34）。運転停止の操作がなされていれば（ステップS34；YES）、スタンバイ系１bは図４（a）に示す処理を終了し、運転停止の操作がなされていなければ（ステップS34；NO）、ステップS32に戻り処理を続行する。アクティブ系１aの説明と同様に、ここで言う運転停止は通常の操作による運転停止であり、異常発生による運転停止ではない。
【００５８】
次に、スタンバイ系１bでの処理Dについて図４（b）に基づき説明する。スタンバイ系１bでは、データ転送部７bが、図３（b）のステップS20でアクティブ系１aから転送されるエラー情報を受信し（ステップS40）、エラーハンドラ９bは、このエラー情報に基づき、アクティブ系１aでの障害発生を検知し、計算機切り換えの要否を判定する（ステップS41）。
【００５９】
エラー情報としてハートビート信号を利用する場合は、データ転送部７aがハートビート信号をスタンバイ系１bに送信する（図３（b）のステップS20）。この場合は、ステップS41は、エラーハンドラ９bが、一定時間以上ハートビート信号がこなかったかどうかを検出するという処理になる。エラーハンドラ９bは、この検出結果によりアクティブ系１aでの障害発生の有無を判定し、計算機切り換えの要否を判定する（ステップS41）。
【００６０】
計算機の切り換えは不要と判定されたときは（ステップS41；NO）、スタンバイ系１bでは、系の運転を停止する旨の操作がなされていないかどうかを判定する（ステップS42）。運転停止の操作がなされていれば（ステップS42；YES）、スタンバイ系１bは図４（b）に示す処理を終了し、運転停止の操作がなされていなければ（ステップS42；NO）、ステップS40に戻り処理を続行する。
【００６１】
スタンバイ系１bにおいて、エラーハンドラ９bは、計算機の切り換えが必要と判定した場合（ステップS41；YES）、スナップショットマネージャ８bに計算機切り換えを指示する。スナップショットマネージャ８bはこの指示により、メモリ４bに保存されているゲストOSスナップショット１０bに基づき、ゲストOS３bを起動して（ステップS43）図４（b）に示す処理を終了する。このゲストOS３bはアクティブ系１aから前回コピーされた時点のゲストOS３aと同じものである。ゲストOSスナップショット１０aのコピーが途中の場合や、ゲストOS３bの復元が不十分な場合も想定されるため、スナップショットマネージャ８aが管理するゲストOS３aのコピーを複数作成し、１つのゲストOSスナップショット１０bは完全な状態を保持して、常に完全で新しいゲストOSスナップショット１０bを用いてゲストOS３bを起動することが望ましい。ゲストOS３bの起動により、スタンバイ系１bは仮想計算機として動作を開始し、ゲストOS３bの起動に使用されるゲストOSスナップショット３bに対応するゲストOSスナップショット３aが、アクティブ系１aで作成された時点の処理内容を引き継いで実行する。この際、物理計算機の画面やキーボードの接続なども適宜行われる。図４（b）の処理Dは図４（a）の処理Cと並行して行われる。
【００６２】
アクティブ系１aが異常により運転を停止し、スタンバイ系１bがアクティブ系として機能するようになった後は、スタンバイ系１bは、図３（a）、（b）に示す処理内容を含め、アクティブ系１aと同様の処理を実行する。一方、アクティブ系１aは、異常により運転が停止した後、異常が修復され再起動されたときは、スタンバイ系となり、図４（a）、（b）に示す処理を実行する。
【００６３】
次に、チェックポイントについて説明する。チェックポイントの決定は、計算機の処理を引き継ぐときのロールバック時間に大きく関わってくる。ロールバック時間が長いと、スタンバイ系に処理を引き継いだときにロールバックに相当する時間、同じ処理が２回繰り返されることになる。例えば、ユーザが動画を観ているときに障害が発生すると、映像が過去に巻き戻って再生されて見える。したがって、ロールバック時間を極力短くすることが重要である。ロールバックはチェックポイントを対象に決定される。
【００６４】
本発明では、最初はゲストOS３aの処理内容全体のスナップショットをスタンバイ系１bに転送するのである程度の転送時間がかかる。しかし、その後はチェックポイント毎に差分情報をスタンバイ系１bに転送するので、転送時間は短くて済む。そのためチェックポイント間隔を狭めることができ、その分、ロールバック時間を短くすることができる。また、差分情報を障害発生時に一括して転送するのではなく所定のチェックポイント毎に転送するので、計算機の切り換え時間の短縮化が促進される。
【００６５】
３ケースのチェックポイントの設定について説明する。
【００６６】
ケース１では、例えば、初回のゲストOSの処理内容全体のスナップショットを作成した時点でチェックポイントを設定し、その後一定時間毎にチェックポイントを設定する。図５はケース１を説明するための図である。図の横軸は時間軸である。Ti-1、Ti 、Ti+1 等がチェックポイントに該当する。チェックポイント間の間隔は一定時間tｃである。チェックポイントTi-1からTiまでに内容変更のあった分としてメモリ４aに保存された差分量Qi（変更情報）、すなわちダーテイーページとなったメモリの差分に対応するゲストOSスナップショット１０aを含む差分情報がスタンバイ系１bに転送され、メモリ４bにコピーされる。このコピー時間はほぼ転送時間で決まり、転送対象となる差分量に依存する。差分量はそれぞれの時間tc間で蓄積された量であるため、各チェックポイントによって変化する。従って、チェックポイント間の間隔tcは想定される最大の転送時間よりも長く設定される。
【００６７】
ケース１では差分情報のみを転送するため、ゲストOSの処理内容の全体をその都度転送する場合に比べて転送情報量が小さくなり転送時間も短くなる。そのため、チェックポイントの間隔を小さくすることができ、ロールバック時間を短縮することができる。しかし、次のような問題点がある。
【００６８】
例えば、図５で「障害発生」として矢印で示すところでアクティブ系１aに障害が発生したことが検知され、その時点で計算機の切り換え処理、すなわち系の復帰処理が開始されたとする。このとき、メモリ４bに保存されている最新のゲストOSスナップショット１０bはチェックポイントTiで取得されたスナップショット、すなわち差分量Qiの分であるから、復帰処理に当たり必要なロールバックは図５の矢印で「ロールバック」として示すTi時点である。このとき差分量Qiが小さい場合は、そのコピーに要する時間tiはチェックポイント間の時間tCよりもずっと小さくなる場合がある。この場合、tC−tiは顕著な空き時間となり本来不要なロールバック時間となる。
【００６９】
このような問題を解決するためには差分量が所定量蓄積されたことを基準にしてチェックポイントを設定すればよい。これがケース２である。図６にその例を示す。ケース２では差分量は一定なのでコピー時間はチェックポイントによらず一定時間になるが、差分量を所定量蓄積するために要する時間が時期により異なるためにチェックポイント間隔に長短が発生する。
【００７０】
この場合は差分量に応じてチェックポイントが設定されるのでケース１で問題になったような空き時間は生じない。しかし、障害発生の前の差分量が少なく、所定量蓄積するのに長時間（tCi+2）かかったとすると、ロールバック時間は障害発生時の直近のチェクポイントTi+3より一つ前のチェックポイントTi+2に溯ることになり、一定時間毎にチェックポイントを設定した場合よりもロールバック時間が大きくなる場合もありうることになる。
【００７１】
図７はこれを解決するためのチェックポイントの設定方法ケース３を示す。基本的な考え方はケース２の場合と同じであるが、チェックポイント間の時間の最大値をtmに設定し、これを超える場合は、前回のチェックポイントからtm経過した時点でチェクポイントを設定する。図７の最上段が図６のケース２に対応する場合で、その下の段に示すのがチェックポイント間の時間を最大tmに設定したケース３の場合である。このときのロールバック時間は障害発生時の直近のチェックポイントTi+3’からtmだけ溯ることになり、ケース２と比較するとTci+2−tmがロールバック短縮時間となる。
【００７２】
なお、エラーハンドラ７a、７bによる障害発生検知としてハートビート信号を利用する例を示したが、この方法だけでは、サービスの停止時間は最悪の場合、チェックポイントのロールバック時間にハートビート信号間隔の時間が足されたものになってしまう。本願発明のように障害発生時にスタンバイ系１bでアクティブ系１aの処理を短時間で引き継ぐ必要がある場合には、将来計算機の停止につながるような異常を検知し、この情報を含めてエラー情報としてスタンバイ系１bに通知してもよい。これによりスタンバイ系１bのエラーハンドラ９bはアクティブ系１aで近い将来システムダウンが発生することを認識し、ゲストOS３bを立ち上げることができる。これにより、フォールトトレラント計算機システムはシステムが停止する前に系の切り換えを行うことができる。
【００７３】
このような障害発生検知のために、メモリ４aのコレクタブルエラーの傾向を収集するという例が考えられる。このコレクタブルエラーの傾向に合致するエラー情報が検知された場合には、あるメモリ故障が考えられ、近い将来システムダウンが発生する可能性があると判断できる。エラーハンドラ９a、９bが取り扱うエラーの種類については種々のものが考えられる。
【００７４】
なお、以上の説明ではエラーハンドラ９a、９bはそれぞれFTモジュール５a、５bに含まれているとしたが必ずしもこれに限る必要はない。例えば図８に例示するようにエラーハンドラ９a、９bをデータ転送部７a、７bに含めてもよい。
【００７５】
図８に示す構成により、データ転送部７a、７bを介して転送するデータに設けられたエラー情報ビット中に、エラーハンドラ９aで検出したエラー情報を動的に埋め込むことができる。これによりエラー情報をいち早くスタンバイ系１bに伝えることができる。
【００７６】
本発明のフォールトトレラント計算機システムは以上のように構成されているため、特別なハードウェアを使用していない。そのため簡便、安価にシステムを構築することができる。
【００７７】
また、チェックポイント毎に、差分情報の形でゲストOSスナップショット１０aをスタンバイ系１bのメモリ４bにゲストOSスナップショット１０bとしてコピーし、これまでのコピー分と一体にして保存している。そのため、アクティブ系１aに障害が発生したときは、ゲストOS３aに割り当てたメモリ領域のサイズによらず、スタンバイ系１bで高速にゲストOS３bを立ち上げ、系の切り換えを行うことができる。従って、ソフトウェア制御方式のフォールトトレラント計算機システムにおいて、フェイルオーバ時間を従来例よりも短くすることができ、障害発生後の復帰を高速に行うことができる。
【００７８】
差分情報の形でゲストOSスナップショット１０aを例えば主記憶装置であるメモリ４aからメモリ４bに直接コピーするので、ディスク装置等の外部記憶装置を介してコピーする場合と比べてより高速にコピーすることができる。
【００７９】
更に、系の切り換えが行われるまではゲストOS３bは稼働しておらず、１台分の仮想マシンだけが動作状態となるので、ロックステップ方式のフォールトトレラント計算機システムに比べ、少ない消費電力でフォールトトレラント計算機システムを実現できる。
【００８０】
また、ゲストOSスナップショット１０aを差分情報としたため、チェックポイントを一定時間ごととした場合、チェックポイントの時間間隔を短くすることができ、系の切り換え時のロールバック時間を短縮することができる。ロールバック時間はユーザにとっては系の切り換え時間に含まれると考えてよいのでこれを短縮できるということは、系の切り換えを実質的に高速化することになる。
【００８１】
チェックポイントを一定時間毎の設定でなく、差分情報であるゲストOSスナップショット１０aのデータ量が所定値になった時点に設定することにより、一定時間毎のチェックポイント設定の際に、差分情報量が少ない場合に余分なロールバック時間が含まれてしまうという問題を改善し、ロールバック時間の短縮を図ることができる。これにより系の切り換え時間を実質的により高速化できる。
【００８２】
更に、チェックポイントを、差分情報であるゲストOSスナップショット１０aのデータ量が所定値になるまでの時間と所定の最大時間間隔とのいずれか小さい方の時間で設定することにより、一定時間毎のチェックポイント設定時、及び差分情報の量が所定量になった時点でのチェックポイント設定時に発生する可能性のある余分なロールバック時間、及び所定時間より長いロールバック時間を共に短縮することができる。これにより系の切り換え時間を実質的により一層高速化できる。
【００８３】
なお、ケース１〜３に示したチェックポイントの設定については、仮想計算機を採用していないフォールトトレラント計算機システムに適用してもよく、その場合も上記と同様の効果を奏することができる。
【００８４】
また、このフォールトトレラント計算機システムでは、スタンバイ系の計算機がアクティブ系の仮想計算機上で動作するゲストOS３aの処理を引き継ぐため、ベースとなる物理計算機は何でも良く、ゲストOS３aが動作する要件を満たしているシステムであれば、最低限FTモジュール５a、５b、RDMAドライバ６a、６bをホストOS２a、２bにインストールすれば、フォールトトレラント計算機システムを実現できる。
【００８５】
更には、アクティブ系の物理計算機が複数台に対して、スタンバイ系の物理計算機が１台という構成も可能で、システムの利用効率を高めることができ、コスト、消費電力の低減を図ることができる。つまり、システムを二重化して動作するロックステップ方式のフォールトトレラント計算機システムでは、１つのシステムで実質２台分の物理計算機が必要となり、例えば１０システムのフォールトトレラント計算機システムでは２０台分のハードウェアが動作している。本願発明のフォールトトレラント計算機システムでは、アクティブ系に対して切り換え先のスタンバイ系の計算機は物理的に対である必要はない。そのため、１台の物理計算機上にスタンバイ系を集中させれば１０システムのフォールトトレラント計算機システムを１１台の物理計算機（１０アクティブ系＋１スタンバイ系）で構成することが可能となる。また、１台の物理計算機をアクティブ系として使用すると共に、別の計算機のスタンバイ系としても使用するという構成にすれば、１０システムのフォールトトレラント計算機システムを最低１０台の物理計算機で構成することができる。このように、空いている物理計算機を使って自由にシステム構成をすることが可能となる。
【００８６】
図３及び図４に示すフローチャートは本発明に係るフォールトトレラント計算機システムの動作内容を示すと共に、フォールトトレラント計算機システムの制御方法及び制御プログラムの内容をも示す。
【００８７】
図３及び図４に示すフォールトトレラント計算機システムの制御方法及び制御プログラムにおいても、これまで述べた効果と同様の効果を奏することができる。
【００８８】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００８９】
（付記１）
ゲストOSを備える仮想計算機が稼働し、第１のメモリ及び第１の転送部を備える第１の計算機と、第２のメモリ及び前記第１の転送部から転送されたデータを受信する第２の転送部を備える第２の計算機と、を含むフォールトトレラント計算機システムであって、
前記第１の計算機は、
前記第１のメモリに、所定の第１のタイミングにおける、一つ前の前記第１のタイミングからの前記仮想計算機のスナップショットの差分情報を保存させ、前記第１の転送部に、前記第１の転送部及び前記第２の転送部を介して前記第１のメモリに保存された前記差分情報を前記第２のメモリに転送する指示を出す第１のスナップショットマネージャを備え、
前記第２の計算機は、
前記第１の転送部及び前記第２の転送部を介して前記第２のメモリに転送された前記差分情報に基づき前記スナップショットを生成し、前記第２のメモリに保存するとともに、所定の第２のタイミングにおいて、前記第２のメモリに保存された前記スナップショットに基づき、前記第２の計算機でゲストOSを起動する第２のスナップショットマネージャを備える、
ことを特徴とするフォールトトレラント計算機システム。
【００９０】
（付記２）
前記第１のメモリ及び前記第２のメモリは、それぞれ、前記第１の計算機の主記憶装置及び前記第２の計算機の主記憶装置である、
ことを特徴とする付記１に記載のフォールトトレラント計算機システム。
【００９１】
（付記３）
前記第１の転送部は、
前記第１の計算機のデータの送信を行う第１のデータ転送部と、
該第１のデータ転送部を制御する第１のＲＤＭＡドライバと、を備え、
前記第２の転送部は、
前記第１のデータ転送部を介してデータの受信を行う第２のデータ転送部と、
該第２のデータ転送部を制御する第２のＲＤＭＡドライバと、を備え、
前記差分情報は、前記第１のＲＤＭＡドライバ及び前記第２のＲＤＭＡドライバの制御により前記第１のデータ転送部及び前記第２のデータ転送部を介して、前記第１のメモリから前記第２のメモリに直接転送される、
ことを特徴とする付記１又は２に記載のフォールトトレラント計算機システム。
【００９２】
（付記４）
前記第１の計算機は、
該第１の計算機のエラー情報を取得し、前記第１の転送部に対して、前記エラー情報を前記第２の計算機に転送する指示を出す、第１のエラーハンドラを備え、
前記第２の計算機は、
前記第１の転送部を介して送信され、前記第２の転送部を介して受信した前記エラー情報に基づき、前記第１の計算機の障害発生の有無を判断し、障害発生有と判断した時は計算機切り換え通知を前記第２のスナップショットマネージャに出力する第２のエラーハンドラを備え、
前記第２のタイミングは、前記第２のスナップショットマネージャが前記計算機切り換え通知を受信したときである、
ことを特徴とする付記１乃至３のいずれか１項に記載のフォールトトレラント計算機システム。
【００９３】
（付記５）
前記第１のエラーハンドラ及び前記第２のエラーハンドラはそれぞれ前記第１のデータ転送部及び前記第２のデータ転送部に組み込まれている、
ことを特徴とする付記４に記載のフォールトトレラント計算機システム。
【００９４】
（付記６）
前記エラー情報は、前記第１の計算機が停止したことを判断できる情報である、
ことを特徴とする付記４又は５に記載のフォールトトレラント計算機システム。
【００９５】
（付記７）
前記エラー情報は、前記第１の計算機の停止につながる恐れのある情報を含む、
ことを特徴とする付記４乃至６のいずれか１項に記載のフォールトトレラント計算機システム。
【００９６】
（付記８）
前記差分情報は、前記第１のタイミングにおける、一つ前の前記第１のタイミングからの、前記ゲストOSが利用する前記第１のメモリの保存データの変更内容と、前記ゲストOSの動作を担うCPUのコンテキスト情報とを含む、
ことを特徴とする付記１乃至７のいずれか１項に記載のフォールトトレラント計算機システム。
【００９７】
（付記９）
前記第１のタイミングは、一定時間毎に設定されたものである、
ことを特徴とする付記１乃至８のいずれか１項に記載のフォールトトレラント計算機システム。
【００９８】
（付記１０）
前記第１のタイミングは、前記差分情報の量が所定量に到達した時点に設定されたものである、
ことを特徴とする付記１乃至８のいずれか１項に記載のフォールトトレラント計算機システム。
【００９９】
（付記１１）
前記第１のタイミングは、前記差分情報の量が所定量に到達した時点及び前回の第１のタイミングからの経過時間が所定の最大時間に達した時点のいずれか早い方の時間に設定されたものである、
ことを特徴とする付記１乃至８のいずれか１項に記載のフォールトトレラント計算機システム。
【０１００】
（付記１２）
ゲストOSを備える仮想計算機が稼働し、第１のメモリ及び第１の転送部を備える第１の計算機と、第２のメモリ及び前記第１の転送部から転送されたデータを受信する第２の転送部を備える第２の計算機と、を含むフォールトトレラント計算機システムの制御方法であって、
前記第１のメモリに、所定の第１のタイミングにおける、一つ前の前記第１のタイミングからの前記仮想計算機のスナップショットの差分情報を保存するスナップショット保存ステップと、
前記第１のメモリに保存された前記差分情報を、前記第１の転送部及び前記第２の転送部を介して前記第２のメモリに転送する転送ステップと、
前記第２のメモリに転送された前記差分情報に基づき前記スナップショットを生成し、前記第２のメモリに保存するスナップショット生成・保存ステップと、
所定の第２のタイミングにおいて、前記第２のメモリに保存された前記スナップショットに基づき、前記第２の計算機でゲストOSを起動するゲストOS起動ステップと、を備える、
ことを特徴とするフォールトトレラント計算機システムの制御方法。
【０１０１】
（付記１３）
ゲストOSを備える仮想計算機が稼働し、第１のメモリ及び第１の転送部を備える第１の計算機と、第２の計算機と、を含むフォールトトレラント計算機システムの制御プログラムであって
前記第１のメモリに、所定の第１のタイミングにおける、一つ前の第１のタイミングからの前記仮想計算機のスナップショットの差分情報を保存するスナップショット保存ステップと、
前記第１のメモリに保存された前記差分情報を、前記第１の転送部を介して前記第２の計算機に転送する転送ステップと、
を前記第１の計算機に実行させる、
ことを特徴とするフォールトトレラント計算機システムの制御プログラム。
【０１０２】
（付記１４）
ゲストOSを備える仮想計算機が稼働する第１の計算機と、該第１の計算機から転送されるデータを受信する第２の転送部及び前記転送されたデータを保存する第２のメモリを備える第２の計算機と、を含むフォールトトレラント計算機システムの制御プログラムであって、
前記転送されるデータは前記仮想計算機のスナップショットの差分情報であり、
前記第２のメモリに保存された前記差分情報に基づきスナップショットを生成し、前記第２のメモリに保存するスナップショット生成・保存ステップと、
所定の第２のタイミングにおいて、前記第２のメモリに保存された前記スナップショットに基づき、ゲストOSを起動するゲストOS起動ステップと、
を前記第２の計算機に実行させる、
ことを特徴とするフォールトトレラント計算機システムの制御プログラム。
【符号の説明】
【０１０３】
１a  稼働中の仮想計算機を有する計算機（アクティブ系）
１b  待機中の仮想計算機を有する計算機（スタンバイ系）
２a、２b  ホストOS 
３a、３b  ゲストOS
４a、４b  メモリ
５a、５b  FTモジュール
６a、６b  RDMAドライバ
７a、７b  データ転送部
８a、８b  スナップショットマネージャ
９a、９b  エラーハンドラ
１０a、１０b  ゲストOSスナップショット
１１a、１１b  転送部
【図１】
0005742410.tif 000002
【図２】
0005742410.tif 000003
【図３】
0005742410.tif 000004
【図４】
0005742410.tif 000005
【図５】
0005742410.tif 000006
【図６】
0005742410.tif 000007
【図７】
0005742410.tif 000008
【図８】
0005742410.tif 000009