JP2022504790A - データブロックのイレイジャーコーディングコンテンツ主導分散 - Google Patents
データブロックのイレイジャーコーディングコンテンツ主導分散 Download PDFInfo
- Publication number
- JP2022504790A JP2022504790A JP2021520165A JP2021520165A JP2022504790A JP 2022504790 A JP2022504790 A JP 2022504790A JP 2021520165 A JP2021520165 A JP 2021520165A JP 2021520165 A JP2021520165 A JP 2021520165A JP 2022504790 A JP2022504790 A JP 2022504790A
- Authority
- JP
- Japan
- Prior art keywords
- block
- data
- data blocks
- service
- group
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 51
- 238000012217 deletion Methods 0.000 claims description 5
- 230000037430 deletion Effects 0.000 claims description 5
- 230000010076 replication Effects 0.000 abstract description 7
- 238000005516 engineering process Methods 0.000 abstract description 3
- 230000008569 process Effects 0.000 description 25
- 238000013507 mapping Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 11
- 230000006835 compression Effects 0.000 description 10
- 238000007906 compression Methods 0.000 description 10
- 239000010410 layer Substances 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 238000012937 correction Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 6
- 230000006399 behavior Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 3
- 238000004064 recycling Methods 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 235000012571 Ficus glomerata Nutrition 0.000 description 1
- 240000000365 Ficus racemosa Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2094—Redundant storage or storage space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2097—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/062—Securing storage systems
- G06F3/0623—Securing storage systems in relation to content
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
技術は、クラスタのストレージノードにより提供されるデータブロックのコンテンツ主導分散の複製及びイレイジャーコーディング等のデータ保護を提供するように構成されている。複製(冗長)の形態のデータ保護を提供する場合、ストレージノードのスライスサービスは、クラスタ上に記憶するためにデータブロックの1つ以上のコピー又はレプリカを生成する。各複製されたデータブロックは、ストレージデバイス上での記憶のために、ノードのブロックサービスにより維持されるビン内で例示的にまとめられる。イレイジャーコーディングの形態でデータ保護を提供する場合、ブロックサービスはイレイジャーコーディングすべきデータブロックを選択し得る。そして、イレイジャーコーディングのための一群のデータブロックが共にグループ化されて書き込みグループを形成され得る。この技術によれば、ECグループメンバーシップは、データが故障に耐性を有するようにビングループを変化させることによりガイドされる。ストレージノードのスライスサービスは、異なるビンのデータブロック及びレプリカを書き込みグループに割り当てる。
Description
本開示は、クラスタのストレージノードによって提供されるデータの保護に関し、より具体的には、クラスタのストレージノードによって提供されるコンテンツ主導分散データブロックのイレイジャーコーディングに関する。
クラスタとしてまとめられた複数のストレージノードは、クラスタの1つ以上のクライアントにより発行されたストレージ要求(storage request)に応えるように構成された分散ストレージアーキテクチャを提供し得る。ストレージ要求は、クラスタのストレージノードのうちの1つ以上に連結されたストレージデバイス上に記憶されたデータに対するものである。ストレージノードによって提供されるデータは、ハードディスクドライブ、ソリッドステートドライブ、フラッシュメモリシステム又は他のストレージデバイス等の永続ストレージデバイスとして具現化された複数のストレージユニットにわたって分散され得る。ストレージノードは、デバイスに記憶されたデータを論理ユニット(LUN)としてアクセス可能なボリュームとして論理的にまとめられ得る。各ボリュームは、該ボリュームのためのデータを記憶するデータブロックやボリュームのデータを記述するメタデータブロック等の一連のデータ構造として実施され得る。例えば、メタデータは、データのためのデバイス上の記憶場所を記述、例えば特定し得る。各ボリュームのデータはデータブロックに分割され得る。データブロックは、クラスタ全体にわたってストレージ使用状況及び入出力(I/O)負荷を均等にするために、クラスタのノード全体にわたってコンテンツ主導な方法で分散され得る。データの耐久性の向上をサポートするために、データブロックがストレージノード間で複製され得る。
記憶容量をさらに改善するために、イレイジャーコーディング(erasure coding)等の二重化(duplication)以外のデータ冗長方法(data redundancy method)が用いられ得る。データが符号化されず、データブロックの1つ以上のコピーが非故障ノード(non-failed node)から得られるデータ二重化とは異なり、データの一部がイレイジャーコーディングで符号化され、ノード故障の場合に再構成のために用いられる。しかしながら、コンテンツ主導的に分散されたデータのためのクラスタ内でデータ冗長のイレイジャーコーディング法をサポートするためには、符号化及び非符号化データの追跡に加えて、データ回復の提供及びデータブロックが変化した場合のデータの再符号化のために特定の技術が必要である。
本明細書における実施形態の上記の及びさらなる利点は、添付の図面と共に下記の説明を参照することによって、より理解され得る。添付の図面において、同様の参照番号は同一の又は機能的に同様の要素を示す。
図1は、ストレージクラスタとして相互接続された複数のストレージノードのブロック図である。
図2はストレージノードのブロック図である。
図3Aはストレージノードのストレージサービスのブロック図である。
図3Bはストレージサービスの例示の実施形態のブロック図である。
図4はストレージノードの書き込みパスを示す図である。
図5は、ブロック識別子の詳細を示すブロック図である。
図6は、データブロックのイレイジャーコーディングに関するデータ保護スキームのための例示のワークフローを示す。
図7は、符号化されたブロックの生成及び記憶に関するイレイジャコーディングベースのデータ保護スキームのための例示のワークフローを示す。
図8は、データブロックの記憶及びイレイジャーコーディングのための方法の動作を説明するフローチャートである。
図9は、イレイジャーコーディングシステムにおけるデータブロックの読み取り方法の動作を説明するフローチャートである。
概要
本明細書に記載の実施形態は、クラスタのストレージノードにより提供される論理ボリューム(「ボリューム」)のデータブロックのコンテンツ主導分散のために、複製及びイレイジャーコーディング等のデータ保護を提供するように構成された技術に関する。例示として、ノードのストレージサービスに割り振られた(すなわち割り当てられた)ビンに関連するデータブロックの暗号学的ハッシュ関数を用いて、データブロックがクラスタ内で分散される。暗号学的ハッシュ関数は、例示的に、クラスタのノード内でデータブロックが均等に分散され得るようにビットの満足なランダム分散を提供する。各ボリュームは、ボリュームのデータを記憶するデータブロックやボリュームのデータを記述するメタデータブロック等の一連のデータ構造として実施され得る。各ノードで実施されるストレージサービスは、メタデータを処理及び記憶するように構成された1つ以上のメタデータ(スライス)サービスを有するメタデータ層と、ノードのストレージデバイス上でデータを処理及び記憶するように構成された1つ以上のブロックサービスを有するブロックサーバ層とを含む。
本明細書に記載の実施形態は、クラスタのストレージノードにより提供される論理ボリューム(「ボリューム」)のデータブロックのコンテンツ主導分散のために、複製及びイレイジャーコーディング等のデータ保護を提供するように構成された技術に関する。例示として、ノードのストレージサービスに割り振られた(すなわち割り当てられた)ビンに関連するデータブロックの暗号学的ハッシュ関数を用いて、データブロックがクラスタ内で分散される。暗号学的ハッシュ関数は、例示的に、クラスタのノード内でデータブロックが均等に分散され得るようにビットの満足なランダム分散を提供する。各ボリュームは、ボリュームのデータを記憶するデータブロックやボリュームのデータを記述するメタデータブロック等の一連のデータ構造として実施され得る。各ノードで実施されるストレージサービスは、メタデータを処理及び記憶するように構成された1つ以上のメタデータ(スライス)サービスを有するメタデータ層と、ノードのストレージデバイス上でデータを処理及び記憶するように構成された1つ以上のブロックサービスを有するブロックサーバ層とを含む。
複製(冗長)形式のデータ保護を提供する場合、ストレージノードのスライスサービスはクラスタ上に記憶するためにデータブロックの1つ以上のコピー又はレプリカを生成する。例えば、データの3重複製保護を提供する場合、スライスサービスは、クラスタ内の追加ストレージノードを永続的に記憶するためにデータブロックを同期して複製することにより、データブロックの3つのレプリカ(すなわち、オリジナルレプリカ0、「一次」レプリカ1及び「二次」レプリカ2)を生成する。複製されたデータブロックのそれぞれは、ストレージデバイス上での記憶のために各ノードのブロックサービスにより維持される割り当てられたビン内で例示的に整理される。スライスサービスは、データブロックの暗号学的ハッシュに基づいてデータブロックのための対応するビン番号を計算し、データブロックが書き込まれるストレージノードを特定するためにビン割り当てテーブルを参照する。このようにして、ビン割り当てテーブルは、クラスタ内のデータブロックのコピーを追跡する。次いで、ストレージノードのスライスサービスは、特定されたストレージデバイスに関連するブロックサービスにデータブロックのコピーを非同期にフラッシュするストレージ要求を発行する。とりわけ、ビンは、同じストレージノード又はストレージデバイス上にあるか等の関連性に基づいてビングループに編成され得る。
ブロックサービスは、イレイジャーコーディングの形態でデータ保護を提供する場合、イレイジャーコーディングすべきデータブロックを選択し得る。次に、一組のデータブロックをグループ化してイレイジャーコーディングのための書き込みグループを形成し得る。この技術によれば、書き込みグループのメンバーシップは、データが故障に対して耐性を有するようビングループを変化させることにより、例えば、ビン識別子内のビットのサブセットを変化させることに基づく割り当てによりガイドされる。スライスサービスは、異なるビンの(例えば、異なるビングループを有する)データブロック及びレプリカをそれらの関連するブロックサービスにルーティングする。実施は、展開のために選択されるECスキームにより変化する(例えば、4+2ECと呼ばれる、4つのデータブロック及び訂正のための2つの符号化されたブロック)。ブロックサービスは、暗号学的ハッシュに従ってデータブロックをビンに割り当て、展開されたECスキームに基づいて複数の異なるビンを共にグループ化する。例えば、4つのビンが4+2ECスキームで共にグループ化(すなわち、4つの符号化されていないデータブロック+訂正情報を含む2つの符号化されたブロック)され、8つのビンが8+1ECスキームで共にグループ化され得る。異なるビンからのブロックの書き込みグループは、ビンに従って一時的にスプールされるデータブロックから選択され得る。すなわち、書き込みグループの異なるビンのデータブロックは、ビン単位で(by bin)一時的にスプールされたブロックのプールからビンに従って選択され(すなわち、選ばれ)、データ損失に対して耐性を有する異なる故障ドメインを有する広範なビンを表す。なお、データブロック(すなわち、符号化されていないブロック)だけがビンへの割り当てが必要であるのに対して、符号化されたブロックは、書き込みグループのデータブロックの参照により単に書き込みグループに関連付けられ得る。
例示として、ビンは、イレイジャーコーディングプロセスを効率化するやり方でビングループに割り当てられる。例えば、三重複製データ保護スキームの場合、各ビンの3つのレプリカのバージョン(オリジナルレプリカ0、一次レプリカ1及び二次レプリカ2)が生成され、ビングループ内のビンは、複数の異なるブロックサービスにわたってビンのオリジナルレプリカ0のバージョンが割り当てられ、ビンの一次レプリカ1のバージョンが異なるブロックサービスに割り当てられ、二次レプリカ2のバージョンがさらに別の異なるブロックサービスに割り当てられるように割り当てられる。データブロックは、選択されたイレイジャーコーディングの展開のために十分な数のブロックが利用可能になるまで、複製ベースのデータ保護スキームに従ってビンに記憶され得る。異なるブロックサービスのうちのマスターレプリカとして機能する1つ(マスターレプリカブロックサービス)はイレイジャーコーディングプロセスを調整し、各ビンからイレイジャーコーディングの候補となるデータブロックを選択する。マスターレプリカブロックサービスはデータブロックと書き込みグループを形成し、1つ以上の符号化された訂正(すなわち、パリティ)ブロック(例えば、一次及び二次パリティブロック)を生成する。符号化されたパリティブロックは、符号化されたブロックを生成するために用いられる各データブロックのためのブロック識別子と共に記憶される(すなわち、各パリティブロックは、それぞれのパリティブロックを生成するために用いられるデータブロックへの参照を含む)。各レプリカブロックサービスはストレージデバイス上の符号化されたデータブロック(例えば、一次及び二次パリティブロック)の位置を向くようにデータブロックの符号化されていないコピーのためのそのメタデータマッピングを更新し、データブロックに対する任意の読み取り要求が符号化されたブロックを返すことができる。符号化されたブロックのマッピングを記憶及び更新した後、マスターレプリカブロックサービスは、書き込みグループ内のデータブロックの符号化されていないコピーによって占有されていた記憶領域を解放し得る。
さらに、データブロックが非アクティブ、例えば削除されたとしてマークされる場合、削除されたデータブロックと同じビンに割り当てられた別のデータブロックが代替として割り当てられ、各レプリカブロックサービスのメタデータマッピングが置き換えられたブロックを参照するように更新され、適切なパリティブロックが再計算され得る。代替ブロックは、ビン単位で一時的にスプールされた一連のブロックから選択され得る。
説明
ストレージクラスタ
図1は、ストレージクラスタ100として相互接続され、情報(すなわち、クラスタのストレージデバイス上でまとめられた記憶されたデータ及びメタデータ)のためのストレージサービスを提供するように構成された複数のストレージノード200のブロック図である。ストレージノード200はクラスタスイッチ110により相互接続され、クラスタ100の分散型スケールアウト記憶アーキテクチャを提供するために協働する機能コンポーネントを含み得る。各ストレージノード200のコンポーネントはハードウェア及びソフトウェア機能を含む。ノードがコンピュータネットワーク130を介して1つ以上のクライアント120に接続されてサービスを提供し、ストレージのストレージアレイ150に接続されて、ストレージサービスを分散記憶アーキテクチャに従ったものにする。
ストレージクラスタ
図1は、ストレージクラスタ100として相互接続され、情報(すなわち、クラスタのストレージデバイス上でまとめられた記憶されたデータ及びメタデータ)のためのストレージサービスを提供するように構成された複数のストレージノード200のブロック図である。ストレージノード200はクラスタスイッチ110により相互接続され、クラスタ100の分散型スケールアウト記憶アーキテクチャを提供するために協働する機能コンポーネントを含み得る。各ストレージノード200のコンポーネントはハードウェア及びソフトウェア機能を含む。ノードがコンピュータネットワーク130を介して1つ以上のクライアント120に接続されてサービスを提供し、ストレージのストレージアレイ150に接続されて、ストレージサービスを分散記憶アーキテクチャに従ったものにする。
各クライアント120は、情報配信のクライアント/サーバモデルに従ってストレージノード200とやり取りするように構成された汎用コンピュータとして具現化され得る。すなわち、クライアント120は、ネットワーク130を介してパケットを交換することにより、ノード200のサービスを要求することができ、ノードはクライアントによって要求されたサービスの結果を返し得る。クライアントは、ファイル及びディレクトリ等のストレージオブジェクトの形態のストレージノード上の情報にアクセスする場合に、伝送制御プロトコル/インターネットプロトコル(TCP/IP)を介したネットワークファイルシステム(NFS)及び共通インターネットファイルシステム(CIFS)プロトコル等のファイルベースアクセスプロトコルを含むパケットを発行し得る。しかしながら、一実施形態では、クライアント120は、論理ユニット(LUN)等のストレージオブジェクトの形態の情報にアクセスする場合、TCPカプセル化スモールコンピュータシステムインターフェイス(SCSI)プロトコル(iSCSI)やFCカプセル化SCSI(FCP)等のブロックベースのアクセスプロトコルを含むパケットを例示的に発行する。
図2は、システムバス280によって相互接続された1つ以上のプロセッサユニット(プロセッサ)210、メインメモリ220、不揮発性ランダムアクセスメモリ(NVRAM)230、ネットワークインターフェイス240、1つ以上のストレージコントローラ250及びクラスターインターフェイス260を有するコンピュータシステムとして例示的に実施されたストレージノード200のブロック図である。ネットワークインターフェイス240は、ポイントツーポイントリンク、ワイドエリアネットワーク、公衆ネットワーク(インターネット)又は共有ローカルエリアネットワークを介して実施される仮想プライベートネットワークを含み得るコンピュータネットワーク130を介してストレージノード200をクライアント120に連結するように適合された1つ以上のポートを含み得る。そのため、ネットワークインターフェイス240は、ストレージノードをイーサネット又はファイバチャネル(FC)ネットワークを具現化し得るネットワーク130に接続するために必要な機械的、電気的及び信号回路を含む。
メインメモリ220は、本明細書に記載の実施形態に関連するソフトウェアプログラム及びデータ構造を記憶するために、プロセッサ210によってアドレス指定可能な記憶場所を含み得る。同様に、プロセッサ210は、ストレージサービス300の1つ以上のメタデータサービス320a~n及びブロックサービス610~660等のソフトウェアプログラムを実行し、データ構造を操作するように構成された処理要素及び/又は論理回路を含み得る。その一部がメモリ220内に通常常駐し(インコア)、処理要素(例えば、プロセッサ210)により実行されるオペレーティングシステム225は、ノードにより実施されるストレージサービス300をサポート動作をとりわけ起動することによりストレージノードを機能的に組織化する。好適なオペレーティングシステム225は、UNIX(登録商標)シリーズ又はマイクロソフトWindows(登録商標)シリーズのオペレーティングシステム等の汎用オペレーティングシステム又はマイクロカーネル及び埋め込みカーネル等の設定可能な機能を有するオペレーティングシステムを含み得る。しかしながら、本明細書に記載の実施形態では、オペレーティングシステムは例示的にLinux(登録商標)オペレーティングシステムである。当業者であれば、本明細書の実施形態に関連するプログラム命令を記憶及び実行するために、様々なコンピュータ読み取り可能媒体を含む他の処理及び記憶手段が用いられ得ることが明らかであろう。
ストレージコントローラ250は、ストレージノード200上で実施されるストレージサービス300と協働して、クライアント120により要求された情報にアクセスする。情報は、フラッシュストレージデバイスとして例示的に具現化された内部ソリッドステートドライブ(SSD)270等のストレージデバイスに加えて外部ストレージアレイ150のSSD(すなわち、ノードに取り付けられた追加のストレージアレイ)に記憶されることが好ましい。一実施形態では、フラッシュストレージデバイスは、NANDフラッシュコンポーネント(例えば単層セル(SLC)フラッシュ、多層セル(MLC)フラッシュ又は三層セル(TLC)フラッシュ)に基づくブロック指向デバイス(すなわち、ブロックとしてアクセスされるドライブ)であり得るが、他のブロック指向の非揮発性ソリッドステート電子デバイス(例えば、ストレージクラスメモリコンポーネントに基づくドライブ)も本明細書に記載の実施形態と共に有利に用いられ得ることを当業者は理解するであろう。ストレージコントローラ250は、従来のシリアル接続SCSIトポロジー及びシリアルATAトポロジー等のI/O相互接続構成を介してSSD270に連結されるI/Oインターフェイス回路を有する1つ以上のポートを含み得る。
クラスターインターフェイス260は、ストレージノード200をクラスタ100の他のノードに連結するように構成された1つ以上のポートを含み得る。一実施形態では、デュアル10Gbpsイーサネットポートがノード間通信に用いられ得るが、本明細書に記載の実施形態内で他の種類のプロトコル及び相互接続が利用され得ることは当業者に明らかであろう。NVRAM230は、ストレージノード及びクラスタ環境の障害に照らしてデータを維持することができるバックアップバッテリ又は他のビルトインラストステート保持能力(built-in last-state retention capability)(例えば、ストレージクラスメモリ等の不揮発性半導体メモリ)を含み得る。
ストレージサービス
図3Aは、ストレージクラスタ100の各ストレージノード200により実施されるストレージサービス300のブロック図である。ストレージサービス300は、クラスタ100の分散型ストレージアーキテクチャを提供するために、ノード200の他の機能コンポーネントと協働する1つ以上のソフトウェアモジュール又は層として例示的に構成される。一実施形態では、分散型ストレージアーキテクチャはコンポーネント(例えば、ネットワーク、メモリ及びコンピュータリソース)を集約及び仮想化して、大きなストレージプール、すなわちクラスタ100全体のためのノード200の内部SSD270及び外部ストレージアレイ150を含む全てのストレージを有する単一ストレージシステムの抽象化を提示する。すなわち、アーキテクチャは、クラスタ全体のストレージを統合して、(それぞれが、4096バイト(4KB)又は512バイトのいずれかの論理ブロックサイズを有する1つ以上の論理ボリューム(「ボリューム」)に割り当てられ得る)LUNのストレージを可能にする。各ボリュームは、サイズ(ストレージ容量)及びパフォーマンス設定(サービスの品質)等の特性に加えてアクセス制御が設定され、その後、クライアントがブロックストレージプールとして好ましくはiSCSI及び/又はFCPを介してアクセス可能(すなわち、エクスポート可能)となり得る。そして、クラスタ100に対してノード200のネットワーク、メモリ及びコンピュータリソースを拡大(加える)することにより、ストレージ容量及びパフォーマンスの双方が「スケールアウト」され得る。
図3Aは、ストレージクラスタ100の各ストレージノード200により実施されるストレージサービス300のブロック図である。ストレージサービス300は、クラスタ100の分散型ストレージアーキテクチャを提供するために、ノード200の他の機能コンポーネントと協働する1つ以上のソフトウェアモジュール又は層として例示的に構成される。一実施形態では、分散型ストレージアーキテクチャはコンポーネント(例えば、ネットワーク、メモリ及びコンピュータリソース)を集約及び仮想化して、大きなストレージプール、すなわちクラスタ100全体のためのノード200の内部SSD270及び外部ストレージアレイ150を含む全てのストレージを有する単一ストレージシステムの抽象化を提示する。すなわち、アーキテクチャは、クラスタ全体のストレージを統合して、(それぞれが、4096バイト(4KB)又は512バイトのいずれかの論理ブロックサイズを有する1つ以上の論理ボリューム(「ボリューム」)に割り当てられ得る)LUNのストレージを可能にする。各ボリュームは、サイズ(ストレージ容量)及びパフォーマンス設定(サービスの品質)等の特性に加えてアクセス制御が設定され、その後、クライアントがブロックストレージプールとして好ましくはiSCSI及び/又はFCPを介してアクセス可能(すなわち、エクスポート可能)となり得る。そして、クラスタ100に対してノード200のネットワーク、メモリ及びコンピュータリソースを拡大(加える)することにより、ストレージ容量及びパフォーマンスの双方が「スケールアウト」され得る。
各クライアント120は、ストレージノード200により提供されるボリュームのデータにアクセスするために、入出力(I/O)要求、すなわちストレージ要求としてパケットを発行し得る。ストレージ要求は、ボリューム上に記憶するためのデータ(すなわち、書き込み要求)又はボリュームから取り出すためのデータ(すなわち、読み取り要求)に加えて、ボリュームの論理ブロックの大きさ及び長さに基づくボリューム内への論理ブロックアドレス(LBA)又はインデックスの形態でのクライアントアドレス指定を含み得る。クライアントアドレス指定はメタデータとして具現化され、クラスタ内の各ノードがメタデータ及びデータをノードに連結されたストレージの異なるストレージデバイス(例えば、データをSSD270a~n上に及びメタデータをSSD270x上に)に記憶し得るように分散型ストレージアーキテクチャ内のデータから分離される。そのために、各ノード200内で実装されるストレージサービス300は、メタデータを処理して、例えばSSD270x上に記憶するように構成された1つ以上のメタデータサービス320a~nを有するメタデータ層310と、データを処理して、例えばSSD270a~n上に記憶するように構成された1つ以上のブロックサービス610~660を有するブロックサーバ層330を含む。例えば、メタデータサービス320a~nは、ボリューム上のデータにアクセスするのにクライアントが用いるクライアントアドレス指定(例えば、LBAインデックス)と、例えば、SSDのボリューム上にデータを記憶及び/又はボリューム上からデータを取り出しするためにブロックサービス610~660により用いられるブロックアドレス指定(例えば、ブロック識別子)との間でマップされる。
図3Bは、ストレージサービス300の代替的な実施形態のブロック図である。ストレージノードに対してストレージ要求を発行する場合、通常、クライアント120はノードにより(例えば、インデックス又はLBAを介して)エクスポートされたボリュームに接続する。効率的な実施を提供するために、メタデータ層310は代替的に1つ以上のボリュームサービス350a~nとして構造化され得る。各ボリュームサービス350はボリュームの粒度でメタデータサービス320の機能を行い得る、すなわち、ボリュームのためにメタデータを処理、記憶し得る。しかしながら、ボリュームのためのメタデータは、単一のボリュームサービス350が処理及び記憶するには大きすぎる場合がある。したがって、複数のスライスサービス360a~nが各ボリュームサービス350に関連付けられ得る。そのため、ボリュームのためのメタデータはスライスに分割され、メタデータのスライスは各スライスサービス360上に記憶され、各スライスサービス360上で処理され得る。ボリュームに対するストレージ要求に応答して、ボリュームサービス350は、そのボリュームのためのメタデータをどのスライスサービス360a~nが含むかを判定し、適切なスライスサービス360に該要求を転送する。
図4は、ストレージアレイ150のボリューム上にデータを記憶するためのストレージノード200の書き込みパス400を示す。一実施形態では、クライアント120により発行され、クラスタ100のストレージノード200(例えば、一次ノード200a)で受信される例示の書き込み要求は次のような形態を有し得る。
書き込み(ボリューム、LBA、データ)
ここで、ボリュームは書き込むべき論理ボリュームを指定し、LBAは書き込むべき論理ブロックアドレスであり、データは書き込むべきデータの論理ブロックサイズである。例示として、ストレージノード200aのスライスサービス360aにより受信されたデータは4KBのブロックサイズに分割される。ボックス402で、各4KBデータブロックは、(データブロックのブロック識別子として記録される)128ビット(16B)ハッシュ値を生成するために従来の暗号学的ハッシュ関数を用いてハッシュされ、内部SSD270及び外部ストレージアレイ150上のデータをアドレス指定(特定)するためにブロックIDが例示的に用いられる。そのため、ブロックIDはデータブロックの内容に基づいて生成されるデータブロックの識別子である。従来の暗号学的ハッシュ関数、例えば、Skeinアルゴリズムは、この技術により用いられる16Bハッシュ値/ブロックID内で満足のいくビットのランダム分散を提供する。ボックス404で、データブロックは従来の圧縮アルゴリズム、例えばLZW(Lempel-Zif-Welch)を用いて圧縮され、圧縮されたデータブロックはボックス406aでNVRAM230に記憶される。なお、一実施形態では、NVRAM230は書き込みキャッシュとして具現化される。そして、圧縮されたデータブロックのそれぞれは、データ保護のためにクラスタ100内の1つ以上の追加のストレージノード(例えば、二次ストレージノード200b)のNVRAM230に同期的に複製される(ボックス406b)。クラスタ100の複数のストレージノード200a、bのNVRAM230a、bにデータブロックが無事に且つ永続的に記憶された場合に、確認応答がクライアントに返される。
書き込み(ボリューム、LBA、データ)
ここで、ボリュームは書き込むべき論理ボリュームを指定し、LBAは書き込むべき論理ブロックアドレスであり、データは書き込むべきデータの論理ブロックサイズである。例示として、ストレージノード200aのスライスサービス360aにより受信されたデータは4KBのブロックサイズに分割される。ボックス402で、各4KBデータブロックは、(データブロックのブロック識別子として記録される)128ビット(16B)ハッシュ値を生成するために従来の暗号学的ハッシュ関数を用いてハッシュされ、内部SSD270及び外部ストレージアレイ150上のデータをアドレス指定(特定)するためにブロックIDが例示的に用いられる。そのため、ブロックIDはデータブロックの内容に基づいて生成されるデータブロックの識別子である。従来の暗号学的ハッシュ関数、例えば、Skeinアルゴリズムは、この技術により用いられる16Bハッシュ値/ブロックID内で満足のいくビットのランダム分散を提供する。ボックス404で、データブロックは従来の圧縮アルゴリズム、例えばLZW(Lempel-Zif-Welch)を用いて圧縮され、圧縮されたデータブロックはボックス406aでNVRAM230に記憶される。なお、一実施形態では、NVRAM230は書き込みキャッシュとして具現化される。そして、圧縮されたデータブロックのそれぞれは、データ保護のためにクラスタ100内の1つ以上の追加のストレージノード(例えば、二次ストレージノード200b)のNVRAM230に同期的に複製される(ボックス406b)。クラスタ100の複数のストレージノード200a、bのNVRAM230a、bにデータブロックが無事に且つ永続的に記憶された場合に、確認応答がクライアントに返される。
図5はブロック識別子の詳細を示すブロック図である。一実施形態では、データブロックのためのコンテンツ502がストレージサービス300により受信される。上述したように、受信されたデータはブロック識別子506を特定するために、ハッシュ関数504を用いて処理され得るコンテンツ502を有するデータブロックに分割される。すなわち、データは4KBのデータブロックに分割され、各データブロックは、データブロックのブロックID506として記録される16Bのハッシュ値を生成するためにハッシュされる。例示として、ブロックID506はストレージアレイ150の1つ以上のストレージデバイス270上のデータを特定するために用いられる。例示として、データは、ストレージデバイス上に記憶のために、ブロックサービス610~660によって維持されるビン内でまとめられる。ビンは、ブロックID506から所定数のビットを抽出することにより対応するデータブロックを記憶するために、ブロックIDから得られてもよい。
一実施形態では、ブロックIDから抽出された所定数のビットを拡大することにより、ビンをバケット又は「サブリスト」に分割され得る。例えば、ブロックIDのビンフィールド508は、ビンを特定する0~65535の間(用いられる16ビットの数に依る)のビンの番号(識別子)を生成するために用いられるブロックID506の第1の2つ(例えば、最上位)のバイト(2B)を含み得る。ビン識別子は特定のブロックサービス610~660及び関連するSSD270を特定するためにも用いられ得る。そして、サブリストフィールド510は、ビンを有するサブリストを特定する0~255の間(用いられる8ビットの数に依る)のサブリスト識別子を生成するのに用いられるブロックIDの次のバイト(1B)を含み得る。ビンをサブリストに分割することにより、ストレージノードの障害又はクラッシュが起きた場合にブロックサービス間でのデータのネットワーク転送(又は同期)がとりわけ容易になる。サブリスト識別子のために用いられるビットの数は初期値に設定されてもよく、必要に応じて後で調整してもよい。各ブロックサービス610~660は、ブロックIDと、その関連するストレージデバイス/SSD、すなわちブロックサービスドライブ(BSD)との間のマッピングを維持する。
例示として、ブロックID(ハッシュ値)は、SSDの容量に従ってビンの間でデータブロックを均等均衡(分散)配置(evenly balanced (distributed) arrangement)で分散するのに用いられ得る。均衡配置はSSD間の「連結」に基づく。すなわち、各ノード/SSDは、クラスタの同一の故障ドメイン、すなわち保護ドメインにない他のノード/SSDとほぼ同じ数のビンを共有する。その結果、データブロックはコンテンツに基づいてクラスタのノード全体に分散される(すなわち、データブロックのコンテンツ主導分散)。これは、故障が起きた場合にデータを再構築するのに有利である(すなわち、再構築)。クラスタのストレージノードの全てのSSD間で作業を均等に分散することにより、全てのSSDがほぼ同じ量の作業(例えば、データの読み込み/書き込み)を行って素早く且つ効率的な再構築を可能にする。一実施形態では、各ブロックサービスは、ノードに連結されたストレージデバイス(例えば、内部SSD270及び外部ストレージアレイ150)上のデータブロックの場所へのブロックIDのマッピングを維持する。
例示として、ビン割り当ては、クラスタ全体にわたる分散キー値ストア(distributed key value store)に記憶され得る。再び図4を参照して、分散キー値ストレージは、例えば、ビン割り当て(例えば、ビン割り当てテーブル)及びクラスタの全てのノードにわたって一貫した構成情報を記憶するのに用いられる分散された無共有の(すなわち、単一の争点及び単一点障害がない(no single point contention and failure))データベースを提供するように構成された「ズーキーパ(zoo keeper)」データベース450として具現化され得る。一実施形態では、1つ以上のノード200cは、データ構造、例えばビン割り当てテーブル470に関連してビン割り当て(すなわち、マッピング)を維持するように構成されたズーキーパデータベース450に関連するサービス/プロセスを有する。例示として、分散ズーキーパは、例えば、クラスタ内の5つの選択されたノードに常駐し、他の全てのノードは選択されたノードのうちの1つに接続してビン割り当て情報を得る。そのため、これらの選択された「ズーキーパ」ノードは、クラスタ内のノードの異なる故障ドメインの間で分散された、複製されたズーキーパデータベースイメージを有するため、ズーキーパデータベースの単一点障害は存在しない。すなわち、他のノードは、現在のビン割り当てを得るためにそれらに最も近いズーキーパデータベースイメージ(ズーキーパノード)に対してズーキーパ要求を発行し、これはアクセス時間を改善するためにノードでキャッシュされ得る。
NVRAM230a、bで受信及び記憶された各データブロックについて、スライスサービス360a、bは対応するビン番号を計算し、ビン割り当てテーブル470を参照してデータブロックが書き込まれるSSD270a、bを特定する。ボックス408a、bで、ストレージノード200a、bのスライスサービス360a、bは、特定されたSSDに関連する(例示的に610、620と表記された)ブロックサービスに対して、圧縮データブロックのコピーを非同期にフラッシュするストレージ要求を発行する。各スライスサービス360a、bによって発行され、各ブロックサービス610、620で受信される例示のストレージ要求は次のような形態を有し得る。
記憶(ブロックID、圧縮データ)
各SSD270a、b(又は外部ストレージアレイ150のストレージデバイス)のためのブロックサービス610、620は、データブロックのコピーをそれが以前記憶したかどうかを判定する。記憶していない場合、ブロックサービス610、620はブロックIDに関連する圧縮データブロックをSSD270a、b上に記憶する。なお、集約されたSSDのブロックストレージプールは、(データが何時書き込まれたか又は何処に由来するものかではなく)ブロックIDのコンテンツによりまとめられるため、クラスタの「コンテンツアドレス可能(content-addressable)」な分散ストレージアーキテクチャが提供される。そのようなコンテンツアドレス可能なアーキテクチャは、クラスタの少なくとも2つのSSD上に記憶された各データブロックの少なくとも2つのコピーを除き、SSDレベルでの(すなわち「ただで」で(for “free”))「自動的な」データの重複排除を促進する。すなわち、分散ストレージアーキテクチャは、データのさらなるコピーのインライン重複排除を伴うデータの単一の複製を利用する。すなわち、ハードウェアの故障の場合に冗長性の目的のためにデータのコピーが少なくとも2つ存在する。
記憶(ブロックID、圧縮データ)
各SSD270a、b(又は外部ストレージアレイ150のストレージデバイス)のためのブロックサービス610、620は、データブロックのコピーをそれが以前記憶したかどうかを判定する。記憶していない場合、ブロックサービス610、620はブロックIDに関連する圧縮データブロックをSSD270a、b上に記憶する。なお、集約されたSSDのブロックストレージプールは、(データが何時書き込まれたか又は何処に由来するものかではなく)ブロックIDのコンテンツによりまとめられるため、クラスタの「コンテンツアドレス可能(content-addressable)」な分散ストレージアーキテクチャが提供される。そのようなコンテンツアドレス可能なアーキテクチャは、クラスタの少なくとも2つのSSD上に記憶された各データブロックの少なくとも2つのコピーを除き、SSDレベルでの(すなわち「ただで」で(for “free”))「自動的な」データの重複排除を促進する。すなわち、分散ストレージアーキテクチャは、データのさらなるコピーのインライン重複排除を伴うデータの単一の複製を利用する。すなわち、ハードウェアの故障の場合に冗長性の目的のためにデータのコピーが少なくとも2つ存在する。
データブロックのコンテンツ主導分散のイレイジャーコーディング
本明細書に記載の実施形態は、クラスタのストレージノードにより提供されるボリュームのデータブロックのコンテンツ主導分散のデータ保護(例えば、複製及びイレイジャーコーディング)を提供するように構成された技術に関する。前述したように、データブロックは、ノードのストレージサービスに割り当てられた(すなわち、アサインされた)ビンに関連するデータブロックの暗号学的ハッシュ関数を用いてクラスタ内で分散され得る。暗号学的ハッシュ関数は、データブロックがクラスタのノード内で均等に分散されるように、十分なビットのランダム分散を提供する。各ボリュームは、ボリュームのためにデータを記憶するデータブロック及びボリュームのデータを記述するメタデータブロック等の一連のデータ構造として実施され得る。各ノードで実施されるストレージサービスは、メタデータを処理及び記憶するように構成された1つ以上のメタデータ(スライス)サービスを有するメタデータ層と、ノードのストレージデバイス上のデータを処理及び記憶するように構成された1つ以上のブロックサービスを有するブロックサーバ層とを含む。
本明細書に記載の実施形態は、クラスタのストレージノードにより提供されるボリュームのデータブロックのコンテンツ主導分散のデータ保護(例えば、複製及びイレイジャーコーディング)を提供するように構成された技術に関する。前述したように、データブロックは、ノードのストレージサービスに割り当てられた(すなわち、アサインされた)ビンに関連するデータブロックの暗号学的ハッシュ関数を用いてクラスタ内で分散され得る。暗号学的ハッシュ関数は、データブロックがクラスタのノード内で均等に分散されるように、十分なビットのランダム分散を提供する。各ボリュームは、ボリュームのためにデータを記憶するデータブロック及びボリュームのデータを記述するメタデータブロック等の一連のデータ構造として実施され得る。各ノードで実施されるストレージサービスは、メタデータを処理及び記憶するように構成された1つ以上のメタデータ(スライス)サービスを有するメタデータ層と、ノードのストレージデバイス上のデータを処理及び記憶するように構成された1つ以上のブロックサービスを有するブロックサーバ層とを含む。
データの耐久性を高めるために、ストレージノードは、ボリュームのデータブロックのために複製等のデータ保護を実施し得る。複製(冗長)の形態でデータ保護を提供する場合、ストレージノードはデータのブロックを複製し、複製したデータブロックを追加のストレージデバイスに送信する。ストレージノードのスライスサービスは、上述したようにクラスタ上に記憶するためにデータブロックの1つ以上のコピー又はレプリカを生成する。例えば、データの3重複製保護を提供する場合、スライスサービスは、クラスタ内の追加ストレージノードの永続的な記憶のためにデータブロックを同期的に複製することにより、データブロックの3つのレプリカ(すなわち、オリジナルレプリカ0、「一次」レプリカ1及び「二次」レプリカ2)を生成する。各複製されたデータブロックは、例示として、ストレージデバイス上に記憶のために、各ノードのブロックサービスにより維持される割り当てられたビン内で整理される。スライスサービスは、データブロックの暗号学的ハッシュに基づいてデータブロックのための対応するビン番号を計算し、ビン割り当てテーブルを参照してデータブロックが書き込まれるストレージノードのストレージデバイスを特定する。そして、ストレージノードのスライスサービスは、特定されたストレージデバイスに関連するブロックサービスに対して、データブロックのコピーを非同期的にフラッシュするための記憶要求を発行する。とりわけ、ビンは、同じストレージノード又はストレージデバイス上にある等の関連に基づいてビングループにまとめられ得る。
イレイジャーコーディングの形態でデータ保護を提供する場合、データブロックに加えて符号化ブロックをアルゴリズム的に生成するためにイレイジャーコードが用いられる。一般に、Reed Solomon等のイレイジャーコードアルゴリズムは、n個のブロックを用いてk個の追加のブロック(n+k)を生成する(ここで、kはデータ保護のために用いられる冗長又は「パリティ」の符号化されたブロックの数である)。イレイジャーコード化されたデータにより、n+kブロックのうちの任意のn個のブロックから欠落ブロックを再構築することができる。例えば、8+3イレイジャーコーディングスキーム(すなわち、n=8及びk=3)は、8個のデータブロックを11個のデータ/パリティブロックに変換する。そして、読み取り要求に応答して、11個のブロックのうちの任意の8個からデータが再構築され得る。
一実施形態では、ブロックサービスは、イレイジャーコード化すべきデータブロックを選択し得る。そして、一群のデータブロックを共にグループ化して、イレイジャーコーディング(EC)グループが形成され得る。この技術によれば、書き込みグループのメンバーシップはビングループを変化させることにより、例えば、ビン識別子内のビットのサブセット(例えば、16ビット識別子の上位14ビット)を変化させることに基づく割り当てによりガイドされる。スライスサービスは、(例えば、異なるビングループを有する)異なるビンのデータブロック及びレプリカを、それらの関連するブロックサービスにルーティングする。実施は、展開のために選択されたECスキーム(例えば、4+2ECと呼ばれる、4つのデータブロック+訂正のための2つの符号化されたブロック)によって異なる。ブロックサービスは、それらが割り当てられたビンに従って(すなわち、各ブロックの暗号学的ハッシュに従ったビン割り当てテーブルに基づいて)データブロックをまとめて、展開されたECスキームに基づいて複数の異なるビンを共にグループ化(すなわち、書き込みグループを形成)し得る。例えば、4+2ECスキームで4つのビンがグループ化され(すなわち、4つの符号化されていないデータブロック+訂正情報を有する2つの符号化されたブロック)、8+1ECスキームで8つのビンが共にグループ化され得る。異なるビンからのブロックの書き込みグループは、ビンに従って一時的にスプールされたデータブロックから選択され得る。すなわち、書き込みグループの異なるビンのデータブロックは、ビン単位で一時的にスプールされたブロックのプールからビンに従って選択され(すなわち、選ばれ)、データ損失に対して耐性を有する異なる故障ドメインの広範なビンを表す。なお、データブロック(すなわち、符号化されていないブロック)だけビンに割り当てる必要があるのに対して、符号化されたブロックは、書き込みグループのデータブロックの参照により、単に書き込みグループに関連付けられ得る。とりわけ、複製は、スライスサービスがブロックサービスにデータブロック及びそれらの複製をルーティングすることによって実質的に行われるのに対して、ブロックサービスは、符号化(例えば、パリティ)されたブロックを有する書き込みグループをまとめることにより、スライスサービスから受信したデータブロックをイレイジャーコーディングされ得る。
例示として、ビンは、イレイジャーコーディングプロセスを合理化するやり方でビングループに割り当てられる。本明細書で用いられるように、ビングループは、イレイジャーコーディングを用いたデータ保護のためにデータブロックを選択すべきビンを特定する。例えば、各ビンの3つのレプリカバージョン(オリジナルレプリカ0、一次レプリカ1及び二次レプリカ2)が生成される三重複製データ保護の場合、ビンのオリジナルレプリカ0のバージョンが複数の異なるブロックサービスにわたって割り当てられ、ビンの一次レプリカ1のバージョンが異なるブロックサービスに割り当てられ、二次レプリカ2のバージョンがさらに別の異なるブロックサービスに割り当てられるようにビングループ内のビンが割り当てられる。データブロックは、選択されたイレイジャーコーディング展開のために十分な数のブロックが利用可能になるまで、複製ベースのデータ保護スキームに従ってビンに記憶され得る。
異なるブロックサービスのうちのマスターレプリカとして機能する1つ(マスターレプリカブロックサービス)はイレイジャーコーディングプロセスを調整し、各ビン(すなわち、書き込みグループ)からイレイジャーコーディングの候補となるデータブロックを選択する。マスターレプリカブロックサービスはデータブロックと書き込みグループを形成し、1つ以上の符号化された訂正(すなわち、パリティ)ブロック(例えば、一次及び二次パリティブロック)を生成する。符号化されたパリティブロックは、符号化されたブロックを生成するために用いられる各データブロックのためのブロック識別子と共に記憶される(すなわち、各パリティブロックは、それぞれのパリティブロックを生成するために用いられるデータブロックへの参照を含む)。マスターレプリカブロックサービスは、ストレージデバイス上の符号化されたデータブロック(例えば、一次及び二次パリティブロック)の位置を向くように(すなわち、参照するように)データブロックの符号化されていないコピーのためのそのメタデータマッピングを更新し、データブロックに対する任意の読み取り要求が符号化されたブロックを返すことができる。符号化されたブロックのマッピングを記憶及び更新した後、マスターレプリカブロックサービスは、書き込みグループ内のデータブロックの符号化されていないコピーによって占有されていた領域を解放し得る。
図6及び図7は、データブロックのイレイジャーコーディングに関するデータ保護スキームのための例示のワークフローを示す。なお、ワークフローには、動作のステージを表す一連の文字A~Gを付す。ステージはワークフローのために順序付けられているものの、開示の理解を助けるための一例を示すものであり、特許請求の範囲を限定するために用いられるべきではない。特許請求の範囲に含まれる主題は、順序及び動作の一部に関して変化し得る。
図6のワークフロー600を参照して、ブロックサービス610~660は、クラスタ100の自身のストレージノード200上でそれぞれ実行してもよいし、全てが同じノード上で実行してもよいし又はこれらの任意の組み合わせであってもよい。ブロックサービス610、ブロックサービス620、ブロックサービス630及びブロックサービス640は、ビンがそれらに対応するブロックサービスに割り当てられ且つ管理されるようにビン0、ビン1、ビン2、及びビン3(「ビン」と総称する)をそれぞれ維持(「ホスト」)する。なお、各ブロックサービスには追加のビンがさらに割り当てられ、それらを管理し得る。
ステージAで、ブロックサービス650は、ビングループを指定するビングループ割り当て605を受信する。ビングループ割り当ては、クラスタ内でブロックを分散するのに用いられる暗号学的ハッシュから計算されたブロックIDのビットのサブセットに基づき得る。例えば、ブロックIDの下位ビットnは、ECスキームで用いられる複数の2n入力データブロックに従って用いられ得る。すなわち、ビングループ内のビンの数は、イレイジャーコーディングスキームのための複数の入力データブロックに対応し、例えば、(ワークフロー600に記載の)4+2ECスキームは4つのビンを用いる。そのため、ビングループ割り当て605は、ビン0、ビン1、ビン2及びビン3という4つのビン(例えば、22=4のデータブロックとして、ブロックIDの下位2ビット)を指定する。ビングループ割り当て605は、一次(マスター)レプリカブロックサービス650及び二次レプリカブロックサービス660が各ビンについてレプリカを記憶ように指定する。割り当て「650:1」及び「660:2」により示されるように、レプリカ1をホスティングするブロックサービスは、ビングループ内の各ビンのためにマスターブロックサービス650と指定され、二次レプリカブロックサービス660は、ビングループ内の各ビンのためにレプリカ2をホストする。ビングループ割り当て605はクラスター100のマスター/マネージャー(「クラスターマスター/マネージャー」)又はビン割り当てを取り扱う他のサービス(図示せず)により生成され得る。
クラスタ100は、クラスタ100によってサポートされるデータ保護スキームに応じて各ビンの複数のバージョン又はコピーを含み得る。例えば、三重複製及び4+2イレイジャーコーディングスキームの場合、クラスタ100は様々なブロックサービスによってホストされるレプリカ0、レプリカ1及びレプリカ2と呼ばれる各ビンの3つのバージョンを含む。イレイジャーコーディングに基づく保護スキームをサポートするために、ビン割り当てサービスは、(i)ビングループのために選択されたビンの各オリジナルレプリカ0のバージョンが異なるブロックサービスに割り当てられる(例えば、ビン0~3がブロックサービス610~640にわたって割り当てられる)こと、(ii)ビンの一次レプリカ1のバージョンが同じブロックサービスに割り当てられる(例えば、レプリカ1の全てがマスターレプリカブロックサービス650に割り当てられる)こと及び(iii)ビンの二次レプリカ2のバージョンが同じブロックサービスに割り当てられる(例えば、レプリカ2の全てが二次レプリカブロックサービス660に割り当てられる)ことを確実にする。
ビン割り当てサービスは、ビンが異なる障害ドメインにわたって位置するようにビンを割り当ててもよい。例えば、各ビンは、異なるソリッドステートドライブ(SSD)、異なるストレージノード及び/又は異なるシャーシに割り当てられてられるか又はそれらから選択され得る。さらに、ビン割り当てサービスは、ストレージデバイスが同じビングループ(すなわち、書き込みグループ)から1つのブロックしか記憶しないことを確実にするために、ブロックサービスホストが同じのビンのためのブロックのレプリカをホストしないよう確実にし得る。ビン割り当てサービスは、一次レプリカブロックサービス650及び二次レプリカブロックサービス660を含む全てのブロックサービスにビングループ割り当て605が利用可能になるようにする。上述したように、ブロックサービス650は一次符号化レプリカをホストするため、イレイジャーコーディングプロセスを調整するためにビングループ割り当て605を用いるマスターレプリカブロックサービス650として機能するのに対して、ブロックサービス660は二次符号化レプリカをホストし、二次レプリカブロックサービス660として機能する。
ステージBでは、データブロックA~Dは、データブロックのレプリカ0コピーのためのビンをホストするブロックサービス(例えば、それぞれビン0、ビン1、ビン2、ビン3をホスト)にフラッシュ(「書き込み」)される。例えば、ブロックAは第1のボリュームからのデータの一部であり、ブロックBは第2のボリュームからのデータであり得る。加えて、データブロックは、記憶される前に圧縮又は暗号化され得る。データブロックは、ブロックサービスのそれぞれに割り当てられたビンにわたって記憶される。上述したように、データブロックは、ブロックID506のビンフィールド508の「先頭」ビットに基づいて、(ビン番号により特定される)ビンに割り当てられ且つ記憶され得る。例えば、ブロックAは、ビンフィールド508内の先頭ビット0を有するビン番号に基づいてビン0に割り当てられ得る。
重複排除の結果、データブロックは、複製及び/又はイレイジャーコーディングスキーム等の異なるデータ保護スキームを有する複数ボリュームにより用いられるデータを含むことができる。この技術によれば、各データブロックは、データブロックを用いるボリュームのうちの任意の1つにより設定される最高レベルの保護スキーム(すなわち、要求される最高の故障耐性(highest required failure tolerance))で保護される。図6のワークフロー600では、各データブロックは、4+2イレイジャーコーディングスキームで構成された少なくとも1つのボリュームに属する。
ステージC及びDで、データブロックは、レプリカブロックサービス650及び660によりホストされるビンのレプリカに書き込まれる。ワークフロー600のステージは、各ブロックがブロックサービスに書き込まれるか又はフラッシュされる順序を概して示すが、ステージB及びCは並行して起こり得る。しかしながら、ステージDは、データブロックがブロックサービス650で受信された場合に、データブロックが他のブロックサービスによって正常に記憶されることマスタレプリカブロックサービス650が確実にできるように、ステージB及びCの後に起こる。例えば、ブロックAは先ずブロックサービス610にフラッシュされ、ステージBでビン0に書き込まれ、ステージCでは、ブロックAは、二次レプリカブロックサービス660によってビン0の二次レプリカに書き込まれる。最後に、ステージDで、ブロックAは、マスターレプリカブロックサービス650によりビン0のマスターレプリカに書き込まれる。データブロックのそれぞれはこの順番で書き込まれることが好ましい。ブロックサービス650は、イレイジャーコーディングプロセスを調整するように構成されたマスターレプリカブロックサービスであるため、ブロックサービス650がイレイジャーコーディングプロセスを開始する前に、データブロックが全てのブロックサービスにわたって完全に複製されることを確実にするために、データブロックは最後にマスターレプリカブロックサービス650に書き込まれる。データブロックが受信され、ビングループの各ビンから利用可能になると、マスターレプリカブロックサービス650は、図7に記載されるようにイレイジャーコーディングプロセスを開始できる。
しかしながら、一部の実施形態では、イレイジャーコーディングの前に、ステージC及びDでレプリカブロックサービス650及び660にデータブロックを書き込むことは必要でない。例えば、マスターレプリカブロックサービス650は、データブロックが最初に複製されることなく、ブロックサービス610~640からデータブロックを読み取って図6に示すように符号化されたブロックを生成し得る。しかしながら、イレイジャーコーディングの前にデータブロックを書き込むことは、イレイジャーコーディングプロセスが保留中である間に、設定されたボリューム(データ)保護スキーム又はデータ保護に関連するサービスレベルアグリーメント(SLA)が満たされることが確実になる。上述したように、データブロックは異なる時に書き込まれ得る。例えば、ブロックAが書き込まれる時間とブロックDが書き込まれる時間との間で有意な時間が経過し得る。したがって、ブロックA及び他のデータブロックが、ボリュームのデータ保護スキーム又はSLAによって要求されるように、2つの故障を許容できることが確実になるように、データブロックは3重に重複され、イレイジャーコーディングプロセスが完了するまで3重に重複されたまま留まる。
図7のワークフロー700は、ワークフロー600(図6)の続きであり、符号化されたブロックの生成及び記憶を示す。ステージEで、マスターレプリカブロックサービス650は、データブロックA、B、C、及びDを有する書き込みグループを特定及び形成する。書き込みグループを形成する場合、マスターレプリカブロックサービス650は、ビングループ割り当て605で特定される各ビンから1つのブロックを選択する。ブロックは、同様のサイズのブロックを選択すること等、様々なヒューリスティクスに従って選択され得る。
ステージFで、マスターレプリカブロックサービス650は符号化されたパリティブロックPを生成してそれ自身の記憶装置に、例えばBSD内に記憶し、符号化されたパリティブロックQを生成し、符号化されたブロックQと共に書き込みコマンドを二次レプリカブロックサービス660に送信してそれ自身のBSDに記憶させる。マスターレプリカブロックサービス650は、データブロックA、B、C及びDのそのレプリカを読み取り、イレイジャーコーディングアルゴリズムを用いてそれらを処理して、符号化されたパリティブロックP及び符号化されたパリティブロックQを生成する。一部の場合では、イレイジャーコーディングスキームのために十分なブロックがない場合、例えば、3つのブロックしか利用可能でない場合、マスターレプリカブロックサービス650は、実際のデータブロックの代替として0又は1のブロックを用いるように構成できる。マスターレプリカブロックサービス650は、データブロックが閾値となる期間の間符号化されていない場合又は前に符号化され削除されたブロックを置換するために上記のように構成され得る。
一部の実施では、符号化されたパリティブロックQを生成する代わりに、マスターレプリカブロックサービス650は、書き込みグループ内のデータブロックのためのブロック識別子(ブロックID)を第2のレプリカブロックサービス660に送信し、第2のレプリカブロックサービス660が符号化されたパリティブロックQを生成する。例示として、データブロックA、B、C及びDのそれぞれのためのブロックIDと共に符号化されたパリティブロックが記憶される。例えば、ブロックIDが符号化されたパリティブロックに付加されるか又は先頭に付加され得る。マスターレプリカブロックサービス650は、データブロックA、B、C及びDのための例えば、各マップフラグメントのメタデータエントリをデータブロックのための既存の位置マッピングに加えて、ブロックサービス650のBSD上の符号化されたパリティブロックPを指し示すマッピングを用いて更新する。二次レプリカブロックサービス660は、ブロックサービス660のBSD上の符号化されたパリティブロックQの位置を含むようにデータブロックのためのそのマッピングを同様に更新する。
一実施形態では、一部のイレイジャーコーディングアルゴリズムは、ブロックが同じサイズであることを必要とする。データブロックのいずれかのサイズが異なる場合、データブロックは最大データブロックのサイズまで最大でパディングされるか又はビット(0又は1)が埋め込まれ得る。各データブロックの元の長さは、符号化されたパリティブロックP及び符号化されたパリティブロックQと共に記憶されるため、データブロックに加えられたパディングを復号の後に取り除くことができる。加えて、データブロックは、異なる圧縮アルゴリズムを用いて圧縮され得る。データブロックに対して用いられる圧縮アルゴリズムは、バックグラウンド再圧縮(background recompression)等の記憶最適化が行われるのにつれて変化し得る。符号化されたパリティブロックが作成された時にデータブロックに適用される圧縮アルゴリズムも、符号化されたブロックと共に記憶される。復号化処理の間、元の圧縮アルゴリズム(すなわち、符号化時に適用されるアルゴリズム)は、復号化処理で用いられる符号化されていないデータブロックの現在の圧縮アルゴリズムと比較される。圧縮アルゴリズムが一致しない場合、データブロックは伸長され、その後に復号化の前の元の圧縮アルゴリズムを用いて再圧縮される。
符号化されたパリティブロックP及びQが作成されているため、データブロックA、B、C及びDは4+2イレイジャーコーディングスキームで保護され、2つの故障の後でも読み取ることができる。その結果、記憶領域を解放することができるためにデータブロックの符号化されていないコピーを削除され得る。したがって、ステージGで、マスターレプリカブロックサービス650は、データブロックA、B、C及びDの符号化されていないコピーを非アクティブとしてマークし、それらのマークされたデータブロックのコピーをその記憶装置(BSD)から削除する。同様に、二次レプリカブロックサービス660は、データブロックA、B、C及びDを(非アクティブとして)マークし、その後にそれらのマークしたデータブロックのコード化されていないコピーをその記憶装置(BSD)から削除する。データブロックの削除は、ブロックのためのブロック識別子をメタデータから削除すること又はデータブロックにより消費される記憶領域をフリーとして示すことを含み得る。
一部の実施では、レプリカブロックサービス650及び660は、データブロックA、B、C及びDの符号化されていないコピーを残し、データブロックA、B、C及びDのそれぞれのために2つ(又は3つ)のマッピングを含むようメタデータを更新し得る。一般に、メタデータは、所定のブロック識別子のための複数のエントリを有し、そのエントリは、所定の要求に対して最適な結果を返すことができるようにメタデータの同じ領域(例えば、マップフラグメント)で例示的に維持される。場合によっては、データブロックの符号化されていないコピーを用いた方がリクエストに良好に応えることができる場合がある一方、他のリクエストはブロックの符号化されたパリティコピーを必要とし得る。そのような実施では、ガーベジコレクション及び/又はリサイクル処理が実行されるまで、符号化されていないデータブロックは(読み取り動作を介して)読み出しのために利用可能な状態で留まる。ガーベジコレクション及び/又はリサイクルプロセスは、記憶領域が必要な場合にデータブロックを削除し得る。一部の場合では、ガーベジコレクション及び/又はリサイクルプロセスは、記憶領域を取り戻す必要がないと判断し、データブロックを記憶されたままにし得る。
上述したものと同様の動作を異なるイレイジャーコーディングスキームのために利用できる。本明細書に記載のワークフロー600及び700では4+2イレイジャーコーディングスキームが利用されるため、4つのビン及び各ビンの2つのレプリカ(すなわち、データブロックの3つの全コピー)を含むビングループが生成される。すなわち、EC及び複製符号化データ冗長スキームとの間で一貫したレベルの冗長性を維持するために、ECスキームの符号化された(すなわち、訂正)ブロックの数に等しい数の複製が用いられる。
図8は、ストレージサービス300におけるデータブロック(ブロック800)の記憶及びイレイジャーコーディングのための方法の動作を示すフローチャートである。大まかに言うと、この動作はイレイジャーコーディングのためにデータブロックを記憶及び選択ことに加えて、符号化されたパリティブロックを生成するための動作及びデータブロックの符号化されていないコピーにより以前占有されていた記憶領域の解放を可能にする記帳(bookkeeping)動作に関する。ブロック802で、ストレージサービスは、本明細書で記載したように、選択されたイレイジャーコーディングスキームが合理化されるようなやり方でビングループ割り当てを生成、すなわち、ビングループにビンを割り当てる。異なるビンからのブロックのビングループは、一時的にスプールされたブロックのプールのデータブロックから選択され得る。すなわち、ビングループの異なるビンのデータブロックは、ビン単位で一時的にスプールされたブロックのプールからビンに従って選択され得る。とりわけ、データブロック(すなわち、符号化されていないブロック)だけビンに割り当てる必要があるのに対して、符号化されたブロックは書き込みグループのデータブロックへの参照により単に書き込みグループに関連付けられ得る。
ブロック804で、各(符号化されていない)データブロックは、ビングループ割り当てに従って記憶され、判定ブロック806で、イレイジャーコーディングのために十分な数のデータブロックが利用可能であるかどうか判定される。イレイジャーコーディングスキームのために十分なデータブロックが存在しないと判定された場合、ストレージサービス(例えば、ブロックサービス)は、実際のデータブロックの代替として0又は1のデータブロックを作成し、その代替ブロックをビングループ割り当てに従って記憶する(ブロック804)。さもなければ、ブロック808で、選択されたイレイジャーコーディングスキームに従って十分な数のデータブロックを有する書き込みグループが形成される。ブロック810で、書き込みグループ内の(符号化されていない)データブロックに基づいて符号化されたパリティブロックが生成され、ブロック812で、符号化されたパリティブロックが割り当てられた(レプリカ)ブロックサービスに記憶され、適切なメタデータマッピングが更新される。ブロック814で、書き込みグループ内のデータブロックの(符号化されていない)コピーが非アクティブとしてマークされ、その後に、記憶領域を解放するために必要に応じて削除される。この方法はブロック816で終了する。さらに、データブロックが不活動(inaction)に、例えば削除された場合、削除されたデータブロックと同じビンに割り当てられた別のデータブロックが代替として割り当てられ、各レプリカブロックサービスのメタデータマッピングが置き換えられたブロックを参照するように更新され、適切なパリティブロックが再計算され得る。代替ブロックは一時的にスプールされたブロックのプールから選択され得る。
図9は、ストレージサービス300のイレイジャーコーディングスキーム(ブロック900)においてデータブロックを読み取るための方法の動作を示すフローチャートである。大まかに言うと、動作は、イレイジャーコーディングスキームにより保護されているデータブロックを読み取ることに加えて、書き込みグループ内の他のデータブロック及び1つ以上のイレイジャーコーディングされたブロックを用いてデータブロックを再作成することに関する。図9は、ターゲットブロックを読み出すために、劣化した読み取り、例えば、レプリカ0のために記憶されたデータブロックがもはや利用可能でない場合の読み取り動作で取られる方法ステップも示す。この動作は、ターゲットブロックの符号化されていないバージョンの有無のために、他のブロックサービス、例えば、ビンのレプリカ1及びレプリカ2のバージョンをホストする一次及び二次ブロックサービスを確認すること及びターゲットブロックの符号化されたコピーを復号化する目的で、書き込みグループ内の他のデータブロックを読み取ることを含むことができる。
ブロック902で、第1のデータブロックの符号化されていないコピーをホストするブロックサービスに読み取り要求が送信される。判定ブロック904で、ブロックサービスが第1のデータブロックを返したしたかどうか判定される。そうである場合は、読み取り要求に応答して第1のデータブロックが供給され(ブロック920)、その方法はブロック922で終了する。さもなければ、第1のデータブロックのための一次レプリカをホストするマスターレプリカブロックサービスに読み取り要求が送信される(ブロック906)。判定ブロック908で、マスターレプリカブロックサービスが第1のデータブロック又は第1のブロックの符号化されたパリティバージョンを返したかどうか判定される。第1のデータブロックが返された場合、読み取り要求に応答してデータブロックが供給され(ブロック920)、方法はブロック922で終了する。さもなければ、データブロックをイレイジャーコーディング(ブロック910)するために用いられるデータブロックのためにブロック識別子が読み取られ、ブロック912で、特定されたデータブロック及び第1のデータブロックのための二次レプリカをホストするブロックサービスに対して読み取り要求が発行される。判定ブロック914で、いずれかのブロックサービスが第1のデータブロックを返したかどうかを判定し、返している場合には、応答としてそのブロックがブロック920で提供される。さもなければ、返されたブロックの圧縮は、符号化されたパリティブロックにおいて特定される適切な圧縮アルゴリズムに合致するように(必要に応じて)変更され(ブロック916)、第1のデータブロックは、返されたブロックを用いて復号される(ブロック918)。そして、第1のデータブロックが応答として供給され(ブロック920)、本方法はブロック922で終了する。
前述の説明は特定の実施形態に関するものである。しかしながら、説明した実施形態に、それらの利点の一部又は全部の実現を伴って他の変更及び修正が加えられ得ることは明らかであろう。例えば、本明細書に記載のコンポーネント及び/又は要素は、コンピュータ、ハードウェア、ファームウェア又はそれらの組み合わせ上で実行されるプログラム命令を有する有形の(非一時的な)コンピュータ読み取り可能媒体(例えば、ディスク、電子メモリ及び/又はCD)上に符号化されたソフトウェアとして実施できることが明確に企図される。したがって、本説明は一例にすぎず、本明細書の実施形態の範囲を限定するものではない。したがって、添付の特許請求の範囲の目的は、本明細書の実施形態の真の精神及び範囲内にある全てのそのような変更及び修正をカバーすることである。
Claims (20)
- クラスタ内のストレージノードの一連のブロックサービスにわたって記憶された一群のデータブロックを選択するステップであって、前記クラスタにわたって前記ブロックサービスにビンが割り当てられ、前記一群のデータブロックのそれぞれは、前記データブロックのそれぞれの内容から計算されるブロック識別子(ブロックID)のフィールドに基づいて対応するビンに割り当てられ、前記一群のデータブロックのそれぞれは、前記一連のブロックサービスにわたって少なくとも1回複製されている、ステップと、
前記一群のデータブロックに基づいて第1の符号化されたパリティブロックを生成するステップと、
前記第1の符号化されたパリティブロックを第1のブロックサービス上に記憶するステップであって、前記第1の符号化されたパリティブロックは符号化されたレプリカとして示されている、ステップと、
前記一群のデータブロックのそれぞれの少なくとも1つの複製を削除のためにマークするステップと、
を含む方法。 - 前記第1の符号化されたパリティブロックの場所への参照を前記第1のブロックサービスにより維持するステップをさらに含む、請求項1に記載の方法。
- 前記第1の符号化されたパリティブロックと共に前記一群のデータブロック内の前記データブロックのそれぞれのためのブロックIDを記憶するステップをさらに含む、請求項1に記載の方法。
- 前記一群のデータブロックのうちの第1のデータブロックを読み取れないと判定するステップと、
前記符号化されたパリティブロック及び前記一群のデータブロックのうちの残りの読み取り可能なデータブロックから前記第1のデータブロックを復号化するステップと、
をさらに含む、請求項1に記載の方法。 - 前記一群のデータブロックに基づいて前記第1の符号化されたパリティブロックを生成するステップは、
前記一群のデータブロックのサイズに合致するように第1のデータブロックをパディングすることをさらに含む、請求項1に記載の方法。 - 前記一群のデータブロックのそれぞれに関連するブロックサービスの識別子(BSID)を有するとともに、前記一群のデータブロックの少なくとも1つの複製のそれぞれに関連する識別子を有するテーブルを維持するステップをさらに含む、請求項1に記載の方法。
- 前記一群のデータブロックのブロックIDを第2のブロックサービスに送信するステップと、
前記ブロックIDに基づいて、前記第2のブロックサービスにより第2の符号化されたパリティブロックを生成するステップと、
前記第2のブロックサービス上に前記第2の符号化されたパリティブロックを記憶するステップと、
をさらに含む、請求項1に記載の方法。 - 前記一連のブロックサービスにわたって記憶された一群のデータブロックを選択するステップは、一時的にスプールされたデータブロックのプールから前記一群のデータブロックを選択することをさらに含む、請求項1に記載の方法。
- 前記一群のデータブロックのうちの第1のデータブロックが削除のためにマークされていると判定するステップと、
前記第1のデータブロックのための代替データブロックを一時的にスプールされたデータブロックのプールから選択するステップであって、該代替データブロックは前記第1のデータブロックと同じビン識別子に関連し、該同じビン識別子は前記データブロックのそれぞれのブロックIDのフィールドから決定される、ステップと、
をさらに含む、請求項1に記載の方法。 - 前記第1のブロックサービスは、前記一群のデータブロックの各ブロックの少なくとも1つの複製を含む、請求項1に記載の方法。
- それぞれが1つ以上のストレージデバイスに連結されるノードのクラスタを含むシステムであって、前記クラスタの各ノードはプロセッサ及びメモリを含み、該メモリは、
前記ノードの一連のブロックサービスにわたって記憶された一群のデータブロックを選択するように構成されたプログラム命令であって、前記クラスタにわたって前記ブロックサービスにビンが割り当てられ、前記一群のデータブロックのそれぞれは、前記データブロックのそれぞれの内容から計算されるブロック識別子(ブロックID)のフィールドに基づいて対応するビンに割り当てられ、前記一群のデータブロックのそれぞれは、前記一連のブロックサービスにわたって少なくとも1回複製されている、プログラム命令と、
前記一群のデータブロックに基づいて第1の符号化されたパリティブロックを生成するように構成されたブログラム命令と、
前記第1の符号化されたパリティブロックを第1のブロックサービス上に記憶するように構成されたプログラム命令であって、前記第1の符号化されたパリティブロックは符号化されたレプリカとして示される、プログラム命令と、
前記一群のデータブロックのそれぞれの少なくとも1つの複製を削除のためにマークするように構成されたプログラム命令と、
を含む、システム。 - プログラム命令を有する前記メモリは、前記第1の符号化されたパリティブロックの場所への参照を前記第1のブロックサービスにより維持するように構成されたプログラム命令をさらに含む、請求項11に記載のシステム。
- 前記第1の符号化されたパリティブロックと共に前記一群のデータブロック内の前記データブロックのそれぞれのためのブロックIDを記憶するように構成されたプログラム命令をさらに含む、請求項11に記載のシステム。
- プログラム命令を有する前記メモリは、
前記一群のデータブロックのうちの第1のデータブロックを読み取れないと判定するように構成されたプログラム命令と、
前記符号化されたパリティブロック及び前記一群のデータブロックのうちの残りの読み取り可能なデータブロックから前記第1のデータブロックを復号化するように構成されたプログラム命令と、
をさらに含む、請求項11に記載のシステム。 - 前記一群のデータブロックに基づいて前記第1の符号化されたパリティブロックを生成するように構成されたプログラム命令を有する前記メモリは、前記一群のデータブロックのサイズに合致するように第1のデータブロックをパディングするように構成されたプログラム命令をさらに含む、請求項11に記載のシステム。
- プログラム命令を有する前記メモリは、前記一群のデータブロックのそれぞれに関連するブロックサービスの識別子(BSID)を有するとともに、前記一群のデータブロックの少なくとも1つの複製のそれぞれに関連する識別子を有するテーブルを維持するように構成されたプログラム命令をさらに含む、請求項11に記載のシステム。
- プログラム命令を有する前記メモリは、
前記一群のデータブロックのブロックIDを第2のブロックサービスに送信するように構成されたプログラム命令と、
前記ブロックIDに基づいて、前記第2のブロックサービスにより第2の符号化されたパリティブロックを生成するように構成されたプログラム命令と、
前記第2のブロックサービス上に前記第2の符号化されたパリティブロックを記憶するように構成されたプログラム命令と、
をさらに含む、請求項11に記載のシステム。 - 一連のブロックサービスにわたって記憶された一群のデータブロックを選択するように構成されたプログラム命令を有する前記メモリは、一時的にスプールされたデータブロックのプールから前記一群のデータブロックを選択するように構成されたプログラム命令を含む、請求項11に記載のシステム。
- 前記第1のブロックサービスは、前記一群のデータブロックの各ブロックの少なくとも1つの複製を含む、請求項11に記載のシステム。
- 1つ以上のプロセッサ上にプログラム命令を含む非一時的なコンピュータ読み取り可能媒体であって、該プログラム命令は
クラスタ内のストレージノードの一連のブロックサービスにわたって記憶された一群のデータブロックを選択することであって、前記クラスタにわたって前記ブロックサービスにビンが割り当てられ、前記一群のデータブロックのそれぞれは、前記データブロックのそれぞれの内容から計算されるブロック識別子(ブロックID)のフィールドに基づいて対応するビンに割り当てられ、前記一群のデータブロックのそれぞれは、前記一連のブロックサービスにわたって少なくとも1回複製されている、ことと、
前記一群のデータブロックに基づいて第1の符号化されたパリティブロックを生成することと、
前記第1の符号化されたパリティブロックを第1のブロックサービス上に記憶することであって、前記第1の符号化されたパリティブロックは符号化されたレプリカとして示されている、ことと、
前記一群のデータブロックのそれぞれの少なくとも1つの複製を削除のためにマークすることと、
を行うように構成されている、非一時的なコンピュータ読み取り可能媒体。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862745538P | 2018-10-15 | 2018-10-15 | |
US62/745,538 | 2018-10-15 | ||
US16/545,992 US20200117362A1 (en) | 2018-10-15 | 2019-08-20 | Erasure coding content driven distribution of data blocks |
US16/545,992 | 2019-08-20 | ||
PCT/US2019/056200 WO2020081491A1 (en) | 2018-10-15 | 2019-10-15 | Erasure coding content driven distribution of data blocks |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022504790A true JP2022504790A (ja) | 2022-01-13 |
Family
ID=70162342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021520165A Pending JP2022504790A (ja) | 2018-10-15 | 2019-10-15 | データブロックのイレイジャーコーディングコンテンツ主導分散 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20200117362A1 (ja) |
EP (1) | EP3867758A1 (ja) |
JP (1) | JP2022504790A (ja) |
CN (1) | CN112889034A (ja) |
WO (1) | WO2020081491A1 (ja) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SG11202002712UA (en) * | 2019-09-11 | 2020-04-29 | Alibaba Group Holding Ltd | Shared blockchain data storage based on error correction coding in trusted execution environments |
US11269745B2 (en) * | 2019-10-29 | 2022-03-08 | International Business Machines Corporation | Two-node high availability storage system |
FR3103070B1 (fr) * | 2019-11-13 | 2024-03-22 | Univ Grenoble Alpes | Procédé de synchronisation d’un système de communication basé sur la retransmission de données |
US11171666B2 (en) * | 2019-11-26 | 2021-11-09 | Paul Joseph Nowoczynski | Method for efficient erasure coded group management in shared nothing storage clusters |
CN111930711B (zh) * | 2020-09-10 | 2020-12-29 | 北京志翔科技股份有限公司 | 分布式文件系统集群增加节点的方法、装置及设备 |
US11561856B2 (en) | 2020-12-10 | 2023-01-24 | Nutanix, Inc. | Erasure coding of replicated data blocks |
US20220391359A1 (en) * | 2021-06-07 | 2022-12-08 | Netapp, Inc. | Distributed File System that Provides Scalability and Resiliency |
CN113543067B (zh) * | 2021-06-07 | 2023-10-20 | 北京邮电大学 | 一种基于车载网络的数据下发方法及装置 |
US11868656B2 (en) | 2021-06-07 | 2024-01-09 | Netapp, Inc. | Distributed file system with disaggregated data management and storage management layers |
US11960452B2 (en) * | 2021-06-23 | 2024-04-16 | Nutanix, Inc. | Independent encoding and transformation of related data replicas and localized background data management in a distributed file system |
US11835990B2 (en) | 2021-11-16 | 2023-12-05 | Netapp, Inc. | Use of cluster-level redundancy within a cluster of a distributed storage management system to address node-level errors |
CN114218018B (zh) * | 2022-02-18 | 2022-05-27 | 深圳佰维存储科技股份有限公司 | 系统数据保护方法、装置、可读存储介质及电子设备 |
US11949431B1 (en) * | 2022-12-29 | 2024-04-02 | Code-X, Inc. | Obfuscating data in distributed data storage systems and network communications |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8713405B2 (en) * | 2011-11-22 | 2014-04-29 | Simplivity Corporation | Method and apparatus for allocating erasure coded data to disk storage |
US8799746B2 (en) * | 2012-06-13 | 2014-08-05 | Caringo, Inc. | Erasure coding and replication in storage clusters |
US9378084B2 (en) * | 2013-06-25 | 2016-06-28 | Microsoft Technology Licensing, Llc | Erasure coding across multiple zones |
GB2519815A (en) * | 2013-10-31 | 2015-05-06 | Ibm | Writing data cross storage devices in an erasure-coded system |
US20160253114A1 (en) * | 2013-11-14 | 2016-09-01 | Hitachi, Ltd. | Method and apparatus for optimizing data storage in heterogeneous environment |
AU2015269370B2 (en) * | 2014-06-04 | 2019-06-06 | Pure Storage, Inc. | Automatically reconfiguring a storage memory topology |
US9697079B2 (en) * | 2015-07-13 | 2017-07-04 | International Business Machines Corporation | Protecting data integrity in de-duplicated storage environments in combination with software defined native raid |
-
2019
- 2019-08-20 US US16/545,992 patent/US20200117362A1/en not_active Abandoned
- 2019-10-15 EP EP19797513.9A patent/EP3867758A1/en active Pending
- 2019-10-15 JP JP2021520165A patent/JP2022504790A/ja active Pending
- 2019-10-15 CN CN201980067852.3A patent/CN112889034A/zh active Pending
- 2019-10-15 WO PCT/US2019/056200 patent/WO2020081491A1/en unknown
Also Published As
Publication number | Publication date |
---|---|
EP3867758A1 (en) | 2021-08-25 |
CN112889034A (zh) | 2021-06-01 |
WO2020081491A1 (en) | 2020-04-23 |
US20200117362A1 (en) | 2020-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2022504790A (ja) | データブロックのイレイジャーコーディングコンテンツ主導分散 | |
US11461015B2 (en) | Available storage space in a system with varying data redundancy schemes | |
US11093324B2 (en) | Dynamic data verification and recovery in a storage system | |
CN106708425B (zh) | 分布式多模存储管理 | |
US11010078B2 (en) | Inline deduplication | |
KR101769883B1 (ko) | 저장부 할당 장치, 시스템, 및 방법 | |
US20170308437A1 (en) | Parity protection for data chunks in an object storage system | |
WO2017119091A1 (ja) | 分散型ストレージシステム、データ格納方法、およびソフトウェアプログラム | |
US20150058583A1 (en) | System and method for improved placement of blocks in a deduplication-erasure code environment | |
US20210334241A1 (en) | Non-disrputive transitioning between replication schemes | |
US11175989B1 (en) | Pooling blocks for erasure coding write groups | |
US20200319986A1 (en) | Systems and methods for sequential resilvering | |
JP6653370B2 (ja) | ストレージシステム | |
US11514181B2 (en) | Bin syncing technique for multiple data protection schemes | |
US20090150460A1 (en) | Migration in a distributed file system | |
US11194501B2 (en) | Standby copies withstand cascading fails | |
US11216204B2 (en) | Degraded redundant metadata, DRuM, technique | |
US11223681B2 (en) | Updating no sync technique for ensuring continuous storage service in event of degraded cluster state | |
US11379383B2 (en) | Data encryption in a two-tier storage system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20220927 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20231031 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20231121 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20240221 |