(57)【要約】【課題】分散ストレージを構成する各ストレージ装置が、分散ストレージが対象とするファイル識別子空間のうちで分担する範囲を決定するにあたって、より効果的な分担範囲の決定を行うことができるストレージ装置を提供すること。【解決手段】ストレージ装置のファイル記憶部１５は、分散ストレージシステムが対象とするファイル識別子空間のうちで自ノードが分担する分担範囲に含まれるファイル識別子を持つファイルを格納する。空間幅決定部１１は、自ノードの持つ重みと、隣接ノードの持つ重みとから、相対的な空間幅を決定する。空間割当制御部１２は、自ノードのアドレスに所定のハッシュ関数を適用して、ファイル識別子空間における第１の基準位置を求め、同様に、隣接ノードのアドレスから第２の基準位置を求める、相対的な空間幅に基づいて、第１の基準位置から第２の基準位置までの範囲内について分担する分担範囲を決定する。【選択図】    図１
2004252663.tif 000002
【特許請求の範囲】
【請求項１】
分散ストレージシステムの構成に用いられるストレージ装置であって、
前記分散ストレージシステムが対象とする識別子空間のうちの分担範囲に含まれる識別子を持つデータを格納するための手段と、
前記識別子空間に割り当てられた、前記分担範囲を決定する基準となる基準位置を記憶する第１の記憶手段と、
前記分担範囲を決定する際に考慮される重みを記憶する第２の記憶手段と、
前記第２の記憶手段に記憶された重みと、前記識別子空間において前記分担範囲に隣接する範囲を分担する隣接ストレージ装置に係る重みとに基づいて、該隣接ストレージ装置とで前記識別子空間を分担する場合における相対的な空間幅を決定する第１の決定手段と、
前記第１の決定手段により決定された前記相対的な空間幅に基づいて、前記識別子空間における前記第１の記憶手段に記憶された基準位置から前記隣接ストレージ装置に係る基準位置までの範囲内について分担する分担範囲を決定する第２の決定手段とを備えたことを特徴とするストレージ装置。
【請求項２】
前記第１の決定手段は、前記第２の記憶手段に記憶された重みと、前記隣接ストレージ装置に係る重みとを加算し、これによって得られた値で前記第２の記憶手段に記憶された重みを除した値を、前記相対的な空間幅とすることを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記第２の決定手段は、前記第１の記憶手段に記憶された前記基準位置を示す値に対して前記相対的な空間幅を乗じて得た値と、前記隣接ストレージ装置に係る前記基準位置を示す値に対して前記相対的な空間幅を１から減じた値を乗じて得た値とを、加算し、これによって得られた値が示す位置と、前記第１の記憶手段に記憶された前記基準位置との間の空間を、前記基準位置間の範囲内について分担する分担範囲とすることを特徴とする請求項２に記載のストレージ装置。
【請求項４】
前記隣接ストレージ装置として、第１の隣接ストレージ装置と第２の隣接ストレージ装置の２つが存在する場合には、該第１の隣接ストレージ装置について前記第１の決定手段による前記決定及び前記第２の決定手段による前記決定を行って、第１の分担範囲を決定するとともに、該第２の隣接ストレージ装置について前記第１の決定手段による前記決定及び前記第２の決定手段による前記決定を行って、第２の分担範囲を決定し、該第１の分担範囲と該第２の分担範囲とを包含する範囲を、求めるべき全分担範囲とすることを特徴とする請求項１に記載のストレージ装置。
【請求項５】
前記隣接ストレージ装置として、唯一の隣接ストレージ装置のみが存在する場合には、該隣接ストレージ装置について前記第１の決定手段による前記決定及び前記第２の決定手段による前記決定を行って、第１の分担範囲を決定するとともに、前記第１の記憶手段に記憶された前記基準位置と、前記識別子空間の両端部のうち前記第１の記憶手段に記憶された前記基準位置に近い方の端部の位置との間の空間を、第２の分担範囲として決定し、該第１の分担範囲と該第２の分担範囲とを包含する範囲を、求めるべき全分担範囲とすることを特徴とする請求項１に記載のストレージ装置。
【請求項６】
前記分散ストレージシステムを構成する他のストレージ装置との通信に用いるために割り当てられたアドレスを記憶する第３の記憶手段を更に備え、
前記アドレスに対して所定のハッシュ関数を適用して得られる値を、前記基準位置を示す値とすることを特徴とする請求項１に記載のストレージ装置。
【請求項７】
前記隣接ストレージ装置に係るアドレスに対して前記所定のハッシュ関数を適用して得られる値を、前記隣接ストレージ装置に係る前記基準位置を示す値とすることを特徴とする請求項６に記載のストレージ装置。
【請求項８】
前記分散ストレージシステムを構成する他の全部又は一部のストレージ装置に割り当てられたアドレスを示す情報を取得するための取得手段と、
前記取得手段により取得された前記他のストレージ装置のアドレスを記憶する第４の記憶手段とを更に備えたことを特徴とする請求項６または７に記載のストレージ装置。
【請求項９】
前記隣接ストレージ装置に係るアドレス、及び前記第３の記憶手段に記憶された前記アドレスに対して所定のハッシュ関数を適用して得られる値に、１，２，４，８，…，２（ｂ−１）（ｂは予め定められた整数）をそれぞれ加えた値に相当する識別子を担当する前記他のストレージ装置にそれぞれ割り当てられた前記アドレスを、前記取得手段により予め取得し、前記第４の記憶手段に記憶しておくことを特徴とする請求項８に記載のストレージ装置。
【請求項１０】
前記アドレスは、ＩＰアドレスであることを特徴とする請求項６ないし９のいずれか１項に記載のストレージ装置。
【請求項１１】
１台の前記ストレージ装置を複数の仮想ノードに対応させ、各仮想ノードに相異なる分担範囲を分担させるものとして、個々の仮想ノードの分担範囲を、前記第１及び第２の決定手段によりそれぞれ決定することを特徴とする請求項１ないし１０のいずれか１項記載のストレージ装置。
【請求項１２】
前記ストレージ装置のアドレスに当該仮想ノードの識別情報を多重化し、これに対して所定のハッシュ関数を適用して得られる値を、当該仮想ノードの前記基準位置を示す値とすることを特徴とする請求項１１に記載のストレージ装置。
【請求項１３】
各仮想ノードごとに重みを付与することを特徴とする請求項１１または１２に記載のストレージ装置。
【請求項１４】
全仮想ノードについて共通の重みを付与することを特徴とする請求項１１または１２に記載のストレージ装置。
【請求項１５】
前記識別子空間において前記第１の記憶手段に記憶された基準位置に対して最も近い基準位置を持つ他のストレージ装置を、前記隣接ストレージ装置とすることを特徴とする請求項１ないし１４のいずれか１項に記載のストレージ装置。
【請求項１６】
前記識別子空間において前記第１の記憶手段に記憶された基準位置に対してｎ番目（ｎは予め定められた２以上の整数）に近い基準位置を持つ他のストレージ装置を、前記隣接ストレージ装置とみなして、前記第１の決定手段による前記決定及び前記第２の決定手段による前記決定を行うことを特徴とする請求項１ないし１４のいずれか１項に記載のストレージ装置。
【請求項１７】
前記データは、ファイル又はファイルのブロックであることを特徴とする請求項１ないし１５のいずれか１項に記載のストレージ装置。
【請求項１８】
分散ストレージシステムの構成に用いられるストレージ装置であって、
前記分散ストレージシステムが対象とする識別子空間のうちで自装置が分担する分担範囲に含まれる識別子を持つデータを格納するための手段と、
自装置に付与された重みと、前記識別子空間における自装置の分担範囲に隣接する範囲を分担する隣接ストレージ装置に付与された重みとに基づいて、自装置と該隣接ストレージ装置とで前記識別子空間を分担する場合において自装置が分担する相対的な空間幅を決定する第１の決定手段と、
前記第１の決定手段により決定された前記相対的な空間幅に基づいて、自装置に予め割り当てられた前記識別子空間における基準位置から前記隣接ストレージ装置に予め割り当てられた前記識別子空間における基準位置までの範囲内について自装置が分担する分担範囲を決定する第２の決定手段とを備えたことを特徴とするストレージ装置。
【請求項１９】
分散ストレージシステムの構成に用いられ、該分散ストレージシステムが対象とする識別子空間のうちの分担範囲に含まれる識別子を持つデータを格納するストレージ装置における分担範囲決定方法であって、
前記識別子空間に割り当てられた、前記分担範囲を決定する基準となる基準位置を、第１の記憶手段に記憶するステップと、
前記分担範囲を決定する際に考慮される重みを、第２の記憶手段に記憶するステップと、
前記第２の記憶手段に記憶された重みと、前記識別子空間において前記分担範囲に隣接する範囲を分担する隣接ストレージ装置に係る重みとに基づいて、該隣接ストレージ装置とで前記識別子空間を分担する場合における相対的な空間幅を決定する第１の決定ステップと、
前記第１のステップ手段により決定された前記相対的な空間幅に基づいて、前記識別子空間における前記第１の記憶手段に記憶された基準位置から前記隣接ストレージ装置に係る基準位置までの範囲内について分担する分担範囲を決定する第２の決定ステップとを有することを特徴とする分担範囲決定方法。
【請求項２０】
分散ストレージシステムの構成に用いられるストレージ装置としてコンピュータを機能させるためのプログラムであって、
前記分散ストレージシステムが対象とする識別子空間のうちの分担範囲に含まれる識別子を持つデータを格納するための機能と、
前記識別子空間に割り当てられた、前記分担範囲を決定する基準となる基準位置を記憶する第１の記憶機能と、
前記分担範囲を決定する際に考慮される重みを記憶する第２の記憶機能と、
前記第２の記憶機能に記憶された重みと、前記識別子空間において前記分担範囲に隣接する範囲を分担する隣接ストレージ装置に係る重みとに基づいて、該隣接ストレージ装置とで前記識別子空間を分担する場合における相対的な空間幅を決定する第１の決定機能と、
前記第１の決定機能により決定された前記相対的な空間幅に基づいて、前記識別子空間における前記第１の記憶機能に記憶された基準位置から前記隣接ストレージ装置に係る基準位置までの範囲内について分担する分担範囲を決定する第２の決定機能とを実現させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、分散ストレージシステムの構成に用いられるストレージ装置、分散ストレージシステムが対象とする識別子空間のうちで自装置が分担する分担範囲を決定するための分担範囲決定方法及びプログラムに関する。
【０００２】
【従来の技術】
近年、ネットワーク上に分散配置された計算機で処理を分担するグリッドコンピューティングや、災害への対応などへの要求から、広域ネットワークにストレージを多数分散配置して一つの仮想的なストレージを実現する、という分散ストレージシステムが注目されている。
【０００３】
このようなシステムでは、システムを構成する各ストレージノードが増設や故障などによって頻繁に増減するため、ファイルシステムまたはファイルを手動で個別にストレージに割り当てるのは非現実的である。また、集中制御を行なうサーバを設けてファイルのストレージノードへの割り当てを集中管理する方式には、そのサーバの障害発生や負荷集中がシステム全体に影響するという問題がある。そのため、ファイルのストレージノードへの自動的な割り当てを、集中制御なしにどうやって分散して行なうかが問題とされていた。
【０００４】
この問題を解決するため、非特許文献１や非特許文献２のような研究的な分散ストレージシステムでは、ストレージノードのアドレスにハッシュ関数を適用してノードＩＤを決めることによって、ストレージノードをファイルＩＤと同じ空間にマッピングし、当該ファイルの持つファイルＩＤに最も近いノードＩＤを持つストレージノードに、当該ファイルを割り当てている。
【０００５】
この方式では、ファイルをどのストレージノードに格納するかは、他のストレージノードのノードＩＤのリストさえあれば、一つのストレージノード内での計算で決定できる。そのため、ファイルの割り当てを集中制御するサーバが不要になるほか、ファイルの割り当てをファイル一つ一つについてストレージノード間で個別に調整する必要もなくなる。よって、ストレージノードの増減の際にのみストレージノードのアドレスを他のストレージノードへ通知すればよく、ストレージノード間の通信量が減るとともに処理の並列性が向上する。
【０００６】
ストレージノードが追加された場合には、追加されたストレージノードとハッシュ空間上で隣接するストレージノードとの中間点で空間の再分割を行ない、以前からあったストレージノードの担当していた空間の一部を新しいストレージノードが引き継いで担当する。逆にストレージノードがなくなる場合には、なくなるストレージノードが担当している空間を分割して両隣のストレージノードに追加分担してもらう。
【０００７】
特定のストレージノードにファイルが集中しないよう、ファイルＩＤはファイルＩＤ空間上に一様に分散させる必要があるため、ハッシュ関数を用いてファイルＩＤをつけるのが一般的である。ハッシュ関数の引数としては、ファイル名を使う場合や、ファイルの中身のデータを使う場合などがある。
【０００８】
ファイルは、ＣＦＳのようにブロック単位に分割してブロックごとにストレージノードに配置してもよいし、ＣＡＮのようにファイル全体をまとめてストレージノードに配置してもよい。
【０００９】
【非特許文献１】
ＣＦＳ（Ｗｉｄｅ−ａｒｅａ  ｃｏｏｐｅｒａｔｉｖｅ  ｓｔｏｒａｇｅ  ｗｉｔｈ  ＣＦＳ，  Ｆｒａｎｋ  Ｄａｂｅｋ，  Ｍ．  Ｆｒａｎｓ  Ｋａａｓｈｏｅｋ，  Ｄａｖｉｄ  Ｋａｒｇｅｒ，  Ｒｏｂｅｒｔ  Ｍｏｒｒｉｓ，  ａｎｄ  Ｉｏｎ  Ｓｔｏｉｃａ，  １８ｔｈ  ＡＣＭ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍｓ  Ｐｒｉｎｃｉｐｌｅｓ  （ＳＯＳＰ  ´０１），  Ｏｃｔｏｂｅｒ  ２００１）
【００１０】
【非特許文献２】
ＣＡＮ（Ａ  Ｓｃａｌａｂｌｅ  Ｃｏｎｔｅｎｔ−Ａｄｄｒｅｓｓａｂｌｅ  Ｎｅｔｗｏｒｋ，  Ｓｙｌｖｉａ  Ｒａｔｎａｓａｍｙ，  Ｐａｕｌ  Ｆｒａｎｃｉｓ，  Ｍａｒｋ  Ｈａｎｄｌｅｙ，  Ｒｉｃｈａｒｄ  Ｋａｒｐ  ａｎｄ  Ｓｃｏｔｔ  Ｓｈｅｎｋｅｒ，  ＡＣＭ  ＳＩＧＣＯＭＭ  ２００１）
【００１１】
【発明が解決しようとする課題】
しかし、このようなハッシュによるファイルのストレージノードへの割り当てでは、個々のストレージノードに割り当てられる空間の大きさの期待値が全ストレージノードで均等となる。このため、記憶容量・演算能力・回線速度などがストレージノードごとに異なる場合に対応できない。これによって、容量の大きなストレージノードで容量が余っているのに、容量の小さなストレージノードでの容量不足が生じ、システム全体としてファイルの保存ができなくなったり、演算能力の低いストレージノードにも能力の高いストレージノードと同じ量のＩ／Ｏが要求されて応答速度が低下したりする、という問題が生じる。分散ストレージシステムを研究レベルを超えて実用に供する際には、この点が障害となる。
【００１２】
ＣＦＳでは、この問題を回避するため、容量の大きなストレージノードを、仮想ノードと呼ばれる複数のストレージノードに仮想的に対応させることを提案している。確かに、容量の大きなストレージノードが容量の小さなストレージノードのたとえば数倍程度であれば、大きなストレージノードを数個に分割すればよい。しかし、ストレージノード間で容量が大きく異なる場合、例えば、容量の大きいストレージノードが容量が小さいストレージノードの数千倍の容量を持つ場合は、容量の大きなストレージノードを数千個の仮想ノードに分割する必要があり、仮想ノードの管理オーバーへッドが問題となる。また、ディスク技術の進歩などによってストレージノードの平均的な容量が変化した場合に、仮想ノードの単位をどう調整するかも問題となる。したがって、仮想ノード単体では容量の多様性への対応が不十分である。
【００１３】
なお、ここでは、ファイル全体をまとめてストレージノードに配置した分散ストレージを中心に述べたが、ファイルをブロック単位に分割してブロックごとにストレージノードに配置した分散ストレージについても同様の問題がある（ファイル名とブロック番号との組をブロックの名前として管理する場合を考えれば同様である）。
【００１４】
本発明は、上記事情を考慮してなされたもので、分散ストレージシステムを構成する各ストレージ装置が、該分散ストレージシステムが対象とする識別子空間のうちで分担する分担範囲を決定するにあたって、より効果的な分担範囲の決定を行うことができるストレージ装置、分担範囲決定方法及びプログラムを提供することを目的とする。
【００１５】
【課題を解決するための手段】
本発明は、分散ストレージシステムの構成に用いられるストレージ装置であって、前記分散ストレージシステムが対象とする識別子空間のうちの分担範囲に含まれる識別子を持つデータを格納するための手段と、前記識別子空間に割り当てられた、前記分担範囲を決定する基準となる基準位置を記憶する第１の記憶手段と、前記分担範囲を決定する際に考慮される重みを記憶する第２の記憶手段と、前記第２の記憶手段に記憶された重みと、前記識別子空間において前記分担範囲に隣接する範囲を分担する隣接ストレージ装置に係る重みとに基づいて、該隣接ストレージ装置とで前記識別子空間を分担する場合における相対的な空間幅を決定する第１の決定手段と、前記第１の決定手段により決定された前記相対的な空間幅に基づいて、前記識別子空間における前記第１の記憶手段に記憶された基準位置から前記隣接ストレージ装置に係る基準位置までの範囲内について分担する分担範囲を決定する第２の決定手段とを備えたことを特徴とする。
【００１６】
また、本発明は、分散ストレージシステムの構成に用いられるストレージ装置であって、前記分散ストレージシステムが対象とする識別子空間のうちで自装置が分担する分担範囲に含まれる識別子を持つデータを格納するための手段と、自装置に付与された重みと、前記識別子空間における自装置の分担範囲に隣接する範囲を分担する隣接ストレージ装置に付与された重みとに基づいて、自装置と該隣接ストレージ装置とで前記識別子空間を分担する場合において自装置が分担する相対的な空間幅を決定する第１の決定手段と、前記第１の決定手段により決定された前記相対的な空間幅に基づいて、自装置に予め割り当てられた前記識別子空間における基準位置から前記隣接ストレージ装置に予め割り当てられた前記識別子空間における基準位置までの範囲内について自装置が分担する分担範囲を決定する第２の決定手段とを備えたことを特徴とする。
【００１７】
本発明では、記憶容量・演算能力・回線速度などをもとにストレージ装置の重みを決め、その重みに応じた空間割り当てを行なう。例えば、自装置と隣接ストレージ装置との重みの比に比例した幅になるように、自ノードと隣接ストレージ装置との間の空間を二つに分割する。これによって、重みに比例等した幅の空間をストレージ装置に割り当てることができる。
【００１８】
好ましくは、１台の前記ストレージ装置を複数の仮想ノードに対応させ、各仮想ノードに相異なる分担範囲を分担させるものとして、個々の仮想ノードの分担範囲を、前記第１及び第２の決定手段によりそれぞれ決定するようにしてもよい。このように、一つの物理ノードに対して複数の仮想ノードを割り当てることによって、ストレージ装置への割り当て空間をより正確に重みに比例させることができる。仮想化を行なえば、一つの物理ノードに対応するすべての仮想ノードについて同じような重みのストレージ装置とばかり隣接する確率は低いため、一方の仮想ノードについて広い幅を割り当てられても、幅の合計は重みに比例した大きさとなる（重みが小さなストレージ装置ばかりが隣接した空間に集中して容量が小さいにも関わらず大きな幅の空間を割り当てられてしまうようなことが回避できる）。
【００１９】
また、好ましくは、前記識別子空間において前記第１の記憶手段に記憶された基準位置に対してｎ番目（ｎは予め定められた２以上の整数）に近い基準位置を持つ他のストレージ装置を、前記隣接ストレージ装置とみなして、前記第１の決定手段による前記決定及び前記第２の決定手段による前記決定を行うようにしてもよい。分散ストレージの目的の一つである信頼性を実現するために、一つのデータを複数のストレージ装置に置くという冗長化を行なう場合があるが、このようにすることによって、重みを考慮した冗長化を行なう場合が可能となる。一つのデータをｎ個のストレージノードで多重化する場合には、基準位置で定義される隣のストレージ装置とではなく、ｎ個先のストレージ装置との間で重みに応じた空間分割を行ない、一つの点がｎ個のストレージ装置に重複してマッピングされるようにする。これによって、一部のストレージ装置が故障・災害・回線障害によって使えなくなった場合でも、同じ空間を担当する他のストレージ装置を利用してデータを読み書きすることができる。
【００２０】
また、本発明は、分散ストレージシステムの構成に用いられ、該分散ストレージシステムが対象とする識別子空間のうちの分担範囲に含まれる識別子を持つデータを格納するストレージ装置における分担範囲決定方法であって、前記識別子空間に割り当てられた、前記分担範囲を決定する基準となる基準位置を、第１の記憶手段に記憶するステップと、前記分担範囲を決定する際に考慮される重みを、第２の記憶手段に記憶するステップと、前記第２の記憶手段に記憶された重みと、前記識別子空間において前記分担範囲に隣接する範囲を分担する隣接ストレージ装置に係る重みとに基づいて、該隣接ストレージ装置とで前記識別子空間を分担する場合における相対的な空間幅を決定する第１の決定ステップと、前記第１のステップ手段により決定された前記相対的な空間幅に基づいて、前記識別子空間における前記第１の記憶手段に記憶された基準位置から前記隣接ストレージ装置に係る基準位置までの範囲内について分担する分担範囲を決定する第２の決定ステップとを有することを特徴とする。
【００２１】
また、本発明は、分散ストレージシステムの構成に用いられるストレージ装置としてコンピュータを機能させるためのプログラムであって、前記分散ストレージシステムが対象とする識別子空間のうちの分担範囲に含まれる識別子を持つデータを格納するための機能と、前記識別子空間に割り当てられた、前記分担範囲を決定する基準となる基準位置を記憶する第１の記憶機能と、前記分担範囲を決定する際に考慮される重みを記憶する第２の記憶機能と、前記第２の記憶機能に記憶された重みと、前記識別子空間において前記分担範囲に隣接する範囲を分担する隣接ストレージ装置に係る重みとに基づいて、該隣接ストレージ装置とで前記識別子空間を分担する場合における相対的な空間幅を決定する第１の決定機能と、前記第１の決定機能により決定された前記相対的な空間幅に基づいて、前記識別子空間における前記第１の記憶機能に記憶された基準位置から前記隣接ストレージ装置に係る基準位置までの範囲内について分担する分担範囲を決定する第２の決定機能とを実現させるためのプログラムである。
【００２２】
なお、装置に係る本発明は方法に係る発明としても成立し、方法に係る本発明は装置に係る発明としても成立する。
また、装置または方法に係る本発明は、コンピュータに当該発明に相当する手順を実行させるための（あるいはコンピュータを当該発明に相当する手段として機能させるための、あるいはコンピュータに当該発明に相当する機能を実現させるための）プログラムとしても成立し、該プログラムを記録したコンピュータ読取り可能な記録媒体としても成立する。
【００２３】
本発明によれば、重みづけによって記憶容量の大きいノードや処理速度の速いノードにより多くの識別子空間を担当させ、より多くのデータを割り付けることによって、容量の小さいノードや処理の遅いノードがボトルネックになることを回避し、ノードの記憶容量や処理速度を有効に活用できる。
【００２４】
また、仮想化との組合わせによってその割り付けはさらに正確に重みに比例させることができる。
【００２５】
また、空間の重複割り当てによる多重化、冗長化によって、ストレージノードの故障時には（すでにデータのレプリカを持っている）隣接ノードがただちに故障ノードの空間を継承して対応することができるので、高信頼化を実現できる。
【００２６】
また、本発明によれば、システム全体を集中制御するストレージノードなしに、重みに比例等した空間割り当てを行なう分散アルゴリズムが実現でき、ストレージの使用率や応答速度が向上できる。
【００２７】
【発明の実施の形態】
以下、図面を参照しながら発明の実施の形態を説明する。
（第１の実施形態）
図１に、本実施形態のシステム全体の構成例を示す。
図１において、１はストレージノード、３はクライアント計算機、７はネットワークを示す。なお、図１では、分散ストレージシステムを構成するストレージノードとして３台のものが示されているが、これは一例であり、分散ストレージシステムを構成するストレージノードの台数は任意である。また、図１では、分散ストレージシステム（ストレージノード群）が１グループだけ示されているが、複数グループ存在して構わない。この場合に、各ストレージノードはいずれか１つのグループにのみ属するようにする構成と、複数のグループに属するストレージノードが存在しても構わないものとする構成とがあり得る。
また、図１では、１台のクライアント計算機のみが示されているが、もちろん、クライアント計算機は複数台存在し得る。
【００２８】
さて、本実施形態の分散ストレージシステムは、各ストレージノードが重みを持ち、ファイルをストレージノードに対応付けるハッシュ空間の割り当ての際に、隣接するストレージノード間で、それらの重みに比例した幅にハッシュ空間を分割する。
【００２９】
なお、ハッシュ空間に両端が存在する構成の場合には、ハッシュ空間の端部を担当する２つのストレージノードはそれぞれ隣接するストレージノードを１つのみ持ち、それ以外の各ストレージノードはそれぞれ隣接ストレージノードを２つ持つことになる。また、ハッシュ空間の両端が連結されているものとみなしてハッシュ空間をループ状に形成する構成の場合には、いずれのストレージノードも隣接するストレージノードを２つ持つことになる。
【００３０】
ハッシュ関数としては、ビット数が充分長くて一様な割り当てが行なわれる関数を用いると好ましい。そのようなハッシュ関数として、例えば、ＳＨＡ−１を採用することができる。ハッシュ空間は、０〜２＾ｂ−１のｂビットの整数で表わされる（ＳＨＡ−１の場合は、ｂ＝１６０となる）。
【００３１】
本実施形態では、ネットワーク７上に分散配置された複数のストレージノード１が１つのストレージノード群（分散ストレージシステム）を構成する。前述のように、ある１つのストレージノード１が複数のストレージノード群に属する構成も可能であるが、その場合には、ハッシュ空間は、各ストレージノード群ごとに独立して管理するものとすればよい。
【００３２】
なお、各ストレージノード１はストレージノード間通信に用いるアドレスを持つが、各ストレージノード１のノードＩＤ（ノード識別子）は、当該ストレージノード１の持つアドレスに対してハッシュ関数を適用して得られる値とする。
また、以下では、アドレスの一例として、ＩＰアドレスを用いる場合を例にとって説明する。
【００３３】
あるストレージノード群に属するストレージノード１は、それぞれ、自ノードの持つアドレスの他に、そのストレージノード群に属する他の全部のストレージノード１のアドレスを収集し、記憶するようにしてもよい。
【００３４】
しかし、各ストレージノード１に他のすべてのストレージノード１のアドレスを記憶させると、例えばストレージノード１の増減の際に通信量および処理時間の問題が発生するような場合があるので、自ノードの持つアドレスの他に、そのストレージノード群に属する他の一部の（予め定められた条件を満たす）ストレージノード１のアドレスのみを収集し、記憶するようにしてもよい。例えば、各ストレージノード１には、ハッシュ空間上で自ノードに隣接するストレージノード１のアドレスと、ハッシュ空間上のいくつかの点（例えば、自ノードのノードＩＤ（自ノードのアドレスに対してハッシュ関数を適用して得られる値）に対して、１，２，４，８，…，２（ｂ−１）をそれぞれ加えた複数の点）を含むハッシュ空間を担当するノードのアドレスのみを記憶しておくようにしてもよい。これらのアドレスを利用すれば、Ｏ（ｂ）個のノードへの問い合わせを行なうことによって、ハッシュ空間上の任意の点を担当するストレージノード１を検索することができる。
【００３５】
図２に、本実施形態のストレージノード１の内部構成例を示す。
図２に示されるように、ストレージノード１は、空間幅決定部１１、空間割当制御部１２、空間割当情報記憶部１３、ファイル入出力部１４、ファイル記憶部１５を備えている。概略的には、空間幅決定部１１と空間割当制御部１２と空間割当情報記憶部１３で、空間割り当ての決定や管理を行ない、ファイル入出力部１４で、その空間割り当てに基づくファイルの入出力を行なう。また、ファイル記憶部１５は、自ノードが分担するハッシュ空間に対応するファイルを記憶する。また、ストレージノード１は、自ノードに関する情報（例えば、自ノードのアドレスやノードＩＤや重みなど）を記憶するための記憶部（図示せず）を持つ。
【００３６】
図３に、本実施形態に係るストレージノードの参加時における処理手順の一例を示す。
ストレージノード１が、新規に、あるストレージノード群へ参加する場合は、まず、自ノードのＩＰアドレスを取得する（ステップＳ１）。ＩＰアドレスの取得方法には通常のＩＰネットワークでの取得方法が利用できる。例えば、管理者がそのサブネット上で未使用となっているＩＰアドレス一つを適宜選択して手動で当該参加するストレージノード（以下、新ストレージノード）１へ入力するようにしてもよいし、あるいは、プールされたＩＰアドレスから一つをＤＨＣＰサーバが自動的に選択してＤＨＣＰプロトコルによって当該新ストレージノード１に通知するようにすることも可能である。
【００３７】
また、前述したように、当該新ストレージノード１は、入力あるいは通知された自ノードのアドレスに対してハッシュ関数を適用することによって、自ノードのノードＩＤを求める（ステップＳ２）。
【００３８】
次に、新ストレージノード１は、ノード群の任意の他の（例えば一つの）ストレージノードのＩＰアドレスを取得して、これを空間割当制御部１２に伝える。他のストレージノードのアドレスの取得には、どのような方法を用いても構わない。例えば、管理者が他の（例えば一つの）ストレージノードを適宜選択してそのＩＰアドレスを手動で当該新ストレージノード１へ入力するようにしてもよいし、あるいは、近隣にストレージノードが存在する場合にＤＨＣＰのオプションやブロードキャストによって該近隣のストレージノードから当該新ストレージノード１へ、該近隣のストレージノードのＩＰアドレスを自動的に通知するようにすることも可能である。
【００３９】
このようにして得た他のストレージノードのＩＰアドレスを用いて、新ストレージノード１の空間割当制御部１２は、適宜、他のストレージノード１（の空間割当制御部１２）に接続して、自ノードの属するストレージノード群に属する他の全部又は一部のストレージノード１のアドレスを問い合わせ、収集する（ステップＳ３）。一部のストレージノード１のアドレスのみ記憶する場合には、例えば、自ノードのノードＩＤをもとに、隣接するノードのアドレスと、自ノードのノードＩＤに１，２，４，８，…，２（ｂ−１）をそれぞれ加えた点を含むハッシュ空間を担当する各ストレージノード１のアドレスを得る。
【００４０】
このようにして収集された他のストレージノード１のアドレスは、空間割当情報記憶部１３に記憶される（ステップＳ４）。
【００４１】
以下、図４を参照しながら、本実施形態の各ストレージノードにおけるハッシュ空間分割方法について説明する。
以下の処理は、隣接ノードが２つある場合には、各々の隣接ノードについて行う。
【００４２】
また、以下の処理を最初に行う場合には、例えば、図３のステップＳ４に続いて行ってもよいし、最初にクライアント計算機からＩ／Ｏ要求を受信した時点で行ってもよいし、それ以外の適当なタイミングで行ってもよい。なお、以下の処理は、例えば、自ノードの重みが変更された場合、隣接ノードの重みが変更された場合、ストレージノードの増減などによって隣接ノードが変更された場合などに、あらためて行うこともある。
【００４３】
本実施形態のストレージノード１の空間幅決定部１１は、空間割当制御部１２から得た隣接ノードのアドレスをもとに、隣接するストレージノード１（の空間幅決定部１１）との接続を行ない、自ノードの重みを伝えるとともに、隣接するストレージノード１の重みを取得する。
【００４４】
重みとしては、例えば、ストレージの記憶容量、演算能力、回線速度、それらを適宜組み合わせたものなどを用いることができる。ここでは、一例として、ストレージの記憶容量を用いた場合を例にとって説明する。
【００４５】
自ノードｓの重みをＶ［ｓ］、隣接ノードｕの重みをＶ［ｕ］とすると、自ノードｓの相対的な幅は、
ｗ＝Ｖ［ｓ］／（Ｖ［ｓ］＋Ｖ［ｕ］）
となる。
【００４６】
空間幅決定部１１は、このようにして空間幅情報ｗを決定すると、これを、空間割当制御部１２に送る。
空間割当制御部１２では、空間幅情報ｗをもとに、自ノードｓと隣接ノードｕとの間の空間を分割する。なお、自ノードｓと隣接ノードｕとの間の空間は予め定められており、一方の端点が自ノードｕのアドレスにハッシュ関数を適用して得られる点であり、他方の端点が隣接ノードｓのアドレスにハッシュ関数を適用して得られる点である。
【００４７】
しかして、例えば、ハッシュ関数をｈ（）、自ノードｓのアドレスをＡ［ｓ］、隣接ノードｕのアドレスをＡ［ｕ］とすると、隣接ノードｕとの境界を
ｈ１＝ｈ（Ａ［ｕ］）＊ｗ＋ｈ（Ａ［ｓ］）＊（１−ｗ）
とすることによって、
ｈ１−ｈ（Ａ［ｕ］）：ｈ（Ａ［ｓ］）−ｈ１＝Ｖ［ｕ］：Ｖ［ｓ］
という条件を満たす境界ｈ１が得られる。
この様子を、図４に示している。
【００４８】
もう一方の隣接ノードｄとの境界ｈ２についても、同様の手順によって、求めることができる。すなわち、もう一方の隣接ノードｄのアドレスをＡ［ｄ］とし、その重みをＶ［ｄ］とすると、相対的な幅は、
ｗ´＝Ｖ［ｓ］／（Ｖ［ｓ］＋Ｖ［ｄ］）
となり、隣接ノードｄとの境界を
ｈ２＝ｈ（Ａ［ｄ］）＊ｗ´＋ｈ（Ａ［ｓ］）＊（１−ｗ´）
とすることによって、
ｈ２−ｈ（Ａ［ｄ］）：ｈ（Ａ［ｓ］）−ｈ２＝Ｖ［ｄ］：Ｖ［ｓ］
という条件を満たす境界ｈ２が得られる。
【００４９】
このようにして各隣接ノードｕ，ｄとの境界を決定し、その範囲（図４のｈ１とｈ２参照）を、自ノードｓの担当空間として、空間割当記憶部１３に記憶する。
【００５０】
なお、ハッシュ空間に両端が存在する構成の場合に、ハッシュ空間の端部を担当する２つのストレージノードについては、隣接するストレージノードとの境界を上記と同様の方法で求め、この境界から、ハッシュ空間の（自ノード側の）端部までを、自ノードの担当空間とすればよい。
【００５１】
このように重み（例えば、記憶容量）に応じて隣接ノード間でハッシュ空間を分割する（例えば、重みに比例した幅で分割する）ことによって、図５に例示するように、例えば、記憶容量の大きなストレージノードにはより多くのファイルが割り当てられるようにすることが可能になる。
【００５２】
なお、上記では、空間幅決定部１１でｗ＝Ｖ［ｓ］／（Ｖ［ｓ］＋Ｖ［ｕ］）を求め、次いで、空間割当制御部１２でｈ１＝ｈ（Ａ［ｕ］）＊ｗ＋ｈ（Ａ［ｓ］）＊（１−ｗ）を求めるものとしたが、もちろん、ｈ１＝ｈ（Ａ［ｕ］）＊Ｖ［ｓ］／（Ｖ［ｓ］＋Ｖ［ｕ］）＋ｈ（Ａ［ｓ］）＊（１−Ｖ［ｓ］／（Ｖ［ｓ］＋Ｖ［ｕ］））として求めるようにしてもよい。
【００５３】
また、上記した空間幅決定部１１及び空間割当制御部１２による決定方法は、一例であり、他にも種々の方法が可能である。
【００５４】
図６に、本実施形態に係るストレージノードの要求受信時における処理手順の一例を示す。
クライアント計算機１が分散ストレージシステムへファイルの読み書きを行う際には、クライアント計算機１は、自身が利用するファイルを管理しているノード群のストレージノード１に対してＩ／Ｏ要求を送出する。
【００５５】
なお、ノード群の任意のストレージノード１を利用することが可能であるが、実用上は、例えば、ネットワーク上で近い位置にあるストレージノード１を利用することが想定される。
【００５６】
ストレージノード１がＩ／Ｏ要求を受信すると（ステップＳ１１）、そのファイル入出力部１４では、空間割当情報記憶部１３の自ノードの担当範囲と、要求中のファイルＩＤ（ファイル識別子）（なお、ファイルＩＤには、対象ファイルのファイル名あるいは対象ファイルの中身のデータに対して、ハッシュ関数を適用して得られる値などが用いられる）とを比較し（ステップＳ１２）、ファイルＩＤが担当範囲内に該当すれば（ステップＳ１３）、自ノードのファイル記憶部１５にアクセスして要求の処理（ファイルの読み出しあるいは書き込みなど）を行なう（ステップＳ１４）。
【００５７】
他方、範囲外に該当すれば（ステップＳ１３）、空間割当情報記憶部１３の他ノードのアドレスをもとに、他のノード（の空間割当制御部１２）に問い合わせることによって、そのファイルＩＤを担当するストレージノード１のアドレスを検索する（ステップＳ１５）。
【００５８】
そして、検索によって、そのファイルＩＤを担当するストレージノード１のアドレスが得られたならば（ステップＳ１６）、そのストレージノード１（のファイル入出力部１４）に接続して、要求の処理を行なう（ステップＳ１７）。
【００５９】
もし、そのファイルＩＤを担当するストレージノード１のアドレスが得られなかったならば（ステップＳ１６）、エラー処理を行う（例えば、要求元のクライアント計算機に、エラー・メッセージを返す）（ステップＳ１８）。
【００６０】
このように本実施形態によれば、空間幅を重みに応じたものにすることによって、例えば、ストレージノードの記憶容量などに応じたファイルの割り当てや、処理速度に応じた負荷の分散などが可能になる。
【００６１】
（第２の実施形態）
本実施形態の分散ストレージシステムは、１つのノード群を構成するストレージノード（の全部又は一部）を複数の仮想ノードに仮想化し、複数のハッシュ空間に割り当てた上で、ファイルへの対応付けを行なうものである。
【００６２】
以下では、第１の実施形態と相違する点を中心に説明する。
【００６３】
図７に、本実施形態のハッシュ空間分割方法を示す。
【００６４】
各ストレージノード（以下、仮想ノードと区別するため、物理ノードと呼ぶ）１のノードＩＤからハッシュ値を計算する際に、物理ノードのアドレスに加えて、物理ノードごとに割り当てられる仮想ノード番号をハッシュ関数の引数として用いる。
【００６５】
例えば、ある物理ノードｓのアドレスがＡ［ｓ］、物理ノードｓに設定される仮想ノードの数がｖ個である場合に、物理ノードｓには、ｈ（Ａ［ｓ］，０），…，ｈ（Ａ［ｓ］，ｖ−１）のｖ個のハッシュ値が対応する。
【００６６】
そして、各仮想ノードをそれぞれ第１の実施形態のストレージノードとみなせば、第１の実施形態と同様の処理によって、各仮想ノードのハッシュ空間の担当範囲を求めることができる。
【００６７】
なお、仮想ノードごとに重みを付与する方法と、全仮想ノードについて共通の重みを付与する方法が可能である。
【００６８】
本実施形態は、第１の実施形態の利点に加えて、物理ノードに複数の空間を分割させることによって、より多くのノードに隣接させることができるため、隣接ノードの重みの平均値が全ノードの重みの平均値に近づくようになり、したがって、各ノードの担当する空間幅がより正確に重みに比例するという利点がある。これは、重み付けを行なわない従来技術に仮想化を適用した場合に得られる、ノード間のハッシュ空間上での距離の分散が小さくなるという効果とは異なり、重みに応じた空間分割と仮想化とを組合わせたからこそ得られる効果である。
【００６９】
（第３の実施形態）
本実施形態に係る分散ストレージシステムは、空間を複数のノードに重複して割り当て、ファイルをそれらのノードに重複して割り当てるものである。
【００７０】
以下では、第１の実施形態と相違する点を中心に説明する。
【００７１】
図８に、本実施形態のハッシュ空間分割方法を示す。
【００７２】
なお、図８は、ｎ＝２（二重化）の場合を例示している。
【００７３】
ハッシュ空間の同一の点をｎ個のノードに重複して割り当てる場合、ストレージノードをｎグループｎ分割し、同一のハッシュ空間を対象として、各々のグループ内で、第１の実施形態と同様に、各ストレージノードのハッシュ空間の担当範囲を求めればよい。
【００７４】
その際、例えば、第１の実施形態の隣接するノードの代わりに、ハッシュ空間上で自ノードのｎ個隣のストレージノードとの間で、担当空間の分割を行なうようにしてもよい。それらに挟まれた他のストレージノードも同様の空間を分割するため、結果として、一つの点がｎ個ノードに重複して割り当てられることになる。
【００７５】
ところで、単に多重化するだけであれば、ファイルを複数のノードに対応させる種々の方法がある。例えば、ファイルに複数のハッシュ関数を適用することによって、複数個の仮想的なファイルＩＤを割り当て、それらの仮想的なファイルＩＤに対応するノードＩＤを持つ複数個のノードにファイルを格納する、といった冗長化方法が考えられる。しかしながら、故障などによってストレージノードが失われた場合に、そのストレージノードが担当していた空間を引き継ぐのは、ハッシュ空間上で故障ノードに隣接するストレージノードである。このような方法では、故障ノードに隣接するストレージノードに、他のストレージノードから該当するファイルを転送しなければならない。
【００７６】
これに対して、本実施形態では、隣接するストレージノードに重複した割り当てが行なわれているため、そのストレージノードに空間を継承させることによって、ファイルの転送量を最小化することができる。
【００７７】
本実施形態によれば、第１の実施形態の利点に加えて、ファイルを複数のノードに格納することによって、故障などでファイルが失われる可能性を低減させるとともに、故障などの際に、ファイルの転送量を最小限に抑えて担当空間の継承ができるという利点がある。
【００７８】
なお、第３の実施形態と第４の実施形態とを組み合わせて実施することも可能である。
【００７９】
なお、以上では、ファイルをストレージノードに格納するにあたって、ファイル単位で格納する場合を例にとって説明してきたが、ファイルをブロック単位に分割してブロック単位で格納する場合も同様に可能である。この場合には、例えば、ファイル名とブロック番号との組をブロック名とするなどによって、これまで説明してきたものと同様の方法が適用可能になる。
【００８０】
なお、以上の各機能は、ソフトウェアとして実現可能である。
また、本実施形態は、コンピュータに所定の手段を実行させるための（あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるための）プログラムとして実施することもでき、該プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
【００８１】
なお、この発明の実施の形態で例示した構成は一例であって、それ以外の構成を排除する趣旨のものではなく、例示した構成の一部を他のもので置き換えたり、例示した構成の一部を省いたり、例示した構成に別の機能あるいは要素を付加したり、それらを組み合わせたりすることなどによって得られる別の構成も可能である。また、例示した構成と論理的に等価な別の構成、例示した構成と論理的に等価な部分を含む別の構成、例示した構成の要部と論理的に等価な別の構成なども可能である。また、例示した構成と同一もしくは類似の目的を達成する別の構成、例示した構成と同一もしくは類似の効果を奏する別の構成なども可能である。
また、この発明の実施の形態で例示した各種構成部分についての各種バリエーションは、適宜組み合わせて実施することが可能である。
また、この発明の実施の形態は、個別装置としての発明、関連を持つ２以上の装置についての発明、システム全体としての発明、個別装置内部の構成部分についての発明、またはそれらに対応する方法の発明等、種々の観点、段階、概念またはカテゴリに係る発明を包含・内在するものである。
従って、この発明の実施の形態に開示した内容からは、例示した構成に限定されることなく発明を抽出することができるものである。
【００８２】
本発明は、上述した実施の形態に限定されるものではなく、その技術的範囲において種々変形して実施することができる。
【００８３】
【発明の効果】
本発明によれば、分散ストレージシステムを構成する各ストレージ装置が、該分散ストレージシステムが対象とする識別子空間のうちで分担する分担範囲を決定するにあたって、より効果的な分担範囲の決定を行うことができる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る分散ストレージシステムの全体構成例を示す図
【図２】同実施形態に係るストレージノードの内部構成例を示す図
【図３】同実施形態に係るストレージノードの参加時における処理手順の一例を示すフローチャート
【図４】同実施形態のハッシュ空間分割方法を説明するための図
【図５】同実施形態のハッシュ空間分割方法を説明するための図
【図６】同実施形態に係るストレージノードの要求受信時における処理手順の一例を示すフローチャート
【図７】同実施形態の他のハッシュ空間分割方法を説明するための図
【図８】同実施形態のさらに他のハッシュ空間分割方法を説明するための図
【符号の説明】
１…ストレージノード、３…クライアント計算機、７…ネットワーク、１１…空間幅決定部、１２…空間割当制御部、１３…空間割当情報記憶部、１４…ファイル入出力部、１５…ファイル記憶部
【図１】
2004252663.tif 000003
【図２】
2004252663.tif 000004
【図３】
2004252663.tif 000005
【図４】
2004252663.tif 000006
【図５】
2004252663.tif 000007
【図６】
2004252663.tif 000008
【図７】
2004252663.tif 000009
【図８】
2004252663.tif 000010