(57)【要約】【課題】複数のデバイスにコンテンツを冗長化して保存するクラスタ型ストレージシステムにおいて、コンテンツの保存先であるデバイスの組み合わせを、任意の組み合わせにできるようにする。【解決手段】コンテンツを複数のデバイス１１０に冗長化して保存するクラスタ型ストレージシステムのノード装置１００において、データの書き込み先となるデバイスを決定するときに参照する配置情報１３１を、対象となるコンテンツのコンテンツキー（Ｋ）を用いて計算したハッシュ値を用いてバスケットＩＤを作成する。そして、配置情報１３１において、このバスケットＩＤに対応するデバイスＩＤとして、このコンテンツを保存する複数のデバイス１１０のデバイスＩＤを設定できるようにした。【選択図】図１
2009289161.tif 000002
【特許請求の範囲】
【請求項１】
データの読み出しおよび書き込みを行うノード装置を複数備え、前記ノード装置の収容する複数のデバイスに前記データを冗長化して記憶するクラスタ型ストレージシステムにおける前記ノード装置であって、
前記データの識別情報であるコンテンツキーのハッシュ値を基に得られた識別情報であるバスケットＩＤごとに、当該データを記憶する複数の前記デバイスの識別情報を示した配置情報と、前記デバイスの識別情報ごとに、前記デバイスを収容するノード装置の識別情報を示したアドレス情報とを記憶する記憶部と、
前記読み出しまたは書き込みの対象となるデータのコンテンツキーを含む前記データの書き読み要求または読み出し要求を受け付ける入力部と、
前記コンテンツキーのハッシュ値を基に当該コンテンツキーに対応する前記バスケットＩＤを計算するハッシュ計算部と、
前記計算されたバスケットＩＤをキーとして、前記配置情報から、前記バスケットＩＤに対応する前記デバイスの識別情報を検索し、この検索した前記デバイスの識別情報と、前記アドレス情報とを参照して、前記検索した識別情報に対応するデバイスを収容するノード装置の識別情報を特定し、前記特定した識別情報のノード装置へ、当該デバイスへの前記コンテンツキーに対応するデータの読み出し要求または書き込み要求を送信するルーチング部と、
前記ノード装置から前記データの読み出し要求または書き込み要求の結果を受信するデータ受信部とを備えることを特徴とするノード装置。
【請求項２】
前記入力部経由で、前記データのコンテンツキーと、当該データの記憶先となる複数の前記デバイスの識別情報とを含む前記配置情報の設定情報の入力を受け付けたとき、
前記ハッシュ計算部は、前記設定情報に含まれるコンテンツキーのハッシュ値を基に当該コンテンツキーに対応する前記バスケットＩＤを計算し、
前記ノード装置は、
前記計算されたバスケットＩＤと、前記設定情報に含まれる前記複数の前記デバイスの識別情報とを対応付けた前記配置情報を作成する配置情報管理部を備えることを特徴とする請求項１に記載のノード装置。
【請求項３】
前記データの記憶先となるデバイスを変更するため、前記入力部経由で、前記変更対象となるデータのコンテンツキーと、当該データの新たな記憶先となるデバイスの識別情報とを含む変更情報の入力を受け付けたとき、
前記配置情報管理部は、前記ハッシュ計算部により計算された前記変更対象となるデータのコンテンツキーに対応するバスケットＩＤをキーとして、前記配置情報から、当該バスケットＩＤに対応する前記デバイスの識別情報を検索し、前記配置情報における、当該検索したデバイスの識別情報を、前記新たな記憶先となるデバイスの識別情報に変更し、
前記ルーチング部は、前記デバイスの識別情報を検索するとき、前記変更した配置情報を参照して、前記デバイスの識別情報を検索することを特徴とする請求項２に記載のノード装置。
【請求項４】
他の前記ノード装置から前記データの読み出し要求または書き込み要求を受信したとき、自身の前記ノード装置の備えるデバイスに記憶される前記データに対し、前記読み出しまたは書き込み処理を実行し、その実行結果を、前記データの読み出し要求または書き込み要求の送信元であるノード装置へ送信するデータ送信部を備えることを特徴とする請求項１ないし請求項３のいずれか１項に記載のノード装置。
【請求項５】
前記配置情報管理部は、前記記憶部における前記配置情報が変更されたとき、前記クラスタ型ストレージシステム内の他のノード装置へ、前記変更後の配置情報を送信し、他のノード装置から、変更後の配置情報を受信したとき、前記変更後の配置情報を前記記憶部に記憶し、
前記ルーチング部は、前記デバイスの識別情報を検索するとき、前記変更後の配置情報を含む前記記憶部に記憶された配置情報を参照して、前記デバイスの識別情報を検索することを特徴とする請求項２ないし請求項４のいずれか１項に記載のノード装置。
【請求項６】
請求項１ないし請求項５のいずれか１項に記載のノード装置を複数備えることを特徴とするクラスタ型ストレージシステム。
【請求項７】
前記クラスタ型ストレージシステム内の前記ノード装置それぞれにおける処理負荷を監視する監視装置をさらに備え、
前記監視装置において、前記ノード装置間の処理負荷の偏りを検出したとき、
前記ノード装置は、前記配置情報において、前記処理負荷が比較的高い前記ノード装置に収容されるデバイスの識別情報に対応するバスケットＩＤについて、このバスケットＩＤに対応するデバイスの識別情報を、前記処理負荷が比較的低い前記ノード装置に収容されるデバイスの識別情報へ変更することを特徴とする請求項６に記載のストレージシステム。
【請求項８】
データの読み出しおよび書き込みを行うノード装置を複数備え、前記ノード装置の収容する複数のデバイスに前記データを冗長化して記憶するクラスタ型ストレージシステムにおいて、前記データの識別情報であるコンテンツキーのハッシュ値を基に得られた識別情報であるバスケットＩＤごとに、当該データを記憶する複数の前記デバイスの識別情報を示した配置情報と、前記デバイスの識別情報ごとに、前記デバイスを収容するノード装置の識別情報を示したアドレス情報とを記憶する記憶部を備える前記ノード装置が、
前記読み出しまたは書き込みの対象となるデータのコンテンツキーを含む、前記データの書き読み要求または読み出し要求の入力を受け付けるステップと、
前記コンテンツキーのハッシュ値を基に当該コンテンツキーに対応する前記バスケットＩＤを計算するステップと、
前記計算されたバスケットＩＤをキーとして、前記配置情報から、前記バスケットＩＤに対応する前記デバイスの識別情報を検索するステップと、
この検索した前記デバイスの識別情報と、前記アドレス情報とを参照して、前記検索した識別情報に対応するデバイスを収容するノード装置の識別情報を特定するステップと、
前記特定した識別情報のノード装置へ、当該デバイスへの前記コンテンツキーに対応するデータの読み出し要求または書き込み要求を送信するステップと、
前記ノード装置から前記データの読み出し要求または書き込み要求の結果を受信するステップとを実行することを特徴とするデータの読み出しおよび書き込み制御方法。
【請求項９】
前記ノード装置が、
前記データの記憶先となるデバイスを変更するため、前記変更対象となるデータのコンテンツキーと、当該データの新たな記憶先となるデバイスの識別情報とを含む変更情報の入力を受け付けたとき、
前記変更対象となるデータのコンテンツキーに対応するバスケットＩＤを計算するステップと、
前記計算されたバスケットＩＤをキーとして、前記配置情報から、当該バスケットＩＤに対応する前記デバイスの識別情報を検索するステップと、
前記配置情報における、当該検索したデバイスの識別情報を、前記新たな記憶先となるデバイスの識別情報に変更するステップとを実行し、
前記デバイスの識別情報を検索するとき、前記変更した配置情報を参照して、前記デバイスの識別情報を検索することを特徴とする請求項８に記載のデータの読み出しおよび書き込み制御方法。
【請求項１０】
請求項８または請求項９に記載のデータの読み出しおよび書き込み制御方法を、コンピュータである前記ノード装置に実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスタ型ストレージシステムに関する。
【背景技術】
【０００２】
従来から、分散した複数のデバイスにデータを保存するクラスタ型ストレージシステムがある。このクラスタ型ストレージシステムによれば、デバイスの追加によって、スループット、単位時間あたりのＩ／Ｏ数、データ保存容量を柔軟に向上させることができるという、拡張性（スケーラビリティ）を有している。
【０００３】
このクラスタ型ストレージシステムとして、Amazon社が開発したDynamoがある（非特許文献１参照）。このDynamoは、分散ハッシュテーブル（DHT:Distributed Hash Table)を使用し、Key-Valueペアでデータ（コンテンツ）の書き込み先を管理するストレージシステムである。また、このKey-Valueペアとは、コンテンツを保存するときコンテンツキーを付与して保存する方式であり、システムがコンテンツを読み出すときは、コンテンツキーを指定して読み出す。Dynamoでは、ＤＨＴ空間の均等分割、仮想ノードの導入等により、ノード装置間（デバイス間）の負荷分散を行っている。このDynamoでは、ハッシュ関数ＨにコンテンツキーＫを代入して計算したハッシュ値Ｈ（Ｋ）によって、コンテンツを保存するデバイスを決定する。ここで、コンテンツを冗長化して保存する場合は、ＤＨＴ空間上、隣接するデバイス群にコンテンツを複製して保存する。
【非特許文献１】Dynamo、[online]、[平成20年5月9日検索]、インターネット、<URL: http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html >
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、非特許文献１の記載によると、Dynamoで30分間の各ノード装置の平均負荷を計測したところ、負荷が平均値の15％になったノード装置の数が、全ノード数の10％〜20％存在する。このような負荷の偏りが生じる原因は様々なものが考えられるが、例えばアプリケーションによる特定のキーのコンテンツに対する集中的なアクセスが挙げられる。具体例を挙げると、コンテンツＣ１が、ＤＨＴ空間上隣接する３つのデバイスＤ１，Ｄ２，Ｄ３に保存され、別のコンテンツＣ２が、ＤＨＴ空間上隣接する３つのデバイスＤ２，Ｄ３，Ｄ４に保存されるシステムを考える。このシステムの場合、コンテンツＣ１，Ｃ２に頻繁にアクセスするアプリケーションが出現すると、デバイスＤ２，Ｄ３の負荷が特に高くなり、システム内のデバイス間（ノード装置間）に負荷の偏りが生じるという問題がある。ここで、Dynamoでは冗長化されるデバイスの組み合わせはＤＨＴ空間上隣接するデバイスと決められている。よって、負荷の偏りを解消するため、コンテンツを冗長化して保存するデバイスの組み合わせを任意の組み合わせに変更することはできない。
【０００５】
本発明は、前記した問題を解決し、複数のデバイスにコンテンツを冗長化して保存するクラスタ型ストレージシステムにおいて、コンテンツの保存先であるデバイスの組み合わせを、任意の組み合わせにできるようにすることを目的とする。
【課題を解決するための手段】
【０００６】
前記した課題を解決するため請求項１に記載の発明は、データの読み出しおよび書き込みを行うノード装置を複数備え、前記ノード装置の収容する複数のデバイスに前記データを冗長化して記憶するクラスタ型ストレージシステムにおける前記ノード装置であって、
前記データの識別情報であるコンテンツキーのハッシュ値を基に得られた識別情報であるバスケットＩＤごとに、当該データを記憶する複数の前記デバイスの識別情報を示した配置情報と、前記デバイスの識別情報ごとに、前記デバイスを収容するノード装置の識別情報を示したアドレス情報とを記憶する記憶部と、前記読み出しまたは書き込みの対象となるデータのコンテンツキーを含む、前記データの書き読み要求または読み出し要求の入力を受け付ける入力部と、前記コンテンツキーのハッシュ値を基に当該コンテンツキーに対応する前記バスケットＩＤを計算するハッシュ計算部と、前記計算されたバスケットＩＤをキーとして、前記配置情報から、前記バスケットＩＤに対応する前記デバイスの識別情報を検索し、この検索した前記デバイスの識別情報と、前記アドレス情報とを参照して、前記検索した識別情報に対応するデバイスを収容するノード装置の識別情報を特定し、前記特定した識別情報のノード装置へ、当該デバイスへの前記コンテンツキーに対応するデータの読み出し要求または書き込み要求を送信するルーチング部と、前記ノード装置から前記データの読み出し要求または書き込み要求の結果を受信するデータ受信部とを備えることを特徴とする。
【０００７】
請求項８に記載の発明は、データの読み出しおよび書き込みを行うノード装置を複数備え、前記ノード装置の収容する複数のデバイスに前記データを冗長化して記憶するクラスタ型ストレージシステムにおいて、前記データの識別情報であるコンテンツキーのハッシュ値を基に得られた識別情報であるバスケットＩＤごとに、当該データを記憶する複数の前記デバイスの識別情報を示した配置情報と、前記デバイスの識別情報ごとに、前記デバイスを収容するノード装置の識別情報を示したアドレス情報とを記憶する記憶部を備える前記ノード装置が、前記読み出しまたは書き込みの対象となるデータのコンテンツキーを含む、前記データの書き読み要求または読み出し要求の入力を受け付けるステップと、前記コンテンツキーのハッシュ値を基に当該コンテンツキーに対応する前記バスケットＩＤを計算するステップと、前記計算されたバスケットＩＤをキーとして、前記配置情報から、前記バスケットＩＤに対応する前記デバイスの識別情報を検索するステップと、この検索した前記デバイスの識別情報と、前記アドレス情報とを参照して、前記検索した識別情報に対応するデバイスを収容するノード装置の識別情報を特定するステップと、前記特定した識別情報のノード装置へ、当該デバイスへの前記コンテンツキーに対応するデータの読み出し要求または書き込み要求を送信するステップと、前記ノード装置から前記データの読み出し要求または書き込み要求の結果を受信するステップとを実行することを特徴とするデータの読み出しおよび書き込み制御方法である。
【０００８】
このようにすることで、クラスタ型ストレージシステム（以下、システムと略す）のノード装置は、冗長化するデバイスの識別情報を明示した配置情報を用いて、データの書き込み先（または読み出し先）となるデバイスを決定する。よって、システムの管理者等がこの配置情報を設定することで、各ノード装置が決定するデータの書き込み先（または読み出し先）となるデバイスを自由に設定できる。
【０００９】
請求項２に記載の発明は、請求項１に記載のノード装置が前記入力部経由で、前記データのコンテンツキーと、当該データの記憶先となる複数の前記デバイスの識別情報とを含む前記配置情報の設定情報の入力を受け付けたとき、前記ハッシュ計算部は、前記設定情報に含まれるコンテンツキーのハッシュ値を基に当該コンテンツキーに対応する前記バスケットＩＤを計算し、前記ノード装置は、前記計算されたバスケットＩＤと、前記設定情報に含まれる前記複数の前記デバイスの識別情報とを対応付けた前記配置情報を作成する配置情報管理部を備えることを特徴とする。
【００１０】
このようにすることで、システムの管理者等は、各ノード装置が決定するデータの書き込み先（または読み出し先）となるデバイスを自由に設定できる。
【００１１】
請求項３に記載の発明は、請求項２に記載のノード装置において、前記データの記憶先となるデバイスを変更するため、前記入力部経由で、前記変更対象となるデータのコンテンツキーと、当該データの新たな記憶先となるデバイスの識別情報とを含む変更情報の入力を受け付けたとき、前記配置情報管理部は、前記ハッシュ計算部により計算された前記変更対象となるデータのコンテンツキーに対応するバスケットＩＤをキーとして、前記配置情報から、当該バスケットＩＤに対応する前記デバイスの識別情報を検索し、前記配置情報における、当該検索したデバイスの識別情報を、前記新たな記憶先となるデバイスの識別情報に変更し、前記ルーチング部は、前記デバイスの識別情報を検索するとき、前記変更した配置情報を参照して、前記デバイスの識別情報を検索することを特徴とする。
【００１２】
請求項９に記載の発明は、請求項８のデータの読み出しおよび書き込み制御方法において、前記ノード装置が、前記データの記憶先となるデバイスを変更するため、前記変更対象となるデータのコンテンツキーと、当該データの新たな記憶先となるデバイスの識別情報とを含む変更情報の入力を受け付けたとき、前記変更対象となるデータのコンテンツキーに対応するバスケットＩＤを計算するステップと、前記計算されたバスケットＩＤをキーとして、前記配置情報から、当該バスケットＩＤに対応する前記デバイスの識別情報を検索するステップと、前記配置情報における、当該検索したデバイスの識別情報を、前記新たな記憶先となるデバイスの識別情報に変更するステップとを実行し、前記デバイスの識別情報を検索するとき、前記変更した配置情報を参照して、前記デバイスの識別情報を検索することを特徴とする。
【００１３】
このようにすることで、例えば、システム内の処理負荷の偏りの解消のため、管理者等が処理負荷の大きいノードのデバイスに記憶されているデータを、比較的処理負荷の小さいノードのデバイスへ移行した場合、この配置情報に、当該データの記憶先としてこの移行先のデバイスに設定しておけば、データ移行後、ノード装置にこの移行先のデバイスに対し読み出し処理や書き込み処理を実行させることができる。
【００１４】
請求項４に記載の発明は、請求項１ないし請求項３のいずれか１項に記載のノード装置において、他の前記ノード装置から前記データの読み出し要求または書き込み要求を受信したとき、自身の前記ノード装置の備えるデバイスに記憶される前記データに対し、前記読み出しまたは書き込み処理を実行し、その実行結果を、前記データの読み出し要求または書き込み要求の送信元であるノード装置へ送信するデータ送信部を備えることを特徴とする。
【００１５】
このようにすることで、他のノード装置からデータの読み出し要求または書き込み要求を受信した場合でも、この要求に応じた処理を実行し、その実行結果を相手方のノード装置へ返すことができる。
【００１６】
請求項５に記載の発明は、請求項２ないし請求項４のいずれか１項に記載のノード装置の前記配置情報管理部が、前記記憶部における前記配置情報が変更されたとき、前記クラスタ型ストレージシステム内の他のノード装置へ、前記変更後の配置情報を送信し、他のノード装置から、変更後の配置情報を受信したとき、前記変更後の配置情報を前記記憶部に記憶し、前記ルーチング部は、前記デバイスの識別情報を検索するとき、前記変更後配置情報を参照して、前記デバイスの識別情報を検索することを特徴とする。
【００１７】
このようにすることで、システムのいずれかのノード装置で配置情報が変更されたとき、各ノード装置がそれぞれ、この変更された配置情報に基づきデータの読み出し先または書き込み先を決定できる。
【００１８】
請求項６に記載の発明は、請求項１ないし請求項５のいずれか１項に記載のノード装置を複数備えることを特徴とするクラスタ型ストレージシステムとした。
【００１９】
このようにすることで、請求項１ないし請求項５のいずれか１項に記載のノード装置によりクラスタ型ストレージシステムを実現できる。
【００２０】
請求項７に記載の発明は、請求項６に記載のクラスタ型ストレージシステムが、前記前記クラスタ型ストレージシステム内の前記ノード装置それぞれにおける処理負荷を監視する監視装置をさらに備え、前記監視装置において、前記ノード装置間の処理負荷の偏りを検出したとき、前記ノード装置は、前記配置情報において、前記処理負荷が比較的高い前記ノード装置に収容されるデバイスの識別情報に対応するバスケットＩＤについて、このバスケットＩＤに対応するデバイスの識別情報を、前記処理負荷が比較的低い前記ノード装置に収容されるデバイスの識別情報へ変更することを特徴とする。
【００２１】
このようにすることで、システムのノード装置間に処理負荷の偏りが生じた場合、ノード装置が自動で配置情報の変更を行うことができる。よってシステムのノード装置間に処理負荷の偏りが生じた場合の配置情報の変更の手間を軽減できる。
【００２２】
請求項１０に記載の発明は、請求項８または請求項９に記載のデータの読み出しおよび書き込み制御方法を、コンピュータである前記ノード装置に実行させるためのプログラムである。
【００２３】
このようなプログラムによれば、一般的なコンピュータに請求項８または請求項９に記載のデータの読み出しおよび書き込み制御方法を実行させることができる。
【発明の効果】
【００２４】
本発明によれば、複数のデバイスにコンテンツを冗長化して保存するクラスタ型ストレージシステム（システム）において、コンテンツの保存（記憶）先であるデバイスの組み合わせを管理者等が任意に設定可能となる。よって、デバイス間に負荷の偏りが発生したとき、その負荷の偏りの軽減のため、コンテンツの記憶先であるデバイスの変更を行いやすくなる。また、システムの運用環境に合わせて、当該コンテンツの保存先であるデバイスの組み合わせをシステムの管理者等が任意に設定できるので、システムのアベイラビリティを向上させることができる。
【発明を実施するための最良の形態】
【００２５】
以下、本発明を実施するための最良の形態（以下、実施の形態という）について説明する。
【００２６】
≪概要≫
まず、図１を用いて本実施の形態のクラスタ型ストレージシステムの概要を説明する。図１は、本実施の形態のクラスタ型ストレージシステムの構成例を示した図である。
【００２７】
図１に示すように、クラスタ型ストレージシステム（以下、システムと略す）は複数のノード装置１００（１００Ａ，１００Ｂ，１００Ｃ，１００Ｄ）を含んで構成される。ここでは、同じコンテンツキー（コンテンツの識別情報）に対応するコンテンツが、３つのデバイス１１０（１１０Ｃ,１１０Ｅ，１１０Ｇ）に冗長化されて保存されている場合を例に説明する。ここでは、この３つのデバイス１１０（１１０Ｃ,１１０Ｅ，１１０Ｇ）は、それぞれノード装置１００Ｂ，１００Ｃ，１００Ｄ内のデバイス１１０であるものとする。
【００２８】
クライアント装置２０は、システムにアクセスするためのアプリケーションを備える端末装置である。各ノード装置１００は、このクライアント装置２０からのアクセスを受け付けると、このクライアント装置２０からデータ（コンテンツ）の読み出し要求または書き込み要求に基づき、所定のノード装置１００に対しコンテンツの読み出しまたは書き込みを行う。
【００２９】
このようなクラスタ型ストレージシステムにおいて、各ノード装置１００はそれぞれ、当該コンテンツの記憶先を示した配置情報１３１と、デバイス１１０が収容されるノード装置１００のＩＰアドレス等の識別情報を示したアドレス情報１３２とを備える。なお、この配置情報１３１が更新されたとき、この更新された配置情報１３１は、ノード装置１００は、他の各ノード装置１００へこの更新された配置情報１３１を送信する。そして、各ノード装置１００はこの更新後の配置情報１３１を基に当該コンテンツの読み出し先または書き込み先となるデバイス１１０を決定する。
【００３０】
例えば、ノード装置１００Ａが、クライアント装置２０から、コンテンツキー（Ｋ）を指定した読み書き要求（コンテンツの読み出し要求または書き込み要求）を受け付けると、このコンテンツキー（Ｋ）をハッシュ関数Ｈに代入してバスケットＩＤ（例えば、「１」）を計算する。そして、ノード装置１００Ａは、この計算したバスケットＩＤ（例えば、「１」）をキーとして、この配置情報１３１から、このバスケットＩＤに対応するデバイスＩＤ（例えば、「１１０Ｃ,１１０Ｅ，１１０Ｇ」）を検索する。また、ノード装置１００Ａは、アドレス情報１３２を参照して、この検索したデバイスＩＤに対応するデバイス１１０を収容するノード装置１００のノードＩＤ（ノード装置１００のＩＰアドレス等）を特定する。そして、この特定したノード装置１００のデバイス１１０それぞれに対し当該コンテンツの読み書き要求を送信する。そして、ノード装置１００Ａは、ノード装置１００Ｂ，１００Ｃ，１００Ｄから、その読み書き要求に対する実行結果を受信すると、この実行結果をクライアント装置２０へ返す。
【００３１】
ここで、各ノード装置１００の備える配置情報１３１は、図１に例示するようにバスケットＩＤごとに、このバスケットＩＤに対応する１以上のデバイスＩＤ（デバイス１１０の識別情報）を示した情報である。このバスケットＩＤは、前記したコンテンツキー（Ｋ）をハッシュ関数Ｈに代入して得られた値、Ｈ（Ｋ）である。なお、このようなハッシュ関数を用いてバスケットＩＤを決めるのは、システム内のバスケット間で負荷の偏りがないようにするためである。
【００３２】
なお、本実施の形態の配置情報１３１のバスケットＩＤに対応するデバイスＩＤ群は、入出力部１１経由の指示入力により設定可能である。つまり、従来のクラスタ型ストレージシステムにおいて、コンテンツを複数のデバイスに冗長化して保存する場合、そのデバイスの組み合わせはＤＨＴ空間上隣接するデバイスとしかできなかった。しかし、本システムのノード装置１００によれば、コンテンツを複数のデバイスに冗長化して保存する場合、このデバイスの組み合わせは管理者等が任意に設定可能である。よって、システム内のデバイス間でデータの移行等が行いやすくなる。
【００３３】
≪構成≫
引き続き図１を用いて、ノード装置１００の構成を説明する。図１に示すようにノード装置１００は、１以上のデバイス１１０と、コンテンツ管理部１０とを備える。このデバイス１１０は、前記したコンテンツキー（Ｋ）およびバスケットＩＤごとにコンテンツを記憶する。このデバイス１１０は、例えばＨＤＤ（Hard Disk Drive）等により実現される。また、コンテンツ管理部１０は、クライアント装置２０からコンテンツの読み出し要求または書き込み要求（以下、適宜「読み書き要求」と略す）を受け付けたとき、配置情報１３１を参照して、このコンテンツが保存されるデバイス１１０を検索する。この検索したデバイス１１０に対し、当該コンテンツの読み書き処理（読み出し処理または書き込み処理）を実行する。また、コンテンツ管理部１０は、クライアント装置２０等からの設定指示に基づき配置情報１３１の更新や作成を行ったり、この配置情報１３１を他のノード装置１００との間で交換したりする。
【００３４】
このようなコンテンツ管理部１０は、入出力部１１と、処理部１２と、記憶部１３とを備える。
【００３５】
入出力部１１は、他のノード装置１００やクライアント装置２０との間の通信を行うための通信インタフェースから構成される。また、処理部１２は、このノード装置１００が備えるＣＰＵ（Central Processing Unit）によるプログラム実行処理により実現される。さらに、記憶部１３は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ＨＤＤ（Hard Disk Drive）、フラッシュメモリ等の記憶媒体から構成される。なお、記憶部１３には、このノード装置１００の機能を実現するためのプログラムが格納される。
【００３６】
入出力部（入力部および出力部）１１は、コンテンツキーを含むコンテンツの読み書き要求の入力を受け付けたり、配置情報１３１の設定指示の入力を受け付けたりする。また、他のノード装置１００との間でコンテンツの送受信や、読み書き処理の結果の送受信を行ったりする。
【００３７】
処理部１２は、ノード装置１００のデバイス１１０に対し読み書き処理を実行したり、配置情報１３１を作成したりする。このような処理部１２は、ハッシュ計算部１２１と、配置情報管理部１２２と、アドレス情報管理部１２３と、ルーチング部１２４と、データ受信部１２５と、データ送信部１２６とを含んで構成される。
【００３８】
ハッシュ計算部１２１は、コンテンツキー（Ｋ）をハッシュ関数Ｈに代入して、ハッシュ値Ｈ（Ｋ）を計算する。
【００３９】
配置情報管理部１２２は、入出力部１１からの設定入力に基づき新規に配置情報１３１を作成したり、既存の配置情報１３１の内容を変更したりする。例えば、新規に配置情報１３１を作成するとき、配置情報管理部１２２は、コンテンツのコンテンツキーと、このコンテンツを冗長化して保存する複数のデバイス１１０のデバイスＩＤとを含む設定入力を受け付けたとき、ハッシュ計算部１２１は、このコンテンツキーのハッシュ値を基にバスケットＩＤを計算する。そして、配置情報管理部１２２は、このバスケットＩＤと、この設定入力に含まれるデバイスＩＤとを対応付けて配置情報１３１を作成する。また、この配置情報管理部１２２は、既存の配置情報１３１の内容を変更するときには以下のようにする。まず、配置情報管理部１２２は、変更対象となるコンテンツのコンテンツキーと、このコンテンツの新たな記憶先となるデバイス１１０のデバイスＩＤとを含む変更情報の入力を受け付けると、ハッシュ計算部１２１は、このコンテンツのコンテンツキーに対応するバスケットＩＤを計算する。そして、配置情報管理部１２２は、このバスケットＩＤをキーとして、配置情報１３１から、当該バスケットＩＤに対応するデバイスＩＤを検索する。そして、このデバイスＩＤに対応するデバイス１１０を、新たな記憶先となるデバイス１１０のデバイスＩＤに書き換える。さらに、この配置情報管理部１２２は、自身のノード装置１００で作成した配置情報１３１を他のノード装置１００へ送信したり、他のノード装置１００から配置情報１３１を受信したりする。つまり、ノード装置１００間での配置情報１３１の交換を行う。なお、作成または更新された配置情報１３１や、他のノード装置１００から受信した配置情報１３１は、記憶部１３に記憶される。
【００４０】
アドレス情報管理部１２３は、入出力部１１からの入力に基づきアドレス情報１３２の内容を更新する。
【００４１】
ルーチング部１２４は、入出力部１１経由で、クライアント装置２０から処理対象のコンテンツのコンテンツキー（Ｋ）を含むコンテンツの読み書き要求の入力を受け付けたとき、ハッシュ計算部１２１によりこのコンテンツキーのハッシュ値Ｈ（Ｋ）を計算する。そして、このハッシュ値Ｈ（Ｋ）から、このコンテンツキー（Ｋ）に対応するバスケットＩＤを求める。ここでは、ハッシュ値Ｈ（Ｋ）をそのままバスケットＩＤとして用いる場合を例に説明する。
【００４２】
ルーチング部１２４は、配置情報１３１からこのバスケットＩＤに対応するデバイスＩＤを検索する。そして、ルーチング部１２４は、このデバイスＩＤに対応するデバイス１１０を収容するノード装置１００のノードＩＤをアドレス情報１３２から検索する。そして、ルーチング部１２４は、検索したノードＩＤに対応するノード装置１００へ、当該デバイスＩＤに対応するデバイス１１０に記憶されるコンテンツの読み書き要求を送信する。なお、このルーチング部１２２は、記憶部１３の配置情報１３１が変更されたとき、この変更された配置情報１３１を参照してデバイスＩＤを検索する。
【００４３】
また、このルーチング部１２４が送信する読み出し要求は、コンテンツの読み出し先であるデバイス１１０のデバイスＩＤ、バスケットＩＤ、コンテンツキー（Ｋ）等を含む。また、書き込み要求は、コンテンツの書き込み先であるデバイス１１０のデバイスＩＤ、バスケットＩＤ、コンテンツキー（Ｋ）に加え、書き込み内容であるデータと、クライアント装置２０からこの書き込み要求を受信した時刻であるタイムスタンプとを含む。このタイムスタンプは、例えば「20070501100015（2007年5月1日10時00分15秒）」等である。
【００４４】
データ受信部１２５は、他のノード装置１００からコンテンツの読み書き要求の応答を受信する。受信した応答は、記憶部１３のＲＡＭ等に記憶しておく。
【００４５】
データ送信部１２６は、他のノード装置１００からコンテンツの読み書き要求を受信したとき、デバイス１１０に記憶される当該コンテンツの読み出し処理または書き込み処理を実行する。そして、その処理結果を、この読み書き要求の送信元であるノード装置１００へ返す。
【００４６】
なお、このコンテンツの読み書き要求の送信およびその要求結果（応答結果やコンテンツ等を含む）に用いられるプロトコルは、例えば、ＨＴＴＰ（HyperText Transfer Protocol）またはＨＴＴＰに相当するデータ通信プロトコルを用いる。
【００４７】
記憶部１３は、配置情報１３１と、アドレス情報１３２とを記憶する。
【００４８】
配置情報１３１は、前記したとおり、バスケットＩＤごとに、このバスケットＩＤに対応するコンテンツを記憶するデバイス１１０のデバイスＩＤを示した情報である。例えば、図１に例示するシステムにおいて、バスケットＩＤ「１」に対応するコンテンツを、デバイス１１０Ｃ，１１０Ｅ，１１０Ｇに冗長化して保存し、バスケットＩＤ「２」に対応するコンテンツを、デバイス１１０Ｄ，１１０Ｆ，１１０Ｈに冗長化して保存する場合、配置情報１３１のバスケットＩＤ「１」に対応するデバイスＩＤとして「１１０Ｃ，１１０Ｅ，１１０Ｇ」を設定しておく。また、この配置情報１３１のバスケットＩＤ「２」に対応するデバイスＩＤとして「１１０Ｄ，１１０Ｆ，１１０Ｈ」を設定しておく。
【００４９】
アドレス情報１３２は、デバイスＩＤごとに、そのデバイスＩＤに対応するデバイス１１０を収容するノード装置１００のノードＩＤを示した情報である。なお、このノードＩＤは、ＩＰアドレスとポート番号との組み合わせで記述するようにしてもよい。
【００５０】
なお、図１において、コンテンツ管理部１０とデバイス１１０とは同じノード装置１００内に含まれるものとして説明したが、これらを別個の装置として実現するようにしてもよい。
【００５１】
≪処理手順≫
次に、図１を参照しつつ、図２を用いてノード装置１００の処理手順を説明する。図２は、図１のノード装置が他のノード装置へコンテンツの読み書き要求を送信する手順を示した図である。ここでは、クライアント装置２０からのコンテンツの読み書き要求を受け付けたノード装置１００Ａが、このコンテンツを保存するデバイス１１０Ｃ，１１０Ｅ，１１０Ｇへ当該コンテンツの読み書き要求を送信する場合を例に説明する。
【００５２】
まず、ノード装置１００Ａのルーチング部１２４（図１参照）は、クライアント装置２０からコンテンツの読み出し要求または書き込み要求（読み書き要求）を受信する（Ｓ１０１）。なお、読み出し要求は、読み出し対象であるコンテンツのコンテンツキー（Ｋ）を含む。書き込み要求は、書き込み対象であるコンテンツのコンテンツキー（Ｋ）と、書き込み内容を示すデータとを含む。
【００５３】
ノード装置１００Ａのハッシュ計算部１２１（図１参照）は、受信したコンテンツキー（Ｋ）を基にバスケットＩＤを計算する（Ｓ１０２）。そして、ルーチング部１２４は、この計算したバスケットＩＤと配置情報１３１とを参照して、このコンテンツの書き込み先であるデバイス１１０Ｃ,１１０Ｅ，１１０ＧのデバイスＩＤを検索する（Ｓ１０３）。次に、ルーチング部１２４は、検索したデバイスＩＤをキーとしてアドレス情報１３２から、このデバイスＩＤに対応するデバイス１１０（デバイス１１０Ｃ,１１０Ｅ，１１０Ｇ）を収容するノード装置１００（ノード装置１００Ｂ，１００Ｃ，１００Ｄ）のアドレス（ノードＩＤ）を検索する（Ｓ１０４）。
【００５４】
そして、ルーチング部１２４は、この検索したアドレスを基に、このコンテンツの書き込み先であるデバイス１１０Ｃ，１１０Ｅ，１１０Ｇを収容するノード装置１００Ｂ，１００Ｃ，１００Ｄへ、当該コンテンツの読み出し要求または書き込み要求（読み書き要求）を送信する（Ｓ１０５）。なお、ここで送信する読み出し要求は、前記したとおり、デバイスＩＤ、バスケットＩＤ、コンテンツキー（Ｋ）を含むものである。また、書き込み要求は、デバイスＩＤ、バスケットＩＤ、コンテンツキー（Ｋ）、書き込み内容を示すデータに加え、この書き込み要求を受け付けた日時を示すタイムスタンプを含む。
【００５５】
次に、図１を参照しつつ、図３を用いて、図２に示す手順によりコンテンツの読み書き要求を送信したノード装置１００Ａが、クライアント装置２０へその読み書き要求の応答を返すときの処理手順を説明する。図３（ａ）は、図１のノード装置が、コンテンツの読み書き要求に対する応答をクライアント装置へ送信する手順を示した図であり、図３（ｂ）は、（ａ）におけるＳ２０２の処理を概念的に示した図である。
【００５６】
図２においてノード装置１００Ａからコンテンツの読み出し要求または書き込み要求（読み書き要求）を受信したノード装置１００Ｂ，１００Ｃ，１００Ｄは、データ送信部１２６（図1参照）により、このコンテンツの読み出し要求または書き込み要求（読み書き要求）に対する応答をノード装置１００Ａへ送信する（Ｓ２０１）。
【００５７】
そして、ノード装置１００Ａのデータ受信部１２５は、ノード装置１００Ｂ，１００Ｃ，１００Ｄから、この読み出し要求または書き込み要求（読み書き要求）に対する応答を受信する。ここで、ルーチング部１２４には、データ受信部１２５で受信した応答の数が所定の定足数を充足したと判断したとき（Ｓ２０２）、この受信した応答をクライアント装置２０へ返す。なお、図３（ａ）に示すように読み出し要求に対する応答および書き込み要求に対する応答は、それぞれ当該要求に基づく処理の結果（処理の成功または失敗）を示したものである。なお、読み出し処理に成功した場合、その応答には、読み出したコンテンツが含まれる。
【００５８】
このようにすることで、例えば、当該コンテンツを記憶するノード装置１００の数が多数であった場合でも、そのノード装置１００すべてから応答を待たずにクライアント装置２０へ応答を返すことができる。
【００５９】
ここで、図３（ｂ）を用いてＳ２０２における定足数充足の判断処理を、具体例を用いて説明する。ここでは、読み出し要求または書き込み要求（読み書き要求）を送信したノード装置１００の数が「４」であり、定足数を「２」とした場合を例に説明する。
【００６０】
例えば、書き込み要求の場合、ノード装置１００から、他のノード装置１００へ書き込み要求を送信し、この要求に対する結果ＯＫ（成功）の受信数が「２」に達したとき、この時点でノード装置１００はクライアント装置２０へＯＫを返送する（例１、例２参照）。つまり、受信した応答の中に結果ＮＧが含まれていた場合、この結果ＮＧの応答はカウントせず、結果ＯＫの応答の受信数が「２」に達した時点でノード装置１００はクライアント装置２０へＯＫを返送する（例２参照）。そして、今まで受信した書き込み要求に対する応答をクライアント装置２０へ送信する。このように結果ＯＫの応答の受信数が「２」に達した後、ノード装置１００が応答を受信しても、その応答については無視する。なお、この書き込み要求に関する定足数は、冗長化されたデバイス１１０の数そのものでもよいし、冗長化されたデバイス１１０よりも少ない数であってもよい。
【００６１】
また、読み出し要求の場合、ノード装置１００から、他のノード装置１００へ読み出し要求を送信し、最新のタイムスタンプ（例えば「Ｔｉｍｅ＝３」）を持つコンテンツの受信数が「２」に達した時点でノード装置１００はクライアント装置２０へＯＫを返送する（例３、例４参照）。つまり、（１）受信した応答の中に結果ＮＧのものが含まれていた場合、および、（２）タイムスタンプの値が最新のものではないコンテンツ（例えば「Ｔｉｍｅ＝２」）が含まれていた場合（例４参照）、この応答はカウントしない。そして、この最新のタイムスタンプを持つコンテンツの受信数が「２」に達した時点で、ノード装置１００はクライアント装置２０へＯＫを返送する。そして、今まで受信したコンテンツをクライアント装置２０へ送信する。ここで、結果ＯＫの応答の受信数が「２」に達した後、ノード装置１００が受信した応答については、ノード装置１００はこの応答をクライアント装置２０へ返さない。なお、ノード装置１００において最新のコンテンツの受信数が「２」に達する前にコンテンツ受信処理が終了した場合、受信した分のコンテンツをクライアント装置２０へ返すようにしてもよい。
【００６２】
≪具体例≫
次に、図４を用いて、クラスタ型ストレージシステムのノード装置１００に負荷の集中が起こった場合における、配置情報１３１の書き換えについて、具体例を用いて説明する。図４（ａ）は、本実施の形態のクラスタ型ストレージシステムにおいて各ノード装置の収容するデバイスおよび各ノード装置における負荷の相対比率を例示した図である。図４（ｂ）は、書き換え前の配置情報と、書き換え後の配置情報とを例示した図である。
【００６３】
ここでは、クラスタ型ストレージシステムにおいてデータセンタＡ，Ｂ，Ｃがそれぞれ図４に示すようなデバイスを収容するノード装置１００（１００Ａ〜１００Ｌ）を備えている場合を例に説明する。このときの各ノード装置１００の配置情報１３１の内容は、図４（ｂ）の配置情報１３１Ａに示すとおりである。各ノード装置１００の左に付記された数値は、このクラスタ型ストレージシステムの各ノード装置１００における負荷の相対的比率を示す。このようなクラスタ型ストレージシステムにおいて、ノード装置１００Ｃ，１００Ｇ，１００Ｋの負荷が比較的高く（負荷の相対的比率「２」）、ノード装置１００Ｄ，１００Ｈ，１００Ｌの負荷が比較的低く（相対的比率「０．６７」）なったとする。
【００６４】
このような状態において、ノード装置１００間の負荷の偏りを解消するためには、図４（ａ）のノード装置１００Ｃ，１００Ｇ，１００Ｋの負荷を従来の１／２倍とし、ノード装置１００Ｄ，１００Ｈ，１００Ｌの負荷を従来の３／２倍とすればよい。そのためには、例えば、バスケットＩＤ「１２，１３」に対応するコンテンツの書き込み先を、それぞれデバイス０４１，１４１，２４１およびデバイス０４２，１４２，２４２に変更すればよい。このような変更に伴い、配置情報管理部１２２は、管理者等の指示入力に基づき、配置情報１３１Ｂを作成する。この配置情報１３１Ｂは、配置情報１３１ＡにおけるバスケットＩＤ「１２，１３」のコンテンツの書き込み先をノード装置１００Ｃ，１００Ｇ，１００Ｋから、ノード装置１００Ｃ，１００Ｇ，１００Ｋに書き換えたものである。そして、この書き換え後の配置情報１３１Ｂは各ノード装置１００へ伝播し、当該バスケットＩＤに対応するコンテンツに対する読み書き処理は、配置情報１３１Ｂに示されるノード装置１００に対し行われるようになる。
【００６５】
このようにすることで、各ノード装置１００に冗長化してコンテンツを保存するシステムにおいて特定のノード装置１００（またはデバイス１１０）に負荷が集中した場合、その負荷の集中を解消するように配置情報１３１を書き換えることができる。
【００６６】
また、このような場合以外にも、配置情報１３１の各バスケット（バスケットＩＤ）に対応するデバイスＩＤは、管理者等が書き換え可能である。よって、コンテンツを冗長化して保存するデバイス１１０の組み合わせをシステムの運用環境に合わせて、ＤＨＴ空間上で自由に選択することができる。
【００６７】
なお、システム内に、ノード装置１００それぞれにおける処理負荷を監視する監視装置を設けてもよい。そして、この監視装置において、ノード装置１００間の処理負荷の偏りを検出したとき、この処理負荷の値をノード装置１００へ送信する。そして、ノード装置１００は、この処理負荷の値を参照して、配置情報１３１において、処理負荷が比較的高いノード装置１００に対応するバスケットの数を低減し、処理負荷が比較的低いノード装置１００に対応するバスケットの数を増加させるようにしてもよい。例えば、ノード装置１００は、配置情報１３１において、処理負荷が比較的高いノード装置１００のデバイス１１０に対応するバスケットＩＤについて、このバスケットＩＤに対応するデバイス１１０を、処理負荷が比較的低いノード装置１００のデバイス１１０へ変更するようにしてもよい。
【００６８】
また、前記した配置情報１３１に用いられるバスケットＩＤは、コンテンツキー（Ｋ）のハッシュ値Ｈ（Ｋ）としたが、これに限定されない。例えば、管理者等が用意しておきたいバスケット数よりも充分多い種類のハッシュ値が得られるハッシュ関数Ｈ’によりハッシュ値Ｈ’（Ｋ）を得て、そのマスク値をバスケットＩＤとしてもよい。従って、バスケット数が２１６個必要である場合、２３２種類のハッシュ値が得られるハッシュ関数ＣＲＣ３２によってコンテンツキー（Ｋ）のハッシュ値を得て、その下位１６ビットのマスク値をバスケットＩＤとしてもよい。
【００６９】
また、デバイス１１０内にコンテンツを保存（記憶）する方法は様々な方法が考えられる。例えば、（１）デバイス１１０内に１つのデータベースを置き、そのデータベースにバスケットＩＤと、コンテンツキー（Ｋ）と、コンテンツとを関連付けて保存してもよいし、（２）デバイス１１０内にバスケットＩＤごとにデータベースを置き、そのデータベースそれぞれにおいてコンテンツキー（Ｋ）とコンテンツとを関連付けて保存してもよい。また、（３）バスケットＩＤ、コンテンツキー（Ｋ）をディレクトリ名やファイル名として、コンテンツをファイルシステムに保存するようにしてもよい。
【図面の簡単な説明】
【００７０】
【図１】本実施の形態のクラスタ型ストレージシステムの構成例を示した図である。
【図２】図１のノード装置が他のノード装置へコンテンツの読み書き要求を送信する手順を示した図である
【図３】（ａ）は、図１のノード装置が、コンテンツの読み書き要求に対する応答をクライアント装置へ送信する手順を示した図であり、（ｂ）は、（ａ）におけるＳ２０２の処理を概念的に示した図である。
【図４】（ａ）は、本実施の形態のクラスタ型ストレージシステムにおいて各ノード装置の収容するデバイスおよび各ノード装置における負荷の相対比率を例示した図であり、（ｂ）は、書き換え前の配置情報と、書き換え後の配置情報とを例示した図である。
【符号の説明】
【００７１】
１０    コンテンツ管理部
１１    入出力部
１２    処理部
１３    記憶部
２０    クライアント装置
１００（１００Ａ，１００Ｂ，１００Ｃ，１００Ｄ）ノード装置
１１０（１１０Ｃ，１１０Ｄ，１１０Ｅ，１１０Ｆ，１１０Ｇ，１１０Ｈ）  デバイス
１２１  ハッシュ計算部
１２２  配置情報管理部
１２３  アドレス情報管理部
１２４  ルーチング部
１２５  データ受信部
１２６  データ送信部
１３１（１３１Ａ，１３１Ｂ）  配置情報
１３２  アドレス情報
【図１】
2009289161.tif 000003
【図２】
2009289161.tif 000004
【図３】
2009289161.tif 000005
【図４】
2009289161.tif 000006