説明

フォールトトレラントシステム、サーバ、フォールトトレラント化方法およびプログラム

【課題】同時に処理するジョブの数が現在のサーバで処理できるジョブの数を超えた場合には、新たに1台のサーバを用意すればよく、待機サーバを必要としないフォールトトレラントシステム等を提供する。
【解決手段】サーバ1およびサーバ2は、それぞれハイパーバイザを起動し、複数のバーチャルマシンを構築する。各ハイパーバイザは、いずれのサーバも1以上のプライマリのバーチャルマシンと1以上のセカンダリのバーチャルマシンを有するようにプライマリおよびセカンダリを割り当て、同一サーバ内のバーチャルマシンには異なる処理を割り当てる。いずれかのサーバに障害が発生したと判定した場合、障害が発生したサーバのプライマリのバーチャルマシンとペアのセカンダリのバーチャルマシンを有するサーバは、該セカンダリのバーチャルマシンをプライマリに昇格させる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、フォールトトレラントシステム、サーバ、フォールトトレラント化方法およびプログラムに関する。
【背景技術】
【0002】
データ処理を実行するシステムにおいて、システムの一部に障害が発生しても、停止することなく、連続稼働することを可能にしたフォールトトレラントシステムが知られている。フォールトトレラントシステムでは、たとえば、ロックステップ方式が採用される。ロックステップ方式のフォールトトレラントシステムでは、多重化されたシステムのコンポーネント同士で、互いに同期をとりながら同じ処理を実行する。たとえば、1つのジョブを処理するフォールトトレラントシステムは、2台のサーバで構成され、2台のうちどちらかがプライマリとして動作し、もう一方がセカンダリとして動作または待機する。
【0003】
特許文献1には、サーバを複数台使用して冗長化することによりシステムの可用性を向上させるクラスタシステムが開示されている。特許文献1のクラスタシステムでは、複数台のサーバがストレージを共有している。
【0004】
特許文献2には、独立した計算機上の仮想計算機を組み合わせて二重化し、プライマリとセカンダリとが独立して持つ両ストレージの状態を一致させながら、両仮想計算機の実行状態を同期させる高可用システムが開示されている。特許文献2の高可用システムでは、複数の計算機が独立して持つストレージを同期させている。
【0005】
特許文献3には、複数の仮想サーバが稼働する複数の物理サーバと、単一の待機系サーバを具備し、物理サーバ障害時に仮想化機構の起動ディスクを待機系サーバに接続し直すとともに、障害発生時に起動していた仮想サーバを自動的に起動するサーバシステムの障害回復方法が開示されている。
【0006】
特許文献4には、故障などが原因で主たるサーバとバックアップサーバの一方が利用不能となっても、冗長性のある共用メモリを用いて動作を継続する分散形計算機処理システムが開示されている。
【0007】
特許文献5には、入出力サーバからデイジーチェーン接続方式により接続されるコンピュータ切替方法が記載されている。特許文献6には、デイジーチェーン構成とバス構成の両方をなすようにネットワーク・ケーブルに結合されている複数のゲートによって構成されているネットワークが記載されている。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2009−187090号公報
【特許文献2】特開2010−026932号公報
【特許文献3】特開2010−211819号公報
【特許文献4】特開2003−531435号公報
【特許文献5】特開2008−293521号公報
【特許文献6】特開平06−131281号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
特許文献1および2のシステムでは、同時に処理するジョブの数が2台の物理サーバで処理できるジョブの数を超えた場合には、新たに2台の物理サーバを用意する必要がある。
【0010】
特許文献3に記載の技術では、同時に処理するジョブの数が現用系サーバで処理できるジョブの数を超えた場合には、新たに1台の現用系サーバを用意すればよいが、待機系サーバが必要である。また、待機系サーバが処理するジョブの数が、待機系サーバで処理できるジョブの数を超えた場合に、待機系サーバを新たに用意する必要がある。さらに、物理サーバに障害が発生してから待機系サーバに仮想サーバを起動させるので、障害が発生した物理サーバと待機系サーバとの切り替えに時間がかかる。
【0011】
特許文献4に記載の技術では、主たるサーバとバックアップサーバが固定しているので、同時に処理するジョブの数が2台のサーバが処理できるジョブの数を超えた場合には、新たに2台のサーバを用意する必要がある。
【0012】
特許文献5および特許文献6に記載の技術は、フォールトトレラントシステムを構成するものではない。
【0013】
本発明は、このような問題点に鑑みてなされたもので、同時に処理するジョブの数が現在のサーバで処理できるジョブの数を超えた場合には、新たに1台のサーバを用意すればよく、待機サーバを必要としないフォールトトレラントシステム、サーバ、フォールトトレラント化方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0014】
本発明の第1の観点に係るフォールトトレラントシステムは、
それぞれ異なる処理が割り当てられた2以上のバーチャルマシンを有する2以上のサーバを備え、
前記サーバは、いずれも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有することを特徴とする。
【0015】
本発明の第2の観点に係るサーバは、
それぞれ異なる処理が割り当てられた2以上のバーチャルマシンを有し、1以上の他のサーバに接続する2以上のサーバであって、
いずれも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有することを特徴とする。
【0016】
本発明の第3の観点に係るフォールトトレラント化方法は、
それぞれ異なる処理が割り当てられた2以上のバーチャルマシンを有する2以上のサーバが実行する
いずれの前記サーバも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有するように、前記バーチャルマシンに前記プライマリまたは前記セカンダリを割り当てる割り当てステップを備えることを特徴とする。
【0017】
本発明の第4の観点に係るプログラムは、
1以上の他のコンピュータに接続するコンピュータを、
それぞれ異なる処理が割り当てられた2以上のバーチャルマシン、
いずれも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有するように、前記バーチャルマシンに前記プライマリまたは前記セカンダリを割り当てる割り当て手段、
として機能させることを特徴とする。
【発明の効果】
【0018】
本発明によれば、同時に処理するジョブの数が現在のサーバで処理できるジョブの数を超えた場合には、新たに1台のサーバを用意すればよく、待機サーバを必要としない。
【図面の簡単な説明】
【0019】
【図1】本発明の実施の形態に係るフォールトトレラントシステムの構成例を示す図である。
【図2】実施の形態に係るサーバの機能構成例を示す図である。
【図3】実施の形態に係るフォールトトレラント処理の動作の一例を示すフローチャートを示す図である。
【図4】実施の形態に係るフォールトトレラント処理の動作の一例を示すフローチャートを示す図である。
【図5】2つのバーチャルマシンを有する2台のサーバが2つのジョブを処理する場合の模式図である。
【図6】2つのバーチャルマシンを有する3台のサーバが3つのジョブを処理する場合の模式図である。
【図7】4つのバーチャルマシンを有する2台のサーバが4つのジョブを処理する場合の模式図である。
【図8】4つのバーチャルマシンを有する3台のサーバが5つのジョブを処理する場合の模式図である。
【発明を実施するための形態】
【0020】
本発明におけるバーチャルマシンとは、コンピュータのCPUや記憶サーバなどのリソースを仮想化する技術によりサーバのメモリ上に実現された仮想のコンピュータを指す。フォールトトレラントシステムにおけるプライマリのバーチャルマシンとは、主としてジョブの処理を行うバーチャルマシンであり、セカンダリのバーチャルマシンとは、同一の処理が割り当てられた予備のバーチャルマシンである。プライマリのバーチャルマシンを有するサーバに障害が発生した場合、セカンダリのバーチャルマシンをプライマリに昇格することで、該ジョブの処理を続行することができる。
【0021】
本発明のフォールトトレラントシステムは、2以上のバーチャルマシンを有する複数のサーバを備え、いずれのサーバも1以上のプライマリのバーチャルマシンと1以上のセカンダリのバーチャルマシンを有する。
【0022】
また、本発明において、「処理を割り当てる」とは、バーチャルマシンにジョブの実行を指示することだけでなく、セカンダリのバーチャルマシンがプライマリに昇格した際にジョブの実行ができるように、プライマリのバーチャルマシンのデータをメモリコピーするよう設定することも含む。
【0023】
以下、本発明を実施するための形態について図面を参照して詳細に説明する。なお図中、同一または相当部分には同じ符号を付す。
【0024】
図1は、本発明の実施の形態に係るフォールトトレラントシステム100の構成例を示す。フォールトトレラントシステム100は、サーバ1と、サーバ2と、ネットワークスイッチ(以下LANスイッチという)5とを備える。
【0025】
LANスイッチ5は、ネットワーク7と接続されている。LANスイッチ5のポート51はサーバ1に接続され、ポート52はサーバ2に接続されている。
【0026】
サーバ1およびサーバ2は、同一の構成を有する。ここでは、代表してサーバ1の構成について説明する。ハードウェア11は、サーバ1に構築されるバーチャルマシン110およびバーチャルマシン120のOS(Operating System)のソフトウェアを格納しているストレージ112と、ストレージ112内に格納された各種プログラムを実行するプロセッサ111と、LANスイッチ5のポート51と接続するネットワークインタフェースカード(以下NICという)113と、通信部114とを備える。NIC113は、物理インタフェースである。ストレージ112は、複数のハードディスクを備えてもよい。サーバ1は、ストレージ112に格納されたOSのソフトウェアを実行させることによりバーチャルマシンを実現する。通信部114は、サーバ2の通信部214と、図示しないインターコネクトを介して通信を行う。
【0027】
メモリ10上では、ハイパーバイザ150とバーチャルマシン110およびバーチャルマシン120とが稼動している。サーバ1の起動時に、プロセッサ111が、ストレージ112に格納されているハイパーバイザ150の起動プログラムを読み出して実行することで、ハイパーバイザ150がメモリ10上にロードされる。ハイパーバイザ150をメモリ10上に配備して稼働させることで、これらのバーチャルマシンを構築することができる。バーチャルマシン110およびバーチャルマシン120は、それぞれ独立にOSを稼働させることができる。前述のように、バーチャルマシン110およびバーチャルマシン120のOSのソフトウェアは、ストレージ112に格納されている。
【0028】
以下に、ハイパーバイザ150の機能構成を説明する。ハイパーバイザ150は、仮想インタフェースとして、バーチャルマシン110がLAN通信を行うための仮想NIC152と、バーチャルマシン120がLAN通信を行うための仮想NIC154とを備える。また、ハイパーバイザ150は、LANスイッチ5を模擬した仮想LANスイッチ156を備える。
【0029】
仮想NIC152は、仮想LANスイッチ156を介してNIC113と接続し、LANスイッチ5を介してネットワーク7と通信を行う。同様に、仮想NIC154は、仮想LANスイッチ156を介してNIC113と接続し、LANスイッチ5を介してネットワーク7と通信を行う。
【0030】
なお、ストレージ112は、バーチャルマシンのOSのソフトウェアを含むバーチャルマシンにジョブの処理を実行させるための各種データを格納する。ハイパーバイザ150は、ストレージ112を模擬した仮想ストレージを備え、各バーチャルマシンは、仮想ストレージとデータの送受信を行ってもよい。
【0031】
このように、ハイパーバイザがプロセッサ上で動作し、バーチャルマシンがハイパーバイザ上で動作することによりバーチャルマシンが実現される。
【0032】
サーバ2は、プロセッサ211と、ストレージ212と、NIC213と通信部214とを有するハードウェア21と、ハイパーバイザ250とバーチャルマシン210およびバーチャルマシン220とが稼動するメモリ20とを備え、サーバ1と同じ構成である。ハイパーバイザ250は、仮想NIC252、仮想NIC254および仮想LANスイッチ256を備える。なお、サーバは、処理するジョブ数に合わせて用意するが、ジョブ数は2以上、サーバが有するバーチャルマシン数は2以上、サーバ数は2台以上が好ましい。
【0033】
本実施の形態では、サーバ1およびサーバ2の各ハイパーバイザは、あらかじめ各バーチャルマシンに処理を割り当て、プライマリまたはセカンダリの設定を行う。また、各ハイパーバイザは、これらの設定をP/S情報として共有している。P/S情報は、たとえば各通信部を介して同期させる。なお、同一サーバ内のバーチャルマシンには、異なるジョブが割り当てられる。すなわち、同一サーバ内に同じジョブのプライマリのバーチャルマシンとセカンダリのバーチャルマシンは存在しない。また、ハイパーバイザ150は、各バーチャルマシンに割り当てたリソースの監視を行う。具体的にはバーチャルマシンに割り当てたCPUリソース、割当時間、I/O処理数などのリソースを監視する。
【0034】
図2は、実施の形態に係るサーバの機能構成例を示す図である。サーバ1は、バーチャルマシン(図中、VMと記載)110、バーチャルマシン(図中、VMと記載)120、ジョブ取得部141、送受信部142、死活監視部143、切り替え部144、割り当て部145および記憶部146を備える。サーバ2も同じ機能構成である。
【0035】
サーバ1のジョブ取得部141は、プライマリのバーチャルマシンが実行するジョブを取得する。ジョブ取得部141は、ストレージ112、NIC113、プロセッサ11がメモリ10上に稼働するハイパーバイザ150によって実現される。
【0036】
バーチャルマシン110は、ジョブ取得部141が取得したジョブのうち、あらかじめバーチャルマシン110にプライマリとして割り当てられたジョブの処理を実行する。セカンダリとして割り当てられたジョブの処理は実行しない。プライマリである場合、バーチャルマシン110は、割り当てられたジョブを処理した結果を示す結果データを記憶部146に記憶する。
【0037】
バーチャルマシン120は、ジョブ取得部141が取得したジョブのうち、あらかじめバーチャルマシン120にプライマリとして割り当てられたジョブの処理を実行する。セカンダリとして割り当てられたジョブの処理は実行しない。プライマリである場合、バーチャルマシン120は、割り当てられたジョブを処理した結果を示す結果データを記憶部146に記憶する。
【0038】
送受信部142は、P/S情報を参照して、記憶部146に記憶された結果データを含むプライマリのバーチャルマシンのデータのコピーをペアとなるセカンダリのバーチャルマシンを有するサーバに定期的に送信する。一方、送受信部142は、セカンダリのバーチャルマシンとペアとなるプライマリのバーチャルマシンを有するサーバから、結果データを含む該プライマリのバーチャルマシンのデータのコピーを受信し、記憶部146に記憶する。送受信部142は、NIC113、プロセッサ11がメモリ10上に稼働するハイパーバイザ150によって実現される。
【0039】
なお、送受信部142は、プライマリのバーチャルマシンのデータのコピーの送受信をインターコネクトを介して行ってもよい。つまり、送受信部142は、通信部214、プロセッサ11がメモリ10上に稼働するハイパーバイザ150によって実現してもよい。また、送受信部142が送受信するプライマリのバーチャルマシンのデータのコピーは、前回までのデータとの差分のデータのコピーであってもよい。
【0040】
死活監視部143は、通信部114を用いて、他のサーバの死活監視を行う。死活監視部143は、サーバ2の通信部からの通信が途切れた場合は、サーバ2に障害が生じたと判断する。死活監視部143は、プロセッサ11がメモリ10上に稼働するハイパーバイザ150と、通信部114によって実現される。
【0041】
切り替え部144は、P/S情報を参照して、死活監視部143が障害が生じたと判断したサーバのバーチャルマシンがプライマリとして処理を実行していたジョブのセカンダリのバーチャルマシンをサーバ1が有するか否かを判定する。たとえば、バーチャルマシン120が、該ジョブのセカンダリのバーチャルマシンであったとすると、切り替え部144は、バーチャルマシン120の設定をセカンダリからプライマリに切り替える。同時に、切り替え部144は、P/S情報のバーチャルマシン120の設定をセカンダリからプライマリに書き替える。これにより、バーチャルマシン120は、割り当てられた処理を実行を開始する。切り替え部144は、プロセッサ11がメモリ10上に稼働するハイパーバイザ150によって実現される。
【0042】
割り当て部145は、あらかじめ、サーバ2と通信を行い、サーバ1およびサーバ2のいずれも1以上のプライマリのバーチャルマシンと1以上のセカンダリのバーチャルマシンを有するように、プライマリまたはセカンダリを割り当てる。たとえば、サーバ1の割り当て部145が、バーチャルマシン110をプライマリと設定し、そのペアのセカンダリをサーバ2の割り当て部がサーバ2のバーチャルマシン210に設定したとすると、サーバ1の割り当て部145がセカンダリと設定したバーチャルマシン120のペアのプライマリは、サーバ2の割り当て部がサーバ2のバーチャルマシン220に設定する。また、割り当て部145は、プライマリのバーチャルマシンとセカンダリのバーチャルマシンとには同一の処理を割り当てる。割り当て部145は、P/S情報にこれらの情報を書き込む。割り当て部145は、プロセッサ11がメモリ10上に稼働するハイパーバイザ150によって実現される。
【0043】
記憶部146は、プライマリのバーチャルマシンがジョブを処理した結果を示す結果データを含むプライマリのバーチャルマシンのデータを記憶する。また、記憶部146は、セカンダリのバーチャルマシンとペアとなるプライマリのバーチャルマシンのデータのコピーを記憶する。記憶部146は、ストレージ112によって実現される。
【0044】
以下に、バーチャルマシンのプライマリまたはセカンダリの設定について図1を参照して詳細に説明する。ハイパーバイザ150は、たとえばネットワーク7からLANスイッチ5を介して取得するジョブAをバーチャルマシン110に割り当て、プライマリのバーチャルマシンとする。このとき、P/S情報には、「バーチャルマシン110」に「ジョブA」が「プライマリ」として割り当てられたことを示す情報が記憶される。サーバ2のハイパーバイザは、バーチャルマシン210をセカンダリのバーチャルマシンとする。この場合、P/S情報には、「バーチャルマシン210」に「ジョブA」が「セカンダリ」として割り当てられたことを示す情報が記憶される。ジョブAに対してプライマリのバーチャルマシン110は、ジョブAを実行し、ジョブAに対してセカンダリのバーチャルマシン210は、待機する。
【0045】
LANスイッチ5において、ジョブAのプライマリバーチャルマシンがあるサーバ1に接続されるポート(以下プライマリ側ポートという)は通常の通信を行い、ジョブAのデータをサーバ1に送信する。ジョブAのセカンダリバーチャルマシンがあるサーバ2に接続されるポート(以下セカンダリ側ポートという)は、ジョブAのデータをサーバ2に送信しない。
【0046】
バーチャルマシン110がプライマリであり、バーチャルマシン210がセカンダリであるため、LANスイッチ5のプライマリ側ポートは、ポート51であり、セカンダリ側ポートは、ポート52である。たとえば、ネットワーク7から受信し、ポート51からサーバ1のNIC113に向けてジョブAのデータが送出されたとする。ポート52は、このデータをサーバ2のNIC213に送出しない。
【0047】
NIC113は、受信したすべてのジョブAのデータを、プロセッサ111がメモリ10上で稼働させているハイパーバイザ150の仮想LANスイッチ156に転送する。
【0048】
ハイパーバイザ150がジョブAをバーチャルマシン110に割り当てているので、仮想LANスイッチ156は、受信したジョブAのデータをバーチャルマシン110の仮想NIC152に転送する。
【0049】
バーチャルマシン110は、受信したジョブAのデータに対して処理を行う。バーチャルマシン110は、ジョブAのデータを処理した結果を示す結果データを仮想NIC152から仮想LANスイッチ156に転送する。
【0050】
仮想LANスイッチ156は、仮想NIC152から受信したデータをストレージ112に転送する。
【0051】
ハイパーバイザ150は、ストレージ112に記憶されたバーチャルマシン110のデータのコピーを、定期的に、NIC113を介してLANスイッチ5に転送する。LANスイッチ5は、NIC113から受信したバーチャルマシン110のデータのコピーをNIC213に転送する。
【0052】
NIC213は、受信したバーチャルマシン110のデータのコピーを、プロセッサ211がメモリ20上で稼働させているハイパーバイザ250の仮想LANスイッチ256に転送する。仮想LANスイッチ256は、受信したバーチャルマシン110のデータのコピーをストレージ212に転送する。
【0053】
このように、プライマリのバーチャルマシン110のデータのコピーは、セカンダリのバーチャルマシン210を有するサーバ2のストレージ212に定期的に転送される。こうして、サーバ1のバーチャルマシン110はジョブAのプライマリとして動作し、サーバ2のバーチャルマシン210はジョブAのセカンダリとして動作する。
【0054】
以下に、バーチャルマシンをセカンダリからプライマリに昇格させる動作およびプライマリからセカンダリに降格させる動作について詳細に説明する。たとえば、サーバ1に障害が発生した場合、サーバ2の死活監視部は、通信部158からの通信が途絶えたことにより、サーバ1に障害が発生したと判断する。サーバ2は、サーバ1のバーチャルマシン110がプライマリとして処理していたジョブAのセカンダリのバーチャルマシン210を有するので、サーバ2の切り替え部は、バーチャルマシン210の設定をセカンダリからプライマリに切り替え、P/S情報のバーチャルマシン210の設定をセカンダリからプライマリに書き替える。これにより、バーチャルマシン210は、ジョブAの処理を実行を開始し、ジョブAを処理した結果を示す結果データを記憶部に記憶する。
【0055】
具体的には、ジョブAに対してバーチャルマシン210がプライマリに昇格するように下記の処理が実行される。以下、図1を参照して説明する。
【0056】
LANスイッチ5のポート51は通常の通信を行い、ジョブAのデータをサーバ1に送信し、ポート52は、ジョブAのデータをサーバ2に送信しないようになっていた。LANスイッチ5は、受信したデータにあるMACアドレスを学習して保管するFDB(Forwarding Database)に基づいてデータを転送する。このため、ハイパーバイザ250は、ダミーのARP(Address Resolution Protocol)を発行して、ジョブAのデータの転送先をポート52になるようにFDBを変更する。そして、ポート52からジョブAのデータをサーバ2に送信し、ポート51からジョブAのデータをサーバ1に送信しないように変更する。
【0057】
NIC213は、受信したすべてのジョブAのデータを、プロセッサ211がメモリ20上で稼働させているハイパーバイザ250の仮想LANスイッチ256に転送する。
【0058】
仮想LANスイッチ256は、受信したデータを仮想NICに転送する。バーチャルマシン210がジョブAのプライマリとして割り当てられているので、仮想LANスイッチ156は、バーチャルマシン210の仮想NIC252にジョブAのデータを転送する。
【0059】
バーチャルマシン210は、受信したジョブAのデータに対して処理を行う。バーチャルマシン210は、ジョブAのデータを処理した結果を示す結果データを仮想NIC252から仮想LANスイッチ256に転送する。
【0060】
仮想LANスイッチ256は、仮想NIC252から受信したデータをストレージ212に転送する。
【0061】
以上より、バーチャルマシン210はプライマリに昇格する。
【0062】
その後、サーバ1が復旧すると、サーバ1の切り替え部144は、バーチャルマシン110の設定をプライマリからセカンダリに切り替え、P/S情報のバーチャルマシン110の設定をプライマリからセカンダリに書き替える。サーバ1が復旧すると、サーバ2の死活監視部は、通信部158からの通信が再開したことにより、サーバ1が復旧したと判断する。サーバ2の送受信部は、バーチャルマシン210がジョブAを処理した結果を示す結果データを含むバーチャルマシン210のデータのコピーをバーチャルマシン210とペアとなるセカンダリのバーチャルマシン110を有するサーバ1に定期的に送信する。
【0063】
具体的には、ジョブAに対してバーチャルマシン110がセカンダリに降格するように下記の処理が実行される。以下、図1を参照して説明する。
【0064】
サーバ1が復旧すると、通信部114は、通信部214との通信を再開する。通信部114と通信部214との通信が再開すると、サーバ2のハイパーバイザ250は、ストレージ212に記憶されたバーチャルマシン210のデータのコピーを、定期的に、NIC213を介してLANスイッチ5に転送する。LANスイッチ5は、NIC213から受信したバーチャルマシン210のデータのコピーをNIC113に転送する。
【0065】
NIC113は、受信したバーチャルマシン210のデータのコピーを、プロセッサ111がメモリ10上で稼働させているハイパーバイザ150の仮想LANスイッチ156に転送する。仮想LANスイッチ156は、受信したバーチャルマシン210のデータのコピーをストレージ112に転送する。
【0066】
以上より、バーチャルマシン110はセカンダリに降格する。
【0067】
図3は、実施の形態に係るフォールトトレラント処理の動作の一例を示すフローチャートである。図3は、他のサーバの障害の発生を検出した場合、サーバが行う処理の動作の一例である。各サーバの割り当て部は、あらかじめ、他の1台以上のサーバと通信を行い、いずれのサーバも1以上のプライマリのバーチャルマシンと1以上のセカンダリのバーチャルマシンを有するように、プライマリまたはセカンダリを割り当てておく。また、各サーバの割り当て部は、プライマリ/セカンダリの関係を有するペアのバーチャルマシンに同一の処理を割り当てる。ジョブ取得部141は、ネットワーク7、ストレージ112または仮想ストレージからジョブを取得する(ステップS11)。該ジョブの処理を割り当てられたプライマリのバーチャルマシンは、ジョブ取得部141が取得したジョブの処理を実行する(ステップS12)。
【0068】
死活監視部143が他のサーバからの通信が途切れたことによって、障害が生じたと判断した場合(ステップS13;YES)、切り替え部144は、障害が生じたサーバのバーチャルマシンがプライマリとして処理を実行していたジョブのセカンダリのバーチャルマシン(図中、VMと記載)を有するか否かを判定する(ステップS14)。一方、死活監視部143が障害が生じたと判断しない場合(ステップS13;NO)、ステップS11に戻り、ステップS11〜ステップS13を繰り返す。
【0069】
障害が生じたサーバのバーチャルマシンがプライマリとして処理を実行していたジョブのセカンダリのバーチャルマシンを有する場合(ステップS14;YES)、該バーチャルマシンの設定をセカンダリからプライマリに切り替え(ステップS15)、処理を終了する。障害が生じたサーバのバーチャルマシンがプライマリとして処理を実行していたジョブのセカンダリのバーチャルマシンを有しない場合(ステップS14;NO)、処理を終了する。
【0070】
図4は、実施の形態に係るフォールトトレラント処理の動作の一例を示すフローチャートである。図4は、障害が発生した場合、サーバが行う処理の動作の一例である。各サーバの割り当て部は、あらかじめ、他の1台以上のサーバと通信を行い、いずれのサーバも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有するように、処理を割り当て、プライマリまたはセカンダリを設定しておく。ジョブ取得部141は、ネットワーク7、ストレージ112または仮想ストレージからジョブを取得する(ステップS21)。該ジョブの処理を割り当てられたプライマリのバーチャルマシンは、ジョブ取得部141が取得したジョブの処理を実行する(ステップS22)。
【0071】
サーバに障害が発生していない場合(ステップS23;NO)、ステップS21に戻り、ステップS21〜ステップS23を繰り返す。一方、サーバに障害が発生した場合(ステップS23;YES)、サーバが復旧したか否かを判定する(ステップS24)。サーバが復旧した場合(ステップS24;YES)、プライマリとして処理を実行していたバーチャルマシン(図中、VMと記載)を有するか否かを判定する(ステップS25)。サーバが復旧しない場合(ステップS24;NO)、ステップS24を繰り返す。プライマリのバーチャルマシンを有する場合(ステップS25;YES)、該バーチャルマシンの設定をプライマリからセカンダリに切り替え(ステップS26)、処理を終了する。プライマリのバーチャルマシンを有しない場合(ステップS25;NO)、処理を終了する。
【0072】
以上、ジョブAの処理をサーバ1のバーチャルマシン110と、サーバ2のバーチャルマシン210とのペアで実行する場合について述べた。以下に、2個のバーチャルマシンを備える3台以上のサーバが複数のジョブの処理を実行する場合ついて説明する。
【0073】
図5は、2つのバーチャルマシンを有する2台のサーバが2つのジョブを処理する場合の模式図である。図5の例では、それぞれ2つのバーチャルマシンを有するサーバ1およびサーバ2が2つのジョブAおよびジョブBを処理する。図中の矢印は、矢印の元がプライマリのバーチャルマシンを示し、矢印の先がセカンダリのバーチャルマシンを示す。
【0074】
サーバ1は、バーチャルマシン110およびバーチャルマシン120を備える。サーバ2は、バーチャルマシン210およびバーチャルマシン220を備える。
【0075】
サーバ1の割り当て部145は、バーチャルマシン110にジョブAの処理を割り当て、プライマリのバーチャルマシンとする。また、サーバ1の割り当て部145は、バーチャルマシン120にジョブBの処理を割り当て、セカンダリのバーチャルマシンとする。サーバ2の割り当て部は、バーチャルマシン210にジョブBの処理を割り当て、プライマリのバーチャルマシンとする。また、サーバ2の割り当て部は、バーチャルマシン220にジョブAの処理を割り当て、セカンダリのバーチャルマシンとする。
【0076】
これにより、サーバ1に障害が発生しても、サーバ2のバーチャルマシン220をジョブAのプライマリに昇格させることで、処理を続行することができる。また、サーバ2に障害が発生しても、サーバ1のバーチャルマシン120をジョブBのプライマリに昇格させることで、処理を続行することができる。
【0077】
図5の状態で3番目のジョブCが追加された場合、サーバ3を追加する。
【0078】
図6は、2つのバーチャルマシンを有する3台のサーバが3つのジョブを処理する場合の模式図である。図6の例では、それぞれ2つのバーチャルマシンを有するサーバ1、サーバ2およびサーバ3がジョブA、ジョブBおよびジョブCを処理する。図5と同様に図中の矢印は、矢印の元がプライマリのバーチャルマシンを示し、矢印の先がセカンダリのバーチャルマシンを示す。
【0079】
サーバ3は、バーチャルマシン310およびバーチャルマシン320を備える。サーバ3の割り当て部は、バーチャルマシン310にジョブCの処理を割り当て、プライマリのバーチャルマシンとする。また、サーバ3の割り当て部は、バーチャルマシン320にジョブBの処理を割り当て、セカンダリのバーチャルマシンとする。このとき、サーバ1の割り当て部145は、ジョブBの処理を割り当てていたバーチャルマシン120にジョブCの処理を割り当て、セカンダリのバーチャルマシンとする。
【0080】
以上のように、本実施の形態のフォールトトレラントシステム100によれば、1台のサーバが備えるバーチャルマシンの数が2個である場合、現在のサーバで処理できるジョブの数を超えた場合には、1台ずつサーバを追加すればよい。また、追加したサーバに空きのバーチャルマシンがないため無駄を省くことができ、好適である。
【0081】
しかしながら、本発明では、1台のサーバが備えるバーチャルマシンの数は、2個に限らない。以下に、4個のバーチャルマシンを備える2台以上のサーバが複数のジョブの処理を実行する場合ついて説明する。
【0082】
図7は、4つのバーチャルマシンを有する2台のサーバが4つのジョブを処理する場合の模式図である。図7の例では、それぞれ4つのバーチャルマシンを有するサーバ1およびサーバ2が4つのジョブA、ジョブB、ジョブCおよびジョブDを処理する。図5及び図6と同様に図中の矢印は、矢印の元がプライマリのバーチャルマシンを示し、矢印の先がセカンダリのバーチャルマシンを示す。
【0083】
サーバ1は、バーチャルマシン110、バーチャルマシン120、バーチャルマシン130およびバーチャルマシン140を備える。サーバ2は、バーチャルマシン210、バーチャルマシン220、バーチャルマシン230およびバーチャルマシン240を備える。
【0084】
サーバ1の割り当て部145は、バーチャルマシン110にジョブAの処理を割り当て、プライマリのバーチャルマシンとし、バーチャルマシン120にジョブBの処理を割り当て、セカンダリのバーチャルマシンとする。また、サーバ1の割り当て部145は、バーチャルマシン130にジョブCの処理を割り当て、プライマリのバーチャルマシンとし、バーチャルマシン140にジョブDの処理を割り当て、セカンダリのバーチャルマシンとする。
【0085】
サーバ2の割り当て部は、バーチャルマシン210にジョブBの処理を割り当て、プライマリのバーチャルマシンとし、バーチャルマシン220にジョブAの処理を割り当て、セカンダリのバーチャルマシンとする。また、サーバ2の割り当て部は、バーチャルマシン230にジョブDの処理を割り当て、プライマリのバーチャルマシンとし、バーチャルマシン240にジョブCの処理を割り当て、セカンダリのバーチャルマシンとする。
【0086】
これにより、サーバ1に障害が発生しても、サーバ2のバーチャルマシン220およびバーチャルマシン240をプライマリに昇格させることで、ジョブAおよびジョブCの処理を続行することができる。また、サーバ2に障害が発生しても、サーバ1のバーチャルマシン120およびバーチャルマシン140をプライマリに昇格させることで、ジョブBおよびジョブDの処理を続行することができる。
【0087】
図7の状態で5番目のジョブGが追加された場合、サーバ3を追加する。
【0088】
図8は、4つのバーチャルマシンを有する3台のサーバが5つのジョブを処理する場合の模式図である。図8の例では、それぞれ4つのバーチャルマシンを有するサーバ1、サーバ2およびサーバ3が5つのジョブA、ジョブB、ジョブC、ジョブDおよびジョブEを処理する。図5〜図7と同様に図中の矢印は、矢印の元がプライマリのバーチャルマシンを示し、矢印の先がセカンダリのバーチャルマシンを示す。
【0089】
サーバ3は、バーチャルマシン310、バーチャルマシン320、バーチャルマシン330およびバーチャルマシン340を備える。サーバ3の割り当て部は、バーチャルマシン310にジョブEの処理を割り当て、プライマリのバーチャルマシンとする。また、サーバ3の割り当て部は、バーチャルマシン320にジョブBの処理を割り当て、セカンダリのバーチャルマシンとする。このとき、サーバ1の割り当て部145は、ジョブBの処理を割り当てていたバーチャルマシン120にジョブEの処理を割り当て、セカンダリのバーチャルマシンとする。空きのバーチャルマシン330およびバーチャルマシン340は、さらにジョブが追加されたときに、処理を割り当てられる。
【0090】
以上のように、1台のサーバが備えるバーチャルマシンの数が4個である場合も、現在のサーバで処理できるジョブの数を超えた場合には、1台ずつサーバを追加すればよい。1台のサーバが備えるバーチャルマシンの数が4個である場合、現在のサーバで処理できるジョブの数を超えるジョブが1つ追加されたとき、新たに追加したサーバは、2つのバーチャルマシンが空くことになるが、1台のサーバが備えるバーチャルマシンの数が2個である場合よりも、ジョブ数に対して少ないサーバ数で処理を実行できるので、コストの低減が期待できる。バーチャルマシンの数が3個以上の場合も同様である。
【0091】
また、図6または図8では、3台以上のサーバをデイジーチェーン方式で接続して順序づけ、各サーバの次のサーバは、該サーバが有するプライマリのバーチャルマシンとペアのセカンダリのバーチャルマシンを有し、最初のサーバは、最後のサーバが有するプライマリのバーチャルマシンとペアのセカンダリのバーチャルマシンを有するようにプライマリ/セカンダリを割り当てている。このような構成により、図6または図8のように、現在のサーバで処理できるジョブの数を超えるジョブが1つ追加されたとき、既存のサーバが有するバーチャルマシンのうちジョブの割り当てを変更するバーチャルマシンは1つでよい。なお、「サーバを順序付ける」とは、2以上のサーバのプライマリ/セカンダリの関係における順序であり、サーバの他の動作等がこの順序に従う必要はない。
【0092】
また、3台以上のサーバを接続する場合、1台のサーバが有するバーチャルマシンとプライマリとセカンダリの関係を有するペアのバーチャルマシンは、少なくとも他の2台のサーバがそれぞれ有するようにプライマリ/セカンダリを割り当てるとよい。
【0093】
本実施の形態では、プライマリのバーチャルマシンのデータをセカンダリのバーチャルマシンを有するサーバのストレージにコピーするメモリコピー方式のフォールトトレラントシステムについて説明した。しかし、本発明はこれに限られない。たとえば、外部にストレージを備え、プライマリのバーチャルマシンを有するサーバとセカンダリのバーチャルマシンを有するサーバとがプライマリのバーチャルマシンのデータを共有してもよい。また、本実施の形態では、セカンダリのバーチャルマシンは、割り当てられたジョブの処理を実行しない。しかし、本発明はこれに限られず、プライマリのバーチャルマシンとセカンダリのバーチャルマシンとが、同一のジョブの処理を並行して行うロックステップ方式を採用してもよい。
【0094】
また、本実施の形態では、1台のサーバが備えるバーチャルマシンの数が2個の場合と、4個の場合を説明した。しかし、本発明はこれに限られない。1台のサーバが備えるバーチャルマシンの数は、2台以上であれば奇数個でもよい。たとえば、1台のサーバが備えるバーチャルマシンの数が奇数個であってサーバの台数も奇数個であれば、常に少なくとも1つのバーチャルマシンが空く。しかし、この場合であっても現在のサーバで処理できるジョブの数を超えるジョブが1つ追加されたとき、既存のサーバが有するバーチャルマシンのうちジョブの割り当てを変更するバーチャルマシンは1つでよい。
【0095】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
【0096】
(付記1)
それぞれ異なる処理が割り当てられた2以上のバーチャルマシンを有する2以上のサーバを備え、
前記サーバは、いずれも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有することを特徴とするフォールトトレラントシステム。
【0097】
(付記2)
前記サーバは、順序付けられ、
各前記サーバの次の前記サーバは、各前記サーバが有する前記プライマリの前記バーチャルマシンと同一の処理が割り当てられる前記セカンダリの前記バーチャルマシンを有し、
最初の前記サーバは、最後の前記サーバが有する前記プライマリの前記バーチャルマシンと同一の処理が割り当てられる前記セカンダリの前記バーチャルマシンを有することを特徴とする付記1に記載のフォールトトレラントシステム。
【0098】
(付記3)
任意の1台の前記サーバが有する各前記バーチャルマシンと前記プライマリ/セカンダリの関係を有するペアの前記バーチャルマシンは、他の2台以上の前記サーバがそれぞれ有することを特徴とする付記1または2に記載のフォールトトレラントシステム。
【0099】
(付記4)
前記サーバは、
いずれも1以上の前記プライマリの前記バーチャルマシンと1以上の前記セカンダリの前記バーチャルマシンを有するように、前記バーチャルマシンに前記プライマリまたは前記セカンダリを割り当てる割り当て手段を含むことを特徴とする付記1ないし3のいずれかに記載のフォールトトレラントシステム。
【0100】
(付記5)
前記サーバは、2個の前記バーチャルマシンを有することを特徴とする付記1ないし4のいずれかに記載のフォールトトレラントシステム。
【0101】
(付記6)
前記サーバは、
前記バーチャルマシンが処理を実行するジョブを取得するジョブ取得手段と、
他の前記サーバと通信を行い、他の前記サーバに障害が発生したか否かを判定する死活監視手段と、
前記死活監視手段が障害が発生したと判定した他の前記サーバが有する前記プライマリの前記バーチャルマシンが処理していた前記ジョブの前記セカンダリの前記バーチャルマシンを備える場合、該ジョブの前記セカンダリの前記バーチャルマシンを前記プライマリに切り替える切り替え手段と、
を含むことを特徴とする付記1ないし5のいずれかに記載のフォールトトレラントシステム。
【0102】
(付記7)
前記死活監視手段が障害が発生したと判定した他の前記サーバが復旧した場合、他の前記サーバの前記切り替え手段は、前記プライマリの前記バーチャルマシンを前記セカンダリに切り替えることを特徴とする付記6に記載のフォールトトレラントシステム。
【0103】
(付記8)
2以上の前記サーバは、前記プライマリの前記バーチャルマシンに前記ジョブの処理を実行させるためのデータを格納するストレージをそれぞれ内部に備え、前記プライマリの前記バーチャルマシンの前記データを前記セカンダリの前記バーチャルマシンを有する前記サーバの前記ストレージにコピーすることを特徴とする付記1ないし7のいずれかに記載のフォールトトレラントシステム。
【0104】
(付記9)
2以上の前記サーバは、前記バーチャルマシンに前記ジョブの処理を実行させるためのデータを格納するストレージを外部に備え、前記ストレージを共有することを特徴とする付記1ないし8のいずれかに記載のフォールトトレラントシステム。
【0105】
(付記10)
それぞれ異なる処理が割り当てられた2以上のバーチャルマシンを有し、1以上の他のサーバに接続する2以上のサーバであって、
いずれも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有することを特徴とするサーバ。
【0106】
(付記11)
それぞれ異なる処理が割り当てられた2以上のバーチャルマシンを有する2以上のサーバが実行する
いずれの前記サーバも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有するように、前記バーチャルマシンに前記プライマリまたは前記セカンダリを割り当てる割り当てステップを備えることを特徴とするフォールトトレラント化方法。
【0107】
(付記12)
前記サーバが実行する
前記バーチャルマシンが処理を実行するジョブを取得するジョブ取得ステップと、
他の前記サーバと通信を行い、他の前記サーバに障害が発生したか否かを判定する死活監視ステップと、
前記死活監視ステップで障害が発生したと判定した他の前記サーバが有する前記プライマリの前記バーチャルマシンが処理していた前記ジョブの前記セカンダリの前記バーチャルマシンを備える場合、該ジョブの前記セカンダリの前記バーチャルマシンを前記プライマリに切り替える切り替えステップと、
をさらに備えることを特徴とする付記11に記載のフォールトトレラント化方法。
【0108】
(付記13)
前記死活監視ステップで障害が発生したと判定した他の前記サーバが復旧した場合、他の前記サーバの前記切り替えステップでは、前記プライマリの前記バーチャルマシンを前記セカンダリに切り替えることを特徴とする付記12に記載のフォールトトレラント化方法。
【0109】
(付記14)
1以上の他のコンピュータに接続するコンピュータを、
それぞれ異なる処理が割り当てられた2以上のバーチャルマシン、
いずれも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有するように、前記バーチャルマシンに前記プライマリまたは前記セカンダリを割り当てる割り当て手段、
として機能させることを特徴とするプログラム。
【符号の説明】
【0110】
1 サーバ
2 サーバ
3 サーバ
5 LANスイッチ
7 ネットワーク
10 メモリ
11 ハードウェア
20 メモリ
21 ハードウェア
51 ポート
52 ポート
100 フォールトトレラントシステム
110 バーチャルマシン
111 プロセッサ
112 ストレージ
113 NIC
114 通信部
120 バーチャルマシン
130 バーチャルマシン
140 バーチャルマシン
141 ジョブ取得部
142 送受信部
143 死活監視部
144 切り替え部
145 割り当て部
150 ハイバーバイザ
152 仮想NIC
154 仮想NIC
156 仮想LANスイッチ
210 バーチャルマシン
211 プロセッサ
212 ストレージ
213 NIC
214 通信部
220 バーチャルマシン
230 バーチャルマシン
240 バーチャルマシン
250 ハイバーバイザ
252 仮想NIC
254 仮想NIC
256 仮想LANスイッチ
310 バーチャルマシン
320 バーチャルマシン
330 バーチャルマシン
340 バーチャルマシン

【特許請求の範囲】
【請求項1】
それぞれ異なる処理が割り当てられた2以上のバーチャルマシンを有する2以上のサーバを備え、
前記サーバは、いずれも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有することを特徴とするフォールトトレラントシステム。
【請求項2】
前記サーバは、順序付けられ、
各前記サーバの次の前記サーバは、各前記サーバが有する前記プライマリの前記バーチャルマシンと同一の処理が割り当てられる前記セカンダリの前記バーチャルマシンを有し、
最初の前記サーバは、最後の前記サーバが有する前記プライマリの前記バーチャルマシンと同一の処理が割り当てられる前記セカンダリの前記バーチャルマシンを有することを特徴とする請求項1に記載のフォールトトレラントシステム。
【請求項3】
前記サーバは、
いずれも1以上の前記プライマリの前記バーチャルマシンと1以上の前記セカンダリの前記バーチャルマシンを有するように、前記バーチャルマシンに前記プライマリまたは前記セカンダリを割り当てる割り当て手段を含むことを特徴とする請求項1または2に記載のフォールトトレラントシステム。
【請求項4】
前記サーバは、2個の前記バーチャルマシンを有することを特徴とする請求項1ないし3のいずれか1項に記載のフォールトトレラントシステム。
【請求項5】
前記サーバは、
前記バーチャルマシンが処理を実行するジョブを取得するジョブ取得手段と、
他の前記サーバと通信を行い、他の前記サーバに障害が発生したか否かを判定する死活監視手段と、
前記死活監視手段が障害が発生したと判定した他の前記サーバが有する前記プライマリの前記バーチャルマシンが処理していた前記ジョブの前記セカンダリの前記バーチャルマシンを備える場合、該ジョブの前記セカンダリの前記バーチャルマシンを前記プライマリに切り替える切り替え手段と、
を含むことを特徴とする請求項1ないし4のいずれか1項に記載のフォールトトレラントシステム。
【請求項6】
前記死活監視手段が障害が発生したと判定した他の前記サーバが復旧した場合、他の前記サーバの前記切り替え手段は、前記プライマリの前記バーチャルマシンを前記セカンダリに切り替えることを特徴とする請求項5に記載のフォールトトレラントシステム。
【請求項7】
2以上の前記サーバは、前記プライマリの前記バーチャルマシンに前記ジョブの処理を実行させるためのデータを格納するストレージをそれぞれ内部に備え、前記プライマリの前記バーチャルマシンの前記データを前記セカンダリの前記バーチャルマシンを有する前記サーバの前記ストレージにコピーすることを特徴とする請求項1ないし6のいずれか1項に記載のフォールトトレラントシステム。
【請求項8】
2以上の前記サーバは、前記バーチャルマシンに前記ジョブの処理を実行させるためのデータを格納するストレージを外部に備え、前記ストレージを共有することを特徴とする請求項1ないし7のいずれか1項に記載のフォールトトレラントシステム。
【請求項9】
それぞれ異なる処理が割り当てられた2以上のバーチャルマシンを有し、1以上の他のサーバに接続する2以上のサーバであって、
いずれも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有することを特徴とするサーバ。
【請求項10】
それぞれ異なる処理が割り当てられた2以上のバーチャルマシンを有する2以上のサーバが実行する
いずれの前記サーバも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有するように、前記バーチャルマシンに前記プライマリまたは前記セカンダリを割り当てる割り当てステップを備えることを特徴とするフォールトトレラント化方法。
【請求項11】
前記サーバが実行する
前記バーチャルマシンが処理を実行するジョブを取得するジョブ取得ステップと、
他の前記サーバと通信を行い、他の前記サーバに障害が発生したか否かを判定する死活監視ステップと、
前記死活監視ステップで障害が発生したと判定した他の前記サーバが有する前記プライマリの前記バーチャルマシンが処理していた前記ジョブの前記セカンダリの前記バーチャルマシンを備える場合、該ジョブの前記セカンダリの前記バーチャルマシンを前記プライマリに切り替える切り替えステップと、
をさらに備えることを特徴とする請求項10に記載のフォールトトレラント化方法。
【請求項12】
前記死活監視ステップで障害が発生したと判定した他の前記サーバが復旧した場合、他の前記サーバの前記切り替えステップでは、前記プライマリの前記バーチャルマシンを前記セカンダリに切り替えることを特徴とする請求項11に記載のフォールトトレラント化方法。
【請求項13】
1以上の他のコンピュータに接続するコンピュータを、
それぞれ異なる処理が割り当てられた2以上のバーチャルマシン、
いずれも1以上のプライマリの前記バーチャルマシンと1以上のセカンダリの前記バーチャルマシンを有するように、前記バーチャルマシンに前記プライマリまたは前記セカンダリを割り当てる割り当て手段、
として機能させることを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate