(57)【特許請求の範囲】
【請求項１】
運用系と待機系で共有ストレージを有し、運用系の物理マシン上で動作する仮想マシンのメモリの内容と待機系の物理マシン上で動作する仮想マシンのメモリの内容を任意のタイミングで同期させるメモリ同期システムであって、
前記運用系の仮想マシンは、
前記共有ストレージに読み出し命令が発生すると、該読み出し命令の読み込み位置及び読み出し位置及び読み出しサイズを記憶手段に格納する読み出し命令捕捉手段と、
前記共有ストレージに書き込み命令が発生すると、前回同期時からの実行状態の差分情報を取得して前記待機系の仮想マシンに送信する差分情報転送手段と、
前記記憶手段から前記読み込み位置、前記読み出し位置、前記読み出しサイズを取得して、前記待機系に転送する同期データ転送手段と、
を有し、
前記待機系の仮想マシンは、
前記運用系の仮想マシンから受信した該運用系の仮想マシンの前記差分情報を当該待機系の仮想マシンに反映させる差分情報反映手段と、
前記運用系の仮想マシンから受信した前記読み込み位置で指定される待機系の仮想マシンメモリに、前記読み出し位置で指定される前記共有ストレージのデータを、前記読み出しサイズ分読み込む同期手段と、
を有する
ことを特徴とするメモリ同期システム。
【請求項２】
運用系と待機系で共有ストレージを有し、運用系の物理マシン上で動作する仮想マシンのメモリの内容と待機系の物理マシン上で動作する仮想マシンのメモリの内容を任意のタイミングで同期させるメモリ同期方法であって、
前記運用系の仮想マシンにおいて、
読み出し命令捕捉手段が、前記共有ストレージに読み出し命令が発生すると、該読み出し命令の読み込み位置及び読み出し位置及び読み出しサイズを記憶手段に格納する読み出し命令捕捉ステップと、
差分情報転送手段が、前記共有ストレージに書き込み命令が発生すると、前回同期時からの実行状態の差分情報を取得して前記待機系の仮想マシンに送信する差分情報転送ステップと、
同期データ転送手段が、前記記憶手段から前記読み込み位置、前記読み出し位置、前記読み出しサイズを取得して、前記待機系に転送する同期データ転送ステップと、
前記待機系の仮想マシンにおいて、
差分情報反映手段が、前記運用系の仮想マシンから受信した該運用系の仮想マシンの前記差分情報を当該待機系の仮想マシンに反映させる差分情報反映ステップと、
同期手段が、前記運用系の仮想マシンから受信した前記読み込み位置で指定される待機系の仮想マシンメモリに、前記読み出し位置で指定される前記共有ストレージのデータを、前記読み出しサイズ分読み込む同期ステップと、
を行うことを特徴とするメモリ同期方法。
【請求項３】
運用系と待機系で共有ストレージを有し、運用系の物理マシン上で動作する仮想マシンのメモリの内容と待機系の物理マシン上で動作する仮想マシンのメモリの内容を任意のタイミングで同期させる同期システムにおける運用系の仮想マシンであって、
前記共有ストレージに読み出し命令が発生すると、該読み出し命令の読み込み位置及び読み出し位置及び読み出しサイズを記憶手段に格納する読み出し命令捕捉手段と、
前記共有ストレージに書き込み命令が発生すると、前回同期時からの実行状態の差分情報を取得して前記待機系の仮想マシンに送信する差分情報転送手段と、
前記記憶手段から前記読み込み位置、前記読み出し位置、前記読み出しサイズを取得して、前記待機系に転送する同期データ転送手段と、
を有することを特徴とする運用系の仮想マシン。
【請求項４】
運用系と待機系で共有ストレージを有し、運用系の物理マシン上で動作する仮想マシンのメモリの内容と待機系の物理マシン上で動作する仮想マシンのメモリの内容を任意のタイミングで同期させる同期システムにおける待機系の仮想マシンであって、
前記運用系の仮想マシンから受信した該運用系の仮想マシンの書き込み命令が発生した時における、前回同期時からの実行状態の差分情報を当該待機系の仮想マシンに反映させる差分情報反映手段と、
前記運用系の仮想マシンから読み込み命令が発生した時の読み込み位置、読み出し位置、読み出しサイズを受信し、該読み込み位置で指定される待機系の仮想マシンメモリに、該読み出し位置で指定される前記共有ストレージのデータを、該読み出しサイズ分読み込む同期手段と、
を有する
ことを特徴とする待機系の仮想マシン。
【請求項５】
コンピュータを、請求項３または４記載の仮想マシンとして機能させるためのメモリ同期プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ同期方法及び運用系の仮想マシン及び待機系の仮想マシン及びメモリ同期プログラムに係り、特に、物理マシンを2台以上用いて冗長化構成を有する仮想マシン同期機構において、運用系と待機系のストレージが一致している場合（例えば、共有ストレージの利用）、運用系と待機系の仮想マシンのメモリ状態を同期させるためのメモリ同期方法及び運用系の仮想マシン及び待機系の仮想マシン及びメモリ同期プログラムに関する。
【背景技術】
【０００２】
物理マシンを２台以上用意し、冗長化することで、信頼性の高いシステムを実現するためにはシステムを同期させる必要がある。
【０００３】
そのための方法として、運用系の物理マシン上で動作する仮想マシンのサービス停止時間を最小限に抑えて、待機系の物理マシンに仮想マシンの実行状態を転送するシステムがある（例えば、非特許文献1参照）。このシステムは、仮想マシンを停止せずに、仮想マシンの実行状態を転送していくので、実行状態は常に更新されていく。そのため、既に転送済みの仮想マシンメモリに変更が生じた場合は、再度転送しなおす必要がある。転送すべき仮想マシンの実行状態が十分に小さくなると、運用系の仮想マシンを停止して、残りのデータを待機系に転送する。
【０００４】
また、ネットワークアウトプットもしくは、ストレージ書き込みを契機に仮想マシンの実行状態を同期することで、常にプライマリとセカンダリの仮想マシンの実行状態を同一に保つシステムがある（例えば、非特許文献２参照）。このシステムは、仮想マシンが利用するストレージの同期は行っていないため、共有ストレージを利用している。
【０００５】
当該システムについて以下に説明する。
【０００６】
図１は、従来の同期システムの構成を示す。
【０００７】
運用系１Ａ及び待機系１Ｂ共に、仮想マシン制御部１０を有し、各仮想マシン制御部１０は、同期制御部１１を有し、運用系の物理マシン上で動作する仮想マシンの実行状態に生じた変更を、待機系１Ｂの物理マシンに転送し、待機系の仮想マシンに適用することで、仮想マシン２０Ａ，２０Ｂの実行状態（ＣＰＵ、メモリ、デバイス）を常に同一状態に保つ。なお、同図では共有ストレージ２を運用系システム１Ａ，待機系システム１Ｂのハードウェア３０Ａ，３０Ｂが共用している例を示しているが、ストレージ２を同一状態に保つための構成は同図の構成に限定されるものではなく、例えば、運用系、待機系がそれぞれの別々のストレージを利用し、常に同一に保つ処理を行ってもよい。
【０００８】
運用系1Ａ及び待機系１Ｂは、それぞれ図２、図３に示す動作を行う。
【０００９】
図２は、従来技術による運用系同期制御部のフローチャートである。
【００１０】
運用系１Ａの仮想マシン制御部１０Ａの同期制御部１１Ａはストレージ２に書き込みが発生したことを検知すると、同期を開始する（ステップ１１０）。前回同期時からの差分メモリを取得し、運用系仮想マシン２０Ａの実行状態（ＣＰＵ、差分メモリ、デバイス）の差分を待機系の同期制御部１１Ｂに送信し（ステップ１２０）、待機系１Ｂからの全データ受信完了通知が送信されたかを判断し（ステップ１３０）、全て受信した場合には処理を終了する。
【００１１】
図３は、従来技術による待機系同期制御部のフローチャートである。
【００１２】
待機系１Ｂの仮想マシン制御部１０Ｂの同期制御部１１Ｂは、運用系マシンの実行状態の差分を受信すると（ステップ２１０）、受信した差分を待機系仮想マシン２０Ｂの実行状態に反映させ（ステップ２２０）、送信側の運用系１０Ａに全データを受信したことを通知するための全データ受信完了通知を送信する（ステップ２３０）。
【００１３】
また、上記の技術の他に、ネットワークアウトプットを発行する前に同期することで、常にプライマリとセカンダリの仮想マシンの実行状態及びストレージを同一に保つことができると、論文で紹介されている（例えば、非特許文献３参照）。
【００１４】
また、マスタとスレーブの記憶装置のデータに不一致がある場合に、差分を転送して同期する技術がある（例えば、特許文献1参照）。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特許第４４７２９９５号公報
【非特許文献】
【００１６】
【非特許文献１】Clark, C., Fraser, K., Hand, S., Hansen, J.G., E., Limpach, C., Paratt, I. and Warfield, A.: Live Migration of Virtual Machines, 2nd USENIX Symposium on Networked Systems Design and Implementation, Boston, MA, USA, pp. 273-286.
【非特許文献２】田村芳明、柳澤佳里、佐藤孝治、盛合敏：Kemari: 仮想マシン間の同期による耐故障クラスタリング、情報処理学会論文誌コンピューティングシステム、Vol. 3, No.1, pp. 13-24 (2010).
【非特許文献３】B. Curry., G. Lefebvre., D. Meyer., M. Feeley., N. Hutchinson., A. Warfield.: Remus: High Availability via Asynchronous virtual Machine replication, 5th USENIX Symposium on Networked Systems Design and Implementation, pp. 161-174 (2008).
【発明の概要】
【発明が解決しようとする課題】
【００１７】
しかしながら、上記の非特許文献１の技術は、ストレージの読み出しにより変更が生じた仮想マシンのメモリを一致させるために、メモリのデータそのものを転送する方式であるので、転送量が大きいという問題がある。
【００１８】
また、非特許文献２の技術は、ストレージの読み出しにより、変更が生じた仮想マシンのメモリを一致させるために、メモリデータそのものを転送する方式であるので、転送量が大きいという問題がある。
【００１９】
また、非特許文献３の技術は、ストレージの読み出しにより、変更が生じた仮想マシンのメモリを一致させるために、メモリデータそのものを転送する方式であるので、転送量が大きいという問題がある。
【００２０】
また、特許文献１の技術は、マスタは記憶装置にあるデータそのものをスレーブに転送するので、転送量が大きいという問題がある。
【００２１】
本発明は、上記の点に鑑みなされたもので、運用系と待機系のストレージが一致している場合（例えば、共有ストレージの利用）に、データ転送量を削減することが可能なメモリ同期方法及び運用系の仮想マシン及び待機系の仮想マシン及びメモリ同期プログラムを提供することを目的とする。
【課題を解決するための手段】
【００２２】
上記の課題を解決するために、本発明は、運用系と待機系で共有ストレージを有し、運用系の物理マシン上で動作する仮想マシンのメモリの内容と待機系の物理マシン上で動作する仮想マシンのメモリの内容を任意のタイミングで同期させるメモリ同期システムであって、
前記運用系の仮想マシンにおいて、
読み出し命令捕捉手段が、前記共有ストレージに読み出し命令が発生すると、該読み出し命令の読み込み位置及び読み出し位置及び読み出しサイズを記憶手段に格納する読み出し命令捕捉ステップと、
差分情報転送手段が、前記共有ストレージに書き込み命令が発生すると、前回同期時からの実行状態の差分情報を取得して前記待機系の仮想マシンに送信する差分情報転送ステップと、
同期データ転送手段が、前記記憶手段から前記読み込み位置、前記読み出し位置、前記読み出しサイズを取得して、前記待機系に転送する同期データ転送ステップと、
前記待機系の仮想マシンにおいて、
差分情報反映手段が、前記運用系の仮想マシンから受信した該運用系の仮想マシンの前記差分情報を当該待機系の仮想マシンに反映させる差分情報反映ステップと、
同期手段が、前記運用系の仮想マシンから受信した前記読み込み位置で指定される待機系の仮想マシンメモリに、前記読み出し位置で指定される前記共有ストレージのデータを、前記読み出しサイズ分読み込む同期ステップと、を行う。
【発明の効果】
【００２３】
上記のように本発明は、運用系と待機系において共有ストレージを利用している場合に、運用系の仮想マシンの実行状態の差分とストレージ読み出し命令の内容（読み込み位置、読み出し位置、読み出しサイズ）を待機系に転送することにより、運用系と待機系の仮想マシンメモリを一致させているため、データそのものを転送する必要がないため、転送量を削減することができる。
【００２４】
また、待機系では運用系から取得した読み出し命令に基づいて、共有ストレージの読み出しを行うため、メモリの状態を一致させることができる。
【図面の簡単な説明】
【００２５】
【図１】従来の同期システムの構成図である。
【図２】従来技術による運用系同期制御部のフローチャートである。
【図３】従来技術による待機系同期制御部のフローチャートである。
【図４】本発明の一実施の形態における運用系の同期制御部の全体フローチャートである。
【図５】本発明の一実施の形態におけるＳ３２０の詳細フローチャートである。
【図６】本発明の一実施の形態におけるＳ３４０の詳細フローチャートである。
【図７】本発明の一実施の形態における待機系の同期制御部のフローチャートである。
【図８】本発明の一実施の形態における物理マシンの構成を示す図（その１）である。
【図９】本発明の一実施の形態における物理マシンの構成を示す図（その２）である。
【図１０】評価のための実験環境を示す図である。
【図１１】本発明と従来技術の同期一回当りのデータ転送量である。
【発明を実施するための形態】
【００２６】
以下、図面と共に、本発明の実施の形態を説明する。
【００２７】
本発明において、同期とは、運用系の物理マシン上で動作する仮想マシンのメモリの内容と、待機系の物理マシン上で動作する仮想マシンのメモリの内容を任意のタイミングで一致させる処理であり、継続的に行われるものとする。
【００２８】
本発明のシステム構成は、前述の図1と同様の構成であるが、同期制御部１１で行われる処理が異なる。なお、以下において、運用系の仮想マシン２０Ａでは、アプリケーションが動作しているため、実行状態は常に更新されていくものとし、待機系の仮想マシン２０Ｂでは、アプリケーションが動作していないため、実行状態は変化しない、という前提とする。また、以下の実施の形態では、運用系1Ａと待機系１Ｂは共に共有ストレージ２を用いるものとする。
【００２９】
まず、運用系１Ａの同期制御部１１Ａの処理について説明する。
【００３０】
図４は、本発明の一実施の形態における運用系の同期制御部の全体のフローチャートである。
【００３１】
ステップ３１０）  同期制御部１１Ａは、共有ストレージ２に対する読み出しが発生したかを判断し、発生した場合にはステップ３２０に移行する。
【００３２】
ステップ３２０）  同期制御部１１Ａは、共有ストレージ２からの読み出しを捕捉し、当該読み出し命令を主記憶装置等の記憶手段（図示せず）に格納する。当該処理の詳細については、図５にて後述する。
【００３３】
ステップ３３０）  次に、同期制御部１１Ａは、運用系のストレージ書き込みが発生したかを判定し、発生したことを検知した場合には、同期を開始する。なお、このための処理としては、図２（非特許文献２）と同様に、共有ストレージ２への書き込みを契機に同期処理を行う方法と同様である。
【００３４】
ステップ３４０）  同期制御部１１Ａは、運用系1Ａと待機系１Ｂを同期させるために必要なデータを待機系１Ｂに転送する。当該処理の詳細いついては図６にて後述する。
【００３５】
次に、上記のステップ３２０の処理について説明する。
【００３６】
図５は、本発明の一実施の形態におけるステップ３２０の詳細フローチャートである。
【００３７】
ステップ４１０）  同期制御部１１Ａは、仮想マシン２０Ａによるストレージ２からの読み出しを捕捉する。
【００３８】
ステップ４２０）  同期制御部１１Ａは、ストレージ読み出しを検知すると、ストレージ読み出し命令を主記憶装置等の記憶手段（図示せず）に格納する。ここで、格納されるストレージ読み出し命令の情報としては、読み込み位置（例えば、仮想マシンのページアドレス）、読み出し位置（例えば、ストレージ２のセクタ番号）、読み出しサイズ等である。
【００３９】
次に、図４のステップ３４０の処理について説明する。非特許文献２とは、待機系の同期制御部１１Ｂに送信する情報が異なる。
【００４０】
図６は、本発明の一実施の形態におけるステップ３４０の詳細フローチャートである。
【００４１】
ステップ５１０）  同期制御部１１Ａは、運用系の仮想マシン２０Ａより、前回同期時からの差分メモリを取得する。但し、ストレージ読み出しにより変更が生じたメモリは除く。運用系仮想マシン２０Ａの実行状態の差分（ＣＰＵ，差分メモリ、デバイス）を待機系1Ｂの同期制御部１１Ｂに送信する。
【００４２】
ステップ５２０）  同期制御部１１Ａは、ステップ３２０で記憶手段（図示せず）に格納したストレージの読み出し命令（読み出しデータの位置、読み込み位置、読み込みサイズ）を取り出し、待機系１Ｂの同期制御部１１Ｂへ送信する。なお、本データは複数個からなることもある。
【００４３】
ステップ５３０）  受信側の待機系１Ｂから全データの受信完了通知が送信されてきたかを判断し、送信されてきた場合はステップ５４０に移行する。
【００４４】
ステップ５４０）  ステップ５２０で記憶手段（図示せず）に保存したストレージの読み出し命令を破棄する。これは、次回同期時に、同一のデータの転送を防ぐための処理である。
【００４５】
次に、待機系１Ｂの処理について説明する。
【００４６】
図７は、本発明の一実施の形態における待機系の同期制御部のフローチャートである。
【００４７】
ステップ６１０）  同期制御部１１Ｂは、前述のステップ５１０、５２０の処理によって運用系１Ａから送信されている運用系１Ａの仮想マシン２０Ａの実行状態の差分及びストレージ２に対する読み出し命令等の同期用のデータを受信したかを判断し、受信した場合はステップ６２０に移行する。
【００４８】
ステップ６２０）  受信した運用系１Ａの仮想マシン２０Ａの実行状態の差分を待機系１Ｂの仮想マシン２０Ｂの実行状態に反映させる。
【００４９】
ステップ６３０）  同期制御部１１Ｂは、待機系ストレージ２のデータ及びストレージデータの読み出し命令（読み込み位置、読み出しデータの位置、読み出しサイズ）が入力されると、読み込み位置で指定される主記憶装置上の仮想マシンメモリに、読み出しデータの位置で指定されるストレージ２のデータを、指定されているサイズ分読み込む。これにより、運用系１Ａの仮想マシンメモリと待機系の仮想マシンメモリを一致させることができる。
【００５０】
ステップ６４０）  運用系側からの全データの受信完了通知を運用系１Ａに送信する。
【００５１】
上記のように、本発明では、ステップ４２０において、ストレージ読み出し命令を運用系１Ａの記憶手段に保存しているため、ステップ５２０及びステップ６３０で利用することができる。つまり、ストレージデータを読み出すことにより運用系１の仮想マシンのメモリに変更が生じても、ストレージ２には同じストレージデータが存在しているので、データそのものは転送する必要がない。仮想マシンメモリの代わりに転送するストレージ読み出し命令のデータサイズは、仮想マシンメモリそのもののデータと比較して十分に小さいので転送量を削減できる。
【００５２】
また、待機系１Ｂは、ステップ６３０においてストレージデータの読み出し命令に基づいて運用系1Ａと同様のストレージ２から読み出しを行うため、メモリの状態を一致させることができる。
【００５３】
上記の実施の形態では、運用系マシンと待機系マシンが１：１の場合を示したが、以下に運用系マシンと待機系マシンがＮ：１，または、１：Ｎの例を示す。
【００５４】
図８は、本発明の一実施の形態における物理マシンの構成を示す図（その１）である。
【００５５】
同図に示す構成において、運用系マシンＡと待機系マシンＢは、ストレージａを共有し、待機系マシンＢとはストレージｂを共有している。
【００５６】
物理マシンの構成に関しては、運用系マシン数：待機系マシン数＝Ｎ：１の構成をとることが可能である。同図に示す待機系マシンの仮想マシンの１つは、運用系マシンＡの仮想マシンと同期し、もう一方の仮想マシンは運用系マシンＢと同期する。但し、仮想マシンの構成に関しては、運用系仮想マシン数：待機系仮想マシン数＝Ｎ：１と、運用系仮想マシンのバックアップとなる待機系仮想マシンが、一つ以上必要となる。
【００５７】
なお、ある運用系仮想マシンのバックアップの先に待機系仮想マシンが複数ある場合は、運用系の故障後、どちらを新たに運用系とするか選択する必要がある。
【００５８】
また、ストレージを同一状態に保つための構成は図８の例に限らない。例えば、運用系、待機系がそれぞれ別々のストレージを利用し、常に同一に保つ処理を行ってもよい。
【００５９】
図９は、本発明の一実施の形態における物理マシンの構成を示す図（その２）である。
【００６０】
同図に示す構成において、運用系と待機系Ａ，Ｂは、ストレージを共有している。
【００６１】
同図に示すように、物理マシンのン構成に関しては、運用系マシン数：待機系マシン数＝１：Ｎの構成をとることが可能である。同図に示す待機系マシンＡ，Ｂ上の仮想マシンは両方とも、運用系の仮想マシンと同期している。但し、仮想マシンの構成に関しては、運用系仮想マシン数：待機系仮想マシン数＝１：Ｎと、運用系仮想マシンのバックアップとなる待機系仮想マシンが、一つ以上必要となる。
【００６２】
なお、ある運用系仮想マシンのバックアップの先に待機系仮想マシンが複数ある場合は、運用系の故障後、どちらを新たに運用系とするか選択する必要がある。
【００６３】
また、ストレージを同一状態に保つための構成は図８、９の例に限定されることなく、例えば、運用系、待機系がそれぞれ別々のストレージを利用し、常に同一に保つ処理を行ってもよい。
【００６４】
次に、本発明と従来技術の性能評価の結果を示す。
【００６５】
図１０は、評価のための実験環境を示す。
【００６６】
同図において、評価のあめに、実験環境となるマシンを２台用意し、一方を運用系システム、もう一方を待機系システムとする。運用系のゲストＯＳ上で、ファイルコピーを実行し、負荷をかけている。
【００６７】
図１１は、本発明と従来技術の同期一回当りのデータ転送量を示す。
【００６８】
同図のデータは、運用系と待機系を１００回同期させた時に発生したデータ転送量の平均値である。本発明を利用した場合は、従来技術（非特許文献２）と比較して、以下の効果を得ることができた。なお、本発明と非特許文献２の同期のタイミングは同一のため、発生する同期回数に変化はない。
【００６９】
・全体（その他＋ストレージ読み出しにより変更が生じたメモリ情報としては、５７１KBから４９４KBとなり、１３％のデータ転送量が削減できた。なお、上記の「その他」とは、仮想マシン実行状態（ＣＰＵ，デバイス、メモリ）からストレージ読み出しにより変更が生じたメモリデータサイズを差し引いたものである。
【００７０】
・ストレージ読み出しにより変更が生じたメモリ情報としては、７７KBから０．１４KBとなり、９９％のデータ転送量が削減できた。なお、上記の「ストレージ読み出しによる変更が生じたメモリ情報」とは、従来技術（非特許文献２）の場合はメモリデータであり、本発明の場合はストレージ読み出し命令である。
【００７１】
なお、運用系及び待機系の同期制御部の動作をプログラムとして構築し、仮想マシンとして利用される物理マシンにインストールして実行させることが可能である。
【００７２】
本発明は上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更応用が可能である。
【符号の説明】
【００７３】
１Ａ  運用系システム（データ送信側）
１Ｂ  待機系システム（データ受信側）
２  共有ストレージ
１０Ａ  仮想マシン制御部（運用系）
１０Ｂ  仮想マシン制御部（待機系）
１１Ａ  同期制御部（運用系）
１１Ｂ  同期制御部（待機系）
２０Ａ  仮想マシン（運用系）
２０Ｂ  仮想マシン（待機系）
３０Ａ  ハードウェア（運用系）
３０Ｂ  ハードウェア（待機系）
【図１】
0005702652.tif 000002
【図２】
0005702652.tif 000003
【図３】
0005702652.tif 000004
【図４】
0005702652.tif 000005
【図５】
0005702652.tif 000006
【図６】
0005702652.tif 000007
【図７】
0005702652.tif 000008
【図８】
0005702652.tif 000009
【図９】
0005702652.tif 000010
【図１０】
0005702652.tif 000011
【図１１】
0005702652.tif 000012