(57)【特許請求の範囲】
【請求項１】
相互に接続された各ノードへのジョブの割り当てを制御するための制御プログラムにおいて、
コンピュータに、
ジョブの割り当てを行う対象の第１のノードと、該第１のノードのとの間のネットワーク距離が近いノードまたは該第１のノードの処理速度と処理速度が近いノードを第２のノードとして選択し、
選択された前記第１のノードが実行したジョブによるデータを、前記第１のノードおよび前記第２のノードの双方に格納させるように指示する、
処理を実行させることを特徴とする制御プログラム。
【請求項２】
前記コンピュータに、
更に、
障害が発生した障害ノードを検知し、障害が検知されたときに、各ノードの中から代替ノードを選択して、前記障害ノードが前記第１のノードとして選択され実行されていたジョブにより前記第２のノードに格納されていたデータを前記代替ノードにコピーするよう指示し、さらに、前記障害ノードが前記第２のノードとして選択された前記第１のノードにより実行されていたジョブにより前記第１のノードに格納されていたデータを前記代替ノードにコピーするよう指示するとともに、前記代替ノードに前記障害ノードに割り当てられていたジョブを割り当てる、
処理を実行させることを特徴とする請求項１に記載の制御プログラム。
【請求項３】
前記コンピュータに、
更に、
第１のジョブに対して前記第１のノードおよび前記第２のノードを選択し、さらに、第２のジョブに対して該第２のジョブの割り当てを行う対象の第３のノードと、該第３のノードのとの間のネットワーク距離が近いノードまたは該第３のノードの処理速度と処理速度が近いノードであって、かつ前記第２のノードは異なる第４のノードとを選択し、前記第１のノードが実行した第１のジョブによるデータを、該第１のノードおよび前記第２のノードに格納させるよう指示し、さらに、前記第３のノードが実行した第２のジョブによるデータを、該第３のノードおよび前記第４のノードに格納させるよう指示する、
処理を実行させることを特徴とする請求項１または２に記載の制御プログラム。
【請求項４】
前記第２のノードと前記第３のノードは、同一のノードであることを特徴とする請求項３に記載の制御プログラム。
【請求項５】
前記第１のノードと前記第４のノードは、同一のノードであることを特徴とする請求項４に記載の制御プログラム。
【請求項６】
相互に接続された各ノードへのジョブの割り当てを制御するための制御方法において、
コンピュータが、
ジョブの割り当てを行う対象の第１のノードと、該第１のノードのとの間のネットワーク距離が近いノードまたは該第１のノードの処理速度と処理速度が近いノードを第２のノードとして選択ステップと、
前記選択された前記第１のノードが実行したジョブによるデータを、前記第１のノードおよび前記第２のノードの双方に格納させるように指示するステップと
を実行することを特徴とする制御方法。
【請求項７】
相互に接続された各ノードへのジョブの割り当てを制御する制御装置において、
ジョブの割り当てを行う対象の第１のノードと、該第１のノードのとの間のネットワーク距離が近いノードまたは該第１のノードの処理速度と処理速度が近いノードを第２のノードとして選択する手段と、
前記選択された前記第１のノードが実行したジョブによるデータを、前記第１のノードおよび前記第２のノードの双方に格納させるように指示する手段と
を有することを特徴とする制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、多数台のノードが高速ネットワークにより相互接続されて構成されるクラスタシステムで各ノードへのジョブの割り当てを制御するクラスタ制御プログラム、クラスタ制御方法およびクラスタ制御装置に関し、特に、クラスタ全体に掛かる負荷を最小限に抑えつつノード間でデータを冗長化させることができ、もって安価な構成であってもクラスタの規模に見合った計算処理能力を得ることができるクラスタ制御プログラム、クラスタ制御方法およびクラスタ制御装置に関するものである。
【背景技術】
【０００２】
近年、高性能科学技術計算（High Performance Computing）分野では、スーパーコンピュータの代りに安価でコモディティなハードウェアを使用したＰＣ（Personal Computer）を計算機として使用する傾向にある。ただし１台のＰＣでは性能に限界があるため、多数台のＰＣを専用の高速インタコネクトで相互接続し、クラスタを構成することによって高性能を実現している。
【０００３】
このようなクラスタを用いた大規模計算では、長時間に渡る並列アプリケーションを大量のノードで通信させながら動作させなければならないがクラスタ内で障害が発生すると、たとえその障害が１台のノードで発生したものであっても、最悪の場合クラスタ内の全ノードにおける計算結果を喪失してしまうことになる。そのため、この計算結果の喪失を最小限に抑える目的で、並列アプリケーションの実行途中で出力されるチェックポイントデータの保存を一定時間毎に行うことで、障害が発生した場合であってもそのチェックポイントデータに基づいて最後に格納されたチェックポイントから計算を再度復帰させることを可能としている。このようなチェックポイントデータを定期的に保存する機能は、クラスタの規模に関係なく最低限要求される機能である。
【０００４】
一般に、クラスタシステムにおけるチェックポイントデータなどのデータの格納方法には、ＳＡＮ（Storage Area Network）やＮＡＳ（Network Attached Storage）などのネットワークストレージにデータを一括して格納する共有ディスク型と、ノードに備えられたディスク装置を用いて複数台のノード間でデータを冗長化するミラーディスク型との２種類に大別されるが、それぞれ扱えるデータ規模と設備コストとの間でトレードオフの関係にある。
【０００５】
共有ディスク型は、大規模データを扱うのには向いているが、並列アプリケーションで実行されるジョブからは同期して共有ディスクに対して一斉に書き込みが発生することが多いため、共有ディスクにはこの膨大なディスクアクセスに耐え得る信頼性の高さが要求され、その設備コストがかさむという欠点がある。
【０００６】
ミラーディスク型は、ＳＡＮなどの高価な共有ディスクを設ける必要がなく安価に構成することができ、従来からＷｅｂサーバなどの２台程度で構成される小規模クラスタに広く用いられているが、データを冗長化する際にネットワーク負荷が掛かるため大規模データを扱うシステムには不向きであるという欠点がある。
【０００７】
また、このミラーディスク型はさらに２種類に細分化され、２台のノード間でデータを冗長化する際に、一方のノードを通常のアプリケーションの実行に用いる運用系、他方のノードを運用系ノードで実行されたデータの格納だけに用いる待機系とするアクティブ／スタンバイ型（例えば、特許文献１参照）と、２台のノードがこの運用系と待機系との両方の機能を備え双方のノードにより相互にデータを冗長化するアクティブ／アクティブ型とがある。
【０００８】
このうち、後者のアクティブ／アクティブ型の中でも双方のノードが互いに異なるアプリケーションを実行する形態（以下「相互待機型」という）をとるミラーディスク型クラスタについては、他の形態のミラーディスク型クラスタとは異なり各ノードを効率的に使用できる利点がある。そこで、この相互待機型によるクラスタシステムを、多数台のノードで構成される大規模クラスタシステムにも応用できれば、安価な構成であってもクラスタシステムにおける規模を拡張することができる。
【０００９】
【特許文献１】特開２００２−１２３４０６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述した相互待機型を含むミラーディスク型クラスタの技術は２〜４台程度のノードによる小規模なクラスタシステムを前提としており、データを冗長化する際に相手先ノードを自由に変更するための判断基準については考慮されていないという問題があった。このため、データを冗長化する相手先ノードを無秩序に決めていくのでは、ネットワーク帯域の浪費を招いたりノード間の処理速度の格差に起因するオーバーヘッドを招いたりしてクラスタ全体の処理能力を劣化させてしまい、その結果クラスタの規模に見合うだけの計算処理能力を得ることができなくなる。
【００１１】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、クラスタ全体に掛かる負荷を最小限に抑えつつノード間でデータを冗長化させることができ、もって安価な構成であってもクラスタの規模に見合った計算処理能力を得ることができるクラスタ制御プログラム、クラスタ制御方法およびクラスタ制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するため、本発明は、相互に接続された各ノードへのジョブの割り当てを制御するための制御プログラムにおいて、コンピュータに、ジョブの割り当てを行う対象の第１のノードと、該第１のノードのとの間のネットワーク距離が近いノードまたは該第１のノードの処理速度と処理速度が近いノードを第２のノードとして選択し、選択された前記第１のノードが実行したジョブによるデータを、前記第１のノードおよび前記第２のノードの双方に格納させるように指示する、処理を実行させることを特徴とする。
【００１３】
本発明によれば、各ノードの中から、ジョブの割当を行う割当ノードと、その割当ノードと類似する類似ノードとを選択し、選択した割当ノードが実行したジョブによるデータを、その割当ノードおよび類似ノードに格納するよう指示することとしたので、クラスタ全体に掛かる負荷を最小限に抑えつつノード間でデータを冗長化させることができる。
【００１５】
本発明によれば、各ノード間でデータを冗長化する際のネットワーク負荷を軽減することができる。
【００１７】
本発明によれば、各ノード間でデータを冗長化する際の処理速度の格差を低減させることができる。
【００１８】
本発明は、上記の発明において、前記コンピュータに、更に、障害が発生した障害ノードを検知し、障害が検知されたときに、各ノードの中から代替ノードを選択して、前記障害ノードが前記第１のノードとして選択され実行されていたジョブにより前記第２のノードに格納されていたデータを前記代替ノードにコピーするよう指示し、さらに、前記障害ノードが前記第２のノードとして選択された前記第１のノードにより実行されていたジョブにより前記第１のノードに格納されていたデータを前記代替ノードにコピーするよう指示するとともに、前記代替ノードに前記障害ノードに割り当てられていたジョブを割り当てる、処理を実行させることを特徴とする。
【００１９】
本発明によれば、障害発生前に障害ノードが保持していたジョブとデータとをともに代替ノードに引き継がせることができる。
【００２０】
本発明は、上記の発明において、前記コンピュータに、更に、第１のジョブに対して前記第１のノードおよび前記第２のノードを選択し、さらに、第２のジョブに対して該第２のジョブの割り当てを行う対象の第３のノードと、該第３のノードのとの間のネットワーク距離が近いノードまたは該第３のノードの処理速度と処理速度が近いノードであって、かつ前記第２のノードは異なる第４のノードとを選択し、前記第１のノードが実行した第１のジョブによるデータを、該第１のノードおよび前記第２のノードに格納させるよう指示し、さらに、前記第３のノードが実行した第２のジョブによるデータを、該第３のノードおよび前記第４のノードに格納させるよう指示する、処理を実行させることを特徴とする。
【００２１】
本発明によれば、ネットワーク距離が近いノードまたはジョブ処理速度が近いノードが重複して選択されることによる冗長化データの破壊を抑止することができる。
【００２２】
本発明は、上記の発明において、前記第２のノードと前記第３のノードは、同一のノードであることを特徴とする。
【００２３】
本発明によれば、各ノードを運用系と待機系とに区別することなく互いに種類の異なるジョブを並行して実行させることができる。
【００２４】
本発明は、上記の発明において、前記第１のノードと前記第４のノードは、同一のノードであることを特徴とする。
【００２５】
本発明によれば、２台のノード間でペアを組ませて格納するデータを相互に冗長化することができる。
【００２８】
本発明は、相互に接続された各ノードへのジョブの割り当てを制御するための制御方法において、コンピュータが、ジョブの割り当てを行う対象の第１のノードと、該第１のノードのとの間のネットワーク距離が近いノードまたは該第１のノードの処理速度と処理速度が近いノードを第２のノードとして選択ステップと、前記選択された前記第１のノードが実行したジョブによるデータを、前記第１のノードおよび前記第２のノードの双方に格納させるように指示するステップとを実行することを特徴とする。
【００２９】
本発明によれば、クラスタ全体に掛かる負荷を最小限に抑えつつノード間でデータを冗長化させることができる。
【００３０】
本発明は、相互に接続された各ノードへのジョブの割り当てを制御する制御装置において、ジョブの割り当てを行う対象の第１のノードと、該第１のノードのとの間のネットワーク距離が近いノードまたは該第１のノードの処理速度と処理速度が近いノードを第２のノードとして選択する手段と、前記選択された前記第１のノードが実行したジョブによるデータを、前記第１のノードおよび前記第２のノードの双方に格納させるように指示する手段とを有することを特徴とする。
【００３１】
本発明によれば、クラスタ全体に掛かる負荷を最小限に抑えつつノード間でデータを冗長化させることができる。
【発明の効果】
【００３２】
請求項１、９および１０の発明によれば、クラスタ全体に掛かる負荷を最小限に抑えつつノード間でデータを冗長化させることができるので、安価な構成であってもクラスタの規模に見合った計算処理能力を得ることができるという効果を奏する。
【００３３】
また、請求項２の発明によれば、各ノード間でデータを冗長化する際のネットワーク負荷を軽減することができるので、クラスタ全体の処理効率を向上させることができるという効果を奏する。
【００３４】
また、請求項３の発明によれば、各ノード間でデータを冗長化する際の処理速度の格差を低減させることができるので、クラスタ全体の処理効率を向上させることができるという効果を奏する。
【００３５】
また、請求項４の発明によれば、障害発生前に障害ノードが保持していたジョブとデータとをともに代替ノードに引き継がせることができるので、クラスタ全体の可用性を向上させることができるという効果を奏する。
【００３６】
また、請求項５の発明によれば、類似ノードが重複して選択されることによる冗長化データの破壊を抑止することができるので、クラスタ全体のストレージ信頼性を向上させることができるという効果を奏する。
【００３７】
また、請求項６の発明によれば、各ノードを運用系と待機系とに区別することなく互いに種類の異なるジョブを並行して実行させることができるので、クラスタ全体の処理効率を向上させることができるという効果を奏する。
【００３８】
また、請求項７の発明によれば、２台のノード間でペアを組ませて格納するデータを相互に冗長化することができるので、クラスタ全体においてストレージ信頼性を確保しつつ処理効率を向上させることができるという効果を奏する。
【００３９】
また、請求項８の発明によれば、ジョブにより出力されるデータの格納時にデータの同期を容易に取ることができるので、クラスタ全体の処理効率を向上させることができるという効果を奏する。
【発明を実施するための最良の形態】
【００４０】
以下に添付図面を参照して、この発明に係るクラスタ制御プログラム、クラスタ制御方法およびクラスタ制御装置の好適な実施例を詳細に説明する。
【実施例】
【００４１】
まず、本実施例に係るクラスタシステムの構成について説明する。図１−１は、本実施例に係るクラスタシステムの構成を説明するための説明図である。同図に示すように、このクラスタシステム１は、多数台のジョブ実行ノード２００（ここでは「ノードａ１」〜「ノードａ８」の８台）が高速なネットワーク５０により相互接続されることで１つのクラスタ１０Ａを構成しており、スイッチ６０を介してさらに「ノードｂ１」、「ノードｂ５」などのジョブ実行ノード２００により構成される他のクラスタ１０Ｂなど、多数のクラスタと接続されて構成されている。そして、制御サーバ１００は、各ジョブ実行ノード２００に対してジョブを投入し、そのジョブの実行結果をジョブ実行ノード２００から受け取っている。
【００４２】
同図においては、制御サーバ１００は、４ノードを用いて実行される並列アプリケーションジョブ「Ｊｏｂ１−１」〜「Ｊｏｂ１−４」を、「ノードａ１」〜「ノードａ８」のジョブ実行ノード２００により構成されるクラスタ１０Ａのうち４台のジョブ実行ノード２００に割り当てており、また、このジョブとは性質の異なる他の並列アプリケーションジョブ（「Ｊｏｂ２−１」、「Ｊｏｂ２−５」など）については、クラスタ１０Ａとは別のクラスタを構成するクラスタ１０Ｂに割り当てている。
【００４３】
ここで、制御サーバ１００は、各ジョブ実行ノード２００にジョブを割り当てる際に、さらに縦線の領域で示した２台ずつのジョブ実行ノード２００の間でペアを組ませており、ペアが組まれたその２台のジョブ実行ノード２００の間では、障害発生に備えて、ジョブの実行により出力された実行途中結果やチェックポイントデータなどのデータを、ネットワーク５０を介して相互に冗長化される。
【００４４】
しかし、このペアを無秩序に組み合わせていたのでは、２台のジョブ実行ノード２００間でジョブにより出力されるデータの冗長化が相互に行われる際に、ネットワーク帯域の浪費を招いたり、ノード間の処理速度の格差に起因するオーバーヘッドを招いたりして、クラスタ全体の処理能力を劣化させてしまいかねない。
【００４５】
そこで、この制御サーバ１００は、各ジョブ実行ノード２００の中から類似する２台のジョブ実行ノード２００を選択してペアを組ませる。具体的には、制御サーバ１００は、ネットワーク距離が近くその位置が互いに類似する２台のジョブ実行ノード２００、または、ジョブの処理速度が近く処理能力が類似している２台のジョブ実行ノード２００を選択し、この２台のジョブ実行ノード２００の間でペアを組ませている。そして、この類似する２台のジョブ実行ノード２００間で、ジョブにより出力されるデータの冗長化が相互に行われる。
【００４６】
例えば、「ノードａ１」のジョブ実行ノード２００に割り当てられたジョブ「Ｊｏｂ１−１」による実行結果などのデータは、「ノードａ１」自身が有するディスク（自系用ディスク）と、この「ノードａ１」のジョブ実行ノード２００と類似しペアを組んでいる「ノードａ２」のジョブ実行ノード２００が有するディスク（他系用ディスク）に格納され、そのジョブによるデータは冗長化される。また、「ノードａ２」のジョブ実行ノード２００に割り当てられたジョブ「Ｊｏｂ１−２」についても同様に、その実行結果などのデータは、「ノードａ２」自身が有するディスク（自系用ディスク）と、この「ノードａ２」のジョブ実行ノード２００と類似しペアを組んでいる「ノードａ１」のジョブ実行ノード２００が有するディスク（他系用ディスク）に格納され、そのジョブによるデータは冗長化される。このようにして、互いに類似しペアが組まれた２台のジョブ実行ノード２００の間では、ジョブにより出力されるデータの冗長化が相互に行われる。
【００４７】
このように、制御サーバ１００が、各ジョブ実行ノード２００の中から、あるジョブを割り当てるノードと、そのノードと類似するノードとを選択し、ジョブの実行結果などのデータを、このジョブを割り当てたノードおよびそのノードと類似するノードに格納するよう指示することとしたので、クラスタ全体に掛かる負荷を最小限に抑えつつノード間でデータを冗長化させることができる。
【００４８】
ここで、このクラスタシステム１を構成するジョブ実行ノード２００において障害が発生した場合は、制御サーバ１００は、障害が発生した障害ノードの代わりとなる代替ノードに対して、障害発生時に障害ノードが保持していたジョブとデータとをともに引き継がせ、代替ノードに計算を途中から再開させる。図１−２は、障害発生時における制御サーバ１００の動作を説明するための説明図である。
【００４９】
同図に示すように、「ノードａ１」のジョブ実行ノード２００において障害が発生すると、制御サーバ１００はこの「ノードａ１」で発生した障害を検知し、障害が発生した「ノードａ１」に対する代替ノード（ここでは「ノードａ６」）を空きノードの中から選択する。そして、制御サーバ１００は、この代替ノード「ノードａ６」と、「ノードａ１」がペアを組んでいた相手先ノードである「ノードａ２」との間で新たにペアを組ませる。
【００５０】
そして、制御サーバ１００は、この障害が発生した「ノードａ１」が保持していたジョブを代替ノード（ここでは「ノードａ６」）に割り当て、さらに障害が発生した「ノードａ１」とペアを組んでいた「ノードａ２」が保持しているデータを「ノードａ６」にコピーさせてデータを復旧することで、「ノードａ１」が保持していたジョブとデータとをともにこの代替ノード「ノードａ６」に引き継がせる。その後、制御サーバ１００は、この新たにペアを組んだ「ノードａ２」および「ノードａ６」の２台のジョブ実行ノード２００間で、復旧した時点のチェックポイントデータに基づいて途中からジョブの実行を再開させる。
【００５１】
このように、制御サーバ１００が、各ジョブ実行ノード２００の中から障害が発生した障害ノードを検知し、障害が検知されたときに、各ノードの中から代替ノードを選択して、障害ノードとペアを組んでいたノードが保持していたジョブとデータをとともに代替ノードに引き継がせることとしたので、障害発生前に障害ノードが保持していたジョブとデータとをともに代替ノードに引き継がせることができる。
【００５２】
次に、本実施例に係るクラスタシステム１の構成について説明する。図２は、本実施例に係るクラスタシステム１の構成を示す機能ブロック図である。同図に示すように、このクラスタシステム１は、制御サーバ１００と、２台のジョブ実行ノード２００Ａ、２００Ｂとが、図示しないスイッチを介して高速なネットワーク５０により相互接続され、１つのクラスタを構成している。また、この２台のジョブ実行ノード２００Ａ、２００Ｂはペアを組んでおり、ジョブの実行により出力される実行途中結果やチェックポイントデータなどのデータはこのジョブ実行ノード２００Ａ、２００Ｂ間で相互に冗長化されて格納される。
【００５３】
なお、ここでは説明の便宜上、２台のジョブ実行ノード２００Ａ、２００Ｂのみを示したが、実際にはこのクラスタシステム１においては、図１−１および図１−２に示したように図示しない多数のジョブ実行ノードと相互接続されて１つのクラスタを構成しており、さらに図示しないスイッチを介して他のクラスタとも接続されて構成されている。以下、本発明では、これらのジョブ実行ノード２００Ａ、２００Ｂ、・・を区別しない場合は単に「ジョブ実行ノード２００」と呼ぶこととする。
【００５４】
制御サーバ１００は、各ジョブ実行ノード２００に割り当てるジョブを管理するとともに、各ジョブ実行ノード２００間で組まれるペアの構成を管理するサーバ装置であり、ネットワークインタフェース１１０と、スプール部１２０と、記憶部１３０と、ジョブ制御部１４０と、障害検知部１５０とを有する。
【００５５】
ネットワークインタフェース１１０は、ネットワーク５０を介してジョブ実行ノード２００に接続するためのインタフェースであり、ユーザから投入されたジョブデータをジョブ実行ノード２００に送信するとともに、ジョブ実行ノード２００が実行して制御サーバ１００に返されたジョブの実行結果を受信する。スプール部１２０は、図示しない入力インタフェースによりユーザから投入されたジョブのデータを格納する記憶装置である。
【００５６】
記憶部１３０は、スプール部１２０に格納されたジョブにおける実行状況や、各ジョブ実行ノード２００の状態などを記憶する記憶装置であり、ジョブ割当状態表１３１と、ノード状態表１３２と、ペアグループ構成表１３３とを記憶する。
【００５７】
ジョブ割当状態表１３１は、ユーザから投入されたジョブの現時点における実行状況を記憶する表である。図３−１は、ジョブ割当状態表１３１の一例を示す図である。同図に示すように、このジョブ割当状態表１３１には、投入されたジョブのジョブ番号と、そのジョブの現時点における実行状況を表すジョブ状態と、そのジョブを割り当てたノードを表す割当ノードとが対応付けられて記憶されている。
【００５８】
ここで、ジョブ状態については、スプール部１２０に格納されジョブ実行ノード２００への割り当てを待つジョブは「キュー状態」で表され、ジョブ実行ノード２００により実行されているジョブは「実行状態」で表され、ノード故障などの理由によりジョブの実行が保留されているジョブは「保留状態」で表され、ジョブが完了しその実行結果をジョブ実行ノード２００から受け取ったジョブは「完了状態」で表される。そして、このジョブ状態が「完了状態」となった後にユーザによりジョブの実行結果が取り出されると、そのジョブに関するデータがジョブ割当状態表１３１から削除される。
【００５９】
ノード状態表１３２は、このクラスタシステム１上に存在する各ジョブ実行ノード２００の状態を記憶する表である。図３−２は、ノード状態表１３２の一例を示す図である。同図に示すように、このノード状態表１３２には、ジョブ実行ノード２００のノード番号と、そのノードにおけるノード状態とが対応付けられて記憶されている。
【００６０】
ここで、ノード状態については、ジョブが実行されておらず制御サーバ１００からのジョブの割り当てを待つノードは「空き状態」で表され、ジョブを実行中のノードは「ジョブ実行状態」で表され、故障などにより停止しておりジョブが実行不能なノードは「停止状態」で表される。
【００６１】
ペアグループ構成表１３３は、各ジョブ実行ノード２００間で組まれるペアの構成を記憶する表である。図３−３は、ペアグループ構成表１３３の一例を示す図である。同図に示すように、このペアグループ構成表１３３には、ジョブ実行ノード２００のノード番号と、そのノードにおけるジョブの実行により出力されるデータを他のノードにも格納してデータを冗長化する際のその相手先ノードを表す相手先ノード番号とが対応付けられて記憶されている。
【００６２】
同図においては、ノード＃１の相手先ノードはノード＃２であり、かつノード＃２の相手先ノードはノード＃１であることを示している。すなわち、このノード＃１とノード＃２とがペアを組んでおり、この２台のノード間でデータの冗長化が相互に行われる。なお、相手先ノードが指定されておらずどのノードともペアを組んでいないノードについては、この相手先ノード番号は「なし」となる。
【００６３】
ジョブ制御部１４０は、ユーザから投入されたジョブのデータをスプール部１２０に格納してから各ジョブ実行ノード２００にそのジョブを割り当てるとともに、そのジョブの実行により出力されるデータを冗長化する際の相手先ノードを指定する制御部であり、ジョブスケジューラ１４１と、ペアグループ管理部１４２とを有する。
【００６４】
ジョブスケジューラ１４１は、ユーザから投入されたジョブの実行順序を決定するとともに、必要となるノード数などの情報に基づいて、各ジョブ実行ノード２００にジョブを割り当てる処理部である。これらのジョブの割当時に用いられる情報は、ジョブ制御指示情報としてジョブ実行スクリプト、入力データファイルなどとともにジョブのデータに含まれている。
【００６５】
そして、ジョブスケジューラ１４１は、各ジョブ実行ノード２００にジョブを割り当てると、そのジョブの実行状況に応じてジョブ割当状態表１３１を更新するとともに、そのジョブを投入した各ジョブ実行ノード２００におけるジョブの実行状況をノード状態表１３２に登録する。
【００６６】
ここで、このジョブスケジューラ１４１は、互いに類似する２台のジョブ実行ノード２００の間では、なるべく性質が互いに類似するジョブを割り当てるようにする。具体的には、制御サーバ１００は、ネットワーク距離が近くその位置が互いに類似する２台のジョブ実行ノード２００Ａ、２００Ｂの間で、性質が互いに類似する２つのジョブ「ジョブｂ−１」、「ジョブｂ−２」を割り当てるようにする。または、制御サーバ１００は、ジョブの処理速度が近く処理能力が類似している２台のジョブ実行ノード２００Ａ、２００Ｂの間で、性質が互いに類似する２つのジョブ「ジョブｂ−１」、「ジョブｂ−２」を割り当てるようにする。
【００６７】
ペアグループ管理部１４２は、各ジョブ実行ノード２００間で組まれるペアの構成を管理し、ペアを組ませたジョブ実行ノード２００間で相互にデータを冗長化させる処理部である。このペアグループ管理部１４２は、ジョブスケジューラ１４１で選択された互いに類似する２台のジョブ実行ノード２００の間でペアを組ませて、その結果をペアグループ構成表１３３に記憶させる。そして、ペアグループ管理部１４２は、このペアグループ構成表１３３に基づいて各ジョブ実行ノード２００が実行するジョブにより出力されるデータの格納先となる相手先ノードを各ジョブ実行ノード２００に通知し、ペアを組んだジョブ実行ノード２００の間で相互にデータを冗長化させる。
【００６８】
このように、ジョブスケジューラ１４１が、各ジョブ実行ノード２００の中から、ジョブの割当を行う割当ノードと、その割当ノードと類似する類似ノードとを選択し、ペアグループ管理部１４２が、選択した割当ノードが実行したジョブによるデータを、その割当ノードおよび類似ノードに格納するよう指示することとしたので、クラスタ全体に掛かる負荷を最小限に抑えつつノード間でデータを冗長化させることができる。
【００６９】
なお、このペアグループ管理部１４２は、障害発生時には、ジョブのデータに含まれるジョブ制御指示情報に基づいて、ディスク装置の故障時にも継続してジョブを実行させるか、ジョブおよびデータを代替ノードへ引き継がせた後に直ちにジョブを再開するべきかなどの判断を行う。
【００７０】
障害検知部１５０は、クラスタシステム１上に存在する各ジョブ実行ノード２００で発生した各種の障害を検知する装置である。具体的には、この障害検知部１５０は、ジョブ実行ノード２００が有するディスク装置で発生したディスク障害、ジョブ実行ノード２００に備えられたＣＰＵや各インタフェース、あるいは各制御部で発生したノード障害、およびジョブ実行ノード２００とスイッチとの間で発生したネットワーク障害を検知する。この障害検知部１５０が障害を検知すると、ジョブ制御部１４０は障害が発生した障害ノードにおけるジョブとデータとをともに代替ノードに引き継がせる処理を行う。
【００７１】
ジョブ実行ノード２００Ａは、制御サーバ１００により割り当てられたジョブを実行し、そのジョブの実行結果を制御サーバ１００に返すとともに、そのジョブの実行により出力される実行途中結果やチェックポイントデータなどのデータを相手先ノードであるジョブ実行ノード２００Ｂに送信する計算機であり、ネットワークインタフェース２１０Ａと、ジョブ実行部２２０Ａと、冗長化制御部２３０Ａと、冗長化機構２４０Ａと、ローカルディスクインタフェース２５０Ａとを有し、このローカルディスクインタフェース２５０Ａには２台のディスク装置（自系用ディスク２６０Ａおよび他系用ディスク２７０Ａ）が接続されている。なお、２台のディスク装置の代わりに１台のディスク装置を自系用と他系用の二つの領域に分けて使用することもできる。
【００７２】
ネットワークインタフェース２１０Ａは、ネットワーク５０を介して制御サーバ１００や他のジョブ実行ノード２００Ｂに接続するためのインタフェースである。このネットワークインタフェース２１０Ａは、制御サーバ１００から送信されたジョブデータを受信するとともに、そのジョブの実行により出力されるデータを相手先ノードに指定されたジョブ実行ノード２００Ｂに送信し、ジョブの完了時にはそのジョブの実行結果を制御サーバ１００に送信する。
【００７３】
ジョブ実行部２２０Ａは、制御サーバ１００から送信されたジョブを実行し、そのジョブの実行途中結果やチェックポイントデータなどを出力する処理部である。
【００７４】
冗長化制御部２３０Ａは、冗長化機構２４０Ａを制御する処理部であり、制御サーバ１００のペアグループ管理部１４２から指定された相手先ノードに関する情報を記憶している。ジョブ実行部２２０Ａによるジョブの実行により出力されるデータは、ジョブ実行ノード２００Ａ自身が有する自系用ディスク２６０Ａに格納されるとともに、この冗長化制御部２３０Ａが記憶する相手先ノード（ジョブ実行ノード２００Ｂ）における他系用ディスク２７０Ｂに格納され、データは２台のジョブ実行ノード２００Ａ、２００Ｂ間で冗長化される。
【００７５】
冗長化機構２４０Ａは、ジョブ実行部２２０Ａにより出力されるチェックポイントデータなどのデータの冗長化を行う処理部であり、デバイスドライバとして提供される。具体的には、この冗長化機構２４０Ａは、ジョブ実行ノード２００Ａのジョブ実行部２２０Ａが実行したジョブ「ジョブｂ−１」によるデータをローカルディスクインタフェース２５０Ａを介して自系用ディスク２６０Ａに書き込ませるとともに、相手先ノードに指定されたジョブ実行ノード２００Ｂのジョブ実行部２２０Ｂが実行したジョブ「ジョブｂ−２」によるデータをネットワークインタフェース２１０Ａから受け取り、ローカルディスクインタフェース２５０Ａを介して他系用ディスク２７０Ａに書き込ませることで、データの冗長化を行う。
【００７６】
ローカルディスクインタフェース２５０Ａは、自系用ディスク２６０Ａおよび他系用ディスク２７０Ａに対するデータの読出しおよび書込みを行うインタフェースである。なお、データの読出しの場合、このローカルディスクインタフェース２５０Ａは、自系用ディスク２６０Ａに格納されたデータのみを読み出す。
【００７７】
ジョブ実行ノード２００Ｂは、ジョブ実行ノード２００Ａと同様の構成を有する計算機であり、このジョブ実行ノード２００Ｂが有する冗長化機構２４０Ｂも同様に、ジョブ実行ノード２００Ｂのジョブ実行部２２０Ｂが実行したジョブ「ジョブｂ−２」によるデータをローカルディスクインタフェース２５０Ｂを介して自系用ディスク２６０Ｂに書き込ませるとともに、相手先ノードに指定されたジョブ実行ノード２００Ａのジョブ実行部２２０Ａが実行したジョブ「ジョブｂ−１」によるデータをネットワークインタフェース２１０Ｂから受け取り、ローカルディスクインタフェース２５０Ｂを介して他系用ディスク２７０Ｂに書き込ませる。
【００７８】
このようにして、２台のジョブ実行ノード２００Ａ、２００Ｂ間で実行されたジョブによるデータは相互に冗長化され、その冗長化されたデータが自系用ディスク２６０Ａ、２６０Ｂおよび他系用ディスク２７０Ａ、２７０Ｂに格納される。
【００７９】
なお、ジョブ実行ノード２００Ｂが有する他の各部については、ジョブ実行ノード２００Ａと同様の構成であるのでその詳細な説明を省略する。
【００８０】
次に、ペアを組んだ２台のジョブ実行ノード２００Ａ、２００Ｂ間で実行されるデータ冗長化処理の処理手順について説明する。図４は、２台のジョブ実行ノード２００Ａ、２００Ｂ間で実行されるデータ冗長化処理の処理手順を示すフローチャートである。
【００８１】
なお、ここでは、制御サーバ１００のペアグループ管理部１４２によりジョブ実行ノード２００Ａ（ノード＃１）とジョブ実行ノード２００Ｂ（ノード＃２）とがペアを組み、ノード＃１をデータの送信元ノード、ノード＃２をその送信元ノードから送信されたデータを格納する相手先ノードとした場合の例を示している。
【００８２】
同図に示すように、ノード＃１側のジョブ実行部２２０Ａによりジョブが実行され、そのジョブによる実行途中結果やチェックポイントデータなどのデータが出力されてディスク装置への書込みが発生すると（ステップＳ１０１）、ノード＃１側の冗長化機構２４０Ａは、ローカルディスク（自系用ディスク２６０Ａ）への書き込み要求を生成し、そのデータをローカルディスクインタフェース２５０Ａに渡す。また、冗長化機構２４０Ａは、冗長化制御部２３０Ａが記憶している相手先ノードを示す情報に基づいて、その相手先ノードであるノード＃２側のジョブ実行ノード２００Ｂに対して、このジョブ実行ノード２００Ｂが有する他系用ディスク２７０Ｂに書き込むために、データを含むネットワークパケットを生成してネットワークインタフェース２１０Ａに渡す（ステップＳ１０２）。
【００８３】
その後、ノード＃１側のネットワークインタフェース２１０Ａは、冗長化機構２４０Ａが生成したネットワークパケットを、相手先ノードであるノード＃２に送信する（ステップＳ１０３）。また、ノード＃１側のローカルディスクインタフェース２５０Ａは、冗長化機構２４０Ａから受け取ったデータを自系用ディスク２６０Ａに書き込み（ステップＳ１０４）、ノード＃１側におけるデータの書込みを終了する。
【００８４】
そして、ノード＃１の相手先ノードであるノード＃２側において、ステップＳ１０３で送信元ノードであるノード＃１側のネットワークインタフェース２１０Ａから送信されたネットワークパケットを、ノード＃２側のネットワークインタフェース２１０Ｂが受信すると、このネットワークインタフェース２１０Ｂは、到着したパケットをノード＃２側の冗長化機構２４０Ｂに届ける（ステップＳ１０５）。
【００８５】
その後、ノード＃２側の冗長化機構２４０Ｂは、受け取ったパケットがノード＃１から送信されたジョブによる冗長化データであることを認識し、そのデータをノード＃２側のローカルディスクインタフェース２５０Ｂに渡す（ステップＳ１０６）。
【００８６】
そして、ノード＃２側のローカルディスクインタフェース２５０Ｂは、冗長化機構２４０Ｂから受け取ったデータを他系用ディスク２７０Ｂに書き込み（ステップＳ１０７）、ノード＃２側におけるデータの書込みを終了する。
【００８７】
また、ノード＃２の相手先ノードがノード＃１に指定されている場合は、送信元ノードと相手先ノードとが入れ替わり、ノード＃２を送信元ノードとし、ノード＃１を相手先ノードとして上述した処理が実行され、ノード＃１とノード＃２との間でデータの冗長化が相互に行われる。ただし、ジョブ制御指示情報により自系用ディスク２６０Ａが故障してもそのジョブが終了するまではペアを解除しないように指定されていた場合は、ジョブ実行ノード２００Ａは、この書込みアクセスをネットワーク５０を介してペアを組んでいるジョブ実行ノード２００Ｂに対してのみ行う。
【００８８】
なお、ジョブ実行ノード２００Ａによるジョブの実行中に、出力されたデータへの読出しが発生した場合は、ジョブ実行ノード２００Ａから直接ローカルディスクインタフェース２５０Ａを介して自系用ディスク２６０Ａに格納されているデータを取り出す。
【００８９】
次に、障害ノードから代替ノードへの引継方法について説明する。図５は、障害ノードから代替ノードへの引継方法を説明するための説明図である。同図（ａ）に示すように、３台のジョブ実行ノード２００Ａ、２００Ｂ、２００Ｃが高速なネットワーク５０により相互接続されており、平常時においては、ノード＃１のジョブ実行ノード２００Ａと、ノード＃２のジョブ実行ノード２００Ｂとがペアを組み、このノード＃１で実行されるジョブ「ジョブｃ１」と、ノード＃２で実行されるジョブ「ジョブｃ２」とにより出力されるデータの冗長化が相互に行われる。
【００９０】
具体的には、ノード＃１が実行する「ジョブｃ１」によるデータは自系用ディスク２６０Ａおよび他系用ディスク２７０Ｂに格納され、ノード＃２が実行する「ジョブｃ２」によるデータは自系用ディスク２６０Ｂおよび他系用ディスク２７０Ａに格納される。なお、ノード＃３のジョブ実行ノード２００Ｃは、ジョブ制御部１４０によりジョブが割り当てられていない空きノードである。
【００９１】
ここで、ノード＃１において障害が発生し、ノード＃１がダウンした場合を考える。このとき、同図（ｂ）に示すように、障害検知部１５０がノード＃１で障害が発生したことを検知すると、ジョブ制御部１４０は、空きノードであったノード＃３をこのノード＃１の代替ノードとし、障害が発生したノード＃１が保持していたジョブとデータとをともにこの代替ノードとなったノード＃３に引き継がせる処理を行う。
【００９２】
具体的には、まずジョブ制御部１４０は、ノード＃１が有する自系用ディスク２６０Ａおよび他系用ディスク２７０Ｂに格納されていたデータの復旧を行う。すなわち、ジョブ制御部１４０は、ノード＃３の自系用ディスク２６０Ｃには、ノード＃１の自系用ディスク２６０Ａと同じデータが格納されていたノード＃２の他系用ディスク２７０Ｂからデータをコピーさせるとともに、ノード＃３の他系用ディスク２７０Ｃには、ノード＃１の他系用ディスク２７０Ａと同じデータが格納されていたノード＃２の自系用ディスク２６０Ｂからデータをコピーさせるようノード＃２およびノード＃３に対して指示する。これにより、ノード＃１が保持していたデータはノード＃３に復旧される。
【００９３】
その後、ジョブ制御部１４０は、このデータが復旧されたノード＃３に対し、障害発生時にノード＃１が実行していたジョブ「ジョブｃ１」を渡して再実行を指示する。これにより、ノード＃１が保持していたジョブはノード＃３に引き継がれる。
【００９４】
そして、ジョブ制御部１４０は、以降はこのノード＃２とノード＃３との間でペアを組ませて、ノード＃２によるデータは自系用ディスク２６０Ｂおよび他系用ディスク２７０Ｃに格納させ、ノード＃３によるデータは自系用ディスク２６０Ｃおよび他系用ディスク２７０Ｂに格納させて、この２台のノード（ノード＃２およびノード＃３）の間でデータの冗長化を相互に行わせる。
【００９５】
なお、ノード＃１で障害が発生した場合であっても、その障害がノード＃１自身が有する自系用ディスク２６０Ａまたは他系用ディスク２７０Ａで発生したディスク障害である場合は、冗長化している相手先ノードのノード＃２に対しては引き続きデータを格納可能である。このため、ジョブ制御部１４０はこの障害を緊急事態とみなさずに、ペアの構成を変更することなく引き続きノード＃１に対してジョブの実行を続行させ、そのジョブによるデータを相手先ノードのノード＃２が有する他系用ディスク２７０Ｂに対してのみ格納させることとしてもよい。
【００９６】
このように、障害検知部１５０が、障害が発生した障害ノードを検知し、ジョブ制御部１４０が、各ジョブ実行ノード２００の中から代替ノードを選択して、障害ノードが実行していたジョブによりペアを組んでいたノードの他系用ディスクに格納されていたデータを代替ノードにコピーするとともに、障害ノードがペアを組んでいたノードが実行していたジョブによりそのノードの自系用ディスクに格納されていたデータを代替ノードにコピーするよう指示し、データがコピーされた代替ノードには、障害ノードに割り当てられていたジョブを割り当てることとしたので、障害発生前に障害ノードが保持していたジョブとデータとをともに代替ノードに復旧させることができる。
【００９７】
次に、制御サーバ１００が実行するジョブ割当処理の処理手順について説明する。図６は、制御サーバ１００が実行するジョブ割当処理の処理手順を示すフローチャートである。同図に示すように、ジョブスケジューラ１４１は、ユーザからジョブが投入されると、投入されたジョブのデータをスプール部１２０に格納する（ステップＳ２０１）。このとき、ジョブスケジューラ１４１は、さらにそのジョブにジョブ番号を割り当ててそのジョブに関するエントリをジョブ割当状態表１３１に追加し、そのジョブ割当状態表１３１におけるジョブ状態を「キュー状態」とする。
【００９８】
そして、ジョブスケジューラ１４１は、ノード状態表１３２を参照し、未割当ノードが存在するか否かを判定する（ステップＳ２０２）。具体的には、ジョブスケジューラ１４１は、ノード状態表１３２におけるノード状態が「空き状態」であるノードが存在するか否かを判定する。
【００９９】
その結果、未割当ノードが存在しない場合は、ステップＳ２０１に戻り、ジョブスケジューラ１４１は、未割当ノードが発生するまでユーザから投入されるジョブの格納を続行する。一方、未割当ノードが存在する場合は、ジョブスケジューラ１４１は、ジョブ制御指示情報に基づく所定のスケジューリングポリシに従って、スプール部１２０における待ちキューからジョブを１つ取り出す（ステップＳ２０３）。
【０１００】
そして、ジョブスケジューラ１４１は、取り出したジョブに対して、空きノード数はジョブ割当に必要なノード数を満たすか否かを判定する（ステップＳ２０４）。具体的には、ジョブスケジューラ１４１は、スプール部１２０から取り出したジョブのジョブ制御指示情報に基づいて、そのジョブを割り当てるために必要となるノード数が、ノード状態表１３２における「空き状態」であるノードのノード数を満たすか否かを判定する。
【０１０１】
その結果、ジョブ割当に必要なノード数を満たさない場合は、ステップＳ２０１に戻り、ジョブスケジューラ１４１は、必要なノード数を満たすまでユーザから投入されるジョブの格納を続行する。
【０１０２】
一方、ジョブ割当に必要なノード数を満たす場合は、ジョブスケジューラ１４１は、所定のアルゴリズムポリシに従って、互いに類似する２台のジョブ実行ノード２００の間で、性質が類似するジョブが割り当てられるように、ジョブ実行ノード２００に対してジョブを割り当てる。具体的には、このジョブスケジューラ１４１は、２台のジョブ実行ノード２００間のネットワーク距離が近くその位置が類似するか、または、２台のジョブ実行ノード２００間におけるジョブの処理速度が近く処理能力が類似するかを判定し、その判定結果に基づいて各ジョブ実行ノード２００にジョブを割り当てる（ステップＳ２０５）。
【０１０３】
そして、ペアグループ管理部１４２は、ジョブスケジューラ１４１で選択された互いに類似する２台のジョブ実行ノード２００の間でペアを組ませて、その結果をペアグループ構成表１３３に記憶させる（ステップＳ２０６）。
【０１０４】
そして、ジョブスケジューラ１４１は、決定した割当先ノードである各ジョブ実行ノード２００に対してそのジョブを送信してそのジョブを実行させるとともに、ジョブ割当状態表１３１におけるそのジョブのジョブ状態を「実行状態」に変更し、ノード状態表１３２のジョブを送信した各ノードに対応するノード状態を「ジョブ実行状態」に変更する（ステップＳ２０７）。
【０１０５】
その後、ジョブを受け取ったジョブ実行ノード２００によりジョブが実行され、そのジョブによる実行結果、あるいはジョブの実行途中でユーザによりキャンセルされたジョブによる実行途中結果をジョブ制御部１４０が受け取ると（ステップＳ２０８）、ジョブスケジューラ１４１は、実行結果を受け取ったジョブに対応するジョブ割当状態表１３１のジョブ状態を「完了状態」に変更するとともに、ノード状態表１３２のノード状態を「空き状態」に変更し（ステップＳ２０９）、このジョブ割当処理を終了する。
【０１０６】
このように、ジョブスケジューラ１４１が、各ジョブ実行ノード２００の中から互いに類似するノードの間でペアを組ませてジョブを割り当て、ペアグループ管理部１４２が、選択した割当ノードが実行したジョブによるデータを、そのペアが組まれたジョブ実行ノード２００間でジョブによるデータを相互に冗長化させることとしたので、クラスタ全体においてストレージ信頼性を確保しつつ処理効率を向上させることができる。
【０１０７】
次に、図６のステップＳ２０６においてペアグループ管理部１４２が実行する処理について説明する。図７は、ペアグループ管理部１４２が実行するペア構成処理の処理手順を示すフローチャートである。なお、同図においては、ジョブスケジューラ１４１により互いに類似するジョブ実行ノード２００としてノード＃１とノード＃２の２台が選択され、ペアグループ管理部１４２がこのジョブ実行ノード２００間でペアを組ませる場合について説明する。
【０１０８】
図７に示すように、ペアグループ管理部１４２は、ペアグループ構成表１３３を参照して、ジョブスケジューラ１４１により選択されたノード＃１とノード＃２との間では既にペアが組まれているか否かを判定する（ステップＳ３０１）。
【０１０９】
その結果、ノード＃１とノード＃２との間で既にペアが組まれている場合は、そのままノード＃１とノード＃２との間でペアを組ませて続けて、このペア構成処理を終了する。
【０１１０】
一方、ノード＃１とノード＃２との間ではペアが組まれていない場合は、ペアグループ管理部１４２は、ノード＃１およびノード＃２は現在それぞれ他のノードとペアを組んでいるが、ジョブのデータ量が少ないなどの理由により別々のペアを構成したままでも構わないか否かを判定する（ステップＳ３０２）。この判定は、ノード＃１およびノード＃２で実行されているジョブに含まれるジョブ制御指示情報に基づいて行われる。
【０１１１】
その結果、別々のペアのままでも構わないと判定された場合は、ペアグループ管理部１４２は、ノード＃１とノード＃２との間でペアを組ませる処理をキャンセルして（ステップＳ３０３）、ノード＃１とノード＃２とを別々のペアとしたままこのペア構成処理を終了する。
【０１１２】
一方、別々のペアを構成したままでも構わないとは判定されなかった場合は、ペアグループ管理部１４２は、ペアグループ構成表１３３におけるノード＃１の相手先ノード番号とノード＃２の相手先ノード番号とがともに「なし」であるか否かを判定する（ステップＳ３０４）。
【０１１３】
その結果、ともに相手先ノード番号が「なし」である場合は、ペアグループ管理部１４２は、このノード＃１とノード＃２との間で直ちにペアを組ませる処理を行う。すなわち、ペアグループ管理部１４２は、ペアグループ構成表１３３におけるノード＃１の相手先ノード番号を「ノード＃２」に、ノード＃２の相手先ノード番号を「ノード＃１」に変更してこの２台のノード＃１とノード＃２との間でペアを組ませて、さらにノード＃１およびノード＃２の冗長化制御部２３０Ａ、２３０Ｂに対してそのペアを組んだ相手先ノードを通知して（ステップＳ３０５）、このペア構成処理を終了する。
【０１１４】
一方、少なくとも一方の相手先ノード番号が「なし」ではない場合、すなわち、少なくとも一方のノードが既に他のノードとペアを組んでいる場合は、そのままデータの冗長化を行ったのでは相手先ノードの重複が発生しこの相手先ノードに格納される冗長化データが破壊されてしまう。そこで、ペアグループ管理部１４２は、ジョブ制御指示情報に基づいてノード＃１と組まれているペア、およびノード＃２と組まれているペアは、ともに解除可能であるか否かを判定する（ステップＳ３０６）。
【０１１５】
その結果、ペアはともに解除可能であると判定された場合は、ペアグループ管理部１４２は、ノード＃１とペアを組んでいた他のノード、およびノード＃２とペアを組んでいた他のノードとの間で組まれていたペアを全て解除し（ステップＳ３０７）、ステップＳ３０５に移行してノード＃１とノード＃２との間でペアを組ませる処理を行う。
【０１１６】
一方、ペアの構成は解除可能ではないと判定された場合は、このノード＃１とノード＃２との間ではペアを組ませることができないため、ペアグループ管理部１４２は、類似するノード間へのジョブの割当の再実行をジョブスケジューラ１４１に要求し（ステップＳ３０８）、このペア構成処理を終了する。
【０１１７】
このように、ペアグループ管理部１４２は、ジョブスケジューラ１４１により選択された２台のノードのうち少なくとも一方のノードが既に他のノードとペアを組んでいる場合は、それらのペアを一旦解除した後に新たに２台のノード間でペアを組ませることとしたので、相手先ノードが重複することによる冗長化データの破壊を抑止することができる。
【０１１８】
次に、障害発生時にジョブ制御部１４０が実行する障害復旧処理の処理手順について説明する。図８は、障害発生時にジョブ制御部１４０が実行する障害復旧処理の処理手順を示すフローチャートである。同図に示す障害復旧処理は、障害検知部１５０により各ジョブ実行ノード２００で発生した障害が検出されたときに実行される。
【０１１９】
なお、同図においては、障害が発生したジョブ実行ノード２００を「ノード＃１」、障害が発生したノード＃１とペアを組んでいるジョブ実行ノード２００を「ノード＃２」、障害が発生したノード＃１の代替ノードとなるジョブ実行ノード２００を「ノード＃３」とした場合について説明する。
【０１２０】
同図に示すように、ノード＃１のジョブ実行ノード２００Ａで障害が発生し、その障害を障害検知部１５０が検知すると、ジョブ制御部１４０のペアグループ管理部１４２は、障害が発生したノード＃１、またはこのノード＃１とペアを組んでいるノード＃２において、現在ジョブが走行中であるか否かを判定する（ステップＳ４０１）。具体的には、ペアグループ管理部１４２は、ノード状態表１３２においてノード＃１とノード＃２の少なくとも一方のノード状態が「ジョブ実行状態」であるか否かを判定する。
【０１２１】
その結果、ノード＃１およびノード＃２のノード状態がともに「ジョブ実行状態」以外の状態である場合は、ジョブもデータも復旧させる必要がないので、ペアグループ管理部１４２は直ちに、ペアグループ構成表１３３においてノード＃１の相手先ノード番号とノード＃２の相手先ノード番号とをともに「なし」に変更してノード＃１とノード＃２との関係を削除するとともに、ノード状態表１３２においてノード＃１のノード状態を「停止状態」に変更してノード＃１に対するジョブの割り当てを停止させ（ステップＳ４０２）、この障害復旧処理を終了する。
【０１２２】
一方、ノード＃１またはノード＃２の少なくとも一方のノード状態が「ジョブ実行状態」である場合は、ペアグループ管理部１４２は、ノード＃１で発生した障害の種類、およびノード＃１に割り当てたジョブに含まれていたジョブ制御指示情報に基づいて、ノード＃１で発生した障害が緊急性を要するか否かを判定する（ステップＳ４０３）。
【０１２３】
その結果、ノード＃１で発生した障害がディスク障害である場合など、ジョブが継続可能であり緊急性を要しないと判定された場合は、ペアグループ管理部１４２は、ペアの構成を変更することなくジョブが完了するまで現状を維持し（ステップＳ４０４）、ジョブの完了後にステップＳ４０２に移行する。
【０１２４】
一方、緊急性を要すると判定された場合は、ペアグループ管理部１４２は、ペアの構成を変更する処理を行う。すなわち、ペアグループ管理部１４２は、ペアグループ構成表１３３においてノード＃１の相手先ノード番号とノード＃２の相手先ノード番号とをともに「なし」に変更してノード＃１とノード＃２との関係を削除し、ノード状態表１３２においてノード＃１のノード状態を「停止状態」に変更し、ジョブ割当状態表１３１においてノード＃１およびノード＃２に割り当てられていたジョブのジョブ状態を「保留状態」に変更する（ステップＳ４０５）。
【０１２５】
そして、ペアグループ管理部１４２は、空きノード（ここではノード＃３）が発生してノード状態表１３２においてノード＃３のノード状態が「空き状態」となるまで待つ（ステップＳ４０６）。その後、ノード＃３のノード状態が「空き状態」となると、ペアグループ管理部１４２は、空きノードとなったノード＃３に対して、ペアグループ構成表１３３を参照して現在ノード＃３が他のノードとペアを組んでいるか否かを判定する（ステップＳ４０７）。
【０１２６】
その結果、ノード＃３が他のノードとペアを組んでいる場合は、ペアグループ管理部１４２は、そのペアを組んでいる相手先ノード（例えばノード＃４）が空きノードとなるまで待つなどの処理を行い（ステップＳ４０８）、このノード＃４が空きノードとなった後にペアグループ構成表１３３においてノード＃３の相手先ノード番号とノード＃４の相手先ノード番号とをともに「なし」に変更してノード＃３とノード＃４との関係を解消する（ステップＳ４０９）。このとき、ペアグループ管理部１４２は、並行してノード＃３とノード＃４に関するジョブ割当状態表１３１およびノード状態表１３２の各項目を更新する。
【０１２７】
一方、ノード＃３が他のノードとペアを組んでいない場合は、上述したステップＳ４０８〜ステップＳ４０９の処理は省略される。
【０１２８】
その後、ペアグループ管理部１４２は、障害が発生したノード＃１の自系用ディスク２６０Ａおよび他系用ディスク２７０Ａが保持していたデータをノード＃３に引き継がせる処理を行う。すなわち、ペアグループ管理部１４２は、ノード＃２が有する冗長化制御部２３０Ｂ、およびノード＃３が有する冗長化制御部２３０Ｃに対して、まず、ノード＃１から出力され、ノード＃２の他系用ディスク２７０Ｂに格納されているデータを、ノード＃３の自系用ディスク２６０Ｃにコピーさせる指示を送信する。さらに、ペアグループ管理部１４２は、ノード＃１の他系用ディスク２７０Ａに格納されていたデータと同じデータが格納されているノード＃２の自系用ディスク２６０Ｂから、ノード＃３の他系用ディスク２７０Ｃへとデータをコピーさせる指示を送信する（ステップＳ４１０）。以上の処理により、障害発生時にノード＃１が保持していたデータはノード＃３へと復旧される。
【０１２９】
そして、データがノード＃３にコピーされ、ノード＃１が保持していたデータが復旧されると、ペアグループ管理部１４２は、ペアグループ構成表１３３におけるノード＃２の相手先ノード番号を「ノード＃３」に、ノード＃３の相手先ノード番号を「ノード＃２」にそれぞれ変更することで、ノード＃２とノード＃３とのペア関係を追加する（ステップＳ４１１）。
【０１３０】
そして、ジョブスケジューラ１４１は、障害が発生したノード＃１で実行されていたジョブをノード＃３に渡して、そのジョブをノード＃３に引き継がせてジョブを再開させる。このとき、ジョブ割当状態表１３１におけるノード＃２のジョブ状態が「保留状態」であるならば、ノード＃２におけるジョブを再開させてジョブ状態を「実行状態」に変更する。また、ジョブスケジューラ１４１は、このジョブの引継ぎに合わせて、ジョブ割当状態表１３１におけるそのジョブのジョブ状態を「実行状態」に変更するとともに割当ノードのノード番号を変更し、さらにノード状態表１３２におけるノード状態を「ジョブ実行状態」に変更する（ステップＳ４１２）。その後、ジョブ制御部１４０はこの障害復旧処理を終了する。なお、ここでは、データが復旧された後にジョブを再開することとしたが、データ復旧中にジョブを再開することもできる。
【０１３１】
このように、障害検知部１５０が、障害が発生した障害ノードを検知し、ペアグループ管理部１４２が、各ジョブ実行ノード２００の中から代替ノードを選択して、障害ノードが実行していたジョブによりペアを組んでいたノードの他系用ディスクに格納されていたデータを代替ノードにコピーするとともに、障害ノードがペアを組んでいたノードが実行していたジョブによりそのノードの自系用ディスクに格納されていたデータを代替ノードにコピーするよう指示し、ジョブスケジューラ１４１が、データが復旧された代替ノードに対して、障害ノードに割り当てられていたジョブを割り当てることとしたので、障害発生前に障害ノードが保持していたジョブとデータとをともに代替ノードに復旧させることができる。
【０１３２】
上述してきたように、本実施例では、ジョブ制御部１４０が、各ジョブ実行ノード２００の中から、ジョブの割当を行う割当ノード２００Ａと、その割当ノードと類似する類似ノード２００Ｂとを選択し、選択した割当ノード２００Ａが実行したジョブによるデータを、その割当ノード２００Ａおよび類似ノード２００Ｂに格納させるよう指示することとしたので、クラスタ全体に掛かる負荷を最小限に抑えつつノード間でデータを冗長化させることができ、もって安価な構成であってもクラスタの規模に見合った計算処理能力を得ることができる。
【０１３３】
また、本実施例では、各ジョブ実行ノード２００のうち２台ずつでペアを組ませてデータを冗長化させる構成としたが、３台以上のジョブ実行ノード２００によりグループを組ませる場合にも同様に適用することができる。例えば、３台のジョブ実行ノード２００（ノード＃１、ノード＃２、ノード＃３）でグループを組ませる場合は、ノード＃１からのデータをノード＃２の他系用ディスクに格納させ、ノード＃２からデータをノード＃３の他系用ディスクに格納させ、ノード＃３からのデータをノード＃１の他系用ディスクに格納させる構成とすることで、このグループを組ませた３台のジョブ実行ノード２００の間でもデータを冗長化させることが可能となる。さらに、この構成においてノード＃３で障害が発生し、ノード＃３の代替ノードをノード＃４とした場合は、制御サーバ１００は、ノード＃４の自系用ディスクにはノード＃１の他系用ディスクに格納されていたデータをコピーさせ、ノード＃４の他系用ディスクにはノード＃２の自系用ディスクに格納されていたデータをコピーさせることで、ノード＃３が保持していたデータをノード＃４に引き継がせることができる。
【０１３４】
さらに、本実施例では、障害を検知する障害検知部１５０を制御サーバ１００のみに設ける構成としたが、この障害検知部を各ジョブ実行ノード２００にも設け、ジョブ実行ノード２００が相手先ノードにおける障害を検知したときに、制御サーバ１００に障害の復旧を行わせる構成としてもよい。これにより、ジョブ実行ノード２００で発生した障害検出精度を向上させ、さらに障害を早期に発見することができる。
【０１３５】
（付記１）コンピュータに、多数台のノードが高速ネットワークにより相互接続されて構成されるクラスタシステムで、各ノードへのジョブの割り当てを制御させるクラスタ制御プログラムであって、
各ノードの中から、ジョブの割当を行う割当ノードと、該割当ノードと類似する類似ノードとを選択する相互類似ノード選択手段と、
前記相互類似ノード選択手段により選択された割当ノードが実行したジョブによるデータを、該割当ノードおよび前記類似ノードに格納させるよう指示するデータ冗長化指示手段と、
して機能させることを特徴とするクラスタ制御プログラム。
【０１３６】
（付記２）前記相互類似ノード選択手段は、ネットワーク距離に基づいて前記類似ノードを選択することを特徴とする付記１に記載のクラスタ制御プログラム。
【０１３７】
（付記３）前記相互類似ノード選択手段は、ジョブ処理速度に基づいて前記類似ノードを選択することを特徴とする付記１に記載のクラスタ制御プログラム。
【０１３８】
（付記４）前記コンピュータに、更に、障害が発生した障害ノードを検知する障害検知手段と、前記障害検知手段により障害が検知されたときに、各ノードの中から代替ノードを選択して、前記相互類似ノード選択手段により前記障害ノードが割当ノードとして選択され実行されていたジョブにより類似ノードに格納されていたデータを前記代替ノードにコピーするよう指示し、さらに、前記相互類似ノード選択手段により前記障害ノードが類似ノードとして選択された割当ノードにより実行されていたジョブにより割当ノードに格納されていたデータを前記代替ノードにコピーするよう指示するデータ復旧手段と、
して機能させると共に、
前記データ復旧手段によりデータがコピーされた代替ノードには、前記障害ノードに割り当てられていたジョブを割り当てることを特徴とする付記１〜３のいずれか一つに記載のクラスタ制御プログラム。
【０１３９】
（付記５）前記相互類似ノード選択手段は、第１のジョブに対して、該第１のジョブの割当を行う第１の割当ノードと、該第１の割当ノードと類似する第１の類似ノードとを選択し、さらに、第２のジョブに対して、該第２のジョブの割当を行う第２の割当ノードと、該第２の割当ノードと類似し、かつ前記第１の類似ノードは異なる第２の類似ノードとを選択し、前記データ冗長化指示手段は、前記第１の割当ノードが実行した第１のジョブによるデータを、該第１の割当ノードおよび前記第１の類似ノードに格納させるよう指示し、さらに、前記第２の割当ノードが実行した第２のジョブによるデータを、該第２の割当ノードおよび前記第２の類似ノードに格納させるよう指示することを特徴とする付記１〜４のいずれか一つに記載のクラスタ制御プログラム。
【０１４０】
（付記６）前記第１の類似ノードと前記第２の割当ノードは、同一のノードであることを特徴とする付記５に記載のクラスタ制御プログラム。
【０１４１】
（付記７）前記第１の割当ノードと前記第２の類似ノードは、同一のノードであることを特徴とする付記６に記載のクラスタ制御プログラム。
【０１４２】
（付記８）前記第１のジョブと前記第２のジョブは、互いに性質が類似するジョブであることを特徴とする付記５〜７のいずれか一つに記載のクラスタ制御プログラム。
【０１４３】
（付記９）多数台のノードが高速ネットワークにより相互接続されて構成されるクラスタシステムで、各ノードへのジョブの割り当てを制御するクラスタ制御方法であって、
各ノードの中から、ジョブの割当を行う割当ノードと、該割当ノードと類似する類似ノードとを選択する相互類似ノード選択工程と、
前記相互類似ノード選択工程により選択された割当ノードが実行したジョブによるデータを、該割当ノードおよび前記類似ノードに格納させるよう指示するデータ冗長化指示工程と、
を含んだことを特徴とするクラスタ制御方法。
【０１４４】
（付記１０）前記相互類似ノード選択工程は、ネットワーク距離に基づいて前記類似ノードを選択することを特徴とする付記９に記載のクラスタ制御方法。
【０１４５】
（付記１１）前記相互類似ノード選択工程は、ジョブ処理速度に基づいて前記類似ノードを選択することを特徴とする付記９に記載のクラスタ制御方法。
【０１４６】
（付記１２）障害が発生した障害ノードを検知する障害検知工程と、前記障害検知工程により障害が検知されたときに、各ノードの中から代替ノードを選択する代替ノード選択工程と、前記代替ノード選択工程により選択された代替ノードに対して、前記相互類似ノード選択工程により前記障害ノードが割当ノードとして選択され実行されていたジョブにより類似ノードに格納されていたデータをコピーするよう指示し、さらに、前記相互類似ノード選択工程により前記障害ノードが類似ノードとして選択された割当ノードにより実行されていたジョブにより割当ノードに格納されていたデータをコピーするよう指示するデータ復旧工程と、前記データ復旧工程によりデータがコピーされた代替ノードに対して、前記障害ノードに割り当てられていたジョブを割り当てるジョブ復旧工程と、をさらに含んだことを特徴とする付記９〜１１のいずれか一つに記載のクラスタ制御方法。
【０１４７】
（付記１３）多数台のノードが高速ネットワークにより相互接続されて構成されるクラスタシステムで、各ノードへのジョブの割り当てを制御するクラスタ制御装置であって、
各ノードの中から、ジョブの割当を行う割当ノードと、該割当ノードと類似する類似ノードとを選択する相互類似ノード選択手段と、
前記相互類似ノード選択手段により選択された割当ノードが実行したジョブによるデータを、該割当ノードおよび前記類似ノードに格納させるよう指示するデータ冗長化指示手段と、
を備えたことを特徴とするクラスタ制御装置。
【０１４８】
（付記１４）前記相互類似ノード選択手段は、ネットワーク距離に基づいて前記類似ノードを選択することを特徴とする付記１３に記載のクラスタ制御装置。
【０１４９】
（付記１５）前記相互類似ノード選択手段は、ジョブ処理速度に基づいて前記類似ノードを選択することを特徴とする付記１３に記載のクラスタ制御装置。
【０１５０】
（付記１６）障害が発生した障害ノードを検知する障害検知手段と、前記障害検知手段により障害が検知されたときに、各ノードの中から代替ノードを選択して、前記相互類似ノード選択手段により前記障害ノードが割当ノードとして選択され実行されていたジョブにより類似ノードに格納されていたデータを前記代替ノードにコピーするよう指示し、さらに、前記相互類似ノード選択手段により前記障害ノードが類似ノードとして選択された割当ノードにより実行されていたジョブにより割当ノードに格納されていたデータを前記代替ノードにコピーするよう指示するデータ復旧手段と、をさらに備え、前記データ復旧手段によりデータがコピーされた代替ノードには、前記障害ノードに割り当てられていたジョブを割り当てることを特徴とする付記１３〜１５のいずれか一つに記載のクラスタ制御装置。
【産業上の利用可能性】
【０１５１】
以上のように、本発明に係る制御プログラム、制御方法および制御装置は、大規模クラスタシステムにおける廉価性の向上に有用であり、特に、従来の小規模クラスタで用いられていた設備を流用して大規模クラスタシステムを構築する場合に適している。
【図面の簡単な説明】
【０１５２】
【図１−１】本実施例に係るクラスタシステムの構成を説明するための説明図である。
【図１−２】障害発生時における制御サーバの動作を説明するための説明図である。
【図２】本実施例に係るクラスタシステムの構成を示す機能ブロック図である。
【図３−１】ジョブ割当状態表の一例を示す図である。
【図３−２】ノード状態表の一例を示す図である。
【図３−３】ペアグループ構成表の一例を示す図である。
【図４】２台のジョブ実行ノード間で実行されるデータ冗長化処理の処理手順を示すフローチャートである。
【図５】障害ノードから代替ノードへの引継方法を説明するための説明図である。
【図６】制御サーバが実行するジョブ割当処理の処理手順を示すフローチャートである。
【図７】ペアグループ管理部が実行するペア構成処理の処理手順を示すフローチャートである。
【図８】障害発生時にジョブ制御部が実行する障害復旧処理の処理手順を示すフローチャートである。
【符号の説明】
【０１５３】
１    クラスタシステム
１０Ａ、１０Ｂ    クラスタ
５０    ネットワーク
６０    スイッチ
１００    制御サーバ
１１０    ネットワークインタフェース
１２０    スプール部
１３０    記憶部
１３１    ジョブ割当状態表
１３２    ノード状態表
１３３    ペアグループ構成表
１４０    ジョブ制御部
１４１    ジョブスケジューラ
１４２    ペアグループ管理部
１５０    障害検知部
２００、２００Ａ、２００Ｂ、２００Ｃ    ジョブ実行ノード
２１０Ａ、２１０Ｂ    ネットワークインタフェース
２２０Ａ、２２０Ｂ    ジョブ実行部
２３０Ａ、２３０Ｂ    冗長化制御部
２４０Ａ、２４０Ｂ    冗長化機構
２５０Ａ、２５０Ｂ    ローカルディスクインタフェース
２６０Ａ、２６０Ｂ、２６０Ｃ    自系用ディスク
２７０Ａ、２７０Ｂ、２７０Ｃ    他系用ディスク
【図１−１】
0004611922.tif 000002
【図１−２】
0004611922.tif 000003
【図２】
0004611922.tif 000004
【図３−１】
0004611922.tif 000005
【図３−２】
0004611922.tif 000006
【図３−３】
0004611922.tif 000007
【図４】
0004611922.tif 000008
【図５】
0004611922.tif 000009
【図６】
0004611922.tif 000010
【図７】
0004611922.tif 000011
【図８】
0004611922.tif 000012