(57)【要約】  第１ストレージノードは、ライトデータから複数の分散配置ライトデータブロックを生成し、複数の分散配置ライトデータブロックから第１冗長データブロックを生成する。一つの分散配置ライトデータブロックは第２データブロックに配置され、第１冗長データブロックは第３ストレージノードに配置される。第２ストレージノードは、保持している分散配置ライトデータブロックから選択された複数の分散配置ライトデータブロックから、第２冗長データブロックを生成する。第２ストレージノードは、選択された複数の分散配置ライトデータブロックそれぞれを再配置先ストレージノードに再配置し、第２冗長データブロックを再配置先ストレージノード以外のストレージノードに配置する。
2017145375.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して接続された複数のストレージノード、を含むストレージシステムであって、
第１ストレージノードと、第２ストレージノードと、第３ストレージノードと、を含み
前記第１ストレージノードは、オブジェクトのライトデータを受信し、
前記第１ストレージノードは、前記ライトデータから複数の分散配置ライトデータブロックを生成し、前記複数の分散配置ライトデータブロックから第１冗長データブロックを生成し、
前記第１ストレージノードは、前記複数の分散配置ライトデータブロックそれぞれと前記第１冗長データブロックとを異なるストレージノードに送信し、
前記異なるストレージノードは前記第２ストレージノードと前記第３ストレージノードとを含み、前記第１冗長データブロックの配置先は前記第３ストレージノードであり、
前記第２ストレージノードは、保持している分散配置ライトデータブロックから、複数の分散配置ライトデータブロックを選択し、前記選択された複数の分散配置ライトデータブロックの再配置先ストレージノードが異なり、
前記第２ストレージノードは、前記選択された複数の分散配置ライトデータブロックから第２冗長データブロックを生成し、
前記第２ストレージノードは、前記選択された複数の分散配置ライトデータブロックそれぞれを前記再配置先ストレージノードに再配置し、さらに、前記第２冗長データブロックを前記再配置先ストレージノード以外のストレージノードに配置することで、前記第１ストレージノードが受信した前記オブジェクトの前記ライトデータが前記複数のストレージノードの何れか１つに再配置される、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記第１ストレージノードは、前記オブジェクトの識別子に基づいて前記異なるストレージノードを決定し、
前記第２ストレージノードは、前記選択された複数の分散配置ライトデータブロックそれぞれのオブジェクトの識別子に基づいて、前記再配置先ストレージノードと前記第２冗長データブロックを配置する前記ストレージノードとを決定する、ストレージシステム。
【請求項３】
請求項２に記載のストレージシステムであって、
前記異なるストレージノードは、複数のオブジェクトからなるオブジェクト群と予め関連付けられている、ストレージシステム。
【請求項４】
請求項１に記載のストレージシステムであって、
分散配置データブロックを保持しているストレージノードは、前記分散配置データブロックが再配置され、前記分散配置データブロックから生成される冗長データブロックが配置された後に、前記分散配置データブロックを削除する、ストレージシステム。
【請求項５】
請求項１に記載のストレージシステムであって、
前記第２ストレージノードは、同一ストレージノードに送信する複数ライトデータブロックを１回で送信する、ストレージシステム。
【請求項６】
請求項１に記載のストレージシステムであって、
前記第２ストレージノードは、前記再配置をオブジェクトの予め定められた優先度に基づいて選択した１又は複数のオブジェクトのライトデータブロックについて実行する、ストレージシステム。
【請求項７】
請求項１に記載のストレージシステムであって、
前記第２ストレージノードは、前記再配置を、オブジェクトのアクセス頻度に基づいて選択した１又は複数のオブジェクトのライトデータブロックについて実行する、ストレージシステム。
【請求項８】
請求項１に記載のストレージシステムであって、
前記複数のストレージノードは、それぞれ、旧データを消去することなく更新データを追記し、メタデータによりデータ更新を管理し、
前記第１ストレージノードは、
前記受信したライトデータの更新データを受信し、
前記ライトデータを削除することなく、前記更新データから複数の更新ライトデータブロックを生成し、前記複数の更新ライトデータブロックから第３冗長データブロックを生成し、
前記第３冗長データブロックを前記第３ストレージノードに配置し、
前記更新ライトデータブロックそれぞれを、前記異なるストレージノードにおける、前記第３ストレージノード以外のストレージノードに配置し、
前記第３ストレージノードは、前記異なるストレージノードの少なくとも一部から受信した、最新ライトデータを使用して生成された中間冗長データにより、前記第３冗長データブロックを更新し、最新冗長データブロックを生成する、ストレージシステム。
【請求項９】
請求項８に記載のストレージシステムであって、
前記更新データが、前記受信したライトデータの一部の更新データである場合、
前記第１ストレージノードは、前記更新データ内のデータからなるデータブロックと、ダミーデータからなるダミーデータブロックと、を含むように、前記複数の更新ライトデータブロックを生成し、
前記ダミーデータブロックの配置において、前記ダミーデータブロックを配置先ストレージノードに送信することなく前記ダミーデータブロックの通知を行い、
前記ダミーデータブロックの配置先ストレージノードは、前記ダミーデータブロックを格納することなく管理情報により管理する、ストレージシステム。
【請求項１０】
請求項９に記載のストレージシステムであって、
前記第３冗長データブロックは、複数チェックポイントのストライプにおいて、最も多くの最新データブロックを含むストライプの冗長データブロックである、ストレージシステム。
【請求項１１】
請求項８に記載のストレージシステムであって、
前記第２ストレージノードは、最新データから前記複数の分散配置ライトデータブロックを選択する、ストレージシステム。
【請求項１２】
請求項１に記載のストレージシステムであって、
ホストプログラムを配置するためのストレージノードとして、当該ホストプログラムが使用するオブジェクトの再配置先ストレージノードの優先度は、当該ホストプログラムが使用するオブジェクトを保持しないストレージノードよりも高い、ストレージシステム。
【請求項１３】
コードを含む、計算機読み取り可能な非一時的記憶媒体であって、前記コードは、ストレージシステムにおけるプロセッサにより実行されることで、前記ストレージシステムに処理を実行させ、
前記ストレージシステムは、ネットワークを介して接続された第１ストレージノードと、第２ストレージノードと、第３ストレージノードと、を含み、
前記処理は、
前記第１ストレージノードが、オブジェクトのライトデータを受信し、
前記第１ストレージノードが、前記ライトデータから複数の分散配置ライトデータブロックを生成し、前記複数の分散配置ライトデータブロックから第１冗長データブロックを生成し、
前記第１ストレージノードが、前記複数の分散配置ライトデータブロックそれぞれと前記第１冗長データブロックとを異なるストレージノードに送信し、
前記異なるストレージノードは前記第２ストレージノードと前記第３ストレージノードとを含み、前記第１冗長データブロックの配置先は前記第３ストレージノードであり、
前記第２ストレージノードが、保持している分散配置ライトデータブロックから、複数の分散配置ライトデータブロックを選択し、前記選択された複数の分散配置ライトデータブロックの再配置先ストレージノードが異なり、前記選択された複数の分散配置ライトデータブロックから生成される第２冗長データブロックの配置先が前記第３ストレージノードであり、
前記第２ストレージノードが、前記選択された複数の分散配置ライトデータブロックから前記第２冗長データブロックを生成し、
前記第２ストレージノードが、前記選択された複数の分散配置ライトデータブロックそれぞれを前記再配置先ストレージノードに再配置し、さらに、前記第２冗長データブロックを前記再配置先ストレージノード以外のストレージノードに配置することで、前記第１ストレージノードが受信した前記オブジェクトの前記ライトデータが前記複数のストレージノードの何れかに１つ再配置される、記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
ＩＴシステムで取り扱うべきデータ量が急激に増大しており、それに対応可能なストレージシステムが求められている。そのようなストレージシステムとして、複数のストレージ装置（サーバを含む）をネットワークで接続してストレージプールを作成し、分散してデータを処理し格納する、分散型ストレージシステム技術が存在する。これにより、スケーラブルな容量と性能を提供する。【０００３】
分散ストレージシステムの例は、例えば、米国特許７５４６３４２号に開示されている。具体的には、要約に記載されるように、以下の構成が開示されている。Ｗｅｂサイトに関連付けられる各ファイルの相対的重要度を計算する。この相対的重要度を用い、サーバ・アレイ、ピア・ツー・ピア・ネットワークなどの、コンピュータ・クラスタ内の複数デバイスに分配されるコンテンツの複数の部分集合を計算する。この部分集合は、１つまたは複数のファイルの一部分を含むパケットにイレージャコーディング方式を使用して作成された符号化メッセージを含むことができる。ファイル取得時、一定数のはっきりと識別可能な符号化メッセージがこの方式に基づいてデバイスから取得される。ファイルはこのメッセージを使用して再作成される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第７５４６３４２号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来の分散ストレージシステムは、ホストから受信したライトデータを、複数ストレージノードに分散させる。従って、アプリケーションプログラムが、分散ストレージシステムからデータを読み出すとき、そのデータを構成するデータブロックを複数のストレージノードの間において、ネットワークを介して転送する必要がある。よって、ネットワークのスループットがボトルネックとなって、データへのアクセスレイテンシが、ネットワークを介さない場合よりも増加する場合がある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、例えば特許請求項の範囲に記載の構成を採用する。【０００７】
本発明の代表的な一例は、ネットワークを介して接続された複数ストレージノード、を含むストレージシステムであって、第１ストレージノードと、第２ストレージノードと、第３ストレージノードと、を含み前記第１ストレージノードは、オブジェクトのライトデータを受信し、前記第１ストレージノードは、前記ライトデータから複数の分散配置ライトデータブロックを生成し、前記複数の分散配置ライトデータブロックから第１冗長データブロックを生成し、前記第１ストレージノードは、前記複数の分散配置ライトデータブロックそれぞれと前記第１冗長データブロックとを異なるストレージノードに送信し、前記異なるストレージノードは前記第２ストレージノードと前記第３ストレージノードとを含み、前記第１冗長データブロックの配置先は前記第３ストレージノードであり、前記第２ストレージノードは、保持している分散配置ライトデータブロックから、複数の分散配置ライトデータブロックを選択し、前記選択された複数の分散配置ライトデータブロックの再配置先ストレージノードが異なり、前記選択された複数の分散配置ライトデータブロックから生成される第２冗長データブロックの配置先が前記第３ストレージノードであり、前記第２ストレージノードは、前記選択された複数の分散配置ライトデータブロックから前記第２冗長データブロックを生成し、前記第２ストレージノードは、前記選択された複数の分散配置ライトデータブロックそれぞれを前記再配置先ストレージノードに再配置し、さらに、前記第２冗長データブロックを前記再配置先ストレージノード以外のストレージノードに配置 することで、前記第１ストレージノードが受信した前記オブジェクトの前記ライトデータが前記複数ストレージノードの何れかに再配置される。
【発明の効果】
【０００８】
本発明によれば、ストレージシステムにおいて、高い信頼性と高い性能を両立することができる。上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【０００９】
【図１Ａ】実施例１の概略を示す。
【図１Ｂ】実施例１の概略を示す。
【図２】分散ストレージシステムのハードウェア構成例を示す。
【図３】分散ストレージシステムのソフトウェア構成の概略を示す。
【図４Ａ】メタデータ管理表の構成例を示す。
【図４Ｂ】分散データ管理表の構成例を示す。
【図５Ａ】実施例３で用いられるメタデータ構造Ｔ構成例を示す。
【図５Ｂ】実施例４で用いられるコピー保持ノード管理表の構成例を示す。
【図６】一つのストレージノードによるデータ格納処理の概要のフローチャートを示す。
【図７】再配置処理の概要のフローチャートを示す。
【図８】データリード処理の概要のラダーチャートを示す。
【図９Ａ】実施例２の概要を示す。
【図９Ｂ】実施例２の概要を示す。
【図１０】図７のフローチャートにおけるステップＳ２１の詳細のフローチャートを示す。
【図１１】実施例３の概要を示す。
【図１２】分散ストレージシステムのソフトウェア構成の概略を示す。
【図１３】非同期で実施する最新データによる冗長データ再生成処理の概要のフローチャートを示す。
【図１４】実施例４において、アプリケーションプログラム／仮想マシンを割り当てる際のシステム構成図を示す。
【図１５】アプリケーションプログラム／仮想マシンの割当に伴うデータコピー処理の概要のフローチャートを示す。
【発明を実施するための形態】
【００１０】
幾つかの実施例を、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではなく、また実施例で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１１】
以下の説明では、「ＸＸテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために、「ＸＸテーブル」を「ＸＸ情報」と呼ぶことができる。
【００１２】
以下の説明では、プログラムを主語として処理を説明する場合があるが、プログラムは、ハードウェア自体、またはハードウェアが有するプロセッサ（例えば、ＭＰ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｏｒ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インターフェースデバイス（例えばポート）を用いながら行うため、処理の主語がハードウェア又はプロセッサとされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであってもよい。
【００１３】
以下において、分散ストレージシステムにおいて、高信頼データ再配置により性能を向上する方式が開示される。ストレージノードは、データを格納する１以上の記憶デバイスを含む。以下において、１以上の記憶デバイスが与える記憶領域をメディア領域と呼ぶ。記憶デバイスは、例えば、ハードディスクドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＳＤ）、複数ドライブからなるＲＡＩＤ等である。
【実施例１】
【００１４】
図１Ａ及び図１Ｂは、本実施例の概略を示す。分散ストレージシステムは、ネットワークを介して接続された複数のストレージノード（単にノードとも呼ぶ）を含み、そのうちの一部のストレージノード２０＿０〜２０＿３が示されている。図１Ａは、分散ストレージシステムによる、受信データの分散配置処理の例を示す。図１Ｂは、分散配置されたデータの再配置処理の例を示す。【００１５】
分散ストレージシステムは、データを、論理的にまとまったデータであるオブジェクトごとに管理する。また、データへのアクセスは、オブジェクトごとに発生する。オブジェクトとしては、通常のファイルの他、アーカイブファイル、バックアップファイル、ディレクトリ情報を格納するオブジェクト、空きブロックを管理するオブジェクト、仮想ボリューム、仮想計算機のボリュームファイルがある。オブジェクトは、ファイルの一部やボリュームの一部でもあり得る。【００１６】
分散配置処理は、各オブジェクトのライトデータ（ダミーデータを含み得る）及び当該ライトデータから生成した冗長データを、複数のストレージノードに分散して配置する。再配置処理は、複数のストレージノードに分散配置されている１又は複数オブジェクトそれぞれのデータを、オブジェクトそれぞれに関連付けられているストレージノード（ローカルノードと呼ぶ）に移動する。一つのオブジェクトのローカルノードの数は、１以上である。【００１７】
再配置処理は、さらに、一つのストレージノードに格納されている異なるローカルノードのデータから冗長データを生成し、当該一つのストレージノードと異なるストレージノードであって、それらローカルノードと異なるストレージノードに配置する。【００１８】
このように、冗長データを伴うライトデータ（ホストデータ）の分散配置処理と、冗長データを伴うローカルノードへのライトデータ（ホストデータ）の再配置処理と、によって、分散ストレージシステムの高い信頼性と高い性能とを実現することができる。【００１９】
図１Ａに示すように、例えば、分散ストレージシステムは、１又は複数のホストから、ライトデータＡ、Ｂ、及びＣを受信する。ライトデータＡ、Ｂ、及びＣは、それぞれ、不図示のＡ、Ｂ及びＣオブジェクトに対するライトデータである。【００２０】
ライトデータを受信したストレージノードは、受信したライトデータに対してデータブロック分割処理及び冗長データブロック生成処理を実行する。ライトデータは分割され、規定分割サイズのホストデータブロック（分散配置ライトデータブロック）が生成される。分割サイズは、オブジェクト毎に規定されている。生成されるホストデータブロックはダミーデータブロックを含み得る。【００２１】
さらに、冗長データブロックが、イレージャコーディングにより、ホストデータブロックを使用して生成される。図１Ａ及び１Ｂに示す冗長構成は、一つの冗長データブロックのみを含むが、ホストデータブロック及び冗長データブロックそれぞれの数は、設計に依存する。【００２２】
図１Ａにおいて、ライトデータＡから、ホストデータブロックａ０、ａ１、ａ２及び冗長データブロックＰａ０１２が生成される。ライトデータＢから、ホストデータブロックｂ０、ｂ１、ｂ２及び冗長データブロックＰｂ０１２が生成される。ライトデータＣから、ホストデータブロックｃ０、ｃ１、ｃ２及び冗長データブロックＰｃ０１２が生成される。【００２３】
同一の受信データから生成されたホストデータブロック及び冗長データブロックは、ストライプを構成する。ストライプは、複数のホストデータブロックと、当該複数のホストデータブロックから生成される１又は複数の冗長データブロックで構成され、ホストデータブロックと冗長データブロックの数は、システムにおける冗長構成の設計に依存する。【００２４】
ホストデータブロックは、例えば、オブジェクト内のオフセット（オブジェクト内アドレス）に従って生成される。例えば、ライトデータの分割位置は、オブジェクト内オフセットと規定サイズ（分割サイズ）から計算される。オブジェクト内のオフセットに代えて、受信データ内のオフセットを使用し、受信データの先頭から規定サイズのデータブロックに分割してもよい。【００２５】
受信データから、オブジェクトの冗長構成に依存する規定数の整数倍のホストデータブロックが生成される。図１の例において、Ａ、Ｂ及びＣオブジェクトの規定数は３であり、冗長構成のストライプにおけるホストデータブロック数に一致する。【００２６】
図１Ａにおいて、同一受信データから生成されたホストデータブロック及び冗長データブロックは、それぞれ異なるストレージノードに分散して配置される。ストレージノードは、データブロックをキャッシュに一旦格納した後、ストレージデバイスに格納する。ストレージデバイスはＳＳＤやＨＤＤ、不揮発性メモリ及びそれらのデバイスで構成したＲＡＩＤであり、キャッシュは省略してもよい。【００２７】
ストレージノードは、管理しているストレージデバイスにデータを格納し、管理されているストレージデバイスは、他のストレージノードを介することなくアクセスされる。ストレージデバイスは、例えば、コントローラから直接アクセスされる又はスイッチを介して接続される。【００２８】
図１Ａの例において、受信データＡ、Ｂ及びＣのホストデータブロックは、ストレージノード２０＿０、２０＿１及び２０＿２に分散して格納される。同一の受信データのホストデータブロックは、先頭から順にストレージノード２０＿０、２０＿１及び２０＿２に配置される。受信データＡ、Ｂ及びＣの冗長データブロックは、ストレージノード２０＿３に格納される。図１Ａは、冗長データブロックが１個だけの例を示す。複数の冗長データブロックが生成される構成においては、それぞれの冗長データブロックを格納するためのストレージノードが用意される。【００２９】
ストレージノード２０＿０〜２０＿３は、Ｅ、Ｆ及びＧオブジェクトの受信データＥ、Ｆ及びＧを既に格納している。ホストデータブロックｅ０〜ｅ２及び冗長データブロックＰｅ０１２は、受信データＥのデータブロックである。ホストデータブロックｆ０〜ｆ２及び冗長データブロックＰｆ０１２は、受信データＦのデータブロックである。ホストデータブロックｇ０〜ｇ２及び冗長データブロックＰｇ０１２は、受信データＧのデータブロックである。ストレージノード２０＿０〜２０＿３にホストデータブロック及び冗長データブロックを分散配置する方法は、受信データＡ、Ｂ及びＣと同様である。【００３０】
オブジェクトのデータブロックを格納するストレージノードの組は、予め設定されている。オブジェクトＩＤに対して、ホストデータブロックを格納する複数のストレージノードと冗長データブロック（パリティデータブロックとも呼ぶ）を格納する１又は複数のストレージノードとの組が定義されている。図１Ａの例において、Ａ〜Ｅオブジェクトのストレージノードの組は同一であり、ストレージノード２０＿０〜２０＿３で構成されている。【００３１】
ホストデータブロックを格納するストレージノード（データノードとも呼ぶ）は、ホストデータブロックのオブジェクトＩＤとオフセットとの組に対して割り当てられている。オフセットは、オブジェクト内又は受信データ内のオフセットである。【００３２】
冗長データブロックを格納するノード（パリティノードと呼ぶ）は、例えば、オブジェクトに対して固定である。つまり、パリティノードは、オブジェクトＩＤのみに対して割り当てられ、データのオフセット（アドレス）に依存しない。一つのストライプが複数の冗長データブロックを含む場合、複数のパリティノードがオブジェクトＩＤに対して規定され、冗長データブロックの種類に応じて格納するパリティノードが定義される。図１Ａの例において、パリティノードは一つのみであり、オブジェクトＩＤのみに関連付けられ、オブジェクト内の全てのデータブロック（ストライプ）に共通である。具体的には、Ａ〜Ｅオブジェクトのパリティノードは、ストレージノード２０＿３である。【００３３】
他の例において、パリティノードは、オブジェクトＩＤとオブジェクト内又は受信データ内のオフセットとの組に対して割り当てられてもよい。冗長データブロックは、オブジェクトにおいて同一のパリティノードが割り当てられている複数のホストデータブロックから生成される。例えば、オブジェクトに対して複数ストレージノードが割り当てられており、ホストデータブロックのオフセットに応じて、それらの中から当該ホストデータブロックのためのパリティノードが選択される。【００３４】
データブロックの分散配置先ノードの組は、他のアルゴリズムを利用して指定されていてもよい。例えば、ＣＲＵＳＨ（Controlled Replication Under Scalable Hashing）等のコンシステントハッシュアルゴリズムや分散ハッシュテーブルを使用して、オブジェクトＩＤとノード数とから、ホストデータと冗長データを含むデータブロックの分散配置先ノードの組が指定されてもよい。いずれかのアルゴリズムによってオブジェクトＩＤから分散配置先ノードを決定することで、容易かつ適切に分散配置先ノードを決定できる。【００３５】
図１Ｂは、分散配置されているホストデータブロック（ダミーデータを含み得る）の再配置処理の例を示す。一つのオブジェクトに対して１又は複数のローカルノードが割り当てられている。オブジェクトの分散配置されているホストデータブロックは、再配置後に、対応するローカルノードに格納される。一つのオブジェクトに対して複数のローカルノードが割り当てられている場合、ホストデータブロックのローカルノードは、オブジェクトＩＤ及びオフセットの組に対して関連づけられている。【００３６】
一つのオブジェクトに対して１又は複数のパリティノードが割り当てられている。パリティノードは、再配置処理において新たに生成される冗長データを格納する。新たに生成される冗長データブロックは、異なるローカルノードに格納され共通のパリティノードが割り当てられているホストデータブロックから、生成される。各冗長データブロックは、一つのストレージノードに格納されているホストデータブロックから生成される。【００３７】
パリティノードは、例えば、オブジェクトＩＤのみに対して割り当てられており、データのオフセット（アドレス）に依存せず、分散配置処理におけるパリティノードと、再配置処理におけるパリティノードとは、同一である。【００３８】
他の例において、複数パリティノードが指定されており、各パリティノードは、オブジェクトＩＤとオブジェクト内又は受信データ内のオフセットとの組に対して割り当てられてもよい。再配置におけるパリティノードの組と分散配置におけるパリティノードの組は同一又は異なる。【００３９】
例えば、一つのノード構成が複数のオブジェクトからなるオブジェクト群と予め関連付けられており、再配置処理は、分散配置処理における同一ノード構成を有するオブジェクトのデータの間で実行される。これにより、効率的なデータ管理が可能となる。分散配置処理におけるホストデータ（ダミーデータを含み得る）又は冗長データを格納するノードがそれぞれ共通であるオブジェクトのデータの間で実行される。再配置処理は、分散配置処理における異なるノード構成を有するオブジェクトのデータの間で実行されてもよい。【００４０】
図１Ｂの例において、Ａ〜Ｅオブジェクトは、分散配置における同一ノード構成を有しており、これらの間で再配置処理が実行される。Ａ〜Ｅオブジェクトにおいて、ローカルノードが異なる三つのオブジェクトのホストデータブロックから、新たな冗長データブロックが生成される。【００４１】
図１Ｂの例においては、各オブジェクトに対して一つのローカルノードが割り当てられている。ストレージノード２０＿０は、ライトデータＡ及びライトデータＥのローカルノードである。ストレージノード２０＿１は、ライトデータＢ及びライトデータＦのローカルノードである。ストレージノード２０＿２は、ライトデータＣ及びライトデータＧのローカルノードである。【００４２】
図１Ｂの例においては、各オブジェクトに対して一つのパリティノードが割り当てらており、Ａ〜Ｅオブジェクトに共通である。ストレージノード２０＿３は、データ再配置において新たに生成される冗長データブロックを格納する。各冗長データブロックは、再配置後にそれぞれ異なるストレージノードに格納されるホストデータブロックから生成される。【００４３】
図１Ｂにおいて、ホストデータブロックａ０、ｂ０、ｃ０から、冗長データブロックＰａｂｃ０が生成される。ホストデータブロックａ１、ｂ１、ｃ１から、冗長データブロックＰａｂｃ１が生成される。ホストデータブロックａ２、ｂ２、ｃ２から、冗長データブロックＰａｂｃ２が生成される。【００４４】
ホストデータブロックｅ０、ｆ０、ｇ０から、冗長データブロックＰｅｆｇ０が生成される。ホストデータブロックｅ１、ｆ１、ｇ１から、冗長データブロックＰｅｆｇ１が生成される。ホストデータブロックｅ２、ｆ２、ｇ２から、冗長データブロックＰｅｆｇ２が生成される。【００４５】
ローカルノードが異なれば、冗長データブロックを生成するための任意のオブジェクトの組み合わせが可能である。例えば、Ａオブジェクトのホストデータブロックは、Ｅオブジェクト以外の任意の二つのオブジェクトのホストデータブロックと共に冗長データを生成し得、Ｂオブジェクトのホストデータブロックは、Ｆオブジェクト以外の任意の二つのオブジェクトのホストデータブロックと共に冗長データを生成し得る。冗長データブロックを生成するホストデータブロックのオフセットの組み合わせは限定されず、任意である。【００４６】
図１Ｂにおいて、ホストデータブロックのサイズは同一である。冗長データブロックを生成するためのホストデータブロックの組み合わせにおいて、異なるオブジェクトのホストデータブロックのサイズ（分割サイズ）は異なっていてもよい。例えば、あるオブジェクトの分割サイズは、他のオブジェクトの分割サイズの整数倍であってもよい。【００４７】
Ａオブジェクトの分割サイズが、Ｂ及びＣオブジェクトの分割サイズのＮ倍（Ｎは整数）である場合、Ａオブジェクトの一つのホストデータブロックと、ＢオブジェクトのＮ個のホストデータブロックと、ＣオブジェクトのＮ個のホストデータブロックと、から、一つの冗長データブロックを生成することができる。【００４８】
冗長データＰＡＢＣは、冗長データブロックＰａｂｃ０、Ｐａｂｃ１、Ｐａｂｃ２で構成されている。冗長データＰＥＦＧは、冗長データブロックＰｅｆｇ０、Ｐｅｆｇ１、Ｐｅｆｇ２で構成されている。【００４９】
各ストレージノードは、再配置処理を実行可能なホストデータブロックを保持している場合、ホストデータブロックの再配置を開始する。ストレージノードは、冗長データ生成に必要な数の、パリティノードが同一で、ローカルノードが異なる、ホストデータブロック、を保持している場合、ストレージノードは再配置処理を実行することができる。再配置処理の開始の条件は、再配置対象のデータ量が規定値に達していることを含んでもよい。【００５０】
図１Ｂにおいて、冗長データを生成するためには、ローカルノードがそれぞれ異なる三つのホストデータブロックが必要である。また、一つのストレージノードにおいて、２ストライプのホストデータが格納済みであることが、再配置処理開始の条件であってもよい。【００５１】
図１Ｂにおいて、各ストレージノードは、再配置対象のホストデータブロックから、冗長データを生成する。ストレージノード２０＿０は、ホストデータブロックａ０、ｂ０、ｃ０から冗長データブロックＰａｂｃ０を生成し、ホストデータブロックｅ０、ｆ０、ｇ０から冗長データブロックＰｅｆｇ０を生成する。【００５２】
ストレージノード２０＿１は、ホストデータブロックａ１、ｂ１、ｃ１から冗長データブロックＰａｂｃ１を生成し、ホストデータブロックｅ１、ｆ１、ｇ１から冗長データブロックＰｅｆｇ１を生成する。ストレージノード２０＿２は、ホストデータブロックａ２、ｂ２、ｃ２から冗長データブロックＰａｂｃ２を生成し、ホストデータブロックｅ２、ｆ２、ｇ２から冗長データブロックＰｅｆｇ２を生成する。【００５３】
上述のように、冗長データを生成するために、他のホストデータブロックの組み合わせも可能である。例えば、一つのストレージノードは、Ａ、Ｂ、Ｃオブジェクトの組み合わせ及びＥ、Ｆ、Ｇオブジェクトの組み合わせを選択し、他の一つのストレージノードは、Ａ、Ｆ、Ｃオブジェクトの組み合わせ及びＥ、Ｂ、Ｇオブジェクトの組み合わせを選択してもよい。【００５４】
ストレージノード２０＿０〜２０＿２は、それぞれ、生成した冗長データブロックをまとめて、ストレージノード２０＿３に送信し、さらに、同一ローカルノードのホストデータブロックをまとめて、当該ローカルノードに送信する。これにより、ネットワーク上のデータ通信回数を低減する。【００５５】
例えば、ストレージノード２０＿０は、冗長データブロックＰａｂｃ０、Ｐｅｆｇ０を一つの通信データユニットに含めて、ストレージノード２０＿３に送信する。また、ストレージノード２０＿０は、ホストデータブロックｂ０、ｆ０を一つの通信データユニットに含めて、ストレージノード２０＿１に送信し、ホストデータブロックｃ０、ｇ０を一つのデータユニットに含めて、ストレージノード２０＿２に送信する。【００５６】
ローカルノード（ストレージノード２０＿０〜２０＿２）は、受信したホストデータブロックによって、保持している対応オブジェクトを更新する。ストレージノード（ストレージノード２０＿０〜２０＿２）は、再配置処理において他のストレージノードに送信した後に冗長性が確保されて不要になったホストデータブロックを、削除する。例えば、ホストデータブロックが再配置され、さらに、当該ホストデータブロックから再配置のために生成された冗長データブロックがパリティノードに格納された後に、当該ホストデータブロックの旧データは削除される。【００５７】
パリティノード（ストレージノード２０＿３）は、他のストレージノードから冗長データを受信した後、冗長性が確保されて不要になった冗長データブロックを削除する。図１Ｂの例において、ストレージノード２０＿３は、冗長データブロックＰａ０１２、Ｐｂ０１２、Ｐｃ０１２、Ｐｅ０１２、Ｐｆ０１２、Ｐｇ０１２を削除する。例えば、冗長データブロックの生成要素で全てのホストデータブロックが再配置され、全てのホストデータブロックの新たな冗長データブロックが格納された後、冗長データブロックは削除される。【００５８】
再配置処理により、アプリケーション（ホスト）がオブジェクトのデータを必要とした場合に、ストレージノード間でのネットワークにおけるデータブロックの転送無しに、ローカルリードを実現し、性能を向上することができる。【００５９】
図２は、分散ストレージシステムのハードウェア構成例を示す。図２の例において、分散ストレージシステムは、複数のストレージノード２０＿０〜２０＿Ｎ及び管理システム５０を含む。ストレージノード２０＿０〜２０＿Ｎは、インターナルネットワーク１０２を介して互いに接続され、さらに、管理システム５０に接続されている。【００６０】
ストレージノード２０＿０〜２０＿Ｎの管理を行うために、独立したネットワークを作成してもよい。ストレージノード２０＿０〜２０＿Ｎは、データネットワーク１００を介して、１又は複数のホスト１０（一つのホストのみ例示）に接続されている。一つのホスト１０は、例えば、サーバ計算機、支社のファイルストレージ装置、ＰＣ又はスマートフォン等である。【００６１】
管理システム５０は、１又は複数の計算機で構成される。管理システム５０は、例えば、サーバ計算機と当該サーバ計算機にネットワークを介してアクセスする端末とを含む。管理者は、端末の表示デバイス及び入力デバイスを介して、ストレージノード２０＿０〜２０＿Ｎを管理及び制御する。【００６２】
インターナルネットワーク１０２及びデータネットワーク１００は、それぞれ、例えば、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、公衆回線、又は専用回線などである。インターナルネットワーク１０２及びデータネットワーク１００は、同一ネットワークでもよい。【００６３】
ストレージノードは、汎用的な計算機の構成を有することができる。図２において、ストレージノード２０＿０は、メモリ２１、補助記憶装置２２、プロセッサ２４、データネットワークとのインタフェース（Ｉ／Ｆ）２６、及び補助記憶装置２２との他のデバイスとの間のＩ／Ｆ２８を含む。メモリ２１、プロセッサ２４、Ｉ／Ｆ２６、及びＩ／Ｆ２８はバス２９に接続されている。メモリ２１及び補助記憶装置２２は、共にプロセッサ２４により管理される記憶装置である。補助記憶装置２２は、直接アクセスストレージでもよく、スイッチ装置を介してアクセスされてもよい。他のストレージノードも、同様の構成を有してよい。【００６４】
メモリ２１に格納されるデータは、典型的には、ネットワーク１００若しくは１０２を介して転送されてきたデータ、又は、補助記憶装置２２からロードされたデータである。補助記憶装置２２は、例えば、１以上のＨＤＤ、ＳＳＤ又はＲＡＩＤで構成されている。補助記憶装置２２は、再配置後のオブジェクト又は冗長データを格納する他、再配置処理が終了する前のオブジェクトや制御情報を一時的に格納する領域も提供する。【００６５】
メモリ２１は、補助記憶装置２２から読み出された情報を記憶するために用いられるほか、ホスト１０から受信したデータを一時的に格納するキャッシュメモリとして用いられる。メモリ２１は、さらに、プロセッサ２４のワークメモリとして用いられる。メモリ２１には、ＤＲＡＭ等の揮発性メモリまたはＦｌａｓｈ  Ｍｅｍｏｒｙ等の不揮発性メモリが使用される。メモリ２１は、補助記憶装置２２よりも高速にデータの読み書きができる。補助記憶装置２２は省略されてもよい。【００６６】
プロセッサ２４は、メモリ２１に記憶されているプログラムや演算パラメータ等に従って動作する。プロセッサ２４は、プログラムに従って動作することで、特定の機能部として働く。例えば、プロセッサ２４は、後述するデータ分割・再構成プログラム２２０に従って動作することで、データ分割・再構成部として機能する。他のプログラムについても同様である。【００６７】
図３は、分散ストレージシステムのソフトウェア構成の概略を示す。図３の例において、ストレージノード２０＿０〜２０＿Ｎは、同様のソフトウェア構成を有する。メモリ２１は、データ分割・再構成プログラム２２０、冗長データ生成・損失データ回復プログラム２２１、メタデータ情報分散管理プログラム２２２、及びメタデータ管理表Ｔ２０を格納している。これらは、例えば、補助記憶装置２２からロードされている。【００６８】
メタデータ管理表Ｔ２０は、オブジェクトの受信データのホストデータブロック及びそれらの１以上の冗長データブロックそれぞれの、格納先ストレージノードを示す。これらは、オブジェクトのノード構成情報に含まれる。メタデータ管理表Ｔ２０に代えて、メタデータ情報分散管理プログラム２２２が、ＣＲＵＳＨ等に基づく計算によって、データブロックそれぞれの格納先を決定するために必要な情報を生成してもよい。【００６９】
一例において、ストレージノード２０＿０〜２０＿Ｎのメタデータ管理表Ｔ２０は、情報を、オブジェクトＩＤに従って、分散管理する。例えば、メタデータ情報分散管理プログラム２２２は、データを受信したオブジェクトのノード構成情報を入手するため、オブジェクトＩＤから一つのストレージノードＩＤを計算し、当該ストレージノードから当該オブジェクトＩＤに対するノード構成情報を入手する。分散管理により、メタデータ情報の保持に必要な記憶リソースを低減する。【００７０】
これに代えて、各ストレージノードのメタデータ管理表Ｔ２０が、全てのオブジェクトの情報を格納していてもよい。メタデータ管理表Ｔ２０を使用することなく、メタデータ情報分散管理プログラム２２２が、オブジェクトＩＤに対するノード構成情報を計算により求めてもよい。【００７１】
ホスト１０は、分散ストレージシステムへ、ネットワーク１００を介して、オブジェクトのライトデータを送信する。例えば、ストレージノード２０＿０は、ライトデータを受信する。メタデータ情報分散管理プログラム２２２は、受信データのオブジェクトＩＤに対応する情報を、いずれかのストレージノードに格納されているメタデータ管理表Ｔ２０から取得する。【００７２】
ストレージノード２０＿０は、受信データの、オブジェクトＩＤ、オフセット及びメタデータから、受信データ及び冗長データを格納する複数のストレージノードを決定する。オブジェクトＩＤに関連付けられているノード構成情報は、オブジェクトのデータ（ホストデータ）及び冗長データを格納する複数のストレージノードＩＤを示す。【００７３】
上述のように、ホストデータブロックを格納するストレージノードは、オブジェクトＩＤとホストデータブロックのオフセットとの組と関連づけられている。冗長データブロックを格納するストレージノードは、オブジェクトＩＤのみ又はオブジェクトＩＤとホストデータブロックのオフセットとの組と関連づけられている。また、一つのストレージノードが、複数オブジェクトのホストデータブロック又は複数オブジェクトの冗長データブロックを格納するように、定義されている。【００７４】
データ分割・再構成プログラム２２０は、受信データから規定サイズのホストデータブロックを生成する。必要な場合、ダミーデータが追加される。冗長データ生成・損失データ回復プログラム２２１は、生成したホストデータブロックから、冗長データを生成する。【００７５】
データ分割・再構成プログラム２２０は、決定した複数ストレージノードへ、生成したデータブロックそれぞれを、ネットワーク１０２を介して分散配置する。ホストデータブロックと共に、そのオブジェクトＩＤ及びオフセットを含むアドレス情報が転送される。分散配置において転送されたデータブロックを受信したストレージノードは、応答を返し、さらに、受信したデータを補助記憶装置２２へ格納する。その後、ホスト１０からデータを受信したデータ分割・再構成プログラム２２０は、ホスト１０へ、ネットワーク１００を介して完了応答を返す。【００７６】
メタデータ情報分散管理プログラム２２２は、該当オブジェクトの管理情報を更新する。管理情報は、メタデータ管理表Ｔ２２及び後述する分散データ管理表Ｔ４０の情報を含む。メタデータ情報分散管理プログラム２２２は、該当オブジェクトの管理情報を保持するストレージノードに更新情報を通知し、通知を受けたストレージノードのメタデータ情報分散管理プログラム２２２が、テーブルを更新（作成を含む）する。【００７７】
メタデータ情報分散管理プログラム２２２は、再配置処理を開始するのに必要な分散配置されたデータが格納されたと判定すると、再配置処理を開始する。メタデータ情報分散管理プログラム２２２は、冗長データ生成に必要な数（規定条件を満たす数）の、パリティノードが同一で、ローカルノードが異なる、ホストデータブロック、が格納された後、再配置処理を実行する。冗長データは、１又は複数のオブジェクトの複数ホストデータブロックから生成される。【００７８】
再配置処理の開始は、上述のように、再配置するデータ量が規定量に達していることも条件であってもよい。再配置処理は、図１Ｂの例のように、分散配置の構成ノードが全て同一のオブジェクト間においてのみ行ってもよい。【００７９】
メタデータ情報分散管理プログラム２２２は、再配置する１又は複数のオブジェクトを決定し、その決定したオブジェクトの情報を、当該オブジェクトが関連するストレージノード、具体的には、当該オブジェクトの分散ホストデータ又は分散冗長データを格納するストレージノード、及び、当該オブジェクトのローカルノードのメタデータ情報分散管理プログラム２２２へ通知する。【００８０】
オブジェクトの分散ホストデータ又は分散冗長データを格納するストレージノードは、分散配置における当該オブジェクトの構成ノードであり、メタデータ管理表Ｔ２０に含まれている。【００８１】
再配置処理を行う各ストレージノードにおいて、冗長データ生成・損失データ回復プログラム２２１は、自ノードで保持するホストデータブロックから、再配置用の冗長データを生成する。データ分割・再構成プログラム２２０は、ストレージノード毎に再配置すべきホストデータブロック又は冗長データブロックをまとめて、一回のコネクションで各ストレージノードへ転送する。【００８２】
データ分割・再構成プログラム２２０は、他のストレージノードから受信したホストデータにより補助記憶装置２２のオブジェクトを更新する（ローカルノード）、又は、冗長データを補助記憶装置２２に格納する（パリティノード）。【００８３】
再配置に関連したストレージノードそれぞれのデータ分割・再構成プログラム２２０は、再配置のために選択されたオブジェクトの全ての関連ストレージノード間でのデータ転送（データ再配置）が完了したことを相互に通知することで確認すると、メタデータ情報分散管理プログラム２２２経由で、再配置処理を行ったオブジェクトそれぞれの管理情報を更新する。データ分割・再構成プログラム２２０は、データ再配置で不要となった分散配置データを消去する。【００８４】
分散ストレージ間の相互通知方法は、例えば以下である。（１）ある１ノードが再配置処理を完了したら、その完了通知を関連する各ノードへ送信する。（２）例えば、再配置の状態管理を行うメインノード（例えばパリティノード）を決定し、そのメインノードが状態を管理する。例えば、ある１ノードが再配置処理を完了したら、その完了通知をメインノードへ通知する。メインノードは再配置に関連する全てのノードから完了通知を受信すると、各ノードへ旧データ削除命令を通知する。【００８５】
本構成により、信頼性を維持したままデータの再配置を行い、ローカルリードによる性能向上を実現できる。なお、メタデータ情報分散管理プログラム２２２、データ分割・再構成プログラム２２０は、ストレージノードの削除・追加に合わせて、リバランス処理を行ってもよい。【００８６】
図４Ａ、４Ｂは、分散ストレージシステムにおける管理情報の例を示す。図４Ａは、メタデータ管理表Ｔ２０の構成例を示す。メタデータ管理表Ｔ２０は、オブジェクトＩＤ欄Ｃ２、優先度欄Ｃ４、構成ノード欄Ｃ６、再配置処理状態欄Ｃ７、及び分割サイズ欄Ｃ８を有する。【００８７】
オブジェクトＩＤ欄Ｃ２は、当該テーブルが管理しているオブジェクトのオブジェクトＩＤを格納する。メタデータが分散管理されている場合には、システムが格納するオブジェクトの一部のみの情報が一つのメタデータ管理表Ｔ２０に格納されている。優先度欄Ｃ４は、オブジェクトＩＤ（欄Ｃ２）に対応した優先度を示す。優先度は、例えば、管理システム５０を介して、ユーザにより予め設定される。【００８８】
構成ノード欄Ｃ６は、オブジェクトＩＤ（欄Ｃ２）により同定されるオブジェクトの分散処理におけるホストデータ又は冗長データを格納する各ストレージノード、及び、再配置後にオブジェクト又は冗長データを格納する各ストレージノードの情報を示す。パリティノードがオフセットに依存する場合、その情報も示される。【００８９】
再配置処理状態欄Ｃ７は、オブジェクトＩＤ（欄Ｃ２）により同定されるオブジェクトの再配置処理状態を示す。状態は、未、再配置中、又は済のいずれかである。状態「未」は、再配置がされていない状態を示す。状態「再配置中」は、現在、再配置処理中であることを示す。状態「済」は、再配置処理が完了した状態を示す。再配置処理状態は、ビットマップを用いて管理されてもよい。【００９０】
分割サイズ欄Ｃ８は、オブジェクトＩＤ（欄Ｃ２）により同定されるオブジェクトを、分割し複数のストレージノードへ分散配置する際の分割サイズを示す。つまり、分散処理におけるホストデータブロックのサイズを示す。サイズ０は、分割しないことを示す。オブジェクトの分割サイズが複数の規定値から選択された値である場合、ビットマップを用いて管理しても良い。【００９１】
図４Ｂは、分散データ管理表Ｔ４０の構成例を示す。分散データ管理表Ｔ４０は、再配置処理中のオブジェクト毎に作成され、例えば、オブジェクトの担当ストレージノードが、メタデータ管理表Ｔ２０と共に保持する。分散データ管理表Ｔ４０は、オブジェクト内の再配置中のデータの管理情報を保持する。【００９２】
分散データ管理表Ｔ４０は、範囲（ＬＢＡ）欄Ｃ２２、構成ノード欄Ｃ２４、分割サイズ欄Ｃ２６を有する。範囲（ＬＢＡ）欄Ｃ２２は、再配置中データのオブジェクトにおけるアドレス範囲（ＬＢＡ）を示す。構成ノード欄Ｃ２４は、再配置中データを格納しているストレージノードを示す。分割サイズ欄Ｃ２６は、再配置中データの分割サイズ（ホストデータブロックサイズ）を示す。【００９３】
図５Ａ及び５Ｂは、分散ストレージシステムにおける管理情報の例を示す。図５Ａは、実施例３で用いられるメタデータ構造Ｔ２７の構成例を示す。図５Ｂは、実施例４で用いられるコピー保持ノード管理表Ｔ２８の構成例を示す。メタデータ構造Ｔ２７及びコピー保持ノード管理表Ｔ２８の詳細は、対応する実施例において説明する。【００９４】
図６は、一つのストレージノードによるデータ格納処理の概要のフローチャートを示す。ストレージノードは、ホスト１０から受信したデータを、複数ノードに分散して格納する。ホスト１０からデータを受信したストレージノードは、受信したデータの格納先ノードを決定する（Ｓ１１）。【００９５】
具体的には、メタデータ情報分散管理プログラム２２２は、受信したデータのオブジェクトＩＤから、当該オブジェクトのメタデータ管理表Ｔ２０を含む管理情報を格納するストレージノードを特定する。メタデータ情報分散管理プログラム２２２は、特定したストレージノードから、分散処理における構成ノードの情報と、分割サイズの情報を取得する。【００９６】
メタデータ情報分散管理プログラム２２２は、取得した情報から、ホストデータと冗長データを格納するストレージノードを決定する。メタデータ情報分散管理プログラム２２２は、受信データのオブジェクトＩＤから、ＣＲＵＳＨ等のアルゴリズムに基づき構成ノードを算出してもよい。【００９７】
分割サイズが規定値より大きく、再配置処理が不要である場合、メタデータ情報分散管理プログラム２２２は、受信したデータのオブジェクトの再配置処理状態を「済み」と設定し、そうではない場合には「未」と設定する。メタデータ情報分散管理プログラム２２２は、当該オブジェクトの管理情報を保持するストレージノードに、再配置処理状態の判定結果を通知する。分割サイズが大きい場合、一回のリードアクセスが分割サイズ内のデータあることが多く、ローカルリードのための再配置不要である。再配置処理省略により、システム負荷を低減する。なお、分割サイズに拠らず再配置処理が必要であると判定してもよい。【００９８】
データ分割・再構成プログラム２２０は、受信データを、当該オブジェクトの分割サイズに従って分割し、複数ホストデータブロックを生成する（Ｓ１２）。データ分割・再構成プログラム２２０は、必要に応じてダミーデータを追加してデータブロックを生成し、又は、ダミーデータブロックを追加する。生成されるホストデータブロックの数は、冗長構成におけるデータノード数の整数倍である。【００９９】
次に、冗長データ生成・損失データ回復プログラム２２１は、冗長データを生成する（Ｓ１３）。冗長データ生成・損失データ回復プログラム２２１は、アドレス順で規定数のホストデータブロックを選択し、それらから、規定数（１以上）の冗長データブロックを生成する。冗長データブロックは異なるストレージノード格納されるホストデータブロックから生成される。【０１００】
データ分割・再構成プログラム２２０は、当該オブジェクトの構成ノードである、格納先ノードのそれぞれに、ホストデータブロック又は冗長データブロックを分散配置する（Ｓ１４）。具体的には、データ分割・再構成プログラム２２０は、対応するストレージノードそれぞれに、データブロックを送信し、送信先のデータ分割・再構成プログラム２２０は、受信データを補助記憶装置２２に格納した後、完了を送信元ストレージノードに返す。【０１０１】
さらに、受信データのオブジェクトの再配置状態が「再配置中」である場合には、ホスト１０からデータを受信したストレージノードのメタデータ情報分散管理プログラム２２２は、分散データ管理表Ｔ４０を更新（作成を含む）する。具体的には、メタデータ情報分散管理プログラム２２２は、当該オブジェクトの分散データ管理表Ｔ４０を管理するストレージノードに、新たに生成したホストデータブロックのアドレス情報と格納先ノードの情報を送信する。送信先のメタデータ情報分散管理プログラム２２２は、受信した情報に従って、当該オブジェクトの分散データ管理表Ｔ４０を更新する。【０１０２】
図７は、再配置処理の概要のフローチャートを示す。図７は、一つのストレージノードの処理を示す。メタデータ情報分散管理プログラム２２２は、データ再配置を行うオブジェクトの候補を決定する（Ｓ２１）。たとえば、メタデータ情報分散管理プログラム２２２は、そのストレージノードが保持しているホストデータブロックの全てのオブジェクトを選択する。【０１０３】
次に、メタデータ情報分散管理プログラム２２２は、選択したオブジェクトそれぞれのデータ再配置に必要なデータセット（ホストデータブロック）が存在するか否かを判定する（Ｓ２２）。再配置に必要なホストデータブロックは、冗長構成及び予め設定された条件に依存する。たとえば、再配置に必要なホストデータブロックは、冗長データを生成可能であって、規定量以上のホストデータブロックである。データ量の条件は設定されていなくてもよい。【０１０４】
冗長データの生成に必要なデータホストブロックは、同一のパリティノード、異なる再配置先ノードのホストデータブロックの組であって、その数が冗長構成のデータノード数を満たすものである。冗長データを生成するオブジェクトの組は予め設定されていてよく、冗長データを生成するオブジェクトは、分散配置における同一ノード構成のオブジェクトに限定されてもよい。たとえば、図１Ｂの例において、冗長データは、Ａ、Ｂ、Ｃ、Ｅ、Ｆ、Ｇオブジェクトの組内で生成されてもよい。【０１０５】
いずれのオブジェクトの再配置のためにも必要なホストデータブロックが存在していない場合（Ｓ２２：ＮＯ）、メタデータ情報分散管理プログラム２２２は、再配置に必要なホストデータブロックが揃うのを待つため、ステップＳ２１に戻る。いずれかのオブジェクトの再配置を実行するためのホストデータブロックが保持されている場合（Ｓ２２：ＹＥＳ）、フローはステップＳ２３Ａに進む。【０１０６】
メタデータ情報分散管理プログラム２２２は、オブジェクト毎に、今回の処理フローで再配置を実行する回数Ｎを計算する（Ｓ２３）。一つのオブジェクトについての一回の再配置は、一つのストライプの再配置であり、ホストデータブロックから冗長データを生成し、複数ローカルノード及び１以上のパリティノードに格納する。オブジェクトの再配置を実行する回数は、当該ストレージノードから当該オブジェクトの一つのローカルノードにホストデータを送信する最大回数である。【０１０７】
上述のように、同一ストレージノードに送信するデータブロックは、まとめて送信することが通信トラヒックの点から好ましい。しかし、１回の再配置処理で対象の全てのデータの再配置をしない方がよい場合がある。例えば、再配置対象データのサイズが大きい場合や、再配置を実施するために割り当てることができる物理リソース（ＣＰＵ、メモリ、ネットワーク、Ｉ／Ｏ）が少ない場合である。【０１０８】
例えば、メタデータ情報分散管理プログラム２２２は、送信データ量及び／又は現在の処理負荷等の状態情報を参照に、予め設定された条件に従って、各オブジェクトのホストデータの送信回数を決定する。【０１０９】
例えば、オブジェクトの再配置回数が多い場合、全てのデータの再配置が終わってから再配置後のデータを有効にすると、多くの時間がかかる場合がある。メタデータ情報分散管理プログラム２２２は、いずれかの回数Ｎが規定数に達しているか（規定数以上であるか）否か判定してもよい。規定数は１より大きい値であり、２でもよい。回数Ｎが規定数に達している場合、分散ストレージシステムは、全ての対象データの再配置前に、再配置処理の対象データを送信後に逐次的に有効にしてもよい。例えば、メタデータ情報分散管理プログラム２２２は、ホストデータブロックの送信と共に、当該ブロックを有効にすることの指示を送信し、ローカルノードはその指示に従う。【０１１０】
メタデータ情報分散管理プログラム２２２は、メタデータ管理表Ｔ２０において、再配置を開始するオブジェクトの再配置状態を「再配置中」へ変更する。再配置対象オブジェクトの管理情報を保持している管理担当ストレージノードに、再配置を実行することを決定したノードから当該通知がなされる。【０１１１】
メタデータ情報分散管理プログラム２２２は、再配置対象のオブジェクトそれぞれの再配置回数Ｎが０より大きい否かを判定する（Ｓ２４）。全てのオブジェクトの回数Ｎが０である場合（Ｓ３４：ＮＯ）、フローはステップＳ３３に進む。いずれかのオブジェクトの回数Ｎが１より大きい場合、フローはステップＳ２５に進む。【０１１２】
冗長データ生成・損失データ回復プログラム２２１は、ストレージノードに格納されており、冗長データ生成の要件を満たす同一又は異なるオブジェクトのホストデータブロックから、冗長データを作成する（Ｓ２５）。【０１１３】
冗長データ生成の要件は、設計に依存する。例えば、生成される冗長データを格納するパリティノードが同一であり、再配置後に格納されるローカルノードが異なる、規定数のホストデータブロックから冗長コードブロックが生成される。分散配置における同一構成ノードのホストデータブロックの組に限定されてもよく、予め定められたオブジェクト間においてのみ冗長データが生成されてもよい。【０１１４】
データ分割・再構成プログラム２２０は、宛先ノード毎に、送信データを決定し（Ｓ２６）、各宛先ノードにデータをまとめて送信する（Ｓ２７）。上述のように、まとめられるデータ量はデータサイズや処理負荷に応じて決定されてもよい。オブジェクトデータ（ホストデータ）はローカルノードに送信され、冗長データはパリティノードに送信される。データを受信したストレージノードは、受信データを一時領域に格納する（Ｓ２８）。一時領域は、メモリ２１上でもよく、補助記憶装置２２上の一時的な格納領域でもよい。【０１１５】
データ分割・再構成プログラム２２０は、生成した冗長データ及びそれを生成したホストデータの再配置が終了すると、関係するストレージノード、具体的には、再配置を実行したオブジェクトそれぞれの構成ノード（メタデータ管理表Ｔ２０に示されている）に通知する。データ分割・再構成プログラム２２０は、再配置に関係する全ストレージノードからの通知により、再配置に関係する全ストレージノードが再配置データの受信を完了したこと確認した（Ｓ２９）後、再配置された旧データを削除する（Ｓ３０）。これにより、再配置処理におけるデータの冗長性が維持される。分散ストレージ間の相互通知方法は上述の通りである。【０１１６】
データ分割・再構成プログラム２２０は、一時領域に格納されているデータを補助記憶装置２２の領域に格納する（Ｓ３１）。ホストデータは、旧データの格納位置に格納される。このステップは、一時領域を継続して利用する場合は不要である。【０１１７】
データ分割・再構成プログラム２２０は、再配置を実行した各オブジェクトの分散データ管理表Ｔ４０を更新する。メタデータ情報分散管理プログラム２２２は、オブジェクトの分散データ管理表Ｔ４０を保持する管理担当ストレージノードに、再配置したデータの情報を通知し、管理担当ストレージノードのメタデータ情報分散管理プログラム２２２が、受信データに従ってオブジェクトの分散データ管理表Ｔ４０のデータ格納位置情報を更新する（Ｓ３２）。全てのエントリが削除された分散データ管理表Ｔ４０は削除される。その後、シーケンスはＳ２３に戻る。【０１１８】
ステップＳ２４において全てのオブジェクトの再配置回数が０である場合（Ｓ２４：ＮＯ）、メタデータ情報分散管理プログラム２２２は、再配置を実行したオブジェクトそれぞれの分散データ管理表Ｔ４０を保持する管理担当ストレージノードに、再配置の終了を通知する。管理担当ノードのメタデータ情報分散管理プログラム２２２は、全ての関連ノードから再配置の終了通知を受けると、当該オブジェクトのメタデータ管理表Ｔ２０の情報を更新する（Ｓ３３）。再配置処理状態欄Ｃ７の値が「済」に更新される。分散ストレージ間の相互通知方法は上述の通りである。【０１１９】
以上の処理から、ホストデータブロックからオブジェクトデータが再構成され、異なるオブジェクト間で、冗長データによるデータ保護がされる。【０１２０】
図８は、データリード処理の概要のラダーチャートを示す。ホスト１０又はリード要求を受信した受信ノードのメタデータ情報分散管理プログラム２２２は、リード要求からオブジェクトＩＤを決定し、当該オブジェクトの管理情報を保持する管理担当ノードを決定する。受信ノードは、管理担当ノードへリード要求の指定オブジェクト及びアドレスを転送し、指定アドレスの格納先の情報を問い合わせる（Ｓ４０）。【０１２１】
管理担当ノードは、指定オブジェクトの分散データ管理表Ｔ４０及び存在する場合にはメタデータ管理表Ｔ２０を参照して、指定アドレスのデータを格納しているストレージノードを特定する。管理担当ノードは、特定したストレージノードの情報を、受信ノードに返す（Ｓ４２）。【０１２２】
受信ノードは、指定されたストレージノードに、オブジェクトＩＤとアドレス指定して、データの転送を要求する（Ｓ４４、Ｓ４５）。データ転送要求を受けたストレージノードは、受信ノードに要求されたデータを返す（Ｓ４５、Ｓ４７）。受付ノードは、ホスト１０へリード要求に対するデータを応答し、リード処理が完了する。データは再配置処理により特定のローカルノードに格納されるため、リード要求時のノード間転送回数及び転送データ量が低減され、データリード性能を向上できる。【０１２３】
なお、ノード障害が発生した時は以下のように障害回復を行う。メタデータ情報分散管理プログラム２２２は、障害が起きたノードの回復処理後のデータを格納するノードを決定する。その後、データ分割・再構成プログラム２２０は、冗長データ生成・損失データ回復プログラム２２１と連携して、データの取得およびデータの回復を行い、回復後のデータを決定した格納先ノードへ格納する。その後、メタデータ情報分散管理プログラム２２２は、格納先ノード情報を更新して障害回復処理を終了する。
【実施例２】
【０１２４】
実施例２は、データ再配置処理を適用するオブジェクトを選択することにより、再配置処理に伴うオーバヘッドを削減する。以下において、実施例１と異なる部分を主に説明する。【０１２５】
図９Ａ及び図９Ｂは、本実施例の概要を示す。本実施例は、データ再構成処理を行うオブジェクトを限定する。図９の例において、Ｂ、Ｅ、Ｇオブジェクトが、再配置処理の対象として選択される。Ａ、Ｃ、Ｆオブジェクトのホストデータブロックは再配置されない。【０１２６】
図１０は、本実施例における、図７のフローチャートにおける、ステップＳ２１の詳細のフローチャートを示す。ステップＳ２１は、データ再配置を行うオブジェクトの候補を選択する。図１０において、メタデータ情報分散管理プログラム２２２は、メタデータ管理表Ｔ２０の優先度欄Ｃ４と、再配置処理状態欄Ｃ７とを参照し、再配置処理状態が「未」であり、優先度が最も高いオブジェクトを選択する（Ｓ５１）。優先度による他の選択基準が使用されてもよい。例えば、優先度が規定レベルに達しているオブジェクトが選択されてもよい。【０１２７】
メタデータ情報分散管理プログラム２２２は、再配置処理状態が「未」であり、アクセス頻度が規定値を超えるオブジェクトを選択する（Ｓ５２）。オブジェクトのアクセス頻度は、例えば、当該オブジェクトの管理情報を保持するストレージノードにより管理されている。アクセス頻度による他の選択基準が使用されてもよい。例えば、アクセス頻度が最も高いオブジェクトが選択されてもよい。【０１２８】
もし、アクセス頻度の高い範囲が、オブジェクト全体でなく、オブジェクト中のある限定された範囲である場合は、アクセス頻度が高いアドレス範囲のデータのみを再配置候補として選択してもよい。なお、当該範囲を含むオブジェクトは、再配置候補のオブジェクトである。分散ストレージシステムは、次の手順を実施する。
（１）該当オブジェクトのメタデータ管理表Ｔ２０の再配置処理状態を再配置中に設定する。
（２）対象データの再配置処理を実行する。分散データ管理表Ｔ４０を作成、更新する。
（３）再配置完了後も、メタデータ管理表Ｔ２０の再配置状態を変更せず、維持する。【０１２９】
これにより、オブジェクトの一部だけ配置方法が異なる場合も、分散データ管理表Ｔ４０により管理することができる。本処理は、オブジェクトのサイズが非常に大きく、その一部のデータ部分のみの再配置処理が必要な場合に特に有効である。【０１３０】
本実施例は、データ再配置処理を適用するオブジェクト又はオブジェクト内データを選択することにより、再配置処理に伴うオーバヘッドを削減する。また、データの優先度又はアクセス頻度に基づいて再配置処理を実施するオブジェクトの候補を選択することにより、効率よく再配置処理を実施し、性能向上を実現できる。
【実施例３】
【０１３１】
実施例３において、ストレージノードは、旧データを消去することなく、ライトデータ（更新データ）を追記し、メタデータによりデータ更新を管理する、追記書き機能を有する。分散配置されているデータに対する更新データを受信すると、分散ストレージシステムは、フルストライプによる冗長データの生成及び分散配置（フルストライプライト）を行うことで、書き込み性能を向上する。【０１３２】
図１１は、本実施例の概要を示す。通常、冗長構成のストライプに部分更新が起きた場合、その更新が発生した部分に関する新旧データ及びそれに関連するパリティを更新する必要がある。これにより、ストレージノード間のネットワーク通信がデータブロックを転送する度に発生し、ライト性能が低下する。【０１３３】
本実施例の分散ストレージシステムは、ライトデータを受信すると、ストライプを構成する他のデータが０データ（ダミーデータの一例）であると仮定し、フルストライプライトを行う。【０１３４】
図１１において、Ａオブジェクトの受信データ１５１は、ａ０＊＊更新データブロック１３０及びａ２＊更新データブロック１３２からなる。分散先のノード数に受信データ１５１が満たない場合には、０データブロック１３１が仮定され、データブロック１３０、１３１及び１３２から、Ｐａ０１２＊＊冗長データブロック１３３が生成される。【０１３５】
冗長データの生成に使用された０データブロックは、担当ストレージノードに転送されず、その担当ストレージノードへ新規に０データがライトされたことのみが通知される。図１１において、例えば、ストレージノード２０＿０は、０データブロック１３１をストレージノード２０＿１に転送せず、当該アドレスに対する０データのライトがあったことを通知する。【０１３６】
担当ストレージノード２０＿１は、当該アドレスのメタデータのみ更新する。本処理における０データは、フルストライプライトを実現する穴埋めのために、一時的に使用されるデータである。各ストレージノードは、０データを実際に記憶領域に格納せず、ユーザデータ位置を管理するメタデータにおいて、一時的な０領域であることを、ビットフラグ等を用いて、管理する。【０１３７】
データ一貫性は、ストレージノードのログライトにより維持される。ログライトは、更新データ及び更新メタデータを追記書きする。追記書きする更新時点をチェックポイントと呼ぶ。ログライトは、過去のチェックポイントから選択した一部又は全部のチェックポイントの更新データを、スナップショットとして保存する。これにより、更新データのスナップショットが自動かつ連続的に生成される。新規にチェックポイントを設定する時、ログライトは、チェックポイントを識別するチェックポイント番号をインクリメントする。【０１３８】
ログライトは、データを更新する時、データの更新箇所に対応する記憶メディア上のデータに更新データを上書きせず、更新データを記憶メディア領域上の別の領域に書き込む。これにより、任意チェックポイントのデータを復元できる。【０１３９】
図１１の例において、ＡオブジェクトのチェックポイントＮ−２において、分散ストレージシステムは、ストレージノード２０＿０〜２０＿３へ、ａ０更新データブロック１１０、ａ１更新データブロック１１１、ａ２更新データブロック１１２、Ｐａ０１２冗長データブロック１１３を分散配置する。【０１４０】
チェックポイントＮ−１において、ａ０データブロック１１０とａ１データブロック１１１の更新データである、ａ０＊更新データブロック１２０とａ１＊更新データブロック１２１がホストから書き込まれる。分散ストレージシステムは、０データブロック１２２が書き込まれたと仮定し、データブロック１２０、１２１、１２２からＰａ０１２＊冗長データブロック１２３を作成する。【０１４１】
分散ストレージシステムは、データブロック１２０、１２１、１２３を、ストレージノード２０＿０、２０＿１、２０＿３に格納する。分散ストレージシステムは、ストレージノード２０＿２には０データブロック１２２が書き込まれたと仮定する。【０１４２】
チェックポイントＮにおいて、ａ０＊＊更新データブロック１３０とａ２＊更新データブロック１３２がホストから書き込まれる。分散ストレージシステムは、０データブロック１３１が書き込まれたと仮定し、データブロック１３０、１３１、１３２からＰａ０１２＊＊冗長データブロック１３３を作成する。【０１４３】
分散ストレージシステムは、データブロック１３０、１３２、１３３を、ストレージノード２０＿０、２０＿２、２０＿３に格納する。分散ストレージシステムは、ストレージノード２０＿１には０データブロック１３１が書き込まれたと仮定する。【０１４４】
その後、分散ストレージシステムは、非同期で、最新データ（ａ０＊＊データブロック１３０、ａ１＊データブロック１２１、ａ２＊データブロック１３２）から、冗長データを再生成する。ここでは、最新データから冗長データが生成された前回のチェックポイントから、本非同期処理を実施するチェックポイント数Ｘが２である例を説明する。【０１４５】
チェックポイントＮ−２は、前回の最新データから冗長データが生成されたチェックポイントである。したがって、チェックポイントＮ−１とＮが、冗長データを生成する対象である。Ａオブジェクトにおいて、チェックポイントＮ−１のａ１＊データブロックで、ストレージノード２０＿３のＰａ０１２＊＊を更新するため、ストレージノード２０＿１は、ａ１＊データブロックのコピー１４１を、ストレージノード２０＿３へ転送する。【０１４６】
Ｐａ０１２＊＊＊冗長データブロック１５３は、ａ１＊データブロック１４１とＰａ０１２＊＊冗長データブロック１３３から生成された冗長データである。分散ストレージシステムは、Ｐａ０１２＊＊＊冗長データブロック１５３を生成後、補助記憶装置２２へ書き込み、チェックポイントＮ−１とＮに関して不要なデータを削除する。以上の手順により、信頼性を維持したまま、最新データの冗長データを再生成できる。なお、分散ストレージシステムは、Ｃオブジェクトに対しても、Ａオブジェクトと同様の処理を実行する。【０１４７】
このように、本実施例の分散ストレージシステムは、更新データを分散配置する時、ストライプを構成するために不足しているデータを０データと仮定し、フルストライプライトを行う。その後、分散ストレージシステムは、非同期処理において、最新データの冗長データを生成することで、冗長データの更新に伴うストレージノード間のデータ通信を低減し、性能を向上する。【０１４８】
図１２は、本実施例における分散ストレージシステムのソフトウェア構成の概略を示す。実施例１及び実施例２との相違点は、追記書きプログラム２２５である。追記書きプログラム２２５は、データを記憶装置へ書き込む時に追記書きを行う。【０１４９】
ここで、図５Ａの追記書き用メタデータ構造Ｔ２７は、追記書きプログラム２２５において、データ追記書き込み先アドレスを管理するメタデータである。追記書き用メタデータ構造Ｔ２７は、ストレージノード毎に用意され、保持される。追記書き用メタデータ構造Ｔ２７は、チェックポイント番号欄Ｃ４６、フラグ欄Ｃ４７、アドレス欄Ｃ４８を有する。【０１５０】
チェックポイント番号欄Ｃ４６は、データが書き込まれた時のチェックポイント番号を格納する。フラグ欄Ｃ４７は、ゼロ領域か、スパース領域か、一時書き込みか等を示すビットマップを格納する。ゼロ領域は、データがゼロである領域であり、実際にデータはゼロデータを書かなくてもよい。スパース領域は、何もデータが書かれていない領域である。一時書き込み領域は、前述したとおりである。アドレス欄Ｃ４８は、データが書き込まれたアドレスを格納する。【０１５１】
例えば、フルストライプライトのために０データを格納した領域に対して、フラグ欄Ｃ４７は、一時書き込みフラグとゼロ領域フラグを示す。また、アドレス欄Ｃ４８は、０埋めによる一時書き込み前のアドレスを保持する。一時書き込みかつゼロ領域フラグは、非同期書き込み処理時に、最新のデータかどうかを判定するためのビットフラグであり、実際にゼロデータが書き込まれたわけではない。そのため、アドレス欄Ｃ４８は、０埋めによる一時書き込み前のアドレスを保持し、データ整合性を維持する。【０１５２】
以下において、実施例１との相違点を主に説明する。図６の分散配置処理の冗長データ生成ステップＳ１３において、追記書きプログラム２２５は、冗長データを生成するために、一時的な０データが必要か否かを判定し、必要であれば０データを追加して冗長データを生成する。データブロック分散配置ステップＳ１４において、追記書きプログラム２２５は、一時的な０データの領域に割り当てられているストレージノードへ、０データの情報を通知する。【０１５３】
図１３は、非同期で実施する最新データによる冗長データ再生成処理の概要を示すフローチャートである。ホストデータブロックを保持する各ストレージノードの追記書きプログラム２２５は、現在のチェックポイント（ＣＰ）番号と当時の最新データ間で冗長データ生成が完了しているＣＰ番号との差が、本非同期処理を実施するチェックポイント数Ｘに達しているか判定する（Ｓ７１）。【０１５４】
Ｘはチューニングパラメータであり、例えば、管理システム５０から予め設定されている。Ｘが大きければ大きい程、非同期処理が走る回数が減り、システム負荷が減少する。一方、システムが一時的な０埋め情報を保持する期間が、長くなる。システム負荷やネットワーク負荷が軽い時に冗長データ再生成処理が実施されるように、Ｘは、動的に変更されてもよい。冗長データ再生成処理を即時に実行する場合には、Ｘの値は０に設定される。【０１５５】
ステップＳ７１の判定結果がＮＯの場合、追記書きプログラム２２５は、非同期処理を実行しない。ステップＳ７１の判定結果がＹＥＳの場合、追記書きプログラム２２５は、ステップＳ７２に進む。【０１５６】
パリティノードの追記書きプログラム２２５は、一時書き込み状態のストライプを保持する複数のチェックポイント内で、一つのストライプ（チェックポイント）を選定し、そのチェックポイント番号を決定する（Ｓ７２）。決定されたストライプは、関連データノードに通知される。例えば、追記書きプログラム２２５は、最新の冗長データへの更新のためにノード間データ移動が最小になるストライプ列を選択する。本例において、ストライプ内で最も多くの最新データブロックを保持するストライプが選択される。これにより、冗長データ更新に伴うネットワークデータ転送を最小化する。【０１５７】
一部のデータノードの追記書きプログラム２２５は、中間冗長データを生成する（Ｓ７４）。本ステップは、選択されたストライプに最新ホストデータブロックが含まれていないデータノードにより実行される。【０１５８】
追記書きプログラム２２５は、異なるチェックポイントのホストデータブロックから、冗長データを更新するためのデータブロックを選択する。追記書きプログラム２２５は、最新ホストデータブロックと選択されたストライプ内のホストデータブロックとを選択する。選択されたストライプ内のホストデータブロックが０データである場合は、最新データブロックのみ選択される。【０１５９】
冗長データ生成・損失データ回復プログラム２２１は、選択されたホストデータブロックから、中間冗長データを生成する（Ｓ７４）。選択されたストライプ内のホストデータブロックが０データである場合、中間冗長データは、最新のホストデータブロックである。データ分割・再構成プログラム２２０は、中間冗長データをパリティノードへ転送する（Ｓ７５）。【０１６０】
パリティノードにおいて、データ分割・再構成プログラム２２０は、転送されてきた中間冗長データを受信すると、冗長データ生成・損失データ回復プログラム２２１と連携して、中間冗長データとステップＳ７２で決定したストライプの冗長データとから、新冗長データを生成する（Ｓ７６）。ストライプの各追記書きプログラム２２５は、新冗長データが新規ＬＢＡへ書き込まれると、不要となった旧ホストデータを削除する（Ｓ７７）。ストライプの各追記書きプログラム２２５は、追記書き用メタデータ構造Ｔ２７において、最新データ間冗長データ生成ＣＰ番号を現在のＣＰ番号で更新し、処理を完了する。【０１６１】
更に、図１３に示す最新データによる冗長データ再生成処理と図７に示す再配置処理を組み合わせることが可能である。例えば、各ストレージノードが更新データの追記書き処理を行うことを前提とする。図７のステップＳ２５において、各ストレージノードは、関係するホストデータブロック間で冗長データを生成する際に、最新データを選択する。再配置処理により冗長データの更新も完了するため、図１３に示す最新データによる冗長データ再生成処理も完了する。【０１６２】
以上のように、本実施例は、更新データを分散配置する時、ストライプを構成する穴あきデータが０埋めデータと仮定して、フルストライプライトを行い、その後、非同期処理において、冗長データに最新更新データを反映する。更に、本処理を、実施例１又は２で示した再配置処理と組み合わせる。これらにより、冗長データの更新に伴うノード間データ通信を低減し、性能を向上する。
【実施例４】
【０１６３】
本実施例は、アプリケーションプログラム（アプリ）や仮想マシン（ＶＭ）を、オブジェクトの再配置先ストレージノード又はオブジェクトのコピーデータを保持するストレージノードへ配置する例、及び、それらノードへ割り当てられなかった場合に実行されるデータコピー方法を説明する。【０１６４】
アプリ／ＶＭを実行するストレージノードは、動的に割り当てることが可能である。例えば、アプリ／ＶＭは、データを保持するノードへ割り当ててもいいし、それ以外のノードへ割り当ててもよい。図１４は、アプリ／ＶＭを割り当てる際のシステム構成図を示す。実施例１との相違点として、各ストレージノードは、リソース管理（割当・解放）プログラム２２５、コピー解放プログラム２２８及びコピー保持ノード管理表Ｔ２８を保持する。【０１６５】
再配置処理を行う前にアプリ／ＶＭが配置されると、アプリ／ＶＭは、複数のストレージノードに分散された分割データを、内部ネットワーク１０２を介して取得し、元のオブジェクトまたはその一部を再構成する。これは、元のオブジェクトまたはその一部のコピーを保持することを意味する。【０１６６】
そこで、アプリ／ＶＭの割当先ノードは、一例として、アプリ／ＶＭが使用するデータのローカルノードが選択される。分散データの再配置処理は、アプリ／ＶＭによる再構成済みオブジェクトが存在することを利用する。【０１６７】
図７のステップＳ２６〜Ｓ３１は、再配置のためのデータ移動を、アプリ／ＶＭによる再構成済みデータを除いて実施する。この方法は、再構成済みデータを、コピー保持ノード管理表で管理する。つまり、データのコピーを作成する時に、コピー保持ノード管理表へコピー保持ノードの情報を登録し、再配置処理を実施する時に、コピー保持ノード管理表を参照し、利用する。これにより、再配置処理に伴うノード間ネットワーク通信データ量を削減する。また、コピーデータが既に存在する場合には、そのコピーデータ保持ノードへアプリ／ＶＭを割り当て、データ移動しないことによる性能向上を狙う。【０１６８】
図５Ｂは、コピー保持ノード管理表Ｔ２８を示している。コピー保持ノード管理表Ｔ２８は、コピーを保持するオブジェクト毎に作成され、例えば、オブジェクトの担当ストレージノードが、メタデータ管理表Ｔ２０と共に保持する。コピー保持ノード管理表Ｔ２８は、オブジェクト内のデータブロック単位のコピー保持ノードを保持する。【０１６９】
コピー保持ノード管理表Ｔ２８は、範囲（ＬＢＡ）欄Ｃ４２、コピー先構成ノード欄Ｃ４４を有する。範囲（ＬＢＡ）欄Ｃ４２は、他ノードへコピーされたデータブロックのアドレス範囲（ＬＢＡ）を示す。コピー先構成ノード欄Ｃ４４は、データブロックのコピーを保持するストレージノードを示す。【０１７０】
分散ストレージシステムは、アプリ／ＶＭを割り当てる際、コピー保持ノード管理表Ｔ２８を参照し、コピーが存在するストレージノードへ優先的にアプリ／ＶＭを割り当て、ローカルリードによる性能向上を図る。【０１７１】
コピーが存在しないストレージノードへアプリ／ＶＭを割り当てる場合が考えられる。例えば、データおよびそのコピーを保持するノードの、ＣＰＵやメモリ等のリソースが少ない場合である。【０１７２】
この場合、アプリ／ＶＭを割り当てた後に、データ保持ノードからアプリ／ＶＭを割り当てたノードに、アプリ／ＶＭのアクセスに従って、データをコピーする。このデータコピー方法は、既存のコピーデータを保持するノード毎に異なるデータコピー範囲（アドレス）を決めて、データコピーを行う。これより、データコピーを高速化する。データコピー処理は、優先度の高いオブジェクトのデータを優先してコピーしてもよい。【０１７３】
図１５は、アプリ／ＶＭの割当に伴うデータコピー処理の概要のフローチャートを示す。アプリ／ＶＭのノード割当要求に応じて、複数のストレージノードのリソース管理（割当・解放）プログラム２２５が、連携して、割当ノードを決定する（Ｓ６１）。割当ノードの選択の最優先はローカルノードであり、ローカルノードへの割り当てが不適切と判定されると、その他のストレージノードが選択される。【０１７４】
例えば、ローカルノードのリソースに余裕がない場合、他のストレージを選択する。選択される他のストレージノードは、リソースに余裕があるストレージノードである。リソースは、例えば、ＣＰＵ、メモリ及び／又は通信インタフェースであり、選択は、それらの利用率と閾値との比較結果に基づく。割当要求は、アプリ／ＶＭが参照するオブジェクトの情報を含む。【０１７５】
アプリ／ＶＭ割当要求を受けたノードのリソース管理（割当・解放）プログラム２２５は、アプリ／ＶＭ割当先ノードが、コピーを含んだデータ保持ノードかどうかを、コピー保持ノード管理表Ｔ２８を使用して確認する（Ｓ６２）。ステップＳ６２の確認結果がＹＥＳの場合、リソース管理（割当・解放）プログラム２２５は、コピー保持ノードへ、アプリ／ＶＭを割り当て（Ｓ６４）、処理を終了する。【０１７６】
ステップＳ６２の確認結果がＮＯの場合、リソース管理（割当・解放）プログラム２２５は、アプリ／ＶＭを新規ノードへ割り当て（Ｓ６３）、メタデータ管理表Ｔ２０を参照して、コピー処理が必要なオブジェクト間の優先度を決定する（Ｓ６５）。【０１７７】
コピー解放プログラム２２８が、コピーが必要なデータブロック毎に、コピー保持ノード間のリソース使用状況及び／又はネットワーク負荷を考慮しながら、データコピー範囲を決定する（Ｓ６６）。例えば、各ストレージノードのＣＰＵ使用率、メモリ使用量、及び又はネットワーク負荷から、各ストレージノードの比率を決定する。この比率に従って、各ストレージノードのデータコピー範囲（コピーデータ量）を決定する。【０１７８】
例えば、三つのデータコピー保持ノードが存在し、それらの間の比率が３：２：１と決定された場合、そのデータコピー範囲（アドレス範囲）は、３：２：１の割合と決定される。その後、コピー解放プログラム２２８は、データコピー処理を行う（Ｓ６７）。【０１７９】
最後に、コピー解放プログラム２２８が、コピー保持ノード管理表Ｔ２８において、当該オブジェクトＩＤに対して新規ノードを追加して、処理を完了する。コピー解放プログラム２２８は、コピーデータの削除を、ＬＲＵなどのアルゴリズムを用いて削除する。この時、コピー保持ノード管理表Ｔ２８からのノードＩＤの削除、全てのコピーが無くなればそのオブジェクトＩＤのエントリの削除を先に行い、その後にデータの削除を行う。【０１８０】
本実施例によれば、アプリ／ＶＭの割当を、再配置処理を行ったノードまたはコピーデータを保持するストレージノードへ配置し、更に、前記ストレージノードへ割り当てられなかった場合には、データコピーを、コピー保持ノードからデータコピー範囲を決めてから、実施する。更に、オブジェクト毎の優先度を考慮することで、優先度の高いオブジェクトの性能低下を回避する。【０１８１】
また、データ再配置時に、データコピーを考慮して実施し、コピーデータの高信頼データ再配置時のデータ移動を止めることで、高信頼データ再配置時のネットワーク負荷を回避する。以上により、アプリ／ＶＭのリード性能を向上させる。【０１８２】
本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。【０１８３】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示すとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１Ａ】
2017145375.tif 000003
【図１Ｂ】
2017145375.tif 000004
【図２】
2017145375.tif 000005
【図３】
2017145375.tif 000006
【図４Ａ】
2017145375.tif 000007
【図４Ｂ】
2017145375.tif 000008
【図５Ａ】
2017145375.tif 000009
【図５Ｂ】
2017145375.tif 000010
【図６】
2017145375.tif 000011
【図７】
2017145375.tif 000012
【図８】
2017145375.tif 000013
【図９Ａ】
2017145375.tif 000014
【図９Ｂ】
2017145375.tif 000015
【図１０】
2017145375.tif 000016
【図１１】
2017145375.tif 000017
【図１２】
2017145375.tif 000018
【図１３】
2017145375.tif 000019
【図１４】
2017145375.tif 000020
【図１５】
2017145375.tif 000021
【国際調査報告】
2017145375.tif 000022
2017145375.tif 000023