(57)【要約】【課題】同一のデータをそれぞれ記憶する複数の情報処理装置を有する情報処理システムで死活監視のオーバーヘッドを減らすこと。【解決手段】グループテーブル１３がレプリカ共有ノードグループに属するサーバの識別子を記憶し、死活監視部１５がグループテーブル１３を参照してレプリカ共有ノードグループが同一のサーバだけを対象として死活監視を行う。また、データ分散表１１がハッシュ範囲毎に第１のレプリカ〜第３のレプリカをそれぞれ記憶するサーバの識別子を記憶し、グループ特定部１２がデータ分散表１１を参照してレプリカ共有ノードグループを生成し、グループテーブル１３に書込む。【選択図】図２
2014186383.tif 000002
【特許請求の範囲】
【請求項１】
同一のデータをそれぞれ記憶する複数の情報処理装置を有する情報処理システムにおいて、
前記複数の情報処理装置のいずれかは、
同一のデータを記憶する情報処理装置を含むグループごとに、各グループに含まれる情報処理装置の識別子を記憶するグループ記憶部と、
前記グループ記憶部が記憶する前記各グループに含まれる情報処理装置の識別子に基づき、自装置が所属するグループである所属グループに含まれる他の情報処理装置に対して監視を行う監視部と
を有することを特徴とする情報処理システム。
【請求項２】
前記各グループは、
同一のデータを記憶する情報処理装置のうち共通の情報処理装置を含む集合の和集合で定義されることを特徴とする請求項１記載の情報処理システム。
【請求項３】
前記情報処理装置はさらに、
同一データの名前にハッシュ関数を適用したハッシュ値の範囲に、前記同一のデータを記憶する情報処理装置の識別子を対応させて記憶するデータ分散記憶部と、
前記データ分散記憶部が記憶するハッシュ値の範囲と同一のデータを記憶する情報処理装置の識別子との対応関係に基づき、前記グループ記憶部が記憶する各グループに含まれる情報処理装置の識別子を生成する生成部と
を有することを特徴とする請求項２記載の情報処理システム。
【請求項４】
前記情報処理装置はさらに、
前記監視部が故障と判定した情報処理装置から復元されるデータである復元対象データの移動先の情報処理装置を前記所属グループから選択する選択部と、
前記選択部が選択した情報処理装置に前記リカバリ対象データの複製する複製部と
を有することを特徴とする請求項１〜３のいずれか１項に記載の情報処理システム。
【請求項５】
前記情報処理装置はさらに、
前記所属グループ内に他の情報処理装置よりも負荷が高い情報処理装置である高負荷情報処理装置があるかを判定する判定部と、
前記判定部が判定した高負荷情報処理装置が有するデータのうち、移動の対象となる移動対象データを決定するとともに、決定した前記移動対象データを移動する移動先の情報処理装置を前記所属グループから決定する決定部と、
前記決定部が前記移動先の情報処理装置として決定した情報処理装置に前記移動対象データを移動する移動部と
を有することを特徴とする請求項１〜４のいずれか１項に記載の情報処理システム。
【請求項６】
情報処理システムに含まれ、同一のデータをそれぞれ記憶する複数の情報処理装置のいずれかを制御する情報処理装置の制御プログラムにおいて、
前記情報処理装置に、
同一のデータを記憶する情報処理装置を含むグループごとに、各グループに含まれる情報処理装置の識別子を、前記情報処理装置が有するグループ記憶部に記憶させ、
前記グループ記憶部が記憶する各グループに含まれる情報処理装置の識別子に基づき、自装置が所属するグループである所属グループに含まれる他の情報処理装置に対して監視させることを特徴とする情報処理装置の制御プログラム。
【請求項７】
同一のデータをそれぞれ記憶する複数の情報処理装置を有する情報処理システムの制御方法において、
前記複数の情報処理装置のいずれかが、
同一のデータを記憶する情報処理装置を含むグループごとに、各グループに含まれる情報処理装置の識別子を、前記情報処理装置が有するグループ記憶部に記憶し、
前記グループ記憶部が記憶する各グループに含まれる情報処理装置の識別子に基づき、自装置が所属するグループである所属グループに含まれる他の情報処理装置に対して監視することを特徴とする情報処理システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理装置の制御プログラム及び情報処理システムの制御方法に関する。
【背景技術】
【０００２】
従来、分散ＫＶＳ（Key  Value  Store）に代表されるＮｏＳＱＬ（登録商標）など、複数のノード間でデータが多重化されて記憶される情報処理システムにおいては、各ノードが全ノードを対象として死活監視を行ってきた。
【０００３】
ここで、ノードとは、ＣＰＵ（Central  Processing  Unit）、メインメモリ、ディスク装置などを備えた情報処理装置であり、ノード間はネットワークで相互に接続される。また、死活監視とは、他のノードが正常に動作しているか否かを監視することである。また、情報処理システムは、分散ストレージシステムとして機能し、情報処理システムにおいて、各ノードはデータを分散して記憶するストレージ装置として機能する。
【０００４】
また、複数のノードを有し、各ノードがレプリカを記憶する分散データベースシステムにおいて、マスタノードがアライブメッセージを各ノードから受信して死活監視を行う従来技術がある（例えば、特許文献１参照。）。なお、レプリカとは、データの複製である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１２−５０４８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、マスタノードや各ノードが全ノードを対象として死活監視を行うと、死活監視によるオーバーヘッドが大きいという問題がある。例えば、レプリカを持ち合わないノード同士は、他のノードの障害を検知してもリカバリ処理などを行う必要はない。したがって、レプリカを持ち合わないノード同士で死活監視を行うことは、無駄な死活監視を行うことになる。
【０００７】
本発明は、１つの側面では、死活監視のオーバーヘッドを減らすことを目的とする。
【課題を解決するための手段】
【０００８】
本願の開示する情報処理システムは、同一のデータを複数の情報処理装置がそれぞれ記憶する。そして、前記複数の情報処理装置のいずれかは、同一のデータを記憶する情報処理装置を含むグループごとに、各グループに含まれる情報処理装置の識別子をグループ記憶部に記憶する。そして、その情報処理装置は、前記グループ記憶部が記憶する前記各グループに含まれる情報処理装置の識別子に基づき、自装置が所属するグループである所属グループに含まれる他の情報処理装置に対して監視を行う監視部を有する。
【発明の効果】
【０００９】
１実施態様によれば、死活監視のオーバーヘッドを減らすことができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例に係る情報処理システムによる死活監視を説明するための図である。
【図２】図２は、実施例に係る情報処理装置の機能構成を示すブロック図である。
【図３】図３は、データ分散表の一例を示す図である。
【図４】図４は、グループテーブルの一例を示す図である。
【図５】図５は、所属グループ記憶部の一例を示す図である。
【図６】図６は、ノード状態テーブルの一例を示す図である。
【図７】図７は、アクセス表の一例を示す図である。
【図８】図８は、ノードが故障したときのリカバリ処理の一例を示す図である。
【図９Ａ】図９Ａは、負荷均等化処理の一例を示す図（Ａ）である。
【図９Ｂ】図９Ｂは、負荷均等化処理の一例を示す図（Ｂ）である。
【図１０】図１０は、グループ特定部によるグループ特定処理のフローを示すフローチャートである。
【図１１】図１１は、死活監視部によるハートビート送信処理のフローを示すフローチャートである。
【図１２】図１２は、死活監視部による死活判断処理のフローを示すフローチャートである。
【図１３】図１３は、ノード選択部によるリカバリノード選択処理のフローを示すフローチャートである。
【図１４】図１４は、負荷均等化部による対象選択処理のフローを示すフローチャートである。
【図１５】図１５は、データ複製部によるデータ複製処理のフローを示すフローチャートである。
【図１６】図１６は、データ移動部によるデータ移動処理のフローを示すフローチャートである。
【図１７】図１７は、実施例に係る情報処理システムによるリカバリ処理の一例を示す図である。
【図１８】図１８は、実施例に係る情報処理装置のハードウェア構成を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する情報処理システム、情報処理装置の制御プログラム及び情報処理システムの制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１２】
まず、実施例に係る情報処理システムによる死活監視について説明する。図１は、実施例に係る情報処理システムによる死活監視を説明するための図である。図１に示すように、情報処理システム１００は、ノードとして動作するサーバＡ〜サーバＨを有する。
【００１３】
サーバＡは、データ0の第１の（１st）レプリカを有する。サーバＢは、データ0の第２の（２nd）レプリカを有し、データ1の第１のレプリカを有する。サーバＣは、データ0の第３の（３rd）レプリカを有し、データ1の第２のレプリカを有する。サーバＤは、データ1の第３のレプリカを有する。
【００１４】
サーバＥは、データ2の第１のレプリカを有する。サーバＦは、データ2の第２のレプリカを有し、データ3の第１のレプリカを有する。サーバＧは、データ2の第３のレプリカを有し、データ3の第２のレプリカを有する。サーバＨは、データ3の第３のレプリカを有する。
【００１５】
情報処理システム１００は、２つのレプリカ共有ノードグループに分けられる。ここで、レプリカ共有ノードグループとは、レプリカを持ち合っているノードの集合のうち共通のノードを含む集合の和集合である。
【００１６】
例えば、データ0のレプリカを持ち合っているノードの集合Ｘ＝｛サーバＡ，サーバＢ，サーバＣ｝であり、データ1のレプリカを持ち合っているノードの集合Ｙ＝｛サーバＢ，サーバＣ，サーバＤ｝である。そして、２つの集合Ｘ、ＹはサーバＢ、サーバＣが共通であるので、集合Ｘ、Ｙの和集合をとると、サーバＡ〜サーバＤを含む第１のレプリカ共有ノードグループが得られる。
【００１７】
同様に、データ2のレプリカを持ち合っているノードの集合Ｚ＝｛サーバＥ，サーバＦ，サーバＧ｝であり、データ3のレプリカを持ち合っているノードの集合Ｗ＝｛サーバＦ，サーバＧ，サーバＨ｝である。そして、２つの集合Ｚ、ＷはサーバＥ、サーバＦが共通であるので、集合Ｚ、Ｗの和集合をとると、サーバＥ〜サーバＨを含む第２のレプリカ共有ノードグループが得られる。
【００１８】
情報処理システム１００は、各レプリカ共有ノードグループ内で死活監視を行う。すなわち、サーバＡはサーバＢ〜サーバＤと死活監視を行い、サーバＢはサーバＡ、サーバＣ及びサーバＤと死活監視を行い、サーバＣはサーバＡ、サーバＢ及びサーバＤと死活監視を行い、サーバＤはサーバＡ〜サーバＣと死活監視を行う。
【００１９】
同様に、サーバＥはサーバＦ〜サーバＨと死活監視を行い、サーバＦはサーバＥ、サーバＧ及びサーバＨと死活監視を行い、サーバＧはサーバＥ、サーバＦ及びサーバＨと死活監視を行い、サーバＨはサーバＥ〜サーバＧと死活監視を行う。
【００２０】
このように、情報処理システム１００は、レプリカの持ち合いに基づいてサーバを２つのレプリカ共有ノードグループに分類し、レプリカ共有ノードグループ単位で死活監視を行うので、死活監視のオーバーヘッドを減らすことができる。
【００２１】
なお、ここでは説明の便宜上、２つのレプリカ共有ノードグループのみを示したが、情報処理システムは、任意の個数のレプリカ共有ノードグループを有することができる。また、ここでは各データが３つのノードに記憶される場合を示したが、情報処理システムは、データを任意の個数のノードに記憶することができる。さらに、レプリカの個数は、データ毎に異なってもよい。
【００２２】
次に、実施例に係る情報処理装置の機能構成について説明する。図２は、実施例に係る情報処理装置の機能構成を示すブロック図である。ここで、情報処理装置は、図１に示したサーバに対応する。
【００２３】
図２に示すように、情報処理装置１は、データ分散表１１と、グループ特定部１２と、グループテーブル１３と、所属グループ記憶部１４と、死活監視部１５とを有する。また、情報処理装置１は、ノード状態テーブル１６と、アクセス表１７と、ノード選択部１８と、データ複製部１９と、負荷均等化部２０と、データ移動部２１とを有する。
【００２４】
データ分散表１１は、ハッシュ範囲毎に第１のレプリカ〜第３のレプリカをそれぞれ記憶するサーバの識別子を記憶するテーブルである。図３は、データ分散表１１の一例を示す図である。ここで、ハッシュ範囲とは、データの名前にハッシュ関数を適用した値の範囲を示す。図３において、データの名前にハッシュ関数を適用した値が「０００」〜「ａａａ」の範囲にある場合には、データの第１のレプリカ〜第３のレプリカはそれぞれサーバＡ、サーバＢ、サーバＣに記憶される。
【００２５】
グループ特定部１２は、データ分散表１１を用いてレプリカ共有ノードグループを特定し、特定した結果をグループテーブル１３に格納する。グループ特定部１２は、レプリカを持ち合っているノードの集合のうち共通なノードを含む２つの集合の和集合を求めて新たにレプリカを持ち合っているノードの集合を１つとする処理を共通なノードがなくなるまで繰り返す。そして、レプリカを持ち合っているノードの集合間に共通なノードがなくなると、グループ特定部１２は、レプリカを持ち合っているノードの集合それぞれをレプリカ共有ノードグループとして特定する。
【００２６】
例えば、図３において、ハッシュ範囲が「０００〜ａａａ」であるノードの集合｛Ａ，Ｂ，Ｃ｝とハッシュ範囲が「ａａａ〜ｂｂｂ」であるノードの集合｛Ｂ，Ｃ，Ｄ｝は、共通なノード、ノードＣを有するので、新たなノード集合｛Ａ，Ｂ，Ｃ，Ｄ｝が作成される。そして、ノード集合｛Ａ，Ｂ，Ｃ，Ｄ｝は、共通なノードを有する他のノード集合がないので、レプリカ共有ノードグループとして特定される。同様に、ノード集合｛Ｅ，Ｆ，Ｇ，Ｈ｝が、レプリカ共有ノードグループとして特定される。なお、グループ特定部１２は、データ分散表１１が更新されると起動され、グループテーブル１３を更新する。
【００２７】
グループテーブル１３は、レプリカ共有ノードグループごとに、グループに含まれるノードの情報を記憶する。図４は、グループテーブル１３の一例を示す図である。図４に示すように、グループテーブル１３は、レプリカ共有ノードグループの識別子と、グループに含まれるノードの識別子とを対応付けて記憶する。例えば、識別子が「１」であるレプリカ共有ノードグループは、識別子がそれぞれ「Ａ」、「Ｂ」、「Ｃ」及び「Ｄ」であるサーバをノードとして含む。
【００２８】
所属グループ記憶部１４は、自ノードが所属するレプリカ共有ノードグループを記憶する。図５は、所属グループ記憶部１４の一例を示す図である。図５に示すように、所属グループ記憶部１４は、自ノードが所属するレプリカ共有ノードグループの識別子「１」を記憶する。
【００２９】
死活監視部１５は、グループテーブル１３及び所属グループ記憶部１４を用いて、自ノードが所属するレプリカ共有ノードグループに属する他のノードとの間で相互に死活監視を行い、監視結果をノード状態テーブル１６に格納する。死活監視部１５は、自ノードが所属するレプリカ共有ノードグループに属する他のノードとだけ死活監視を行うことによって、死活監視のオーバーヘッドを減らすことができる。
【００３０】
ノード状態テーブル１６は、ノードの状態などの情報をノード毎に記憶する。図６は、ノード状態テーブル１６の一例を示す図である。図６に示すように、ノード状態テーブル１６は、サーバの識別子と、サーバの状態とを対応させて記憶する。例えば、識別子が「Ａ」であるサーバは、状態が「正常」である。
【００３１】
アクセス表１７は、サーバ毎にアクセス数を記憶する。アクセス数は、サーバの負荷状態を判定するために用いられる。図７は、アクセス表１７の一例を示す図である。図７に示すように、アクセス表１７は、サーバの識別子とそのサーバへのアクセス数を対応させて記憶する。例えば、識別子が「Ａ」であるサーバは、アクセス数は「３０」である。
【００３２】
ノード選択部１８は、自ノードが所属するレプリカ共有ノードグループに属する他のノードが故障したときに、正常なノードの中で自ノードが最も若いレプリカを担当するデータについて、復元先のノードを選択する。ノード選択部１８は、ノード状態テーブル１６を参照して故障ノードを特定し、データ分散表１１、グループテーブル１３及びアクセス表１７を参照して復元先のノードを選択する。
【００３３】
ノード選択部１８は、復元先ノードを選択するときに、故障したノードと同じレプリカ共有ノードグループのノードを優先的に選択する。ノード選択部１８は、復元されるデータのレプリカを持たないノードで負荷が最低のノードをデータの復元先のノードとして選択する。ノード選択部１８は、復元されるデータのレプリカを持たないノードが故障したノードと同じレプリカ共有ノードグループにない場合には、ノード数が最小のレプリカ共有ノードグループから負荷が最低のノードを選択する。
【００３４】
データ複製部１９は、故障したノードが記憶していたデータのレプリカをノード選択部１８が選択したノードに複製する。また、データ複製部１９は、レプリカの複製を反映させるために全ノードのデータ分散表１１を更新する。
【００３５】
図８は、ノードが故障したときのリカバリ処理の一例を示す図である。図８は、サーバＨが故障した場合を示す。サーバＨはレプリカ共有ノードグループ「２」に属し、サーバＨが記憶するデータ3を記憶するノードの中でも若いレプリカを担当するノードはサーバＦである。また、レプリカ共有ノードグループ「２」に属するノードのうち、データ3を記憶していないノードはサーバＥだけである。
【００３６】
そこで、サーバＦのノード選択部１８は、データ3の復元先のノードとしてサーバＥを選択する。そして、サーバＦのデータ複製部１９は、リカバリするデータのレプリカをサーバＥに複製する。そして、サーバＦのデータ複製部１９は、データ分散表１１を更新し、データ3の第３のレプリカを記憶するノードをサーバＥとする。
【００３７】
負荷均等化部２０は、負荷が高いノードの有無をアクセス表１７を用いて判定し、負荷が高いノードがある場合に、負荷が高いノードが記憶するデータの１つを移動する移動先ノードを選択する。負荷均等化部２０は、アクセス数が所定の高負荷閾値を越えているノードを負荷が高いノードと判定し、移動元ノードとして選択する。負荷均等化部２０は、データ分散表１１、グループテーブル１３、ノード状態テーブル１６及びアクセス表１７を参照して移動先ノードを選択する。
【００３８】
すなわち、負荷均等化部２０は、移動元ノードとレプリカ共有ノードグループが同じノードのうち、移動されるデータのレプリカを持たないノードで負荷が低負荷閾値以下のノードをデータの移動先のノードとして選択する。負荷均等化部２０は、移動元ノードが属するレプリカ共有ノードグループに移動先ノードがない場合には、低負荷閾値以下のノードでその属するレプリカ共有ノードグループのノード数が最小のノードを選択する。もし、負荷が低付加閾値以下のノードがない場合には、負荷均等化部２０は、移動先ノードの選択を行わない。
【００３９】
データ移動部２１は、負荷均等化部２０により選択された移動元ノードの１つのデータを移動先ノードに移動する。また、データ移動部２１は、データの移動を反映させるために全ノードのデータ分散表１１を更新する。
【００４０】
図９Ａ及び図９Ｂは、負荷均等化処理の一例を示す図（Ａ）及び（Ｂ）である。図９Ａは、負荷均等化処理前の状態を示し、図９Ｂは、負荷均等化処理後の状況を示す。図９Ａでは、サーバＦがデータ2の第２のレプリカとデータ3の第２のレプリカを記憶し、負荷が高負荷閾値を越えて高い。一方、サーバＨは、データを記憶せず、負荷が低負荷閾値以下である。
【００４１】
そこで、負荷均等化部２０は、サーバＦを移動元ノードとして選択し、サーバＨを移動先ノードとして選択する。そして、データ移動部２１は、図９Ｂに示すように、データ3の第２のレプリカをサーバＦからサーバＨに移動し、データ分散表１１を更新する。
【００４２】
図９Ａと図９Ｂのデータ分散表１１を比較すると、データ3に対応するハッシュ範囲「ｃｃｃ〜ｄｄ」の第２のレプリカを記憶するノードがサーバＦからサーバＨに変更されている。この結果、サーバＥ、サーバＦ及びサーバＧを含むレプリカ共有ノードグループが、サーバＥ及びサーバＦを含むレプリカ共有ノードグループとサーバＧ及びサーバＨを含むレプリカ共有ノードグループに分割される。
【００４３】
次に、グループ特定部１２によるグループ特定処理のフローについて説明する。図１０は、グループ特定部１２によるグループ特定処理のフローを示すフローチャートである。図１０に示すように、グループ特定部１２は、データ分散表１１から、各スロットに現れるノードの集合を求める（ステップＳ１）。ここで、スロットとは、データ分散表１１の行を示す。
【００４４】
そして、グループ特定部１２は、各スロットに現れるノードの集合のうち、同一のノードを含む集合があるか否かを判定する（ステップＳ２）。その結果、同一のノードを含む集合がある場合には、グループ特定部１２は、同一のノードを含む集合の和集合を求め、元の集合と入れ替え（ステップＳ３）、ステップＳ２に戻る。一方、同一のノードを含む集合がない場合には、グループ特定部１２は、各集合をグループテーブルに登録し（ステップＳ４）、処理を終了する。
【００４５】
このように、グループ特定部１２がグループテーブル１３を作成することにより、死活監視部１５は、グループテーブル１３を用いてレプリカ共有ノードグループ内で死活監視を行うことができる。
【００４６】
次に、死活監視部１５による処理のフローについて説明する。図１１は、死活監視部１５によるハートビート送信処理のフローを示すフローチャートであり、図１２は、死活監視部１５による死活判断処理のフローを示すフローチャートである。ここで、ハートビートとは、ノードが正常に動作していることを外部に知らせるために送信する信号である。
【００４７】
図１１に示すように、ハートビート送信処理では、死活監視部１５は、一定時間待ち（ステップＳ１１）、レプリカ共有ノードグループが同一である全ノードにハートビートを送信する（ステップＳ１２）。そして、死活監視部１５は、ステップＳ１１に戻って処理を繰り返す。
【００４８】
また、死活判断処理では、図１２に示すように、死活監視部１５は、一定時間待ち（ステップ２１）、レプリカ共有ノードグループが同一でハートビートが来ていないノードがあるか否かを判定する（ステップＳ２２）。
【００４９】
その結果、レプリカ共有ノードグループが同一でハートビートが来ていないノードがない場合には、死活監視部１５は、ステップＳ２１に戻って、処理を繰り返す。一方、レプリカ共有ノードグループが同一でハートビートが来ていないノードがある場合には、死活監視部１５は、ハートビートが来ていないノードを故障ノードとしてノード状態テーブル１６に登録する（ステップＳ２３）。すなわち、死活監視部１５は、ハートビートが来ていないノードについてノード状態テーブル１６の状態を「異常」とする。
【００５０】
このように、死活監視部１５は、レプリカ共有ノードグループが同一であるノードだけを対象として死活監視を行うので、死活監視のオーバーヘッドを減らし、データアクセス性能を高めることができる。
【００５１】
次に、ノード選択部１８によるリカバリノード選択処理のフローについて説明する。図１３は、ノード選択部１８によるリカバリノード選択処理のフローを示すフローチャートである。図１３に示すように、ノード選択部１８は、ノード状態テーブル１６から故障ノードを選択する（ステップＳ３１）。
【００５２】
そして、ノード選択部１８は、故障ノードの持つスロットのハッシュ範囲の最も若いレプリカ担当が自ノードであるか否かを判定し（ステップＳ３２）、自ノードでない場合には、リカバリ担当ではないので、処理を終了する。ここで、故障ノードの持つスロットとは、故障ノードがデータを持つスロットである。
【００５３】
一方、故障ノードの持つスロットのハッシュ範囲の最も若いレプリカ担当が自ノードである場合には、ノード選択部１８は、自ノードが属するレプリカ共有ノードグループから同じレプリカを持たず負荷が最低のノードをデータの復元先として選択する（ステップＳ３３）。ここで、ノード選択部１８は、アクセス表１７を参照し、アクセス数が最も少ないサーバを負荷が最低のノードとして選択する。
【００５４】
そして、ノード選択部１８は、選択するノードがあるか否かを判定し（ステップＳ３４）、ある場合にはステップＳ３６に進む。一方、選択するノードがない場合には、ノード選択部１８は、ノード数最小のレプリカ共有ノードグループを求め、求めたグループ内の負荷が最低のノードを選択する（ステップＳ３５）。そして、ノード選択部１８は、選択したノードを復元先ノードとする（ステップＳ３６）。
【００５５】
このように、ノード選択部１８は、自ノードが属するレプリカ共有ノードグループから復元先ノードを優先的に選択することで、ノード故障時に死活監視オーバーヘッドの増加を抑制することができる。
【００５６】
次に、負荷均等化部２０による対象選択処理のフローについて説明する。図１４は、負荷均等化部２０による対象選択処理のフローを示すフローチャートである。図１４に示すように、負荷均等化部２０は、アクセス表１７から負荷を取得する（ステップＳ４１）。
【００５７】
そして、負荷均等化部２０は、取得した負荷が高負荷閾値を越えているか否かを判定し（ステップＳ４２）、高負荷閾値を越えていない場合には、ステップＳ４１に戻る。一方、高負荷閾値を越えている場合には、負荷均等化部２０は、自ノードを移動元ノードとして選択する（ステップＳ４３）。
【００５８】
そして、負荷均等化部２０は、自ノードが属するレプリカ共有ノードグループから負荷が低負荷閾値以下のノードを選択し（ステップＳ４４）、選択すべきノードがあるか否かを判定する（ステップＳ４５）。その結果、選択すべきノードがある場合には、負荷均等化部２０は、ステップＳ４８に移動する。
【００５９】
一方、選択すべきノードがない場合には、負荷均等化部２０は、負荷が低負荷閾値以下のノードで、属するレプリカ共有ノードグループのノード数が最小のノードを選択し（ステップＳ４６）、選択すべきノードがあるか否かを判定する（ステップＳ４７）。その結果、選択すべきノードがない場合には、移動先ノードが選択できなかったので、負荷均等化部２０は、ステップＳ４１に戻る。一方、選択すべきノードがある場合には、負荷均等化部２０は、選択したノードを移動先ノードとする（ステップＳ４８）。
【００６０】
このように、負荷均等化部２０は、移動元ノードが属するレプリカ共有ノードグループから移動先ノードを優先的に選択することで、負荷均等化時に死活監視オーバーヘッドの増加を抑制することができる。
【００６１】
次に、データ複製部１９によるデータ複製処理のフローについて説明する。図１５は、データ複製部１９によるデータ複製処理のフローを示すフローチャートである。図１５に示すように、データ複製部１９は、ノード選択部１８により選択されたノードに、データ分散表１１から求めたレプリカをコピーする（ステップＳ５１）。そして、データ複製部１９は、全ノードのデータ分散表１１を更新する（ステップＳ５２）。
【００６２】
このように、データ複製部１９は、ノード選択部１８により選択されたノードに、データ分散表１１から求めたレプリカをコピーすることで、故障したノードのデータを復元することができる。
【００６３】
次に、データ移動部２１によるデータ移動処理のフローについて説明する。図１６は、データ移動部２１によるデータ移動処理のフローを示すフローチャートである。図１６に示すように、データ移動部２１は、負荷均等化部２０により選択された移動元ノードのデータの一つを移動先ノードに移動する（ステップＳ６１）。そして、データ移動部２１は、全ノードのデータ分散表１１を更新する（ステップＳ６２）。
【００６４】
このように、データ移動部２１は、負荷均等化部２０により選択された移動元ノードのデータの一つを移動先ノードに移動することで、ノード間で負荷を均等化することができる。
【００６５】
次に、実施例に係る情報処理システム１００によるリカバリ処理の一例について説明する。図１７は、実施例に係る情報処理システム１００によるリカバリ処理の一例を示す図である。
【００６６】
データ分散表１１に示すように、ハッシュ範囲が「００〜ａａ」であるデータについては、サーバＡが第１のレプリカを記憶し、サーバＢが第２のレプリカを記憶し、サーバＣが第３のレプリカを記憶している。また、ハッシュ範囲が「ａａ〜ｂｂ」であるデータについては、サーバＢが第１のレプリカを記憶し、サーバＣが第２のレプリカを記憶し、サーバＤが第３のレプリカを記憶している。
【００６７】
したがって、グループテーブル１３に示すように、サーバＡ、サーバＢ、サーバＣ及びサーバＤは同一のレプリカ共有ノードグループ「１」に含まれる。また、所属グループ記憶部１４が示すように、各サーバの所属グループは「１」である。
【００６８】
また、アクセス表１７に示すように、サーバＡへのアクセス数は「３０」であり、サーバＢへのアクセス数は「２０」であり、サーバＣへのアクセス数は「１０」であり、サーバＤへのアクセス数は「１０」である。また、ノード状態テーブル１６に示すように、サーバＡ、サーバＢ、サーバＣ及びサーバＤの状態は「正常」である。
【００６９】
また、サーバＡは、サーバＢ、サーバＣ及びサーバＤへハートビートを送信する。同様に、サーバＢ、サーバＣ及びサーバＤは、レプリカ共有ノードグループが同一であり他のサーバにハートビートを送信する。
【００７０】
このような状態でサーバＡが故障したとすると、サーバＢ、サーバＣ及びサーバＤの死活監視部１５は、サーバＡの故障を検出する（ステップＳ７１〜ステップＳ７３）。そして、各サーバの死活監視部１５は、ノード状態テーブル１６を更新し、サーバＡの状態を「異常」に変更する。
【００７１】
そして、サーバＢは、同一グループの正常なサーバの中で、サーバＡが記憶する「データ００〜ａａ」について最も若い第２のレプリカを記憶しているため、サーバＢのノード選択部１８が復元先ノードとしてサーバＤを選択する（ステップＳ７４）。ここで、「データ００〜ａａ」とは、ハッシュ値が「００〜ａａ」であるデータである。
【００７２】
そして、サーバＢのデータ複製部１９が、「データ００〜ａａ」をサーバＤにコピーし（ステップＳ７５）、全ノードのデータ分散表１１を更新する（ステップＳ７６）。この結果、ハッシュ範囲「００〜ａａ」のデータについては、サーバＢが第１のレプリカを記憶し、サーバＤが第２のレプリカを記憶し、サーバＣが第３のレプリカを記憶する。
【００７３】
一方、サーバＣ及びサーバＤは、同一グループの正常なサーバの中で、サーバＡが記憶する「データ００〜ａａ」について最も若いレプリカを記憶していないので、サーバＣ及びサーバＤのノード選択部１８は復元先ノードを選択しない。
【００７４】
このように、サーバＡが故障すると、サーバＢがリカバリ処理を行うことにより、サーバＡが記憶していたデータを情報処理システム１００内で回復することができる。
【００７５】
上述してきたように、実施例では、グループテーブル１３がレプリカ共有ノードグループに属するサーバの識別子を記憶し、死活監視部１５がグループテーブル１３を参照してレプリカ共有ノードグループが同一のサーバだけを対象として死活監視を行う。したがって、情報処理システム１００は、死活監視のオーバーヘッドを減らすことができ、データアクセス性能を高めることができる。
【００７６】
また、実施例では、データ分散表１１がハッシュ範囲毎に第１のレプリカ〜第３のレプリカをそれぞれ記憶するサーバの識別子を記憶し、グループ特定部１２がデータ分散表１１を参照してレプリカ共有ノードグループを生成し、グループテーブル１３に書込む。したがって、情報処理装置１は、グループテーブル１３を自動的に作成することができ、システム管理者の負担を軽減することができる。
【００７７】
また、実施例では、いずれかのサーバが故障したときに、ノード選択部１８がデータの復元先のサーバをレプリカ共有ノードグループが故障サーバと同一であるグループから優先的に選択する。したがって、情報処理システム１００は、サーバが故障したときのリカバリ処理で死活監視オーバーヘッドが増加することを抑制できる。
【００７８】
また、実施例では、いずれかのサーバの負荷が高いときに、負荷均等化部２０がデータの移動先のサーバをレプリカ共有ノードグループが負荷が高いサーバと同一であるグループから優先的に選択する。したがって、情報処理システム１００は、負荷均等化処理で死活監視オーバーヘッドが増加することを抑制できる。
【００７９】
また、実施例では、情報処理装置について説明したが、情報処理装置が有する機能構成をソフトウェアによって実現することで、同様の機能を有し情報処理装置を制御する制御プログラムを得ることができる。そこで、実施例に係る情報処理装置のハードウェア構成について説明する。
【００８０】
図１８は、実施例に係る情報処理装置のハードウェア構成を示す図である。図１８に示すように、情報処理装置２００は、メインメモリ２１０と、ＣＰＵ２２０と、ＬＡＮインタフェース２３０と、ＨＤＤ２４０と、スーパーＩＯ２５０と、ＤＶＩ（Digital  Visual  Interface）２６０と、ＯＤＤ（Optical  Disk  Drive）２７０とを有する。
【００８１】
メインメモリ２１０は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ２２０は、メインメモリ２１０からプログラムを読み出して実行する中央処理装置である。ＣＰＵ２２０は、メモリコントローラを有するチップセットを含む。
【００８２】
ＬＡＮインタフェース２３０は、情報処理装置２００をＬＡＮ経由で他の情報処理装置に接続するためのインタフェースである。ＨＤＤ２４０は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ２５０は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ２６０は、液晶表示装置を接続するインタフェースであり、ＯＤＤ２７０は、ＤＶＤの読み書きを行う装置である。
【００８３】
ＬＡＮインタフェース２３０は、ＰＣＩエクスプレスによりＣＰＵ２２０に接続され、ＨＤＤ２４０及びＯＤＤ２７０は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ２２０に接続される。スーパーＩＯ２５０は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ２２０に接続される。
【００８４】
そして、情報処理装置２００において実行される制御プログラムは、ＤＶＤに記憶され、ＯＤＤドライブ２７０によってＤＶＤから読み出されて情報処理装置２００にインストールされる。あるいは、制御プログラムは、ＬＡＮインタフェース２３０を介して接続された他の情報処理システムのデータベースなどに記憶され、これらのデータベースから読み出されて情報巣処理装置２００にインストールされる。そして、インストールされた制御プログラムは、ＨＤＤ２４０に記憶され、メインメモリ２１０に読み出されてＣＰＵ２２０によって実行される。
【００８５】
なお、本実施例では、レプリカ共有ノードグループ毎に死活監視を行う場合について説明したが、本発明はこれに限定されるものではなく、例えば、スロット毎にサーバをグループ分けし、グループ内で死活監視を行う場合にも同様に適用することができる。
【００８６】
すなわち、図３に示したデータ分散表１１の例では、サーバＡ〜Ｈは、｛Ａ，Ｂ，Ｃ｝、｛Ｂ，Ｃ，Ｄ｝、｛Ｅ，Ｆ，Ｇ｝、｛Ｆ、Ｇ、Ｈ｝の４つのグループに分けられる。そして、各サーバは、グループ内で死活監視を行う。例えば、サーバＡは、１つのグループだけに属し、サーバＢ及びサーバＣと死活監視を行う。一方、サーバＢは、２つのグループに属するため、サーバＡ及びサーバＣと死活監視を行うとともにサーバＤとも死活監視を行う。
【符号の説明】
【００８７】
１    情報処理装置
１１    データ分散表
１２    グループ特定部
１３    グループテーブル
１４    所属グループ記憶部
１５    死活監視部
１６    ノード状態テーブル
１７    アクセス表
１８    ノード選択部
１９    データ複製部
２０    負荷均等化部
２１    データ移動部
１００    情報処理システム
２００    情報処理装置
２１０    メインメモリ
２２０    ＣＰＵ
２３０    ＬＡＮインタフェース
２４０    ＨＤＤ
２５０    スーパーＩＯ
２６０    ＤＶＩ
２７０    ＯＤＤ
【図１】
2014186383.tif 000003
【図２】
2014186383.tif 000004
【図３】
2014186383.tif 000005
【図４】
2014186383.tif 000006
【図５】
2014186383.tif 000007
【図６】
2014186383.tif 000008
【図７】
2014186383.tif 000009
【図８】
2014186383.tif 000010
【図９Ａ】
2014186383.tif 000011
【図９Ｂ】
2014186383.tif 000012
【図１０】
2014186383.tif 000013
【図１１】
2014186383.tif 000014
【図１２】
2014186383.tif 000015
【図１３】
2014186383.tif 000016
【図１４】
2014186383.tif 000017
【図１５】
2014186383.tif 000018
【図１６】
2014186383.tif 000019
【図１７】
2014186383.tif 000020
【図１８】
2014186383.tif 000021