(57)【要約】【課題】クラスタ型ストレージシステムにおいてデータの移行状態にかかわらず、データの信頼性を確保する。【解決手段】システム内のノード装置１０は配置制御情報１３５にシステム内の各ノード装置１０が、どのリビジョン番号のコンテンツ配置情報１３１を用いて読み書き処理を行うかを定義した動作モード情報１３２を含める。この動作モード情報１３２を受信したノード装置１０は、この動作モード情報１３２に示されたコンテンツ配置情報１３１すべてを参照して読み書き処理の対象となるノード装置１０を決定する。よって、この動作モード情報１３２にデータ移行前のコンテンツ配置情報１３１Ａおよびデータ移行後のコンテンツ配置情報１３１Ｂ両方のリビジョン番号を指示しておけば、ノード装置１０はこの両方のノード装置１０に読み書き処理を実行するので、データの信頼性を確保できる。【選択図】図１
2009289089.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶するとともに他のノード装置のデータの読み出しおよび書き込みを実行するノード装置を複数備えるクラスタ型ストレージシステムにおける前記ノード装置であって、
前記読み出しまたは書き込みの対象となるデータの識別情報を含む前記データの処理要求の入力を受け付ける入力部と、
前記データの識別情報ごとに、このデータを記憶する前記ノード装置の識別情報を示した配置情報と、当該ノード装置において参照すべき前記配置情報のリビジョン番号を示した動作モード情報とを記憶する配置情報記憶部と、
前記配置情報記憶部に記憶された１以上の前記配置情報の中から、前記配置情報記憶部に記憶された動作モード情報に示されるリビジョン番号の配置情報を選択し、この選択した配置情報と前記入力されたデータの識別情報とを参照して、前記データの読み出し先または書き込み先である前記ノード装置を選択する制御部と、
前記選択したノード装置へ、前記識別情報に対応するデータの読み出し要求または書き込み要求を送信するリクエスト送信部と、
前記ノード装置から送信された、前記読み出し対象のデータまたは前記書き込み結果を受信するデータ受信部と、
前記データを記憶するノード装置を変更するため、前記入力部経由で、前記変更対象となるデータの識別情報および当該変更後のノード装置の識別情報の入力を受け付けたとき、前記データの識別情報と当該変更後のノード装置の識別情報を対応付けた前記配置情報を作成し、この作成した配置情報を前記配置情報記憶部に記憶する配置情報作成部と、
前記作成された配置情報のリビジョン番号を発行し、前記発行したリビジョン番号を前記作成された配置情報に対応付けて前記配置情報記憶部に記憶するリビジョン番号発行部と、
前記入力部経由で、前記動作モード情報に含める前記配置情報のリビジョン番号の入力を受け付け、前記入力されたリビジョン番号を示した前記動作モード情報を作成し、この作成した動作モード情報を前記配置情報記憶部に記憶する動作モード情報作成部と、
前記作成された配置情報および動作モード情報を含む配置制御情報を、他の前記ノード装置へ送信する配置制御情報送信部と、
他の前記ノード装置から送信された前記配置制御情報を受信したとき、この受信した配置制御情報に含まれる前記配置情報および前記動作モード情報を前記配置情報記憶部に記憶する配置制御情報受信部とを備え、
前記制御部は、前記配置情報を選択するとき、前記受信した前記配置情報および前記動作モード情報を含む前記配置情報記憶部における前記動作モード情報を参照して、この配置情報記憶部に記憶された前記配置情報から、当該ノード装置において参照すべき１以上の配置情報を選択することを特徴とするノード装置。
【請求項２】
前記制御部は、前記選択した配置情報が複数あり、このうち、同じデータの識別情報に対応するノード装置の識別情報の異なる配置情報があったとき、この配置情報それぞれにおける前記データの識別情報に対応するノード装置すべてを、当該データの読み出し先または書き込み先のノード装置として選択することを特徴とする請求項１に記載のノード装置。
【請求項３】
前記制御部は、前記配置情報記憶部に記憶された配置情報から参照すべき配置情報を選択するとき、前記配置情報記憶部に記憶された動作モード情報すべてを参照して、前記配置情報を選択することを特徴とする請求項１または請求項２に記載のノード装置。
【請求項４】
前記動作モード情報作成部は、前記入出力部経由で前記動作モード情報の親となる親動作モード情報の識別情報の入力を受け付けたとき、前記親動作モード情報の識別情報を含む動作モード情報を作成し、
前記制御部は、前記配置情報記憶部に記憶された配置情報から参照すべき配置情報を選択するとき、前記受信した動作モード情報を含む前記配置制御情報記憶部の動作モード情報それぞれの親動作モード情報の識別情報を参照して、前記配置制御情報記憶部に記憶される動作モード情報の中から、この配置制御情報記憶部のいずれの動作モード情報の親動作モード情報になっていないすべての動作モード情報を参照して、前記配置情報を選択することを特徴とする請求項３に記載のノード装置。
【請求項５】
前記ノード装置が記憶するデータは、このデータの更新日時を示すタイムスタンプの値を含み、
前記データ受信部は、同じ識別情報のデータを複数の前記ノード装置から受信したとき、前記データのタイムスタンプの値を参照して、受信したデータのうち最新のデータを前記データの読み出し結果として選択することを特徴とする請求項１ないし請求項４のいずれか１項に記載のノード装置。
【請求項６】
請求項１ないし請求項５のいずれか１項に記載のノード装置を複数含んでなることを特徴とするクラスタ型ストレージシステム。
【請求項７】
データを記憶するとともに他のノード装置のデータの読み出しおよび書き込みを実行するノード装置を複数備えるクラスタ型ストレージシステムにおいて、
前記データの識別情報ごとに、このデータを記憶する前記ノード装置の識別情報を示した配置情報と、当該ノード装置において参照すべき前記配置情報のリビジョン番号を示した動作モード情報とを記憶する記憶部を備え、この記憶部に記憶される配置情報を参照して、前記データの読み出し先または書き込み先である前記ノード装置を選択する前記ノード装置が、
前記読み出しまたは書き込みの対象となるデータの識別情報を含む前記データの処理要求の入力を受け付けるステップと、
前記記憶部に記憶された１以上の前記配置情報の中から、前記記憶部に記憶された動作モード情報に示されるリビジョン番号の配置情報を選択するステップと、
この選択した配置情報と前記入力されたデータの識別情報とを参照して、前記データの読み出し先または書き込み先である前記ノード装置を選択するステップと、
前記選択したノード装置へ、前記識別情報に対応するデータの読み出し要求または書き込み要求を送信するステップと、
前記ノード装置から送信された、前記読み出し対象のデータまたは前記書き込み結果を受信するステップと、
前記データを記憶するノード装置を変更するため、前記入力部経由で、前記変更対象となるデータの識別情報および当該変更後のノード装置の識別情報の入力を受け付けたとき、
前記データの識別情報と当該変更後のノード装置の識別情報を対応付けた前記配置情報を作成し、この作成した配置情報を前記記憶部に記憶するステップと、
前記作成された配置情報のリビジョン番号を発行し、前記発行したリビジョン番号を前記作成された配置情報に対応付けて前記記憶部に記憶するステップと、
前記動作モード情報に含める前記配置情報のリビジョン番号の入力を受け付けたとき、前記入力されたリビジョン番号を示した前記動作モード情報を作成し、この作成した動作モード情報を前記配置情報記憶部に記憶するステップと、
前記作成された配置情報および前記作成された動作モード情報を示した配置制御情報を、他の前記ノード装置へ送信するステップと、
他の前記ノード装置から送信された前記配置制御情報を受信したとき、
この受信した配置制御情報に含まれる前記配置情報および前記動作モード情報を前記記憶部に記憶するステップとを実行し、
前記配置情報を選択するステップにおいて、
前記受信した前記配置情報および前記動作モード情報を記憶した前記記憶部における前記動作モード情報を参照して、この記憶部に記憶された前記配置情報から、当該ノード装置において参照すべき配置情報を選択することを特徴とするデータ制御方法。
【請求項８】
請求項７に記載のデータ制御方法をコンピュータである前記ノード装置に実行させるためのデータ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスタ型ストレージシステムに関する。
【背景技術】
【０００２】
従来、ネットワークに接続された複数のノード装置内のデバイスにデータ（コンテンツ）を保存するクラスタ型ストレージシステムがある。このクラスタ型ストレージシステムによれば、データのＩ／Ｏ（Input/Output）性能、つまり、データのスループットや単位時間あたりのＩ／Ｏ数を向上させることができる。また、データ保存容量のスケーラビリティを向上させることができる。
【０００３】
このようなクラスタ型ストレージシステム（以下、適宜、システムと略す）として、Amazon社が開発したDynamoがある（非特許文献１参照）。このDynamoは、データの保存先となるノード装置を分散ハッシュテーブル（DHT:Distributed Hash Table)を用いて割り当てることで、特定のノード装置に負荷が集中することを防止している。なお、この分散ハッシュテーブルは、ノード装置のアドレスと、コンテンツキー（データの識別情報）のハッシュ値をＤＨＴ空間に写像したものである。
【０００４】
このDynamoにおいて、ＤＨＴ空間上におけるコンテンツキーと、そのデータを保存するノード装置との対応関係は配置情報に設定される。そして、この配置情報は、ノード装置間のデータ交換によってシステム全体に伝播する。各ノード装置は、クライアント装置等からデータの読み出し要求や書き込み要求を受け付けると、この配置情報をもとに、データの読み出し先や書き込み先となるノード装置を決定する。そして、このノード装置を収容するノード装置に対しデータの読み出しや書き込み（以下、適宜「読み書き」と略す）を実行し、その実行結果をクライアント装置等へ返す。このDynamoにおいて、データの読み書き先となるノード装置を変更するためには、まず管理者等が、任意のノード装置を１つ選択し、このノード装置に記憶される配置情報を書き換える。この書き換え後の配置情報を、このノード装置から他のノード装置へ送信する。すると、この書き換え後の配置情報が各ノード装置に伝播する。この後、システム内の各ノード装置はこの書き換え後の配置情報に基づいてデータの読み書き先となるノード装置を決定するようになる。
【非特許文献１】Dynamo、[online]、[平成20年5月9日検索]、インターネット、<URL: http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html >
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、システム内のあるノード装置に記憶されているデータを、別のノード装置に移行する場合、この移行処理が完了するまでには時間がかかることがある。また、このようなデータの移行処理が正常に終了しない場合もある。このような場合において、ノード装置が、書き換え後の配置情報を参照して、データの読み書き先となるノード装置を決定すると、データの読み書きに関し信頼性が損なわれるおそれがある。
【０００６】
例えば、ノード装置が、この書き換え後の配置情報を参照して、データの移行先のノード装置に読み書きを実行しようとしたとき、そのデータがまだ移行先のノード装置に移行しきっていない場合もある。このような場合、ノード装置は移行先のノード装置に対し読み書きを実行しても、そのデータに関する読み書きを完了することができない。つまり、ノード装置は、まだ移行元のノード装置に残っているデータについては、読み書きされないので対象データすべてについての読み書きを完了することができない。
【０００７】
そこで、本発明は前記した問題を解決し、クラスタ型ストレージシステムにおいてデータの移行をした場合でも、データの読み書きに関する信頼性を確保することを目的とする。
【課題を解決するための手段】
【０００８】
請求項１に記載の発明は、データを記憶するとともに他のノード装置のデータの読み出しおよび書き込みを実行するノード装置を複数備えるクラスタ型ストレージシステムにおける前記ノード装置であって、前記読み出しまたは書き込みの対象となるデータの識別情報を含む前記データの処理要求の入力を受け付ける入力部と、前記データの識別情報ごとに、このデータを記憶する前記ノード装置の識別情報を示した配置情報と、当該ノード装置において参照すべき前記配置情報のリビジョン番号を示した動作モード情報とを記憶する配置情報記憶部と、前記配置情報記憶部に記憶された１以上の前記配置情報の中から、前記配置情報記憶部に記憶された動作モード情報に示されるリビジョン番号の配置情報を選択し、この選択した配置情報と前記入力されたデータの識別情報とを参照して、前記データの読み出し先または書き込み先である前記ノード装置を選択する制御部と、前記選択したノード装置へ、前記識別情報に対応するデータの読み出し要求または書き込み要求を送信するリクエスト送信部と、前記ノード装置から送信された、前記読み出し対象のデータまたは前記書き込み結果を受信するデータ受信部と、前記データを記憶するノード装置を変更するため、前記入力部経由で、前記変更対象となるデータの識別情報および当該変更後のノード装置の識別情報の入力を受け付けたとき、前記データの識別情報と当該変更後のノード装置の識別情報を対応付けた前記配置情報を作成し、この作成した配置情報を前記配置情報記憶部に記憶する配置情報作成部と、前記作成された配置情報のリビジョン番号を発行し、前記発行したリビジョン番号を前記作成された配置情報に対応付けて前記配置情報記憶部に記憶するリビジョン番号発行部と、前記入力部経由で、前記動作モード情報に含める前記配置情報のリビジョン番号の入力を受け付け、前記入力されたリビジョン番号を示した前記動作モード情報を作成し、この作成した動作モード情報を前記配置情報記憶部に記憶する動作モード情報作成部と、前記作成された配置情報および動作モード情報を含む配置制御情報を、他の前記ノード装置へ送信する配置制御情報送信部と、他の前記ノード装置から送信された前記配置制御情報を受信したとき、この受信した配置制御情報に含まれる前記配置情報および前記動作モード情報を前記配置情報記憶部に記憶する配置制御情報受信部とを備え、前記制御部は、前記配置情報を選択するとき、前記受信した前記配置情報および前記動作モード情報を記憶した前記配置情報記憶部における前記動作モード情報を参照して、この配置情報記憶部に記憶された前記配置情報から、当該ノード装置において参照すべき配置情報を選択することを特徴とする。
【０００９】
請求項２に記載の発明は、請求項１に記載のノード装置の前記制御部が、前記選択した配置情報が複数あり、このうち、同じデータの識別情報に対応するノード装置の識別情報の異なる配置情報があったとき、この配置情報それぞれにおける前記データの識別情報に対応するノード装置すべてを、当該データの読み出し先または書き込み先のノード装置として選択することを特徴とする。
【００１０】
請求項７に記載に発明は、請求項１ないし請求項６のいずれか１項に記載のノード装置を複数含んでなることを特徴とするクラスタ型ストレージシステムである。
【００１１】
請求項８に記載の発明は、データを記憶するとともに他のノード装置のデータの読み出しおよび書き込みを実行するノード装置を複数備えるクラスタ型ストレージシステムにおいて、前記データの識別情報ごとに、このデータを記憶する前記ノード装置の識別情報を示した配置情報と、当該ノード装置において参照すべき前記配置情報のリビジョン番号を示した動作モード情報とを記憶する記憶部を備え、この記憶部に記憶される配置情報を参照して、前記データの読み出し先または書き込み先である前記ノード装置を選択する前記ノード装置が、前記読み出しまたは書き込みの対象となるデータの識別情報を含む前記データの処理要求の入力を受け付けるステップと、前記記憶部に記憶された１以上の前記配置情報の中から、前記記憶部に記憶された動作モード情報に示されるリビジョン番号の配置情報を選択するステップと、この選択した配置情報と前記入力されたデータの識別情報とを参照して、前記データの読み出し先または書き込み先である前記ノード装置を選択するステップと、前記選択したノード装置へ、前記識別情報に対応するデータの読み出し要求または書き込み要求を送信するステップと、前記ノード装置から送信された、前記読み出し対象のデータまたは前記書き込み結果を受信するステップと、前記データを記憶するノード装置を変更するため、前記入力部経由で、前記変更対象となるデータの識別情報および当該変更後のノード装置の識別情報の入力を受け付けたとき、前記データの識別情報と当該変更後のノード装置の識別情報を対応付けた前記配置情報を作成し、この作成した配置情報を前記記憶部に記憶するステップと、前記作成された配置情報のリビジョン番号を発行し、前記発行したリビジョン番号を前記作成された配置情報に対応付けて前記記憶部に記憶するステップと、前記動作モード情報に含める前記配置情報のリビジョン番号の入力を受け付けたとき、前記入力されたリビジョン番号を示した前記動作モード情報を作成し、この作成した動作モード情報を前記配置情報記憶部に記憶するステップと、前記作成された配置情報および前記作成された動作モード情報を示した配置制御情報を、他の前記ノード装置へ送信するステップと、他の前記ノード装置から送信された前記配置制御情報を受信したとき、この受信した配置制御情報に含まれる前記配置情報および前記動作モード情報を前記記憶部に記憶するステップとを実行し、前記配置情報を選択するステップにおいて、前記受信した前記配置情報および前記動作モード情報を記憶した前記記憶部における前記動作モード情報を参照して、この記憶部に記憶された前記配置情報から、当該ノード装置において参照すべき配置情報を選択することを特徴とするデータ制御方法とした。
【００１２】
このようにすることで、クラスタ型ストレージシステムの各ノード装置は、動作モード情報を参照して、どの配置情報（コンテンツ配置情報）を参照してデータの読み書き処理を行うかを判断する。よって、クラスタ型ストレージシステムの管理者等が、動作モード情報に各ノード装置に参照させたいコンテンツ配置情報の識別情報（リビジョン番号）を列記し、この動作モード情報を各ノード装置に伝播させることで、各ノード装置が参照する配置情報を制御することができる。従って、例えば、この動作モード情報に、（１）そのデータの読み書き先が移行元のノード装置である配置情報と、（２）そのデータの読み書き先が移行先のノード装置の配置情報と両方のコンテンツ配置情報の識別情報を列記したものを配置制御情報に含めて他のノード装置へ送信する。このようにすることで、ノード装置間でデータの移行に伴い、当該データに関する読み書き先のノード装置として、そのデータの移行元のノード装置と、そのデータの移行先のノード装置との両方を各ノード装置に選択させることができる。よって、ノード装置は、データの移行をした場合でも、データの読み書きに関する信頼性を確保することができる。
【００１３】
請求項３に記載の発明は、請求項１または請求項２に記載のノード装置の前記制御部が、前記配置情報記憶部に記憶された配置情報から参照すべき配置情報を選択するとき、前記配置情報記憶部に記憶された動作モード情報すべてを参照して、前記配置情報を選択することを特徴とする。
【００１４】
このようにすることで、ノード装置が、他の複数のノード装置から、このノード装置それぞれおいて独立に更新された動作モード情報を受信した場合でも、そのすべての動作モード情報を用いて、自身が参照すべき配置情報を選択する。例えば、ノード装置が、ノード装置Ａからは配置情報Ａの識別情報（リビジョン番号）を示した動作モード情報を受信し、ノード装置Ｂからは配置情報Ｂの識別情報を示した動作モード情報を受信した場合を考える。この場合において、同じ識別情報（コンテンツキー）を持つデータに対するデータの読み書き先として、その配置情報Ａ，Ｂ間で異なるノード装置Ａ，Ｂが示されていたとき、ノード装置は、そのノード装置Ａ，Ｂそれぞれをデータの読み書き先として選択する。つまり、ノード装置は、ノード装置それぞれにおける配置情報の内容を損なわずに処理を行うことができ、データの読み書きに関する信頼性を確保することができる。
【００１５】
請求項４に記載の発明は、請求項３に記載のノード装置の前記動作モード情報作成部が、前記入出力部経由で前記動作モード情報の親となる親動作モード情報の識別情報の入力を受け付けたとき、前記親動作モード情報の識別情報を含む動作モード情報を作成し、前記制御部は、前記配置情報記憶部に記憶された配置情報から参照すべき配置情報を選択するとき、前記受信した動作モード情報を含む前記配置制御情報記憶部の動作モード情報それぞれの親動作モード情報の識別情報を参照して、前記配置制御情報記憶部に記憶される動作モード情報の中から、この配置制御情報記憶部のいずれの動作モード情報の親動作モード情報になっていないすべての動作モード情報を参照して、前記配置情報を選択することを特徴とする。
【００１６】
このようにすることで、ノード装置は、自身が記憶する動作モード情報の中から、いずれの動作モード情報の親にもなっていない動作モード情報を参照して配置情報を選択する。つまり、ノード装置は、配置制御情報記憶部に記憶されるすべての動作モード情報を参照して配置情報を選択するが、このうち親子関係になっている動作モード情報を発見した場合、子である動作モード情報（新しい動作モード情報）の方を参照して配置情報を選択する。よって、ノード装置は、自身が記憶する動作モード情報のうち、より新しい動作モード情報を参照して配置情報を選択できる。
【００１７】
請求項６に記載の発明は、請求項１ないし請求項５のいずれか１項に記載のノード装置が記憶するデータは、このデータの更新日時を示すタイムスタンプの値を含み、前記データ受信部は、同じ識別情報のデータを複数の前記ノード装置から受信したとき、前記データのタイムスタンプの値を参照して、受信したデータのうち最新のデータを前記データの読み出し結果として選択することを特徴とする。
【００１８】
このようにすることで、ノード装置が、当該コンテンツの書き込み処理を複数のノード装置に対し実行した場合でも、そのうち最新のデータを読み出し結果として選択するので、読み出したデータの信頼性を確保することができる。
【００１９】
請求項９に記載の発明は、請求項８に記載のデータ制御方法をコンピュータである前記ノード装置に実行させるためのデータ制御プログラムである。
【００２０】
このようなデータ制御プログラムによれば、一般的なコンピュータに請求項８に記載のデータ制御方法を実行させることができる。
【発明の効果】
【００２１】
本発明によれば、クラスタ型ストレージシステムにおいてデータの移行をした場合でも、データの読み書きに関する信頼性を確保することができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明を実施するための最良の形態（以下、実施の形態という）について説明する。
【００２３】
≪概要≫
まず、本実施の形態のクラスタ型ストレージシステムの概要を説明する。図１は、本実施の形態のクラスタ型ストレージシステムの概要を概念的に示した図である。このクラスタ型ストレージシステムにおけるノード装置１０およびクライアント装置２０の数は図１に示す数に限定されない。
【００２４】
このクラスタ型ストレージシステムは、複数のノード装置１０（例えば、ノード装置１０Ａ，１０Ｂ，１０Ｃ）を含んで構成される。このノード装置１０は、それぞれデータ（コンテンツ）を記憶するコンテンツ記憶部１３４を備える。また、このノード装置１０は、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）等の通信プロトコルによりネットワーク経由で他のノード装置１０やクライアント装置２０との間で通信を行う。このノード装置１０は、クライアント装置２０からコンテンツの読み出し処理または書き込み処理（以下、適宜「読み書き処理」と略す）の対象となるコンテンツキー（コンテンツの識別情報）の入力を受け付けると、コンテンツ配置情報（配置情報）１３１を参照して、当該コンテンツを記憶するノード装置１０を特定する。つまり、ノード装置１０はこのコンテンツの読み出し先または書き込み先（以下、適宜「読み書き先」と略す）となるノード装置１０を特定する。そして、この特定したノード装置１０へ当該コンテンツの読み書き処理を実行し、その実行結果をクライアント装置２０へ返す。
【００２５】
なお、このコンテンツ配置情報１３１は、図１に例示するように、バスケットＩＤごとに、そのバスケットＩＤに対応するコンテンツの読み書き先である（つまり、このコンテンツを記憶する）ノード装置１０の識別情報（ノードＩＤ）を示した情報である。このバスケットＩＤは、例えば、コンテンツキーＫをハッシュ関数Ｈに代入して計算したハッシュ値Ｈ（Ｋ）である。なお、コンテンツ配置情報１３１は、１つのノード装置１０に複数記憶されることもある。動作モード情報１３２は、当該ノード装置１０において参照すべき１以上のコンテンツ配置情報１３１の識別情報（リビジョン番号、例えば「ｒｅｖ１」等）を示した情報である。
【００２６】
ノード装置１０は、この動作モード情報１３２を参照して、自身が記憶するコンテンツ配置情報１３１の中から、参照すべきコンテンツ配置情報１３１を決定する。なお、更新されたコンテンツ配置情報１３１および動作モード情報１３２は、配置制御情報１３５としてノード装置１０間で交換される。このようにすることで、各ノード装置１０は、コンテンツ配置情報１３１が更新された場合も、その更新されたコンテンツ配置情報１３１を参照してコンテンツの読み書き先となるノード装置１０を決定できる。ここではノード装置１０Ａ，１０Ｂ，１０Ｃは、既にリビジョン番号「ｒｅｖ１」のコンテンツ配置情報１３１Ａを保持しているものとする。
【００２７】
このようなクラスタ型ストレージシステムにおいて、例えば、図１に示すようにデータ１３４１（「ＩＤ（バスケットＩＤ）＝２」）をノード装置１０Ａからノード装置１０Ｂへ移行し、データ１３４１（「ＩＤ＝３」）をノード装置１０Ｂからノード装置１０Ｃへ移行した場合、管理者等はコンテンツ配置情報１３１におけるノードＩＤを移行先のノードＩＤに書き換える。例えば、図１に示すコンテンツ配置情報１３１Ａ（ｒｅｖ１）における移動対象のコンテンツのバスケットＩＤに対応するノードＩＤを、移行先のノード装置１００のノードＩＤに書き換えたコンテンツ配置情報１３１Ｂ（ｒｅｖ２）を作成する。
【００２８】
また、このようにコンテンツ配置情報１３１Ｂを新たに作成したノード装置１０Ａは、新たな動作モード情報１３２Ｂも作成する。例えば、コンテンツ配置情報１３１Ａを基にコンテンツ配置情報１３１Ｂを作成した場合、ノード装置１０Ａは、このコンテンツ配置情報１３１Ａのリビジョン番号「ｒｅｖ１」を含む動作モード情報１３２Ａに、コンテンツ配置情報１３１Ｂのリビジョン番号「ｒｅｖ２」を追加した動作モード情報１３２Ｂを作成する。そして、ノード装置１０Ａは、この新たなコンテンツ配置情報１３１Ｂと動作モード情報１３２Ｂとを含む配置制御情報１３５を、ノード装置１０Ｂへ送信する。また、この配置制御情報１３５を受信したノード装置１０Ｂは、この配置制御情報１３５をノード装置１０Ｃへ送信する。
【００２９】
この配置制御情報１３５を受信したノード装置１０Ｂ,１０Ｃ、およびノード装置１０Ａは、以下のような動作を行う。すなわち、ノード装置１０Ａ,１０Ｂ,１０Ｃは、この配置制御情報１３５に含まれる動作モード情報１３２Ｂに示されるリビジョン番号に基づき、コンテンツ配置情報１３１Ａ，１３１Ｂの両方を参照して、コンテンツの読み書き先のノード装置１０を決定する。例えば、各ノード装置１０は、バスケットＩＤ「２」のデータ１３４１については、ノード装置１０Ａ，１０Ｂの両方を読み書き先として決定し、バスケットＩＤ「３」のデータ１３４１についてはノード装置１０Ａ，１０Ｂ，１０Ｃすべてを読み書き先として決定する。このようにすることで、ノード装置１０間でデータ移行を行った場合でも、このデータの読み書きに対する信頼性を損なうことがなくなる。
【００３０】
なお、前記したデータ移行がすべて完了した場合、ノード装置１０は、動作モード情報１３２Ｂから、データ移行前におけるコンテンツ配置情報１３１のリビジョン番号を削除してもよい。例えば、動作モード情報１３２に示されるリビジョン番号を「ｒｅｖ１、ｒｅｖ２」から「ｒｅｖ２」に変更した動作モード情報１３２Ｃを作成し、この作成した動作モード情報１３２Ｃを配置制御情報１３５に含めて各ノード装置１０に伝播させる。このようにすることで、以降、各ノード装置１０はリビジョン番号「ｒｅｖ１」に対応するコンテンツ配置情報１３１Ａを参照せず、「ｒｅｖ２」に対応するコンテンツ配置情報１３１Ｂを参照する。つまり、各ノード装置１０はこのコンテンツ配置情報１３１Ｂに示される当該データの移行後のノード装置１０をデータの読み書き先とするようになる。
【００３１】
≪構成≫
次に、図２を用いてノード装置１０の構成を説明する。図２は、図１のノード装置の構成を示したブロック図である。
【００３２】
ノード装置１０（１０Ａ，１０Ｂ，１０Ｃ）はそれぞれ同じ構成であるので代表してノード装置１０Ａを説明する。図２に示すように、ノード装置１０は、クライアント装置２０や他のノード装置１０との間のデータの入出力を司る入出力部１１と、配置制御情報１３５の交換やクライアント装置２０からの要求に基づく各種データ処理を実行する処理部１２と、処理対象となるデータ（コンテンツ）や、前記したコンテンツ配置情報１３１や動作モード情報１３２を記憶する記憶部１３とを備える。なお、ノード装置１０Ｂ，１０Ｃにおける配置制御情報交換部１２０、配置制御情報記憶部１３０、コンテンツ記憶部１３４以外の構成は、図示を省略している。
【００３３】
入出力部（入力部および出力部）１１は、クライアント装置２０やノード装置１０とのデータ入出力を司る入出力インタフェースにより実現される。また、処理部１２は、このノード装置１０が備えるＣＰＵ（Central Processing Unit）によるプログラム実行処理により実現される。さらに、記憶部１３は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ＨＤＤ（Hard Disk Drive）、フラッシュメモリ等の記憶媒体から構成される。なお、図示を省略しているが、記憶部１３には、このノード装置１０の機能を実現するためのプログラムが格納される。
【００３４】
このような処理部１２は、配置制御情報交換部１２０と、制御部１２３と、リクエスト送信部１２４と、データ受信部１２５と、配置情報作成部１２６と、リビジョン番号発行部１２７と、動作モード情報作成部１２８と、データ処理部１２９とを備える。
【００３５】
配置制御情報交換部１２０は、前記した配置制御情報１３５（図１参照）を他のノード装置１０との間で交換する。この配置制御情報交換部１２０は、配置制御情報送信部１２１と、配置制御情報受信部１２２とを備える。配置制御情報送信部１２１は、配置制御情報１３５を他のノード装置１０へ送信する。また、配置制御情報受信部１２２は、他のノード装置１０から送信された配置制御情報１３５を受信する。この配置制御情報受信部１２２は、この受信した配置制御情報１３５に含まれるコンテンツ配置情報１３１および動作モード情報１３２を、自身のノード装置１０の配置制御情報記憶部１３０（後記）に記憶する。
【００３６】
制御部１２３は、入出力部１１経由でクライアント装置２０から、当該コンテンツのコンテンツキーを含む処理要求（読み書き処理の要求）を受け付けると、当該コンテンツの読み書き先のノード装置１０のノードＩＤを特定（決定）する。つまり、制御部１２３は、まず、コンテンツキーをハッシュ関数に代入してバスケットＩＤを求める。次に、自身が保持するコンテンツ配置テーブル１３３（後記）から、当該バスケットＩＤに対応するノードＩＤを特定する。なお、このコンテンツ配置テーブル１３３について、詳細は後記するが、動作モード情報１３２に示されるリビジョン番号に対応する１以上のコンテンツ配置情報１３１をマージして作成されたものである。
【００３７】
リクエスト送信部１２４は、制御部１２３により特定されたノードＩＤのノード装置１０へ、コンテンツキーに対応するコンテンツの読み書き要求を送信する。
【００３８】
データ受信部１２５は、ノード装置１０への読み書き処理の要求に対する応答を受信する。つまり、読み出したコンテンツまたはそのコンテンツ読み出し処理の結果（ＯＫかＮＧか）や、書き込み処理の結果（ＯＫかＮＧか）を受信する。
【００３９】
配置情報作成部１２６は、入出力部１１で、変更対象となるバスケットＩＤ、変更前のノード装置１０のノードＩＤ（アドレス情報等）、変更後のノード装置１０のノードＩＤ等の入力を受け付けると、これらの情報を基にコンテンツ配置情報１３１を作成する。例えば、コンテンツ配置情報１３１において、この変更対象となるバスケットＩＤに対応するノードＩＤを、変更前のノード装置１０のノードＩＤから、変更後のノード装置１０のノードＩＤへ変更する。そして、配置情報作成部１２６は、この作成したコンテンツ配置情報１３１を配置制御情報記憶部１３０に記憶する。また、この配置情報作成部１２６は、動作モード情報１３２に示されるリビジョン番号に対応するコンテンツ配置情報１３１を配置制御情報記憶部１３０から選択し、この選択したコンテンツ配置情報１３１を基にコンテンツ配置テーブル１３３を作成する。
【００４０】
このときのコンテンツ配置テーブル１３３の作成手順を、図３を用いて説明する。図３は、図２のコンテンツ配置テーブルの作成手順を概念的に示した図である。ここでは、配置制御情報記憶部１３０にコンテンツ配置情報１３１Ａ，１３２Ｂと、リビジョン番号「ｒｅｖ１，ｒｅｖ２」を含む動作モード情報１３２が記憶され、配置情報作成部１２６が、この動作モード情報１３２に示されるリビジョン番号に対応するコンテンツ配置情報１３１Ａ，１３１Ｂを基にコンテンツ配置テーブル１３３を作成する場合を例に説明する。
【００４１】
例えば、図３のコンテンツ配置情報１３１Ａ，１３１ＢにおけるバスケットＩＤ「１」に対するノードＩＤは両方とも「１０Ａ，１０Ｂ」である。よって、配置情報作成部１２６は、コンテンツ配置テーブル１３３におけるバスケットＩＤ「１」のノードリスト１３３１も「１０Ａ，１０Ｂ」とする。
【００４２】
また、コンテンツ配置情報１３１Ａ，１３１ＢのバスケットＩＤ「２」に対するノードＩＤは、「１０Ａ」と「１０Ｂ」である。よって、配置情報作成部１２６は、コンテンツ配置テーブル１３３におけるバスケットＩＤ「２」のノードリスト１３３２を「１０Ａ，１０Ｂ」とする。
【００４３】
さらに、コンテンツ配置情報１３１Ａ，１３１ＢのバスケットＩＤ「３」に対するノードＩＤは「１０Ａ，１０Ｂ」と「１０Ａ，１０Ｃ」である。よって、配置情報作成部１２６は、コンテンツ配置テーブル１３３におけるバスケットＩＤ「３」のノードリスト１３３３を「１０Ａ，１０Ｂ，１０Ｃ」とする。
【００４４】
つまり、配置情報作成部１２６は、参照すべきコンテンツ配置情報１３１が複数あり、そのコンテンツ配置情報１３１間で、同じバスケットＩＤに対応するノードＩＤの異なるものがあったとき、このコンテンツ配置情報１３１それぞれから、このバスケットＩＤに対応するノードＩＤすべてを選択する。そして、このノードＩＤを、コンテンツ配置テーブル１３３の当該バスケットＩＤに対応するノードＩＤとして登録する。このようにして作成されたコンテンツ配置テーブル１３３を参照することで、制御部１２３は、コンテンツ移行前のノード装置１０と移行後のノード装置１０の両方のノード装置１０に対し読み書き処理を実行できる。
【００４５】
なお、詳細は後記するが、配置情報作成部１２６は、動作モード情報１３２が複数あったとき、そのすべての動作モード情報１３２を参照して、コンテンツ配置テーブル１３３を作成する。つまり、ノード装置１０は、新たな動作モード情報１３２を受信した場合でも、配置情報作成部１２６は、既存の動作モード情報１３２と新たな動作モード情報１３２と両方を参照する。このようにすることで、新たな動作モード情報１３２を受信した場合でも、ノード装置１０はその両方の動作モード情報１３２の内容を損なわずに読み書き処理を実行できる。
【００４６】
但し、配置情報作成部１２６が、その配置制御情報記憶部１３０の動作モード情報１３２の中から、親子関係にある動作モード情報１３２を発見したとき、親（更新前）の動作モード情報１３２を参照せず、子（更新後）の動作モード情報１３２の方を参照してコンテンツ配置テーブル１３３を作成する。例えば、図３に示す動作モード情報１３２には、親となる動作モード情報１３２の識別情報として「１３２Ａ」が記載されている（図３の「親＝１３２Ａ」参照）。これは、この動作モード情報１３２が動作モード情報１３２Ａをベース（親）に作成されたことを示す。よって、配置情報作成部１２６は、配置制御情報記憶部１３０に動作モード情報１３２Ａが含まれていた場合でも、この動作モード情報１３２Ａを用いず、動作モード情報１３２の方を用いてコンテンツ配置テーブル１３３を作成する。このようにすることで、制御部１２３は、古い方の動作モード情報１３２ではなく、新しい方の動作モード情報１３２を参照して、コンテンツ配置テーブル１３３を作成できる。
【００４７】
図２のリビジョン番号発行部１２７は、新規にコンテンツ配置情報１３１が作成されると、このコンテンツ配置情報１３１のリビジョン番号を発行する。このリビジョン番号は、コンテンツ配置情報１３１ごとにユニークなものとするである。なお、このリビジョン番号は、数字の他に、文字、記号等を含んだものでもよい。
【００４８】
動作モード情報作成部１２８は、入出力部１１からの指示入力に基づき動作モード情報１３２を作成する。例えば、配置情報作成部１２６がコンテンツ配置情報１３１Ａ（図１参照）を修正して、新たにコンテンツ配置情報１３１Ｂを作成したとき、この入出力部１１からの指示入力に基づき、動作モード情報作成部１２８は、コンテンツ配置情報１３１Ａのリビジョン番号に、コンテンツ配置情報１３１Ｂのリビジョン番号を加えた動作モード情報１３２Ｂ（図１参照）を作成する。このようにすることで、このような動作モード情報１３２を受信したノード装置１０は、新旧両方のコンテンツ配置情報１３１を参照してコンテンツ配置テーブル１３３を作成できる。したがって、ノード装置１０は、コンテンツの移行元のノード装置１０およびこのコンテンツの移行先のノード装置１０の両方のノード装置１０に対し、コンテンツの読み書き処理を実行できる。
【００４９】
なお、この動作モード情報作成部１２８は、入出力部１１からの指示入力に基づき、この動作モード情報１３２の親となる動作モード情報１３２（親動作モード情報）の識別情報を付加する。例えば、動作モード情報１３２Ａを基に動作モード情報１３２Ｂを作成した場合、この動作モード情報１３２Ａの識別情報を、この動作モード情報１３２Ｂに付加する。
【００５０】
データ処理部１２９は、他のノード装置１０からの処理要求に応じて、コンテンツ記憶部１３４に記憶されるコンテンツのうち、コンテンツキーに対応するコンテンツの読み書き処理を実行する。そして、データ処理部１２９は、その実行結果を処理要求の送信元であるノード装置１０へ返す。
【００５１】
記憶部１３は、所定領域に、配置制御情報記憶部１３０とコンテンツ記憶部１３４とを備える。
【００５２】
この配置制御情報記憶部１３０は、前記したコンテンツ配置情報１３１と、動作モード情報１３２と、コンテンツ配置テーブル１３３とを記憶する。
【００５３】
コンテンツ記憶部１３４は、コンテンツキーごとに、当該コンテンツキーに対応するコンテンツが記憶される。なお、このコンテンツには、データの更新日時であるタイムスタンプが付与されている。
【００５４】
≪処理手順≫
次に、本実施の形態のクラスタ型ストレージシステムのノード装置１０の処理手順を説明する。まず、ノード装置１０において、新たなコンテンツ配置情報１３１が追加されたときの処理手順を説明する。図４は、図２のノード装置に新たなコンテンツ配置情報が追加されたときの処理手順を示した図である。
【００５５】
まず、図２のノード装置１０の配置情報作成部１２６は、入出力部１１で、移行対象となるコンテンツのバスケットＩＤ、移行元のノード装置１０のノードＩＤおよび移行先となるノード装置１０のノードＩＤを示した変更情報の入力を受け付ける。そして、配置情報作成部１２６は、この変更情報を反映したコンテンツ配置情報１３１を追加する（Ｓ１０１）。例えば、配置情報作成部１２６は、コンテンツ配置情報１３１Ａ（図１参照）をコピーし、このコンテンツ配置情報１３１Ａにおいて、変更対象となるバスケットＩＤに対する、ノード装置１０のＩＤを、移行先のノード装置１０のノードＩＤに書き換えたコンテンツ配置情報１３１Ｂ（図１参照）を作成する。
【００５６】
次に、リビジョン番号発行部１２７は、この追加されたコンテンツ配置情報１３１のリビジョン番号を発行する（Ｓ１０２）。配置情報作成部１２６は、この発行されたリビジョン番号を、Ｓ１０１で追加されたコンテンツ配置情報１３１に対応付けて配置制御情報記憶部１３０に記憶する。
【００５７】
次に、動作モード情報作成部１２８は、入出力部１１からの指示入力に基づき新たな動作モード情報１３２（例えば、動作モード情報１３２Ｂ）を作成し（Ｓ１０３）、この作成した動作モード情報１３２に、親動作モード情報１３の識別情報（ＩＤ）を付加する（Ｓ１０４）。
【００５８】
例えば、動作モード情報作成部１２８は、コンテンツ配置情報１３１Ａのリビジョン番号に、コンテンツ配置情報１３１Ｂのリビジョン番号を加えた動作モード情報１３２Ｂ（図１参照）を作成する。そして、動作モード情報作成部１２８は、この作成した動作モード情報１３２Ｂに、このコンテンツ配置情報１３１Ｂの親動作モード情報（例えば、動作モード情報１３２Ａ）の識別情報（ＩＤ）を付加する。
【００５９】
このようにすることで、例えば、この動作モード情報１３２Ｂが各ノード装置１０間に伝播した場合おいて、各ノード装置１０に既にこの動作モード情報１３２Ｂの親となる動作モード情報１３２Ａがあったとき、この動作モード情報１３２Ａよりも動作モード情報１３２Ｂの方を優先的に適用して、参照すべきコンテンツ配置情報１３１を選択させることができる。動作モード情報作成部１２８は、この作成した動作モード情報１３２を、配置制御情報記憶部１３０に記憶する。
【００６０】
次に、配置情報作成部１２６は、新たに作成した動作モード情報１３２と、追加されたコンテンツ配置情報１３１とを含む配置制御情報１３５（図１参照）を作成する。そして、配置制御情報送信部１２１は、この配置制御情報１３５を他のノード装置１０へ送信する（Ｓ１０５）。また、この配置情報作成部１２６は、新たに作成した動作モード情報１３２を参照し、コンテンツ配置情報１３１を選択して、この選択したコンテンツ配置情報１３１を参照してコンテンツ配置テーブル１３３を作成し、配置制御情報記憶部１３０に記憶する。配置情報作成部１２６は、作成したコンテンツ配置テーブル１３３を参照して当該コンテンツキーに対する読み書き先であるノード装置１０を特定する。
【００６１】
なお、配置制御情報送信部１２１により送信された配置制御情報１３５は、各ノード装置１０間に伝播する。おして、各ノード装置１０において、この配置制御情報１３５を受信すると、この配置制御情報１３５に示される動作モード情報１３２およびコンテンツ配置情報１３１を配置制御情報記憶部１３０に記憶する。各ノード装置１０は、この配置制御情報記憶部１３０に記憶される動作モード情報１３２およびコンテンツ配置情報１３１を参照して、コンテンツ配置テーブル１３３を作成する。そして、各ノード装置１０は、この作成したコンテンツ配置テーブル１３３を参照して当該コンテンツキーに対する読み書き先であるノード装置１０を特定する。
【００６２】
次に、図５を用いて、前記した配置制御情報１３５を受信したノード装置１０の処理手順を説明する。図５は、図１の配置制御情報を受信したノード装置の処理手順を示した図である。
【００６３】
ノード装置１０の配置制御情報受信部１２２は、配置制御情報１３５を受信すると（Ｓ１１１）、この受信した配置制御情報１３５に含まれる動作モード情報１３２を、配置制御情報記憶部１３０に追加する（Ｓ１１２）。また、この受信した配置制御情報１３５に含まれるコンテンツ配置情報１３１も配置制御情報記憶部１３０に追加する。
【００６４】
次に、配置情報作成部１２６は、以下の手順でコンテンツ配置テーブル１３３（図３参照）を作成する。すなわち、まず、配置情報作成部１２６は、配置制御情報記憶部１３０に含まれるすべての動作モード情報１３２の識別情報（ＩＤ）を示した全動作モード情報リストを作成する（Ｓ１１４）。また、配置情報作成部１２６は、この配置制御情報記憶部１３０に含まれるすべての動作モード情報１３２の親動作モード情報の識別情報を示した親動作モード情報リストを作成する（Ｓ１１５）。
【００６５】
次に、配置情報作成部１２６は、この全動作モード情報リストにあって、親動作モード情報リストにはない動作モード情報１３２の識別情報を示した参照動作モード情報リストを作成する（Ｓ１１６）。つまり、配置情報作成部１２６は、子を持たない動作モード情報１３２の識別情報を示したリストを作成する。
【００６６】
そして、配置情報作成部１２６は、この参照動作モード情報リストに示されるすべての動作モード情報１３２を参照してコンテンツ配置テーブル１３３を作成する（Ｓ１１７）。つまり、配置情報作成部１２６は、配置制御情報記憶部１３０に記憶される動作モード情報１３２の親動作モード情報の識別情報を参照して、この配置制御情報記憶部１３０に記憶される動作モード情報１３２のうち、いずれの動作モード情報１３２の親動作モード情報（親）になっていない動作モード情報１３２を参照して、コンテンツ配置テーブル１３３を作成する。
【００６７】
＜具体例＞
なお、このように各ノード装置１０で独立にコンテンツ配置情報１３１や動作モード情報１３２が更新された場合における、各ノード装置１０における配置制御情報１３５の伝播の具体例を、図６を用いて説明する。図６（ａ）および（ｂ）は、図１のノード装置における配置制御情報の伝播を概念的に示した図である。図６（ａ）は、ノード装置１０Ａ，１０Ｂ間の通信が断絶していた間の配置制御情報１３５の伝播の様子を示した図であり、図６（ｂ）は、ノード装置１０Ａ，１０Ｂ間の通信の断絶が回復した後の配置制御情報１３５の伝播の様子を示した図である。なお、ここでは、説明を容易にするため配置制御情報１３５は、動作モード情報１３２のみを示している。
【００６８】
例えば、図６（ａ）において、ノード装置１０Ａ，１０Ｂ，１０Ｃの持つコンテンツ配置情報１３１（図６において図示省略）のリビジョン番号は「ｒｅｖ１」とする。そして、ノード装置１０Ａには、リビジョン番号「ｒｅｖ２」のコンテンツ配置情報１３１Ｂが追加され、ノード装置１０Ｂにはリビジョン番号「ｒｅｖ１．１．１」のコンテンツ配置情報１３１Ｄが追加されたとする。これに伴い、ノード装置１０Ａは、動作モード情報１３２Ａを親動作モード情報とした動作モード情報１３２Ｂを作成する。そして、ノード装置１０Ａはこの動作モード情報１３２Ｂを、ノード装置１０Ｃへ送信する。
【００６９】
また、ノード装置１０Ｂは、同じく動作モード情報１３２Ａを親動作モード情報とした動作モード情報１３２Ｄを作成する。そして、ノード装置１０Ｂは、この動作モード情報１３２Ｄをノード装置１０Ｃへ送信する。なお、前記したとおり、ノード装置１０Ａ，１０Ｂ間の通信は断絶しているので、動作モード情報１３２Ｂはノード装置１０Ａからノード装置１０Ｂへ送信されないし、動作モード情報１３２Ｄはノード装置１０Ｂからノード装置１０Ａへ送信されないものとする。
【００７０】
ノード装置１０Ｃは、動作モード情報１３２Ｂ，１３２Ｄを受信すると、この動作モード情報１３２Ｂ，１３２Ｄを、このノード装置１０Ｃの配置制御情報記憶部１３０（図２参照）に追加する。そして、ノード装置１０Ｃは、この配置制御情報記憶部１３０に含まれるすべての動作モード情報１３２（動作モード情報１３２Ａ，１３２Ｂ，１３２Ｄ）の親動作モード情報のＩＤを参照して、この動作モード情報１３２のうち、いずれの動作モード情報１３２の親になっていない動作モード情報１３２（動作モード情報１３２Ｂ，１３２Ｄ）を選択する。そして、この選択した動作モード情報１３２（動作モード情報１３２Ｂ，１３２Ｄ）を用いてコンテンツ配置テーブル１３３を作成する。
【００７１】
なお、この後、ノード装置１０Ａ，１０Ｂ間の通信の断絶が回復すると、動作モード情報１３２Ｂは、図６（ｂ）に示すように伝播する。まず、動作モード情報１３２Ｂは、ノード装置１０Ａからノード装置１０Ｂへ送信される。ノード装置１０Ｂは、受信した動作モード情報１３２Ｂの親動作モード情報のＩＤから、この動作モード情報１３２Ｂの親が動作モード情報１３２Ａであることが分かるので、前記したノード装置１０Ｃの場合と同様に、いずれの親にもなっていない動作モード情報１３２Ｂ，１３２Ｄを基にコンテンツ配置テーブル１３３を作成する。
【００７２】
この後、ノード装置１０Ｂは、この動作モード情報１３２Ｂ，１３２Ｄを親として、動作モード情報１３２Ｅを作成したとする。この場合、ノード装置１０Ｂは、この動作モード情報１３２Ｅに、親動作モード情報のＩＤとして、この動作モード情報１３２Ｂ，１３２ＤのＩＤを付加して、ノード装置１０Ｃへ送信する。
【００７３】
この動作モード情報１３２Ｅを受信したノード装置１０Ｃは、動作モード情報１３２Ｄを、このノード装置１０Ｃの配置制御情報記憶部１３０に追加する。そして、ノード装置１０Ｃは、この配置制御情報記憶部１３０に含まれるすべての動作モード情報１３２（動作モード情報１３２Ａ，１３２Ｂ，１３２Ｄ，１３２Ｅ）の親動作モード情報のＩＤを参照して、この動作モード情報１３２のうち、いずれの動作モード情報１３２の親になっていない動作モード情報１３２（動作モード情報１３２Ｅ）を選択する。そして、この選択した動作モード情報１３２を用いてコンテンツ配置テーブル１３３（動作モード情報１３２Ｅ）を作成する。
【００７４】
このようにすることで、クラスタ型ストレージシステムのいずれかのノード装置１０において、古い動作モード情報１３２を更新して、新たな動作モード情報１３２が作成されたとき、各ノード装置１０に、このうち最も新しい（一番下の子である）動作モード情報１３２を参照して、コンテンツ配置テーブル１３３を作成させることができる。
【００７５】
＜読み出し手順＞
次に、図２を参照しつつ、図７を用いて、図２のクライアント装置２０からのデータの読み出し要求を受け付けたノード装置１０の処理手順を説明する。図７は、図２のクライアント装置からのデータの読み出し要求を受け付けたノード装置の処理手順を示した図である。ここでは、ノード装置１０が、コンテンツ配置テーブル１３３（図３参照）を作成済みであるものとして説明する。
【００７６】
まず、ノード装置１０の制御部１２３は入出力部１１経由で、クライアント装置２０よりデータの読み出し要求を受信する（Ｓ２０１）。このデータの読み出し要求は、読み出し対象となるコンテンツのコンテンツキーを含むものである。
【００７７】
制御部１２３は、この読み出し要求に含まれるコンテンツキーを用いてバスケットＩＤを特定する（Ｓ２０２）。このときのバスケットＩＤは、前記したとおり、制御部１２３が、ハッシュ関数ＨにコンテンツキーＫを代入することにより求める。
【００７８】
制御部１２３は、この特定したバスケットＩＤをキーとして、コンテンツ配置テーブル１３３（図３参照）からノードリストを取得する（Ｓ２０３）。例えば、バスケットＩＤが「１」であれば、図３に示すコンテンツ配置テーブル１３３から、このバスケットＩＤ「１」に対応するノードＩＤを示したノードリスト１３３１を取得する。
【００７９】
そして、制御部１２３は、「取得タイムスタンプ＝０」、「取得コンテンツ＝ｎｕｌｌ」をセットする（Ｓ２０４）。つまり、この後、制御部１２３は、各ノード装置１０からデータを取得し、その取得したデータ（コンテンツ）のタイムスタンプを参照しながら最新のデータを選択するが、このときのデータ選択に用いるパラメータ「取得タイムスタンプ」および「取得コンテンツ」の初期値を設定する。
【００８０】
制御部１２３は、ノードリストに示される各ノード装置１０について、Ｓ２０７以降の処理を実行する（Ｓ２０５）。つまり、制御部１２３は、リクエスト送信部１２４により、ノードリストに示される各ノード装置１０のデータの読み出し要求を送信する。そして、データ受信部１２５により、各ノード装置１０のコンテンツ記憶部１３４からコンテンツ（データ）と、そのコンテンツのタイムスタンプとを受信する（Ｓ２０７）。
【００８１】
そして、制御部１２３は、この受信したコンテンツのタイムスタンプが、取得スタンプ（既に受信したコンテンツのタイムスタンプ）よりも新しいか否かを判断する（Ｓ２０８）。なお、ここで、制御部１２３が、最初に受信したコンテンツのタイムスタンプについては、「取得タイムスタンプ＝０（初期値）」よりも新しいと判断する。一方、制御部１２３が２番目以降に受信したコンテンツについては、既に受信した、コンテンツのタイムスタンプと比較して、どちらのタイムスタンプが新しいかを判断する。
【００８２】
ここで、制御部１２３は、受信したコンテンツのタイムスタンプが、取得スタンプ（既に受信したコンテンツのタイムスタンプ）よりも新しいと判断したとき（Ｓ２０８のＹｅｓ）、この受信したコンテンツを取得コンテンツとして記憶部１３に記憶する（Ｓ２０９）。また、制御部１２３は、この受信したコンテンツのタイムスタンプを取得タイムスタンプとして記憶部１３に記憶する（Ｓ２１０）。一方、Ｓ２０８において、制御部１２３が、受信コンテンツのタイムスタンプは、取得スタンプ（既に受信したコンテンツのタイムスタンプ）よりも古いと判断したとき（Ｓ２０８のＮｏ）、Ｓ２０９およびＳ２１０をスキップして、Ｓ２１１へ進む。そして、制御部１２３は、ノードリストに示される全ノード装置１０の処理を完了したとき（Ｓ２１１のＹｅｓ）、つまり、ノードリストに示されるすべてのノード装置１０に対し、Ｓ２０７以降の処理を実行したとき、Ｓ２１３へ進む。なお、まだ、Ｓ２０７以降の処理を実行していないノード装置１０があるとき（Ｓ２１１のＮｏ）は、Ｓ２０５へ戻る。
【００８３】
また、Ｓ２１１の後、制御部１２３は、記憶部１３に記憶されている取得タイムスタンプの値が「０」か否かにより（Ｓ２１３）、いずれかのノード装置１０からコンテンツを取得できたか否かを判断する。ここで、いずれかのノード装置１０からコンテンツを取得できた場合（Ｓ２１３のＮｏ）、制御部１２３は、記憶部１３に記憶されている取得コンテンツをクライアント装置２０（図２参照）へ返す（Ｓ２１４）。このとき制御部１２３は、取得コンテンツとともに、当該コンテンツ（データ）の取得に成功したことを示す成功応答メッセージもあわせて送信するようにしてもよい。
【００８４】
一方、制御部１２３が、記憶部１３に記憶されている取得タイムスタンプの値が「０」のとき（Ｓ２１３のＹｅｓ）、つまり、いずれのノード装置１０からもコンテンツを取得できなかったとき。エラー（エラーメッセージ）をクライアント装置２０へ返す（Ｓ２１５）。よって、制御部１２３は、クライアント装置２０へデータの読み出しに失敗したことを伝えるエラー（エラーメッセージ）を出力する。
【００８５】
例えば、ノード装置１０Ｂのコンテンツを、ノード装置１０Ｃへ移行するとき、コンテンツ配置テーブル１３３には当該コンテンツの読み書き先としてノード装置１０Ｂ，１０Ｃが登録された場合を考える。このような場合、ノード装置１０Ａは、このコンテンツ配置テーブル１３３を参照して、ノード装置１０Ｂ，１０Ｃ両方から当該コンテンツを取得する。つまり、ノード装置１０Ａは、同じコンテンツキーに対応するコンテンツとして古いコンテンツと新しいコンテンツとを重複して取得することがある。このような場合でも、ノード装置１０Ａはコンテンツに付されたタイムスタンプを参照することで、この取得したコンテンツのうち最新のコンテンツを選択してクライアント装置２０へ出力することができる。つまり、クライアント装置２０へより信頼性の高いコンテンツを出力することができる。
【００８６】
＜書き込み手順＞
次に、図２を参照しつつ、図８を用いて、図２のクライアント装置２０からのコンテンツの書き込み要求を受け付けたノード装置１０の処理手順を説明する。図８は、図２のクライアント装置からのコンテンツの書き込み要求を受け付けたノード装置の処理手順を示した図である。
【００８７】
まず、ノード装置１０の制御部１２３は入出力部１１経由で、クライアント装置２０よりコンテンツの書き込みを受信する（Ｓ３０１）。このコンテンツの書き込み要求は、書き込み対象となるコンテンツのコンテンツキーを含むものである。この後、制御部１２３は、Ｓ３０２およびＳ３０３の処理を実行してコンテンツ配置テーブル１３３からノードリストを取得する。このＳ３０２およびＳ３０３の処理は、前記した図７のＳ２０２およびＳ２０３と同様なので説明を省略する。
【００８８】
Ｓ３０３の後、制御部１２３は、全体結果フラグ＝「成功」をセットする（Ｓ３０４）。つまり、この後、制御部１２３は、各ノード装置１０に対しコンテンツの書き込みを実行し、各ノード装置１０からその実行結果を受信し、実行結果を全体結果フラグとして記憶部１３に記憶していくが、その初期値として「成功」をセットする。
【００８９】
次に、制御部１２３は、現在時刻のタイムスタンプＴｗを取得する（Ｓ３０５）。この現在時刻のタイムスタンプＴｗは、例えば、制御部１２３がクライアント装置２０からコンテンツの書き込み要求を受け付けた時刻である。
【００９０】
そして、制御部１２３は、ノードリストに示される各ノード装置１０について、Ｓ３０８以降の処理を実行する（Ｓ３０６）。制御部１２３は、リクエスト送信部１２４により、ノードリストに示される各ノード装置１０へ、Ｓ３０２で特定したバスケットＩＤに対応するコンテンツと、タイムスタンプＴｗとを送信する（Ｓ３０８）。つまり、制御部１２３は、リクエスト送信部１２４により、コンテンツの書き込み要求を送信する。そして、制御部１２３は、このコンテンツの書き込み要求に対し、当該コンテンツの書き込み（保存）に成功したか否かを判断する（Ｓ３０９）。つまり、制御部１２３は、データ受信部１２５により、このコンテンツを記憶するノード装置１０から当該コンテンツの書き込みに成功した旨の応答を受信したか否かを判断する。
【００９１】
ここで、制御部１２３がコンテンツの書き込みに成功したとき（Ｓ３０９のＹｅｓ）、ノードリストに示されるすべてのノード装置１０に対し処理を実行したか否かを判断する（Ｓ３１０）。ここで、ノードリストに示されるノード装置１０のうち、まだ処理を実行していないノード装置１０があるとき（Ｓ３１０のＮｏ）、Ｓ３０６へ戻り、残りのノード装置１０に対し処理を実行する。また、Ｓ３０９で、制御部１２３がコンテンツの書き込みに失敗したとき（Ｓ３０９のＮｏ）、全体結果フラグを「失敗」に書き換え（Ｓ３１２）、Ｓ３１３へ進む。
【００９２】
前記したＳ３１０の後、制御部１２３が、ノードリストに示されるすべてのノード装置１０に対し処理を実行したと判断したとき（Ｓ３１０のＹｅｓ）、全体結果フラグが「成功」であるか否かを判断する（Ｓ３１３）。つまり、制御部１２３は、ノードリストに示されるすべてのノード装置１０へのコンテンツの書き込みが成功したか否かを判断する。ここで、制御部１２３が、全体結果フラグは「成功」であると判断したとき（Ｓ３１３のＹｅｓ）、成功の応答をクライアント装置２０へ返す（Ｓ３１４）。一方、制御部１２３が、全体結果フラグは「成功」ではないと判断したとき（Ｓ３１３のＮｏ）、エラー（エラーメッセージ）をクライアント装置２０へ返す（Ｓ３１５）。つまり、制御部１２３は、当該コンテンツを持つすべてのノード装置１０へのコンテンツの書き込みを完了できなかったことをクライアント装置２０へ通知する。
【００９３】
このようにすることで、クラスタ型ストレージシステムの各ノード装置１０は、読み書き対象となるコンテンツを持つ各ノード装置１０に対し、読み書き処理を実行し、その結果をクライアント装置２０へ返すことができる。
【００９４】
なお、このクラスタ型ストレージシステムにおいて複数のノード装置１０にコンテンツを冗長化して書き込む場合、以下のようにしてもよい。すなわち、その冗長化の定足数Ｑｗとしたとき、そのＱｗの値を記憶部１３に設定しておく。そして、ノード装置１０の制御部１２３は、図８のＳ３０３で取得したノードリストに示されるノード装置１０のうち、この定足数Ｑｗ個のノード装置１０への書き込みが成功した時点で、そのノードリストの保存結果を「成功」として判断して、その後の処理を進めるようにしてもよい。なお、Ｑｗの値は、冗長化したノード装置１０の数と同じ数でもよいし、それ以下の数でもよい。
【００９５】
また、このようにしてノード装置１０が、複数のノード装置１０にコンテンツを冗長化して書き込んだ場合において、前記したコンテンツの読み出し処理においても定足数Ｑｒ（このＱｒは、冗長化したノード装置１０の数以下の数）のノード装置１０からコンテンツの読み出しに成功した時点で、このノードリストの取得コンテンツを決定し、その後の処理を進めるようにしてもよい。
【００９６】
このようにすることで、ノード装置１０は必ずしもコンテンツ配置テーブル１３３における当該コンテンツの読み書き先であるすべてのノード装置１０からの応答結果を受信しなくても、クライアント装置２０へ応答を返すことができる。
【００９７】
また、前記した動作モード情報作成部１２８は、管理者等が入出力部１１から入力した指示入力に基づき動作モード情報１３２を作成することとしたがこれに限定されない。例えば、ノード装置１０は、既存のコンテンツ配置情報１３１を基に新たなコンテンツ配置情報１３１を作成したとき、この既存のコンテンツ配置情報１３１のリビジョン番号に、新たなコンテンツ配置情報１３１のリビジョン番号を加えた動作モード情報１３２を作成するようにしてもよい。このようにすることで動作モード情報１３２の作成の手間を軽減できる。
【００９８】
また、制御部１２３は、まず動作モード情報１３２を参照してコンテンツ配置テーブル１３３を作成し、この作成したコンテンツ配置テーブル１３３を参照して、当該コンテンツの読み書き先のノード装置１０を決定することとしたが、これに限定されない。例えば、制御部１２３は、直接、動作モード情報１３２とコンテンツ配置情報１３１とを参照して、この動作モード情報１３２に示されるリビジョン番号を持つコンテンツ配置情報１３１を参照して、当該コンテンツの読み書き先のノード装置１０を決定するようにしてもよい。
【図面の簡単な説明】
【００９９】
【図１】本実施の形態のクラスタ型ストレージシステムの概要を概念的に示した図である。
【図２】図１のノード装置の構成を示したブロック図である。
【図３】図２のコンテンツ配置テーブルの作成手順を概念的に示した図である。
【図４】図２のノード装置に新たなコンテンツ配置情報が追加されたときの処理手順を示した図である。
【図５】図１の配置制御情報を受信したノード装置の処理手順を示した図である。
【図６】（ａ）および（ｂ）は、図１のノード装置における配置制御情報の伝播を概念的に示した図である。
【図７】図２のクライアント装置からのコンテンツの読み出し要求を受け付けたノード装置の処理手順を示した図である。
【図８】図２のクライアント装置からのコンテンツの書き込み要求を受け付けたノード装置の処理手順を示した図である。
【符号の説明】
【０１００】
１０（１０Ａ，１０Ｂ，１０Ｃ）  ノード装置
１１    入出力部（入力部、出力部）
１２    処理部
１３    記憶部
２０    クライアント装置
１２０  配置制御情報交換部
１２１  配置制御情報送信部
１２２  配置制御情報受信部
１２３  制御部
１２４  リクエスト送信部
１２５  データ受信部
１２６  配置情報作成部
１２７  リビジョン番号発行部
１２８  動作モード情報作成部
１２９  データ処理部
１３０  配置制御情報記憶部
１３１（１３１Ａ，１３１Ｂ）  コンテンツ配置情報
１３２（１３２Ａ，１３２Ｂ，１３２Ｃ，１３２Ｄ）  動作モード情報
１３３  コンテンツ配置テーブル
１３４  コンテンツ記憶部
１３５  配置制御情報
１３３１，１３３２，１３３３  ノードリスト
【図１】
2009289089.tif 000003
【図２】
2009289089.tif 000004
【図３】
2009289089.tif 000005
【図４】
2009289089.tif 000006
【図５】
2009289089.tif 000007
【図６】
2009289089.tif 000008
【図７】
2009289089.tif 000009
【図８】
2009289089.tif 000010