(57)【要約】  複数のアクティブオブジェクトストレージデバイスを含むアクティブドライブストレージシステムにおけるデータ除去、割り当て、及び再構築のための方法において、複数のアクティブオブジェクトストレージデバイスの各々が、１又は２以上のストレージデバイス及びコントローラを含む、前記方法が、提供される。前記方法は、複数のアクティブオブジェクトストレージデバイスのうちの特定された１つのコントローラが、受信されたデータを複数のデータチャンクにセグメンテーションするステップと、複数のデータチャンクに応じて１又は２以上のパリティチャンクを生じさせるステップとを含む。前記方法は、複数のアクティブオブジェクトストレージデバイスのうちの特定された１つのコントローラが、複数のデータチャンクの数、及び受信されたデータが記憶されるべきである複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上の数に応じて、複数のデータチャンク及び１又は２以上のパリティチャンクを再編成するステップをさらに含む。最後に、前記方法は、複数のアクティブオブジェクトストレージデバイスのうちの特定された１つのコントローラが、複数のデータチャンク及び１又は２以上のパリティチャンクを複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップを含む。
2018508073.tif 000002
【特許請求の範囲】
【請求項１】
複数のアクティブオブジェクトストレージデバイスを含むアクティブドライブストレージシステムにおけるデータ除去、割り当て、及び再構築のための方法において、前記複数のアクティブオブジェクトストレージデバイスの各々が、１又は２以上のストレージデバイス及びコントローラを含む、前記方法であって、
前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するために前記複数のアクティブオブジェクトストレージデバイスのうちの特定された１つにおいてデータを受信するステップと、
前記複数のアクティブオブジェクトストレージデバイスのうちの前記特定された１つのコントローラが、受信されたデータを複数のデータチャンクにセグメンテーションするステップと、
前記複数のアクティブオブジェクトストレージデバイスのうちの前記特定された１つのコントローラが、前記複数のデータチャンクに応じて１又は２以上のパリティチャンクを生じさせるステップと、
前記複数のアクティブオブジェクトストレージデバイスのうちの前記特定された１つのコントローラが、前記複数のデータチャンクの数、及び前記受信されたデータが記憶されるべきである前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上の数に応じて、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクを再編成するステップと、
前記複数のアクティブオブジェクトストレージデバイスのうちの前記特定された１つのコントローラが、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクを前記複数のアクティブオブジェクトストレージデバイスのうちの前記１又は２以上に記憶するステップとを含む、前記方法。
【請求項２】
複数のデータチャンク及び１又は２以上のパリティチャンクを再編成するステップが、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクをデータチャンク／パリティチャンクの１又は２以上のストライプへと再編成するステップを含む、請求項１に記載の方法。
【請求項３】
複数のデータチャンク及び１又は２以上のパリティチャンクを複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップが、前記複数のアクティブオブジェクトストレージデバイスのうちの前記１又は２以上へのデータチャンク／パリティチャンクの１又は２以上のストライプの各々の完全なストライプの書き込みを実行するステップを含む、請求項２に記載の方法。
【請求項４】
複数のデータチャンク及び１又は２以上のパリティチャンクを複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップが、受信されたデータのオブジェクトサイズを前記１又は２以上のパリティチャンクに書き込むステップを含む、請求項１に記載の方法。
【請求項５】
データを受信するステップが、
複数のアクティブオブジェクトストレージデバイスのうちの特定された１つにおいて前記データを受信するステップと、
受信されたデータが新しいデータであるのか又は更新データであるのかを決定するステップとを含み、
複数のデータチャンク及び１又は２以上のパリティチャンクを前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップが、
前記受信されたデータが新しいデータである場合に前記複数のアクティブオブジェクトストレージデバイスのうちの前記１又は２以上へのデータチャンク／パリティチャンクの１又は２以上のストライプの各々の完全なストライプの書き込みを実行するステップ、
前記受信されたデータが更新データである場合に、各ストライプに関して、前記完全なストライプが更新される必要があるのかどうか、又は前記ストライプの一部が更新される必要があるのかどうかを決定し、更新される必要があるそれぞれの完全なストライプに関して完全なストライプの書き込みを実行し、一部のみが更新されることを必要とする各ストライプに関して部分的な書き込みを実行するステップを含む、請求項２に記載の方法。
【請求項６】
部分的な書き込みを実行するステップが、
各ストライプに関する更新されるべきデータチャンク及び対応するパリティチャンクが記憶されるアクティブオブジェクトストレージデバイスから前記ストライプに関する前記データチャンク／パリティチャンクを並列に読み出すステップと、
受信されたデータに応じて前記更新されるべきデータチャンクを更新するステップと、
更新されたデータチャンクに応じて前記パリティチャンクを再計算するステップと、
各ストライプに関する前記データチャンク／パリティチャンクが記憶された前記アクティブオブジェクトストレージデバイスに前記ストライプに関する更新されたデータチャンク及び対応する再計算されたパリティチャンクを並列に書き込むステップとを含む、請求項５に記載の方法。
【請求項７】
各ストライプに関する更新されるべきデータチャンク及び対応するパリティチャンクを並列に読み出すステップが、
前記ストライプ内のそれぞれの更新されるべきデータチャンク及びそれぞれの対応するパリティチャンクに関してアクティブオブジェクトストレージデバイスのロケーションを計算するステップと、
前記ストライプ内の前記アクティブオブジェクトストレージデバイスのロケーションのすべてにチャンク読み出し要求を並列に送信するステップと、
読み出される前記更新されるべきデータチャンク及び前記対応するパリティチャンクの更新されたストライプを導出するために、前記チャンク読み出し要求に応答して受信されたデータチャンク及びパリティチャンクを合併するステップとを含む、請求項６に記載の方法。
【請求項８】
アクティブオブジェクトストレージデバイスのロケーションを計算するステップが、オブジェクトデータ分散アルゴリズムに応じてアクティブオブジェクトストレージデバイスのロケーションを計算するステップを含む、請求項７に記載の方法。
【請求項９】
データチャンク及びパリティチャンクを合併するステップが、
ストライプに関するチャンク読み出し要求のうちの１又は２以上に対する応答を受信することに失敗することに応じてチャンク読み出し障害が発生したかどうかを決定するステップと、
読み出された更新されるべきデータチャンク及び対応するパリティチャンクに応じて欠落しているチャンクを特定するステップと、
読み出された前記更新されるべきデータチャンク及び前記対応するパリティチャンクに応じて前記欠落しているチャンクに関するデータを計算するステップと、
前記更新されるべきデータチャンク及び前記対応するパリティチャンクの前記ストライプを導出するために、前記チャンク読み出し要求に応答して受信されたデータチャンク及びパリティチャンク並びに前記欠落しているチャンクに関する前記データを合併するステップとを含む、請求項７に記載の方法。
【請求項１０】
複数のアクティブオブジェクトストレージデバイスを含むアクティブドライブストレージシステムにおけるデータ除去、割り当て、及び再構築のための方法において、前記複数のアクティブオブジェクトストレージデバイスの各々が、１又は２以上のアプリケーションサーバに接続される、前記方法であって、
前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するためにデータを受信するステップと、
前記１又は２以上のアプリケーションサーバのうちの１つが受信されたデータを複数のデータチャンクへとセグメンテーションするステップと、
前記１又は２以上のアプリケーションサーバのうちの１つが前記複数のデータチャンクに応じて１又は２以上のパリティチャンクを生じさせるステップと、
前記１又は２以上のアプリケーションサーバのうちの１つが、前記複数のデータチャンクの数、及び前記受信されたデータが記憶されるべきである前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上の数に応じて、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクを再編成するステップと、
前記１又は２以上のアプリケーションサーバのうちの１つが、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクを前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップとを含む、前記方法。
【請求項１１】
複数のデータチャンク及び１又は２以上のパリティチャンクを再編成するステップが、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクをデータチャンク／パリティチャンクの１又は２以上のストライプへと再編成するステップを含む、請求項１０に記載の方法。
【請求項１２】
複数のデータチャンク及び１又は２以上のパリティチャンクを複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップが、前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上へのデータチャンク／パリティチャンクの１又は２以上のストライプの各々の完全なストライプの書き込みを実行するステップを含む、請求項１１に記載の方法。
【請求項１３】
複数のデータチャンク及び１又は２以上のパリティチャンクを複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップが、受信されたデータのオブジェクトサイズを前記１又は２以上のパリティチャンクに書き込むステップを含む、請求項１０に記載の方法。
【請求項１４】
データを受信するステップが、
複数のアクティブオブジェクトストレージデバイスのうちの特定された１つにおいて前記データを受信するステップと、
受信されたデータが新しいデータであるのか又は更新データであるのかを決定するステップとを含み、
複数のデータチャンク及び１又は２以上のパリティチャンクを前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップが、
前記受信されたデータが新しいデータである場合に前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上へのデータチャンク／パリティチャンクの１又は２以上のストライプの各々の完全なストライプの書き込みを実行するステップ、
前記受信されたデータが更新データである場合に、各ストライプに関して、前記完全なストライプが更新される必要があるのかどうか、又は前記ストライプの一部が更新される必要があるのかどうかを決定し、更新される必要があるそれぞれの完全なストライプに関して完全なストライプの書き込みを実行し、一部のみが更新されることを必要とする各ストライプに関して部分的な書き込みを実行するステップを含む、請求項１１に記載の方法。
【請求項１５】
部分的な書き込みを実行するステップが、
各ストライプに関する更新されるべきデータチャンク及び対応するパリティチャンクが記憶されるアクティブオブジェクトストレージデバイスから前記ストライプに関する前記データチャンク／パリティチャンクを並列に読み出すステップと、
受信されたデータに応じて前記更新されるべきデータチャンクを更新するステップと、
更新されたデータチャンクに応じて前記パリティチャンクを再計算するステップと、
各ストライプに関する前記データチャンク／パリティチャンクが記憶された前記アクティブオブジェクトストレージデバイスに前記ストライプに関する更新されたデータチャンク及び対応する再計算されたパリティチャンクを並列に書き込むステップとを含む、請求項１４に記載の方法。
【請求項１６】
各ストライプに関する更新されるべきデータチャンク及び対応するパリティチャンクを並列に読み出すステップが、
前記ストライプ内のそれぞれの更新されるべきデータチャンク及びそれぞれの対応するパリティチャンクに関してアクティブオブジェクトストレージデバイスのロケーションを計算するステップと、
前記ストライプ内の前記アクティブオブジェクトストレージデバイスのロケーションのすべてにチャンク読み出し要求を並列に送信するステップと、
読み出される前記更新されるべきデータチャンク及び前記対応するパリティチャンクの更新されたストライプを導出するために、前記チャンク読み出し要求に応答して受信されたデータチャンク及びパリティチャンクを合併するステップとを含む、請求項１５に記載の方法。
【請求項１７】
アクティブオブジェクトストレージデバイスのロケーションを計算するステップが、オブジェクトデータ分散アルゴリズムに応じてアクティブオブジェクトストレージデバイスのロケーションを計算するステップを含む、請求項１６に記載の方法。
【請求項１８】
データチャンク及びパリティチャンクを合併するステップが、
ストライプに関するチャンク読み出し要求のうちの１又は２以上に対する応答を受信することに失敗することに応じてチャンク読み出し障害が発生したかどうかを決定するステップと、
読み出された更新されるべきデータチャンク及び対応するパリティチャンクに応じて欠落しているチャンクを特定するステップと、
読み出された前記更新されるべきデータチャンク及び前記対応するパリティチャンクに応じて前記欠落しているチャンクに関するデータを計算するステップと、
前記更新されるべきデータチャンク及び前記対応するパリティチャンクの前記ストライプを導出するために、前記チャンク読み出し要求に応答して受信されたデータチャンク及びパリティチャンク並びに前記欠落しているチャンクに関する前記データを合併するステップとを含む、請求項１６に記載の方法。
【請求項１９】
複数のアクティブオブジェクトストレージデバイスを含むアクティブドライブストレージシステムにおけるアクティブオブジェクトストレージデバイスの障害からの障害リカバリのための方法において、前記複数のアクティブオブジェクトストレージデバイスの各々が、複数のグループのうちの１つに属し、前記複数のアクティブオブジェクトストレージデバイスの各々が、１又は２以上のストレージデバイス及びコントローラを含む、前記方法であって、
障害の起きたアクティブオブジェクトストレージデバイスが参加していた前記複数のグループのそれぞれのグループのためにリカバリリストコンストラクタを選択するステップと、
各リカバリリストコンストラクタが、前記リカバリリストコンストラクタのグループに関する構築される必要があるデータのリストを構築するステップと、
各リカバリリストコンストラクタが、前記リカバリリストコンストラクタのグループに関する前記構築される必要があるデータのリストを、前記グループのためのリカバリマスタとして割り振られた代わりのアクティブオブジェクトストレージデバイスに送信するステップと、
各リカバリマスタが、データ及び対応するパリティデータにアクセスする要求を送信すること、アクセスされたデータ及び前記対応するパリティデータに応じてリカバリされたデータを計算すること、並びに前記リカバリされたデータを前記リカバリマスタに書き込むことのうちの１又は２以上を含む前記グループに関する再構築をスケジューリングするステップと、
その後、前記リカバリマスタが、前記代わりのアクティブオブジェクトストレージデバイスとして働くステップとを含む、前記方法。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権の主張
本出願は、２０１５年２月２６日に出願されたシンガポール特許出願第１０２０１５０１４４０Ｔ号の優先権を主張するものである。
【０００２】
本発明は、概して、アクティブストレージデバイス(active storage devices)のアレー(array)を用いるストレージシステム(storage system)にデータを記憶するための方法及び装置に関し、より詳細には、アクティブストレージデバイスのアレーを用いるストレージシステム内でのデータ除去(data stripping)、パリティ計算(parity computation)、データ割り当て(data allocation)、及び再構築(reconstruction)のための方法及び装置に関する。
【背景技術】
【０００３】
アクティブストレージデバイスのアレーを用いるストレージシステムは、ハードディスクドライブ（ＨＤＤ,hard disk drive）とアクティブストレージユニット（active storage unit）との両方を含む。データストレージシステムの障害の起きたデータストレージデバイス内のデータのデータ再構築は、データ再構築プロセスが最高速度で実行されることを可能にするために、ストレージシステムがいかなるクライアント／アプリケーションサーバへの応答も停止するオフライン再構築(offline reconstruction)として行われることが理想的である。しかし、この筋書きは、ほとんどのストレージシステムがそれらのストレージシステムがディスクの障害からリカバリしているときでさえも中断のないデータサービスを提供することを求められるため、ほとんどの本番環境(production enviroments)において現実的でない。
【０００４】
消失訂正符号（erasure code）は、システム内にデバイスの障害があるときにデータを保護する。消失訂正符号を使用してシステムの信頼性を高めることは、データ複製を使用するよりも経済的である。実装された(implemented)消失訂正符号は、ＨＤＤと、アクティブコントローラボード（ＡＣＢ，active controller board）及びＨＤＤを含むアクティブストレージユニットとの両方を障害から保護することができる。一方、複製は、元のデータと同じか又は何倍ものより多量の冗長なデータを必要とする。しかし、複製は、ずっと短いリカバリ方程式（recovery equation）を有し、つまり、ディスクの障害に対してより高いリカバリの効率を有する。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
したがって、必要とされるものは、現在の手法の欠点を少なくとも部分的に克服し、改善されたデータアクセスの性能及び短縮された障害復旧時間を提供する、アクティブストレージデバイスのアレーを用いるストレージシステム内でのデータ除去、パリティ計算、データ割り当て、及びデータ再構築のための方法及びデバイスである。さらに、その他の望ましい特色及び特徴は、添付の図面及び本開示のこの背景技術と合わせて考慮される以下の詳細な説明及び添付の請求項から明らかになるであろう。
【課題を解決するための手段】
【０００６】
本発明の少なくとも１つの実施形態によれば、複数のアクティブオブジェクトストレージデバイス（active object storage devices）を含むアクティブドライブストレージシステムにおけるデータ除去、割り当て、及び再構築のための方法において、複数のアクティブオブジェクトストレージデバイスの各々が、１又は２以上のストレージデバイス及びコントローラを含む、前記方法が、提供される。前記方法は、複数のアクティブオブジェクトストレージデバイスのうちの特定された１つのコントローラが、受信されたデータを複数のデータチャンク(data chunks)にセグメンテーションするステップ(segmenting)と、複数のデータチャンクに応じて１又は２以上のパリティチャンク(parity chunks)を生じさせるステップとを含む。前記方法は、複数のアクティブオブジェクトストレージデバイスのうちの特定された１つのコントローラが、複数のデータチャンクの数、及び受信されたデータが記憶されるべきである複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上の数に応じて、複数のデータチャンク及び１又は２以上のパリティチャンクを再編成するステップをさらに含む。最後に、前記方法は、複数のアクティブオブジェクトストレージデバイスのうちの特定された１つのコントローラが、複数のデータチャンク及び１又は２以上のパリティチャンクを複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップを含む。
【０００７】
本発明の少なくとも１つの実施形態の別の態様によれば、１又は２以上のアプリケーションサーバ(application servers)に接続された複数のアクティブオブジェクトストレージデバイスを含むアクティブドライブストレージシステムにおけるデータ除去、割り当て、及び再構築のための方法が、提供される。前記方法は、複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するためにデータを受信するステップと、１又は２以上のアプリケーションサーバのうちの１つにおいて、受信されたデータを複数のデータチャンクへとセグメンテーションするステップとを含む。前記方法は、１又は２以上のアプリケーションサーバのうちの１つが複数のデータチャンクに応じて１又は２以上のパリティチャンクを生じさせるステップと、複数のデータチャンクの数、及び受信されたデータが記憶されるべきである複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上の数に応じて、複数のデータチャンク及び１又は２以上のパリティチャンクを再編成するステップとをさらに含む。最後に、前記方法は、１又は２以上のアプリケーションサーバのうちの１つが、複数のデータチャンク及び１又は２以上のパリティチャンクを複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップを含む。
【０００８】
本発明の少なくとも１つの実施形態のさらなる態様によれば、複数のアクティブオブジェクトストレージデバイスを含むアクティブドライブストレージシステムにおけるアクティブオブジェクトストレージデバイスの障害からの障害リカバリのための方法において、複数のアクティブオブジェクトストレージデバイスの各々が、複数のグループのうちの１つに属し、複数のアクティブオブジェクトストレージデバイスの各々が、１又は２以上のストレージデバイス及びコントローラを含む、前記方法が、提供される。前記方法は、障害の起きたアクティブオブジェクトストレージデバイスが参加していた複数のグループのそれぞれのグループのためにリカバリリストコンストラクタ(recovery list constructor)を選択するステップと、各リカバリリストコンストラクタが、そのリカバリリストコンストラクタのグループに関する構築される必要があるデータのリストを構築するステップとを含む。前記方法は、各リカバリリストコンストラクタが、そのリカバリリストコンストラクタのグループに関する構築される必要があるデータのリストを、グループのためのリカバリマスタ（recovery master）として割り振られた代わりのアクティブオブジェクトストレージデバイスに送信するステップと、各リカバリマスタが、データ及び対応するパリティデータにアクセスする要求を送信すること、アクセスされたデータ及び対応するパリティデータに応じてリカバリされたデータを計算すること、並びにリカバリされたデータをリカバリマスタに書き込むことのうちの１又は２以上を含むグループに関する再構築をスケジューリングするステップとをさらに含む。そして、前記方法は、リカバリマスタが、代わりのアクティブオブジェクトストレージデバイスとして働くステップを含む。
【図面の簡単な説明】
【０００９】
同様の参照番号が別々の図を通じて同一の又は機能的に同様の要素を指し、以下の詳細な説明と一緒に本明細書に組み込まれ、本明細書の一部を形成する添付の図面は、さまざまな実施形態を示し、現在の実施形態によるさまざまな原理及び利点を説明するように働く。
【図１】現在の実施形態によるアクティブストレージアレーのための筐体の右上前の斜視図である。
【図２】現在の実施形態によるさまざまなアプリケーションサーバにストレージサービスを提供するアクティブストレージアレーのブロック図である。
【図３】現在の実施形態によるアクティブコントローラボード（ＡＣＢ）において実施されるデータ除去及び分散を示す図２のアクティブストレージアレーのブロック図である。
【図４】現在の実施形態によるアプリケーションサーバにおいて実装されるデータ除去及び分散を示す図２のアクティブストレージアレーのブロック図である。
【図５】現在の実施形態による５ビットＩＮＴコード（INT code）のタナーグラフ(Tanner graph)構造を示す図である。
【図６】現在の実施形態によるアクティブストレージデバイスのアレーにＡＣＢ及びハードディスクドライブ（ＨＤＤ）を含むアクティブストレージユニット（ＡＳＵ，active storage unit）の図である。
【図７】現在の実施形態によるアクティブストレージデバイスのアレーにおけるデータ除去及び分散プロセスの図である。
【図８】現在の実施形態によるアクティブストレージアレーにおけるデータ書き込みプロセスに関する流れ図である。
【図９】現在の実施形態によるアクティブストレージアレーにおける部分的なデータ書き込み及びデータ更新プロセスに関する流れ図である。
【図１０】現在の実施形態によるアクティブストレージアレーにおけるデータ読み出しプロセスに関する流れ図である。
【図１１】現在の実施形態によるアクティブストレージアレーにおける読み出し障害リカバリプロセスに関する流れ図である。
【図１２】現在の実施形態によるアクティブストレージアレーにおけるデバイス障害リカバリプロセスに関する流れ図である。
【図１３】現在の実施形態によるアクティブストレージアレーにおけるリカバリリスト構築及びリカバリマスタを示す図である。
【発明を実施するための形態】
【００１０】
当業者は、図中の要素が簡潔で明瞭にするために示されており、必ずしも正確な縮尺で描かれていなかったことを理解するであろう。例えば、図２、３、４、６、７、及び１３の図示は、現在の実施形態によるアクティブストレージアレーのさまざまな要素の関係及び構造の代表である。
【００１１】
以下の詳細な説明は、本質的に例示的であるに過ぎず、本発明又は本発明の応用及び使用を限定するように意図されていない。さらに、本発明の上述の背景又は以下の詳細な説明において提示されるいずれの理論によっても拘束される意図はない。アクティブストレージデバイスのアレーを用いるストレージシステムのデータ除去、パリティ計算、データ割り当て、及び再構築のためのアーキテクチャ及びプロセスを提示することが、現在の実施形態の意図である。提示される方法及びシステムの高い並列性によってデータアクセスの性能が大幅に高められ、読み出し障害復旧時間が短縮されることを可能にするデータ読み出し及び書き込み及び更新手順、読み出し障害及びノード／デバイス障害復旧プロセスも、提示される。したがって、現在の実施形態によれば、データ除去、パリティ計算、グループ化(grouping)、及び割り当てのためのプロセスと、データを読み出し、書き込み、更新するためのプロセスと、読み出し障害に直面するときにデータを再構築するためのプロセスと、システム障害の後にノードを復旧するためのプロセスとが、提示される。
【００１２】
図１を参照すると、示されているのは、現在の実施形態によるアクティブストレージデバイスのアレーのストレージエンクロージャ(storage enclosure)として働く筐体１０２の右上前の斜視図１００である。シングルアクティブストレージユニット（ＡＳＵ）１０４、１０６は、筐体１０２のアクティブハイブリッドベイ（active hybrid bay）に嵌まり、１つのアクティブコントローラボード（ＡＣＢ）１０８及び６つのハードディスクドライブ（ＨＤＤ）１１０からなる。当業者は、６つのＨＤＤに対して１つのＡＣＢの比が例示的であるに過ぎず、ＡＣＢ対ＨＤＤのその他の比も上手く機能することを認めるであろう。また、当業者は、アクティブコントローラボードが、基板（例えば、図１に示される基板１０８）である可能性があるが、アクティブコントローラボードが、ＨＤＤ１１０の制御のためのコントローラとして働く、筐体１０２又はＨＤＤ１１０のうちの１若しくは２以上と統合された、或いはこれらのデバイスとは別のサブシステム又はその他の構成要素である可能性もあることを認めるであろう。筐体１０２には３０個のベイ(bays)が存在する。ベイのうちの２９個は、１つのＡＣＢ及び６つのＨＤＤからなるＡＳＵ１０６と基本的に同じＡＳＵを受けるように構成される。これらの２９個のＡＳＵは、データストレージのためのものである。最後のベイは、２つのＡＣＢ及び２つのＨＤＤからなる特別なユニット１０４を受けるように構成される。ユニット１０４は、管理及び／又はゲートウェイ制御のためのものである。やはり、当業者は、筐体のベイの数が設計上の選択であり、本明細書に記載の３０個のベイの選択が例示的であるに過ぎないことを認めるであろう。したがって、アクティブストレージユニット（ＡＳＵ）１０６は、筐体１０２内で利用可能な空間に応じて追加され得る。
【００１３】
現在の実施形態によれば、各ＡＣＢは、フラッシュメモリ若しくはＳＴＴＭＲＡＭメモリデバイスなどの不揮発性メモリ（ＮＶＭ，Non-Volatile Memory）、システムオンチップ（ＳｏＣ，System on a Chip）ストレージデバイス、ＤＲＡＭメモリデバイス、又はその他のストレージ構成要素を備えている。ＮＶＭは、メタデータ(metadata)及び頻繁に使用されるデータを記憶する。各ＡＣＢは、最大６つのＨＤＤに接続し、ＡＳＵを構成することができる。ＨＤＤの各々は、１つのアクティブオブジェクトストレージデバイス（ＡＯＳＤ，Active Object Storage Device）である可能性がある。したがって、１つのＡＳＵ内に、最大で６つのＡＯＳＤが存在し、１つの筐体内に、最大で１７４個のＡＯＳＤが存在する。
【００１４】
システムのソフトウェアは、ＡＣＢsにインストールされる／組み込まれる。ソフトウェアの主な機能は、２つ以上の筐体に及ぶ可能性があるシステム全体が現在の実施形態によって自己管理されることができ、自己回復されることができるように、ＮＶＭ及びＨＤＤのストレージを含むストレージを管理すること、及びストレージクラスタ／分散型ストレージ(cluster/distributed storage)を管理することである。
【００１５】
筐体１０２は、データセンターのラックに搭載され、ストレージサービスを提供するためにさまざまなアプリケーションサーバに接続される可能性がある。図２を参照すると、アクティブストレージアレー２０２のブロック図２００が示される。アクティブストレージアレー２０２は、現在の実施形態によって、高速イーサネット接続(high speed Ethernet connection)２１２を介して（ブロックアプリケーションサーバ２０４、ファイルアプリケーションサーバ２０６、ｓ３オブジェクトアプリケーションサーバ２０８、又はキー値アプリケーションサーバ２１０などの）さまざまなアプリケーションサーバにストレージサービスを提供する。
【００１６】
上で検討されたように、筐体内のＡＳＵ１０６の最大数は、２９であり、ＡＳＵ１０６の各々（アクティブオブジェクトストレージデバイス（ＡＯＳＤ）２１４と呼ばれる）は、ＮＶＭ２１６及び最大６つのＨＤＤ２１８を含む。筐体内の３０個目のデバイスは、上で検討されたように、２つのＡＣＢ及び２つのＨＤＤからなり、アクティブストレージアレー２０２において管理２２０及びゲートウェイ２２２の機能を制御する特別なユニット１０４である。より多くのＡＳＵ１０６が、追加的なストレージが必要とされるときにより多くの筐体を追加することによって、ストレージサービスを中断することなく動的に追加される可能性があり、特別なユニット１０４は、追加的なＡＳＵ１０６が追加されるときにアクティブストレージアレー２０２の管理２２０及びゲートウェイ２２２の機能を制御する。
【００１７】
消失訂正符号が、デバイスの障害があるときにデータを保護するために使用される。デバイスの障害は、ＡＳＵ１０６のうちの１つのＡＣＢ１０８の障害又はＨＤＤの障害のどちらかである可能性がある。消失訂正符号（すなわち、ＩＮＴコード）は、システム２０２がＡＣＢ１０８の障害及び／又はＨＤＤ１１０の障害を含む複数の障害に耐え得るように設計される。
【００１８】
アクティブストレージシステム２０２に消失訂正符号を実装する２つの異なる手法が、存在する。第１に、筐体内のＡＳＵ１０６のＡＣＢ１０８がデータ除去及びパリティ計算を実行する場合、消失訂正符号は、ＡＣＢ１０８のレベルで実装される可能性がある。このようにして、データ除去及び分散が、アクティブストレージシステム２０２によって、特にＡＣＢ１０８によって行われる。もう１つの方法は、アプリケーションサーバ２０４、２０６、２０８、２１０に消失訂正符号を実装することである。消失訂正符号がアプリケーションサーバのレベルで実装されるとき、データ除去及び分散は、アクティブストレージシステム２０２のデータにアクセスする必要があるアプリケーションサーバ２０４、２０６、２０８、２１０において行われる。
【００１９】
どちらの手法も、利点及び欠点を有する。ＡＣＢの消失訂正符号の実装の手法は、アプリケーションサーバ２０４、２０６、２０８、２１０におけるいかなる修正(modifications)又はソフトウェアのインストールも必要としない。アプリケーションサーバの消失訂正符号の実装の手法は、アプリケーションサーバ２０４、２０６、２０８、２１０におけるソフトウェアのインストール及び／又は修正を必要とするが、アプリケーションサーバの消失訂正符号の実装がより高いデータの並列性を提供するので、ＡＣＢの消失訂正符号の実装の手法よりも高い性能をサポートし得る。
【００２０】
図３及び図４を参照して、２つの消失訂正符号の実装が示され、データ除去及びパリティ計算が２つの異なるロケーションで実装されるときにデータがどのようにアクセスされ得るかという点で比較される。図３は、現在の実施形態による、消失訂正符号のデータ除去及び分散がＡＳＵ１０６のＡＣＢ１０８において実装されるときの主なステップを示すアクティブストレージアレー２０２のブロック図３００を示す。図４は、現在の実施形態による、消失訂正符号のデータ除去及び計算がアプリケーションサーバ２０４、２０６、２０８、２１０において実装されるときの主なステップを示すアクティブストレージアレー２０２のブロック図４００を示す。
【００２１】
図３を参照すると、ＡＣＢの消失訂正符号のデータ除去及び分散の実装がデータにアクセスするとき、２つの主なステップが含まれる。第１に、アプリケーションサーバ（例えば、アプリケーションサーバ２０４）が、読み出し要求と書き込み要求との両方に関して消失訂正符号グループのプライマリＡＯＳＤ３０４にアクセスする（３０２）。そのとき、データを書き込むために、プライマリＡＯＳＤ３０４は、グループ内の対応するＡＯＳＤ２１４へのデータ書き込み要求の送信（３０６）も行いながら、データ除去及びパリティ計算を実行する。データを読み出すために、プライマリＡＯＳＤ３０４は、まず、読み出されるデータのデータロケーションを計算し、それから、それらのデータを取り出すためにグループ内の対応するＡＯＳＤ２１４にデータ読み出し要求を送信する。
【００２２】
図４を参照すると、アプリケーションサーバの消失訂正符号のデータ除去及び分散の実装において、１つのステップのみが必要とされる。データを読み出すとき、データセンターの仮想マシン（ＶＭ，Virtual Machine）４０２などのアプリケーションサーバは、読み出されるデータのロケーションを計算し、それから、対応するＡＯＳＤ２１４に読み出し要求を同時に送信する（４０４）。データを書き込むために、アプリケーションサーバ４０２は、データ除去及び計算を実行し、それから、対応するＡＯＳＤ２１４にデータ書き込み要求を同時に送信する（４０４）。
【００２３】
どちらの手法も、それらの手法の利点及び欠点を有し、別々に又は一緒に実装され得る。
【００２４】
ＩＮＴコードは、システムが同時に複数のデバイスの障害に耐えることを可能にするためにシステム用に設計された消失訂正符号である。現在の実施形態によれば、ＩＮＴコードは、高いデータの信頼性及び可用性を提供するためにアクティブストレージシステムに実装される。リード・ソロモン符号(Reed Solomon codes)などのその他の消失訂正符号が、現在の実施形態によってアクティブストレージシステムに実装される可能性があるが、対応するリード・ソロモン符号に比べて、ＩＮＴコードは、再構築時間を少なくとも５０パーセント短くすることができる。
【００２５】
現在の実施形態によって、ＩＮＴコードを使用するときのデータ除去及び割り当てのための方法が説明される。図５は、アクティブストレージシステムが最大３つの同時に起こる障害に耐えるために設計される、現在の実施形態による５ビットＩＮＴコードのタナーグラフ構造５００を示す。５ビットＩＮＴコードの最大のコードグループサイズは、６つのチェックノード（check node）５０２を使用して３２である。３２個のデバイスのうちの６つのデバイスは、パリティデータを記憶するパリティノード５０４であり、３２個のデバイスのうちの残りの２６個のデバイスは、データを記憶するデータノード５０６である。このシステム設計を利用して、アクティブストレージシステムは、最大３つの同時に起こるデバイスの障害から保護され得る。
【００２６】
図６は、現在の実施形態によるストレージエンクロージャ（例えば、筐体１０２（図１））内のアクティブストレージデバイスのアレーのＡＣＢ６０４及びハードディスクドライブ（ＨＤＤ）６０６を含む２９個のアクティブストレージユニット（ＡＳＵ）６０２の図６００を示す。各ＡＳＵ６０２は、そのＡＳＵ６０２に接続された１つのＡＣＢ６０４及び６つのＨＤＤ６０６を有し、各ＨＤＤ６０６は、ＡＯＳＤ２１４として構成される。したがって、１つのＡＳＵ６０２内のＡＯＳＤ２１４の最大数は、６つであり、筐体内のＡＳＵ６０２の最大数は、２９個であり、１つの筐体内のＡＯＳＤの最大数は、１７４である。
【００２７】
上述の５ビットＩＮＴコードを実装するために、消失訂正符号グループサイズは、２８として選択される。これは、２９個のＡＳＵ６０２を保有する現在の筐体の設計に適合する。したがって、各消失訂正符号グループに、２８個のＡＯＳＤ２１４が存在し、２８個のＡＯＳＤ２１４の中から、それらのＡＯＳＤ２１４のうちの６つが、パリティデータを記憶し、それらのＡＯＳＤ２１４のうちの２２個が、データを記憶する。
【００２８】
図７を参照すると、図７００が、現在の実施形態によるアクティブストレージデバイスのアレーにおけるデータ除去及び分散プロセスを示し、アクティブストレージデバイスのアレー内で消失訂正符号計算、データ除去、及び分散を実行する方法を示す。データ書き込みのための３つの主なステップ、すなわち、データセグメンテーション７０２、データ再編成７０４、並びに消失訂正符号計算及びデータ分散７０６が、存在する。
【００２９】
データセグメンテーション７０２は、入力データバッファ７０８に一時的に記憶されるin_dataのサイズ（すなわち、ストレージに書き込まれるデータサイズ）を有する到着する書き込みデータ要求を、複数のより小さい同じサイズのデータチャンク７１０に分割する。データチャンクサイズは、構成可能である（例えば、データチャンクサイズは、１キロバイトほどの小ささである可能性がある）。図７００において、in_dataは、６０個のデータチャンクにセグメンテーションされている。
【００３０】
データ再編成７０４中に、複数のセグメンテーションされたデータチャンク７１０が、ストライプ（stripe）７１２へと再編成される。各ストライプ７１２のためのデータチャンク７１０の数は、消失訂正符号グループサイズによって決定される。図７００において、各ストライプ７１２は、２２個のデータチャンク７１０及び６つのパリティチャンク７１４を含む。したがって、図７００に見られるように、in_dataのサイズを有する書き込み要求に関して形成された３つのストライプ７１２が存在する。
【００３１】
消失訂正符号計算及びデータ分散７０６において、パリティチャンク７１４が、各ストライプ７１２に関して計算される。図７００において、各ストライプ７１２は、それぞれがチャンクサイズ(chunk_size)のサイズを有する６つのパリティチャンク７１４を計算する必要がある。計算は、タナーグラフ５００によって設計されたＩＮＴコード符号化アルゴリズム(INT code encoding algorithm)に基づく。すべてのデータチャンク７１０及びパリティチャンク７１４は、対応するＡＯＳＤに分散される。図６を参照して上で説明されたように、各消失訂正符号グループに、２８個のＡＯＳＤ２１４が存在し、２８個のＡＯＳＤ２１４（すなわち、ＡＯＳＤ１からＡＯＳＤ２８）の中から、それらのＡＯＳＤ２１４のうちの２２個（ＡＯＳＤ１からＡＯＳＤ２２）が、データを記憶し、それらのＡＯＳＤ２１４のうちの６つ（ＡＯＳＤ２３からＡＯＳＤ２８）が、パリティデータを記憶する。したがって、再び図７００を参照すると、３つのデータチャンク（データチャンク０、２２、４３）が、ＡＯＳＤ１に書き込まれ、データチャンク１、２３、４４が、ＡＯＳＤ２に書き込まれ、以下同様である。
【００３２】
このようにして、ＡＯＳＤ１からＡＯＳＤ２８は、２８個のＡＯＳＤを含む論理的なグループである。グループ内の各論理デバイスは、システム内の対応するＡＯＳＤにマッピングされる。言い換えると、in_dataを保存するためには、論理的なグループを形成するためにシステムの１７４個のＡＯＳＤから２８個のＡＯＳＤが選択されなければならない。現在の実施形態によれば、２８個のＡＯＳＤは、高いデータの信頼性が実現され得るように（以降で説明されるように）選択される可能性がある。
【００３３】
現在の実施形態によるアクティブドライブシステムにおいては、主に２つの種類の障害があり、つまり、１つは、ＨＤＤの障害であり、もう１つはＡＳＵの障害である。ＡＳＵの障害は、ＡＳＵのＡＣＢの障害又は接続された６つのＨＤＤの障害が原因である可能性がある。ＨＤＤに障害が起こるとき、ＨＤＤに記憶されたデータは、もはやアクセス不可能になる。１つのＡＳＵに障害が起こると、ＡＳＵの６つのＨＤＤに記憶されたデータは、もはやアクセスされ得ない。
【００３４】
現在の実施形態によれば、大きな障害に耐えているときにシステムを保護するために、アクティブストレージシステムに規則が適用される。大きな障害は、ＡＣＢ対ＨＤＤの比に依存する。１つのＡＣＢに対して６つのＨＤＤが存在する場合、大きな障害は、いずれか３つ同時のＡＳＵの障害、いずれか３つ同時のＨＤＤの障害、いずれか２つのＨＤＤの障害と同時のいずれか１つのＡＳＵの障害、又はいずれか１つのＨＤＤの障害と同時のいずれか２つのＡＳＵの障害として定義される。第１に、１つのＡＣＢに接続されたすべてのＨＤＤは、同じ消失訂正符号グループ内にあるべきでなく、２つ以上のグループに参加するべきである。例えば、２９個のＡＳＵを用い、各ＡＳＵが１つのＡＣＢ及び６つのＨＤＤを含む場合、規則は、１つのＡＳＵ内の１つのＡＣＢに接続された６つすべてのＨＤＤが異なるコードグループに参加しなければならないことである。したがって、２８個のＡＯＳＤは、システムの２８個の異なるＡＳＵから来なければならない（つまり、各ＡＳＵは、コードグループにあるべき１つのＨＤＤ／ＡＯＳＤを選択することのみが可能である）。例えば、図６の図６００を参照すると、１つのあり得る消失訂正符号グループは、ＡＣＢ１からＡＣＢ２８までの２８個のＡＣＢ６０４の各々に接続されたすべてのＨＤＤ１  ６１０を選択することによって形成され得る。
【００３５】
図８を参照すると、流れ図８００は、現在の実施形態によるアクティブストレージアレーにおけるデータ書き込みプロセスを示す。システムのＡＣＢにおいてデータ除去及び計算を実装する場合に関して、データにアクセスする必要があるアプリケーションサーバ２０４、２０６、２０８、２１０は、まず、ＡＯＳＤ２１４のグループを計算するか又は選択し、グループの１つのプライマリＡＯＳＤを特定し、それから、データを書き込むためにプライマリＡＯＳＤに接続しなければならない。
【００３６】
プライマリＡＯＳＤは、データ書き込みが新しいデータ書き込みである（つまり、記憶されるデータが生成される必要がある）のか否かを調べる（８０２）。新しいデータが書き込まれるべきである場合（８０２）、図７００（図７）に示されたデータセグメンテーション、再編成、消失訂正符号計算及びデータ分散が、実行される（８０４）。２８個のＡＯＳＤを有するコードグループが、上述の規則に従ってやはり選択される必要がある。それが行われると、プライマリＡＯＳＤは、データ書き込みを対応するＡＯＳＤに同時に送信して、完全なストライプの書き込みを実行する（８０６）。書き込み８０６が完了されると、プライマリＡＯＳＤは、オブジェクトサイズ情報を保持し、さらなるコピーを保持するために、データのパリティを保有するＡＯＳＤにオブジェクトサイズ情報(object size information)を送信する可能性もある（８０８）。このステップ８０８は、既存のシステムにおいてsetxattr関数を通じてxattrの既存のデータ構造に１つの属性、オブジェクトサイズを追加することによって実行される。
【００３７】
書き込まれているデータが新しいデータではなく（８０２）、更新又は修正のためのデータであるとき、オブジェクトサイズが、対応するパリティチャンクからプライマリＡＯＳＤによって読み出される可能性があり（８１０）、オブジェクトデータのデータセグメンテーション、再編成、消失訂正符号計算及びデータ分散が、実行される（８１２）。プライマリＡＯＳＤは、対応するオブジェクトサイズ情報を既に有する場合、オブジェクトサイズを読み出すステップを飛ばすことができる。オブジェクトサイズ８１０を用い、データ分散及び消失訂正符号計算８１２に基づいて、ストライプ番号及びＡＯＳＤが特定され得る。１つのストライプ全体が更新される必要がある場合、アプリケーションサーバは、完全な書き込みを実行する（８１４）。ストライプの一部のみが更新される必要があるとき、プライマリＡＯＳＤは、部分的な書き込みを実行することができる（８１４）。完全な書き込みのために、プライマリＡＯＳＤは、書き込むためにグループ内のすべての対応するＡＯＳＤにデータ及びパリティを送信する（８１６）。部分的な書き込みに関しては、手順が図９に示される。
【００３８】
アプリケーションサーバにおいてデータ除去及び計算を実装する場合に関して、データ除去及び計算を実行することを必要とするアプリケーションサーバ２０４、２０６、２０８、２１０は、流れ図８００のオブジェクトの書き込みを実行する。したがって、アプリケーションサーバは、データ読み出しが新しいデータ書き込みのためのものであるのか否かを調べる（８０２）。そのデータ読み出しが新しいデータ書き込みのためのものである場合（８０２）、データセグメンテーション、再編成、消失訂正符号計算及びデータ分散が実行され（８０４）、２８個のＡＯＳＤを有するコードグループが上述の規則に基づいて選択される。そして、アプリケーションサーバは、データ書き込み命令を対応するＡＯＳＤに同時に送信して、完全な書き込みを実行する（８０６）。書き込みが完了されると（８０６）、アプリケーションサーバは、既存のシステムにおいてsetxattr関数を通じてxattrの既存のデータ構造に１つの属性、オブジェクトサイズを追加することによって、ＡＯＳＤに記憶するために、データのパリティを保有するＡＯＳＤにオブジェクトサイズ情報を送信する（８０８）。
【００３９】
新しいデータではなくデータの更新又は修正のためのデータであるデータに関するオブジェクトの書き込みをアプリケーションサーバが実行しているとき（８０２）、アプリケーションサーバは、まず、パリティを保有するＡＯＳＤからgetxattrを通じてオブジェクトサイズを読み出す要求を送信する（８１０）。オブジェクトサイズを用い、データ分散及び消失訂正符号計算８１２に基づいて、ストライプ番号及びＡＯＳＤが特定され得る。１つのストライプ全体が更新される必要があるとき、アプリケーションサーバは、完全な書き込みを実行する（８１４）。ストライプの一部のみが更新される必要があるとき、アプリケーションサーバは、（図９に示されるように）部分的な書き込みを実行する（８１４）。完全な書き込み８１４のために、アプリケーションサーバは、書き込むためにグループ内のすべての対応するＡＯＳＤにデータ及びパリティを送信する（８１６）。
【００４０】
図９は、現在の実施形態によるアクティブストレージアレーにおける部分的なデータ書き込み及びデータ更新プロセスに関する流れ図９００を示す。システムのＡＣＢにおいてデータ除去及び計算を実装するとき、プライマリＡＯＳＤは、更新されるべきデータのチャンク及び対応するパリティチャンクを読み出す読み出し要求を送信する（９０２）。それから、読み出されたデータ及びパリティ並びに書き込まれる新しいデータにも基づいて、新しいパリティデータが計算される（９０４）。新しいパリティが計算されると（９０４）、プライマリＡＯＳＤは、新しいデータ及びパリティをそれぞれのＡＯＳＤに同時に送信する（９０６）。
【００４１】
アプリケーションサーバにおいてデータ除去及び計算を実装するとき、アプリケーションサーバは、更新されるべきデータのチャンク及び対応するパリティチャンクを読み出す読み出し要求を送信する（９０２）。それから、読み出されたデータ及びパリティ並びに書き込まれる新しいデータにも基づいて、新しいパリティデータが計算される（９０４）。アプリケーションサーバが新しいパリティデータを計算すると（９０４）、アプリケーションサーバは、新しいデータ及び新しいパリティデータをそれぞれのＡＯＳＤに同時に送信する（９０６）。
【００４２】
図１０を参照すると、現在の実施形態によるアクティブストレージアレーにおけるデータ読み出しプロセスに関する流れ図１０００が示される。システムのＡＣＢにおいてデータ除去及び計算を実装するとき、プライマリＡＯＳＤが読み出されるオブジェクトのサイズの情報を有する場合、プライマリＡＯＳＤは、その他のＡＯＳＤからその情報を読み出す必要はない。そうでない場合、プライマリＡＯＳＤは、データチャンクを記憶するＡＯＳＤのロケーションを計算し（１００２）、データチャンクを読み出すためにＡＯＳＤにチャンク読み出し要求を送信する（１００４）。読み出される複数のチャンクがあるとき、プライマリＡＯＳＤは、読み出し要求をすべての対応するＡＯＳＤに同時に送出する（１００４）。読み出しが正常に行われる場合（１００６）、プライマリＡＯＳＤは、すべてのデータチャンクを、それらのデータチャンクを要求元に送り返す前に合併する（１００８）。読み出しが正常に行われない場合（１００６）、プライマリＡＯＳＤは、図１１に示されるようにそれぞれの欠落しているチャンクに関する読み出し障害リカバリプロセスを初期化する（１０１０）。
【００４３】
アプリケーションサーバにおいてデータ除去及び計算を実装するとき、データ読み出しを実行するために、アプリケーションサーバは、まず、getxattr関数を呼び出すことによって、パリティチャンクを保持するＡＯＳＤである情報を記憶するＡＯＳＤからデータのサイズを読み出さなければならない。関数が完了されると、アプリケーションサーバは、データチャンクを記憶するＡＯＳＤのロケーションを特定し（１００２）、それから、データチャンクを読み出す読み出し要求を発する（１００４）ことができる。読み出される複数のチャンクがあるとき、アプリケーションサーバは、読み出し要求をすべての対応するＡＯＳＤに同時に送出する（１００４）。データチャンクが正常に読み出される場合（１００６）、アプリケーションサーバは、すべてのデータチャンクを、それらのデータチャンクを要求元に送り返す前に合併することができる（１００８）。読み出しが正常に行われない場合（１００６）、アプリケーションサーバは、図１１に従ってそれぞれの欠落しているチャンクに関する読み出し障害リカバリプロセスを初期化する（１０１０）。
【００４４】
図１１は、現在の実施形態によるアクティブストレージアレーにおける読み出し障害リカバリプロセスに関する流れ図１１００を示す。システムのＡＣＢにおいてデータ除去及び計算を実施するときに、読み出し障害に直面するとき、プライマリＡＯＳＤは、読み出し障害リカバリプロセスを初期化する（１１０２）。消失訂正符号及びデータ分散アルゴリズムに基づいて、プライマリＡＯＳＤは、リカバリのために使用されるデータチャンクを読み出すために対応するＡＯＳＤに読み出し要求を送出する（１１０４）。データが受信されると、プライマリＡＯＳＤは、欠けたデータを計算し、リカバリし（１１０６）、そのデータを要求元に送り返す。その一方で、プライマリＡＯＳＤは、最初に読み出しが失敗したＡＯＳＤ又は指定されたいずれかのその他のＡＯＳＤにデータを書き込む可能性もある（１１０８）。
【００４５】
アプリケーションサーバにおいてデータ除去及び計算を実装するとき、アプリケーションサーバは、読み出し障害に直面すると、読み出し障害リカバリプロセスを初期化する（１１０２）。消失訂正符号及びデータ分散アルゴリズムに基づいて、アプリケーションサーバは、リカバリのために必要とされるデータチャンクを読み出すために対応するＡＯＳＤに読み出し要求を送出する（１１０４）。データが受信されると（１１０４）、アプリケーションサーバは、欠けたデータを計算し、リカバリし（１１０６）、そのデータを要求元に送り返す。また、アプリケーションサーバは、最初に読み出しが失敗したＡＯＳＤ又は指定されたいずれかのその他のＡＯＳＤにデータを書き込む（１１０８）。
【００４６】
図１２は、現在の実施形態によるアクティブストレージアレーにおけるＡＯＳＤ障害リカバリプロセスに関する流れ図１２００を示す。システムのＡＣＢにおいてデータ除去及び計算を実装するとき、ＡＯＳＤの障害が、システム内の管理によって特定される可能性があり、管理は、リカバリプロセスを初期化する可能性がある。プライマリＡＯＳＤは、そのプライマリＡＯＳＤのグループに関するリカバリリストコンストラクタとして選択され（１２０２）、プライマリＡＯＳＤがリストを持たない場合に再構築される必要があるグループのオブジェクトのリストを構築する（１２０４）責任を負う。これは、グループ内のすべての利用可能なＡＯＳＤをスキャンすることによって行われ得る。リストが計算されると（１２０４）、プライマリＡＯＳＤは、割り振られた対応する代わりのＡＯＳＤにリストを送信する（１２０６）。割り振られた代わりのＡＯＳＤは、再構築のスケジューリング、計算、及びデータ書き込みの責任を負う（１２０８）リカバリマスタになる。
【００４７】
アプリケーションサーバにおいてデータ除去及び計算を実装するときは、１つのＡＯＳＤが複数の消失訂正符号グループに参加する可能性があり、アプリケーションサーバがデータ除去及び計算を実装しているときにプライマリＡＯＳＤが存在しないので、リカバリリストコンストラクタが、各グループのために選択される／割り振られる（１２０２）。各リカバリリストコンストラクタは、そのリカバリリストコンストラクタ自体のグループに関して再構築される必要があるオブジェクト／データリストを構築する責任を負う（１２０４）。リストが作られると（１２０４）、リカバリリストコンストラクタは、割り振られた対応する代わりのＡＯＳＤにリストを送信し（１２０６）、対応する代わりのＡＯＳＤが、再構築のスケジューリング、計算、及びデータ書き込みの責任を負うリカバリマスタになる（１２０８）。
【００４８】
ＡＳＵの障害が複数のＡＯＳＤの障害であるとき、ＡＯＳＤ再構築プロセス１２００は、単一ＡＯＳＤ障害リカバリプロセスに従って各ＡＯＳＤを１つずつ再構築する。
【００４９】
図１３は、現在の実施形態によるアクティブストレージアレーにおけるリカバリリスト構築及びコードグループのリカバリマスタを示す図１３００を示す。アプリケーションサーバにおいてデータ除去及び計算を実装するとき、再構築のためのリカバリリストを構築するためのグループ内のプライマリＡＯＳＤが存在しない。グループ内に７つのＡＯＳＤが存在し、それらは、ＡＯＳＤ  Ｌ、ＡＯＳＤ  Ｂ、ＡＯＳＤ  Ｚ、ＡＯＳＤ  Ｐ、ＡＯＳＤ  Ｓ、ＡＯＳＤ  Ｎ、及びＡＯＳＤ  Ｆである。ＡＯＳＤ  Ｐに障害が起こると、いずれかの利用可能なＡＯＳＤが、グループ内のすべてのデータをスキャンすることによって再構築されるデータのリストを構築するリカバリリストコンストラクタであり得る。システムのＡＣＢにおいてデータ除去及び計算を実装するとき、このグループのプライマリＡＯＳＤが、リストを構築する責任を負うリカバリリストコンストラクタになる。
【００５０】
リストが構築されると、リカバリリストコンストラクタは、システム管理によって割り振られた代わりのＡＯＳＤであるＡＯＳＤ  Ｗにリストを送信する。ＡＯＳＤ  Ｗは、このグループのリカバリマスタになる。受信されたリストに基づいて、ＡＯＳＤ  Ｗは、再構築プロセスをスケジューリングし、データを計算し、そのＡＯＳＤ  Ｗ自体のストレージにデータを書き込む責任を負う。このようにして、再構築中にネットワークを介して送信される必要があるデータが削減され、時間と成果との両方をもたらす。
【００５１】
したがって、現在の実施形態は、改善されたデータアクセス性能及び短縮された読み出し障害復旧時間を提供する、アクティブストレージデバイスのアレーを用いるストレージシステム内でのデータ除去、パリティ計算、データ割り当て、及びデータ再構築のための方法及びデバイスを提供することができることが分かる。この方法は、ＡＳＵのＡＣＢにおいて実装される消失訂正符号のデータ除去及び分散並びにアプリケーションサーバにおいて実装される消失訂正符号のデータ除去及び計算に適用され得る。
【００５２】
例示的な実施形態が本発明の上述の詳細な説明において提示されたが、膨大な数の変更が存在することを理解されたい。例示的な実施形態は例であるに過ぎず、本発明の範囲、応用性、動作、又は構成を限定するようにまったく意図されていないことをさらに理解されたい。むしろ、上述の詳細な説明は本発明の例示的な実施形態を履行するための便利なロードマップを当業者に提供し、添付の請求に記載の本発明の範囲を逸脱することなく例示的な実施形態において説明された要素の機能及び構成並びに動作の方法にさまざまな変更がなされ得ることが理解される。
【図１】
2018508073.tif 000003
【図２】
2018508073.tif 000004
【図３】
2018508073.tif 000005
【図４】
2018508073.tif 000006
【図５】
2018508073.tif 000007
【図６】
2018508073.tif 000008
【図７】
2018508073.tif 000009
【図８】
2018508073.tif 000010
【図９】
2018508073.tif 000011
【図１０】
2018508073.tif 000012
【図１１】
2018508073.tif 000013
【図１２】
2018508073.tif 000014
【図１３】
2018508073.tif 000015
【手続補正書】
【提出日】平成29年10月17日(2017.10.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のアクティブオブジェクトストレージデバイスを含むアクティブドライブストレージシステムにおけるデータ除去、割り当て、及び再構築のための方法において、前記複数のアクティブオブジェクトストレージデバイスの各々が、１又は２以上のストレージデバイス及びコントローラを含む、前記方法であって、
前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するために前記複数のアクティブオブジェクトストレージデバイスのうちの特定された１つにおいてデータを受信するステップと、
前記複数のアクティブオブジェクトストレージデバイスのうちの前記特定された１つのコントローラが、受信されたデータを複数のデータチャンクにセグメンテーションするステップと、
前記複数のアクティブオブジェクトストレージデバイスのうちの前記特定された１つのコントローラが、前記複数のデータチャンクに応じて１又は２以上のパリティチャンクを生じさせるステップと、
前記複数のアクティブオブジェクトストレージデバイスのうちの前記特定された１つのコントローラが、前記複数のデータチャンクの数、及び前記受信されたデータが記憶されるべきである前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上の数に応じて、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクを再編成するステップと、
前記複数のアクティブオブジェクトストレージデバイスのうちの前記特定された１つのコントローラが、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクを前記複数のアクティブオブジェクトストレージデバイスのうちの前記１又は２以上に記憶するステップとを含み、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクを前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶する前記ステップが、前記受信されたデータのオブジェクトサイズを前記１又は２以上のパリティチャンクに書き込むステップを含む、前記方法。
【請求項２】
複数のデータチャンク及び１又は２以上のパリティチャンクを再編成するステップが、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクをデータチャンク／パリティチャンクの１又は２以上のストライプへと再編成するステップを含む、請求項１に記載の方法。
【請求項３】
複数のデータチャンク及び１又は２以上のパリティチャンクを複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップが、前記複数のアクティブオブジェクトストレージデバイスのうちの前記１又は２以上へのデータチャンク／パリティチャンクの１又は２以上のストライプの各々の完全なストライプの書き込みを実行するステップを含む、請求項２に記載の方法。
【請求項４】
データを受信するステップが、
複数のアクティブオブジェクトストレージデバイスのうちの特定された１つにおいて前記データを受信するステップと、
受信されたデータが新しいデータであるのか又は更新データであるのかを決定するステップとを含み、
複数のデータチャンク及び１又は２以上のパリティチャンクを前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップが、
前記受信されたデータが新しいデータである場合に前記複数のアクティブオブジェクトストレージデバイスのうちの前記１又は２以上へのデータチャンク／パリティチャンクの１又は２以上のストライプの各々の完全なストライプの書き込みを実行するステップ、
前記受信されたデータが更新データである場合に、各ストライプに関して、前記完全なストライプが更新される必要があるのかどうか、又は前記ストライプの一部が更新される必要があるのかどうかを決定し、更新される必要があるそれぞれの完全なストライプに関して完全なストライプの書き込みを実行し、一部のみが更新されることを必要とする各ストライプに関して部分的な書き込みを実行するステップを含む、請求項２に記載の方法。
【請求項５】
部分的な書き込みを実行するステップが、
各ストライプに関する更新されるべきデータチャンク及び対応するパリティチャンクが記憶されるアクティブオブジェクトストレージデバイスから前記ストライプに関する前記データチャンク／パリティチャンクを並列に読み出すステップと、
受信されたデータに応じて前記更新されるべきデータチャンクを更新するステップと、
更新されたデータチャンクに応じて前記パリティチャンクを再計算するステップと、
各ストライプに関する前記データチャンク／パリティチャンクが記憶された前記アクティブオブジェクトストレージデバイスに前記ストライプに関する更新されたデータチャンク及び対応する再計算されたパリティチャンクを並列に書き込むステップとを含む、請求項４に記載の方法。
【請求項６】
各ストライプに関する更新されるべきデータチャンク及び対応するパリティチャンクを並列に読み出すステップが、
前記ストライプ内のそれぞれの更新されるべきデータチャンク及びそれぞれの対応するパリティチャンクに関してアクティブオブジェクトストレージデバイスのロケーションを計算するステップと、
前記ストライプ内の前記アクティブオブジェクトストレージデバイスのロケーションのすべてにチャンク読み出し要求を並列に送信するステップと、
読み出される前記更新されるべきデータチャンク及び前記対応するパリティチャンクの更新されたストライプを導出するために、前記チャンク読み出し要求に応答して受信されたデータチャンク及びパリティチャンクを合併するステップとを含む、請求項５に記載の方法。
【請求項７】
アクティブオブジェクトストレージデバイスのロケーションを計算するステップが、オブジェクトデータ分散アルゴリズムに応じてアクティブオブジェクトストレージデバイスのロケーションを計算するステップを含む、請求項６に記載の方法。
【請求項８】
データチャンク及びパリティチャンクを合併するステップが、
ストライプに関するチャンク読み出し要求のうちの１又は２以上に対する応答を受信することに失敗することに応じてチャンク読み出し障害が発生したかどうかを決定するステップと、
読み出された更新されるべきデータチャンク及び対応するパリティチャンクに応じて欠落しているチャンクを特定するステップと、
読み出された前記更新されるべきデータチャンク及び前記対応するパリティチャンクに応じて前記欠落しているチャンクに関するデータを計算するステップと、
前記更新されるべきデータチャンク及び前記対応するパリティチャンクの前記ストライプを導出するために、前記チャンク読み出し要求に応答して受信されたデータチャンク及びパリティチャンク並びに前記欠落しているチャンクに関する前記データを合併するステップとを含む、請求項６に記載の方法。
【請求項９】
複数のアクティブオブジェクトストレージデバイスを含むアクティブドライブストレージシステムにおけるデータ除去、割り当て、及び再構築のための方法において、前記複数のアクティブオブジェクトストレージデバイスの各々が、１又は２以上のアプリケーションサーバに接続される、前記方法であって、
前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するためにデータを受信するステップと、
前記１又は２以上のアプリケーションサーバのうちの１つが受信されたデータを複数のデータチャンクへとセグメンテーションするステップと、
前記１又は２以上のアプリケーションサーバのうちの１つが前記複数のデータチャンクに応じて１又は２以上のパリティチャンクを生じさせるステップと、
前記１又は２以上のアプリケーションサーバのうちの１つが、前記複数のデータチャンクの数、及び前記受信されたデータが記憶されるべきである前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上の数に応じて、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクを再編成するステップと、
前記１又は２以上のアプリケーションサーバのうちの１つが、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクを前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップとを含み、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクを前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップが、前記受信されたデータのオブジェクトサイズを前記１又は２以上のパリティチャンクに書き込むステップを含む、前記方法。
【請求項１０】
複数のデータチャンク及び１又は２以上のパリティチャンクを再編成するステップが、前記複数のデータチャンク及び前記１又は２以上のパリティチャンクをデータチャンク／パリティチャンクの１又は２以上のストライプへと再編成するステップを含む、請求項９に記載の方法。
【請求項１１】
複数のデータチャンク及び１又は２以上のパリティチャンクを複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップが、前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上へのデータチャンク／パリティチャンクの１又は２以上のストライプの各々の完全なストライプの書き込みを実行するステップを含む、請求項１０に記載の方法。
【請求項１２】
データを受信するステップが、
複数のアクティブオブジェクトストレージデバイスのうちの特定された１つにおいて前記データを受信するステップと、
受信されたデータが新しいデータであるのか又は更新データであるのかを決定するステップとを含み、
複数のデータチャンク及び１又は２以上のパリティチャンクを前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上に記憶するステップが、
前記受信されたデータが新しいデータである場合に前記複数のアクティブオブジェクトストレージデバイスのうちの１又は２以上へのデータチャンク／パリティチャンクの１又は２以上のストライプの各々の完全なストライプの書き込みを実行するステップ、
前記受信されたデータが更新データである場合に、各ストライプに関して、前記完全なストライプが更新される必要があるのかどうか、又は前記ストライプの一部が更新される必要があるのかどうかを決定し、更新される必要があるそれぞれの完全なストライプに関して完全なストライプの書き込みを実行し、一部のみが更新されることを必要とする各ストライプに関して部分的な書き込みを実行するステップを含む、請求項１０に記載の方法。
【請求項１３】
部分的な書き込みを実行するステップが、
各ストライプに関する更新されるべきデータチャンク及び対応するパリティチャンクが記憶されるアクティブオブジェクトストレージデバイスから前記ストライプに関する前記データチャンク／パリティチャンクを並列に読み出すステップと、
受信されたデータに応じて前記更新されるべきデータチャンクを更新するステップと、
更新されたデータチャンクに応じて前記パリティチャンクを再計算するステップと、
各ストライプに関する前記データチャンク／パリティチャンクが記憶された前記アクティブオブジェクトストレージデバイスに前記ストライプに関する更新されたデータチャンク及び対応する再計算されたパリティチャンクを並列に書き込むステップとを含む、請求項１２に記載の方法。
【請求項１４】
各ストライプに関する更新されるべきデータチャンク及び対応するパリティチャンクを並列に読み出すステップが、
前記ストライプ内のそれぞれの更新されるべきデータチャンク及びそれぞれの対応するパリティチャンクに関してアクティブオブジェクトストレージデバイスのロケーションを計算するステップと、
前記ストライプ内の前記アクティブオブジェクトストレージデバイスのロケーションのすべてにチャンク読み出し要求を並列に送信するステップと、
読み出される前記更新されるべきデータチャンク及び前記対応するパリティチャンクの更新されたストライプを導出するために、前記チャンク読み出し要求に応答して受信されたデータチャンク及びパリティチャンクを合併するステップとを含む、請求項１３に記載の方法。
【請求項１５】
アクティブオブジェクトストレージデバイスのロケーションを計算するステップが、オブジェクトデータ分散アルゴリズムに応じてアクティブオブジェクトストレージデバイスのロケーションを計算するステップを含む、請求項１４に記載の方法。
【請求項１６】
データチャンク及びパリティチャンクを合併するステップが、
ストライプに関するチャンク読み出し要求のうちの１又は２以上に対する応答を受信することに失敗することに応じてチャンク読み出し障害が発生したかどうかを決定するステップと、
読み出された更新されるべきデータチャンク及び対応するパリティチャンクに応じて欠落しているチャンクを特定するステップと、
読み出された前記更新されるべきデータチャンク及び前記対応するパリティチャンクに応じて前記欠落しているチャンクに関するデータを計算するステップと、
前記更新されるべきデータチャンク及び前記対応するパリティチャンクの前記ストライプを導出するために、前記チャンク読み出し要求に応答して受信されたデータチャンク及びパリティチャンク並びに前記欠落しているチャンクに関する前記データを合併するステップとを含む、請求項１４に記載の方法。
【請求項１７】
複数のアクティブオブジェクトストレージデバイスを含むアクティブドライブストレージシステムにおけるアクティブオブジェクトストレージデバイスの障害からの障害リカバリのための方法において、前記複数のアクティブオブジェクトストレージデバイスの各々が、複数のグループのうちの１つに属し、前記複数のアクティブオブジェクトストレージデバイスの各々が、１又は２以上のストレージデバイス及びコントローラを含む、前記方法であって、
障害の起きたアクティブオブジェクトストレージデバイスが参加していた前記複数のグループのそれぞれのグループのためにリカバリリストコンストラクタを選択するステップと、
各リカバリリストコンストラクタが、前記リカバリリストコンストラクタのグループに関する構築される必要があるデータのリストを構築するステップと、
各リカバリリストコンストラクタが、前記リカバリリストコンストラクタのグループに関する前記構築される必要があるデータのリストを、前記グループのためのリカバリマスタとして割り振られた代わりのアクティブオブジェクトストレージデバイスに送信するステップと、
各リカバリマスタが、データ及び対応するパリティデータにアクセスする要求を送信すること、アクセスされたデータ及び前記対応するパリティデータに応じてリカバリされたデータを計算すること、並びに前記リカバリされたデータを前記リカバリマスタに書き込むことのうちの１又は２以上を含む前記グループに関する再構築をスケジューリングするステップと、
その後、前記リカバリマスタが、前記代わりのアクティブオブジェクトストレージデバイスとして働くステップとを含む、前記方法。
【国際調査報告】
2018508073.tif 000016
2018508073.tif 000017
2018508073.tif 000018
2018508073.tif 000019
2018508073.tif 000020