JP2007520783A - データストレージシステムにおける冗長データ割り当て - Google Patents

データストレージシステムにおける冗長データ割り当て Download PDF

Info

Publication number
JP2007520783A
JP2007520783A JP2006533127A JP2006533127A JP2007520783A JP 2007520783 A JP2007520783 A JP 2007520783A JP 2006533127 A JP2006533127 A JP 2006533127A JP 2006533127 A JP2006533127 A JP 2006533127A JP 2007520783 A JP2007520783 A JP 2007520783A
Authority
JP
Japan
Prior art keywords
data
node
nodes
storage device
timestamp
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.)
Granted
Application number
JP2006533127A
Other languages
English (en)
Other versions
JP4317876B2 (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.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Development Co LP
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 Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Publication of JP2007520783A publication Critical patent/JP2007520783A/ja
Application granted granted Critical
Publication of JP4317876B2 publication Critical patent/JP4317876B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • 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/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0605Improving or facilitating administration, e.g. storage management by facilitating the interaction with a user or administrator
    • 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/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0607Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error 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/2053Error 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/2056Error 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 by mirroring
    • G06F11/2087Error 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 by mirroring with a common controller
    • 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/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0635Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • 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]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2206/00Indexing scheme related to dedicated interfaces for computers
    • G06F2206/10Indexing scheme related to storage interfaces for computers, indexing schema related to group G06F3/06
    • G06F2206/1012Load balancing

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)
  • Computer Networks & Wireless Communication (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

【課題】データストレージシステムの冗長データの割り当て及びレイアウトのための技法を提供する。
【解決手段】データストレージシステム(100)は、データのM個の複製を記憶する。システム(100)に割り当てられるデータの要件に対応するのに利用可能な十分な資源を有するノード(102)が特定される。ノード(102)の個数がMよりも多い場合、特定されたノードの中からランダムに選択されたM個のノード(102)にデータが割り当てられる。割り当てられるデータは、データセグメントのグループを含むことができ、ノード(102)の個数がM未満である場合に、そのグループは分割されて、削減された要件を有するデータセグメントのグループが形成される。次に、削減された要件に対応するのに利用可能な十分な資源を有するノード(102)が特定される。
【選択図】図1

Description

[発明の分野]
本発明は、データストレージの分野に関し、より詳細には、フォールトトレラントデータ複製に関する。
本出願は、(本出願と同日に)出願された米国特許出願第(代理人整理番号200310742−1及び200310143−1)号に関係する。これらの米国特許出願の内容は参照により本明細書に援用される。
[発明の背景]
企業クラスのデータストレージシステムは、主として、データストレージシステムの信頼性の要件において、民生クラスのストレージシステムと異なる。例えば、企業クラスのストレージシステムに共通に望まれる特徴は、ストレージシステムが、全面的な惨事に達しない状況ではデータを喪失すべきでもないし、データのサーブを停止すべきでもないということである。これらの要件を満たすために、このようなストレージシステムは、一般に、カスタマイズされた非常に信頼性のあるホットスワップ可能なハードウェアコンポーネントから構成される。それらハードウェアコンポーネントのファームウェアは、オペレーティングシステムを含めて、通常、根底から構築される。それらハードウェアコンポーネントの設計及び構築は多くの時間及び費用を要し、このことが、比較的低い製造ボリュームと結びついて、このようなストレージシステムが一般に高い価格である主な要因となっている。このようなシステムの別の不利な点は、単一システムの拡張性に欠けるということである。顧客は、通常、最小のディスクアレイ構成であっても、高い先行投資コストを支払うが、単一システムは、有限の容量及び性能しかサポートすることができない。顧客は、これらの限界を超えることができるが、その結果、システムが十分に動作しなくなるか、又は、複数のシステムを購入しなければならないことになり、これらの双方とも、管理コストが増大する。
出来合いのストレージシステムコンポーネント又は普及品のストレージシステムコンポーネントのフォールトトレランスを、データ複製の使用を通じて増大させることが提案されている。しかしながら、このソリューションは、冗長コンポーネントのオペレーションの調整及び複製されたデータの同期を必要とする。
したがって、冗長デバイスが設けられるストレージ環境又はデータが複製されるストレージ環境の改善された技法が必要とされている。本発明はこの目的を対象としている。
[発明の概要]
本発明は、データストレージシステムの冗長データの割り当て及びレイアウトのための技法を提供する。一態様では、データストレージシステムは、データのM個の複製を記憶する。システムに割り当てられるデータの要件に対応するのに利用可能な十分な資源を有するノードが特定される。ノードの個数がMよりも多い場合、特定されたノードの中からランダムに選択されたM個のノードにデータが割り当てられる。割り当てられるデータは、データセグメントのグループを含むことができ、ノードの個数がM未満である場合に、そのグループは分割されて、削減された要件を有するデータセグメントのグループが形成される。次に、削減された要件に対応するのに利用可能な十分な資源を有するノードが特定される。
別の態様では、新しいストレージデバイスノードが、複数の既存のストレージデバイスノードを有するデータストレージシステムに追加される。既存のノードのうちの他のノードと比較して重い負荷を有する或る既存のノードが特定される。特定された既存のノードに記憶されたデータは、新しいノードに移動される。新しいノードが、既存のノードと比較して十分な負荷を有するかどうかの判断が行われる。新しいノードが十分な負荷を有しない場合、新しいノードが十分な負荷を有するまで、特定及び移動が繰り返される。
さらに別の態様では、データが、データストレージシステムのストレージデバイスノードから除去される。データが除去されるストレージデバイスノードにおいてデータが選択される。そのデータの要件に対応するのに利用可能な十分な資源を有するデータストレージシステムの他のノードが特定される。特定されたノードの中からランダムに選択されたノードへデータが移動される。この選択、特定、及び移動は、除去されるストレージデバイスノードが空になるまで繰り返される。次に、空になったノードは、システムから除去することができる。
さらなる態様では、マシンによって読み出し可能なプログラム記憶媒体が、上記で要約したように、データを割り当てる方法、ノードをシステムに追加する方法、又はデータをノードから除去する方法を実行するマシンによって実行可能な命令のプログラムを有形に実施することができる。
本発明のこれらの態様及び他の態様は、本明細書でより詳細に説明される。
[好ましい実施の形態の詳細な説明]
本発明は、冗長デバイスが設けられるストレージ環境又はデータが複製されるストレージ環境の改善された技法を提供する。ストレージデバイスのアレイが、企業クラスのストレージシステムの信頼性及び性能を提供するが、この提供は、より低コストで、且つ、拡張性が改善されて行われる。各ストレージデバイスは、普及品のコンポーネントから構成することができると同時に、それらコンポーネントのオペレーションは、非集中化方式で調整される。ストレージサービスを必要とするアプリケーションの観点から、データはアレイにおいて複製されるが、アレイは、データの高可用性を有する単一のコピーを提供する。これに加えて、失敗、及び、数秒のディスク遅延等の他の振る舞い、並びに、デバイスの異なる性能特性に、ストレージサービスを必要とするアプリケーションにトランスペアレントな方法で対応するための技法も提供される。
図1は、本発明の一実施の形態による、複数の冗長ストレージデバイス102を含む例示のストレージシステム100を示している。ストレージデバイス102は、(例えば、イーサネット(登録商標)上でのリモートダイレクトメモリアクセス又はRDMAを使用して)ネットワーク等の通信媒体104を介して相互に通信する。1つ又は複数のクライアント106(例えば、サーバ)は、通信媒体108を介してストレージシステム100にアクセスし、読み出しオペレーション及び書き込みオペレーションを実行することによりストレージシステム100に記憶されたデータにアクセスする。通信媒体108は、例えば、イーサネット(登録商標)上のiSCSIプロトコル、ファイバチャネルプロトコル、SCSIプロトコル、又はシリアルアッタチドSCSIプロトコルを使用する直接接続又はネットワーク接続によって実施することもできる。通信媒体104及び通信媒体108は、別個のものとして示されているが、組み合わせることもできるし、相互に接続することもできる。クライアント106は、データを生成し、且つ/又は、データへのアクセスを必要とするアプリケーションソフトウェア(例えば、電子メール又はデータベースアプリケーション)を実行することができる。
図2は、本発明の一実施の形態による、図1のストレージシステム100で使用される例示のストレージデバイス102を示している。図2に示すように、ストレージデバイス102は、インターフェース110、中央処理装置(CPU)112、マスストレージ114、及びメモリ116を含むことができる。マスストレージ114は、1つ又は複数のハードディスク等である。メモリ116は、好ましくは不揮発性(例えば、NV−RAM)である。インターフェース110は、ストレージデバイス102がストレージシステム100の他のデバイス102及びストレージシステム100の外部のデバイスと通信することを可能にする。ストレージシステム100の外部のデバイスはサーバ106等である。CPU112は、一般に、ストレージデバイス102のオペレーションを制御する。メモリ116は、一般に、マスストレージ114に書き込まれるデータ及びマスストレージ114から読み出されたデータを一時的に記憶するためのキャッシュメモリとして動作する。また、メモリ116は、本明細書でより詳細に説明するように、データに関連したタイムスタンプも記憶することができる。
好ましくは、各ストレージデバイス102は、コストを最小にするために、出来合いの部品又は普及品の部品で構成される。しかしながら、各ストレージデバイス102は他のストレージデバイスと同一である必要はない。例えば、ストレージデバイス102は、異種の部品で構成することができ、性能及び/又は記憶容量において異なっていてもよい。
フォールトトレランスを提供するために、データは、ストレージシステム100内で複製される。好ましい実施の形態では、ブロックやファイル等の各データ要素について、システム100の少なくとも2つの異なるストレージデバイス102が、データの複製を記憶するように指定される。ここで、指定されて記憶されたデバイスの個数、したがって、複製の個数は「M」として与えられる。書き込みオペレーションの場合、(例えば、データブロックの)値は、指定されたデバイス102の過半数(例えば、Mが2又は3の場合、少なくとも2つのデバイス102)に記憶される。読み出しオペレーションの場合、指定されたデバイスの過半数に記憶された値が返される。
指定されたストレージデバイス102間で動作を調整するために、タイムスタンプが使用される。一態様では、各ストレージデバイスの各データブロックには、そのデータブロックが最後に更新された(すなわち、書き込まれた)時刻を示すタイムスタンプが関連付けられる。これに加えて、ブロックのそれぞれに対する保留中の更新のログが保持される。このログは、各保留中の書き込みオペレーションに関連したタイムスタンプを含む。更新は、書き込みオペレーションが開始されたが、まだ完了していない場合に保留中となる。このように、各ストレージデバイスの各データブロックについて、2つのタイムスタンプを保持することができる。
タイムスタンプを生成するために、各ストレージデバイス102はクロックを含む。このクロックは、システム100のイベントの本来備わっている半順序を反映した論理クロックとすることもできるし、各デバイスの「壁時計」の時刻を反映した実時間クロックとすることもできる。実時間クロックを使用する場合、これらのクロックは、ほぼ同じ時刻を有するように、ストレージデバイス102間で同期される。ただし、それらクロックは、正確に同期されていなくてもよい。クロックの同期は、ストレージデバイス102が相互にメッセージを交換することによるか、又は、(例えば、サーバ106の1つ又は複数における)集中化アプリケーションがデバイス102にメッセージを送信することにより行うことができる。例えば、各タイムスタンプは、現在の時刻を示す8バイト値、及び、同一のタイムスタンプが生成されることを回避するための、各デバイス102に一意の4バイト識別子を含むことができる。
一態様では、本発明は、調整された読み出しオペレーションを実行するための技法を提供する。ストレージシステム100のストレージデバイス102のいずれか1つは、クライアント106のいずれか等からの読み出し要求を受信することができる。この要求を受信したストレージデバイス102が、要求されたデータブロックを記憶するように指定されたデバイスでない場合、そのデバイスは、好ましくは、本明細書で説明するように、その要求のコーディネータとして動作する。また、要求を受信したデバイスが、データを記憶するように指定されたデバイスである場合もあるが、このことは必要ではない。したがって、デバイス102のいずれも要求を受信することができる。各デバイス102がシステム100内におけるデータのロケーションに関する情報を有するように、各デバイスは、データロケーションテーブル(図10)を記憶することができ、そうでない場合には、データロケーションテーブルにアクセスすることができる。次に、コーディネータデバイスは、指定されたデバイスをポーリングし(また、コーディネータデバイスが、指定されたデバイスである場合には、自身のストレージへのアクセスも行う)、指定されたデバイスの過半数に現在記憶されているデータ値を返す。
図3は、本発明の一実施の形態による、読み出しオペレーションを実行するための例示のタイミング図300を示している。複数のストレージデバイス102を含めて、図1のストレージシステム100のオペレーションは、図3のタイミング図に従って制御することができる。
図3の3つの縦線302、304、及び306のそれぞれは、要求されたデータを記憶するように指定された図1の3つのストレージデバイス102のそれぞれを表している。ストレージデバイス102間で通信されるメッセージは、矢印によって表されている。この矢印において、矢印の末端はメッセージを送信したストレージデバイス102を示し、矢印の先端はメッセージを受信することになるデバイスを示す。時間は、図300の上から下に増加するように示されている。3つの線302、304、及び306が示されているので、Mはこの例では3に等しい。他の例では、Mは3よりも大きくてもよいし、小さくてもよいことは明らかであろう。
左端の縦線302は、読み出しオペレーションのコーディネータとして動作しているストレージデバイス102を表している一方、他の線304及び306は、他の指定されたデバイスを表している。読み出し要求は、図3ではメッセージ308によって示されている。
3つのストレージデバイス102のそれぞれは、要求されたデータブロックの値を記憶する。この値は、図3では「val」として与えられている。各データ値について、3つのストレージデバイスのそれぞれは、「valTS」及び「logTS」として与えられた2つのタイムスタンプを記憶する。タイムスタンプvalTSは、そのデータ値が最後に更新された時刻を示す。そのデータに対する書き込みオペレーションが開始されたが、完了していない場合には、タイムスタンプlogTSが、その未完了の書き込みオペレーションが開始された時刻を示す。そうでなく、このような保留中の書き込みオペレーションがない場合には、タイムスタンプvalTSは、タイムスタンプlogTSよりも大きいか又は等しくなる。図3の例では、読み出しオペレーションを実行する前、3つのストレージデバイスの第1のものは、要求されたデータについての自身の値としてval=「v」を有し、自身のタイムスタンプvalTS及びlogTSは同じであり、「5」に等しい。これに加えて、3つのストレージデバイス102の第2のものは、要求されたデータについての自身の値としてval=「x」を有し、自身のタイムスタンプvalTS及びlogTSは同じであり、「4」に等しい(「4」は「5」よりも小さいので、このことは、valTSがvalTSよりも時間が先であることを示す)。ストレージデバイスの第3のものでは、要求されたデータについての自身の値はval=「v」であり、自身のタイムスタンプvalTS及びlogTSは同じであり、「5」に等しい。
3つのストレージデバイス102の第1のものは、読み出し要求メッセージ308に応答して、要求されたデータの自身の更新タイムスタンプvalTSをチェックして、メッセージ310及びメッセージ312を他の2つのストレージデバイス102へ転送する。図3に示すように、メッセージ310及びメッセージ312は、読み出しオペレーションを示すためにタイプ「Read」を有し、好ましくは、コーディネータストレージデバイス(3つのストレージデバイスの第1のもの)におけるvalTSタイムスタンプの値を含む。したがって、valTSタイムスタンプの値「5」が、メッセージ310及びメッセージ312に含まれる。
他の指定されたストレージデバイスのそれぞれは、メッセージ310及びメッセージ312に応答して、自身のローカルなタイムスタンプvalTS及びlogTSタイムスタンプの値を、コーディネータストレージデバイスから受信したvalTSタイムスタンプ値と比較する。ローカルなvalTSタイムスタンプが、コーディネータデバイスから受信したvalTSタイムスタンプと等しい場合、このことは、双方のデバイスがデータブロックの同じバージョンを有することを示す。そうでない場合、バージョンのすべてが、前の書き込みオペレーション中に更新されていたとは限らない場合がある。この場合、それらバージョンは異なることがある。したがって、データ自体ではなく、タイムスタンプを比較することによって、デバイス102は、データが同じであるかどうかを判断することができる。タイムスタンプではなく、データ自体(又はハッシュ値等のデータの或る表現)を比較できることも明らかであろう。
また、ローカルなlogTSが、コーディネータのvalTSタイムスタンプ以下である場合、このことは、現在保留中のデータに対して近時に更新が行われていないことを示す。ローカルなlogTSがvalTSよりも大きい場合、このことは、コーディネータが、利用可能なデータの最新バージョンを有しない場合があることを示す。
上記2つの状況が満たされる場合、ストレージデバイスは、肯定応答(「イエス」又は「真」)をコーディネータデバイスに返す。上記は、以下の式によって表すことができる。
If
valTS(ローカル)=valTS(コーディネータ), 且つ、
logTS(ローカル)≦valTS(コーディネータ)
then,「イエス」を応答する;
otherwise,「ノー」を応答する (1)
図3の例を参照して、(縦線306によって表された)第3のストレージデバイスが上記式(1)を評価すると、第3のストレージデバイスは、コーディネータに「イエス」を返す。これは、図3では、第3のデバイスからコーディネータへ送信されたメッセージ314によって示されている。
コーディネータストレージデバイス及び第3のストレージデバイスは、同じvalTSタイムスタンプを有する(且つ、保留中の更新はない)ので、このことは、コーディネータ及び第3のストレージデバイスが、要求されたデータの同じバージョンを有することを示す。したがって、この例では、(3つ存在する場合の)指定されたデバイスの過半数(すなわち、2つ)が同じデータを有する。したがって、コーディネータは、メッセージ314を受信したことに応答して、コーディネータに記憶された、要求されたデータを含むリプライメッセージ316を送信する。このリプライメッセージ316は、要求側サーバ106に回送される。
要求されたデータは、コーディネータではない、指定されたデバイスの1つから来ることもある(例えば、コーディネータはデータのローカルなコピーを有しないこともあるし、有することもあるが、いずれにしても別のデバイスからそのデータを取得する)。この場合、コーディネータは、指定されたデバイスの1つを、データを返すためのデバイスとして指名する。このデバイスの選択は、ランダムとすることもできるし、負荷情報に基づくこともできる。システム100の全体の負荷がバランスされるように、例えば、負荷は、負荷の重いデバイスからその近傍のデバイスへ移動させることができ、近傍のデバイスは、その負荷をさらにその近傍のデバイスへ移動させることができ、以下、同様に移動させることができる。したがって、負荷バランシングを行うように、異質の性能を有するストレージデバイスを適応させることができ、いくつかのストレージデバイスが障害を受けた場合にも、負荷バランシングを行うことができる。
次に、コーディネータは、(例えば、メッセージ310及びメッセージ312の代わりに)各デバイスへ異なるメッセージを送信することによって、指定されたデバイスから<データ,valTS,ステータス>を請求し、他のデバイスから<valTS,ステータス>を請求する。その後、それらデバイスは、自身のvalTSタイムスタンプをコーディネータに返し、その結果、コーディネータはタイムスタンプをチェックすることができる。ステータス情報(「イエス」又は「ノー」応答)は、それらデバイスにおいて、logTSがvalTS以下であるかどうかを示す。(例えば、指定されたデバイスがダウンしているか、若しくは、時間内に応答しないことから)指定されたデバイスが定足数の一部でないか、又は、定足数が検出されない場合、コーディネータは、本明細書で説明するような修復オペレーション(「回復」オペレーションとも呼ばれる)を開始することができる(すなわち、コーディネータは、読み出しが失敗したものとみなす)。指定されたデバイスが応答し、肯定応答の定足数が受信された場合、コーディネータは、成功を宣言し、指定されたデバイスからのデータを返す。
このように、コーディネータは、データ自体を比較する必要があるのではなく、関連したタイムスタンプのみを検査することによって、指定されたストレージデバイス102の過半数がデータの同じバージョンを有するかどうかを判断することができる。これに加えて、コーディネータは、デバイスの少なくとも過半数がデータの同じバージョンを有するとタイムスタンプから判断すると、指定されたストレージデバイスのすべてから「イエス」又は「ノー」の回答を待つ必要なく、そのデータでリプライすることができる。
図3の例に戻って、(縦線304で表された)第2のストレージデバイスが上記式(1)を評価すると、第2のストレージデバイスは、図3のメッセージ318によって示すように、コーディネータに否定応答(「ノー」又は「偽」)を返す。これは、第2のデバイスのvalTSタイムスタンプの値及びlogTSタイムスタンプの値が、コーディネータのvalTSタイムスタンプよりも小さいからである。これは、通信が失敗し、その結果、第2のデバイスが時刻「5」で行われた更新を受信しなかったことに起因している場合がある。しかしながら、上述したように、コーディネータは、要求されたデータをすでに提供している場合がある。いずれにしても、過半数は「イエス」で応答したので、「ノー」メッセージ318をコーディネータは無視することができる。
上述したように、読み出しオペレーションによって、指定されたデバイスのいずれかから(タイムスタンプではなく)データを読み出すことが可能になる。
別の態様では、本発明は、調整された書き込みオペレーションを実行するための技法を提供する。一般に、書き込みオペレーションは2つのフェーズで実行される。この2つのフェーズは、「事前書き込み」フェーズ及び書き込みフェーズを含む。事前書き込みフェーズでは、書き込まれるデータのlogTSタイムスタンプが更新され、次いで、書き込みフェーズでは、データ及びvalTSタイムスタンプが更新される。部分的な書き込みオペレーション又は未完了の書き込みオペレーションは、データブロックを記憶するように指定されたストレージデバイスのすべてが、そのブロックに対する更新を受信しているとは限らないオペレーションである。これは、例えば、デバイスの1つに影響を与える障害が発生した場合、又は、デバイスのすべてが更新を受信する前に障害が発生したときに起こり得る。2つのタイムスタンプを保持することによって、部分的な書き込み又は未完了の書き込みを検出して、これに対処することができる。
サーバ106のいずれか等からの書き込み要求は、ストレージシステム102のストレージデバイス102のいずれか1つが受信することができる。その要求を受信したストレージデバイス102は、たとえ要求されたデータブロックを記憶するように指定されたデバイスでなくても、好ましくはコーディネータとして動作する。代替的な実施の形態では、そのデバイスは、要求を、そのように指定されたデバイス102の1つへ転送することができ、その1つのデバイスが、その後、この書き込み要求のコーディネータとして動作する。読み出しオペレーションと同様に、指定されたデバイスのいずれも、書き込み要求を受信することができる。しかしながら、要求を受信したデバイスは、その後、その要求のコーディネータとして動作する。
図4は、本発明の一実施の形態による、書き込みオペレーションを実行するための例示のタイミング図400を示している。複数のストレージデバイス102を含めて、図1のストレージシステム100のオペレーションは、図4のタイミング図に従って制御することができる。
図4の3つの縦線402、404、及び406のそれぞれは、図1の3つのストレージデバイス102のそれぞれを表している。これらのうち、左端の縦線402は、書き込みオペレーションのコーディネータとして動作しているストレージデバイスを表し、他の線404及び406は、他の指定されたデバイスを表している。書き込み要求は、図4では、コーディネータによって受信されたメッセージ408により示されている。
図4の例では、書き込みオペレーションを実行する前に、3つのストレージデバイス102の第1のものは、書き込まれるロケーションのデータについての自身の現在の値としてval=「v」を有し、自身のタイムスタンプvalTS及びlogTSは同じであり、「5」に等しい。これに加えて、3つのストレージデバイス102の第2のものは、書き込まれるロケーションのデータについての自身の値としてval=「x」を有し、自身のタイムスタンプvalTSは「4」に等しく、自身のタイムスタンプlogTSは「5」に等しい。ストレージデバイスの第3のものでは、データについての自身の値はval=「v」であり、自身のタイムスタンプvalTS及びlogTSは同じであり、「5」に等しい。
コーディネータは、書き込み要求メッセージ408に応答して、logTSタイムスタンプの新しい値として新しいタイムスタンプ値「8」のnewTSを他の2つのストレージデバイスへメッセージ410及びメッセージ412を介して転送する。この新しいタイムスタンプ値は、好ましくは、書き込み要求が開始される現在の時刻を表す。図4に示すように、これらの書き込み開始メッセージ410及び412は、事前書き込みオペレーションを示すタイプ「WOrder」を有し、新しいタイムスタンプ値「8」を含む。
次に、他の指定されたストレージデバイスのそれぞれは、メッセージ410及び412に応答して、自身のローカルなlogTSタイムスタンプの現在の値及び自身のローカルなvalTSタイムスタンプの値を、コーディネータストレージデバイスから受信したnewTSタイムスタンプ値と比較する。ローカルなlogTSタイムスタンプ及びローカルなvalTSタイムスタンプの双方が、コーディネータデバイスから受信したnewTSタイムスタンプよりも小さい場合、このことは、それより後のlogTSタイムスタンプを有する別の保留中の書き込みオペレーション又は完了した書き込みオペレーションが現在存在しないことを示す。この場合、ストレージデバイスは、自身のローカルなlogTSタイムスタンプをその新しい値に更新し、肯定応答メッセージ又は「イエス」応答メッセージをコーディネータに返す。
そうでなく、進行中の近時の書き込みオペレーションが存在する場合、ストレージデバイスは、否定応答又は「ノー」応答で応答する。指定されたデバイスの過半数が、それらデバイスのタイムスタンプのいずれかについてより大きい値を有する場合、このことは、現在の書き込みオペレーションがそれより後の書き込みオペレーションを優先して中止されるべきであることを示す。その理由は、それより後の書き込みオペレーションのデータが、より最新である可能性があるからである。この場合、コーディネータは過半数の「ノー」応答を受信し、現在の書き込みオペレーションは中止される。コーディネータは、その後、新しい(後の)タイムスタンプを使用して、そのオペレーションを再試行することができる。
上記は、以下の式によって表すことができる。
If,
valTS(ローカル)<newTS,且つ、
logTS(ローカル)<newTS,
then,「イエス」を応答し、logTS(ローカル)=newTSに設定する;
otherwise,「ノー」を応答する (2)
図4の例を参照して、valTSは「4」であり、logTSは「5」である。双方の値はnewTS値「8」よりも小さいので、(縦線404によって表された)第2のストレージデバイスは、メッセージ414で「イエス」を返し、自身のlogTSタイムスタンプをnewTS値「8」に等しく設定する。同様に、valTS及びlogTSは、共に「5」に等しい。これは「8」よりも小さい。したがって、(縦線406によって表された)第3のストレージデバイスも、メッセージ416で「イエス」を返し、自身のlogTSタイムスタンプをnewTS値「8」に等しく設定する。その一方で、コーディネータデバイスも、自身のタイムスタンプvalTS及びlogTSをタイムスタンプnewTSと比較する。これら2つの値は共に「5」であり、これは「8」よりも小さいので、コーディネータデバイスも、「イエス」の回答を有し(ただし、この回答は転送される必要はない)、自身のlogTSタイムスタンプを「8」に等しく設定する。
この時点で、事前書き込みフェーズは完了し、指定されたストレージデバイスの3つのすべては初期化されて、書き込みオペレーションの第2フェーズを実行する。ただし、この第2フェーズはデバイスの過半数で進めることができる。したがって、この例では、第2フェーズは、指定されたデバイスの1つが「ノー」応答を返していたとしても進めることができる。
第2フェーズを実行するために、コーディネータデバイスは、メッセージタイプ「Write」を他の指定されたデバイスのそれぞれへ送信する。このメッセージタイプ「Write」は、書き込みオペレーションの第2フェーズを示し、データの新しいバージョン及びタイムスタンプnewTSを含む。これらのメッセージは、図4では、メッセージ418及びメッセージ420によってそれぞれ示されている。メッセージ418及びメッセージ420のそれぞれは、メッセージタイプ「Write」、データの新しいバージョン「y」、及び新しいタイムスタンプ「8」を含む。
次に、他の指定されたストレージデバイスのそれぞれは、メッセージ418及びメッセージ420に応答して、好ましくは、自身のローカルなlogTSタイムスタンプの現在の値及び自身のローカルなvalTSタイムスタンプの値を、コーディネータストレージデバイスからの「Write」メッセージで受信したnewTSタイムスタンプ値と比較する。この比較によって、現在のオペレーションの完了前に別の書き込みオペレーションが開始された場合に発生し得るように、それより後のlogTSタイムスタンプを有する別の保留中の書き込みオペレーション又は完了した書き込みオペレーションが現在存在しないことが確保される。
より詳細には、ローカルなvalTSタイムスタンプが、コーディネータデバイスから受信されたnewTSタイムスタンプよりも小さく、且つ、ローカルなlogTSタイムスタンプがnewTSタイムスタンプ以下である場合、このことは、それより後のタイムスタンプを有する別の保留中の書き込みオペレーション又は完了した書き込みオペレーションが現在存在しないことを示す。この場合、ストレージデバイスは、データをその新しい値に更新する。これに加えて、ストレージデバイスは、好ましくは、自身のローカルなvalTSタイムスタンプをnewTSタイムスタンプの値に更新し、肯定応答メッセージ又は「イエス」応答メッセージをコーディネータに返す。
そうでなく、進行中の近時の書き込みオペレーションが存在する場合、ストレージデバイスは、「ノー」応答で応答する。コーディネータが過半数の「ノー」応答を受信した場合、現在の書き込みオペレーションは中止される。
上記は、以下の式によって表すことができる。
If,
valTS(ローカル)<newTS,且つ、
logTS(ローカル)≦newTS,
then,「イエス」を応答し、valTS(ローカル)=newTS及びval(ローカル)=val(コーディネータ)に設定する;
otherwise,「ノー」を応答する (3)
図4の例を参照して、(縦線404によって表された)第3のストレージデバイスは、メッセージ422を介して「イエス」応答を返し、(縦線406によって表された)第2のストレージデバイスも、メッセージ424を介して「イエス」を返す。その一方で、コーディネータデバイスも、自身のタイムスタンプvalTS及びlogTSをタイムスタンプnewTSと比較する。コーディネータデバイスも、「イエス」の回答を有し(ただし、この回答は転送される必要はない)、自身のvalTSタイムスタンプを「8」に等しく設定し、自身のデータのバージョンvalを「v」に設定する。
これに加えて、コーディネータは、ストレージデバイスの過半数が書き込みオペレーションの第2フェーズについて「イエス」回答を返したと判断すると、リプライメッセージを要求者に送信する。コーディネータ及び第3のデバイス、したがって、過半数が第2のフェーズを確認したので、図4に示すように、コーディネータが第3のデバイスからリプライメッセージ422を受信するとすぐにメッセージ426を送信することができる。
この場合、メッセージ424がたとえ「ノー」回答を含んでいたとしても、過半数は、オペレーションが成功したことを示す「イエス」回答を返したので、第2のデバイスからのリプライメッセージ424を無視することができる。
別の態様では、本発明は、修復オペレーションを実行するための技法を提供する。書き込みオペレーションデバイスのコーディネータが、事前書き込みメッセージを送信した後であって、書き込みオペレーションを完了する前に障害を受けたことから、書き込みオペレーションは失敗したものと仮定する。この場合、失敗した書き込みオペレーションが試みられた、データ(例えば、ブロック)を記憶するように指定されたストレージデバイスは、コーディネータのvalTSタイムスタンプよりも大きなlogTSタイムスタンプを有する。別の例として、ストレージデバイスが書き込みオペレーションの事前書き込みメッセージ及び書き込みメッセージを受信することが、通信エラーによって妨げられていた場合がある。この場合、そのストレージデバイスは、このデータブロックについて、そのデータブロックを記憶するように指定された他のストレージデバイスのvalTSタイムスタンプとは異なるvalTSタイムスタンプを有する。いずれの場合も、読み出しオペレーションがそのデータについて要求されると、この読み出しオペレーションのコーディネータデバイスは、他のデバイスが、コーディネータによって送信された読み出しメッセージに応答して「ノー」リプライを返した時に、これらの障害を検出する。この場合、この障害を検出したコーディネータは、修復オペレーションを開始して、データブロックを、そのブロックを記憶するように指定されたデバイス間で一致したものに戻すことができる。修復オペレーションは、データを読み出す試みが行われた場合にのみ実行されるので、本発明のこの態様では、その後に必要とされないデータを修復する等の不必要なオペレーションが回避される。
要約すると、修復オペレーションは2つのフェーズで実行される。初期化フェーズでは、修復オペレーションのコーディネータが、指定されたデバイスのいずれがデータブロックの最も新しいバージョンを有するかを判断する。第2フェーズでは、コーディネータが、データの最も新しいバージョンをデバイスに書き込む。その上、指定されたデバイスにおけるブロックのタイムスタンプも更新される。
図5は、本発明の一実施の形態による、修復オペレーションを実行するための例示のタイミング図500を示している。複数のストレージデバイス102を含めて、図1のストレージシステム100のオペレーションは、図5のタイミング図に従って制御することができる。
図5の3つの縦線502、504、及び506のそれぞれは、図1の3つのストレージデバイス102のそれぞれを表している。これらのうち、左端の縦線502は、修復オペレーションのコーディネータとして動作しているストレージデバイスを表し、他の線504及び506は、他の指定されたデバイスを表している。
図5の例では、修復オペレーションを実行する前に、3つのストレージデバイスの第1のもの(すなわち、コーディネータ)は、書き込まれるロケーションのデータについての自身の現在の値としてval=「v」を有し、自身のタイムスタンプvalTS及びlogTSは同じであり、「5」に等しい。これに加えて、3つのストレージデバイスの第2のものは、書き込まれるロケーションのデータについての自身の値としてval=「x」を有し、自身のタイムスタンプvalTS及びlogTSは同じであり、「4」に等しい。ストレージデバイスの第3のものでは、データについての自身の値はval=「v」であり、自身のタイムスタンプvalTS及びlogTSは同じであり、「5」に等しい。
修復オペレーションは、コーディネータデバイスが、失敗した読み出しオペレーションを検出した時に開始することができる。図3を参照して、例えば、メッセージ314が喪失された場合、コーディネータは、過半数の確認応答を受信しないことになる。このことは、図5では、コーディネータデバイスの時間表502の始点の近くにある表記「失敗した読み出し」によって示されている。コーディネータデバイスは、修復開始メッセージ508及び修復開始メッセージ510を他の指定されたデバイスへ送信することによって修復オペレーションを開始する。図5に示すように、これらの修復開始メッセージ508及び修復開始メッセージ510は、修復オペレーションを示すタイプ「ROrder」を有し、新しいタイムスタンプ値「8」のnewTSを含む。この新しいタイムスタンプ値は、好ましくは、修復オペレーションが開始された現在の時刻を表す。
他の指定されたストレージデバイスのそれぞれは、修復開始メッセージ508及び修復開始メッセージ510に応答して、自身のローカルなlogTSタイムスタンプの現在の値及び自身のローカルなvalTSタイムスタンプの値を、コーディネータストレージデバイスから受信した新しいタイムスタンプ値newTSと比較する。ローカルなlogTSタイムスタンプ及びローカルなvalTSタイムスタンプの双方が、コーディネータデバイスから受信したnewTSタイムスタンプよりも小さい場合、このことは、それより後のタイムスタンプを有する保留中の書き込みオペレーション又は完了した書き込みオペレーションが現在存在しないことを示す。この場合、ストレージデバイスは、自身のローカルなlogTSタイムスタンプをnewTSタイムスタンプの値に更新し、肯定応答メッセージ又は「イエス」応答メッセージをコーディネータに返す。これに加えて、各ストレージデバイスは、訂正されるデータブロックの現在のバージョン、及び、自身のvalTSタイムスタンプも返す。
そうでなく、進行中の近時の書き込みオペレーションが存在する場合、ストレージデバイスは、否定応答又は「ノー」応答で応答する。指定されたデバイスの過半数が、それらデバイスのタイムスタンプのいずれかについてより大きい値を有する場合、このことは、修復オペレーションがそれより後に発生する書き込みオペレーションを優先して中止されるべきであることを示す。その理由は、それより後の書き込みオペレーションのデータが、より最新である可能性があるからである。この場合、コーディネータは過半数の「ノー」応答を受信し、現在の書き込みオペレーションは中止される(ただし、元の読み出しオペレーションは再試行することができる)。
上記は、以下の式によって表すことができる。
If,
valTS(ローカル)<newTS,且つ、
logTS(ローカル)<newTS,
then,「イエス」を応答し、logTS(ローカル)=newTSに設定する;
otherwise,「ノー」を応答する (4)
したがって、図5に示すように、第2の指定されたストレージデバイスはメッセージ512で応答し、このメッセージ512は、「yes」応答、データコンテンツ「x」、及び第2の指定されたストレージデバイスのvalTSタイムスタンプ「4」を含む。これに加えて、第3の指定されたストレージデバイスは、メッセージ514で応答し、このメッセージ514は、「yes」応答、データコンテンツ「v」、及びvalTSタイムスタンプ「5」を含む。その一方で、コーディネータは、自身のデータをチェックし、自身も「イエス」回答を有すると判断する(ただし、この回答は転送される必要はない)。コーディネータのデータのバージョンvalは「v」であり、コーディネータのvalTSタイムスタンプは「5」に等しい。デバイスのすべてが「イエス」回答を返したので、各デバイスは、好ましくは、自身のlogTSタイムスタンプをnewTS値に設定する。このnewTS値は、この例では「8」である。
次に、コーディネータは、どのストレージデバイスがデータの最新バージョンを有するかを判断する。これは、好ましくは、コーディネータが、他のデバイスから受信したvalTSタイムスタンプ及び自身のvalTSタイムスタンプを比較して、どのvalTSタイムスタンプが最新であるかを判断することによって行われる。次に、コーディネータは書き込みオペレーションを開始する。この書き込みオペレーションでは、データの最新バージョンが、一致しないあらゆるバージョンに取って代わる。この例では、最新のvalTSタイムスタンプは「5」であり、このタイムスタンプは、コーディネータ及び第3のストレージデバイスのvalTSタイムスタンプである。第2のデバイスは、古いタイムスタンプ「4」及びデータの異なるバージョン「x」を有する。valTSタイムスタンプ「5」に関連したデータのバージョンは「v」である。したがって、バージョン「v」は、好ましくは、コーディネータによって選択されて、第2のストレージデバイスのバージョン「x」に取って代わる。
この書き込みオペレーションは、コーディネータデバイスがメッセージタイプ「Write」を他の指定されたデバイスのそれぞれへ送信することによって行われる。このメッセージタイプ「Write」は、データの新しいバージョン及びタイムスタンプnewTSを含む。これらのメッセージは、図5では、メッセージ516及びメッセージ518によってそれぞれ示されている。メッセージ516及びメッセージ518のそれぞれは、メッセージタイプ「Write」、データの新しいバージョン「v」、及び新しいタイムスタンプ「8」を含む。メッセージ516及びメッセージ518は、フォーマットが、書き込みオペレーションの第2フェーズを実行するために送信されたメッセージ420及びメッセージ422(図4)と同一にできることに留意されたい。
次に、図4の書き込みオペレーションの第2フェーズと同様に、他の指定されたストレージデバイスのそれぞれは、メッセージ516及びメッセージ518に応答して、好ましくは、自身のローカルなlogTSタイムスタンプの現在の値及び自身のローカルなvalTSタイムスタンプの値を、コーディネータストレージデバイスからの「Write」メッセージで受信したnewTSタイムスタンプ値と比較する。この比較によって、現在の修復オペレーションの完了前に書き込みオペレーションが開始された場合に発生し得るように、それより後のタイムスタンプを有する別の保留中の書き込みオペレーション又は完了した書き込みオペレーションが現在存在しないことが確保される。そうでなく、進行中の近時の書き込みオペレーションが存在する場合、ストレージデバイスは、「ノー」応答で応答する。修復オペレーションの第2フェーズのこの評価は、上記式(3)によって表すことができる。これに加えて、デバイスは、それらのローカルなlogTSタイムスタンプであるlogTS及びlogTSをnewTS値「8」に更新する。
図5の例を参照して、(縦線504によって表された)第3のストレージデバイスは、メッセージ520を介して「イエス」応答を返し、(縦線506によって表された)第2のストレージデバイスも、メッセージ522を介して「イエス」を返す。したがって、これらのデバイスは、valTSタイムスタンプ及びvalTSタイムスタンプをnewTS値「8」に設定し、自身のデータのバージョンval及びvalを「v」に更新する。その一方で、コーディネータデバイスも、自身のタイムスタンプvalTS及びlogTSをタイムスタンプnewTSと比較する。コーディネータデバイスも、「イエス」の回答を有し(ただし、この回答は転送される必要はない)、自身のvalTSタイムスタンプを「8」に等しく設定し、自身のデータのバージョンvalを「v」に設定する。
コーディネータは、ストレージデバイスの過半数が修復オペレーションの第2フェーズについて「イエス」回答を返したと判断すると、データ値「v」を含むリプライメッセージ524を要求者に送信することができる。このリプライは、好ましくは、修復オペレーションが、失敗した読み出しオペレーションに応答して開始された場合に送信される。したがって、リプライ524は、読み出しオペレーションによって要求されたデータを返す。コーディネータ及び第3のデバイス、したがって過半数が、修復オペレーションの第2フェーズを確認しているので、図5に示すように、コーディネータが第3のデバイスからメッセージ520を受信するとすぐにメッセージ524を送信することができる。この場合、メッセージ522がたとえ「ノー」回答を含んでいたとしても、過半数は、オペレーションが成功したことを示す「イエス」回答を返したので、第2のデバイスからのメッセージ522を無視することができる。
2つのタイムスタンプvalTS及びlogTSが各データブロックに関連付けられ、これらのタイムスタンプのそれぞれが12バイト長であると仮定する。上述したように、各タイムスタンプは、現在の時刻を示す値、及び、同一のタイムスタンプが生成されることを回避するための、各デバイス102に一意の識別子を含むことができる。また、各データブロックは1KB(1キロバイト)であり、図1のストレージシステム100は1TB(1テラバイト)の容量を有するものと仮定する。これらの数字は、タイムスタンプを記憶するのに、最大12GB(12ギガバイト)の容量が必要される場合があることを意味する。タイムスタンプは、好ましくは、高速で永続的なストレージに保持されるので、不揮発性メモリ(NV−RAM)が望ましい。しかしながら、十分な容量のNV−RAMを提供することは多額の費用を要する。
このように、本発明の一態様によれば、タイムスタンプに必要なストレージ容量を削減するようにタイムスタンプを管理するための技法が提供される。より詳細には、上述した読み出しオペレーション、書き込みオペレーション、及び修復オペレーションについて、タイムスタンプは、(logTSの場合のように)データに対する同時更新のあいまいさをなくすのに使用され、(valTSの場合のように)失敗の結果を検出して修復するのに使用されることに注目することができる。したがって、一態様では、データブロックの複製のすべてが機能している場合、そのデータの複製を保持する各デバイス102が更新の事実を確認した後は、タイムスタンプは廃棄することができる。したがって、書き込みオペレーション及び修復オペレーションの場合、指定されたデバイスのすべてがリプライした後、コーディネータが、指定されたデバイスにデータブロックのタイムスタンプを廃棄するように指示する第3フェーズを実行することができる。代替的に、各デバイス102は、自身のvalTSタイムスタンプが自身のlogTSタイムスタンプと等しいかどうかを判断し、等しい場合には、それらタイムスタンプの一方(例えば、logTSタイムスタンプ)を削除することができる。
このように、各ストレージデバイス102は、アクティブに更新されているデータブロックのタイムスタンプを保持することのみ必要である。或る失敗が1つ又は複数の複製に影響を与える場合、データが修復されるか、又は、その失敗がその他の方法で対処される(例えば、システム100が再構成される)まで、他のデバイス102は、そのデータについての自身のタイムスタンプを保持する。
別の態様では、単一の書き込み要求は、通常、複数のデータブロックを更新するので、これらのデータブロックのそれぞれは、同じタイムスタンプを有する。したがって、タイムスタンプは、各データブロックについてではなく、或る範囲のデータブロックについて保持することができる。例えば、8つの連続したデータブロック「Block」から「Block」が同じ書き込み要求によって更新される場合、各ブロックにつき1つの計8つのタイムスタンプエントリを保持するのではなく、8つのブロックすべてについて単一のタイムスタンプエントリを保持することができる。タイムスタンプは、データ構造体のエントリとして保持することができる。各エントリは以下のフォームを有することができる。
[start,end,timestamp(s)] (5)
ここで、start(スタート)はこの範囲の始点を特定し、end(エンド)はこの範囲の終点を特定し、timestamp(s)(タイムスタンプ)は、この範囲のブロックのすべてに適用される。この例では、2つのタイムスタンプについての単一のエントリは、以下のフォームを取ることができる。
[Block,Block,valTS1−9,logTS1−9] (6)
この場合、valTSタイムスタンプ及びlogTSタイムスタンプの双方について、単一のデータ構造体を保持することができる。代替的に、2つのタイムスタンプのそれぞれにつき1つの計2つのエントリを保持することもできる。この場合、2つのタイムスタンプのそれぞれにつき1つの計2つのデータ構造体を保持することができる。この例では、これら2つのエントリは次のフォームを取ることができる。
[Block,Block,valTS1−9] (7)
及び
[Block,Block,logTS1−9] (8)
上記例示のエントリの範囲のendは、その範囲内にある8つのブロックの後の次のブロックによって特定されることに留意されたい。したがって、上記エントリ(6)は、9番目のブロックを示すBlockを含むのに対して、関連付けられたタイムスタンプの範囲内には8つのブロックのみがある。エントリに含まれるendがその範囲内の最後のブロックである等の代替的な規約も使用することができる。例えば、上記エントリ(6)は、代わりに次のフォームを取る。
[Block,Block,valTS1−8,logTS1−8] (9)
ここで、「Block」は、この範囲の最後のブロックである8番目のブロックを示す。
好ましい実施の形態では、上記タイムスタンプエントリは、区間木のようなデータ構造に保持され、詳細には、B木データ構造体に保持される。図6は、本発明の一態様による、タイムスタンプを保持するためのB木データ構造体600を示している。図6に示すように、データ構造体600は複数のキー値対を含む。ここで、キーは昇順に配列され、各キーは、上記フォーム[start,end,timestamp(s)]のタイムスタンプエントリに対応する値又はエントリに関連付けられる。各エントリは、好ましくは、或る範囲のデータブロックをカバーする。この範囲は他のどのエントリの範囲とも重ならない。したがって、図6では、start及びendによって特定された範囲は、start及びendによって特定された範囲とは重ならない。さらに、エントリは、好ましくは、startの値の昇順で配列され、ここで、start値はキーとしても働く。
データ構造体600は、好ましくは、ストレージデバイス102によって記憶されたデータブロックのタイムスタンプを保持するために、各ストレージデバイス102によって保持される。データ構造体600は、好ましくは、NV−RAM116(図2)に記憶される。
以下のオペレーションは、データ構造体600を操作するのに使用することができる。
find−largest(base):base(ベース)の値が与えられると、データ構造体において、key(キー)≦baseとなるような最大のkeyを有するエントリが返される。このようなエントリがデータ構造体に存在しない場合、オペレーションは、baseよりも大きな最小のkeyを有するエントリを返すことができる。本発明によれば、startをこのオペレーションのbaseとして使用して、等しいstart又は次の最も低いstartを有するタイムスタンプエントリを突き止めることができ、このようなエントリがデータ構造体に存在しない場合には、次の最も高いstartを有するタイムスタンプエントリを突き止めることができる。このようなエントリは、データ構造体に挿入される新しいエントリと重なる可能性がある。エントリがデータ構造体に記憶されていない場合、このオペレーションは、好ましくは、リスト終了指示子を返す。
find−next(base):baseの値が与えられると、keyが、key>baseとなるような最小のkeyであるエントリが返される。本発明によれば、startをこのオペレーションのbaseとして使用して、次の最も高いstartを有するタイムスタンプエントリを突き止めることができる。このようなエントリがデータ構造体に存在しない場合、このオペレーションは、好ましくは、リスト終了指示子を返す。
insert(entry):データ構造体における、keyによって特定されたロケーションにentry(エントリ)が挿入される。本発明によれば、このオペレーションは、フォーム[start,end,timestamp]のエントリをデータ構造体に挿入するのに使用することができる。
replace(entry):キーによって特定されたエントリがentryと取り替えられる。本発明によれば、このオペレーションは、フォーム[start,end,timestamp]のエントリを異なるend及び/又はtimestampを有するエントリと取り替えるのに使用することができる。
図7は、本発明の一実施の形態による、図6のデータ構造体を保持するための方法700のフロー図を示している。この方法700は、好ましくは、各ストレージデバイス102(図1〜図2)に含まれて、各ストレージデバイス102の関連したデータ構造体を保持するためのハードウェア及び/又はソフトウェアによって実施される。方法700は、データ構造体600をタイムスタンプに関して現在に維持するように、データ構造体600のエントリを変更又は追加すると同時に、タイムスタンプは、本明細書で説明したように、書き込みオペレーション及び修復オペレーションを実行することに応答等して変更される。
書き込みオペレーション又は修復オペレーションが実行されると、一般に、データ構造体600における或る範囲のデータブロックのタイムスタンプを更新して、データ構造体600を現在に維持する必要がある。方法700は、好ましくは、或るデータブロック又は或る範囲のデータブロックのタイムスタンプが更新されるごとに実行される。例えば、図4に関して上述したような書き込みオペレーションの初期化フェーズは、或る範囲のデータブロックのlogTSタイムスタンプの更新を必要とすることがある。したがって、フォーム[start,end,timestamp(s)]のエントリが、データ構造体600に追加されることになる。ここで、startは、影響を受けたブロックの範囲の開始を特定し、endは、その範囲の終了を特定し、timestampはその範囲のデータブロックのlogTSタイムスタンプの新しい値を表す(これらブロックのvalTSタイムスタンプの古い値もエントリに含めることができる)。したがって、図7を参照して、このフォームの新しいエントリが、例えば、書き込みオペレーションの第1フェーズの期間中にステップ702で生成される。この新しいエントリによって特定された範囲のブロックは、データ構造体600にすでにある範囲のエントリの一部と重なる場合がある。したがって、この方法は、新しいタイムスタンプをデータ構造体600に追加すると同時に、データ構造体600のこれらエントリが、確実に、重なる範囲を有しないようにする。
ステップ704において、ステップ702で生成された新しいエントリからのstartをbaseとして使用して、find−largest(base)オペレーションを実行することができる。上述したように、find−largest(base)オペレーションは、データ構造体において、等しいstart又は次の最も低いstartを有するエントリを突き止め、そのようなエントリがデータ構造体にない場合には、このオペレーションは、次の最も高いstartを有するタイムスタンプエントリを突き止める。エントリがステップ704で突き止められた場合、そのエントリは、本明細書では、「カレントエントリ(current entry)」と呼ばれ、[cur_start,cur_end,timestamp(s)]として与えることができる。
図8Aは、エントリがデータ構造体600に追加される範囲802と、ステップ704で特定されたカレントエントリの範囲804との間に起こり得る関係を示している。図8の略図は、データブロックのすべてが、連続した順序で配列されているものと仮定する。追加されるエントリ[start,end,timestamp(s)]のデータブロックの範囲802は、図8Aでは、位置「S」で開始し、位置「E」で終了するものとして示されている。ステップ704で特定されたカレントエントリ[cur_start,cur_end,timestamps(s)]のデータブロックの範囲804は、図8Aでは、位置「CS」で開始し、位置「CE」で終了するものとして示されている。図8Aは、範囲802が範囲804よりも前にあり、それら範囲の間に重なりがないことを示している。範囲802と範囲804との間に起こり得る他の関係は、図8A〜図8Hに示されている。
ステップ706において、カレントエントリがデータ構造体600の最後のエントリであるかどうかについての判断を行うことができる。この判断は、例えば、カレントスタート(すなわち、「cur_start」又は「CS」)が、データ構造体600のリスト終了指示子に関連付けられているかどうかをチェックすることによって行うことができる。カレントエントリがデータ構造体600の最後のエントリである場合、これは、この方法の停止条件に到達したことを示す。この停止条件は、データ構造体600が最初にエントリを有しない場合に、ステップ706を最初に通過する間に起こり得る。この場合、find−largest(base)オペレーションは、リスト終了指示子を返す。そうでない場合、この停止条件は、その後にステップ706を通過する際に起こり得る。この場合、プログラムフローは、ステップ748で終了することができる。
これに加えて、ステップ706において、データ構造体600に追加されるエントリのstartが、その追加されるエントリのendよりも小さいかどうかについての判断を行うことができる。これは、一般に、ステップ706を最初に通過する場合である。一方、その後にステップ706を通過する際には、方法700の他のステップに従って実行された挿入オペレーション又は取り替えオペレーションが、startがendに等しくなるように範囲802を縮小させている場合がある(すなわち、すべてのデータブロックは処理されてデータ構造体に追加されている)。
ステップ706を最初に通過する際、データ構造体600が、最初にエントリを有しない場合、プログラムフローはステップ708に移動する。ステップ708において、新しいエントリ[start,end,timestamp(s)]が木に挿入される。これは、insert(base)オペレーションを使用して行うことができる。次に、プログラムフローは、ステップ710で終了することができる。
一方、ステップ706を最初に通過する際に、データ構造体が1つ又は複数のエントリを有する場合、プログラムフローはステップ712に移動する。ステップ712において、cur_startがstartよりも大きいかどうかについての判断が行われる。図8A、図8B、及び図8Cは、この条件を満たす、範囲802と範囲804との間の関係を示している。この条件が満たされる場合、プログラムフローはステップ714に移動する。ステップ714において、endがcur_start以下であるかどうかについての判断が行われる。この条件は図8Aによって満たされる。したがって、範囲802及び範囲804は、図8Aに示すようなものとなり、それらの範囲の間に重なりはなく、新しいエントリは、ステップ716で、フォーム:insert[start,end,timestamp(s)]のinsertオペレーションを使用して木600に挿入することができる。次に、プログラムフローは、ステップ718で終了することができる。
ステップ714の条件が満たされない場合、範囲802と範囲804との間の関係は図8B又は図8Cに示すようなものとなる。この場合、範囲802と範囲804との間に重なりがある。図8B及び図8Cでは、「S」と「CS」との間に、新しいタイムスタンプが入ることになる範囲が存在することに留意されたい。したがって、ステップ720において、この範囲は、フォーム:insert[start,cur_start,timestamp(s)]のinsertオペレーションを使用してデータ構造体600に挿入することができる。この場合、「S」から「CS」までの範囲はデータ構造体600に入れられているので、startは、ステップ722において、cur_startに等しく設定することができる。したがって、ステップ720及びステップ722を実行した後、図8Bに示す関係は、図8Eに示す関係に変換される。同様に、図8Cに示す関係も、図8Dに示す関係に変換される。
ステップ712において、cur_startがstartよりも大きいかどうかについての判断が行われたことを思い出されたい。この条件が満たされない場合、範囲802と範囲804との間の関係は、図8D〜図8Hの1つのように示すことができる。したがって、ステップ712又はステップ722から、プログラムフローはステップ724に移動し、ステップ724において、cur_startがstartに等しいかどうかについての判断を行うことができる。この条件は、図8D及び図8Eでは満たされる。この場合、プログラムフローは状態726に移動することができ、状態726において、endがcur_end以上であるかどうかについてのさらなる判断を行うことができる。endがcur_endよりも小さい場合、この状況は、図8Eのように示すことができる。この場合、「S」と「E」との間の範囲のタイムスタンプは、ステップ728において、フォーム:replace[cur_start,end,timestamp(s)]のreplaceオペレーションを使用することにより取り替えることができる。この場合、startがcur_startに等しいので、代替的に、次のフォーム:replace[start,end,timestamp(s)]も使用することができる。次に、ステップ730において、フォーム:insert[end,cur_end,cur_timestamp(s)]のinsertオペレーションを使用して、ステップ732において、「E」と「CE」との間の範囲をデータ構造体600に挿入することができる。次に、プログラムフローは、ステップ732で終了することができる。
ステップ724において、cur_startがstartに等しいかどうかについての判断が行われたことを思い出されたい。この条件が満たされない場合、範囲802と範囲804との間の関係は、図8F、図8G、又は図8Hのように示すことができる。次に、ステップ734において、cur_endがstart以下であるかどうかについての判断を行うことができる。この条件が満たされる場合、範囲802と範囲804との間の関係は、図8G又は図8Hのように示すことができる。次に、ステップ736において、endがcur_end以上であるかどうかについての判断を行うことができる。この条件が満たされない場合、範囲802と範囲804との間の関係は、図8Hにように示すことができる。この場合、「CS」と「S」との間の範囲のタイムスタンプは、ステップ738において、フォーム:replace[cur_start,start,cur_timestamp(s)]のreplaceオペレーションを使用して更新することができる。そして、「E」と「CE」との間の範囲のタイムスタンプは、ステップ740において、フォーム:insert[end,cur_end,cur_timestamp(s)]のreplaceオペレーションを使用して更新することができる。「S」と「E」との間の範囲については、フォーム:insert[start,end,timestamp(s)]のreplaceオペレーションをステップ742で実行することができる。次に、プログラムフローは、ステップ744で終了することができる。
ステップ734において、cur_endがstart以下であるかどうかについての判断が行われたことを思い出されたい。この条件が満たされる場合、範囲802と範囲804との間の関係は、図8Fのように示すことができる。この場合、データ構造体600の別の既存のエントリが範囲802と重なる可能性がある。より詳細には、cur_endがendの前に現れるので、別のエントリがstartの後に開始して範囲802と重なる範囲を有する可能性がある。このようなエントリは、ステップ704のfind−largest(base)オペレーションを使用して見つけられていないことになる。例えば、このようなエントリは、図8B又は図8Cに示すような範囲804を有する場合がある。したがって、このようなエントリを特定するために、ステップ746において、baseとしてstartを使用してfind−next(base)オペレーションを実行することができる。この新しいエントリは、その後、[cur_start,cur_end,cur_timestamp(s)]の代わりとなってさらに処理される。ステップ746から、プログラムフローはステップ706に戻り、ステップ706において、方法700は、基本的には、この新しく特定されたエントリに対して繰り返される。ステップ706において、リスト終了指示子が返される場合、このことは、リストの終了(「もはやデータは存在しない」状況)に到達しており、このような重なるエントリが存在しないことを示すことに留意されたい。したがって、プログラムフローは、ステップ748で終了することができる。
また、ステップ726において、endがcur_end以上であるかどうかについての判断が行われたことも思い出されたい。この条件が満たされる場合、範囲802及び範囲804は、図8Dのように示すことができる。この場合、「CE」から「E」への範囲のタイムスタンプは、ステップ750において、フォーム:replace[cur_start,cur_end,timestamp(s)]のrepalceオペレーションを実行することにより更新することができる。次に、「CE」から「E」への範囲が残っているので、startは、ステップ752でcur_endに等しく設定することができる。次に、プログラムフローは、ステップ746に移動することができる。ステップ746において、find−next(base)オペレーションを使用して、他のいずれかのエントリが、startとendとの間に残っている範囲と重なるかどうかを判断することができる。
また、ステップ736において、cur_endがstart以下であるかどうかについての判断が行われたことを思い出されたい。この条件が満たされる場合、範囲802及び範囲804は、図8Gのように示すことができる。この場合、「CS」から「S」への範囲のタイムスタンプは、ステップ754において、フォーム:replace[cur_start,start,cur_timestamp(s)]のreplaceオペレーションを実行することにより更新することができる。「S」から「CE」への範囲のタイムスタンプは、ステップ756において、フォーム:insert[start,cur_end,timestamp(s)]のinsertオペレーションを実行することにより更新することができる。次に、「CE」から「E」への範囲が残っているので、startは、ステップ758でcur_endに等しく設定することができる。次に、プログラムフローは、ステップ746に移動することができ、ステップ746において、find−next(base)オペレーションを使用して、他のいずれかのエントリが、startとendとの間に残っている範囲と重なるかどうかを判断することができる。
このプロセスは、プログラムが終了状態710、718、732、744、又は748の1つで終了するまで続く。要約すると、図7の方法は、追加されるエントリと重なる可能性のある、データ構造体のすべての既存のレコードを特定する。重なりがある場合、更新されたデータブロックの新しいタイムスタンプが記録され、既存のデータブロックの既存のタイムスタンプが維持されるように、既存のレコードが分割される。このプロセスは、データブロックの範囲が重ならないようにデータ構造体600のエントリを維持する。
このように、冗長データを記憶するための複数のストレージデバイスを有するコンピュータシステムのタイムスタンプを管理するための技法が説明された。
図1のデバイス102等のストレージデバイスにデータを割り当てることが望まれる場合がある。したがって、本発明の別の態様によれば、冗長データを記憶するための複数のストレージデバイスを有するコンピュータシステムにおいてデータを割り当てるための技法が提供される。本明細書では、データ「ストア」は、アプリケーション(例えば、ソフトウェアアプリケーション)に提供される、論理的に連続したストレージブロック、ストライプ状のデータストレージ、または連鎖状のデータストレージ等のデータストレージ空間とすることができる。実際には、ストアは、データブロック等のデータ要素の挿入、除去、又は操作を行うことができる論理ボリュームとして実施することができる。
図9は、本発明の一実施の形態による、ストレージデバイスノードにデータストアを割り当てるための方法800のフロー図を示している。この方法800は、図1のコンピュータシステム100内で実施することができる。例えば、サーバ106は、方法800を実行するように適切に構成されたソフトウェア及び/又はハードウェアを含むことができる。しかしながら、方法800は、ストレージデバイス102又はサーバ106の1つ又は複数で動作する分散アプリケーションによる等、他の場所で実行することもできるし、方法800の少なくとも一部を手動で実行することもできることは明らかであろう。さらに、サーバ106の1つは、方法800を実行して、システム100内のロケーションへのデータの割り当ても制御するメタサーバとして指定することもできる。
最初に、システム100に割り当てられるデータストアが、より小さな要素に分割される。例えば、ステップ802において、システム100に割り当てられるデータストアは、それぞれ、「セグメント」と呼ばれる複数の連続した部分に分割することができる。各セグメントは、1セグメントあたり8ギガバイト等の所定のデータ容量を有することができる。ただし、別の容量又は異なる容量も選択できることは明らかであろう。
次に、ステップ804において、セグメントをグループに配置することができる。ここで、各グループは複数のセグメントを含む。グループは、それぞれ、1つのグループあたり128個のセグメント等の所定の個数のセグメントを含むことができる。ただし、別の個数又は異なる個数のセグメントを各グループに割り当てることができることは明らかであろう。
ステップ804において、セグメントを、ストア内におけるその位置に従って、順次、グループにすることができる。代替的に、負荷バランスの考慮に基づいて、セグメントをグループに割り当てることもできる。例えば、予想されたデータスループット(すなわち、単位時間あたりの総アクセス)を各ストアについて知ることができる。ストアの各セグメントは、ストア及びセグメントの相対的な容量に比例したスループットを有するものと仮定することができる。次に、各グループが他のグループのスループットと等しいスループットを有すると予想されるように、セグメントをグループに割り当てることができる。
ステップ806において、1つのグループが選択される。順番に又はランダムにグループを選択することができる(本明細書では、「ランダム」選択は、擬似ランダム選択も包含する)。ステップ808において、選択されたグループに対応できるように利用可能な十分な資源を有するストレージデバイスノード102(図1)が特定される。少なくとも、これは、十分なストレージ容量を有するノード102を特定することを含むが、他のパラメータに基づくこともできる。例えば、これは、利用可能な十分な量のデータスループット容量等の性能パラメータを有するノード102を特定することを含むことができる。また、これは、可用性要件及び信頼性要件を満たすノードを特定することも含むことができる。例えば、仕事負荷は、M個のすべてのノードが100万時間を超える平均故障間隔(MTTF)を個々に有することを必要とすることもあるし、M個のノードが物理的に別々のラックに配置されることを必要とすることもある。好ましくは、容量要件及び場合によっては追加要件を満たすこのようなすべてのデバイス102が、ステップ808で特定される。
本明細書で説明したように、データは、システム100に冗長に記憶される。例えば、複製の個数がMに等しい場合、各データブロックの3つ又は4つ以上の複製がシステム100に記憶される。ステップ810において、ステップ806で選択されたグループのコピーに対応できるように、少なくともM個のノード102がステップ808で特定されたかどうかについての判断が行われる。少なくともM個のノード102が特定されない場合、このことは、グループが小さくされない限り、グループのデータの必要なM個の複製をシステム100の異なるノード102に割り当てることができないことを意味する。各グループは複数のセグメントを含むので、グループは、一般に、より小さなグループに分割可能である。したがって、ステップ810の判断が否定的である場合、グループをさらに分割して、その結果生成されたグループが前よりも低い要件を有するようにすることによって、ステップ804を繰り返すことができる。これは、グループを2つ又は3つ以上のより小さなグループに分割することによって行うこともできるし、グループのセグメントの1つ又は複数を異なるグループに再割り当てすることによって行うこともできる。その後、ステップ808の次の通過の際には、そのグループに対応できるノード102が前よりも多く存在することを予想することができる。このプロセスは、グループに対応できる少なくともM個のノード102が見つかるまで繰り返される。
次に、ステップ812において、グループがM個のノード102に割り当てられる。M個よりも多くのノードがステップ808で特定された場合、特定されたノード102のサブセットがそのグループ用にステップ812で選択される。この選択は、好ましくは、ランダムに行われる。この選択をグループのすべてについてランダムに行うことによって、グループのすべての割り当てがデバイス102間でバランスされると予想され、それによって、ストレージオペレーションが少数のデバイス102に集中する「ホットスポット」の発生が低減される。
グループが割り当てられると、好ましくは、データストアのノード102への割り当ての経過を追跡するためのデータロケーションテーブルへのエントリが作成される。図10は、本発明の一実施の形態による、ストレージデバイスノード102へのデータの割り当てを追跡するための例示のテーブル900を示している。このテーブル900は、例えば、サーバ106の1つ又は複数によって保持することができる。
図10に示すように、テーブル900は、(例えば、データブロックによる)データの識別情報及び(例えば、ストレージデバイスノード102による)そのロケーションを含む。例示のエントリ902は、或るグループがデータブロック#1〜180を含み、ノード#3、ノード#7、及びノード#12によって冗長に記憶されるように割り当てられていることを示す。同様に、例示のエントリ904は、データブロック#181〜257を含むグループがノード#1、ノード#4、及びノード#9に割り当てられることを示す。このように、テーブル900は、システム100のデータのすべてのロケーションを示す。これらの例では、データは、そのブロック識別情報によって特定される。しかしながら、グループの識別情報又はセグメントの識別情報による等、別の方法でデータを特定できることは明らかであろう。
ステップ814において、グループのすべてがシステム100に割り当てられたかどうかについての判断が行われる。割り当てられていない場合、ステップ806に戻って、セグメントの次のグループを選択することにより、上述したプロセスが繰り返される。次に、ステップ808において、この次のグループに対応するためのノードが特定され、少なくともM個のノードがステップ810で特定されると、このグループが、ステップ812において、システム100の選択されたノード102に割り当てられる。グループのすべてがこのように割り当てられると、プログラムフローは、ステップ816で終了することができる。
このように、システム100のストレージデバイスノード102にデータを割り当てるための技法が説明された。要約すると、この技法は、ノード102がデータの集合(例えば、セグメントのグループ)に対応できるかどうかを判断する資格を当該ノード102に与えること、及び、次に、資格を与えられたそれらノード102の中からランダムに選択を行うことを含む。この技法は、(ノードに資格を与えることによる)決定論的な割り当ての態様、及び、(資格を与えられたノードの中からランダムに選択することによる)ランダムな割り当ての態様を組み合わせたものである。この決定論的な態様によって、割り当てが行われる前に、ノードに割り当ての資格が適切に与えられることが確保され、これによって、データを再割り当てしなければならない可能性が回避される。上述したように、ランダムな態様によって、割り当てがバランスされることが予想される。本発明のこの態様は、このようにして、単に決定論的又は単にランダムのいずれかである従来の技法と対称を成す。
図11は、本発明の一実施の形態による、新しいストレージデバイスノードを追加して、この新しいノードにデータを割り当てるための方法1000のフロー図を示している。この方法1000は、例えば、グループが(例えば、図9の方法800を使用して)システム100に割り当てられた後に実行することができる。或る時点において、容量又は性能を増加させる等のために、ノード102をシステム100に追加することが望まれる場合がある。図9の方法800と同様に、方法1000も、図1のシステム100内においてハードウェア及び/又はソフトウェアによって実行することができる。ただし、一部は手動で実行することができる。
ステップ1002において、ストレージデバイスノード102が、図1のシステム100に新しく追加される。次に、ステップ1004において、システム100に以前から存在する重い負荷を有するノードが選択される。例えば、ステップ1004で選択されたノードは、ノード102のすべての中から最も高い利用率を有するものである場合がある。この目的のために、各ノード102の利用率が、そのノードにおける特定のパラメータの利用可能な総レベルと比較した、当該特定のパラメータの量の比として求められ、この利用率が、ノードに現在割り当てられているデータにサービスを提供するための仕事負荷によって消費される。例えば、ノードが合計100単位のストレージ容量を有し、そのノードへのデータの現在の割り当てがそのストレージ容量の90単位を消費している場合、そのノードは、90パーセント(90%)の利用率を有すると言うことができる。システム100の他のノード102が、90パーセントよりも大きな容量利用率を有しない場合、90パーセントの利用率を有するノードがステップ1006で選択される。しかしながら、各ノードの負荷の量は、容量以外のパラメータ(例えば、スループット)に基づいて求めることもでき、負荷の量は、複数のパラメータの組み合わせ(例えば、複数のパラメータの利用率を統計的に平均化することにより)に基づくこともできることは明らかであろう。
ステップ1008において、ステップ1006で選択された既存のノードに割り当てられたセグメントのグループが選択されて、新しく追加されたノードに再割り当てされる。これは、例えば、既存のノードに割り当てられた最も大きなグループを選択することによって行うことができる。ただし、別の判定基準に基づいてグループを選択することもでき、スループット等の、最も高い1つ又は複数の性能要件を有するグループ等を選択することもできる。グループは、ステップ1008において、新しく追加されたノードにおけるストレージ容量の可用性又は他の性能パラメータの可用性に基づいて選択することができる。例えば、新しく追加されたノードが50単位のストレージ容量を有する場合、50単位よりも少ない容量を必要とするグループがステップ1006で選択される。これに加えて、テーブル900(図10)が、好ましくは、この割り当てを反映するように更新される。
次に、ステップ1010において、新しく追加されたノードが現在十分な負荷を有するかどうかについての判断が行われる。例えば、ステップ1004で各既存のノードについて求められた負荷の量(例えば、容量利用率又はパラメータの組み合わせの利用率)を、新しく追加されたノードについて求めることができる。次に、この負荷は、他のすべてのノードの平均(例えば、統計的平均又は中央値)の負荷と比較することができる。新しく追加されたノードの負荷が少なくとも平均の負荷と同程度の大きさである場合、ステップ1010において、新しく追加されたノードは、十分な負荷を有するとみなすことができる。しかしながら、新しく追加されたノードの負荷が十分であることは、他の方法で判断することもできる。例えば、その負荷は、既存のノードの最低負荷及び最高負荷によって境界が定められた範囲と比較することができ、その負荷がこの範囲内に入る場合には、その負荷が十分であるとみなされるようになる。
好ましくは、既存のノードの負荷は、新しく追加されたノードのグループの再割り当てを考慮して求められる。したがって、グループが、既存のノードから再割り当てされる場合、その負荷は一般に削減される。この削減された負荷を考慮するために、次に、このノードの負荷を再計算することができる。
ステップ1010で求められる、新しく追加されたノードの負荷が、ストレージ容量以外のパラメータに基づく場合、その総ストレージ容量の所定の部分(例えば、90パーセント)を超える、新しく追加されたノードも、そのノードに割り当てられたデータに必要なストレージ容量の十分な負荷を有するとみなされる。
例えば、新しく追加されたノードのスループット利用率が既存のノードのいずれかよりも低いが、そのストレージ容量利用率が90パーセントを超える場合、そのノードは、十分に負荷を有するとみなされる。
新しく追加されたノードがステップ1010で十分に負荷を有しないと判断された場合、重い負荷を有するノードを特定するステップ(ステップ1004)、重い負荷を有するノードにおいてデータを選択するステップ(ステップ1006)、及び選択したデータを再割り当てするステップ(ステップ1008)は、新しく追加されたノードが十分な負荷を有するまで繰り返される。グループが再割り当てされたどのノードの削減された負荷も、好ましくは、新しく追加されたノードにそのグループが再割り当てされた後に考慮されるので、ステップ1004の各通過の際に特定された既存のノードは、一般に、ステップ1004の前の通過の際に特定されたノードと異なる。
新しく追加されたノードが十分な負荷を有すると、図11の方法1000は、ステップ1012で終了することができる。このように、ストレージデバイスノードをシステム100に追加して、新しく追加されたノードにデータを再割り当てするための技法が説明された。
或る時点において、システム100のノードからデータを除去することが望まれる場合がある。例えば、ノードが障害を起こすこともあるし、時間の経過に伴い時代遅れになることもあり、したがって、ノードを休止させるか、又は、除去することが必要となる場合がある。図12は、本発明の一実施の形態による、ストレージデバイスノードからデータを除去するための方法1100のフロー図を示している。図9の方法800及び図11の方法1000と同様に、方法1100も、図1のシステム100内においてハードウェア及び/又はソフトウェアによって実行することができる。ただし、一部は手動で実行することができる。
ステップ1102において、システム100に存在するノード102が除去のため選択される。ステップ1104において、ステップ1102で選択されたノードに記憶されたセグメントのグループが選択されて、別の既存のノードに再割り当てされる。次に、ステップ1106において、選択されたグループに対応できるストレージデバイスノード102が特定される。図9のステップ808と同様に、少なくとも、これは、十分なストレージ容量を有するノード102を特定することを含むが、他のパラメータが十分であることに基づくこともできる。例えば、これは、データスループット容量等の性能パラメータの利用可能な十分な量を有するノード102を特定することを含むことができる。好ましくは、容量要件、及び、場合によっては追加要件を満たすこのようなすべてのデバイス102がステップ1106で特定される。
ステップ1108において、少なくとも1つのノードがステップ1106で特定されたかどうかについての判断が行われる。特定されていない場合、このことは、グループが小さくされない限り、グループのデータをシステム100の既存のノード102に割り当てることができないことを意味する。上述したように、各グループは複数のセグメントを含むので、グループは、一般に、より小さなグループに分割可能である。したがって、ステップ1108の判断が否定的である場合、ステップ1110において、グループを2つ又は3つ以上のより小さなグループに分割することができ、その結果生成されたグループが前よりも低い要件を有するようにされる。その後、これら小さなグループのそれぞれについてのステップ1106の次の通過の際には、グループに対応できるノード102が前よりも多くなっていることを予想することができる。このプロセスは、グループに対応できる少なくとも1つのノードが見つかるまで繰り返される。
次に、ステップ1112において、1つのノードがステップ1106で特定された場合、グループは、その特定されたノードに移動される。2つ以上のノードが特定された場合、特定されたノードの中からノードの1つが選択される。方法900のステップ812と同様に、この選択は、好ましくは、ランダムに行われる。これに加えて、テーブル900(図10)が、好ましくは、この割り当てを反映するように更新される。
ステップ1114において、除去されるノードにおけるグループのすべてが再割り当てされたかどうかについての判断が行われる。残っているグループがある場合、グループを選択するステップ(ステップ1104)、どのノード102がグループに対応できるかを特定するステップ(ステップ1106)、必要に応じてグループを分割するステップ(ステップ1110)、及びグループを再割り当てするステップ(ステップ1112)を、グループのすべてが再割り当てされるまで繰り返すことができる。
グループのすべてが再割り当てされると、必要に応じて、ステップ1116でノードを除去することができる。次に、プログラムフローはステップ1118で終了することができる。このように、システム100のストレージデバイスノードからデータを除去して、そのノードから既存のノードへデータを再割り当てするための技法が説明された。
本明細書で説明したデータ割り当てのための技法に対して変更を行えることは明らかであろう。例えば、説明したように、図9のM個のノードの組及び図12のノードを選択することは、基本的に、仕事負荷の要件を満たすすべてのノードを選択すること、次いで、これらのノードから必要な個数のノード(すなわち、図9ではM個のノードの組、又は、図12ではノード)を選択することを含む。代替的に、複数のノード(必要な個数又はそれより多くの個数)をランダムに選択することもできる。次に、それらのノードがセグメントのグループの要件を満たすかどうかについての判断を行うことができる。満たす場合には、割り当てを行うことができる(2つ以上の割り当てが可能な場合には、ランダム選択を使用して、それら割り当ての中から選択することができる)。満たさない場合には、要件を満たすノードが特定されるまで、ランダムに選択するステップ、及び、判断するステップを繰り返すことができる。所定の回数のサイクルの後に成功しない場合には、グループを分割して、プロセスを繰り返すことができる。さらに、これらの技法の組み合わせを実施することもできる。例えば、要件のサブセットを満たすすべてのノードを選択することができる。次に、すべての要件を満たす組が見つかるまで、これらの中からM個のノードが、反復的且つランダムにこれらのノードから選択される。
上記は、本発明の特定の実施の形態に関してのものであるが、本発明の原理及び精神から逸脱することなく、これらの実施の形態において変更を行えることが当業者には理解されよう。本発明の範囲は、添付の特許請求の範囲によって規定される。
本発明の一実施の形態による、複数の冗長ストレージデバイスノードを含む例示のストレージシステムである。 本発明の一実施の形態による、図1のストレージシステムで使用される例示のストレージデバイスである。 本発明の一実施の形態による、読み出しオペレーションを実行するための例示のタイミング図である。 本発明の一実施の形態による、書き込みオペレーションを実行するための例示のタイミング図である。 本発明の一実施の形態による、データ修復オペレーションを実行するための例示のタイミング図である。 本発明の一実施の形態による、タイムスタンプが記憶されるデータ構造体の例示の部分である。 本発明の一実施の形態による、図6のデータ構造体を保持するための方法のフロー図である。 本発明の一実施の形態による、図6のデータ構造体を保持するための方法のフロー図である。 本発明の一実施の形態による、図6のデータ構造体を保持するための方法のフロー図である。 タイムスタンプエントリがデータ構造体に追加される範囲と既存のエントリの範囲との間に起こり得るさまざまな関係を示す図である。 タイムスタンプエントリがデータ構造体に追加される範囲と既存のエントリの範囲との間に起こり得るさまざまな関係を示す図である。 タイムスタンプエントリがデータ構造体に追加される範囲と既存のエントリの範囲との間に起こり得るさまざまな関係を示す図である。 タイムスタンプエントリがデータ構造体に追加される範囲と既存のエントリの範囲との間に起こり得るさまざまな関係を示す図である。 タイムスタンプエントリがデータ構造体に追加される範囲と既存のエントリの範囲との間に起こり得るさまざまな関係を示す図である。 タイムスタンプエントリがデータ構造体に追加される範囲と既存のエントリの範囲との間に起こり得るさまざまな関係を示す図である。 タイムスタンプエントリがデータ構造体に追加される範囲と既存のエントリの範囲との間に起こり得るさまざまな関係を示す図である。 タイムスタンプエントリがデータ構造体に追加される範囲と既存のエントリの範囲との間に起こり得るさまざまな関係を示す図である。 本発明の一実施の形態による、ストレージデバイスノードにデータストアを割り当てるための方法のフロー図である。 本発明の一実施の形態による、ストレージデバイスノードへのデータの割り当てを追跡するための例示のテーブルである。 本発明の一実施の形態による、新しいストレージデバイスノードを追加して、その新しいノードにデータを割り当てるための方法のフロー図である。 本発明の一実施の形態による、ストレージデバイスノードを除去するための方法のフロー図である。
符号の説明
100・・・ストレージシステム
102・・・ストレージデバイス
104,108・・・通信媒体
106・・・クライアント
110・・・インターフェース
112・・・CPU
114・・・マスストレージ
116・・・メモリ
302,304,306・・・ストレージデバイス
308,310,312,314,316,318・・・メッセージ
402,404,406・・・ストレージデバイス
408,410,412,414,416,418,420,422,424,426・・・メッセージ
502,504,506・・・ストレージデバイス
508,510,512,514,516,518,520,522・・・メッセージ
600・・・データ構造体
802,804・・・範囲
900・・・テーブル
902・・・エントリ

Claims (10)

  1. データストレージシステム(100)のストレージデバイスノード(102)にデータを割り当てる方法であって、前記データストレージシステム(100)は、前記データのM個の複製を記憶し、
    該方法は、
    前記データの要件に対応するのに利用可能な十分な資源を有するノード(102)を特定することと、
    ノード(102)の個数がMよりも大きい場合に、特定したノードの中から、ランダムに選択したM個のノード(102)に前記データを割り当てることと
    を含む方法。
  2. 割り当てられる前記データはデータセグメントのグループを含み、ノード(102)の個数がM未満である場合、前記データセグメントのグループを分割し、それによって、削減された要件を有するデータセグメントのグループを形成することと、前記削減された要件に対応するのに利用可能な十分な資源を有するノード(102)を特定することとをさらに含む
    請求項1に記載の方法。
  3. 少なくともM個のノード(102)が特定されるまで、前記データセグメントのグループを前記分割することと、
    利用可能な十分な資源を有するノード(102)を前記特定することを繰り返すことと
    をさらに含む
    請求項2に記載の方法。
  4. ノード(102)の利用可能な容量が、少なくとも、前記データの容量要件と同程度の大きさである場合にのみ、該ノード(102)は、前記データの十分な資源を有するものとして特定される
    請求項3に記載の方法。
  5. ノード(102)の利用可能な性能パラメータが、少なくとも、前記データの対応する性能要件と同程度の大きさである場合にのみ、該ノード(102)は、前記データの十分な資源を有するものとして特定される
    請求項4に記載の方法。
  6. エントリをデータロケーションテーブルに追加することをさらに含み、
    該エントリは、前記データと、前記データが割り当てられる前記M個のノード(102)とを特定する
    請求項1に記載の方法。
  7. 前記データストレージシステム(100)に新しいストレージデバイスノード(102)を追加することであって、既存のノード(102)のうちの他のノードと比較して重い負荷を有する或る既存のノード(102)を特定することと、前記特定した既存のノード(102)に記憶されたデータを新しいノードに移動させることとを含む追加することと、
    前記新しいノード(102)が前記既存のノード(102)と比較して十分な負荷を有するかどうかを判断して、前記新しいノード(102)が十分な負荷を有しない場合に、前記新しいノード(102)が十分な負荷を有するまで、前記特定すること及び前記移動させることを繰り返すことと
    をさらに含む
    請求項1に記載の方法。
  8. 前記データストレージシステム(100)のストレージデバイスノード(102)からデータを除去することであって、
    データが除去されるストレージデバイスノード(102)からデータを選択することと、
    前記データの要件に対応するのに利用可能な十分な資源を有する、前記データストレージシステム(100)の他のノード(102)を特定することと、
    特定した他のノードの中からランダムに選択されたノード(102)に前記データを移動させることと、
    除去される前記ストレージデバイスノード(102)が空になるまで、前記選択することと、前記特定することと、前記移動させることとを繰り返すことと
    を含む除去すること
    をさらに含む
    請求項1に記載の方法。
  9. 冗長データを記憶するための複数の既存のストレージデバイスノード(102)を有するデータストレージシステム(100)に新しいストレージデバイスノード(102)を追加するための方法であって、
    前記既存のノード(102)のうちの他のノードと比較して重い負荷を有する或る既存のノード(102)を特定するステップと、
    前記特定した既存のノード(102)に記憶されたデータを前記新しいノード(102)へ移動させるステップと、
    前記新しいノード(102)が前記既存のノード(102)と比較して十分な負荷を有するかどうかを判断し、前記新しいノード(102)が十分な負荷を有しない場合に、前記新しいノード(102)が十分な負荷を有するまで、前記特定するステップ及び前記移動させるステップを繰り返すステップと
    を含む方法。
  10. 冗長データを記憶するためのデータストレージシステム(100)のストレージデバイスノード(102)からデータを除去するための方法であって、該データストレージシステム(100)は複数のストレージデバイスノードを有し、
    該方法は、
    データが除去される前記ストレージデバイスノード(102)からデータを選択するステップと、
    前記データの要件に対応するのに利用可能な十分な資源を有する、前記データストレージシステム(100)の他のノード(102)を特定するステップと、
    特定した他のノードの中からランダムに選択されたノード(102)に前記データを移動させるステップと、
    除去される前記ストレージデバイスノード(102)が空になるまで、前記選択するステップと、前記特定するステップと、前記移動させるステップとを繰り返すステップと、
    を含む方法。
JP2006533127A 2003-05-16 2004-05-13 データストレージシステムにおける冗長データ割り当て Expired - Fee Related JP4317876B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/440,570 US20040230862A1 (en) 2003-05-16 2003-05-16 Redundant data assigment in a data storage system
PCT/US2004/015352 WO2004104839A2 (en) 2003-05-16 2004-05-13 Redundant data assigment in a data storage system

Publications (2)

Publication Number Publication Date
JP2007520783A true JP2007520783A (ja) 2007-07-26
JP4317876B2 JP4317876B2 (ja) 2009-08-19

Family

ID=33418023

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006533127A Expired - Fee Related JP4317876B2 (ja) 2003-05-16 2004-05-13 データストレージシステムにおける冗長データ割り当て

Country Status (4)

Country Link
US (2) US20040230862A1 (ja)
EP (1) EP1625502B1 (ja)
JP (1) JP4317876B2 (ja)
WO (1) WO2004104839A2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006268740A (ja) * 2005-03-25 2006-10-05 Nec Corp レプリケーションシステムと方法
JP2011505617A (ja) * 2007-11-22 2011-02-24 中国移▲動▼通信集▲団▼公司 データ・ストレージ方法、管理サーバ、ストレージ設備及びシステム
KR20180052369A (ko) * 2016-11-10 2018-05-18 삼성전자주식회사 스토리지 어레이를 공유하는 다수의 서버 노드들을 포함하는 메모리 시스템 및 그 동작 방법

Families Citing this family (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7761421B2 (en) * 2003-05-16 2010-07-20 Hewlett-Packard Development Company, L.P. Read, write, and recovery operations for replicated data
US7657781B1 (en) * 2003-07-25 2010-02-02 Cisco Technology, Inc. System and method for providing redundant data load sharing in a distributed network
US9213609B2 (en) * 2003-12-16 2015-12-15 Hewlett-Packard Development Company, L.P. Persistent memory device for backup process checkpoint states
US20050216552A1 (en) * 2004-03-24 2005-09-29 Samuel Fineberg Communication-link-attached persistent memory system
JP4728717B2 (ja) * 2004-12-03 2011-07-20 国立大学法人東京工業大学 自律ストレージ装置、自律ストレージシステム、分散ストレージシステム、負荷分散プログラム及び負荷分散方法
US7363444B2 (en) 2005-01-10 2008-04-22 Hewlett-Packard Development Company, L.P. Method for taking snapshots of data
US7877787B2 (en) * 2005-02-14 2011-01-25 Nokia Corporation Method and apparatus for optimal transfer of data in a wireless communications system
US8001076B2 (en) * 2005-07-12 2011-08-16 International Business Machines Corporation Ranging scalable time stamp data synchronization
US9047306B1 (en) 2005-10-17 2015-06-02 Hewlett-Packard Development Company, L.P. Method of writing data
US7827144B1 (en) 2005-11-17 2010-11-02 Hewlett-Packard Development Company, L.P. Methods of reading and writing data
US20110010518A1 (en) * 2005-12-19 2011-01-13 Srinivas Kavuri Systems and Methods for Migrating Components in a Hierarchical Storage Network
US7761663B2 (en) * 2006-02-16 2010-07-20 Hewlett-Packard Development Company, L.P. Operating a replicated cache that includes receiving confirmation that a flush operation was initiated
US7725655B2 (en) * 2006-02-16 2010-05-25 Hewlett-Packard Development Company, L.P. Method of operating distributed storage system in which data is read from replicated caches and stored as erasure-coded data
US7925624B2 (en) * 2006-03-31 2011-04-12 Amazon Technologies, Inc. System and method for providing high availability data
US7975109B2 (en) 2007-05-30 2011-07-05 Schooner Information Technology, Inc. System including a fine-grained memory and a less-fine-grained memory
US8229945B2 (en) 2008-03-20 2012-07-24 Schooner Information Technology, Inc. Scalable database management software on a cluster of nodes using a shared-distributed flash memory
WO2010036889A1 (en) * 2008-09-25 2010-04-01 Bakbone Software, Inc. Remote backup and restore
TW201022930A (en) * 2008-11-20 2010-06-16 Ibm Method to improve recovery time of mirrored disks when read stability is in doubt
JP4789021B2 (ja) * 2009-02-06 2011-10-05 日本電気株式会社 データ処理装置及びデータ処理方法
US8176367B2 (en) * 2009-05-28 2012-05-08 Agere Systems Inc. Systems and methods for managing end of life in a solid state drive
US8151137B2 (en) * 2009-05-28 2012-04-03 Lsi Corporation Systems and methods for governing the life cycle of a solid state drive
US12120127B1 (en) * 2009-12-29 2024-10-15 Pure Storage, Inc. Storage of data objects in a storage network
US8700842B2 (en) 2010-04-12 2014-04-15 Sandisk Enterprise Ip Llc Minimizing write operations to a flash memory-based object store
US9047351B2 (en) 2010-04-12 2015-06-02 Sandisk Enterprise Ip Llc Cluster of processing nodes with distributed global flash memory using commodity server technology
US8856593B2 (en) 2010-04-12 2014-10-07 Sandisk Enterprise Ip Llc Failure recovery using consensus replication in a distributed flash memory system
US8868487B2 (en) 2010-04-12 2014-10-21 Sandisk Enterprise Ip Llc Event processing in a flash memory-based object store
US9164554B2 (en) 2010-04-12 2015-10-20 Sandisk Enterprise Ip Llc Non-volatile solid-state storage system supporting high bandwidth and random access
US8954385B2 (en) 2010-06-28 2015-02-10 Sandisk Enterprise Ip Llc Efficient recovery of transactional data stores
KR20120063946A (ko) * 2010-12-08 2012-06-18 한국전자통신연구원 대용량 통합 메모리를 위한 메모리 장치 및 이의 메타데이터 관리 방법
US8694733B2 (en) 2011-01-03 2014-04-08 Sandisk Enterprise Ip Llc Slave consistency in a synchronous replication environment
US8874515B2 (en) 2011-04-11 2014-10-28 Sandisk Enterprise Ip Llc Low level object version tracking using non-volatile memory write generations
US9753999B2 (en) 2012-01-06 2017-09-05 Citus Data Bilgi Islemieri Ticaret A.S. Distributed database with mappings between append-only files and repartitioned files
US20130311488A1 (en) * 2012-01-06 2013-11-21 Citus Data Bilgi Islemleri Ticaret A.S. Time Stamp Bounded Addition of Data to an Append-Only Distributed Database Table
US10860563B2 (en) 2012-01-06 2020-12-08 Microsoft Technology Licensing, Llc Distributed database with modular blocks and associated log files
US9135064B2 (en) 2012-03-07 2015-09-15 Sandisk Enterprise Ip Llc Fine grained adaptive throttling of background processes
US20180239538A1 (en) * 2012-06-05 2018-08-23 International Business Machines Corporation Expanding to multiple sites in a distributed storage system
JP6094112B2 (ja) * 2012-09-20 2017-03-15 富士通株式会社 ストレージシステム、ストレージ制御装置、ストレージ制御方法、及びストレージ制御プログラム
US9164828B2 (en) 2013-09-26 2015-10-20 Seagate Technology Llc Systems and methods for enhanced data recovery in a solid state memory system
US9424179B2 (en) 2013-10-17 2016-08-23 Seagate Technology Llc Systems and methods for latency based data recycling in a solid state memory system
US9201729B2 (en) 2013-10-21 2015-12-01 Seagate Technology, Llc Systems and methods for soft data utilization in a solid state memory system
US9378840B2 (en) 2013-10-28 2016-06-28 Seagate Technology Llc Systems and methods for sub-zero threshold characterization in a memory cell
JP2015095015A (ja) * 2013-11-11 2015-05-18 富士通株式会社 データ配置方法、データ配置プログラムおよび情報処理システム
US9276609B2 (en) 2013-11-16 2016-03-01 Seagate Technology Llc Systems and methods for soft decision generation in a solid state memory system
US9576683B2 (en) 2014-02-06 2017-02-21 Seagate Technology Llc Systems and methods for hard error reduction in a solid state memory device
US9378810B2 (en) 2014-02-11 2016-06-28 Seagate Technology Llc Systems and methods for last written page handling in a memory device
US10372696B2 (en) * 2014-12-16 2019-08-06 Futurewei Technologies, Inc. System and method for massively parallel processing database
US10268373B2 (en) * 2015-03-04 2019-04-23 Toshiba Memory Corporation Storage system with improved communication
US10891264B2 (en) * 2015-04-30 2021-01-12 Vmware, Inc. Distributed, scalable key-value store
US10275320B2 (en) 2015-06-26 2019-04-30 Commvault Systems, Inc. Incrementally accumulating in-process performance data and hierarchical reporting thereof for a data stream in a secondary copy operation
CN108008913B (zh) * 2016-10-27 2020-12-18 杭州海康威视数字技术股份有限公司 一种基于管理节点的扩容方法、装置及存储系统
US10831591B2 (en) 2018-01-11 2020-11-10 Commvault Systems, Inc. Remedial action based on maintaining process awareness in data storage management
US20200192572A1 (en) 2018-12-14 2020-06-18 Commvault Systems, Inc. Disk usage growth prediction system
US10908834B2 (en) * 2019-06-28 2021-02-02 Hitachi, Ltd. Load balancing for scalable storage system
US11169728B2 (en) * 2019-09-10 2021-11-09 Western Digital Technologies, Inc. Replication configuration for multiple heterogeneous data stores

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4714996A (en) 1985-11-26 1987-12-22 International Business Machines Corporation Impact calculation for version management in a distributed information service
US5195100A (en) 1990-03-02 1993-03-16 Micro Technology, Inc. Non-volatile memory storage of write operation identifier in data sotrage device
US5212788A (en) * 1990-05-22 1993-05-18 Digital Equipment Corporation System and method for consistent timestamping in distributed computer databases
GB2256514B (en) * 1991-05-21 1994-11-16 Digital Equipment Corp Commitment ordering for guaranteeing serializability across distributed transactions
US5430869A (en) * 1991-05-29 1995-07-04 Hewlett-Packard Company System and method for restructuring a B-Tree
US5701480A (en) * 1991-10-17 1997-12-23 Digital Equipment Corporation Distributed multi-version commitment ordering protocols for guaranteeing serializability during transaction processing
US5452445A (en) * 1992-04-30 1995-09-19 Oracle Corporation Two-pass multi-version read consistency
JP2675968B2 (ja) * 1992-08-20 1997-11-12 インターナショナル・ビジネス・マシーンズ・コーポレイション 加入者分散2相コミット・プロトコルの拡張機能
FR2699708B1 (fr) 1992-12-22 1995-02-24 Bull Sa Procédé de gestion de fichiers, support d'enregistrement et système informatique l'incorporant.
GB9406747D0 (en) * 1994-04-06 1994-05-25 Abdullah Ayad A Data base searching system
US5530557A (en) * 1994-09-12 1996-06-25 International Business Machines Corporation Online placement of video files determined by a function of the bandwidth to space ratio of each of the storage devices in a server environment
US5644763A (en) * 1995-06-28 1997-07-01 Sybase, Inc. Database system with improved methods for B-tree maintenance
US5799305A (en) * 1995-11-02 1998-08-25 Informix Software, Inc. Method of commitment in a distributed database transaction
US5768538A (en) * 1996-04-30 1998-06-16 International Business Machines Corporation Barrier synchronization method wherein members dynamic voting controls the number of synchronization phases of protocols and progression to each new phase
US6052712A (en) * 1996-04-30 2000-04-18 International Business Machines Corporation System for barrier synchronization wherein members dynamic voting controls the number of synchronization phases of protocols and progression to each subsequent phase
US5768528A (en) * 1996-05-24 1998-06-16 V-Cast, Inc. Client-server system for delivery of online information
US5781910A (en) 1996-09-13 1998-07-14 Stratus Computer, Inc. Preforming concurrent transactions in a replicated database environment
US5920857A (en) * 1997-08-04 1999-07-06 Naphtali Rishe Efficient optimistic concurrency control and lazy queries for B-trees and other database structures
US6374336B1 (en) 1997-12-24 2002-04-16 Avid Technology, Inc. Computer system and process for transferring multiple high bandwidth streams of data between multiple storage units and multiple applications in a scalable and reliable manner
US6148295A (en) * 1997-12-30 2000-11-14 International Business Machines Corporation Method for computing near neighbors of a query point in a database
US6219667B1 (en) * 1998-05-28 2001-04-17 International Business Machines Corporation Efficient large-scale access control for internet/intranet information systems
US6256705B1 (en) * 1998-06-05 2001-07-03 International Business Machines Corporation System and method for organizing data stored in a log structured array
US6405284B1 (en) * 1998-10-23 2002-06-11 Oracle Corporation Distributing data across multiple data storage devices in a data storage system
US6311251B1 (en) * 1998-11-23 2001-10-30 Storage Technology Corporation System for optimizing data storage in a RAID system
US6502175B1 (en) * 1999-03-31 2002-12-31 Lucent Technologies Inc. Method and apparatus for locating caches in a network to optimize performance
US6421688B1 (en) * 1999-10-20 2002-07-16 Parallel Computers Technology, Inc. Method and apparatus for database fault tolerance with instant transaction replication using off-the-shelf database servers and low bandwidth networks
US20010044879A1 (en) * 2000-02-18 2001-11-22 Moulton Gregory Hagan System and method for distributed management of data storage
EP1160682A1 (en) 2000-06-02 2001-12-05 Thomas Dr. Seidl Relation interval tree
US20020174295A1 (en) * 2001-01-29 2002-11-21 Ulrich Thomas R. Enhanced file system failure tolerance
US7069295B2 (en) * 2001-02-14 2006-06-27 The Escher Group, Ltd. Peer-to-peer enterprise storage
US6629108B2 (en) 2001-03-09 2003-09-30 Hewlett-Packard Development Company, Lp. Method for insuring data integrity for mirrored independently accessible memory devices
WO2003009144A1 (en) * 2001-07-19 2003-01-30 Wind River Systems, Inc. Memory management system
US7146524B2 (en) 2001-08-03 2006-12-05 Isilon Systems, Inc. Systems and methods for providing a distributed file system incorporating a virtual hot spare
US20030105797A1 (en) 2001-12-04 2003-06-05 Dan Dolev Dynamic load balancing among a set of servers
US6763436B2 (en) 2002-01-29 2004-07-13 Lucent Technologies Inc. Redundant data storage and data recovery system
US6829617B2 (en) 2002-02-15 2004-12-07 International Business Machines Corporation Providing a snapshot of a subset of a file system
US7778958B2 (en) 2002-04-11 2010-08-17 Quantum Corporation Recovery of data on a primary data volume
US6938123B2 (en) * 2002-07-19 2005-08-30 Storage Technology Corporation System and method for raid striping
US7761421B2 (en) 2003-05-16 2010-07-20 Hewlett-Packard Development Company, L.P. Read, write, and recovery operations for replicated data
US7152077B2 (en) 2003-05-16 2006-12-19 Hewlett-Packard Development Company, L.P. System for redundant storage of data

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006268740A (ja) * 2005-03-25 2006-10-05 Nec Corp レプリケーションシステムと方法
JP2011505617A (ja) * 2007-11-22 2011-02-24 中国移▲動▼通信集▲団▼公司 データ・ストレージ方法、管理サーバ、ストレージ設備及びシステム
KR20180052369A (ko) * 2016-11-10 2018-05-18 삼성전자주식회사 스토리지 어레이를 공유하는 다수의 서버 노드들을 포함하는 메모리 시스템 및 그 동작 방법
KR102567971B1 (ko) 2016-11-10 2023-08-17 삼성전자주식회사 스토리지 어레이를 공유하는 다수의 서버 노드들을 포함하는 메모리 시스템 및 그 동작 방법

Also Published As

Publication number Publication date
US20080046779A1 (en) 2008-02-21
WO2004104839A3 (en) 2008-07-03
EP1625502B1 (en) 2017-04-19
WO2004104839A2 (en) 2004-12-02
US8775763B2 (en) 2014-07-08
US20040230862A1 (en) 2004-11-18
JP4317876B2 (ja) 2009-08-19
EP1625502A2 (en) 2006-02-15

Similar Documents

Publication Publication Date Title
JP4317876B2 (ja) データストレージシステムにおける冗長データ割り当て
US7761421B2 (en) Read, write, and recovery operations for replicated data
US7152077B2 (en) System for redundant storage of data
US9946460B2 (en) Storage subsystem and storage system architecture performing storage virtualization and method thereof
EP1776639B1 (en) Disk mirror architecture for database appliance with locally balanced regeneration
US7159150B2 (en) Distributed storage system capable of restoring data in case of a storage failure
US6405284B1 (en) Distributing data across multiple data storage devices in a data storage system
US7293145B1 (en) System and method for data transfer using a recoverable data pipe
US7620698B2 (en) File distribution system in which partial files are arranged according to various allocation rules associated with a plurality of file types
JP4519563B2 (ja) 記憶システム及びデータ処理システム
US20160226931A9 (en) Virtual multi-cluster clouds
CN105739924A (zh) 基于缓存集群的缓存方法和系统
CA2903841A1 (en) A computer implemented method for dynamic sharding
CN110188084B (zh) 一种分布式文件存储系统及文件存储方法
CN107463342B (zh) 一种cdn边缘节点文件的存储方法及装置
US10031682B1 (en) Methods for improved data store migrations and devices thereof
KR100936238B1 (ko) 파일 입출력과 복제의 균형적 수행을 위한 지연복제 시스템및 방법
US20100161897A1 (en) Metadata server and disk volume selecting method thereof
US7730351B2 (en) Per file dirty region logging
JP2015052844A (ja) コピー制御装置,コピー制御方法及びコピー制御プログラム
WO2021046693A1 (zh) 存储系统中数据处理方法、装置以及存储系统
CN112748865A (zh) 用于存储管理的方法、电子设备和计算机程序产品
JP2002288014A (ja) ファイル管理システム及びファイルデータ書込方法
JP6172294B2 (ja) トランザクション分散処理装置、方法、システム、および、記憶媒体

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070529

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080411

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080709

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081128

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090226

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: 20090428

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090525

R150 Certificate of patent or registration of utility model

Ref document number: 4317876

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120529

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130529

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130529

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees