(57)【要約】      （修正有）【課題】複数のノードを有するシステムのフェイルオーバ時、ジョブの情報の共有を高速に行い、フェイルオーバを高速化する。【解決手段】複数のノードを有するストレージシステムにおいて、複数のノードの構成情報を変更するジョブを実行するプライマリノード１ａと、プライマリノードの障害時にジョブを引き継ぐセカンダリノード１ｂと、を有する。プライマリノードとセカンダリノードは、ジョブを格納する揮発メモリ１４ａ、１４ｂと不揮発メモリ１５ａ、１５ｂとを有し、ジョブのデータ項目が、情報が消失するとシステムの構成変更が失敗し内部状態が不正になるデータ項目か、情報が消失してもシステムの構成変更は成功するが、GUIの表示が不正になるなど、許容できる不具合が生じるデータ項目か、情報が消失してもシステムの構成変更が成功し、不具合が生じないデータ項目かに応じて、ジョブの情報を揮発メモリと不揮発メモリに選択的に格納する。【選択図】図１
2020135138.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードを有するストレージシステムにおいて、
前記複数のノードの構成情報を変更するジョブを実行するプライマリノードと、
前記プライマリノードの障害時に、ジョブを引き継ぐセカンダリノードと、
前記プライマリノードと前記セカンダリノードは、ジョブを格納する揮発メモリと不揮発メモリとを有し、
前記プライマリノードと前記セカンダリノードは、前記ジョブのデータ項目が、（A）情報が消失するとシステムの構成変更が失敗し内部状態が不正になるデータ項目と、（B）情報が消失してもシステムの構成変更は成功するが、GUIの表示が不正になるなど、許容できる不具合が生じるデータ項目、（C）情報が消失してもシステムの構成変更が成功し、不具合が生じないデータ項目に応じて、前記ジョブの情報を前記揮発メモリと前記不揮発メモリに選択的に格納する、
ことを特徴とするストレージシステム。
【請求項２】
請求項１に記載のストレージシステムにおいて、
前記プライマリノードは、第１の処理部と、第１の揮発メモリと第１の不揮発メモリとを有し、
前記セカンダリノードは、第２の処理部と、第２の揮発メモリと第２の不揮発メモリとを有し、
前記第1の処理部は、ジョブの状態を前記第1の揮発メモリに格納し、前記第２の処理部は、ジョブの状態を前記第２の揮発メモリに格納し、
前記第1の処理部は、前記データ項目に応じて、ジョブの状態を前記第1の不揮発メモリへの格納を制御し、前記第２の処理部は、前記データ項目に応じて、ジョブの状態を前記第２の不揮発メモリへの格納を制御する、
ことを特徴とするストレージシステム。
【請求項３】
請求項２に記載のストレージシステムにおいて、
前記ジョブのデータ項目が、前記（A）情報が消失するとシステムの構成変更が失敗し内部状態が不正になるデータ項目である場合、
前記第1の処理部はジョブの状態を前記第1の揮発メモリに、前記第２の処理部はジョブの状態を前記第２の揮発メモリに、それぞれ格納すると共に、
前記第1の処理部はジョブの状態を前記第２の不揮発メモリに、前記第２の処理部はジョブの状態を前記第２の不揮発メモリに、それぞれ格納する、
ことを特徴とするストレージシステム。
【請求項４】
請求項２に記載のストレージシステムにおいて、
前記ジョブのデータ項目が、前記（B）情報が消失してもシステムの構成変更は成功するが、GUIの表示が不正になるなど、許容できる不具合が生じるデータ項目である場合、
前記第1の処理部はジョブの状態を前記第1の揮発メモリに、前記第２の処理部はジョブの状態を前記第２の揮発メモリに、それぞれ格納すると共に、
前記第1の処理部はジョブの状態を前記第２の不揮発メモリに格納せず、前記第２の処理部はジョブの状態を前記第２の不揮発メモリに格納する、
ことを特徴とするストレージシステム。
【請求項５】
請求項２に記載のストレージシステムにおいて、
前記ジョブのデータ項目が、前記（C）情報が消失してもシステムの構成変更が成功し、不具合が生じないデータ項目である場合、
前記第1の処理部はジョブの状態を前記第1の揮発メモリに、前記第２の処理部はジョブの状態を前記第２の揮発メモリに、それぞれ格納すると共に、
前記第1の処理部と前記第２の処理部は、ジョブの状態を前記第1の不揮発メモリと前記第２の不揮発メモリに格納しない、
ことを特徴とするストレージシステム。
【請求項６】
請求項２に記載のストレージシステムにおいて、
前記プライマリノードの障害時に、前記セカンダリノードは、プライマリノードに昇格し、前記第２の揮発メモリからジョブの状態を読み出し、ジョブを再生することで前記プライマリノードから処理を引き継ぐ、
ことを特徴とするストレージシステム。
【請求項７】
請求項２に記載のストレージシステムにおいて、
前記プライマリノードと前記セカンダリノードに障害が発生した場合、
前記プライマリノードと前記セカンダリノードは再起動を実施し、
前記プライマリノードが、前記第１の不揮発メモリからジョブの状態を読み出し、ジョブを再生することでジョブを再開する、
ことを特徴とするストレージシステム。
【請求項８】
複数のノードを有するストレージシステムの回復方法において、
前記ストレージシステムは、前記複数のノードの構成情報を変更するジョブを実行するプライマリノードと、前記プライマリノードの障害時に、ジョブを引き継ぐセカンダリノードとを有し、
前記プライマリノードと前記セカンダリノードは、ジョブを格納する揮発メモリと不揮発メモリとを有し、
前記プライマリノードと前記セカンダリノードは、前記ジョブのデータ項目が、（A）情報が消失するとシステムの構成変更が失敗し内部状態が不正になるデータ項目と、（B）情報が消失してもシステムの構成変更は成功するが、GUIの表示が不正になるなど、許容できる不具合が生じるデータ項目、（C）情報が消失してもシステムの構成変更が成功し、不具合が生じないデータ項目に応じて、前記ジョブの情報を前記揮発メモリと前記不揮発メモリに選択的に格納する、
ことを特徴とするストレージシステムの回復方法。
【請求項９】
請求項８に記載のストレージシステムの回復方法において、
前記プライマリノードは、第１の処理部と、第１の揮発メモリと第１の不揮発メモリとを有し、
前記セカンダリノードは、第２の処理部と、第２の揮発メモリと第２の不揮発メモリとを有し、
前記第1の処理部は、ジョブの状態を前記第1の揮発メモリに格納し、前記第２の処理部は、ジョブの状態を前記第２の揮発メモリに格納し、
前記第1の処理部は、前記データ項目に応じて、ジョブの状態を前記第1の不揮発メモリへの格納を制御し、前記第２の処理部は、前記データ項目に応じて、ジョブの状態を前記第２の不揮発メモリへの格納を制御する、
ことを特徴とするストレージシステムの回復方法。
【請求項１０】
請求項９に記載のストレージシステムの回復方法において、
前記ジョブのデータ項目が、前記（A）情報が消失するとシステムの構成変更が失敗し内部状態が不正になるデータ項目である場合、
前記第1の処理部はジョブの状態を前記第1の揮発メモリに、前記第２の処理部はジョブの状態を前記第２の揮発メモリに、それぞれ格納すると共に、
前記第1の処理部はジョブの状態を前記第２の不揮発メモリに、前記第２の処理部はジョブの状態を前記第２の不揮発メモリに、それぞれ格納する、
ことを特徴とするストレージシステムの回復方法。
【請求項１１】
請求項９に記載のストレージシステムの回復方法において、
前記ジョブのデータ項目が、前記（B）情報が消失してもシステムの構成変更は成功するが、GUIの表示が不正になるなど、許容できる不具合が生じるデータ項目である場合、
前記第1の処理部はジョブの状態を前記第1の揮発メモリに、前記第２の処理部はジョブの状態を前記第２の揮発メモリに、それぞれ格納すると共に、
前記第1の処理部はジョブの状態を前記第２の不揮発メモリに格納せず、前記第２の処理部はジョブの状態を前記第２の不揮発メモリに格納する、
ことを特徴とするストレージシステムの回復方法。
【請求項１２】
請求項９に記載のストレージシステムの回復方法において、
前記ジョブのデータ項目が、前記（C）情報が消失してもシステムの構成変更が成功し、不具合が生じないデータ項目である場合、
前記第1の処理部はジョブの状態を前記第1の揮発メモリに、前記第２の処理部はジョブの状態を前記第２の揮発メモリに、それぞれ格納すると共に、
前記第1の処理部と前記第２の処理部は、ジョブの状態を前記第1の不揮発メモリと前記第２の不揮発メモリに格納しない、
ことを特徴とするストレージシステムの回復方法。
【請求項１３】
請求項９に記載のストレージシステムの回復方法において、
前記プライマリノードの障害時に、前記セカンダリノードは、プライマリノードに昇格し、前記第２の揮発メモリからジョブの状態を読み出し、ジョブを再生することで前記プライマリノードから処理を引き継ぐ、
ことを特徴とするストレージシステムの回復方法。
【請求項１４】
請求項９に記載のストレージシステムの回復方法において、
前記プライマリノードと前記セカンダリノードに障害が発生した場合、
前記プライマリノードと前記セカンダリノードは再起動を実施し、
前記プライマリノードが、前記第１の不揮発メモリからジョブの状態を読み出し、ジョブを再生することでジョブを再開する、
ことを特徴とするストレージシステムの回復方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム、ストレージシステムの回復方法に関する。
【背景技術】
【０００２】
Software Defined Storage （SDS）のように、複数ノードで構成されるシステムでは、ボリュームの作成や容量の増減などの構成情報変更処理(以下、ジョブ)を実行中に該当ノードに障害が発生すると、システムの構成情報に不整合が発生する。
【０００３】
そこで一般的なSDSでは、システムの構成情報の整合性を保ちながら障害から回復するために、ジョブの実行前にジョブに関する情報をスケールアウト可能なデータベース(SODB)に格納する。
【０００４】
ノード障害時のジョブの再構築に関する技術として、特許文献１がある。特許文献１では、ジョブＤＢ１ａの内容が失われた場合、ジョブＤＢ再構築手段１ｄにより、ストレージデバイス２からジョブ投入情報２ａとジョブ配置情報２ｂとが収集され、ジョブ被配置計算ノードから実行資源情報３ａａ，３ａｂが収集され、ジョブＤＢ１ａ内にジョブ情報が再構築される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２１０１６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１では、ジョブ実行中のノードに障害が発生した場合、ストレージデバイス２からジョブ投入情報２ａとジョブ配置情報２ｂを参照し、ジョブの再構築および再実行を行う。しかしながら、特許文献１の技術では、ジョブ投入情報２ａとジョブ配置情報２ｂ等のジョブに関する情報が、ハードディスク装置などの不揮発性の記憶媒体のストレージデバイスに格納されることを前提としている。
【０００７】
一般的に、ハードディスク等の不揮発性の記憶媒体は揮発性のインメモリと比較するとデータアクセス速度が非常に低速である。そのため、ジョブを実行中のノードに障害が発生した場合に、他のノードがジョブを引き継ぐフェイルオーバ処理のため、ジョブの読み出し等に時間を要し、フェイルオーバ後にジョブを再開するまでに時間がかかる。
【０００８】
また、ハードディスク等の不揮発性の記憶媒体にジョブの全ての情報を格納すると、ジョブの実行状況を格納するための時間もかかる。さらに、ハードディスク等の不揮発性の記憶媒体に実行状況の格納を確認するまで、ノードが次の処理を開始できないため、ジョブの処理に時間を要する。
【０００９】
そこで、本発明の目的は、複数のノードを有するシステムのフェイルオーバ時に参照されるジョブの情報を高速に格納することができるストレージシステム及びストレージシステムの回復方法を提供することにある。
【００１０】
また、ジョブのデータ項目に応じて、ハードディスク等の不揮発性の記憶媒体、或いは、インメモリ等の揮発メモリへの書き込みを制御することで、ジョブ処理の高速化とフェイルオーバの高速化、高信頼化を図るストレージシステム及びストレージシステムの回復方法を提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、本発明のストレージシステムの一態様は、複数のノードを有し、複数のノードの構成情報を変更するジョブを実行するプライマリノードと、プライマリノードの障害時に、ジョブを引き継ぐセカンダリノードとを有し、プライマリノードとセカンダリノードは、ジョブを格納する揮発メモリと不揮発メモリとを有し、プライマリノードとセカンダリノードの何れかは、ジョブのデータ項目が、（A）情報が消失するとシステムの構成変更が失敗し内部状態が不正になるデータ項目と、（B）情報が消失してもシステムの構成変更は成功するが、GUIの表示が不正になるなど、許容できる不具合が生じるデータ項目、（C）情報が消失してもシステムの構成変更が成功し、不具合が生じないデータ項目に応じて、ジョブの情報を揮発メモリと不揮発メモリに選択的に格納する。
【発明の効果】
【００１２】
本発明によれば、フェイルオーバ時にセカンダリノードによって参照される、ジョブの情報の共有を高速に行うことができる。
【００１３】
また、ジョブ処理の高速化とフェイルオーバの高速化、高信頼化を図ることができる。
【図面の簡単な説明】
【００１４】
【図１】本実施例のシステム構成図の一例を示した図である。
【図２】本実施例のノードのハードウェアブロックの一例を示した図である。
【図３】本実施例のフェイルオーバ時の動作を示すフローチャートの一例を示した図である。
【図４】本実施例のJTR(Job Transaction Record)の構成情報と分類の一例を示す図である。
【図５】本実施例のJTRの保存動作を示す図である。
【図６】本実施例のJTRの保存動作を示す図である。
【図７】本実施例のJTRの保存動作を示す図である。
【図８】本実施例のフェイルオーバ時の動作シーケンスの一例を示した図である。
【図９】本実施例の全ノード障害時の動作シーケンスの一例を示した図である。
【図１０】本実施例のシステムの各ノード構成とジョブ情報の一例を示した図である。
【発明を実施するための形態】
【００１５】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１６】
以下、図面を参照して本発明の実施形態を説明する。以下の記載および図面は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略および簡略化がなされている。本発明は、他の種々の形態でも実施する事が可能である。特に限定しない限り、各構成要素は単数でも複数でも構わない。
【００１７】
以下の説明では、「テーブル」、「リスト」等の表現にて各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されていてもよい。識別情報について説明する際に、「識別情報」、「識別子」、「名」、「ＩＤ」、「番号」等の表現を用いるが、これらについてはお互いに置換が可能である。
【００１８】
同一あるいは同様な機能を有する構成要素が複数ある場合には、基本的に同一の符号を付して説明するが、機能が同じであっても機能を実現するための手段が異なる場合がある。
【００１９】
また、以下の説明では、プログラムを実行して行う処理を実行する場合がある。プログラムは、中央処理部であるプロセッサ（例えばＣＰＵ）によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）および／またはインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主体がプロセッサとされてもよい。
【００２０】
プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサと配布対象のプログラムを記憶する記憶資源を含み、プログラム配布サーバのプロセッサが配布対象のプログラムを他の計算機に配布してもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００２１】
＜用語の説明＞
Job（ジョブ）:複数のストレージノードにまたがったシステムの構成情報の設定を実現する処理単位。
Cluster Master Node (Primary):プライマリノードは、システム全体を管理するノードであって、システムにひとつ存在する。プライマリノードは、他ノードからのリクエストを受けてジョブを実行する。プライマリノードは、ジョブの開始時や終了時、エラー時またはジョブの状態が変わった時など、実行状態をJob Transaction Record(JTR)の形でSODBに保存する。
Cluster Master Node (Secondary):セカンダリノードは、Cluster Master Node(Primary)のスレーブノードの内の待機系ノードである。セカンダリノードは、Cluster Master Node(Primary)に障害が発生した場合、Cluster Master Node(Secondary)のうちのひとつがプライマリノードに昇格する。プライマリノードに昇格したノードはSODBからJTRを読み込んで、ジョブを再生成し、実行を再開する。
Cluster Slave: スレーブは、その他のスレーブノードである。本明細書では、スレーブノードと称する。
Job Transaction Record(JTR): ジョブの状態を表すSODB内に格納される情報。
Scale Out Data Base (SODB): 不揮発メモリに格納されるスケールアウトデータベース。
【００２２】
＜システム構成＞
まず、本発明の一実施形態に係るマルチノードストレージシステムについて説明する。
【００２３】
図１は、一実施形態に係るシステム構成図である。
複数のノード1a、1b、1cは、ネットワーク3を介して相互に接続されている。ノード1aは、Cluster Master Node (Primary：以下、プライマリノード）であり、システム全体を管理する。プライマリノード1aは、システムにひとつ存在し、他ノード2からのリクエストを受けてジョブを実行する。ジョブの開始時や終了時、エラー時またはジョブの状態が変わった時など、実行状態をJob Transaction Record(JTR)の形でSODB13に保存する。
【００２４】
Cluster Master Node (Secondary：以下、セカンダリノード)1bは、プライマリノード1aのスレーブノードの内の待機系ノードであって、プライマリノード1aに障害が発生した場合、セカンダリノードのうちのひとつがプライマリノードに昇格する。プライマリノードに昇格すると、SODB13からJTRを読み込んで、ジョブを再生成し、ジョブの実行を再開する。
【００２５】
Cluster Slave(スレーブノード)1cは、プライマリノード1a、セカンダリノード1b以外のシステム中のノードである。
【００２６】
プライマリノード1aは、ジョブ発行元ノード2からのジョブリクエストを受信し、受信したジョブを処理するJob Controller Process(ジョブコントローラプロセス)11a、ジョブコントローラプロセス11aのジョブの実行状態をメモリ14aに保存するSOMQ プロセス12a、ジョブコントローラプロセス11aのジョブの実行状態をHDDやSSD等の不揮発メモリ15aに保存するSODB プロセス13aを含む。ここで、SOMQ は、Scale Out Message Que（スケールアウトメッセージキュー)であり、SODBは、Scale Out Data Base（スケールアウトDB）である。
【００２７】
プライマリノード1aのメモリ14aとセカンダリノード1bのメモリ14bは、DRAMやSRAMの揮発メモリで構成される。メモリ14には、各ノード上で動作するクラスタ制御プログラムにより、同じJTRがSOMQに保存されることで、プライマリノード1aとセカンダリノード1b間でジョブを共有する。また、プライマリノード1aの不揮発メモリ15aとセカンダリノード1bの不揮発メモリ15bには、各ノード上で動作するクラスタ制御プログラムにより、同じJTRがSODBに保存されることで、プライマリノード1aとセカンダリノード1b間でジョブを共有する。
【００２８】
プライマリノード1aでは、ジョブコントローラプロセス11aのジョブの情報は、SOMQプロセス12aとSODBプロセス13aに送られ、SOMQプロセス12aがメモリ14aに、SODBプロセス13aが不揮発メモリ15aに格納できるように構成されている。また、セカンダリノード1bでは、ジョブコントローラプロセス11aのジョブの情報は、SOMQプロセス12bがSOMQプロセス12aから受信し、SODBプロセス13bがSODBプロセス13aから受信して、SOMQプロセス12bがメモリ14bに、SODBプロセス13bが不揮発メモリ15bに格納できるように構成されている。
【００２９】
セカンダリノード1bも、プライマリノード1a同様の構成を有する。プライマリノード1aに障害が発生した場合、セカンダリノードはプライマリノードに昇格し、プライマリノード1aのジョブコントローラプロセス11aが処理したジョブの実行状態をメモリ14に格納されたSOMQ或いは、不揮発メモリ15に格納されたSODBを参照して、処理を引き継ぐ。
【００３０】
図１には、３台のノードで構成される例を示したが、ノードの数は、これに限らず、例えば４台以上であても良い。
【００３１】
次に、ノード（ストレージ装置）1のハードウェア構成について説明する。
【００３２】
図２は、一実施形態に係るノード1（ストレージ装置）のシステムブロック図である。
ストレージ装置1は、図１のノード1a、1b等に相当し、サーバ等の計算機からのI/O要求を処理し、ドライブ204にデータを格納、或いは、ドライブ204からデータを読み出し、計算機に送る処理を行う。ドライブ204としては、NVMeドライブ204a、SASドライブ204b、SATAドライブ204c等、各種ドライブで構成される。ドライブ204は、ドライブタイプは適宜選択されても良い。
【００３３】
ノード1は、サーバ等の計算機と接続するネットワークI/F203と、一つ以上の中央処理部（CPU）201と、メモリ14と、これらを接続するバス205を有する。メモリ14は、ＳＲＡＭ、ＤＲＡＭの揮発メモリである。
【００３４】
メモリ14には、ジョブ発行元ノード2からのジョブリクエストを実行するジョブコントローラプロセス11、ジョブコントローラプロセス11のジョブの情報（例えば実行状態）を、メモリ14に保存するSOMQ (Scale Out Message Que:スケールアウトメッセージキュー)プロセス12、ジョブコントローラプロセス11のジョブの情報（例えば、実行状態）をHDDやSSD等の不揮発メモリ15に保存するSODB （Scale Out Data Base:スケールアウトDB）プロセス13、ノード障害時の処理を実行する障害処理205等の各種プログラムが保存されている。CPU201がメモリ14に格納されたプログラムを実行することで、各種機能を実現する。
【００３５】
また、メモリ14には、ジョブの状態を表すJTR（Job Transaction Record）を格納する領域含む。
【００３６】
メモリ14には、図示したプログラムの他、ノード1がストレージ装置として機能する各種プログラムが格納され、計算機にボリューム等の記憶領域を提供し、計算機からのIOリクエストに応じてデータの読み出しや書き込みが行われる。また、メモリ14には、ノード1が計算機に提供するボリュームとドライブ204との関係を示すストレージ構成テーブルを格納する他、IOリクエストに関するデータを一時的に記憶するキャッシュメモリとなるキャッシュメモリを有する。
【００３７】
＜フェイルオーバの動作概念＞
図３は、一実施形態に係るフェイルオーバ時の動作のフローチャートを示したものである。図３の処理は、図２の障害処理206のプログラム（障害処理プログラムとも呼ぶ）によって実行される。
【００３８】
システム内のプライマリノード1a以外のセカンダリノード1b内の障害処理プログラム206は、プライマリノード1aの障害を検出する（ステップS32）。
【００３９】
セカンダリノード1b内の障害処理プログラムがプライマリノードに昇格するよう制御する(ステップS33)。
【００４０】
セカンダリノード1bの障害処理プログラム206は、メモリ14に格納されているJTRからジョブを生成する(ステップS34)。ステップS35で、生成されたジョブの実行を再開する。
【００４１】
尚、図３に記載した各ステップは、障害処理プログラムはクラスタ制御プログラムの一部として実現することができる。
【００４２】
＜JTR情報＞
図４は、一実施形態に係るJTR(Job Transaction Record)の構成情報と分類を示す図である。JTRデータ項目41には、各ジョブに割り当てられ、ランダムで一意な値が設定されるJobID、ジョブの種別を示すジョブの種別、最後にジョブの状態が更新された時刻を示すジョブが更新された時刻、ジョブが操作したリソースのリストを示すジョブの操作対象リソースリスト、ジョブ実行中に発生したエラーの詳細情報を示すError情報、GUIに表示するジョブの状態を示すJobStatus、ジョブがどこまで実行したかを示す情報を示す実行位置を含む。これらのJTRデータ項目は、JTRの一部であって代表的な項目を例示しており、他のJTRデータ項目についても、本実施形態の考えを適用することができる。
【００４３】
本実施の形態では、図４に例示されたJTRデータ項目41の内、ジョブの内容により、次の（A）−（C）の三つに分類する。
【００４４】
（A）情報が消失するとシステムの構成変更が失敗し内部状態が不正になるもの。
この分類に属するJTRデータ項目は、SODBへ格納し、ジョブの実行状況を不揮発化するとともにSOMQでセカンダリノードと共有する。
【００４５】
（B）情報が消失してもシステムの構成変更は成功するが、GUIの表示が不正になるなど、許容できる不具合が生じるもの。
この分類に属するJTRデータ項目は、SOMQでセカンダリノードと共有する。プライマリノードは共有が成功したらジョブの実行を続ける。この場合、SODBへの書き込みはセカンダリノードが行う。
【００４６】
（C）情報が消失してもシステムの構成変更が成功し、不具合が生じないもの。
この分類に属するJTRデータ項目は、SOMQでセカンダリノードと共有する。SODBには書き込まない。
【００４７】
上記（A）に該当するJTRデータ項目は、「JobID」「Jobの種別」等、図４の（１）実行開始時に書き込みが必要となる列42に「〇」が付された項目と、（２）消失するとジョブが異常終了する列44に「〇」が付された項目である。（A）に該当するデータの内、列42の(1)に該当するデータは、ジョブの実行開始時にSOMQとSODBの双方でジョブの状況を格納し、列44の（2）に該当するデータは、データの更新時にSOMQとSODBの双方でジョブの状況を格納することで、プライマリノード1aとセカンダリノード1bの間でデータ共有される。
【００４８】
プライマリノード1aでは、SOMQプロセス12aがメモリ14a、SODBプロセス13aが不揮発メモリ15aにJTRを格納する。セカンダリノード1bでは、SOMQプロセス12bがメモリ14b、SODBプロセス13bが不揮発メモリ15bにJTRを格納する。
【００４９】
上記（B）に該当するJTRデータ項目は、「Jobが更新された時刻」「JobStatus」等、（３）消失してもジョブは、正常終了する列45に「〇」が付された項目である。列45の(3)に該当するデータは、SOMQでプライマリノードとセカンダリノード間で共有し、セカンダリノードがSODBに格納する。
プライマリノード1aでは、SOMQプロセス12aがメモリ14aにJTRを格納する。セカンダリノード1bでは、SOMQプロセス12bがメモリ14b、SODBプロセス13bが不揮発メモリ15bにJTRを格納する。
プライマリノード1aのSODBプロセス13aは不揮発メモリ15aにJTRを格納しない。
【００５０】
上記（C）に該当するJTRデータ項目は、「実行位置」等、（４）消失してもジョブの実行に影響がない列46に「〇」が付された項目である。列46の(4)に該当するデータSOMQでプライマリノードとセカンダリノード間で共有され、SODBには格納しない。
プライマリノード1aでは、SOMQプロセス12aがメモリ14aにJTRを格納する。セカンダリノード1bでは、SOMQプロセス12bがメモリ14bにJTRを格納する。プライマリノード1aのSODBプロセス13aとセカンダリノード1bのSODBプロセス13bは不揮発メモリ15bにJTRを格納しない。
【００５１】
このように、データ項目に応じて、プライマリノードとセカンダリノードにおいて、揮発メモリに格納されるSOMQ、不揮発メモリに格納されるSODBに選択的に格納する。
【００５２】
＜JTRの保存動作＞
図５は、図４で説明した（A）に該当するJTRデータ項目に関して、プライマリノード1aがSOMQ52とSOMB55にJTRを保存する動作を示す図である。即ち、図４に示したJTRデータ項目の内、（A）に該当するデータである（１）実行開始時に書き込みが必要なデータ項目と、（２）消失するとジョブが異常終了するデータ項目、に関するJTRの保存動作が示されている。
【００５３】
ジョブ発行元2からプライマリノード1aがジョブの実行通知を受領すると、SODB55を参照し、ジョブ51を生成する。生成したジョブは、処理１(511)、処理２(512)等、複数の処理を含む。プライマリノード1aのジョブコントローラプロセス11aは、これらのジョブ51の各処理を実行すると共に、処理の完了を含む情報をSOMQプロセス、SODBプロセスに送り、SOMQ52とSODB55にJTR54として格納する。これにより、ジョブの処理状況をプライマリノード1aとセカンダリノード1b間で、メモリ14と不揮発メモリ15を用いて共有する。セカンダリノード1bでのメモリ14b、不揮発メモリ15bへのJTRの格納は、図４で説明した通りである。
【００５４】
SOMQについては、プライマリノードの1aのSOMQプロセス12aによりプライマリノード1aのメモリ14aに、セカンダリノード1bのSOMQプロセス12aによりメモリ14bに、JTRがそれぞれ保存される。
【００５５】
SODBについては、プライマリノード1aのSODBプロセス13aにより不揮発メモリ15aに、セカンダリノード1bのSODBプロセス13bにより不揮発メモリ15bに、SODBとしてそれぞれ保存される。
【００５６】
このように、（１）実行開始時にJTRの保存が必要な全てのデータ項目と、（２）ジョブの状態が更新されたデータ項目は、SOMQ52とSODB55によってセカンダリノード1bと共有されることとなる。そのため、プライマリノード1aの障害を検知し、セカンダリノードからプライマリノードに昇格したノードのジョブコントローラプロセスは、SOMQ52に格納されたJTRを読み出すことにより、処理を引き継ぐことができる。SOMQ52は、揮発メモリ14に格納されているため、セカンダリノード1bは、不揮発メモリ15に格納されたSODB55からJTR54を読み出すよりも高速に読み出し、フェイルオーバを高速に実行することができる。
【００５７】
図６は、図４で説明した（B）に該当するJTRデータ項目に関して、SOMQ52とSODM55にJTRを保存する動作を示している。即ち、(3)消失してもジョブは、正常終了するJTRデータ項目については、SOMQとSODBは以下のように共有される。
【００５８】
SOMQについては、プライマリノードの1aのSOMQプロセス12aによりプライマリノード1aのメモリ14aに、セカンダリノード1bのSOMQプロセス12aによりメモリ14bに、JTRがそれぞれ保存される。
【００５９】
SODBについては、セカンダリノード1bのSODBプロセス13bにより不揮発メモリ15bに、SODBとして保存される。
【００６０】
SOMQ52にはプライマリノード1aもJTRを格納するが、SODB55にはセカンダリノード1bのみが格納するよう動作する。
【００６１】
不揮発メモリ15によって格納されるSODB55へのJTR54の書き込みは、揮発メモリ14によって格納されるSOMQ52へのJTR54の書き込みより時間を要するため、(3)消失しても正常終了するジョブのSODB55にJTR54の格納処理を、プライマリノード1aから解放し、セカンダリノード1bのみに行わせる。これにより、プライマリノード1aの処理負荷を減らすと共に、プライマリノード1aは、SODB55へのJTRの書き込み完了を待つことなく、ジョブ51に含まれる次の処理を行うことができ、ジョブ処理速度を向上させることができる。
【００６２】
図７は、図４で説明した（C）に該当するJTRデータ項目に関して、SOMQ52にJTRを保存する動作を示している。即ち、(4)消失してもジョブの実行に影響がないJTRデータ項目については、SOMQ52にJTRを格納し、SODB55にはJTRを格納しない。
【００６３】
ジョブの実行に影響がないJTRデータ項目は、仮に喪失しても、フェイルオーバ時にプライマリノードに昇格するノードが、ジョブ再開のため参照する必要がないためである。
【００６４】
この場合、SOMQ52によってのみデータ共有を図っているため、書き込み時間を要するSODB55へのJTRの書き込みを不要としている。
【００６５】
SOMQ52の格納は、プライマリノード1aのSOMQプロセス12aがメモリ14aに、セカンダリノード1bのSOMQプロセス12bがメモリ14bに、JTRをそれぞれ書き込むことによって、プライマリノード1aとセカンダリノード1b間でジョブに関する情報が共有される。
【００６６】
図５から図７に示したように、データ項目に応じて、プライマリノードとセカンダリノードにおいて、揮発メモリに格納されるSOMQ、不揮発メモリに格納されるSODBに選択的に格納する。
【００６７】
＜フェイルオーバ時の動作シーケンス＞
図８は、フェイルオーバ時の動作シーケンス図である。
図８の動作シーケンス図は、ジョブリクエスト元2、プライマリノード1aのジョブコントローラ11a、セカンダリノード1bのジョブコントローラ11b、SOMQ52、SODB55間のシーケンス図を示している。
【００６８】
まず、ジョブリクエスト元2は、SODB55に対しJTRの保存を行う（S801）。その後、プライマリノードのジョブコントローラ11aはジョブリクエスト元2からジョブの実行通知を受領する（S802）。
【００６９】
ジョブの実行通知を受領したジョブコントローラ11aは、SODB55を参照し（S803）、ジョブの生成を行う(S804)。ジョブコントローラ11aはジョブを生成すると、SOMQ52、SODB55を通してJTRをセカンダリノード1bと共有する（S805）。SOMQ52、SODB55を用いたJTRの共有については、図５から図８で説明した通りであり、図４で説明したデータ項目の（A）、（B）、（ｃ）に従って、格納先を選択する。
【００７０】
セカンダリノード1bと生成したジョブを共有すると、プライマリノードのジョブコントローラ11aは、ジョブに含まれる処理１を実行する（S806）。実行状況は、SOMQ52、SODB55を通してJTRをセカンダリノード1bと共有する（S805）。SOMQ52、SODB55を用いたJTRの共有については、図５から図８で説明した通りであり、図４で説明したデータ項目の（A）、（B）、（ｃ）に従って、格納先を選択する。
【００７１】
同様に、処理２についてもプライマリノード1aのジョブコントローラ11aが実行する（S808）。図８では、処理２の実行中にプライマリノード1aの障害をセカンダリノード1bが検出したことを示している（S809）。
【００７２】
障害を検出すると、プライマリノードのジョブコントローラの処理をセカンダリノードのジョブコントローラが引き継ぐため、セカンダリノードがプライマリノードに昇格する（S810)。
【００７３】
プライマリノードに昇格したセカンダリノードのジョブコントローラ11bは、共有されているSOMQ52を参照することで、ジョブの再生成を行い（S811）。再生成されたジョブの処理２を実行する（S812）。ジョブの処理を繰り返し実行し、最後の処理Nを実行（S813）すると、JTRをSODB55に保存し（S814)、ジョブコントローラ11bはジョブリクエスト元2に対し、ジョブの実行完了を通知する（S815）。ジョブリクエスト元2は、SODB55を参照し、ジョブの完了を確認する(S816)。
【００７４】
図９は、全ノード障害時の動作シーケンス図である。図８では、プライマリノード1aに障害が発生し、セカンダリノード1bが処理を引き継ぐ動作シーケンスであったのに対し、図９は、プライマリノードとセカンダリノードの双方に障害が発生した場合の動作シーケンスを示している。
【００７５】
図９のステップS901からステップS908は、図８のステップS801からステップS808と同様である。その後、プライマリノードとセカンダリノードでそれぞれ障害が発生する（S909、S910）。プライマリノードとセカンダリノードはそれぞれノードの再起動を行う（S911、S912）。セカンダリノードも障害が発生しているため、プライマリノードに昇格することができず、SOMQ52の情報が利用できないため、再起動後にプライマリノード1aのジョブコントローラ11aは、SODB55に格納されたJTRを参照し（S913）、ジョブの再生成を行う（S914)。再生成されたジョブから処理１を実行する。尚、ステップS913では、プライマリノード１aの不揮発メモリ15aに格納されているSODB55からジョブの状態を読み出す。SODB55には、実行位置を書き込めば、処理済みの処理1に続く、処理２を実行することができる(S915)。
【００７６】
ジョブコントローラ11aは、ジョブの処理を繰り返し実行し、最後の処理Nを実行（S916）すると、JTRをSODB55に保存し（S917)、ジョブリクエスト元2に対し、ジョブの実行完了を通知する（S918）。ジョブリクエスト元2は、SODB55を参照し、ジョブの完了を確認する(S919)。
【００７７】
本実施の形態によれば、図４のJTRデータ項目の種別に応じて、（A）情報が消失するとシステムの構成変更が失敗し内部状態が不正になるもの、（B）情報が消失してもシステムの構成変更は成功するが、GUIの表示が不正になるなど、許容できる不具合が生じるもの、（C）情報が消失してもシステムの構成変更が成功し、不具合が生じないものと分類し、その分類に応じて、SOMQ52、SODB55を用いたプライマリノードセカンダリノード間でジョブの共有を図っている。
【００７８】
このため、データ項目によっては、SOMQ52のみを用いてジョブの共有を行うことで共有処理の高速化を図ることができる。
【００７９】
また、データ項目によっては、SODB55へのJTRの書き込みをセカンダリノードに行わせることで、プライマリノードの処理負荷軽減と、SODB55へのジョブの処理完了の書き込み完了前に、次の処理を実行可能とすることで、ジョブの処理実行の高速化を図ることができる。
【００８０】
さらに、JTRデータ項目中、（A）情報が消失するとシステムの構成変更が失敗し内部状態が不正になるものについては、SODB55にJTRを書き込むため、全ノード障害時においても、システム再起動により、ジョブを再開することができる。
【００８１】
図１０は、本実施例のシステムの各ノード構成とジョブ情報の一例を示した図である。
図１０において、ジョブ情報（１）は、図４の（１）実行開始時に書き込みが必要なJTRデータ項目42に相当し、ジョブ情報（２）は、図４の（２）消失するとジョブが異常終了するJTRデータ項目44に相当し、ジョブ情報（３）は、図４の（３）消失してもジョブは正常終了するJTRデータ項目45に相当し、ジョブ情報（４）は、図４の（４）消失してもJobの実行に影響がないJTR項目データ46に相当する。図１０は、本実施の形態により、それぞれのJTR項目がSOMQ52とSODB55で、プライマリノード1aとセカンダリノード1bとで共有されている状態を示している。
【符号の説明】
【００８２】
１ａ：クラスタマスタプライマリ（プライマリノード）、
１ｂ：クラスタマスタセカンダリ(セカンダリノード)、
１ｃ：クラスタマスタスレーブ、
２：ジョブ発行元、
３：ネットワーク、
１１：ジョブコントローラ、
１２：ＳＯＭＱ、
１３：ＳＯＤＢ
１４：揮発メモリ、
１５：不揮発メモリ、
２０１：ＣＰＵ、
２０３：ネットワークインタフェース、
２０４ａ：ＮＶＭｅドライブ、
２０４ｂ：ＳＡＳドライブ、
２０４ｃ：ＳＡＴＡドライブ、
２０５：バス。
【図１】
2020135138.tif 000003
【図２】
2020135138.tif 000004
【図３】
2020135138.tif 000005
【図４】
2020135138.tif 000006
【図５】
2020135138.tif 000007
【図６】
2020135138.tif 000008
【図７】
2020135138.tif 000009
【図８】
2020135138.tif 000010
【図９】
2020135138.tif 000011
【図１０】
2020135138.tif 000012