(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-07-11
(45)【発行日】2023-07-20
(54)【発明の名称】様々なデータ冗長性スキームを備えた、システムにおける利用可能なストレージ空間を改善すること
(51)【国際特許分類】
G06F 3/06 20060101AFI20230712BHJP
G06F 11/10 20060101ALI20230712BHJP
G06F 13/10 20060101ALI20230712BHJP
G06F 16/13 20190101ALI20230712BHJP
G06F 16/182 20190101ALI20230712BHJP
【FI】
G06F3/06 301Z
G06F3/06 301X
G06F3/06 304F
G06F3/06 305C
G06F3/06 540
G06F11/10
G06F13/10 340A
G06F16/13 100
G06F16/182
(21)【出願番号】P 2021520585
(86)(22)【出願日】2019-10-15
(86)【国際出願番号】 US2019056236
(87)【国際公開番号】W WO2020081512
(87)【国際公開日】2020-04-23
【審査請求日】2021-10-11
(32)【優先日】2018-10-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】303039534
【氏名又は名称】ネットアップ,インコーポレイテッド
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】コーリー,クリストファー クラーク
(72)【発明者】
【氏名】マッカーシー,ダニエル デヴィッド
(72)【発明者】
【氏名】ミシュラ,スニヒート クマル
(72)【発明者】
【氏名】ロンゴ,オースティノ ニコラス
【審査官】打出 義尚
(56)【参考文献】
【文献】特表2015-519674(JP,A)
【文献】特開2004-126850(JP,A)
【文献】国際公開第98/012621(WO,A1)
【文献】特開2011-013992(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06
G06F 11/10
G06F 13/10
G06F 16/13
G06F 16/182
(57)【特許請求の範囲】
【請求項1】
データブロックのガーベッジコレクションのための方法であって、
ストレージノードのクラスタを有する分散ストレージシステムによってサポートされる複数のデータ保護スキームの各々に対して
前記データブロックを関連付けるデータ構造を生成することであって、前記データ保護スキームの各々は、
任意の1つのブロックの利用不可能性に対する特定のレベルの冗長性を示すデータ完全性保証を有する、ことと、
前記データ構造を使用して、第1のデータ保護スキーム
が第1のデータブロックに採用され
ていることを決定することとであって、前記第1のデータ保護スキームは、第1のデータ完全性保証を有する、ことと、
前記データ構造を使用して、第2のデータ保護スキームが
、前記第1のデータ保護スキームに加えて、前記第1のデータブロックに関連付けられ
ていることを決定することであって、前記第2のデータ保護スキームは、前記第1のデータ完全性保証を有する、ことと、
ポリシーに基づいて、(1)前記第2のデータ保護スキームに従って、前記第1のデータブロックのための前記クラスタの前記ストレージノードにおける冗長情報のストレージを低減すること、および(2)性能を改善するために、前記第1のデータブロックの冗長情報のストレージを維持すること、のうちの1つを適用することであって、前記第1のデータ保護スキームは複製であり、前記第2のデータ保護スキームは第1の消去コーディングである、ことと、を含む、方法。
【請求項2】
前記第2のデータ保護スキームに従って、前記第1のデータブロックに対する冗長情報のストレージを低減することは、前記第1のデータブロックの1つ以上のコピーを削除することをさらに含む、請求項1に記載の方法。
【請求項3】
性能を改善するために冗長情報のストレージを維持することは、前記第1の消去コーディングのパリティ計算を回避する、請求項2に記載の方法。
【請求項4】
前記分散ストレージシステムによってサポートされる複数のデータ保護スキームの各々に対してデータブロックを関連付ける前記データ構造を生成することは、前記関連付けられたデータ保護スキームが適用されるデータブロックのためのブルームフィルタを生成することをさらに含む、請求項1に記載の方法。
【請求項5】
前記データ保護スキームは、ボリューム毎に設定され、前記複数のデータ保護スキームの各々に対してデータブロックを識別する前記データ構造を生成することは、どのボリュームが前記第1のデータブロックを利用するかを決定することをさらに含む、請求項1に記載の方法。
【請求項6】
前記第1のデータブロックに関連付けられたデータ保護ビットマスクを更新して、前記第1のデータ保護スキームおよび前記第2のデータ保護スキームのうちの1つが前記第1のデータブロックとの関連付けから除去されることを示すことをさらに含む、請求項1に記載の方法。
【請求項7】
第3のデータ保護スキームが、前記データ構造を使用して前記第1のデータブロックに関連付けられることを決定することであって、前記第3のデータ保護スキームは、前記第1のデータ完全性保証よりも大きい第2のデータ完全性保証を有し、前記第3のデータ保護スキームは、第2の消去コーディングである、ことと、
前記ポリシーに基づいて、前記第3のデータ保護スキームに従って、前記第1のデータブロックのための冗長情報のストレージを低減することと、を含む、請求項1に記載の方法。
【請求項8】
ハッシュに従って、前記クラスタのノード間で前記第1および第2のデータ保護スキームからの冗長情報を配布することをさらに含む、請求項1に記載の方法。
【請求項9】
前記第1のデータブロックが、前記第1のデータ保護スキームに関連付けられた第1のボリュームに含まれ、かつ前記第2のデータ保護スキームに関連付けられた第2のボリュームに含まれる、請求項1に記載の方法。
【請求項10】
ストレージノードを追加することによって前記クラスタをスケールアウトすることと、
スケールアウトされた前記クラスタ内の前記第1のデータブロックおよび前記第1のデータブロックについての前記冗長情報をリバランスすることと、をさらに含む、請求項1に記載の方法。
【請求項11】
データブロックのガーベッジコレクションのためのシステムであって、
ストレージノードのクラスタであって、各それぞれのストレージノードは、プロセッサに結合されたストレージデバイスを含み、前記プロセッサによる前記ストレージデバイスに含まれた命令の実行は、前記クラスタに、
前記ストレージノードによってサポートされる複数のデータ保護スキームの各々に対して
前記データブロックを関連付けるデータ構造を生成することであって、前記データ保護スキームの各々は、
任意の1つのブロックの利用不可能性に対する特定のレベルの冗長性を示すデータ完全性保証を有する、ことと、
前記データ構造を使用して、第1および第2のデータ保護スキームが
、第1のデータブロックに採用され
ていることを決定することであって、第1のデータ保護スキームは、前記第2のデータ保護スキームと同じデータ完全性保証を有し、前記第1のデータ保護スキームは複製であり、前記第2のデータ保護スキームは、消去コーディングである、ことと、
ポリシーに基づいて、
性能を改善するために前記第1のデータブロックの符号化されていないレプリカのストレージを維持し、前記データ完全性保証を維持すること
を実行することと、行わせる、システム。
【請求項12】
ストレージシステムによってサポートされる複数のデータ保護スキームの各々に対して前記データブロックを関連付ける前記データ構造を生成することは、前記関連付けられたデータ保護スキームが適用されるデータブロックのためのブルームフィルタを生成することをさらに含む、請求項11に記載のシステム。
【請求項13】
前記データ保護スキームは、ボリューム毎に
設定され、前記複数のデータ保護スキームの各々に対してデータブロックを関連付ける前記データ構造を生成することは、どのボリュームが前記第1のデータブロックを利用するかを決定することをさらに含む、請求項11に記載のシステム。
【請求項14】
前記命令は、前記クラスタに、前記第1のデータブロックに関連付けられたデータ保護ビットマスクを更新して、前記第1のデータ保護スキームが前記第1のデータブロックとの関連付けから除去されることを示すことをさらに行わせる、請求項11に記載のシステム。
【請求項15】
前記第1のデータブロックが、前記第1のデータ保護スキームに関連付けられた第1のボリュームに含まれ、かつ前記第2のデータ保護スキームに関連付けられた第2のボリュームに含まれる、請求項11に記載のシステム。
【請求項16】
前記クラスタをスケールアウトするために追加される追加のストレージノードであって、前記命令は、スケールアウトされた前記クラスタ内の前記第1のデータブロックと符号化された前記ブロックとをリバランスするようにさらに構成されている、追加のストレージノードをさらに含む、請求項11に記載のシステム。
【請求項17】
前記命令は、前記クラスタに、
前記第1のデータブロックを前記クラスタの第1のストレージノードに記憶することであって、前記第1のストレージノードは、前記第1のデータブロックに適用されるハッシュ関数に従って選択される、ことをさらに行わせる、請求項11に記載のシステム。
【請求項18】
データブロックのガベージコレクションのための実行可能なプログラム命令を含み、前記プログラム命令は、分散ストレージシステムのクラスタ内のストレージノードのプロセッサによって実行されるときに、前記ストレージノードに、
前記分散ストレージシステムによってサポートされる複数のデータ保護スキームの各々に対して
前記データブロックを関連付けるデータ構造を生成することであって、前記データ保護スキームの各々は、
任意の1つのブロックの利用不可能性に対する特定のレベルの冗長性を示すデータ完全性保証を有する、ことと、
前記データ構造を使用して、第1のデータ保護スキーム
が第1のデータブロックに採用され
ていることを決定することであって、前記第1のデータ保護スキームは、第1のデータ完全性保証を有する、ことと、
前記データ構造を使用して、第2のデータ保護スキームが
、第1のデータ保護スキームに加えて、前記第1のデータブロックに関連付けられ
ていることを決定することであって、前記第2のデータ保護スキームは、前記第1のデータ完全性保証を有する、ことと、
ポリシーに基づいて、(1)前記第2のデータ保護スキームに従って、前記第1のデータブロックのための前記クラスタの前記ストレージノードにおける冗長情報のストレージを低減すること、および(2)性能を改善するために、前記第1のデータブロックの冗長情報のストレージを維持すること、のうちの1つを適用することであって、前記第1のデータ保護スキームは複製であり、前記第2のデータ保護スキームは第1の消去コーディングである、ことと、を行わせる、非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、クラスタのストレージノードが提供するデータの保護に関し、より具体的には、クラスタのストレージノードがサービスするデータのストレージ空間効率を改善しつつ、データの保護に関する。
【背景技術】
【0002】
クラスタとして組織化された複数のストレージノードは、クラスタの1つ以上のクライアントが発行するストレージ要求にサービスするように構成されている分散ストレージアーキテクチャを提供することができる。ストレージ要求は、クラスタのストレージノードの1つ以上に結合されたストレージデバイスに記憶されたデータに向けられる。ストレージノードが提供するデータは、ハードディスクドライブ、ソリッドステートドライブ、フラッシュメモリシステム、または他のストレージデバイスなどの永続的ストレージデバイスとして具現化された複数のストレージユニットに分散され得る。ストレージノードは、論理ユニット(LUN)としてアクセス可能な論理ボリューム(volume)として、デバイスに記憶されたデータを論理的に組織化することができる。各ボリュームは、ボリュームのためのデータを記憶するデータブロック、およびボリュームのデータを説明するメタデータブロックなどのデータ構造のセットとして実装され得る。例えば、メタデータは、データのためのデバイス上のストレージ場所を識別するなどして説明することができる。
【0003】
具体的には、LUNなどのボリュームをデータブロックに分割することができる。データの耐久性の向上をサポートするために、データブロックを複数のストレージノード間で複製することができる。すなわち、ノードが故障した場合にデータの完全性(可用性)を保証するために、重複ブロックのような冗長性スキームがクラスタ内で採用することができる。ストレージ効率を改善するために、消去コーディングのような重複以外のデータ冗長性方法を使用することができる。データが符号化されず、データブロックの1つ以上のコピーが故障していないノードから得られるデータ重複とは異なり、データの一部は消去コーディングで符号化され、ノード故障の場合に再構成のために使用される。しかし、複製冗長性と消去コーディング冗長性の両方について、クラスタ内で同じレベルのデータ完全性をサポートすることは、ストレージ空間にとって非効率的であることがある。このような非効率性は、データ冗長性のレベルが冗長性スキーム間で異なる場合に悪化することがある。
【図面の簡単な説明】
【0004】
本明細書における実施形態の上記およびさらなる利点は、以下の説明を添付の図面に関連付けて参照することにより、よりよく理解され得る。図面において、同様の参照番号は、同一のまたは機能的に類似の要素を示す。
【0005】
【
図1】ストレージクラスタとして相互接続された複数のストレージノードのブロック図である。
【
図3A】ストレージノードのストレージサービスのブロック図である。
【
図3B】ストレージサービスの例示的な実施形態のブロック図である。
【
図5】ブロック識別子の詳細を示すブロック図である。
【
図6】利用可能なストレージ空間を最大化しながら、複数のデータ保護スキームを提供するように構成された技術のための例示のワークフローを示す。
【
図7】利用可能なストレージ空間を最大化しながら、消去コーディングを含む複数のデータ保護スキームを提供するように構成された技術のための例示のワークフローを示す。
【
図8】複数のデータ保護スキームに対応したデータブロックのガーベッジコレクションのための方法の動作を示すフローチャートである。
【発明を実施するための形態】
【0006】
概要
【0007】
本明細書で説明される実施形態は、データブロックの重複排除を行うように構成されているクラスタのストレージノードによってサービスされる論理ボリューム(「volumes」)のデータブロックの複製および消去コーディングのような、様々なデータ保護スキームのためのストレージ利用を改善するように構成されている技術に関する。追加的に、この技術は、ストレージノードのストレージ空間を減少させながら、各重複排除されたデータブロックがデータ保護スキームのデータ完全性保証に適合することを保証するように構成されている。すなわち、データブロックに適用される複数のデータ保護スキームに対しては、同じデータ完全性保証を維持しながら、データ完全性保証を提供するために必要な冗長情報のストレージを低減してもよい。
【0008】
各ボリュームは、ボリュームのためのデータを記憶するデータブロックや、ボリュームのデータを説明するメタデータブロックのような、データ構造のセットとして実装されてもよい。ボリュームは、データブロックに分割されてもよい。各ノードに実装されるストレージサービスは、メタデータを処理し記憶するように構成されている1つ以上のメタデータ(スライス)サービスを有するメタデータ層と、ノードのストレージデバイスでデータを処理(重複排除)し、これを記憶するように構成されている1つ以上のブロックサービスを有するブロックサーバ層と、を含む。特に、ブロックサービスは、様々なデータ保護スキームによって提供される最大限の程度のデータ保護を提供するように構成され、ボリューム間の様々なデータ保護スキームにもかかわらず、依然としてボリューム全体にわたってデータブロックを重複排除する。
【0009】
複製(冗長性)形式のデータ保護を提供するときに、ストレージノードのスライスサービスは、クラスタ上にストレージするためのデータブロックの1つ以上のコピーを最初に生成する。この技術によれば、ボリュームはデータ保護スキームに応じてスライスサービスに割り当てられる。例えば、データの三重複製保護を提供するときに、スライスサービスは、クラスタ内のストレージノードの追加スライスサービスの持続的なストレージのために、データブロックを同期的にコピー(複製)することによって、データブロックの3つのコピー(すなわち、オリジナルコピー0、コピー1およびコピー2)を生成する。次に、データブロックのコピーは、データブロックのコピーをそれぞれのブロックサービスに非同期的にフラッシュすることによって、クラスタのレプリカ(すなわち、オリジナルのレプリカ0、レプリカ1およびレプリカ2)として本質的に表わされる。したがって、ボリュームのブロックは、オリジナルのレプリカ0(R0)ブロックサービス、ならびにプライマリレプリカ1(R1)ブロックサービスおよびセカンダリレプリカ2(R2)ブロックサービスに割り当てられ得る。各複製されたデータブロックは、ストレージデバイス上の記憶のために各ノードのブロックサービスによって維持される割り当てられたビン内に例示的に整理される。各ビンは、最大複製スキームに基づいて1つ以上のブロックサービスに割り当てられ、例示的には、三重複製データ保護スキームの場合、3つのブロックサービスが各ビンに割り当てられる。スライスサービスは、ビン番号を計算し、データブロックが書き込まれる対応するブロックサービスを有するストレージノードを識別するために、ビン割り当てテーブルを参照する。
【0010】
この技術によれば、データブロックはまた、対応する保護スキームの表示に関連付けられる(タグ付けされる)。例えば、二重複製データ保護を有するボリュームのデータブロック(すなわち、各々が1レプリカを有するデータブロック)は、R0データブロックがR0ブロックサービスに割り当てられ、R1データブロックが同じビンであるが異なるブロックサービス、すなわち、プライマリR1ブロックサービスに割り当てられるため、2つのブロックサービスに割り当てられるデータブロックを有することがある。例示的に、データブロックは、二重複製データ保護を備えた第1のボリュームに属し、三重複製データ保護を備えた異なる第2のボリュームに属することがある。この技術は、より高い(最も高い)データ完全性保証(すなわち、最も高いデータ保護スキーム)でボリュームを満足させるために、データブロックの十分な複製があることを保証する。例示的に、ノードのスライスサービスは、次に、データブロックのコピー(例えば、二重複製の場合は、R0、R1、または三重複製の場合は、R0~R2)を、識別されたストレージノードに関連付けられたブロックサービスに非同期的にフラッシュするために、複製スキームに基づき記憶リクエストを発行してもよい。
【0011】
ブロックサービスは、消去コーディングの形態でデータ保護を提供するときに、消去コーディングされるデータブロックを選択することがある。次に、データブロックのセットをグループ化して、消去コーディングのための書き込みグループを形成してもよい。例示的に、書き込みグループメンバシップは、データが失敗に対して弾力性があるように、ビングループを変化させることによって、例えば、ビン識別子におけるビットのサブセットを変化させることに基づく割り当てによって導かれる。スライスサービスは、異なるビンおよびレプリカのデータブロックを関連付けられたブロックサービスにルーティングする。実施態様は、展開に対して選択されたECスキーム(例えば、4つのデータブロックと、訂正のための2つの符号化ブロック、4+2ECと呼ばれる)で変動する。ブロックサービスは、暗号ハッシュに従ってデータブロックをビンに割り当て、展開されたECスキームに基づいて多数の異なるビンを一緒にグループ化する。例えば、4つのビンを4+2ECスキーム(すなわち、4つの符号化されていないデータブロック+訂正情報を備えた2つの符号化されたブロック)にまとめてグループ化することができ、8つのビンを8+1ECスキームにまとめてグループ化することができる。異なるビンからのブロックの書き込みグループは、ビンに従って一時的にスプールされたデータブロックから選択することができる。すなわち、書き込みグループの異なるビンのデータブロックは、ビンが一時的にスプールするブロックのプールからビンに従って選択され(すなわち、ピックされ)、データ損失に対して弾力性のある異なる故障ドメインを有するビンの幅広い選択を表すようにする。データブロック(すなわち、符号化されていないブロック)だけがビンに割り当てられる必要があり、符号化されたブロックは、書き込みグループのデータブロックを参照することによって、単に書き込みグループに関連付けられてもよいことに留意されたい。
【0012】
一例では、ブロックが二重複製を使用する第1のデータ保護スキームと、4+1消去コーディングを使用する第2のデータ保護スキームを有することを考慮して、各スキームが、任意の1つのブロックの利用不可能性に対して単一の冗長性を有するようにする。ブロックは、4のセットにグループ化することができ、消去コーディングスキームは、符号化されたブロック(例えば、パリティブロック)を形成するために適用することができ、複製スキームに対して4ブロックおよび4重複(すなわち、合計8ブロック)の代わりに、4ブロックのセットごとに5ブロックを生成する。特に、この技術は、ポリシーに従ってブロックに対して同じレベルの冗長性を満足する可能な保護スキームのセットに基づいて、ブロックごとのベースで保護スキーム(例えば、4+1ECまたは二重複製)を選択することを可能にする。例えば、性能指向ポリシーは、パリティ計算の必要なしに、ブロックの符号化されていないコピーが常に利用可能である二重複製スキームを選択してもよい。一方、ストレージ空間指向ポリシーは、ストレージをより効率的に使用するために、レプリカを除去するECスキームを選択することができる。例示的に、上記の二重複製スキームからの4つの複製および4+1ECスキームからの5つのブロック(合計9ブロック)は、4つのデータブロックを記憶するために消費することができる。したがって、単一の故障冗長性を維持するために、重複ブロックのうちの4つを除去し、それにより、単一の故障に対して同じデータ完全性保証を維持しながら、ストレージノードのストレージ空間を低減することができる。
【0013】
利用可能なストレージ空間を改善しながら、データ完全性保証を満たすために、ストレージノードは、現在適用可能なデータ保護スキームに従ってストレージを最適化するために、データブロックのための定期的なガーベッジコレクションを実行することがある。ストレージノードのスライスサービスは、スライスファイル内の各ボリュームに対するメタデータを管理し、ガーベッジコレクション時に、各データ保護スキームに対するリストまたはブルームフィルタを生成する。ブルームフィルタは、現在データ保護スキームに関連付けられているデータブロックを識別し、ブロックサービスは、ブルームフィルタを使用して、それらが管理するデータブロックのデータ保護スキームが変更されているかどうかを決定する。データブロックに対する適用可能なデータ保護スキーム(すなわち、可能な保護スキームのセット)が変更された場合、ブロックサービスは、変更された(すなわち、現在の)ブロックに関連付けられたデータ完全性のレベルを維持するために、ポリシー(例えば、より良い性能、より良いストレージ空間効率)および現在適用可能なスキームに従って、データブロックのストレージ消費を改善(例えば、冗長情報を低減)し得る。すなわち、現在のブロックに関連付けられたデータの同じレベルの冗長性は、冗長性スキームが変更される際に維持され得る。
【0014】
例えば、データブロックは、二重複製スキームおよび三重複製スキームでタグ付けされ得る。したがって、データブロック(すなわち、レプリカ0、レプリカ1、およびレプリカ2)のオリジナルおよび2つのコピーは、二重および三重保護スキームの両方に適合するように記憶される。三重複製スキームがもはやデータブロックに適用可能ではない場合(例えば、三重複製タグが除去される場合)、データブロックの第3のコピー(すなわち、レプリカ2)は除去されてもよく、データブロックに関連付けられた残りの二重複製スキームに適合するように記憶されたレプリカ0および1のみを残す。データブロックに関連付けられたデータ保護スキームがさらに消去コーディングスキームに変更され、ストレージ空間効率のポリシーが選択される場合、データブロックは単一パリティ保護で書き込みグループに含まれ、データブロックの第2のコピー(すなわち、レプリカ1)は、データブロックが二重複製スキームと同じレベルの冗長性を有するように除去され得る。ただし、パフォーマンスポリシーが選択される場合、レプリカ1を削除できないことがある。特に、データ保護スキームの変更は、ブロックに対して利用可能な保護スキームのセットから選択される。
【0015】
ストレージ空間効率のポリシーを適用するときに、重複に対する冗長性のレベルより、消去コードの冗長性のレベルが大きいときに、他の冗長情報の節約が生じることがある。例えば、単一のランダム故障から保護するために、二重複製(4つの冗長ブロックを有する合計8ブロック)を使用した上記の4ブロックのセットを考える。同じ4つのブロックは、任意の2つのランダム故障から保護するために、4+2ECスキーム(2つのパリティブロックを備えた合計6ブロック)を採用することができる。データ完全性保証は向上する可能性がある(すなわち、2つのブロックが故障してもよい)が、2つのより少ないブロックが必要となることがある。例示的には、10ブロックが最初に記憶される。すなわち、4つのオリジナルデータブロック、複製スキームによる4つのレプリカ、およびECスキームによる2つのパリティブロックである。その後、4つのレプリカは、複製スキーム単独によって使用されるものよりも高いレベルでECスキームによって使用される6つのブロック(すなわち、4つのデータブロックおよび2つのパリティブロック)を残して、除去することができる。Reed-Solomon符号に基づく8+3ECのようなより大きな消去コーディングスキームに対して、節約がさらに顕著になることがある。すなわち、二重複製スキームは、16ブロック(8データブロック+8冗長ブロック)を必要とする一方、8+3EC(8データブロック+3パリティブロック)スキームは、11ブロックしか採用しない。したがって、以前は1つのランダム故障しか可能でなかったが、3つのランダム故障をサポートするためには、7つのより少ないブロックが必要である。
【0016】
詳細な説明
【0017】
ストレージクラスタ
【0018】
図1は、ストレージクラスタ100として相互接続され、クラスタのストレージデバイス上に組織化および記憶された情報、すなわちデータおよびメタデータに対するストレージサービスを提供するように構成されている複数のストレージノード200のブロック図である。ストレージノード200は、クラスタスイッチ110によって相互接続され、クラスタ100の分散スケールアウトストレージアーキテクチャを提供するために協働する機能コンポーネントを含んでもよい。各ストレージノード200の構成要素は、ハードウェアおよびソフトウェアの機能を含み、これにより、ノードは、コンピュータネットワーク130を介して1つ以上のクライアント120に接続し、これらにサービスすると共に、ストレージデバイスのストレージアレイ150に接続して、それにより、分散ストレージアーキテクチャに従ってストレージサービスを与えることが可能となる。
【0019】
各クライアント120は、情報配信のクライアント/サーバモデルに従って、ストレージノード200と対話するように構成されている汎用コンピュータとして具体化され得る。すなわち、クライアント120は、ネットワーク130を介してパケットを交換することによって、ノード200のサービスを要求することができ、そしてノードは、クライアントが要求するサービスの結果を返することができる。クライアントは、ファイルおよびディレクトリのようなストレージオブジェクトの形態でストレージノード上の情報にアクセスするときに、TCP/IP(Transmission Control Protocol/Internet Protocol)を介して、NFS(Network File System)およびCIFS(Common Internet File System)のようなファイルベースのアクセスプロトコルを含むパケットを発行することができる。しかし、一実施形態では、クライアント120は、論理ユニット(LUN)などのストレージオブジェクトの形態で情報にアクセスするときに、TCPを介してカプセル化されたSCSI(Small Computer Systems Interface)(iSCSI)やFCPを介してカプセル化されたSCSI(FCP)などのブロックベースのアクセスプロトコルを含むパケットを例示的に発行する。
【0020】
図2は、システムバス280によって相互接続された、1つ以上の処理ユニット(プロセッサ)210と、メインメモリ220と、不揮発性ランダムアクセスメモリ(NVRAM)230と、ネットワークインターフェース240と、1つ以上のストレージコントローラ250と、クラスタインターフェース260とを有するコンピュータシステムとして例示的に具体化されたストレージノード200のブロック図である。ネットワークインターフェース240は、コンピュータネットワーク130を介してストレージノード200をクライアント120に結合するように構成されている1つ以上のポートを含むことができ、このネットワーク130は、ポイントツーポイントリンク、ワイドエリアネットワーク、公衆ネットワーク(インターネット)または共有ローカルエリアネットワークを介して実装された仮想プライベートネットワークを含むことができる。したがって、ネットワークインターフェース240は、ストレージノードをネットワーク130に接続するために必要な機械的、電気的、および信号回路を含み、このネットワーク130は、イーサネット(登録商標)またはFC(Fiber Channel)ネットワークを具現化することができる。
【0021】
メインメモリ220は、本明細書で説明される実施形態に関連付けられたソフトウェアプログラムおよびデータ構造を記憶するために、プロセッサ210によってアドレス指定可能なメモリ位置を含んでもよい。次に、プロセッサ210は、ストレージサービス300の1つ以上のメタデータサービス320a~320nおよびブロックサービス610~660などのソフトウェアプログラムを実行し、データ構造を操作するように構成されている処理要素および/または論理回路を含んでもよい。オペレーティングシステム225は、その一部が典型的にはメモリ220(インコア)に常駐し、処理要素(例えば、プロセッサ210)によって実行され、特に、ノードによって実行されるストレージサービス300をサポートする呼び出し動作によってストレージノードを機能的に組織化する。適切なオペレーティングシステム225は、UNIX(登録商標)シリーズまたはMicrosoft Windows(登録商標)シリーズのオペレーティングシステムのような汎用オペレーティングシステム、またはマイクロカーネルおよび埋め込みカーネルのような設定可能な機能を有するオペレーティングシステムを含んでもよい。しかし、本明細書で説明される実施形態では、オペレーティングシステムは、例示的には、Linux(登録商標)オペレーティングシステムである。様々なコンピュータ可読媒体を含む他の処理およびメモリ手段が、本明細書における実施形態に関連するプログラム命令を記憶および実行するために使用されてもよいと、当業者には明らかであろう。
【0022】
ストレージコントローラ250は、ストレージノード200上に実装されたストレージサービス300と協働して、クライアント120が要求する情報にアクセスする。情報は、好ましくは、例示的にフラッシュストレージデバイスとして具現化された内部ソリッドステートドライブ(SSSD)270、ならびに外部ストレージアレイ150(すなわち、ノードに取り付けられた追加のストレージアレイ)のSSDなどのストレージデバイス上に記憶される。一実施形態では、フラッシュストレージデバイスは、NANDフラッシュ構成要素、例えば、単層セル(SLC)フラッシュ、多層セル(MLC)フラッシュまたは三層セル(TLC)フラッシュに基づくブロック指向デバイス(すなわち、ブロックとしてアクセスされるドライブ)とすることができるが、他のブロック指向不揮発性ソリッドステート電子デバイス(例えば、ストレージクラスのメモリ構成要素に基づくドライブ)が、本明細書で説明される実施形態と共に有利に使用され得ると当業者には理解されるであろう。ストレージコントローラ250は、従来のシリアル接続SCSI(SAS)トポロジーおよびシリアルATAトポロジーなどの、I/O相互接続構成を介してSSD270に結合するI/Oインターフェース回路を有する1つ以上のポートを含んでもよい。
【0023】
クラスタインターフェース260は、ストレージノード200をクラスタ100の他のノードに結合するように適合されている1つ以上のポートを含んでもよい。一実施形態では、デュアル10Gbpsイーサネットポートが、ノード間通信に使用されてもよいが、本明細書で説明される実施形態内では、他のタイプのプロトコルおよび相互接続が利用されることがあると当業者には明らかであろう。NVRAM230は、ストレージノードおよびクラスタ環境の障害に照らしてデータを維持することができるバックアップバッテリまたは他の組み込み最終状態保持能力(例えば、ストレージクラスメモリなどの不揮発性半導体メモリ)を含んでもよい。
【0024】
ストレージサービス
【0025】
図3Aは、ストレージクラスタ100の各ストレージノード200によって実装されるストレージサービス300のブロック図である。ストレージサービス300は、例示的に、クラスタ100の分散ストレージアーキテクチャを提供するために、ノード200の他の機能的構成要素と協働する1つ以上のソフトウェアモジュールまたは層として組織化されている。一実施形態では、分散ストレージアーキテクチャは、構成要素(例えば、ネットワーク、メモリ、および計算リソース)を集約および仮想化して、大きなストレージのプール、すなわち、クラスタ100全体に対するノード200の内部SSD270および外部ストレージアレイ150を含む、全てのストレージを有する単一ストレージシステムの抽象化を提示する。換言すれば、アーキテクチャは、クラスタ全体のストレージを統合して、LUNのストレージを可能にし、LUNの各々は、4096バイト(4KB)または512バイトのいずれかの論理ブロックサイズを有する1つ以上の論理ボリューム(「ボリューム」)に割り当てられてもよい。各ボリュームには、さらに、サイズ(ストレージ容量)およびパフォーマンス設定(サービスの品質)などのプロパティ、ならびにアクセス制御が設定されており、その後、好ましくはiSCSIおよび/またはFCPを介して、クライアントに対してブロックストレージプールとしてアクセス可能(すなわち、エクスポートされる)とすることができる。次いで、ノード200のネットワーク、メモリ、およびコンピュータリソースをクラスタ100に対して成長させる(追加する)ことによって、ストレージ容量およびパフォーマンスの両方をその後「スケールアウト」することができる。
【0026】
各クライアント120は、ストレージノード200がサービスするボリュームのデータにアクセスするために、入出力(I/O)要求、すなわちストレージ要求としてパケットを発行することができ、ストレージ要求は、ボリューム上に記憶するためのデータ(すなわち、書き込み要求)またはボリュームから取得するためのデータ(すなわち、読み出し要求)、ならびに、ボリュームの論理ブロックのサイズおよび長さに基づいて、ボリューム内に論理ブロックアドレスまたはインデックスの形態のクライアントアドレッシングを含むことができる。クライアントアドレッシングは、メタデータとして具現化されてもよく、このメタデータは、分散ストレージアーキテクチャ内のデータから分離され、クラスタ内の各ノードは、メタデータおよびデータを、ノードに結合されたストレージデバイスの異なるストレージデバイス(例えば、SSD270a~270n上にデータ、SSD270x上にメタデータ)上に記憶することができる。そのために、各ノード200に実装されるストレージサービス300は、メタデータを処理し、例えばSSD270x上に記憶するように構成されている1つ以上のメタデータサービス320a~320nを有するメタデータ層310と、データを処理し、例えばSSD270a~n上に記憶するように構成されている1つ以上のブロックサービス610~660を有するブロックサーバ層330と、を含む。例えば、メタデータサービス320a~nは、クライアントがボリューム上のデータにアクセスするために使用するクライアントアドレッシング(例えば、LBAインデックス)と、ブロックサービス610~660が、例えばSSDのボリューム上のデータを記憶および/取得するために使用するブロックアドレッシング(例えば、ブロック識別子)との間でマップされる。
【0027】
図3Bは、ストレージサービス300の代替の実施形態のブロック図である。ストレージノードに対してストレージ要求を発行するときに、クライアント120は、典型的には、(例えば、インデックスまたはLBAを介して)ノードがエクスポートするボリュームに接続する。効率的な実装を提供するために、メタデータ層310は、代替的に、1つ以上のボリュームサービス350a~350nとして組織化されてもよく、各ボリュームサービス350は、メタデータサービス320の機能を、ボリュームの粒度で実行することができ、すなわち、ボリュームに対するメタデータを処理し、記憶することができる。しかし、ボリュームに対するメタデータは、単一のボリュームサービス350が処理し、記憶するには大きすぎることがあり、従って、複数のスライスサービス360a~360nが各ボリュームサービス350に関連付けられてもよい。したがって、ボリュームのメタデータは、スライスに分割されてもよく、メタデータのスライスは、各スライスサービス360上に記憶され、処理され得る。ボリュームに対するストレージ要求に応答して、ボリュームサービス350は、どのスライスサービス360a~nがそのボリュームに対するメタデータを含むかを決定し、要求を適切なサービス360に転送する。
【0028】
図4は、ストレージアレイ150のボリューム上にデータを記憶するためのストレージノード200の書き込み経路400を示す。一実施形態では、クライアント120が発行し、クラスタ100のストレージノード200(例えば、プライマリノード200a)で受信される例示的な書き込み要求は、以下の形態を有することができる:
write (volume, LBA, data)
ここで、volumeは書き込む論理ボリュームを指定し、LBAは書き込む論理ブロックアドレスであり、dataは書き込むデータの論理ブロックサイズである。例示的には、ストレージノード200aのスライスサービス360aが受信するデータは、4KBのブロックサイズに分割される。ボックス402において、各4KBデータブロックは、128ビット(16B)ハッシュ値(データブロックのブロック識別子(ID)として記録される)を生成するために、従来の暗号ハッシュ関数を使用してハッシュされ、具体的には、ブロックIDは、内部SSD270および外部ストレージアレイ150上のデータをアドレス指定する(位置を突き止める)ために使用される。したがって、ブロックIDは、データブロックの内容に基づいて生成されるデータブロックの識別子である。従来の暗号ハッシュ関数、例えば、Skeinアルゴリズムは、この技術が採用する16Bハッシュ値/ブロックID内のビットの満足できるランダム分布を提供する。ボックス404では、データブロックは、従来の、例えばLZW(Lempel-Zif-Welch)圧縮アルゴリズムを用いて圧縮され、ボックス406aでは、圧縮されたデータブロックはNVRAM 230に記憶される。実施形態において、NVRAM230は、書き込みキャッシュとして具現化されることに留意されたい。次に、各圧縮されたデータブロックは、データ保護のためにクラスタ100の1つ以上の追加ストレージノード(例えば、セカンダリストレージノード200b)のNVRAM230に同期的に複製される(ボックス406b)。データブロックがクラスタ100の複数ストレージノード200a,bのNVRAM230a,bに安全かつ永続的に記憶されたときに、確認応答がクライアントに返される。
【0029】
図5は、ブロック識別子の詳細を示すブロック図である。一実施形態では、データブロックに対するコンテンツ502は、ストレージサービス300によって受信される。上述のように、受信されたデータは、ブロック識別子506を決定するためにハッシュ関数504を用いて処理され得る内容502を有するデータブロックに分割される。すなわち、データは4KBのデータブロックに分割され、各データブロックは、データブロックのブロックID506として記録された16Bのハッシュ値を生成するためにハッシュされ、例示的には、ブロックID506は、ストレージアレイ150の1つ以上のストレージデバイス270上のデータの位置を突き止めるために使用される。データは、ストレージデバイス上のストレージのためにブロックサービス610~660によって維持されるビン内に例示的に組織化される。ビンは、ブロックID506から予め定義されたビット数を抽出することによって、対応するデータブロックのストレージのためのブロックIDから導出されてもよい。
【0030】
一実施形態では、ブロックIDから抽出された所定のビット数を拡張することによって、ビンをバケットまたは「サブリスト」に分割することができる。例えば、ブロックIDのビンフィールド508は、ビンを識別する0~65,535の間のビン番号(識別子)(使用される16ビットの数に依存する)を生成するために使用されるブロックID506の最初の2(例えば、最上位)バイト(2B)を含んでもよい。ビン識別子はまた、特定のブロックサービス610~660および関連するSSD 270を識別するために使用されてもよい。次に、サブリストフィールド510は、ビンを有するサブリストを識別する0~255の間のサブリスト識別子(使用される8ビットの数に依存する)を生成するために使用されるブロックIDの次のバイト(1B)を含んでもよい。ビンをサブリストに分割することは、特に、ストレージノードの障害またはクラッシュの場合に、ブロックサービス間のデータのネットワーク転送(または同期)を容易にする。サブリスト識別子に使用されるビット数は、初期値に設定されてもよく、その後、必要に応じて後で調整されてもよい。各ブロックサービス610~660は、ブロックIDと、その関連するストレージデバイス/SSD、すなわちブロックサービスドライブ(BSD)上のデータブロックの位置との間のマッピングを維持する。
【0031】
例示的には、ブロックID (ハッシュ値)を使用して、SSDの容量に応じて均等にバランスされた(分散された)配置でビン間にデータブロックを分配することができ、バランス配置は、SSD間の「結合」に基づいており、すなわち、各ノード/SSDは、クラスタの同一の故障ドメイン、すなわち保護ドメインにない任意の他のノード/SSDとほぼ同じ数のビンを共有する。これは、クラスタのストレージノードの全てのSSD間で作業を均等に分配することによって、高速かつ効率的な再構築を可能にするために、全てのSSDがほぼ同じ量の作業(例えば、データの読み出し/書き込み)を実行するように、障害のときにデータを再構築(すなわち、リビルド)ことに利点がある。一実施形態では、各ブロックサービスは、ノードに結合されたストレージデバイス(例えば、内部SSD270および外部ストレージアレイ150)上のデータブロック位置へのブロックIDのマッピングを維持する。
【0032】
例示的に、ビン割り当ては、クラスタ全体にわたる分散キー値ストアに記憶されてもよい。再び
図4を参照すると、分散キー値ストレージは、例えば、クラスタのビン割り当て(例えば、ビン割り当てテーブル)および全てのノードにわたって一貫している設定情報を記憶するために使用される、分散共有無し(すなわち、単一競合点および障害点がない)データベースを提供するように構成されている「ズーキーパ」データベース450として具現化されてもよい。一実施形態では、1つ以上のノード200cは、データ構造、例えばビン割り当てテーブル470に関連してビン割り当て(すなわち、マッピング)を維持するように構成されているズーキーパデータベース450に関連付けられたサービス/プロセスを有する。例示的には、分散ズーキーパは、例えば、クラスタ内の5つの選択されたノードに常駐し、他の全てのノードは、ビン割り当て情報を得るために、選択されたノードの1つに接続する。したがって、これらの選択された「ズーキーパ」ノードは、クラスタ内のノードの異なる故障ドメインに分散されたズーキーパデータベースイメージを複製しており、ズーキーパデータベースの単一の故障点は存在しない。換言すれば、他のノードは、現在のビン割り当てを得るために、最も近いズーキーパデータベースイメージ(ズーキーパノード)にズーキーパ要求を発行し、これは、アクセス時間を改善するためにノードでキャッシュされ得る。
【0033】
NVRAM 230a,bに受信および記憶された各データブロックについて、スライスサービス360a,bは対応するビン番号を計算し、ビン割り当てテーブル470を参照して、データブロックが書き込まれるSSD270a,bを識別する。次いで、ボックス408a、bにおいて、ストレージノード200a、bのスライスサービス360a、bは、識別されたSSDに関連付けられたブロックサービス(例示的に610、620とラベル付けされた)に、圧縮されたデータブロックのコピーを非同期にフラッシュするストア要求を発行する。各スライスサービス360a、bが発行し、各ブロックサービス610、620で受信される例示的なストア要求は、以下の形態を有することができる:
store(block ID,圧縮されたデータ)
【0034】
各SSD270a、b(または外部ストレージアレイ150のストレージデバイス)に対するブロックサービス610、620は、それがデータブロックのコピーを予め記憶しているかどうかを決定する。もしそうでなければ、ブロックサービス610、620は、ブロックIDに関連付けられた圧縮データブロックをSSD270a,b上に記憶する。集約されたSSDのブロックストレージプールは、(いつデータが書き込まれたか、またはそれがどこを起源とするかではなく)ブロックIDの内容によって組織化され、それにより、クラスタの「コンテンツアドレス指定可能」な分散ストレージアーキテクチャを提供することに留意する。このようなコンテンツアドレス指定可能なアーキテクチャは、クラスタの少なくとも2つのSSDに記憶された各データブロックの少なくとも2つのコピーを除いて、SSDレベルで「自動的に」(すなわち、「自由に」)データの重複排除を促進する。換言すれば、分散ストレージアーキテクチャは、データのさらなるコピーのインライン重複排除を伴うデータの単一の複製を利用する。すなわち、ハードウェア故障の場合に冗長性の目的のためにデータの少なくとも2つのコピーが存在する。
【0035】
様々な保護スキームのための利用可能なストレージ空間の改善
【0036】
本明細書で説明される実施形態は、データブロックの重複排除を実行するように構成されているクラスタのストレージノードがサービスする論理ボリュームのデータブロックのための、複製および消去コーディングなどの様々なデータ保護スキームのためのストレージ利用を改善するための技術に関する。追加的に、この技術は、ストレージノードのストレージ空間を改善しながら、各重複排除されたデータブロックがデータ保護スキームのデータ完全性保証に準拠することを保証するように構成されている。すなわち、データブロックに適用される複数のデータ保護スキームに対しては、同じデータ完全性保証を維持しながら、データ完全性保証を提供するために必要な冗長情報のストレージを低減することができる。
【0037】
上述のように、各ノードに実装されるストレージサービスは、メタデータを処理および記憶するように構成されている1つ以上のメタデータ(スライス)サービスを有するメタデータ層と、データを処理し(複製し)、ノードのストレージデバイスでデータを処理(重複排除)し、これを記憶するように構成された1つ以上のブロックサービスを有するブロックサーバ層と、を含む。特に、ブロックサービスは、種々のデータ保護スキームによって提供される最大限の程度のデータ保護を提供するように構成されており、ボリューム間でデータ保護スキームが変動するにもかかわらず、依然として、ボリューム全体にわたってデータブロックを重複排除する。
【0038】
複製(冗長性)の形態でデータ保護を提供するときに、ストレージノードのスライスサービスは、クラスタ上のストレージのためにデータブロックの1つ以上のコピーを生成する。例示的に、スライスサービスは、データブロックの暗号ハッシュに基づいて、データブロックの対応するビン番号を計算し、データブロックが記憶される(すなわち、書き込まれる)ストレージノードを識別するためにビン割り当てテーブルを参照する(すなわち、検索する)。このようにして、ビン割り当てテーブルは、クラスタ内のデータブロックのコピーを追跡する。次いで、追加ノードのスライスサービスは、識別されたストレージノードに関連付けられたブロックサービスに、データブロックのコピーを非同期にフラッシュする記憶リクエストを発行する。
【0039】
この技術によれば、ボリュームはデータ保護スキームに応じてスライスサービスに割り当てられる。例えば、データの三重複製保護を提供する場合、スライスサービスは、クラスタ内のストレージノードの追加スライスサービスの永続的記憶(例えば、NVRAM)にデータブロックを同期的にコピー(複製)することによって、データブロックの3つのコピー(すなわち、オリジナルコピー0、コピー1およびコピー2)を最初に生成する。次いで、データブロックのコピーは、データブロックのコピーを各ブロックサービスに非同期的にフラッシュすることによって、クラスタのレプリカ(すなわち、オリジナルのレプリカ0、レプリカ1およびレプリカ2)として本質的に表わされる。したがって、ボリュームのブロックは、オリジナルのレプリカ0(R0)ブロックサービス、ならびにプライマリレプリカ1(R1)ブロックサービスおよびセカンダリレプリカ2(R2)ブロックサービスに割り当てられ得る。各複製されたデータブロックは、ストレージデバイス上のストレージのための各ノードのブロックサービスが維持する割り当てられたビン内に例示的に組織化される。各ビンは、最大複製スキームに基づいて1つ以上のブロックサービスに割り当てられます。具体的には、三重複製データ保護スキームの場合、3つのブロックサービスが各ビンに割り当てられる。例示的に、各スライスサービスは、データブロックに対する対応するビン番号を計算し、ビン割り当てテーブル470を参照して(インデックスとしてのビン番号を使用して検索して)、データブロックが書き込まれるストレージノードを識別する。
【0040】
この技術によれば、データブロックはまた、対応する保護スキームの表示に関連付けられる(タグ付けされる)。例えば、二重複製データ保護を有するボリュームのデータブロック(すなわち、各々が1レプリカを有するデータブロック)は、R0データブロックがR0ブロックサービスに割り当てられ、R1データブロックが同じビンであるが異なるブロックサービス、すなわち、プライマリR1ブロックサービスに割り当てられるため、2つのブロックサービスに割り当てられるデータブロックを有することがある。例示的に、データブロックは、二重複製データ保護を備えた第1のボリュームに属し、三重複製データ保護を備えた異なる第2のボリュームに属してもよい。この技術は、より高いデータ完全性保証(すなわち、最も高いデータ保護スキーム)でボリュームを満足させるために、データブロックの十分なレプリカがあることを保証する。例示的には、ノードのスライスサービスは、次いで、識別されたストレージノードに関連付けられたブロックサービスに、データブロックのコピー(例えば、二重複製の場合はコピーR0、R1、三重複製の場合はコピーR0~R2)を非同期的にフラッシュするための保護スキームに基づくストア要求を発行することができる。
【0041】
ブロックサービスは、消去コーディングの形態でデータ保護を提供するときに、消去コーディングされるデータブロックを選択することができる。消去コーディングを使用するときに、ストレージノードは、データブロックに加えて、符号化されたブロックをアルゴリズム的に生成するために、消去コードを使用する。一般に、Reed Solomonなどの消去コードアルゴリズムは、nブロックのデータを使用して、追加のkブロック生成し(n+k)、kは、複製の符号化されたブロックまたはデータ保護のために使用される「パリティ」の数である。消去コーディングされたデータにより、n+kブロックの任意のnブロックから欠落ブロックを再構成することができる。例えば、8+3消去コーディングスキーム、すなわち、n=8およびk=3は、8ブロックのデータを11ブロックのデータ/パリティに変換する。読み出し要求に応答して、データは、次いで、11のブロックのうちの任意の8つから(必要ならば)再構成され得る。特に、好ましくは、8つの符号化されていないデータブロックから実行され、符号化されていないデータブロックの1つ以上が利用可能でないときに、再構成が使用される。
【0042】
次いで、データブロックのセットをまとめてグループ化して消去コーディングのための書き込みグループを形成することができる。例示的に、書き込みグループメンバシップは、データが故障に対して弾力性があるように、ビングループを変動させることによって、例えば、ビン識別子内のビットのサブセットを変動させることに基づく割り当てによって導かれる。スライスサービスは、(例えば、異なるビングループを有する)異なるビンのデータブロックおよび複製を、それらの関連付けられたブロックサービスにルーティングする。実装は、展開のために選択されたECスキーム(例えば、4つのデータブロックと訂正のための2つの符号化されたブロックでは、4+2EC)によって変動する。ブロックサービスは、データブロックを暗号ハッシュに従ってビンに割り当て、展開されたECスキームに基づいてある数の異なるビンをまとめてグループ化する。例えば、4つのビンを4+2ECスキームにまとめてグループ化することができ、8つのビンを8+1ECスキームにまとめてグループ化することができる。異なるビンからのブロックの書き込みグループは、ビンに従って一時的にスプールされたデータブロックから選択することができる。すなわち、書き込みグループの異なるビンのデータブロックは、ビンが一時的スプールするブロックのプールから選択され、データ損失に対して弾力性のある異なる故障ドメインを有するビンの幅広い選択を表す。データブロック(すなわち、符号化されていないブロック)だけがビンに割り当てられる必要があり、符号化されたブロックは、書き込みグループのデータブロックを参照することによって、単に書き込みグループに関連付けられてもよいことに留意されたい。
【0043】
一例では、ブロックが二重複製を使用する第1のデータ保護スキームと、4+1消去コーディングを使用する第2のデータ保護スキームを有することを考慮して、各スキームが、任意の1つのブロックの利用不可能性に対して単一の冗長性するようにする。ブロックは、4のセットにグループ化することができ、消去コーディングスキームは、符号化されたブロック(例えば、パリティブロック)を形成するために適用され、複製スキームに対して4ブロックおよび4重複(すなわち、合計8ブロック)の代わりに、4ブロックのセットごとに5ブロックを生成する。特に、この技術は、ポリシーに従ってブロックに対して同じレベルの冗長性を満足する可能な保護スキームのセットに基づいて、ブロックごとのベースで保護スキーム(例えば、4+1ECまたは二重複製)を選択することを可能にする。例えば、性能指向ポリシーは、パリティ計算の必要なしに、ブロックの符号化されていないコピーが常に利用可能である二重複製スキームを選択してもよい。一方、ストレージ空間指向ポリシーは、ストレージをより効率的に使用するために、レプリカを除去するECスキームを選択することができる。例示的に、上記の二重複製スキームからの4つの複製および4+1ECスキームからの5つのブロック(合計9ブロック)は、4つのデータブロックを記憶するために消費することができる。したがって、単一の故障冗長性を維持するために、重複ブロックのうちの4つを除去し、それにより、単一の故障に対して同じデータ完全性保証を維持しながら、ストレージノードのストレージ空間を低減することができる。一実施形態では、ポリシーは、ボリュームの作成時に管理者によって選択されてもよい。
【0044】
ストレージ空間効率のポリシーを適用するときに、重複に対する冗長性のレベルより、消去コードの冗長性のレベルが大きいときに、他の冗長情報の節約が生じることがある例えば、単一のランダム故障から保護するために、二重複製(4つの冗長ブロックを有する合計8ブロック)を使用した上記の4ブロックのセットを考える。同じ4つのブロックは、任意の2つのランダム故障から保護するために、4+2ECスキーム(2つのパリティブロックを備えた合計6ブロック)を採用することができる。データ完全性保証は向上する可能性がある(すなわち、2つのブロックが故障してもよい)が、2つのより少ないブロックが必要となることがある。例示的には、10ブロックが最初に記憶される。すなわち、4つのオリジナルデータブロック、複製スキームによる4つのレプリカ、およびECスキームによる2つのパリティブロックである。その後、4つのレプリカは、複製スキーム単独によって使用されるものよりも高いレベルでECスキームによって使用される6つのブロック(すなわち、4つのデータブロックおよび2つのパリティブロック)を残して、除去することができる。Reed-Solomon符号に基づく8+3ECのようなより大きな消去コーディングスキームに対して、節約がさらに顕著になることがある。すなわち、二重複製スキームは、16ブロック(8データブロック+8冗長ブロック)を必要とする一方、8+3EC(8データブロック+3パリティブロック)スキームは、11ブロックしか採用しない。したがって、以前は1つのランダム故障しか可能でなかったが、3つのランダム故障をサポートするためには、7つのより少ないブロックが必要である。
【0045】
例示的には、ビンは、消去コーディングプロセスを最適化する方式でビングループに割り当てられる。例えば、三重複製データ保護スキームの場合、各ビンの3つのレプリカバージョン(オリジナルレプリカ0、プライマリレプリカ1、およびセカンダリレプリカ2)が生成され、ビングループ内のビンは、複数の異なるブロックサービスにわたってビンのオリジナルレプリカ0のバージョンが割り当てられるように割り当てられ、ビンのプライマリレプリカ1のバージョンは異なるブロックサービスに割り当てられ、セカンダリレプリカ2のバージョンはさらに別の異なるブロックサービスに割り当てられる。データブロックは、選択された消去コーディング展開に対して十分な数のブロックが利用可能になるまで、複製ベースのデータ保護スキームに従ってビンに記憶され得る。マスターレプリカとして機能する異なるブロックサービス(マスターレプリカブロックサービス)の1つは、消去コーディングプロセスを調整し、各ビンから消去コーディングの候補となるデータブロックを選択する。マスターレプリカブロックサービスは、符号化されていないままのデータブロックと書き込みグループを形成し、1つ以上の符号化されたパリティブロック、例えば、一次および二次符号化されたパリティブロックを生成する。当業者には既知のように、Redd-Solomonなどの様々な消去コーディングアルゴリズムを採用することができる。符号化されたパリティブロックは、符号化されたブロックを生成するために使用されるデータブロックの各々に対するブロック識別子と共に記憶することができる。各レプリカブロックサービスは、ストレージデバイス上の符号化されたデータブロック(例えば、一次および二次符号化されたパリティブロック)の位置を指し示す(すなわち、参照する)ために、データブロックの符号化されていないコピーのメタデータマッピングを更新して、データブロックに対する任意の読み出し要求が符号化されたブロックを返すことができるようにする。特に、符号化されたブロックは、非対称消去コーディングスキームをサポートするために列挙され得る(すなわち、一次、二次など)。符号化されたブロックのマッピングを記憶および更新した後、マスターレプリカブロックサービスは、レプリカ0を維持しつつ、書き込みグループ内のデータブロックの符号化されていない追加のレプリカによって占有されるストレージ空間を解放することができる。
【0046】
利用可能なストレージ空間を増加させながら(すなわち、重複データブロックの不必要なストレージを低減する)データ完全性保証を満たすために、ストレージノードは、現在適用可能なデータ保護スキームに従ってストレージを増加させるために、データブロックのための定期的なガーベッジコレクションを実行する。ストレージノードのスライスサービスは、スライスファイル内の各ボリュームに対するメタデータを管理し、ガーベッジコレクション時に、各データ保護スキームに対するリストまたはブルームフィルタを生成する。ブルームフィルタは、現在データ保護スキームに関連付けられているデータブロックを識別し、ブロックサービスは、ブルームフィルタを使用して、データ保護スキームが管理する任意のデータブロックのためのデータ保護スキームが変更されているかどうかを決定する。
【0047】
データブロックのための適用可能なデータ保護スキームが変更された場合、ブロックサービスは、変更されたブロックに以前に関連付けられたデータ完全性のレベルを維持するために、現在適用可能なスキームに従ってデータブロックのストレージを最適化する(例えば、冗長情報を低減する)。すなわち、変更されたブロックに関連付けられたデータの同じレベルの冗長性が、冗長性スキームが変更されたときに維持される。例えば、データブロックは、二重複製スキームおよび三重複製スキームの両方に前もって関連付けられていてもよい。三重複製スキームに準拠するために、データブロックのオリジナルと2つのコピー(すなわち、レプリカ0、レプリカ1、およびレプリカ2)が保存されている。三重複製スキームがもはやデータブロックに適用されない場合、データブロックの第3のコピーは除去されてもよく、残りの二重複製スキームのデータ完全性保証に準拠するために記憶されたレプリカ0および1のみを残す。
【0048】
図6および
図7は、クラスタのための利用可能なストレージ空間を改善しながら、複数のデータ保護スキームを提供するための例示的なワークフローを示す。ワークフローには、動作のステージを表す一連の文字AからGで注釈付けされていることに留意されたい。ワークフローについて順序付けられているが、ステージは、開示の理解を助けるための一例を示すものであり、請求項を限定するために使用すべきではない。特許請求の範囲内に含まれる主題は、順序及び動作の一部に関して変動する可能性がある。特に、ストレージノードがクラスタに追加されると(すなわち、クラスタがスケールアウトされると)、データブロックおよび冗長情報(例えば、パリティブロックおよびレプリカ)は、スケールアウトされたクラスタ内でビンが再割り当てされるにつれて、クラスタ内でリバランスされ得る。
【0049】
図6の例示的なワークフロー600を参照すると、各ストレージノード200a~200cは、それぞれスライスサービス360a~cおよびブロックサービス610~630を含む。各ブロックサービス610~630は、それぞれ、ビン1-0、ビン1-1、およびビン1-2をホストし、各ビンは、その対応するブロックサービスに割り当てられ、管理される。ステージAの前に、データブロックAおよびBは、ストレージノード200a~200cでのストレージのために、クライアント120のうちの1つ以上から受信される。クライアントからの書き込み要求は、データブロックを含み、データが記憶されるボリュームを識別する。ストレージノード200aのスライスサービス360aは、管理(オリジナル)スライスサービスとして機能し、クライアントからの要求(すなわち、クライアント対向スライスサービス)を処理する。スライスサービス360aは、ストレージノード200b、cにわたってスライスサービス360bおよび360cに複製されるスライスファイル607aおよびスライスファイル607b(総称して、スライスファイル607と称する)内のメタデータを管理する。例示的に、スライスファイルは、ボリュームと1対1の関係(すなわち、関連付け)を有し、スライスファイル607aは、ボリューム1に対するメタデータを記憶し、スライスファイル607bは、ボリューム2に対するメタデータを記憶する。特定のボリュームに対する要求が受信されると、スライスサービス360aは、それに応じて対応するスライスファイルを更新する。例えば、ブロックBは、ボリューム2に向けられた書き込み要求と共に受信されるので、スライスサービス360aは、それに応じて、ブロックBがボリューム2に関連付けられることを示すことによって、スライスファイル607bを更新する。また、スライスサービス360aは、スライスファイルへの更新をスライスサービス360bおよび360cに通知し、更新のためのメタデータを提供する。
【0050】
ブロックBに対する書き込み要求に応答して、スライスサービス360aは、対応するブロックサービス610によるストレージのためにブロックBを準備する。先に示したように、データブロックは、ビン割り当てテーブル470に従って各ブロックサービスに割り当てられたビンによって記憶される。上記のように、データブロックは、データブロックに対するブロックID506の先頭ビット(すなわち、ビンフィールド508のビット)に基づいてビンに割り当てられてもよい。また、前述のように、ブロックIDは、データブロックの暗号ハッシュに基づいて生成されてもよく、データブロックは、次いで、ビンフィールド508のビン識別子に対応するビンに記憶される。例えば、ブロックBは、ビンフィールド508内に先頭ビット「1」を有するブロックIDを有し、したがって、bin1-0に割り当てられ、bin1-0は、次にブロックサービス610に割り当てられると仮定する。重複排除の結果として、単一のデータブロックが複数のボリュームに関連付けられる可能性があることに留意する。例示的には、ブロックAは、スライスファイル607に示されているように、ボリューム1およびボリューム2の両方に関連付けられているが、ストレージ空間を保存するために、ビン1-0内に1回だけ記憶される。一実施形態では、ブロックはブロックID506と共に記憶されるので、ブロックサービスは、同じハッシュ識別子を有するブロックがすでに記憶されていることを決定することによって、ブロックの重複コピーを記憶することを回避する。
【0051】
この技術によれば、データブロックは、複数の適用可能なデータ保護スキームを有してもよい。データ保護スキームは、
図6に示すように、二重複製(複製)および三重複製、ならびに
図7に示すように、データ耐久性のための消去コーディングまたは他の技術を含んでもよい。スライスファイル607に示されるように、データ保護スキームは、ボリューム毎に構成することができ、例えば、ボリューム1には、三重複製データ保護スキームが設定されており、ボリューム2には、二重複製データ保護スキームが設定されている。ブロックAのような複数のボリュームに属する単一のデータブロックは、様々なデータ保護スキームを有し、従って、様々なデータ保護要件を有することができる。本明細書で説明される技術は、各データブロックが、データブロックを使用するボリュームのいずれか1つによって設定される最高レベルの保護スキーム(すなわち、最大のデータ完全性保証が最も高い故障許容度を有する)で保護されることを保証する。例えば、二重複製スキームで設定されたボリューム2および三重複製スキームで設定されたボリューム1に属するデータブロックは、三重複製スキームが、単一故障のみではなく、2つの故障を許容することができるため、より大きな保護を提供する三重複製スキームによって保護される。結果として、ブロックAを含むボリューム2は、また二重複製のみを必要とするが、ボリューム1の三重複製スキームによって要求されるように、ブロックAは合計3回記憶される。しかし、例示的には、ブロックBは、ボリューム2の二重保護スキームに従って、2回だけ記憶される。
【0052】
データ保護スキームをサポートするために、ビンのレプリカが生成され、クラスタのブロックサービス全体に割り当てられる。一実施形態では、ビンは、ある数のボリュームからのデータブロックを含んでもよく、各ビンは、たとえ最高保護スキームが現在ビン内にある任意のデータブロックによって利用されなくても、利用可能な最高レベルのデータ保護スキームをサポートするように構成されている。つまり、ボリュームまたはデータが現在最高レベルのデータ保護を使用していない場合でも、ビンはデータ保護機能に基づいてグローバル(すなわち、クラスタ全体)にブロックサービスに割り当てられる。例えば、
図6では、最高レベルの保護スキームは三重複製であるため、各ビンの2つのレプリカが作成され、データブロックのレプリカ0をホストするビンに加えて、それらがブロックサービスに割り当てられる。ブロックサービス610によって例示的に維持されるビン1-0は、ブロックAおよびブロックBの符号化されていないバージョン/レプリカ0のコピーをホストする。ブロックサービス620によって例示的に維持されるビン1-1は、「ホストレプリカ」の「-1」、表記「ビン1-1」によって示されるように、データブロックのレプリカ1(R1)コピーをホストする。同様に、ブロックサービス630によって例示的に維持されるビン1-2は、ホストレプリカの「-2」、表記「ビン1-2」の「-2」によって示されるように、データブロックのレプリカ2(R2)コピーをホストする。具体的には、ビン1-1は、ブロックAおよびブロックBのR1コピーをホストし、ビン1-2は、ブロックAのR2コピーをホストする。特に、ビンが、異なるSSD、異なるストレージノードおよび/またはノードの異なるシャーシなどの異なる故障ドメインにわたって位置付けられるような方式で、ビン割り当てサービス(図示せず)はビンを割り当てて(すなわち、ビン割り当てテーブル470を作成し、修正して)もよい。
【0053】
例示的には、ステージAにおいて、スライスサービス360aは、ブロックAがボリューム1から削除されるべきであることを示すコマンド609を受信する。スライスサービス360aは、従って、
図6のXによって示されるように、ボリューム1とブロックAとの間のマッピングを除去することによって、スライスファイル607aを適宜更新する。更新されたスライスファイル607a(すなわち、メタデータ更新)は、適切なスライスサービスにわたって複製される。スライスサービスは、ブロックAのオリジナルまたは任意のコピーを削除するために、ブロックサービスへのコマンドの送信を遅延させて、小さなランダム削除動作のパフォーマンス影響を回避することができる。代わりに、ブロックサービスの入出力性能(I/O)(例えば、SSD270のI/O性能)は、計画されたガーベッジコレクション期間のために削除を節約することによって改善することができ、SSDへの書き込みをまとめることができるようする。
【0054】
例示的には、ステージBにおいて、スライスサービスは、未使用のデータブロックを除去するためにガーベッジコレクションの実行を開始する。ガーベッジコレクションは、1時間に1回、または1日に1回など、定期的に実行することができる。ガーベッジコレクションプロセスの開始前に、スライスサービスは、ガーベッジコレクションを実行すべきであるというコンセンサスプロトコルを使用して通信することができる。一実施形態では、スライスサービスは、現在のI/O要求負荷が負荷閾値を超えるか、または依然として利用可能な量のストレージ空間のスペース閾値を超えるとき(すなわち、ガーベッジコレクションの必要性が少ないとき)、ガーベッジコレクションを開始することに異議を唱えることができる。反対に、スライスサービスは、利用可能なストレージ空間の量が最小スペースしきい値を下回ったときに、スケジュールされた定期的なガーベッジコレクションの時間外でガーベッジコレクションが発生するように要求することができる。一実施形態では、ガーベッジコレクションプロセスの一部として、スライスサービスは、スライスファイル607を検査(すなわち、歩行(walk or stride))して、現在クラスタのボリュームが使用するデータブロックを識別し、ブロックリスト608を生成する。例示的に、ブロックリスト608は、採用されている各データ保護スキームに対するブロックのリスト、例えば、二重複製ブロックのためのリスト及び三重複製ブロックのためのリストを含む。代替的には、ブロックリスト608は、どのブロックが使用中であるかを示すために、ブルームフィルタまたはブロックIDの範囲のような他のデータ構造を具現化して、使用されないブロックをガーベッジコレクションによって除去して、ストレージ効率を改善することができるようにする。ブロックリスト608はまた、関連するデータ保護スキームに関係なく、使用中のブロックのマスターリストを含んでもよい。
【0055】
例示的には、ステージAにおいて、ブロックAは、ブロックAのために三重複製を必要とする唯一のボリュームであるボリューム1からアンマッピングされる。スライスサービスは、ステージBの間にスライスファイル607を歩行するため、ブロックAは、したがって、三重複ブロックのリストに含まれず、二重複製ブロックのリストにのみ含まれる。ブロックリスト608を生成した後、スライスサービスは、ブロックリスト608をブロックサービスに公開してもよい。一実施形態では、スライスサービスによる公開は、ブロックリスト608のためのメモリ位置をブロックサービスに送信することによって、または他の方法でブロックサービスに、ガーベッジコレクションを実行するためのブロックリスト608を通知および提供することによって、影響されてもよい。
【0056】
ステージCでは、ブロックサービスはガーベッジコレクションプロセスを継続する。ブロックリスト608を使用して、各ブロックサービスは、それらの割り当てられたビンに記憶されたデータブロックのブロックIDをブロックリスト608と比較して、データブロックが依然として使用中であるかどうか、したがって、削除の対象であるかどうかを決定する。ブロックサービスは、現在分析中のビンに関連付けられたデータ保護スキームに基づいて、リストをチェックする。例えば、ブロックサービス630は、ビン1-2がビン1のレプリカ2であり、したがって、三重複ブロックのみを含むため、ビン1-2に記憶されたデータブロックのブロックIDと、三重複ブロックのブロックリスト608のブロックIDとを比較する。ブロックサービス620は、ビン1-1が両方のデータ保護スキームに対してブロックをホストすることができるため、ブロックが依然として使用中であるかどうかを決定するために、ビン1-1に対するブロックIDをブロックリスト608内の二重複製リストおよび三重複製リストの両方と比較する。
【0057】
代替的には、いくつかの実装形態では、スライスサービスはブロックリスト608を生成してもよく、三重複製ブロックもまた本質的に二重複製されるため、全ての三重複ブロックも二重複製ブロックのリストにリスト化されるようにする。このような実装では、ブロックサービス620は、二重複製ブロックに対してのみリストをチェックすることができる。同様に、ブロックサービス610は、データブロックのマスター(オリジナル)コピーをホストし、ブロックリスト608内の両方のリスト(すなわち、二重及び三重複製ブロックリスト)をチェックしてもよいし、ブロックのマスターリスト(図示せず)をチェックしてもよい。記憶されたデータブロックに対するブロックIDがブロックリスト608のうちの適切なリストに見つからない場合、ブロックサービスは、もはや使用中ではないデータブロックのストレージ空間を削除または解放することができる。
【0058】
例示的には、ステージCにおけるガーベッジコレクションプロセスの一部として、ブロックサービス630は、ブロックAがもはや三重複製される必要がないので、レプリカ2のビン1-2からブロックAを削除する。利用可能なストレージ空間を増加させるために、この技術は、適用可能なデータ保護スキームを依然として満足する効率的な方式でデータブロックを記憶するように構成されている。ステージAにおけるコマンド609の結果として、ブロックAは、二重複製保護スキームを必要とするボリューム1から除去されるが、三重複製スキームで設定されているボリューム2に含まれたままである。ブロックAのレプリカ2コピーは、二重複製スキームに準拠するためには必要ないため、ブロックAは、第3のレプリカを提供するビン1-2から除去される。特に、ブロックAのレプリカ0およびレプリカ1コピーは、その二重複製スキームによって必要とされるように、ボリューム2によって使用するために記憶されたままである。ブロックAが後にボリューム2からのクライアント要求によって削除されると、ブロックAはもはやいずれのボリュームによって使用されなくなり、したがって、後のガーベッジコレクションにおいてブロックサービス610および620によってクラスタからの除去対象である。
【0059】
上記のように、いくつかの実装形態では、データブロックは、それらの適用可能なデータ保護スキームでタグ付けされ得る。一実施形態では、各データブロックは、データ保護ビットマスクに関連付けられてもよく、アサートされていないセンチネル(sentinel)値、例えば、「0」は、対応するデータ保護スキームが適用されないことを示し、アサートされたセンチネル値、例えば、「1」は、対応するデータ保護スキームが適用されることを示す。例示的に、ビットマスクの第1のビットは、二重複製に対応し、第2のビットは三重複製に対応し、第3のビットは4+1消去コーディングスキームに対応し、第4のビットは4+2消去コーディングスキームに対応することができる。したがって、二重複製および三重複製に関連付けられたデータブロックは、例えば、「1100」のマスクを有するだろう。このようなデータ保護ビットマスクは、割り当てられたビンに記憶された各データブロックに対してブロックサービスによって維持することができる。例えば、ステージCにおいて、ブロックAがもはや三重複製される必要がないことを決定した後、ブロックサービス610は、ブロックAに関連付けられたビットマスクを更新して、保護スキームの変更を反映させることができる。同様に、ブロックサービス620は、ブロックAのレプリカ1コピーに関連付けられたビットマスクを更新することができる。
【0060】
一実施形態では、スライスサービスは、ストレージノードにわたってスライスファイル607を複製して、各スライスサービスが、記憶された全てのブロックおよび関連付けられたボリューム/データ保護スキームのマッピングについての情報を有するようにしてもよい。代替的には、スライスサービスは、スライスファイル607を複製しなくてもよいし、または対応するボリュームのデータ保護スキームに基づいて、1つ以上のスライスファイル内の内容/情報のみを複製することができる。例えば、ボリューム2に関連付けられたスライスファイル607b内の情報は、ボリューム2が二重に複製されるだけであるため、スライスサービス360cに複製されないことがある。追加の例として、スライスサービスの各々は、割り当てられたボリュームに対するスライスファイル情報のみを記憶し、管理することができ、例えば、ボリューム1はスライスサービス360aに割り当て、ボリューム2はスライスサービス360bに割り当てることができる。ここで、各スライスサービスは、それに利用可能なスライスファイル情報に基づいて、それ自身のブロックリスト608を個別に生成し、クラスタのストレージノードにわたってその固有のブロックリストを全てのブロックサービスに通信することができる。したがって、各ブロックサービスは、二重複製ブロックリスト及び三重複ブロックリストの3つのバージョンを受信することができる。
【0061】
図7の例示的なワークフロー700を参照すると、ブロックサービス610~640はビン0~3をホストする、すなわち、ビンは、それらの対応するブロックサービスに割り当てられ、それらのブロックサービスによって管理される。本明細書で使用する場合、ビングループは、データブロックが消去コーディングのために選択されるビン(ビンID)を識別する。ビングループ内のビンの数は、消去コーディングスキームのための入力データブロックの数に対応し、例えば、(ワークフロー700で説明されているように)4+2ECスキームは、4つのビンを使用する。したがって、ビングループ割り当て705は、4つのビンID、すなわち、ビン0、ビン1、ビン2、およびビン3を指定する。例示的に、ビングループ割り当て705はまた、プライマリ(マスター)レプリカブロックサービス650およびセカンダリレプリカブロックサービス660が各ビンに対するレプリカを記憶することを指定する。割り当て表記「650:1」および「660:2」によって示されるように、マスターレプリカブロックサービス650は、ビングループ内の各ビンに対してレプリカ1を記憶(ホスト)し、セカンダリレプリカブロックサービス660は、ビングループ内の各ビンに対してレプリカ2をホストする。ビングループ割り当て705は、クラスタ100のマスター/マネージャ(「クラスタマスター/マネージャ」)またはビン割り当てを処理する他のサービス(例えば、ビン割り当てサービス、図示せず)によって生成され、ズーキーパデータベース450内のビングループ割り当てテーブル(図示せず)において維持される。特に、ビン割り当てサービスは、(i)ビングループに対して選択されたビンの各オリジナルのレプリカ0のバージョンが異なるブロックサービスに割り当てられること(例えば、ビン0~3がブロックサービス610~640にわたって割り当てられる)、(ii)ビンのプライマリレプリカ1のバージョンが同じブロックサービスに割り当てられること(例えば、全てのレプリカ1がマスターレプリカブロックサービス650に割り当てられる)、および(iii)ビンのセカンダリレプリカ2のバージョンが同じブロックサービスに割り当てられること(例えば、全てのレプリカ2がセカンダリレプリカブロックサービス660に割り当てられる)を保証する。
【0062】
例示的に、ビン割り当てサービスは、ビンが異なる故障ドメインにわたって位置付けられるような方式で、ビンを割り当ててもよい。例えば、各ビンは、異なるソリッドステートドライブ、異なるストレージノード、および/またはストレージノードの異なるシャーシに割り当てられるか、またはそれらから選択されてもよい。さらに、ビン割り当てサービスは、ブロックサービスが同じビンに対して複数のレプリカをホストしないことを保証することができる。ビン割り当てサービスは、ビングループ割り当て705を、プライマリおよびセカンダリレプリカブロックサービス650および660をそれぞれ含む全てのブロックサービスに利用可能にする。上述のように、ブロックサービス650は、プライマリ符号化レプリカをホストし、従って、消去コーディングプロセスを調整するためにビングループ割り当て605を使用するマスターレプリカブロックサービス650として機能するが、ブロックサービス660は、セカンダリ符号化レプリカをホストし、セカンダリレプリカブロックサービス660として機能する。
【0063】
スライスファイル607は、ボリューム1および2に設定された消去コーディングデータ保護スキームに割り当てられたデータブロックA~Dについてのボリュームおよびデータ保護スキーム情報を反映する。しかしながら、ブロックAはまた、ボリューム3に対して示されるように、三重複製スキームによって保護されるように構成されている。本明細書で説明される技術は、消去コーディングスキームよりも複製ベースのデータ保護スキームを優先するといったように、ポリシーに従った保護スキームの優先順位付けを可能にする。換言すれば、データブロックが適用可能な複製ベースの保護スキームを有する場合、データブロックは、消去コーディングされないことがある。消去コーディングは、故障の場合に情報を再構築するときに、より遅く劣化した読み出し、すなわち、データブロックのレプリカ0コピーがもはや利用可能ではない読み出しをもたらすことがある。このような場合、消去コーディングは、単に欠落データブロックの符号化されていないコピーを読み出すよりも、より時間がかかる欠落データブロックを再構築することを必要とする(再構築を実行するためにパリティと同様に他のデータブロックを読み出すことを必要とする)。したがって、複製ベースの冗長性スキームの使用は、再構築の結果生じるECスキームのより遅い劣化した読み出しが、そのボリューム上に記憶されたデータに対する許容できない性能影響となると想定する。結果として、ブロックAは複製スキームと関連付けられているため、ブロックAは消去コーディングに使用されないことがあり、ステージAの前に、4+2消去コーディングスキームを満足するためには不十分な数のブロックが存在する。
【0064】
ステージAにおいて、ブロックAがボリューム3から削除されるべきであることを示すコマンド709を受信することに応答して、スライスサービス360は、データブロックAがもはやボリューム3に関連付けられていないことを示すために、スライスファイル607のスライスファイル3を更新する。したがって、ブロックAはボリューム3から除去され、結果として、そのデータブロックは消去コーディングに利用可能となる。一実施形態では、消去コーディングは、その後ガーベッジコレクションまたはリサイクリング期間中に実行されてもよい。消去コーディングプロセスを調整するマスターレプリカブロックサービス650は、そのブロック識別子を、スライスサービスが生成するデータ保護スキームベースのブロックリストと比較する。ブロックAを更新して、その唯一の適用可能なデータ保護スキームが消去コーディングであることを示した後、ブロックサービス650は、消去コーディングに対してビングループ内の各ビンからの利用可能なデータブロックが存在すると決定し、ステージB、C、およびDにおいて消去コーディングプロセスを実行する。可能なときに、消去コーディングを実行することにより、ブロックA~Dに対して符号化されていないコピーを除去することができるため、利用可能なストレージ空間を増加させる。特に、2つ以上の複製スキームがブロックに関連付けられたままであるが、そのブロックのリカバリは、どのリカバリスキーム、例えば、消去コードリカバリおよびレプリカリカバリが使用されるべきかに関して、ポリシー基づいて決定され得る。
【0065】
ステージBにおいて、マスターレプリカブロックサービス650は、データブロックA~Dを消去コーディングに利用可能であると識別し、ブロックA~Dで書き込みグループを形成する。ブロックサービス650は、適用可能なデータ保護スキームを識別する各ブロックに関連付けられたデータ保護ビットマスクを分析して、ブロックが消去コーディングされ得ることを決定することができる。ステージCにおいて、ブロックサービス650は、それ自身のストレージデバイス内で符号化ブロックPを生成および書き込み、符号化ブロックQを生成し、セカンダリレプリカブロックサービス660に書き込む。マスターレプリカブロックサービス650は、データブロックA~Dのその符号化されていないコピーを読み出し、消去コーディングアルゴリズムを使用してそれらを処理し、符号化されたパリティブロックPおよびQを生成する。マスターレプリカブロックサービス650は、データブロックに対する既存の位置マッピングに加えて、ブロックサービス650のBSD上の符号化されたパリティブロックPを指すマッピングで、データブロックA、B、C、およびDに対する、例えば、それぞれのマッププラグメントのメタデータエントリを更新する。セカンダリレプリカブロックサービス660は、同様に、データブロックに対するそのマッピングを、ブロックサービス660のBSD上の符号化されたパリティブロックQの位置を含むように更新する。また、符号化されたパリティブロックは、書き込みグループ内のデータブロック、すなわち、符号化されたパリティブロックを生成するために使用されたデータブロックA~DのブロックIDと共に記憶される。ステージDにおいて、マスターレプリカブロックサービス650は、データブロックA、B、C、およびDの符号化されていないコピーをブロックサービス650から削除し、セカンダリレプリカブロックサービス660は、データブロックA、B、C、およびDの符号化されていないコピーをブロックサービス660から削除する。符号化されたブロックP、Qが作成されたため、データブロックA、B、C、Dは、いまや4+2の消去コーディングスキームによって保護され、2つの故障後でも読み出し(リカバリ)が依然として可能となる。結果として、データブロックの符号化されていないコピーを削除してストレージ空間を解放することができる。
【0066】
図8は、ストレージサービス300における複数のデータ保護スキームに準拠した、データブロックのガーベッジコレクション(ブロック800)のための方法の動作を示すフローチャートである。一実施形態では、動作は、ブロックサービス610~660によって実行することができる。大まかに言うと、ブロックサービスは、1つ以上の割り当てられたビンに記憶された各データブロックに対して現在適用可能なデータ保護スキームを識別してもよい。データブロックに対する適用可能なデータ保護スキームが変更されたと決定された場合、ブロックサービスは、データブロックの符号化されていないコピーによって以前に占有されていたストレージ空間を解放(すなわち増加)することを可能にするために、不必要なコピーを削除するか、または他のデータブロックと共に消去コーディングすることによって、データブロックのストレージオーバーヘッドを低減することができる。
【0067】
ブロック802では、ブロックサービスは、ブルームフィルタのようなデータ構造を受信し、適用可能なデータ保護スキーム毎に依然として使用中のデータブロックを識別し、選択されたデータブロック毎(ブロック804)に、選択されたブロックに現在割り当てられているデータ保護スキームを決定する(ブロック806)。ブロック808において、ブロックサービスは、選択されたデータブロックの識別子(ブロックID)を使用して、データ保護スキームについて対応するデータ構造を検索する。決定ブロック810において、データ保護スキームのいずれかが選択されたデータブロックにもはや適用されないかどうかの決定が行われる。そうでない場合、方法はブロック804に戻り、さもなければ、ブロック812において、変更されたデータ保護要件に従って、選択されたデータブロックのストレージが最適化(例えば、低減)される。決定ブロック814では、選択する追加のデータブロックが存在するかどうかについての決定が行われ、そうである場合、方法はブロック804に戻る。さもなければ、方法はブロック816において終了する。
【0068】
図6~8に上述された実施形態は、1つ以上の適用可能なデータ保護スキーム(「DPS」)に違反することなく、利用可能なストレージ空間の最大化を保証することができるいくつかの動作を説明する。上記では考えられなかった他のシナリオ、例えば、消去コーディングされたデータブロックが複製ベースのDPSに関連付けられるシナリオは、全ての適用可能なDPSの満足を保証する1つ以上の動作規則に従って処理することができる。
【0069】
一般に、ガーベッジコレクションは、いかなるDPSのデータ完全性保証にも違反しない方法で採用することができる。たとえば、同じブロックが二重複製および三重複製ボリュームで記憶される場合、そのブロックの少なくとも3つのコピーが存在することが必要となる。すなわち、データ完全性は、DPSに対する故障の冗長性のレベル(例えば、k個の故障の場合のデータ損失なし)を保証する。スライスサービスは、全ての読み出しおよび書き込み動作に対するデータのDPSを指定することができる。DPSの仕様は、ブロックサービスが追加のエラーチェックを実行することを可能にすることができる。本明細書で説明される技術は、例示的に、ブロックの符号化されたパリティコピーを記憶するよりも、データブロックの符号化されていないコピーを記憶することを優先し、そのような優先順位付けは、複製ベースのDPSでボリュームに記憶されたデータに対して、劣化した読み出し性能の改善を顧客に提供する。一実施形態では、書き込みグループは、1つのDPSのために作成され、これは、符号化されたブロックと共に記憶するために必要とされるDPS情報を低減しつつ、符号化、ガーベッジコレクションおよびビン同期を簡単にする。また、ストレージ空間を最大化するか、または異なる数の符号化されたコピーを有する書き込みグループ間の重複排除を実行することは、ガーベッジコレクション中の書き込み増幅を増加させる。
【0070】
書き込み要求を実行するとき、データブロックの符号化されていないコピーをホストするブロックサービスは、ブロックの既存の符号化されていないコピーがなければ、符号化されていないコピーを書き込んでもよい。ブロックの符号化されたコピーをホストするブロックサービスは、書き込み要求に対して指定されたDPSに一致するブロックの既存の符号化されたコピーがなく、ブロックの既存の符号化されていないコピーがない場合、符号化されていないコピーを書き込んでもよい。データブロックの符号化されていないコピーをホストするブロックサービスは、符号化されていないブロックのビットマスクが適切なビットセットを有さない場合、符号化されていないブロックの(DPS)ビットマスクのDPSビットを設定してもよい。同様に、ブロックの符号化されたパリティコピーをホストするブロックサービスはもし符号化されていないブロックのDPSビットマスクが適切なビットセットを有さず、符号化されたブロックが存在しない場合、符号化されていないブロックのDPSビットを設定してもよい。
【0071】
一実施形態では、消去コーディング動作を実行するときに、DPSに従ったブロックのレプリカ数が、ブロックの全ての複製ベースのスキームの最大レプリカ数よりも大きい場合、マスターレプリカブロックサービスは、符号化されていないデータブロックを符号化してもよい。すなわち、ボリュームに関連付けられた故障冗長性のレベルに対して過剰な数のレプリカが存在する場合、余分な数の符号化されていないデータブロックが、最終的なガーベッジコレクションに使用されていないものに印を付ける代わりに、符号化された(パリティ)ブロックとして再展開されてもよい。
【0072】
例示的には、ガーベッジコレクションプロセスの開始に種々の規則が適用されてもよい。ブロックサービスは、全てのDPSに対する全てのスライスサービスからDPSに関連付けられた最終Bloomフィルタを受信したときに、ガーベッジコレクションを開始してもよい。スライスサービスは、ボリュームに対するDPSの変更がデータブロックの全ての符号化されたコピーに対して完了した場合、消去コーディングベースのDPSに関連するブロックの符号化されていないコピーに対して、最終Bloomフィルタをブロックサービスに送信してもよい。データブロックを削除または再利用できるかどうかを決定するときに、他の規則が適用されてもよい。ブロックサービスは、ブロックが書き込みグループのDPSに対して使用されていない場合、書き込みグループからブロックを破棄してもよい。ブロックがいかなるDPSによっても使用されていない場合、またはブロックの全てのDPSに対して符号化された/符号化されていない最大レプリカ数が現在のレプリカ数よりも少ない場合、ブロックサービスは、符号化されていないパリティブロックを破棄してもよい。
【0073】
追加的に、ブロックサービスは、読み出し動作中に特定の規則に従ってもよい。例示的に、データブロックのコピーをホストするブロックサービスは、符号化されていないコピーが存在する場合、符号化化されていないコピーを返してもよい。ブロックの符号化されたコピーを保存するブロックサービスは、ブロックの符号化されていないコピーが存在しない場合、符号化されたコピーを返してもよい。しかし、符号化されたコピーのDPSが読み出し要求で示されたDPSと互換性がない場合、符号化されたコピーは返されないことがある。例えば、4+2DPSスキームが読み出し要求で指定された場合、4+1符号化されたコピーは返されないことがある。符号化されたコピーのDPSが、読み出し要求で指定された適用可能なDPS以上の符号化された複製数(例えば、5+3スキームの3のような消去コーディングスキームのk値)を有する場合、符号化されたコピーを返すことができる。
【0074】
前述の説明は、特定の実施形態に向けられている。しかしながら、他のバリエーションおよび修正が、それらの利点の一部または全ての達成を伴って、説明された実施形態になされ得ることは明らかであろう。例えば、本明細書で説明される構成要素および/または要素は、コンピュータ、ハードウェア、ファームウェア、またはそれらの組み合わせ上で実行されるプログラム命令を有する有形の(非一時的な)コンピュータ可読媒体(例えば、ディスク、電子メモリ、および/またはCD)上に符号化されたソフトウェアとして実装され得ることを明確に企図している。したがって、この説明は、例としてのみ採用され、他の方法で、本明細書における実施形態の範囲を制限するものではない。したがって、添付の特許請求の範囲の目的は、本明細書における実施形態の真の精神および範囲内にある全てのそのようなバリエーションおよび修正をカバーすることである。