JP7137612B2 - 分散型ストレージシステム、データ復旧方法、及びデータ処理プログラム - Google Patents

分散型ストレージシステム、データ復旧方法、及びデータ処理プログラム Download PDF

Info

Publication number
JP7137612B2
JP7137612B2 JP2020215659A JP2020215659A JP7137612B2 JP 7137612 B2 JP7137612 B2 JP 7137612B2 JP 2020215659 A JP2020215659 A JP 2020215659A JP 2020215659 A JP2020215659 A JP 2020215659A JP 7137612 B2 JP7137612 B2 JP 7137612B2
Authority
JP
Japan
Prior art keywords
data
node
read request
nodes
redundancy code
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.)
Active
Application number
JP2020215659A
Other languages
English (en)
Other versions
JP2022101208A (ja
Inventor
和希 水上
裕章 宮田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2020215659A priority Critical patent/JP7137612B2/ja
Priority to US17/471,332 priority patent/US11640337B2/en
Publication of JP2022101208A publication Critical patent/JP2022101208A/ja
Application granted granted Critical
Publication of JP7137612B2 publication Critical patent/JP7137612B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Description

本発明は、分散型ストレージシステム、データ復旧方法、及びデータ処理プログラムに関し、ユーザデータ及び冗長コードを分散して格納し、障害の発生時に冗長コードを利用してデータを復旧する分散型ストレージシステム、データ復旧方法、及びデータ処理プログラムに適用して好適なものである。
従来、ユーザデータ及び当該ユーザデータの冗長コードを複数の計算機ノードに分散して格納することによってデータを保護する分散型ストレージシステムが知られている。このような分散型ストレージシステムでは、障害が発生した計算機ノードからデータを復旧する際、障害が発生した計算機ノード上のデータを、冗長コードから復元した後、生存している他の各計算機ノードに分散して格納する。
そして特許文献1には、上記のようにユーザデータ及び冗長コードを分散して格納する分散型ストレージシステムにおける性能の向上を図る技術が開示されている。詳しくは、特許文献1に開示された計算機システムは、ユーザデータと冗長コードとを分散して格納する計算機システムにおいて、複数の計算機におけるユーザデータ領域及び冗長コード領域の位置を示すグループ情報を生成し、各計算機は、ライトデータのライト要求を受けた場合、ローカルの記憶デバイスへライトデータを書込み、グループ情報に基づいて他の計算機から転送先計算機を選択し、ライトデータに基づく転送データを転送先計算機へ送信し、各計算機は、複数の他の計算機から複数の転送データをそれぞれ受信した場合、グループ情報に基づいて複数の転送データから冗長コードを生成し、ローカルの記憶デバイスへ冗長コードを書込み、複数の計算機の構成が変更される場合、各計算機は、変更された構成に基づいてグループ情報を変更する。
特許第6547057号公報
しかし、上述した特許文献1は、2つの計算機ノードにおいて障害が発生した2点障害発生の際に二次冗長コードを用いてデータを復元する手順について、原理的な説明が開示されるに留まっている。分散型ストレージシステムの実装化にあたっては、複数の計算機ノードの障害時でも大量のリード要求に対して高速でデータを復元しリードすることが求められるが、特許文献1には、このような実装化に対応した冗長コードの配置、並びに復元処理の制御方法について開示されていなかった。具体的には例えば、特許文献1に開示されたストライプのマッピングテーブル(ストライプマップ)を用いて分散型ストレージシステムを実装した場合、二次冗長コードのストレージデバイスまで閉塞する2点障害発生時のリード要求時に、コレクションリードの要求数が1点障害発生時の数倍発生する可能性があり、ノード障害によって冗長度が低下した状態において性能が大幅に低下するおそれがあった。
本発明は以上の点を考慮してなされたもので、ユーザデータ及び冗長コードを分散して格納する分散型ストレージシステムにおいて、障害発生によって冗長度が低下した場合でも性能の低下を抑制しながらデータを読み出すことができる分散型ストレージシステム、データ復旧方法、及びプログラムを提案しようとするものである。
かかる課題を解決するため本発明においては、ネットワークを介して接続された複数のノードがデータを分散して保存する分散型ストレージシステムであって、前記複数のノードの各ノードは、データIOを制御するプロセッサと、データを格納するキャッシュ及びストレージデバイスと、を有し、前記複数のノードのうちの第1のノードは、ホストからライト要求を受信した場合、前記ライト要求とともに受信した複数のユーザデータに基づいて1次冗長コードを生成し、前記生成した1次冗長コードと、当該1次冗長コードの生成に用いた前記複数のユーザデータとを、前記複数のノードのうちのそれぞれ異なる他のノードに送信するとともに、前記受信した複数のユーザデータを自ノードの前記ストレージデバイスに格納し、前記複数のノードのうちの第2のノードは、前記複数のノードにおける複数の前記他のノードからそれぞれ受信した前記複数のユーザデータ及び前記1次冗長コードに基づいて2次冗長コードを生成し、前記生成した2次冗長コードを自ノードの前記ストレージデバイスに格納するとともに、当該2次冗長コードの生成に用いた前記1次冗長コードを自ノードの前記キャッシュに保存し、前記複数のノードの各ノードが、前記第1のノード及び前記第2のノードとしての機能を有し、前記第1のノードは、自ノードの前記ストレージデバイスが閉塞しているときにホストから前記ユーザデータのリード要求を受信した場合、前記リード要求の対象データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第1のコレクションリード要求を実行し、前記対象データの少なくとも一部が、前記第1のコレクションリード要求による復元に失敗した場合には、復元に失敗した対象データを前記1次冗長コードを用いて復元するために必要な複数のデータのうち、前記第1のコレクションリード要求で復元済みのデータを除く1以上の不足データについて、前記不足データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第2のコレクションリード要求を実行する、分散型ストレージシステムが提供される。
また、かかる課題を解決するため本発明においては、ネットワークを介して接続された複数のノードがデータを分散して保存する分散型ストレージシステムによるデータ復旧方法であって、前記複数のノードの各ノードは、データIOを制御するプロセッサと、データを格納するキャッシュ及びストレージデバイスと、を有し、前記複数のノードのうちの第1のノードは、ホストからライト要求を受信した場合、前記ライト要求とともに受信した複数のユーザデータに基づいて1次冗長コードを生成し、前記生成した1次冗長コードと、当該1次冗長コードの生成に用いた前記複数のユーザデータとを、前記複数のノードのうちのそれぞれ異なる他のノードに送信するとともに、前記受信した複数のユーザデータを自ノードの前記ストレージデバイスに格納し、前記複数のノードのうちの第2のノードは、前記複数のノードにおける複数の前記他のノードからそれぞれ受信した前記複数のユーザデータ及び前記1次冗長コードに基づいて2次冗長コードを生成し、前記生成した2次冗長コードを自ノードの前記ストレージデバイスに格納するとともに、当該2次冗長コードの生成に用いた前記1次冗長コードを自ノードの前記キャッシュに保存し、前記複数のノードの各ノードが、前記第1のノード及び前記第2のノードとしての機能を有し、前記第1のノードは、自ノードの前記ストレージデバイスが閉塞しているときにホストから前記ユーザデータのリード要求を受信した場合、前記リード要求の対象データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第1のコレクションリード要求を実行し、前記対象データの少なくとも一部が、前記第1のコレクションリード要求による復元に失敗した場合には、復元に失敗した対象データを前記1次冗長コードを用いて復元するために必要な複数のデータのうち、前記第1のコレクションリード要求で復元済みのデータを除く1以上の不足データについて、前記不足データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第2のコレクションリード要求を実行する、データ復旧方法が提供される。
また、かかる課題を解決するため本発明においては、ネットワークを介して接続された複数のノードがデータを分散して保存する分散型ストレージシステムにおいて前記複数のノードに実行させるデータ処理プログラムであって、 前記複数のノードの各ノードは、データIOを制御するプロセッサと、データを格納するキャッシュ及びストレージデバイスと、を有し、前記複数のノードのうちの第1のノードに、ホストからライト要求を受信した場合に、前記ライト要求とともに受信した複数のユーザデータに基づいて1次冗長コードを生成し、前記生成した1次冗長コードと、当該1次冗長コードの生成に用いた前記複数のユーザデータとを、前記複数のノードのうちのそれぞれ異なる他のノードに送信するとともに、前記受信した複数のユーザデータを自ノードの前記ストレージデバイスに格納する、処理を実行させ、前記複数のノードのうちの第2のノードに、前記複数のノードにおける複数の前記他のノードからそれぞれ受信した前記複数のユーザデータ及び前記1次冗長コードに基づいて2次冗長コードを生成し、前記生成した2次冗長コードを自ノードの前記ストレージデバイスに格納するとともに、当該2次冗長コードの生成に用いた前記1次冗長コードを自ノードの前記キャッシュに保存する、処理を実行させ、前記第1のノードに、自ノードの前記ストレージデバイスが閉塞しているときにホストから前記ユーザデータのリード要求を受信した場合に、前記リード要求の対象データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第1のコレクションリード要求を実行し、前記対象データの少なくとも一部が、前記第1のコレクションリード要求による復元に失敗した場合には、復元に失敗した対象データを前記1次冗長コードを用いて復元するために必要な複数のデータのうち、前記第1のコレクションリード要求で復元済みのデータを除く1以上の不足データについて、前記不足データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第2のコレクションリード要求を実行する、処理を実行させる、データ処理プログラムが提供される。
本発明によれば、ユーザデータ及び冗長コードを分散して格納する分散型ストレージシステムにおいて、障害発生によって冗長度が低下した場合でも性能の低下を抑制しながらデータを読み出すことができる。
本発明の一実施形態に係る分散型ストレージシステムの構成例を示すブロック図である。 メモリ150に格納されるデータを示すブロック図である。 ストライプマップ及びチャンクグループのデータ配置例を説明する図である。 2D2P構成のストライプマップの一例を示す図である。 ライトデータのデータ保護のイメージを説明する図である。 リード要求を受信したノード100によるデータ処理の処理手順例を示すフローチャートである。 2点障害時にブロックに跨るリード要求を受信した際のデータ処理の遷移を説明する図(その1)である。 2点障害時にブロックに跨るリード要求を受信した際のデータ処理の遷移を説明する図(その2)である。 2点障害時にブロックに跨るリード要求を受信した際のデータ処理の遷移を説明する図(その3)である。 2点障害時にブロックに跨るリード要求を受信した際のデータ処理の遷移を説明する図(その4)である。 2点障害時にブロックに跨るリード要求を受信した際のデータ処理の遷移を説明する図(その5)である。 2点障害時にブロックに跨るリード要求を受信した際のデータ処理の遷移を説明する図(その6)である。 2点障害時にブロックに跨るリード要求を受信した際のデータ処理の遷移を説明する図(その7)である。 データ処理において第1のリード要求範囲パターンを用いた場合のデータの読出範囲を説明する図(その1)である。 データ処理において第1のリード要求範囲パターンを用いた場合のデータの読出範囲を説明する図(その2)である。 データ処理において第1のリード要求範囲パターンを用いた場合のデータの読出範囲を説明する図(その3)である。 データ処理において第2のリード要求範囲パターンを用いた場合のデータの読出範囲を説明する図である。
以下、図面を参照して、本発明の実施形態を詳述する。
なお、以下の説明では、「テーブル」や「リスト」等の表現によって各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されてもよい。データ構造に依存しないことを示すために「XXテーブル」、「XXリスト」等を「XX情報」と呼ぶことがある。各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「ID」、「番号」等の表現を用いるが、これらは互いに置換可能である。また、同種の要素を区別せずに説明する場合には、共通する符号を用いて説明し、同種の要素を区別して説明する場合には、上記共通する符号に異なる添字を付して説明することがある。
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU(Central Processing Unit))によって実行されることによって、適宜、記憶資源(例えばメモリ)及び/またはインタフェースデバイス(例えば通信ポート)等を用いながら、定められた処理を行うことから、プロセッサによる処理としてもよい。プログラムを主語として説明される処理は、プロセッサ、またはそのプロセッサを有する装置やシステムが行う処理としてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ(例えばCPU)と記憶資源を含み、記憶資源はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明においては、2以上のプログラムが1のプログラムとして実現されてもよいし、1のプログラムが2以上のプログラムとして実現されてもよい。
(1)システム構成
図1は、本発明の一実施形態に係る分散型ストレージシステムの構成例を示すブロック図である。分散型ストレージシステム1は、それぞれがストレージデバイス(ドライブ120)を含む複数の計算機ノード100から構成される。複数の計算機ノード100は、ネットワーク210,220によって互いに接続され、通信を行う。分散型ストレージシステム1は、複数の計算機ノード100のストレージデバイス(ドライブ120)によってストレージプールを作成し、ストレージプールを用いて仮想的なストレージシステムを実現する。
本実施形態の分散型ストレージシステム1において、1以上の任意の計算機ノード100は、それぞれ計算機ドメイン200を形成する。計算機ドメイン200は、例えば地理的な地域と対応させてもよいし、仮想的または物理的なバックエンドネットワーク(ネットワーク220)のトポロジと対応させてもよい。それぞれの計算機ドメイン200は、外部ネットワーク(ネットワーク210)によって接続される。以下において、各計算機ドメイン200は、地理的に互いに離れた複数のサイトの一つに対応付けられているとする。
計算機ノード100は、例えば一般的なサーバ計算機の構成を有するが、そのハードウェア構成は特に限定されない。計算機ノード100は、バックエンドネットワーク(ネットワーク220)を介して、他の計算機ノード100とバックエンドポート130を通じて接続する。図1の場合、計算機ノード100は、プロセッサパッケージ110、ドライブ120、及びバックエンドポート130を備え、これらは内部ネットワーク(ネットワーク230)を介して互いに接続される。
プロセッサパッケージ110は、プロセッサ140(例えばCPU)及びメモリ150を含む。メモリ150は、プロセッサ140が実行するプログラムを格納する。メモリ150は、揮発性のDRAM(Dynamic Random Access Memory)であってもよいし、不揮発のSCM(Storage Class Memory)等でもよい。メモリ150に格納されるデータについては、図2を参照しながら後述する。
ドライブ120は、ストライプ等のデータを格納するストレージデバイスである。ドライブ120は、各計算機ノード100のローカルドライブとしてデータを格納する他に、前述したように、1以上の計算機ノード100に跨る1または複数のドライブ120によってストレージプールに記憶領域を提供する。ドライブ120は、具体的には例えば、FC(Fibre Channel)、SAS(Serial Attached SCSI)、またはSATA(Serial Advanced Technology Attachment)等のインタフェースを持つHDD(Hard Disk Drive)やSSD(Solid State Drive)等である。ドライブ120は、NAND、PRAM(Parameter RAM)、ReRAM(Resistive RAM)等のSCMを用いてもよいし、揮発性のメモリを用いてもよい。ドライブ120に揮発性メモリを使用する場合は、バッテリによってストレージデバイスを不揮発化してもよい。
なお、本実施形態において、ストレージデバイスは、1以上のHDDやSSD等によって構成されるストレージドライブでもよいし、複数台のストレージドライブを含むRAID装置、または複数のRAID装置であってもよい。
ストライプ(ストライプデータ)は、データ保護のための冗長コードの生成の元となるデータユニットである。ストライプは、冗長コードと区別するためにユーザデータと呼ぶことがある。ストライプは、計算機ノード100内のストレージデバイス(ドライブ120)に格納されるとともに、他の計算機ノード100における冗長コードの生成に使用される。なお、以降の説明では、簡略のため、「計算機ノード」を「ノード」と称することがある。
図2は、メモリ150に格納されるデータを示すブロック図である。図2には、メモリ150に格納されるデータ(プログラムを含む)のうち、分散型ストレージシステム1の制御のための情報を示す。メモリ150は、図2に示した管理情報151、処理プログラム152、及びキャッシュ情報153に加え、OS(Operation System)やインタフェースプログラムを含む各種プログラムを格納する。さらに、メモリ150は、業務を実行するアプリケーションプログラムを格納することがある。
管理情報151は、データ保護を管理するための情報であり、ストライプのマッピングを管理するストライプマップ154を含む。処理プログラム152は、ドライブ120へのストレージI/Oを管理するためのストレージプログラムである。処理プログラム152は、例えば、ハードウェア資源であるドライブ120を束ねて仮想化し、仮想ボリュームとして、ハイパーバイザを介し、他の仮想マシンに提供する機能を実現する。また例えば、処理プログラム152は、仮想ボリュームをハイパーバイザにiSCSIターゲット(ドライブ120)として認識させることで、ハイパーバイザ上に当該仮想ボリュームをマウントし、他の仮想マシンへ当該ドライブ(仮想ボリューム)を提供する。また例えば、処理プログラム152は、ホストや他の計算機ノード100上で動作する処理プログラム152との間で、ネットワークパスを介して通信し、例えば、データ保護やデータ移行といったストレージの機能を実現する。処理プログラム152は、このようなストレージの機能を実現する1つのプログラムとして、コレクションリードを実行するコレクションリード処理プログラム155を有する。詳細な処理手順は後述するが、コレクションリードは、冗長コードを格納するノードがデータの復元に必要なライトデータを他ノードから読出し、自身が保持する冗長コードを用いてデータを復元する処理である。そして、キャッシュ情報153は、処理プログラム152のキャッシュに関する情報である。
分散型ストレージシステム1では、ホストからライト要求やリード要求を受信した計算機ノード100において、所定の処理プログラム152が実行されてストレージI/Oが行われる。ホストは、計算機ノード100、当該計算機ノード100で動作するプロセッサ、または当該プロセッサが実行するアプリケーションプログラムである。
(2)データの保護方式
以下では、分散型ストレージシステム1におけるデータの保護方式について具体例を挙げて説明する。
図3は、ストライプマップ及びチャンクグループのデータ配置例を説明する図である。図3には、上段にストライプマップ310が示され、下段にノード100のローカルドライブ(ドライブ120)に格納される物理チャンク320のイメージが示されている。
分散型ストレージシステム1では、例えば図3のストライプマップ310に示したように、チャンクグループをカラム及びロウにより1ブロック単位で分割し、マッピングする。すなわち、ストライプマップ310において、各列(ロウ)はそれぞれノード100に相当し、各行(カラム)は各ノード100における1ブロック単位の記憶ブロックに相当する。
ストライプマップ310は、ノードA1~A6の6ノードを有する分散型ストレージシステム1が、4つのユーザデータ(D1~D4)から1次、2次の冗長データ(C1、C2)を生成する構成でデータを保護するデータマッピングである。すなわち、データ数(ストライプ数)をD、パリティ数(冗長コード数)をPで表すと、図3に示したデータ保護の構成は、4D2P構成と言える。分散型ストレージシステム1は、2Pの冗長構成を有することにより、1ノード障害時(1点障害時)だけでなく、2ノード障害時(2点障害時)でも全てのデータを回復できる冗長性(2冗長)を実現する。
ストライプマップ310において、D1~D4は、ユーザデータを格納する領域(データ部)であって、4個のストライプサイズを有する。一方、冗長コードを格納する領域としては、1次パリティ(1次符号、1次冗長コード)を格納するC1(1次符号部)と、2次パリティ(2次符号、2次冗長コード)を格納するC2(2次符号部)とがある。2次パリティは、後述するように例えばEC(Erasure Coding)演算によって生成されるが、EC演算の結果は2ブロック分程度のサイズとなることから、P,Qに分割して格納されるとしている。そのため、C2は、P,Qという2つのストライプサイズを有する。C1はキャッシュ(バッファ)に記憶されるため、物理チャンク320には図示されない。そして、ローカルドライブ(ドライブ120)では、物理チャンク320に示すように、データ部(D1~D4)及び2次符号部(P,Q)がそれぞれ、プールボリュームアドレスに対してサイクル数ごとに繰り返されて記憶される。
ストライプタイプは、冗長コードを生成するストライプのクラスである。ストライプタイプ内の複数のストライプから1または複数の冗長コードが生成される。ストライプは、予め定められたサイズのデータユニットである。例えば、図3のストライプマップ310の場合、1つのライトデータは、6つのデータブロックのユーザデータ(例えばS1~S6)に分割され、そのうちの4つがD1~D4として1つのノード100に格納される。また、2つの冗長コードC1,C2が生成され、それぞれは異なるノード100に格納される。
本実施形態に係る分散型ストレージシステム1では、同一ノードに複数の同一ストライプタイプが配置されないことを条件として、ストライプの数と冗長コードの数は、任意に設計することができる。1次冗長コードC1は、例えば、同一カラム(同一ノード)のD1~D4をXORして生成される。また、2次冗長コードC2は、例えば、同一ストライプのデータD1~D4と1次冗長コードC1に対してEC演算を行うことによって生成される。
以上に説明したデータ配置の特徴を踏まえ、4D2P構成のストライプマップ310では、例えばノードA1におけるマッピングは、データ部(D1~D4)にS1,S6,S5,S4、1次符号部C1にS3、2次符号部C2(P,Q)にS2となっている。そして、物理チャンク320に示すように、ノードA1のドライブ120には、データ部のストライプが1サイクル単位で連続して格納され、別途、2次符号部(パリティ部)のストライプも1サイクル単位で連続して格納される。
次に、上述した4D2P構成よりも単純な2D2P構成を例として、分散型ストレージシステム1におけるライト要求に応じた冗長化処理について、図4及び図5を参照しながら説明する。
図4は、2D2P構成のストライプマップの一例を示す図である。図4に示したストライプマップ330の構成において図3に示したストライプマップ310と異なる点は、データの分散先とされるノードの数がA1~A4の4つであること、及びデータ部のストライプサイズが2個(D1,D2)であることである。したがって、ストライプマップ330によれば、分散型ストレージシステム1は、1つのライトデータを、4つのデータブロックのユーザデータS1~S4に分割して、4つのノードA1~A4に配置する。各ノードでは、4つのユーザデータのうちの2つがデータ部(D1,D2)に格納され、さらに1次冗長コードが1次符号部(C1)に格納され、2次冗長コードが2次符号部(C2)に格納される。また、各ノードでは、同一ノードに複数の同一ストライプタイプが配置されないことを条件としている。
図5は、ライトデータのデータ保護のイメージを説明する図である。図5では、分散型ストレージシステム1が、ノードA1~A4の4ノードを有するときに、図4のストライプマップ330に基づいて、ライトデータを2D2Pの2冗長構成で保護する例を示している。
例えば図5のように、ノードA1がデータ長の長いライトデータを受信した場合、ノードA1(プロセッサ140)は、ライトデータを2つのブロックのユーザデータD1,D2に分割する。このとき、ストライプマップ330によれば、具体的には、ノードA1のユーザデータD1は「S1」であり、ノードA1のユーザデータD2は「S4」である。なお、以降は、ストライプマップにおけるカラム及びロウと格納データとの関係性を「A1D1:S1」や「A1D2:S4」のように簡略化して表記することがある。さらに、ノードA1は、ユーザデータD1,D2をXORして1次冗長コードC1を生成する。次に、ノードA1は、ユーザデータD1,D2及び1次冗長コードC1を、他のノードA2~A4のキャッシュ(バッファ)に分散コピーする。データユニットは、1または複数のデータブロックの組み合わせである。
図5の例において、具体的には、ノードA1は、受信したライトデータを2つのデータブロックのユーザデータD1(A1D1:S1),D2(A1D2:S4)に分割し、それらのユーザデータから1次冗長コードC1(A1C1:S3)を生成する。同様に、ノードA2は、受信したライトデータを2つのデータブロックのユーザデータD1(A2D1:S2),D2(A2D2:S1)に分割し、それらのユーザデータから1次冗長コードC1(A2C1:S4)を生成する。同様に、ノードA3は、受信したライトデータを2つのデータブロックのユーザデータD1(A3D1:S3),D2(A3D2:S2)に分割し、それらのユーザデータから1次冗長コードC1(A3C1:S1)を生成する。同様に、ノードA4は、受信したライトデータを2つのデータブロックのユーザデータD1(A4D1:S4),D2(A4D2:S3)に分割し、それらのユーザデータから1次冗長コードC1(A4C1:S2)を生成する。
そして、各ノードA1~A4は、分割したユーザデータD1,D2を自身のローカルドライブ(ドライブ120)に書き込むとともに、3つのデータD1,D2,C1を他の3つのノードのキャッシュ(バッファ)340にそれぞれ分散コピーする。このとき、各ノードA1~A4のキャッシュには、同じストライプのデータ(例えば、ノードA1であればS2)が集約されるように分散コピーする。この結果、各ノードA1~A4は、他の3つのノードから、同一ストライプのデータブロックD1,D2,C1をキャッシュに格納することになる。また、各ノードA1~A4は、自身が生成した1次冗長コードC1を、キャッシュ340とは別のキャッシュ領域に格納する。このキャッシュ領域は、2次冗長データの生成後も解放されない。
次に、ノードA1~A4はそれぞれ、非同期的に、他の3つのノードからキャッシュ340に集約したデータブロックに対してEC演算を行うことによって、2次冗長データC2を生成し、これをローカルドライブ(ドライブ120)に書き込む。前述したように、2次冗長データC2は2ブロック程度の長さになるため、P,Qに分割されてローカルドライブに書き込まれる。各ノードA1~A4は、自ノードにおいて2次冗長データを生成してローカルドライブに書き込んだ後は、キャッシュ340を解放する。
図5の例において、具体的には例えば、ノードA1は、ノードA2のD1(A2D1:S2)と、ノードA3のD2(A3D2:S2)と、ノードA4のC1(A4C1:S2)とをキャッシュ340に集約し、これらのデータブロックをEC演算することによってC2(A1C2:S2)を生成し、これをP,Qに分割してローカルドライブに書き込み、キャッシュ340を解放する。以上の結果、ノードA1においては、ローカルドライブ(ドライブ120)に、ノードA1で分割したD1(A1D1:S1)及びD2(A1D2:S4)と、ノードA1のキャッシュ340で生成した2次冗長データC2(A1C2:S2)とが格納され、キャッシュに、ノードA1で生成した1次冗長データC1(A1C1:S3)が格納される。詳細は省略するが、ノードA2~A4でも同様のデータ処理が行われ、ストライプマップ330に示すマッピングでデータが分散して配置される。
上記のデータ配置の処理は、以下のようにも言える。ライトデータを受信したノードA1は、ライトデータを分割した複数のユーザデータから1次冗長コード(1次符号)を生成し、生成した1次冗長コードと、この1次冗長コードの生成に用いたユーザデータとを、それぞれ異なる他のノードに送信する。また、1次冗長コードの生成に用いたユーザデータは、ノードA1のローカルなドライブ120に格納する。また、ノードA1は、他の複数のノードからそれぞれ受信した複数のユーザデータ及び1次冗長コードに基づいて、2次冗長コード(2次符号)を生成し、これをノードA1のドライブ120に格納する。また、2次冗長コードの生成に用いた1次冗長コードは、ノードA1のキャッシュに格納する。このようなノードA1における処理を他のノード(ノードA2~A4)でも同様に行うことにより、分散型ストレージシステム1の各ノードでは、あるユーザデータと、当該ユーザデータに対応する1次冗長コードと、当該ユーザデータに対応する2次冗長コードとが、異なるノードに分散して格納される。
以上のようなライトデータのデータ保護が実行されることにより、ノードA1~A4はそれぞれ、同一ノードに複数の同一ストライプタイプが配置されないように、ユーザデータ、1次冗長コード、及び2次冗長コードが分散配置されるため、2ノード障害時に全てのデータを回復できる冗長性を有する。なお、4D2P構成の場合も、ストライプマップ310のマッピングに従ってデータ配置が行われることにより、2D2P構成の場合と同様に、2ノード障害時のデータ回復(2冗長)を実現することができる。
(3)リード要求時のデータ処理
上述したように、本実施形態に係る分散型ストレージシステム1では、2ノードまでの障害時には、データ回復を行うことができる。これは言い換えれば、2ノード障害時でもデータのリード要求に応えることができることを意味する。そこで、以下では、本実施形態に係る分散型ストレージシステム1において、ホストからリード要求がなされた場合にノード100が実行するデータ処理について、図6以降の図面を参照しながら、詳しく説明する。
図6は、リード要求を受信したノード100によるデータ処理の処理手順例を示すフローチャートである。
図6によればまず、計算機ノード100が、ホストからリード要求を受信する(ステップS101)。なお、ステップS101で受信するリード要求には、リード範囲が複数のブロックに跨るリード要求を含むことができる。
次に、処理プログラム152は、リード対象のデータを格納しているローカルなストレージデバイス(ドライブ120)が閉塞状態であるか否かを確認する(ステップS102)。ステップS102においてリード対象のローカルデバイスが閉塞していない場合(ステップS102のNO)、処理プログラム152は、リード対象のローカルデバイスから対象データを読み出し(ステップS103)、ホストにリード要求を応答し(ステップS109)、読み出したデータを送信してデータ処理を終了する。
一方、ステップS102においてリード対象のローカルデバイスが閉塞していた場合は(ステップS102のYES)、ステップS104に進む。なお、図示は省略したが、ステップS102でYESと判定する場合に、許容できるローカルデバイスの閉塞数は最大2までとする。分散型ストレージシステム1は3ノード以上の障害時にはデータ復旧ができないため、3以上の対象のローカルデバイスが閉塞していた場合は、処理プログラム152は、ステップS104の処理を行うことなく、リード要求に対するエラーの応答をホストに返し、データ処理を終了する。
ステップS104では、処理プログラム152が、閉塞状態のリード対象領域に対応する2次符号を格納している各ノード100に、コレクションリード要求を発行する。コレクションリード要求を受信した各ノード100では、コレクションリード処理プログラム155によって、2次符号からデータを復元するためのコレクションリードが行われ、コレクションリードに成功して対象データが復元されると、復元された対象データは要求元のノード100に送信されてリード用バッファに保持される。
次に、処理プログラム152は、ステップS104の処理が行われた結果、2次符号からのコレクションリードに失敗した箇所が有るか判定する(ステップS105)。ステップS105において、2次符号からのコレクションリードの失敗箇所がなかった場合は(ステップS105のNO)、各ノード100から受信してリード用バッファに保持した2次符号を用いてリード対象データを復元する。その後、ホストにリード要求を応答し(ステップS109)、復元したデータを送信してデータ処理を終了する。
一方、ステップS105において、2次符号からのコレクションリードの失敗箇所があった場合は(ステップS105のYES)、ステップS106に進み、1次符号を利用したデータ復元に切り替える。本実施形態において、1次符号を利用したデータ復元におけるデータ操作は、1点障害発生時のコレクションリードによるデータ操作と同様となる。ステップS106において、処理プログラム152は、2次符号からのコレクションリードの失敗箇所を1次符号から復元するために必要なデータが、既にコレクションリード済みであるか否かを判定する。コレクションリード済みでないデータが存在する場合は(ステップS106のNO)、ステップS107に進み、既にコレクションリード済みである場合は(ステップS106のYES)、ステップS108に進む。
ステップS107では、処理プログラム152が、1次符号を利用したデータ復元に必要なデータ(コレクションリード済みでない必要データ)を格納しているノード100に、コレクションリードを発行する。コレクションリード要求を受信したノード100では、コレクションリード処理プログラム155によって、1次符号から対象データを復元するためのコレクションリードが行われ、コレクションリードに成功して対象データが復元されると、復元された対象データは要求元のノード100に送信されてリード用バッファに保持される。ステップS107の終了後はステップS108に進む。
そしてステップS108において、処理プログラム152は、これまでの処理でリード用バッファに集められたデータを用いて、1次符号を利用したリード対象データの復元を行う。その後、ホストにリード要求を応答し(ステップS109)、ステップS108までの処理で読み出しまたは復元されたリード対象データをホストに送信して、データ処理を終了する。
以上のようなデータ処理を行うことにより、分散型ストレージシステム1では、2ノードまでの障害発生時において、複数ブロックに跨るリード要求が行われた場合に、2次符号からのデータ復元を行い、2次符号からのデータ復元ができないものについては1次符号からのデータ復元を行うことにより、リード要求の対象データを要求元に渡すことができる。
なお、図6のようなデータ処理を実行する分散型ストレージシステム1では、ブロックに跨るリード要求を受信した場合の処理において、2冗長の冗長性を有する従来の分散型ストレージシステムと比べて、コレクションリードの要求数を低減することができるため、冗長度が低下した状態でも、コレクションリードによるレスポンス性能の低下を抑制しながらデータを読み出す(復旧する)ことができる。この点について、以下では、具体的な処理例を参照しながら説明する。
図7~図13は、2点障害時にブロックに跨るリード要求を受信した際のデータ処理の遷移を説明する図(その1~その7)である。
まず、図7には、4D2P構成のストライプマップ350が示されている。ストライプマップ350のマッピングは、図3で説明したストライプマップ310のマッピングと同一である。図7では、ノードA1及びノードA6に対応するデバイスが2次符号部まで閉塞しているとき(2点障害時)に、ノードA1がホストからのリード要求を受信した状態が示されている。なお、図7に示したように、上記リード要求は、ブロックに跨るリード要求であり、その対象範囲は、A1D1の半ばからA1D3まで(データとしてはS1の後半部とS6とS5)となっている。
図7の状態は、図6のデータ処理のステップS101~S102に相当する。ステップS102では、リード対象のローカルデバイスであるノードA1のデバイスが閉塞状態であることから、YESと判定されて、ステップS104に進む。
図6で説明したように、ステップS104では、リード要求を受信したノードが、閉塞状態のリード対象領域に対応する2次符号を格納している他ノードに対して、コレクションリード要求を発行する。図8はステップS104のコレクションリード要求の処理を示したものである。具体的には、図8に示したように、ノードA1が、リード対象領域(A1D1,A1D2,A1D3)に対応する2次符号S1,S6,S5を格納しているノードA6,A5,A4に対して、それぞれ2次符号によるコレクションリード要求を発行する。
図9は、ノードA1からノードA5,A4に要求されたコレクションリードの処理遷移を説明する図である。図9のストライプマップ350には、A1D2のユーザデータS6を2次符号から復元するための、ノードA5に対するコレクションリード要求に伴うデータ処理の流れが、矢印付きの実線で示されている。ノードA1から2次符号S6によるコレクションリード要求を受けたノードA5は、ノードA2,A3から復元用データとなるユーザデータS6(A2D3:S6,A3D4:S6)を読み出し、ノードA4から1次符号S6(A4C1:S6)を読み出す。ノードA5は、他ノードから読み出したこれらのデータを、自身の2次符号部に格納されている2次符号S6(A5C2:S6)とともに、ノードA5のリード用バッファ365に保持する。なお、2次符号はP,Qの2ブロック分のサイズを持つことから、図9のリード用バッファ365では、2次符号S6が2つのデータブロックで表されている(他図でも同様)。そして、ノードA5のコレクションリード処理プログラム155は、リード用バッファ365に保持された5ブロックのデータから、ユーザデータS6を復元する。また、2次符号S5によるコレクションリード要求を受けたノードA4でも同様にコレクションリードが行われ、ノードA4のリード用バッファ364に保持された5ブロックのデータ(A2D5:S5、A5D1:S5、A3C1:S5、A4C2:S5)から、ユーザデータS5が復元される。そして、ノードA5で,A4でそれぞれ復元されたユーザデータS6,S5は、ノードA1に送信され、ノードA1のリード用バッファ361に保持される。
図10は、ノードA1からノードA6に要求されたコレクションリードの処理遷移を説明する図である。図10に示したように、ノードA1からノードA6に対して2次符号によるコレクションリードが要求されるが、ノードA6はノードA1と同様にデバイスが閉塞状態にあることから、2次符号をリードすることができず、コレクションリードは失敗する。この場合、図6のフローチャートでは、ステップS105でNOと判定され、ステップS106の処理に進むことになる。なお、図10の時点でノードA1は、ノードA6もデバイス閉塞である(2点障害が発生している)ことを認識する。
また、図7に示したように、リード要求におけるユーザデータS1の対象範囲(リード範囲)はブロック全体ではなく部分的であることから、本例の場合、図10に示したノードA1からノードA6に対するコレクションリード要求は、リード範囲のユーザデータS1に対応する「部分的な2次符号S1」を対象として実行される。コレクションリード要求における2次符号S1の部分的なリード要求範囲は、例えば、リード要求の対象範囲のS1側の一端におけるオフセットを基準として決定する等すればよい。
図6で説明したように、ステップS106以降の処理では、ユーザデータS1に対する1次符号からの復元が行われる。図11には、2次符号からの復元ができなかったユーザデータS1について、1次符号からの復元に切り替えるときの処理イメージが示されている。図11のストライプマップ350に破線で囲ったように、ノードA1においてユーザデータS1を1次符号から復元するために必要なデータは、ユーザデータS6,S5,S4、及び1次符号S3である。ユーザデータS6,S5は、図9で説明したコレクションリードによってノードA1のリード用バッファ361に既に保持されているが、ユーザデータS4、及び1次符号S3は、まだリード用バッファ361に保持されておらず、ユーザデータS1を1次符号から復元するために不足しているデータとなる。
そこで、図6のステップS107では、ユーザデータS1を1次符号から復元するために不足しているデータ(A1D4:S4,A1C1:S3)のコレクションリードが行われる。図12は、このようなコレクションリードの処理遷移を説明する図である。図12のストライプマップ350には、ユーザデータS4を2次符号S4から復元するための、ノードA3に対するコレクションリード要求に伴うデータ処理の流れが、矢印付きの実線で示されている。
図12に示したように、ユーザデータS4のコレクションリード要求を受けたノードA3は、ノードA4,A5から復元用データとなるユーザデータS4(A4D1:S4,A5D2:S4)を読み出し、ノードA2から1次符号S4(A2C1:S4)を読み出す。ノードA3は、他ノードから読み出したこれらのデータを、自身の2次符号部に格納されている2次符号S4(A3C2:S4)とともに、ノードA3のリード用バッファ363に保持し、これらの保持データからユーザデータS4を復元する。そして復元されたユーザデータS4は、ノードA1に送信され、ノードA1のリード用バッファ361に保持される。また、1次符号S3のコレクションリード要求を受けたノードA2においても、上記と同様にコレクションリードが行われ、ノードA2のリード用バッファ362に保持されたデータ(A3D1:S3,A4D2:S3,A5D3:S3,A2C2:S3)から1次符号S3が復元され、復元された1次符号S3はノードA1に送信され、ノードA1のリード用バッファ361に保持される。
なお、前述したようにリード要求におけるユーザデータS1の対象範囲(リード範囲)はブロック全体ではなく部分的であることから、本例では、ユーザデータS4及び1次符号S3のコレクションリードで要求されるデータの読み出し範囲は、ブロック全体ではなく、部分的としている(例えばオフセットを揃える)。このような部分的な対象データを視覚的に表すため、図12の各リード用バッファでは、ブロック単位で復元されたユーザデータS6,S5に比べて、その他のデータの表示サイズが小サイズで表示されている。
図13は、図12に続く処理遷移を説明する図である。図12を参照して説明したコレクションリードの結果として、ノードA1のリード用バッファ361には、既に格納されていたユーザデータS5,S6に加えて、ユーザデータS4及び1次符号S3が保持される。そこで、図13に示したように、ノードA1は、リード用バッファ361に保持されたこれらのデータを用いて1次符号によるデータ復元を行うことにより、ユーザデータS1を復元することができる(図6のステップS108)。復元されたユーザデータは、リード用バッファ361に保持される。そして、以上の結果、ノードA1のリード用バッファ361には、リード要求の対象データ(復元済みのユーザデータS1,S6,S5)が保持されるため、ノードA1はホストにこれらのデータを送信して、リード要求に応答する。
以上、図7~図13を参照しながら説明したように、本実施形態に係る分散型ストレージシステム1では、図6のデータ処理のフローチャートに沿ってデータ処理を行うことにより、2ノード障害時の複数ブロックに跨るリード要求に対して、リード要求対象のデータの格納先デバイスが閉塞していたとしても、コレクションリードを利用してデータを復元し、リード要求に応えることができる。
(4)コレクションリードのリード要求範囲
図6に示したように、本実施形態におけるリード要求に対するデータ処理では、2次符号による(2次符号部への)コレクションリード要求として、2次符号からのデータ復元のための1回目のコレクションリード要求(ステップS104)と、1次符号からのデータ復元のための2回目のコレクションリード要求(ステップS107:2回目の要求)と、が実行される可能性がある。分散型ストレージシステム1は、ホストからのリード要求を受信したノード100(例えばノードA1)の処理プログラム152が、リード要求範囲を指定してこれら2回のコレクションリード要求を発行するが、このときのリード要求範囲について、2つのパターン(第1及び第2のリード要求範囲パターン)を用意することができる。以下では、図14~図17を参照しながら、それぞれのリード要求範囲パターンによる特徴及びその効果について説明する。
図14~図16は、データ処理において第1のリード要求範囲パターンを用いた場合のデータの読出範囲を説明する図(その1~その3)である。詳しくは、図14は、複数ブロックに跨るリード要求の対象範囲の一端がブロックの途中である場合のイメージを示しており、図7~図13を参照して説明した具体例の処理と対応している。また、図15は、複数ブロックに跨るリード要求の対象範囲がブロック単位である場合のイメージを示し、図16は、複数ブロックに跨るリード要求の対象範囲の両端がブロックの途中である場合のイメージを示している。
第1のリード要求範囲パターンは、図7~図13を参照した具体例のなかで前述したように、リード要求の対象範囲に対応するリード要求範囲を指定して、1回目のコレクションリード要求を行うものである。
例えば、図14を参照すると、リード要求の対象範囲(リード範囲)はD1~D3に跨っており、D2,D3はブロック全体を対象とするのに対して、D1はブロック単位未満の部分的な範囲が指定されている。この場合、2次符号部への1回目のコレクションリード要求(図6のステップS104)は、リード要求の対象範囲と同様の範囲をリード要求範囲として実行される。前述したように、図14の場合は、1回目のコレクションリード要求ではD1を読み出す(復元する)ことができず、1次符号からのデータ復元のために2回目のコレクションリード要求(図6のステップS107)が実行される。第1のリード要求範囲パターンを採用する場合、この2回目のコレクションリード要求においても、部分的なユーザデータD1を復元するためのデータが要求されるため、具体的には、ユーザデータD4や1次符号C1が部分的な範囲でリードされる。そして、1回目のコレクションリード要求で得られたブロック全体のユーザデータD2,D3の「対応する一部分」と、2回目のコレクションリード要求によって得られた部分的なユーザデータD4及び1次符号C1と、を用いて1次符号によるデータ復旧が行われることにより、部分的なD1を復旧することができる。
図14のようなケースでは、一連のデータ処理を通じて、最大5回のコレクションリードを実行して、複数ブロックに跨るリード要求に応えることができる。また、1回目のD1に対するコレクションリード要求、及び2回目のD4,C1に対するコレクションリード要求を、リード要求の対象範囲に応じた要求範囲で実行することから、余分なデータ領域に対するコレクションリードが発生せず、処理負荷を低減することができる。すなわち、複数ブロックに跨るリード要求の対象範囲の一端がブロックの途中である場合は、第1のリード要求範囲パターンを採用してデータ処理を行うことによって、コレクションリードによるレスポンス性能の低下を抑制しながらデータを読み出す(復旧する)ことができるといえる。
また、図15のケースは、リード要求の対象範囲がブロック単位の場合であるが、この場合は、部分的なリード範囲について注意する必要がない。結果として、図15のケースも、図14のケースと同様に、最大5回のコレクションリードを実行して、複数ブロックに跨るリード要求に応えることができ、コレクションリードによるレスポンス性能の低下を抑制しながらデータを読み出す(復旧する)ことができる。なお、リード要求の対象範囲がブロック単位の場合は、後述する第2のリード要求範囲パターンを採用しても、結果的には全体的な処理は同じとなる。
図16のケースは、複数ブロックに跨るリード要求の対象範囲の両端がブロックの途中に掛かっている場合であり、具体的には図16によれば、D1~D3の複数ブロックに跨ったリード要求において、D1は後半部分、D3は前半部分が対象範囲(リード範囲)となっている。このときに第1のリード要求範囲パターンを採用してデータ処理を行うと、1回目のコレクションリード要求では、部分的なD1,D3に対応する範囲がリード要求範囲として指定される。1回目のコレクションリード要求の結果、ユーザデータD2はブロック全体が復元され、ユーザデータD3は前半部分だけが復元され、ユーザデータD1は復元できない。そこで、後半部分のユーザデータD1を復元するために、2回目のコレクションリード要求が行われることになる。ここで、ユーザデータD3は前半部分しか復元されていない(少なくともD1のリード範囲である後半部分の全体をカバーできるだけの復元はされていない)ことから、2回目のコレクションリード要求では、後半部分(あるいは、必要な後半部分の復元済み部分との差分)のD3に対しても、リード要求範囲に指定して、改めて後半部分のユーザデータD3を取得する必要がでてくる。
すなわち、図16のようなケースでは、リード要求の対象範囲に対応したリード要求範囲を指定して1回目のコレクションリード要求を実行したために、1次符号からのデータ復元に必要なデータ(具体的にはユーザデータD3の後半部分)が、図14のケースよりも余分に不足することが想定される。この結果、2回目のコレクションリード要求の実行回数が増加し、最大6回のコレクションリードを経て、複数ブロックに跨るリード要求に応えることになる。したがって、複数ブロックに跨るリード要求の対象範囲の両端がブロックの途中である場合に、第1のリード要求範囲パターンを採用してデータ処理を行うと、コレクションリードによる処理負荷がやや高くなるおそれがある。分散型ストレージシステム1では、このような問題を解消する方法として、第2のリード要求範囲パターンを採用することができる。
図17は、データ処理において第2のリード要求範囲パターンを用いた場合のデータの読出範囲を説明する図である。詳しくは、図17は、図16と同じく、複数ブロックに跨るリード要求の対象範囲の両端がブロックの途中である場合のイメージを示している。
第2のリード要求範囲パターンは、1回目のコレクションリード要求では、ブロック単位でリード要求範囲を指定し、2回目のコレクションリード要求では、リード要求の対象範囲に対応するリード要求範囲を指定するものである。
図17を参照すると、リード要求の対象範囲(リード範囲)はD1~D3に跨っており、図16と同じく、D1は後半部分、D3は前半部分が対象範囲となっている。ここで第2のリード要求範囲パターンを採用すると、1回目のコレクションリード要求では、D1,D2,D3全てについて、各ブロックの全体がリード要求範囲に指定される。この結果、ユーザデータD1は復元できないが、ユーザデータD2,D3はブロック全体が復旧される。そして、リード範囲とされた部分的な(後半部分の)ユーザデータD1を1次符号から復元するために、2回目のコレクションリード要求が実行される。この2回目のコレクションリード要求においては、リード範囲に対応するリード要求範囲が指定されるため、後半部分のユーザデータD4及び1次符号C1が復元される。このとき、図16のケースとは異なり、ユーザデータD3はブロック全体が復元済みであることから、2回目のコレクションリード要求の対象に含める必要がない。そして、1回目のコレクションリード要求で得られたブロック全体のユーザデータD2,D3の「対応する一部分」と、2回目のコレクションリード要求によって得られた部分的なユーザデータD4及び1次符号C1と、を用いて1次符号によるデータ復元が行われることにより、部分的なユーザデータD1を復元することができる。
以上のように、図17のケースでは、一連のデータ処理を通じて、最大5回のコレクションリードを実行して、複数ブロックに跨るリード要求に応えることができる。第2のリード要求範囲パターンは、1回目のコレクションリード要求におけるリード要求範囲をブロック全体とすることで、第1のリード要求範囲パターンと比べると、リード要求の対象範囲以上のデータ領域に対してコレクションリードを少なくとも1回は実行する分だけ、処理負荷の増加が想定される。しかし、その一方で、2回目のコレクションリード要求では、1回目のコレクションリード要求で復旧できたデータブロックに対する再度のコレクションリードを行わないため、全体としては、コレクションリードの実行回数の増加を抑制することができる。すなわち、複数ブロックに跨るリード要求の対象範囲の両端がブロックの途中に掛かる場合には、第2のリード要求範囲パターンでデータ処理を行うことによって、コレクションリードによるレスポンス性能の低下を抑制しながらデータを読み出す(復旧する)ことができるといえる。
以上のように、本実施形態に係る分散型ストレージシステム1は、複数ブロックに跨るリード要求を受信したときに、第1のリード要求範囲パターンまたは第2のリード要求範囲パターンで図6のデータ処理を実行することにより、2ノード障害発生時でも、コレクションリードによるレスポンス性能の低下を抑制しながら、データを復旧して読み出すことができる。なお、第1のリード要求範囲パターンと第2のリード要求範囲パターンの何れを採用するかは、予め設定しておいてもよいし、リード要求を受信したノード100の処理プログラム152が、リード要求のリード範囲に応じて好適な方を選択するようにしてもよい。詳しくは、リード要求の対象範囲の一端がブロックの途中に掛かる場合、あるいはリード要求の対象範囲がブロック全体である場合には、第1のリード要求範囲パターンを採用することが好ましく、リード要求の対象範囲の両端がブロックの途中に掛かる場合には、第2のリード要求範囲パターンを採用することが好ましい。
本実施形態に係る分散型ストレージシステム1は、例えば、任意の汎用サーバをソフトウェアによって結び付け、1つのストレージプールを作り出し、ユーザがストレージプールから任意の容量を切り出して利用することができる分散型ストレージシステム製品であって、ミッションクリティカルな用途では使われにくく、特に大規模なデータ分析に使用される等、高いIO性能が求められる分散型ストレージシステム製品に適用すると好適である。このような分散型ストレージシステム製品では、サーバ台数が比較的多いことから冗長度が低下しやすいが、ミッションクリティカルな用途で使われないことから冗長度が低下した状態でもすぐに保守が行われずに稼働が続けられやすい傾向が想定される。本実施形態に係る分散型ストレージシステム1は、このような特徴を有する分散型ストレージシステム製品において、実装化を考慮したユーザデータ及び冗長コード(1次符号、2次符号)の配置を行うことにより、2点障害発生のように冗長度が低下した状態でも、リード要求時にコレクションリードによるレスポンス性能の低下を抑制しながらデータを読み出すことができるため、実用的な性能を維持してデータの読み出しや復旧を実現することが可能である。
なお、本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、図面において制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
1 分散型ストレージシステム
100 計算機ノード(ノード)
110 プロセッサパッケージ
120 ドライブ
130 バックエンドポート
140 プロセッサ
150 メモリ
151 管理情報
152 処理プログラム
153 キャッシュ情報
154 ストライプマップ
155 コレクションリード処理プログラム
200 計算機ドメイン
210,220,230 ネットワーク

Claims (8)

  1. ネットワークを介して接続された複数のノードがデータを分散して保存する分散型ストレージシステムであって、
    前記複数のノードの各ノードは、データIOを制御するプロセッサと、データを格納するキャッシュ及びストレージデバイスと、を有し、
    前記複数のノードのうちの第1のノードは、ホストからライト要求を受信した場合、
    前記ライト要求とともに受信した複数のユーザデータに基づいて1次冗長コードを生成し、
    前記生成した1次冗長コードと、当該1次冗長コードの生成に用いた前記複数のユーザデータとを、前記複数のノードのうちのそれぞれ異なる他のノードに送信するとともに、前記受信した複数のユーザデータを自ノードの前記ストレージデバイスに格納し、
    前記複数のノードのうちの第2のノードは、
    前記複数のノードにおける複数の前記他のノードからそれぞれ受信した前記複数のユーザデータ及び前記1次冗長コードに基づいて2次冗長コードを生成し、
    前記生成した2次冗長コードを自ノードの前記ストレージデバイスに格納するとともに、当該2次冗長コードの生成に用いた前記1次冗長コードを自ノードの前記キャッシュに保存し、
    前記複数のノードの各ノードが、前記第1のノード及び前記第2のノードとしての機能を有し、
    前記第1のノードは、自ノードの前記ストレージデバイスが閉塞しているときにホストから前記ユーザデータのリード要求を受信した場合、
    前記リード要求の対象データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第1のコレクションリード要求を実行し、
    前記対象データの少なくとも一部が、前記第1のコレクションリード要求による復元に失敗した場合には、復元に失敗した対象データを前記1次冗長コードを用いて復元するために必要な複数のデータのうち、前記第1のコレクションリード要求で復元済みのデータを除く1以上の不足データについて、前記不足データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第2のコレクションリード要求を実行する
    ことを特徴とする分散型ストレージシステム。
  2. 前記リード要求の対象範囲が複数のデータブロックに跨る場合、
    前記リード要求を受信した前記第1のノードは、各前記データブロックごとに前記対象データを復元するように、前記第1のコレクションリード要求を実行する
    ことを特徴とする請求項1に記載の分散型ストレージシステム。
  3. 対象範囲が前記複数のデータブロックに跨る前記リード要求において、前記対象範囲に部分的なデータブロックが含まれる場合、
    前記リード要求を受信した前記第1のノードは、
    前記部分的なデータブロックに相当する前記対象データの復元について、当該部分に対応する要求範囲を指定して、前記第2のコレクションリード要求を実行する
    ことを特徴とする請求項2に記載の分散型ストレージシステム。
  4. 対象範囲が前記複数のデータブロックに跨る前記リード要求において、前記対象範囲の一端がデータブロックの途中に掛かる場合、
    前記リード要求を受信した前記第1のノードは、
    前記部分的なデータブロックに相当する前記対象データの復元について、当該部分に対応する要求範囲を指定して、前記第1のコレクションリード要求を実行する
    ことを特徴とする請求項3に記載の分散型ストレージシステム。
  5. 対象範囲が前記複数のデータブロックに跨る前記リード要求において、前記対象範囲の両端がデータブロックの途中に掛かる場合、
    前記リード要求を受信した前記第1のノードは、
    前記部分的なデータブロックに相当する前記対象データの復元についても、当該データブロックの全体を要求範囲に指定して、前記第1のコレクションリード要求を実行する
    ことを特徴とする請求項3に記載の分散型ストレージシステム。
  6. 前記第1のノードは、自ノードの前記ストレージデバイスが閉塞していないときにホストからデータのリード要求を受信した場合、
    前記リード要求の対象データを自ノードの前記ストレージデバイスから読み出して応答する
    ことを特徴とする請求項1に記載の分散型ストレージシステム。
  7. ネットワークを介して接続された複数のノードがデータを分散して保存する分散型ストレージシステムによるデータ復旧方法であって、
    前記複数のノードの各ノードは、データIOを制御するプロセッサと、データを格納するキャッシュ及びストレージデバイスと、を有し、
    前記複数のノードのうちの第1のノードは、ホストからライト要求を受信した場合、
    前記ライト要求とともに受信した複数のユーザデータに基づいて1次冗長コードを生成し、
    前記生成した1次冗長コードと、当該1次冗長コードの生成に用いた前記複数のユーザデータとを、前記複数のノードのうちのそれぞれ異なる他のノードに送信するとともに、前記受信した複数のユーザデータを自ノードの前記ストレージデバイスに格納し、
    前記複数のノードのうちの第2のノードは、
    前記複数のノードにおける複数の前記他のノードからそれぞれ受信した前記複数のユーザデータ及び前記1次冗長コードに基づいて2次冗長コードを生成し、
    前記生成した2次冗長コードを自ノードの前記ストレージデバイスに格納するとともに、当該2次冗長コードの生成に用いた前記1次冗長コードを自ノードの前記キャッシュに保存し、
    前記複数のノードの各ノードが、前記第1のノード及び前記第2のノードとしての機能を有し、
    前記第1のノードは、自ノードの前記ストレージデバイスが閉塞しているときにホストから前記ユーザデータのリード要求を受信した場合、
    前記リード要求の対象データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第1のコレクションリード要求を実行し、
    前記対象データの少なくとも一部が、前記第1のコレクションリード要求による復元に失敗した場合には、復元に失敗した対象データを前記1次冗長コードを用いて復元するために必要な複数のデータのうち、前記第1のコレクションリード要求で復元済みのデータを除く1以上の不足データについて、前記不足データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第2のコレクションリード要求を実行する
    ことを特徴とするデータ復旧方法。
  8. ネットワークを介して接続された複数のノードがデータを分散して保存する分散型ストレージシステムにおいて前記複数のノードに実行させるデータ処理プログラムであって、
    前記複数のノードの各ノードは、データIOを制御するプロセッサと、データを格納するキャッシュ及びストレージデバイスと、を有し、
    前記複数のノードのうちの第1のノードに、
    ホストからライト要求を受信した場合に、
    前記ライト要求とともに受信した複数のユーザデータに基づいて1次冗長コードを生成し、
    前記生成した1次冗長コードと、当該1次冗長コードの生成に用いた前記複数のユーザデータとを、前記複数のノードのうちのそれぞれ異なる他のノードに送信するとともに、前記受信した複数のユーザデータを自ノードの前記ストレージデバイスに格納する、
    処理を実行させ、
    前記複数のノードのうちの第2のノードに、
    前記複数のノードにおける複数の前記他のノードからそれぞれ受信した前記複数のユーザデータ及び前記1次冗長コードに基づいて2次冗長コードを生成し、
    前記生成した2次冗長コードを自ノードの前記ストレージデバイスに格納するとともに、当該2次冗長コードの生成に用いた前記1次冗長コードを自ノードの前記キャッシュに保存する、
    処理を実行させ、
    前記第1のノードに、
    自ノードの前記ストレージデバイスが閉塞しているときにホストから前記ユーザデータのリード要求を受信した場合に、
    前記リード要求の対象データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第1のコレクションリード要求を実行し、
    前記対象データの少なくとも一部が、前記第1のコレクションリード要求による復元に失敗した場合には、復元に失敗した対象データを前記1次冗長コードを用いて復元するために必要な複数のデータのうち、前記第1のコレクションリード要求で復元済みのデータを除く1以上の不足データについて、前記不足データに対応する前記2次冗長コードを前記ストレージデバイスに格納している1以上の前記他のノードに対して、前記2次冗長コードからのデータの復元を要求する第2のコレクションリード要求を実行する、
    処理を実行させる
    ことを特徴とするデータ処理プログラム。
JP2020215659A 2020-12-24 2020-12-24 分散型ストレージシステム、データ復旧方法、及びデータ処理プログラム Active JP7137612B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2020215659A JP7137612B2 (ja) 2020-12-24 2020-12-24 分散型ストレージシステム、データ復旧方法、及びデータ処理プログラム
US17/471,332 US11640337B2 (en) 2020-12-24 2021-09-10 Data recovery of distributed data using redundant codes

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020215659A JP7137612B2 (ja) 2020-12-24 2020-12-24 分散型ストレージシステム、データ復旧方法、及びデータ処理プログラム

Publications (2)

Publication Number Publication Date
JP2022101208A JP2022101208A (ja) 2022-07-06
JP7137612B2 true JP7137612B2 (ja) 2022-09-14

Family

ID=82119896

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020215659A Active JP7137612B2 (ja) 2020-12-24 2020-12-24 分散型ストレージシステム、データ復旧方法、及びデータ処理プログラム

Country Status (2)

Country Link
US (1) US11640337B2 (ja)
JP (1) JP7137612B2 (ja)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005276135A (ja) 2004-03-26 2005-10-06 Hitachi Computer Peripherals Co Ltd ディスク管理方法及びraidストレージシステム
JP2010128519A (ja) 2008-11-25 2010-06-10 Hitachi Ltd 記憶制御装置及び記憶制御装置の制御方法
WO2011128936A1 (ja) 2010-04-14 2011-10-20 株式会社日立製作所 記憶制御装置及び記憶制御装置の制御方法
WO2017145223A1 (ja) 2016-02-22 2017-08-31 株式会社日立製作所 計算機システム、計算機システムの制御方法、および記録媒体
WO2018229944A1 (ja) 2017-06-15 2018-12-20 株式会社日立製作所 ストレージシステム及びストレージシステムの制御方法
US10802913B1 (en) 2019-05-23 2020-10-13 Solid State Storage Technology Corporation Solid state storage device using prediction function

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7562188B2 (en) * 2005-06-17 2009-07-14 Intel Corporation RAID power safe apparatus, systems, and methods
US8533155B2 (en) * 2009-10-30 2013-09-10 Hitachi Data Systems Corporation Fixed content storage within a partitioned content platform, with replication
US20090113235A1 (en) * 2007-10-30 2009-04-30 Selinger Robert D Raid with redundant parity
US9026729B1 (en) * 2011-11-15 2015-05-05 Emc Corporation Data recovery after triple disk failure

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005276135A (ja) 2004-03-26 2005-10-06 Hitachi Computer Peripherals Co Ltd ディスク管理方法及びraidストレージシステム
JP2010128519A (ja) 2008-11-25 2010-06-10 Hitachi Ltd 記憶制御装置及び記憶制御装置の制御方法
WO2011128936A1 (ja) 2010-04-14 2011-10-20 株式会社日立製作所 記憶制御装置及び記憶制御装置の制御方法
WO2017145223A1 (ja) 2016-02-22 2017-08-31 株式会社日立製作所 計算機システム、計算機システムの制御方法、および記録媒体
WO2018229944A1 (ja) 2017-06-15 2018-12-20 株式会社日立製作所 ストレージシステム及びストレージシステムの制御方法
US10802913B1 (en) 2019-05-23 2020-10-13 Solid State Storage Technology Corporation Solid state storage device using prediction function

Also Published As

Publication number Publication date
US11640337B2 (en) 2023-05-02
US20220206897A1 (en) 2022-06-30
JP2022101208A (ja) 2022-07-06

Similar Documents

Publication Publication Date Title
US9921912B1 (en) Using spare disk drives to overprovision raid groups
US8839028B1 (en) Managing data availability in storage systems
CN107817952B (zh) 存储系统
US6985995B2 (en) Data file migration from a mirrored RAID to a non-mirrored XOR-based RAID without rewriting the data
US9411527B2 (en) Storage system and data management method
KR0130008B1 (ko) 다수의 기억장치체계에 쓰이는 파일시스템
US8495293B2 (en) Storage system comprising function for changing data storage mode using logical volume pair
US7353423B2 (en) System and method for improving the performance of operations requiring parity reads in a storage array system
US20120192037A1 (en) Data storage systems and methods having block group error correction for repairing unrecoverable read errors
US20100049919A1 (en) Serial attached scsi (sas) grid storage system and method of operating thereof
KR20120086695A (ko) Raid 그룹의 여러 스트라이핑을 갖는 메모리 및 그 수행방법
US20190243553A1 (en) Storage system, computer-readable recording medium, and control method for system
JP2018508073A (ja) データ除去、割り当て、及び再構築
US11003554B2 (en) RAID schema for providing metadata protection in a data storage system
JP7167078B2 (ja) 分散ストレージシステム及び記憶制御方法
JP3736134B2 (ja) 分散記憶方法及び分散記憶システム及び分散記憶プログラムを記録した記録媒体
US8832370B2 (en) Redundant array of independent storage
JP7137612B2 (ja) 分散型ストレージシステム、データ復旧方法、及びデータ処理プログラム
JP6494787B2 (ja) 分散ストレージシステム
US11256428B2 (en) Scaling raid-based storage by redistributing splits
CN102147714A (zh) 一种网络存储系统的管理方法及装置
Chai et al. Case study on the recovery of a virtual large-scale disk
US11467904B2 (en) Storage system and control method of the same
RU2777270C1 (ru) Способ и система распределенного хранения восстанавливаемых данных с обеспечением целостности и конфиденциальности информации
Thomasian Mirrored and hybrid disk arrays and their reliability

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210730

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220830

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220902

R150 Certificate of patent or registration of utility model

Ref document number: 7137612

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150