(57)【要約】      （修正有）【課題】高価な共有ディスク装置を利用せずに、スプリットブレインを回避する二重系システムを提供する。【解決手段】待機系の第２の仮想計算機２１は、第１の仮想計算機１１との間でハートビート監視を行い、第１の仮想計算機１１からのハートビートの途絶を検知した場合に、第２の仮想計算機２１を現用系として設定し、アプリケーション２２を起動する第２の二重系制御機構２４を有する。現用系の第１の仮想計算機１１は、第２の仮想計算機２１との間でハートビート監視を行う。そして、第１の仮想計算機１１は、第２の二重系制御機構２４がハートビートの途絶を検知した後、第１の仮想計算機１１が再び現用系として第１の記録部へのアクセスを行うと、第１の仮想計算機１１を停止させる第１の二重系制御機構１４を有する。【選択図】図１
2017010102.tif 000002
【特許請求の範囲】
【請求項１】
業務を遂行する現用系として稼働する第１の仮想計算機及び第１の記録部を有し、前記業務に用いられるアプリケーションが処理したデータを前記第１の記録部に記録する第１の物理計算機と、
前記現用系の業務停止に伴い前記業務を引き継ぐ待機系として稼働する第２の仮想計算機及び第２の記録部を有し、前記第１の物理計算機が前記第１の記録部に記録した前記データを前記第２の記録部に記録する第２の物理計算機と、を備え、
前記第２の仮想計算機は、前記第１の仮想計算機との間でハートビート監視を行い、前記第１の仮想計算機からのハートビートの途絶を検知した場合に、前記第２の仮想計算機を前記現用系として設定し、前記アプリケーションを起動する第２の二重系制御部を有し、
前記第１の仮想計算機は、前記第２の仮想計算機との間でハートビート監視を行い、前記第２の二重系制御部が前記ハートビートの途絶を検知した後、前記第１の仮想計算機が再び現用系として前記第１の記録部へのアクセスを行うと、前記第１の仮想計算機を停止させる第１の二重系制御部を有する
二重系システム。
【請求項２】
前記第１の物理計算機は、前記第１の記録部の記録状態を管理する第１の状態管理部と、前記第１の状態管理部に基づいて前記第１の記録部に前記データを記録する制御を行う第１の記録制御部を備え、
前記第２の物理計算機は、前記第２の記録部の記録状態を管理する第２の状態管理部と、前記第２の状態管理部に基づいて前記第２の記録部に前記データを記録する制御を行う第２の記録制御部を備え、
前記第１の記録制御部は、前記第１の仮想計算機が前記現用系として稼働する場合には前記第１の状態管理部を占有に設定し、前記第１の仮想計算機が前記待機系として稼働する場合には前記第１の状態管理部を非占有に設定し、
前記第２の記録制御部は、前記第２の仮想計算機が前記現用系として稼働する場合には前記第２の状態管理部を占有に設定し、前記第２の仮想計算機が前記待機系として稼働する場合には前記第２の状態管理部を非占有に設定する
請求項１に記載の二重系システム。
【請求項３】
前記第１の記録制御部は、前記第１の状態管理部を非占有から占有に設定すると、前記第２の記録制御部に対して前記第２の状態管理部の占有を解除する要求を行い、
前記第２の記録制御部は、前記第２の状態管理部を非占有から占有に設定すると、前記第１の記録制御部に対して前記第１の状態管理部の占有を解除する要求を行う
請求項２に記載の二重系システム。
【請求項４】
前記第１の仮想計算機は、前記第１の記録制御部が前記第１の記録部にアクセスしたアクセス結果を前記第１の二重系制御部に通知する第１のアクセス制御部を備え、
前記第２の仮想計算機は、前記第２の記録制御部が前記第２の記録部にアクセスしたアクセス結果を前記第２の二重系制御部に通知する第２のアクセス制御部を備え、
前記第１の記録制御部は、前記第２の二重系制御部が前記ハートビートの途絶を検知した後、前記第１の仮想計算機が再び現用系として前記第１の記録部へのアクセスを行うと、前記第１のアクセス制御部に前記アクセス結果としてアクセス競合を通知し、
前記第１の二重系制御部は、前記第１のアクセス制御部から前記アクセス競合が通知されると、前記第１の仮想計算機を停止させる
請求項３に記載の二重系システム。
【請求項５】
前記第１の記録制御部は、前記第１の状態管理部が占有に設定された状態で、前記第１の記録部にアクセス要求がされた場合に前記第１の記録部に読み出し又は書き込みを要求し、前記第１のアクセス制御部に前記アクセス結果として読み出し又は書き込み結果を通知し、前記第１の状態管理部が非占有に設定された状態で、前記第１の記録部に前記アクセス要求がされた場合に前記第１のアクセス制御部に前記アクセス競合を通知する
請求項４に記載の二重系システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、複数の物理計算機に搭載される仮想計算機が現用系と待機系に設定される二重系システムに関する。
【背景技術】
【０００２】
近年、仮想計算機を実行する複数の物理計算機を備えた計算機システムがある。このような計算機システムは、業務を遂行する現用系の仮想計算機を稼働する物理計算機と、現用系の仮想計算機に障害が発生した場合に業務を引き継ぐ待機系の仮想計算機を稼働する物理計算機を用意することで冗長化構成とした二重系システムとして用いられる。このように現用系の業務を待機系に引き継ぐ方法は系切替えと呼ばれており、二重系システムの無停止運転を可能とする。
【０００３】
系切替えの実行判断は、系間で定期的にハートビート（生存情報）を伝達し、ハートビートが途絶した時に他系に障害が発生したと判断するハートビート監視方式を用いて行われる。系切替え時には、現用系で使用していたデータを待機系に引き継ぐ必要がある。このデータの引継ぎには外部記憶装置が利用される。一般的には複数ポートを有するＳＣＳＩ（Small Computer System Interface）インタフェースで現用系と待機系の仮想計算機が接続される共有ディスク装置が利用されていた。
【０００４】
一般的な二重系システムは、上述したハートビート監視による系切替え機能と、共有ディスク装置を用いたデータの引継ぎ機能によって構築される。しかし、共有ディスク装置は高価であり、安価に二重系システムを構築できなかった。そこで、共有ディスク装置を使用しない安価な二重系システムの構築方法が検討されていた。
【０００５】
この方法として、現用系の計算機に搭載される物理ディスクと待機系の計算機に搭載される物理ディスクにおいて、ネットワークを介したミラーリング機構を利用するものがある。この方法は、現用系で書き込まれたデータを待機系にも書き込むことで、現用系と待機系の仮想計算機の物理ディスクを同期させて、現用系から待機系にデータを引き継ぐことができる。
【０００６】
二重系システムの例として特許文献１には、「現用系ノードのオリジナルディスクの障害発生が検出されるときに、待機系ノードを運用状態に切替え、それまで現用系ノードとして動作していたノードを停止させて二重化システムを停止させる」と記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−１２３４０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ここで、特許文献１には、物理計算機単位で現用系と待機系の二重系システムを構築することが記載されているが、仮想計算機単位で二重系システムを構築することについては記載されていない。つまり、特許文献１に記載された技術は仮想計算機を用いた二重系システムを想定したものではない。このため、仮想計算機を搭載した二重系システムに特許文献１に記載されたミラーディスク障害検知方法を適用するためには、仮想計算機が物理ディスクの障害を検知する手段が別途必要となる。
【０００９】
さらに、特許文献１に開示された二重系システムは、ミラーリングを行う物理ディスクの障害と、ミラーリングを行う通信経路の障害のみを系切替えの契機としている。実際には、現用系の計算機が実行するアプリケーション（ソフトウェア）による処理負荷の上昇等で業務が正しく遂行されない場合についても、待機系へと業務を引き継がなければならない。しかし、特許文献１に記載された方法では、アプリケーション障害による業務遂行の負荷を検知して系切替えを実行できないという問題があった。
【００１０】
この問題を解決するため、仮想計算機を実行する物理計算機上で、ハートビート監視方式を特許文献１に開示された二重系システムに適用し、アプリケーション障害等による処理負荷が上昇した場合のハートビートの途絶を系切替えの契機とする方法が考えられる。
【００１１】
しかし、ハートビート監視方式では、ハートビートが途絶したことを系切替えの契機とする。このため、現用系の計算機の処理負荷が一時的に上昇したことにより、一時的にハートビートを待機系に伝達できなかった場合、系切替えが行われた後に再び現用系として計算機が動作回復し、両系の計算機が現用系となるスプリットブレインと呼ばれる問題がある。スプリットブレインは、上述した共有ディスク装置を利用したデータ引継ぎ方法を用いることで回避が可能である。つまり、スプリットブレインの回避は、共有ディスク装置に備わる機構を利用し、一方の計算機からのＩ／Ｏ（Input/Output）要求のみを受け付け、もう一方の計算機からのＩ／Ｏ要求に対し拒否通知を返答する仕組みにより実現される。
【００１２】
この仕組みを利用すると、系切替えが行われた後に再び現用系として動作回復した計算機は、自らのＩ／Ｏ要求に対して拒否通知が返答されることで他系が共有ディスク装置にアクセス中であることを検知し、動作を停止する。しかし、共有ディスク装置は高価であるため、安価に二重系システムを構築できなかった。
【００１３】
本発明はこのような状況に鑑みて成されたものであり、共有ディスク装置を利用せずにスプリットブレインを回避する二重系システムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明に係る二重系システムは、第１の物理計算機と第２の物理計算機を備える。
第１の物理計算機は、業務を遂行する現用系として稼働する第１の仮想計算機及び第１の記録部を有し、業務に用いられるアプリケーションが処理したデータを第１の記録部に記録する。
第２の物理計算機は、現用系の業務停止に伴い業務を引き継ぐ待機系として稼働する第２の仮想計算機及び第２の記録部を有し、第１の物理計算機が第１の記録部に記録したデータを第２の記録部に記録する。
第２の仮想計算機は、第１の仮想計算機との間でハートビート監視を行い、第１の仮想計算機からのハートビートの途絶を検知した場合に、第２の仮想計算機を現用系として設定し、アプリケーションを起動する第２の二重系制御部を有する。
第１の仮想計算機は、第２の仮想計算機との間でハートビート監視を行い、第２の二重系制御部がハートビートの途絶を検知した後、第１の仮想計算機が再び現用系として第１の記録部へのアクセスを行うと、第１の仮想計算機を停止させる第１の二重系制御部を有する。
【発明の効果】
【００１５】
本発明によれば、高価な共有ディスク装置を利用せずにスプリットブレインを回避することが可能となるため、安価に二重系システムを構築することができる。
上記した以外の課題、構成及び効果は、以下の実施の形態例の説明により明らかにされる。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施の形態例に係る二重系システムの全体構成例を示すブロック図である。
【図２】本発明の一実施の形態例に係る二重系制御機構の処理例を示すフローチャートである。
【図３】本発明の一実施の形態例に係るディスクアクセス機構の処理例を示すフローチャートである。
【図４】本発明の一実施の形態例に係るミラーディスク制御機構の処理例を示すフローチャートである。
【図５】本発明の一実施の形態例に係る二重系システムが起動した後、ハートビート監視を行うまでの処理の例を示すシーケンス図である。
【図６】本発明の一実施の形態例に係る二重系システムのミラーリング処理の例を示すシーケンス図である。
【図７】本発明の一実施の形態例に係るハートビート途絶を検出した場合における二重系システムの処理例を示すシーケンス図である。
【図８】本発明の一実施の形態例に係る現用系として物理ディスクへのアクセスを再開した仮想計算機の処理例を示すシーケンス図である。
【発明を実施するための形態】
【００１７】
以下、本発明を実施するための形態例について、添付図面を参照して説明する。本明細書及び図面において、実質的に同一の機能又は構成を有する構成要素については、同一の符号を付することにより重複する説明を省略する。
【００１８】
＜二重系システムの構成例＞
始めに、一実施の形態例に係る二重系システムについて説明する。
図１は、二重系システム１の全体構成例を示すブロック図である。
【００１９】
二重系システム１は、物理ディスク１８（第１の記録部の一例）を有する物理計算機１０（第１の物理計算機の一例）と、物理ディスク２８（第２の記録部の一例）を有する物理計算機２０（第２の物理計算機の一例）とを備えている。二重系システム１は、クラスタシステムとして用いられる。物理計算機１０，２０は、ハートビート通信路３０、ミラーディスク通信路３１（ネットワークの一例）により相互に接続される。また、物理計算機１０，２０は、外部通信路３２により相互に接続され、ユーザが使用する業務用端末４０と業務情報を送受信することが可能である。ハートビート通信路３０とミラーディスク通信路３１は、多重に冗長化された１本の通信路であってもよい。
【００２０】
物理計算機１０は、ミラーディスク通信路３１を通じて物理ディスク１８と、物理計算機２０の物理ディスク２８とのミラーリング処理を制御するミラーディスク制御機構１６を備える。ミラーディスク制御機構１６は、ホストＯＳ（Operating System）１５によって動作が制御される。ホストＯＳ１５は、仮想計算機１１を現用系として稼働させる基盤であり、仮想計算機１１が業務を遂行する現用系として稼働するために必要な仮想的なハードウェアを提供する。ホストＯＳ１５は、仮想計算機１１が待機系として稼働するために必要な仮想的なハードウェアを提供することもできる。
【００２１】
仮想計算機１１（第１の仮想計算機の一例）は、アプリケーション１２と、ディスクアクセス機構１３と、二重系制御機構１４と、を有し、ホストＯＳ１５が提供する仮想的なハードウェア上に構築される。仮想計算機１１は、１台に限らず、物理計算機１０上に複数台搭載されてもよい。
【００２２】
仮想計算機１１が有するアプリケーション１２は、現用系として業務を遂行し、ディスクアクセス機構１３とミラーディスク制御機構１６を通じて物理ディスク１８に対しＩ／Ｏ要求（アクセス要求の一例）を発行するプログラムである。このアプリケーション１２は、仮想計算機１１が現用系であるときに稼働し、待機系であるときには稼働しない。アプリケーション１２は、複数のプログラムであってもよい。
【００２３】
ディスクアクセス機構１３（第１のアクセス制御部の一例）は、アプリケーション１２が発行した物理ディスク１８へのＩ／Ｏ要求をミラーディスク制御機構１６へ中継するプログラムである。そして、ディスクアクセス機構１３は、ミラーディスク制御機構１６が物理ディスク１８にアクセスしたアクセス結果を二重系制御機構１４に通知する。ディスクアクセス機構１３の処理の詳細は、後述する図３にて説明する。
【００２４】
二重系制御機構１４（第１の二重系制御部の一例）は、待機系の仮想計算機２１が有する二重系制御機構２４にハートビート通信路３０を介してハートビートを送信することで、仮想計算機１１の生存情報を仮想計算機２１に通知する機能を有するプログラムである。逆に、二重系制御機構１４は、二重系制御機構２４がハートビート通信路３０を介して送信したハートビートを受信することで、仮想計算機２１の生存情報を監視する機能を有するプログラムである。このように二重系制御機構１４が二重系制御機構２４は、互いにハートビートを監視している。
【００２５】
後述するように仮想計算機１１が現用系であったとしても、仮想計算機２１の二重系制御機構２４が二重系制御機構１４からのハートビートの途絶を検知すると、仮想計算機２１が待機系から現用系に切替えられる。この場合、現用系の二重系制御機構１４は、仮想計算機１１が再び現用系として物理ディスク１８へのアクセスを行うと、ディスクアクセス機構１３からアクセス競合が通知されるので、仮想計算機１１を停止させる制御を行う。
【００２６】
逆に、仮想計算機１１が待機系である場合に、二重系制御機構１４が現用系の仮想計算機２１からのハートビートの途絶を検知すると、仮想計算機１１を待機系から現用系へと切替える。この際、二重系制御機構１４は、占有管理テーブル１７の状態を「非占有」から「占有」へ遷移させる指示をミラーディスク制御機構１６に通知する。「非占有」とは、アプリケーション１２が物理ディスク１８に対してＲｅａｄ／Ｗｒｉｔｅが不可能な状態を表し、「占有」とは、アプリケーション１２が物理ディスク１８に対してＲｅａｄ／Ｗｒｉｔｅ可能な状態を表す。
【００２７】
仮想計算機１１が待機系である場合、現用系の仮想計算機２１からのハートビートの途絶を検知することで占有管理テーブル１７の状態を非占有から占有に切替える状態遷移は以下のようにして行われる。始めに、二重系制御機構１４がミラーディスク制御機構１６に占有解除要求を通知し、ミラーディスク制御機構１６が物理ディスク１８に対する占有を解除（「非占有」に設定）する。その後、ミラーディスク制御機構１６に占有要求を通知する。この方法は、一般的にＳＣＳＩコントローラーを具備する共有ディスク装置で用いられるＳＣＳＩコマンドを利用した「SCSI BUS RESET」と「SCSI RESERVATION」によるディスク占有の処理と同様である。つまり、従来の共有ディスク装置を使用する系切替えの処理と同様に、一旦物理ディスク１８の占有を解除した後、物理ディスク１８を占有する。
【００２８】
このように本実施の形態例に係る二重系システム１では、ＳＣＳＩコマンドを用いる既存のアプリケーションと同様に、二重系制御機構１４がミラーディスク制御機構１６に対して占有管理テーブル１７の状態を変更する要求を行うことが可能である。二重系制御機構１４の処理の詳細は、後述する図２にて説明する。
【００２９】
ミラーディスク制御機構１６（第１の記録制御部の一例）は、アプリケーション１２が発行する物理ディスク１８へのＩ／Ｏ要求を、物理ディスク１８へと中継するプログラムである。Ｉ／Ｏ要求のＩ／Ｏ要求種別には、物理ディスク１８にデータを書き込むＷｒｉｔｅ要求、物理ディスク１８からデータを読み出すＲｅａｄ要求のいずれかが含まれる。
【００３０】
そして、ミラーディスク制御機構１６は、物理ディスク１８の状態を管理する占有管理テーブル１７を有する。ミラーディスク制御機構１６は、占有管理テーブル１７に基づいて物理ディスク１８にデータを記録する制御を行う。そして、ミラーディスク制御機構１６は、占有管理テーブル１７の状態が「占有」に設定された状態で、アプリケーション１２から物理ディスク１８にＩ／Ｏ要求が発行された場合に、物理ディスク１８にＩ／Ｏ要求を発行する。そして、ミラーディスク制御機構１６は、ディスクアクセス機構１３にＩ／Ｏ結果（アクセス結果の一例）を通知する。このＩ／Ｏ結果には、物理ディスク１８に対する書き込み結果、物理ディスク１８から読み出したデータが含まれる。
【００３１】
また、Ｉ／Ｏ要求がＷｒｉｔｅ要求の場合には、ミラーディスク制御機構１６は、ミラーディスク通信路３１を介して他系のミラーディスク制御機構２６へＩ／Ｏ要求を中継し、他系の物理ディスク２８に物理ディスク１８のデータを記録させる。このようにミラーディスク制御機構１６は、物理ディスク１８と物理ディスク２８のデータを一致化させるミラーリング機能を有する。ミラーディスク制御機構１６の処理の詳細は、後述する図４にて説明する。
【００３２】
占有管理テーブル１７（第１の状態管理部の一例）は、物理ディスク１８の記録状態が「占有」又は「非占有」のいずれであるかを管理するテーブルである。そして、ミラーディスク制御機構１６によって、仮想計算機１１が現用系として稼働する場合には占有管理テーブル１７の状態が「占有」に設定され、仮想計算機１１が待機系として稼働する場合には占有管理テーブル１７の状態が「非占有」に設定される。なお、ミラーディスク制御機構１６は、占有管理テーブル１７の状態を「非占有」から「占有」に切替えると、ミラーディスク制御機構２６に対して占有管理テーブル２７に占有解除要求を行う。
【００３３】
物理計算機２０は、仮想計算機２１と、ディスクアクセス機構２３と、二重系制御機構２４と、ホストＯＳ２５と、ミラーディスク制御機構２６と、占有管理テーブル２７と、物理ディスク２８とを備える。仮想計算機２１は第２の仮想計算機の一例として用いられ、ディスクアクセス機構２３は第２のアクセス制御部の一例として用いられ、二重系制御機構２４は第２の二重系制御部の一例として用いられる。また、ミラーディスク制御機構２６は第２の記録制御部の一例として用いられ、占有管理テーブル２７は第２の状態管理部の一例として用いられ、物理ディスク２８は第２の記録部の一例として用いられる。
【００３４】
物理計算機２０の各部は、物理計算機１０が備える仮想計算機１１、ディスクアクセス機構１３と、二重系制御機構１４と、ホストＯＳ１５と、ミラーディスク制御機構１６と、占有管理テーブル１７と同様の機能を有する。そして、仮想計算機２１は、仮想計算機１１に対して、現用系の業務停止に伴い業務を引き継ぐ待機系として稼働する。このため、待機系に設定された仮想計算機２１では、アプリケーション１２と同じ処理を実行可能なアプリケーション２２は稼働していない。ただし、二重系制御機構２４は、仮想計算機１１からのハートビートの途絶を検知した場合に、仮想計算機２１を現用系として設定し、アプリケーション２２を起動する。
【００３５】
物理ディスク２８は、物理ディスク１８のミラーディスクとして用いられる。物理ディスク２８は、アプリケーション１２が発行するＷｒｉｔｅ要求をミラーディスク制御機構１６及びミラーディスク通信路３１を介して受け取ることで、物理ディスク１８が記録するデータと常に一致した状態のデータを記録する。
【００３６】
上述したように現用系の仮想計算機１１で稼働するアプリケーション１２が発行する物理ディスク１８へのＩ／Ｏ要求はミラーディスク制御機構１６を介して行われる。そして、ミラーディスク制御機構１６は、占有管理テーブル１７の状態が「占有」であれば物理ディスク１８にＩ／Ｏ要求を中継する。このとき、占有管理テーブル２７の状態が「非占有」である。
【００３７】
一方、二重系制御機構２４が現用系の仮想計算機１１からのハートビートの途絶を検知すると、仮想計算機２１の運転モードが待機系から現用系に変わり、占有管理テーブル２７の状態が占有に設定され、占有管理テーブル１７の状態が非占有に設定される。このため、仮想計算機１１が再び現用系として物理ディスク１８へのアクセスを行うときには、占有管理テーブル１７の状態が「非占有」に設定されたままとなっている。このため、ミラーディスク制御機構１６は、占有管理テーブル１７の状態が「非占有」に設定された状態で、物理ディスク１８へのＩ／Ｏ要求がされた場合には、物理ディスク１８にＩ／Ｏ要求を中継せず、ディスクアクセス機構１３に「アクセス競合」を通知する。
【００３８】
「アクセス競合」通知は、一般にＳＣＳＩコントローラーを備える共有ディスク装置を利用した二重系システムにおいて、両系からのディスクアクセスが発生した場合にＳＣＳＩコントローラーが通知する「RESERVATION CONFLICT」通知と同様の機能を持つ。「アクセス競合」通知を受信したディスクアクセス機構１３は、他系の仮想計算機２１が現用系として物理ディスク２８を占有しているにも関わらず自らも現用系として物理ディスク１８にアクセスすると、二重系制御機構１４に「アクセス競合」を通知する。「アクセス競合」が通知された二重系制御機構１４は、仮想計算機１１を停止するため、物理ディスク１８へのアクセスも停止し、スプリットブレインを回避することが可能となる。
【００３９】
＜各機構の処理例＞
次に、各機構の処理例について、図２〜図４を参照して説明する。
図２は、二重系制御機構１４の処理例を示すフローチャートである。
【００４０】
始めに、二重系制御機構１４は、仮想計算機１１の運転モードの初期設定を行う（Ｓ１）。運転モードとは、仮想計算機１１に設定される「現用」又は「待機」の系を表す。
【００４１】
次に、二重系制御機構１４は、運転モードが「現用」に設定されているか否かを判断する（Ｓ２）。運転モードが「現用」に設定されている場合（Ｓ２のＹＥＳ）には、二重系制御機構１４は、ミラーディスク制御機構１６へ物理ディスク１８の占有要求を発行し（Ｓ３）、アプリケーション１２を起動する（Ｓ４）。運転モードが「現用」に設定されていない場合（Ｓ２のＮＯ）、二重系制御機構１４は、ステップＳ５に処理を移す。
【００４２】
次に、二重系制御機構１４は、ハートビート監視を行う（Ｓ５）。二重系制御機構１４は、他系の二重系制御機構２４に対して、定期的にハートビートの送信を行うと共に、他系の二重系制御機構２４から受信するハートビートを確認する。
【００４３】
次に、二重系制御機構１４は、ディスクアクセス機構１３から「アクセス競合」通知を受信したか否かを判断する（Ｓ６）。「アクセス競合」通知を受信していなければ（Ｓ６のＮＯ）、二重系制御機構１４は、他系のハートビートの途絶を検出したか否かを判断する（Ｓ７）。
【００４４】
二重系制御機構１４は、ハートビートの途絶を検出していない場合（Ｓ７のＮＯ）、ステップＳ５に処理を移し、引き続きハートビート監視を行う。一方、二重系制御機構１４は、ハートビートの途絶を検出した場合（Ｓ７のＹＥＳ）、仮想計算機１１の現在の運転モードが「待機」であるか否かを判断する（Ｓ８）。
【００４５】
仮想計算機１１の運転モードが「待機」であれば（Ｓ８のＹＥＳ）、二重系制御機構１４が仮想計算機１１の運転モードが「待機」から「現用」に変更する処理を始める。このとき、二重系制御機構１４は、ミラーディスク制御機構１６へ物理ディスク１８の占有解除要求を発行した（Ｓ９）後、物理ディスク１８の占有要求を発行し（Ｓ１０）、アプリケーション１２を起動する（Ｓ１１）。そして、二重系制御機構１４は、仮想計算機１１の運転モードを「現用」に設定する（Ｓ１２）。運転モードが「現用」に設定された仮想計算機１１はアプリケーション１２を起動して、これまで運転モードが「現用」であった仮想計算機２１から引き継いだ業務を開始する。
【００４６】
一方、二重系制御機構１４は、ハートビート監視中に、ディスクアクセス機構１３から「アクセス競合」通知を受信した場合（Ｓ６のＹＥＳ）、他系の仮想計算機２１が現用系で稼働中にも関わらず自らが現用系として物理ディスク１８にアクセスしたと判断する。そして、二重系制御機構１４は、自ら仮想計算機１１の停止を行う（Ｓ１３）。
【００４７】
このように、仮想計算機１１のハートビートが一時的に途絶し、仮想計算機２１の運転モードが「待機」から「現用」に切り替わった後、仮想計算機１１が現用系として物理ディスク１８へのアクセスを再開するとスプリットブレインが発生する。しかし、本実施の形態例に係る二重系システム１では、ミラーディスク制御機構１６が占有管理テーブル１７を参照し、物理ディスク１８は他系のミラーディスク制御機構２６により占有されているため、ディスクアクセスが競合したことを検知する。そして、二重系制御機構１４は、仮想計算機１１を停止させるため、スプリットブレインを回避することが可能となる。
【００４８】
図３は、ディスクアクセス機構１３の処理例を示すフローチャートである。
【００４９】
ディスクアクセス機構１３は、アプリケーション１２、又はミラーディスク制御機構１６からの要求に応じて起動し、要求種別を判定する（Ｓ２１）。
【００５０】
要求種別がミラーディスク制御機構１６によって発行されたＩ／Ｏ結果である場合、さらにディスクアクセス機構１３は、Ｉ／Ｏ結果が「アクセス競合」であるか否かを判断する（Ｓ２２）。要求種別が「アクセス競合」である場合（Ｓ２２のＹＥＳ）、両系からのディスクアクセスによりスプリットブレインが発生する。このため、ディスクアクセス機構１３は、仮想計算機１１を停止するために二重系制御機構１４へ「アクセス競合」を通知して（Ｓ２３）、処理を終了する。
【００５１】
要求種別が「アクセス競合」でない場合（Ｓ２２のＮＯ）、物理ディスク１８にアクセスしたミラーディスク制御機構１６から受信したデータである。このため、ディスクアクセス機構１３は、アプリケーション１２へ受信したデータを送信して（Ｓ２４）、処理を終了する。
【００５２】
なお、ステップＳ２１で判定した要求種別がアプリケーション１２からのＩ／Ｏ要求である場合、ディスクアクセス機構１３は、ミラーディスク制御機構１６にＩ／Ｏ要求を発行して（Ｓ２５）、処理を終了する。
【００５３】
このようにディスクアクセス機構１３は、アプリケーション１２からのＩ／Ｏ要求をミラーディスク制御機構１６へ中継することで占有管理テーブル１７の状態判定を可能とし、物理ディスク１８と物理ディスク２８のミラー状態を保障する。
【００５４】
図４は、ミラーディスク制御機構１６の処理例を示すフローチャートである。
【００５５】
ミラーディスク制御機構１６は、アプリケーション１２、又は二重系制御機構１４からの要求に応じて起動し、要求種別を判定する（Ｓ３１）。
【００５６】
ステップＳ３１で判定した要求種別が占有解除要求又は占有要求の場合、ミラーディスク制御機構１６は、要求種別が占有解除要求又は占有要求のいずれであるかを判定する（Ｓ３２）。
【００５７】
ステップＳ３２で判定した要求種別が占有要求の場合、ミラーディスク制御機構１６は、占有管理テーブル１７の状態を「占有」へ設定する（Ｓ３３）。そして、ミラーディスク制御機構１６は、他系のミラーディスク制御機構２６へ占有解除要求を発行し（Ｓ３４）、処理を終了する。
【００５８】
ステップＳ３２で判定した要求種別が占有解除要求の場合、ミラーディスク制御機構１６は、占有管理テーブル１７の状態を「非占有」へ設定し（Ｓ３５）、処理を終了する。
【００５９】
このように、ミラーディスク制御機構１６は、系切替え時に二重系制御機構１４から占有管理テーブル１７の状態を遷移させる要求を受け付けることで、自系の占有管理テーブル１７の状態を「占有」に遷移させる。併せてミラーディスク制御機構１６は、他系のミラーディスク制御機構２６に対して、物理ディスク２８の占有を解除させ、占有管理テーブル２７の状態「非占有」に変更させる。これにより、ミラーディスク制御機構１６は、物理ディスク１８を占有してアクセス可能な状態を保障することができる。
【００６０】
ステップＳ３１で判定した要求種別がアプリケーション１２からのＩ／Ｏ要求である場合、ミラーディスク制御機構１６は、占有管理テーブル１７を参照して物理ディスク１８の占有状況を判定する（Ｓ３６）。
【００６１】
ステップＳ３６で判定した占有管理テーブル１７の状態が「非占有」である場合（Ｓ３６のＮＯ）、ミラーディスク制御機構１６は、他系の仮想計算機２１が現用系として稼働しているにも関わらず物理ディスク１８へのＩ／Ｏ要求が発生したと判断する。このため、ミラーディスク制御機構１６は、ディスクアクセス機構１３へ「アクセス競合」を通知し（Ｓ３７）、処理を終了する。
【００６２】
ステップＳ３６で判定した占有管理テーブル１７の状態が「占有」である場合（Ｓ３６のＹＥＳ）、ミラーディスク制御機構１６は、アプリケーション１２からのＩ／Ｏ要求を物理ディスク１８へ中継すべく、Ｉ／Ｏ要求種別を判定する（Ｓ３８）。
【００６３】
ステップＳ３８で判定したＩ／Ｏ要求種別が「Ｒｅａｄ要求」である場合、ミラーディスク制御機構１６は、物理ディスク１８へＲｅａｄ要求を発行し（Ｓ３９）、物理ディスク１８からデータを読み出して処理を終了する。ステップＳ３９の処理は、ミラーディスク制御機構１６が物理ディスク１８のデータを参照するのみであるため、他系のミラーディスク制御機構２６への「Ｒｅａｄ要求」の中継は行わない。
【００６４】
ステップＳ３８で判定したＩ／Ｏ要求種別が「Ｗｒｉｔｅ要求」である場合、ミラーディスク制御機構１６は、物理ディスク１８へＷｒｉｔｅ要求を発行し（Ｓ４０）、物理ディスク１８にアプリケーション１２が処理したデータを書き込む。また、ミラーディスク制御機構１６は、他系のミラーディスク制御機構２６にＷｒｉｔｅ要求を中継し（Ｓ４１）、処理を終了する。ステップＳ４０，Ｓ４１の処理により、物理ディスク１８，２８に同じデータが記録される。
【００６５】
このように、ミラーディスク制御機構１６が保持する占有管理テーブル１７の状態が「占有」であれば、自系が現用系、他系が待機系として二重系システム１が稼働中であると判断できる。そして、ミラーディスク制御機構１６は、アプリケーション１２からのＷｒｉｔｅ要求を待機系のミラーディスク制御機構２６へ中継し、物理ディスク２８にデータを記録させるミラーリングを行うことが可能となる。
【００６６】
また、物理ディスク１８に対してアクセス競合が発生した場合には、ミラーディスク制御機構１６が、二重系システム１における「アクセス競合」をディスクアクセス機構１３、二重系制御機構１４に通知することで、スプリットブレインの回避を可能とする。
【００６７】
＜二重系システムの処理例＞
次に、二重系システム１の各部の処理例について、図５〜図８を参照して説明する。
図５は、二重系システム１が起動した後、ハートビート監視を行うまでの処理の例を示すシーケンス図である。
【００６８】
始めに、物理計算機１０の起動時に運転モードが「現用」に設定され（Ｓ５１）、物理計算機２０の起動時に運転モードが「待機」に設定される（Ｓ５２）。現用系の二重系制御機構１４は、ミラーディスク制御機構１６に占有要求を発行する（Ｓ５３）。ミラーディスク制御機構１６は、占有要求種別を判定し（Ｓ５４）、占有管理テーブル１７の状態を「占有」に設定した後（Ｓ５５）、待機系のミラーディスク制御機構２６に占有解除要求を発行する（Ｓ５６）。
【００６９】
待機系のミラーディスク制御機構２６は、ミラーディスク制御機構１６から受信した占有要求種別を判定し（Ｓ５７）、占有管理テーブル２７の状態を「非占有」に設定する（Ｓ５８）。
【００７０】
現用系の二重系制御機構１４は、アプリケーション１２を起動し（Ｓ５９）、待機系の二重系制御機構２４との間でハートビート監視を開始する（Ｓ６０）。一方、待機系の二重系制御機構２４はアプリケーション２２を起動することなく、現用系の二重系制御機構１４との間でハートビート監視を開始する（Ｓ６１）。
【００７１】
図６は、二重系システム１のミラーリング処理の例を示すシーケンス図である。
【００７２】
現用系の二重系制御機構１４と、待機系の二重系制御機構２４は互いにハートビート監視を行っている（Ｓ７１，Ｓ７２）。
アプリケーション１２が物理ディスク１８にＩ／Ｏ要求を発行すると、二重系制御機構１４は、ディスクアクセス機構１３を通じて、ミラーディスク制御機構１６にＩ／Ｏ要求を発行する（Ｓ７３）。ミラーディスク制御機構１６は、Ｉ／Ｏ要求のＩ／Ｏ要求種別を判定し（Ｓ７４）、Ｒｅａｄ要求であれば物理ディスク１８へＲｅａｄ要求を発行する（Ｓ７５）。
【００７３】
Ｉ／Ｏ要求種別がＷｒｉｔｅ要求であれば、ミラーディスク制御機構１６は物理ディスク１８へＷｒｉｔｅ要求を発行し、物理ディスク１８にデータを書き込む（Ｓ７６）。そして、ミラーディスク制御機構１６は、待機系のミラーディスク制御機構２６にＷｒｉｔｅ要求を中継する（Ｓ７７）。そして、ミラーディスク制御機構２６は、物理ディスク２８へＷｒｉｔｅ要求を発行し、物理ディスク２８にデータを書き込む（Ｓ７８）。このようなミラーリング処理により、物理ディスク１８，２８には同じデータが書き込まれる。
【００７４】
その後、ミラーディスク制御機構１６は、ディスクアクセス機構１３を通じて、二重系制御機構１４にＩ／Ｏ結果（読み取りデータ、書き込み結果等）を通知する（Ｓ７９）。二重系制御機構１４は、Ｉ／Ｏ結果を受信する（Ｓ８０）。
【００７５】
図７は、ハートビート途絶を検出した場合における二重系システム１の処理例を示すシーケンス図である。
【００７６】
現用系の二重系制御機構１４と、待機系の二重系制御機構２４は互いにハートビート監視を行っている（Ｓ８１，Ｓ８２）。ここで、待機系の二重系制御機構２４がハートビート途絶を検出したものとする（Ｓ８３）。
【００７７】
このとき、二重系制御機構２４は、ミラーディスク制御機構２６に占有解除要求を発行する（Ｓ８４）。ミラーディスク制御機構２６は、占有要求種別を判定した後、占有管理テーブル２７の状態を「非占有」に設定する（Ｓ８５）。
【００７８】
次に、二重系制御機構２４は、ミラーディスク制御機構２６に占有要求を発行する（Ｓ８６）。ミラーディスク制御機構２６は、占有要求種別を判定した後、占有管理テーブル２７の状態を「占有」に設定する（Ｓ８７）。
【００７９】
そして、ミラーディスク制御機構２６は、現用系のミラーディスク制御機構１６に対して占有解除要求を発行する（Ｓ８８）。ミラーディスク制御機構１６は、占有要求種別を判定した後、占有管理テーブル１７の状態を「非占有」に設定する（Ｓ８９）。
【００８０】
その後、二重系制御機構２４は、アプリケーション２２を起動し（Ｓ９０）。運転モードを「現用」に設定する（Ｓ９１）。以降の処理では、仮想計算機２１が現用系として稼働する。
【００８１】
図８は、現用系として物理ディスク１８へのアクセスを再開した仮想計算機１１の処理例を示すシーケンス図である。
【００８２】
図７の処理を経た後、二重系制御機構１４はハートビート監視を継続する（Ｓ１０１）。そして、アプリケーション１２が物理ディスク１８にＩ／Ｏ要求を発行すると、二重系制御機構１４は、ディスクアクセス機構１３を通じて、ミラーディスク制御機構１６にＩ／Ｏ要求を発行する（Ｓ１０２）。
【００８３】
しかし、図７に示したように、既に他系の仮想計算機２１が現用系として稼働しており、ミラーディスク制御機構１６が管理する占有管理テーブル１７の状態が「非占有」に設定されている。このため、ミラーディスク制御機構１６は、ディスクアクセス機構１３に「アクセス競合」を通知し（Ｓ１０３）、ディスクアクセス機構１３は、二重系制御機構１４に「アクセス競合」を通知する（Ｓ１０４）。
【００８４】
二重系制御機構１４は、ディスクアクセス機構１３からアクセス競合を受信すると（Ｓ１０５）、仮想計算機１１を停止する（Ｓ１０６）。このため、以降の処理では仮想計算機２１だけが稼働する。
【００８５】
以上説明した一実施の形態例に係る二重系システム１において、例えば、現用系である仮想計算機１１が一時的に負荷上昇したことによりハートビートが途絶すると、ハートビートの途絶を検知した仮想計算機２１が待機系から現用系へと切り替わる。そして、仮想計算機２１は、自系の物理ディスク２８を「占有」に設定し、他系の物理ディスク１８を「非占有」に設定する。これにより、ハートビートの送信を途絶した仮想計算機１１が再び現用系として物理ディスク１８にアクセスした場合には、ミラーディスク制御機構１６が検知した「アクセス競合」が二重系制御機構１４に通知される。そして、二重系制御機構１４が仮想計算機１１を停止することで、スプリットブレインを回避することができる。
【００８６】
また、物理ディスク１８，２８に対する状態遷移通知は、一般的な共有ディスク装置に備わるＳＣＳＩコントローラーが受付可能であるＳＣＳＩコマンドの、「SCSI RESET」、「SCSI RESERVATION」、「RESERVATION CONFLICT」と同様の機構を持つ。このため、既に稼働中の共有ディスク装置を利用した二重系システムをそのまま共有ディスク装置を用いない安価な二重系システムとして構築することが可能である。
【００８７】
なお、待機系から現用系に切替えられた二重系制御機構２４は、現用系であった二重系制御機構１４に対して、仮想計算機１１の運用モードを「待機」に設定する要求を発行してもよい。これにより、運用モードが「待機」に設定された仮想計算機１１が待機系として稼働するため、スプリットブレインを回避することができる。
【００８８】
また、第１及び第２の状態管理部の一例として、占有管理テーブル１７，２７を示したが、物理計算機１０，２０の不図示のメモリ内に設けられたフラグ領域をオン又はオフすることにより、「占有」又は「非占有」を表してもよい。
【００８９】
また、本発明は上述した実施の形態例に限られるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りその他種々の応用例、変形例を取り得ることは勿論である。
例えば、上述した実施の形態例は本発明を分かりやすく説明するために装置及びシステムの構成を詳細且つ具体的に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施の形態例の構成の一部を他の実施の形態例の構成に置き換えることは可能であり、さらにはある実施の形態例の構成に他の実施の形態例の構成を加えることも可能である。また、各実施の形態例の構成の一部について、他の構成の追加、削除、置換をすることも可能である。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００９０】
１…二重系システム、１０…物理計算機、１１…仮想計算機、１２…アプリケーション、１３…ディスクアクセス機構、１４…二重系制御機構、１５…ホストＯＳ、１６…ミラーディスク制御機構、１７…占有管理テーブル、１８…物理ディスク、２０…物理計算機、２１…仮想計算機、２２…アプリケーション、２３…ディスクアクセス機構、２４…二重系制御機構、２６…ミラーディスク制御機構、２７…占有管理テーブル、２８…物理ディスク
【図１】
2017010102.tif 000003
【図２】
2017010102.tif 000004
【図３】
2017010102.tif 000005
【図４】
2017010102.tif 000006
【図５】
2017010102.tif 000007
【図６】
2017010102.tif 000008
【図７】
2017010102.tif 000009
【図８】
2017010102.tif 000010