JP2021189624A - 分散ストレージ装置および分散ストレージ装置におけるデータ管理方法 - Google Patents

分散ストレージ装置および分散ストレージ装置におけるデータ管理方法 Download PDF

Info

Publication number
JP2021189624A
JP2021189624A JP2020092660A JP2020092660A JP2021189624A JP 2021189624 A JP2021189624 A JP 2021189624A JP 2020092660 A JP2020092660 A JP 2020092660A JP 2020092660 A JP2020092660 A JP 2020092660A JP 2021189624 A JP2021189624 A JP 2021189624A
Authority
JP
Japan
Prior art keywords
data
storage
file
cache data
distributed
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
JP2020092660A
Other languages
English (en)
Other versions
JP7102460B2 (ja
Inventor
征之 兒玉
Masayuki Kodama
光雄 早坂
Mitsuo Hayasaka
悠冬 鴨生
Yuto Komo
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 JP2020092660A priority Critical patent/JP7102460B2/ja
Priority to US17/182,316 priority patent/US11520745B2/en
Publication of JP2021189624A publication Critical patent/JP2021189624A/ja
Application granted granted Critical
Publication of JP7102460B2 publication Critical patent/JP7102460B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • G06F16/1748De-duplication implemented within the file system, e.g. based on file segments
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/148File search processing
    • G06F16/152File search processing using file content signatures, e.g. hash values
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1727Details of free space management performed by the file system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】ノード間重複排除におけるノード間通信の回数を低減し、性能安定性と高い容量効率を両立する。【解決手段】ストレージノード200、210のストレージドライブには複数のストレージノード200、210において重複排除されていないファイル330、340と、重複排除された重複データが格納された重複データ格納ファイル350、351と、他のストレージノードに格納された重複データのキャッシュデータが格納されたキャッシュデータ格納ファイル360、361とが格納され、ストレージノード200、210のプロセッサは、キャッシュデータのリードアクセス要求を受けた際に、キャッシュデータをキャッシュデータ格納ファイルに格納している場合にはキャッシュデータを読み出し、キャッシュデータを破棄している場合には他のストレージノードに要求してキャッシュデータにかかる重複データを読み出す。【選択図】図3

Description

本発明は、分散ストレージ装置および分散ストレージ装置におけるデータ管理方法に関する。
AI(Artificial Intelligence)などのデータ分析で用いる大量のデータを保存するために、スケールアウト型の分散ストレージが広く用いられている。大量のデータを効率よく格納するため、スケールアウト型の分散ストレージでは、重複排除や圧縮などの容量削減技術が必要とされている。
分散ストレージの容量削減技術として、ノード間重複排除がある。これはストレージ内で重複したデータを排除する重複排除技術を分散ストレージ向けに拡張した技術である。ノード間重複排除では、分散ストレージを構成する一つのストレージノード内で重複しているデータだけでなく、複数のストレージノード間で重複しているデータを削減することが可能となり、より効率的にデータを格納することが可能となる。
分散ストレージでは、データを分割し分散ストレージを構成する複数のノードに分散配置することで、アクセスの平準化を行い性能安定化を図っている。
しかし、分散ストレージへノード間重複排除技術を適用すると、重複データを持つノードへのアクセス集中が発生し、分散ストレージの性能が不安定化する。
このアクセス集中による性能不安定化を回避するため、特許文献1に開示されている、ノード間でデータをキャッシュし、相互に参照する技術を適用することが可能である。
米国特許出願公開第2014/0280664号明細書
特許文献1に開示された技術のように、ノード間で相互にデータをキャッシュする方式では、自ノードにデータが存在しない場合、近傍で同一データをキャッシュしているノードからデータを受領し、実データを持つノードへのアクセス集中を回避する。
この方式で性能向上をするためには、近傍ノードや実データを保持したノードへのアクセス回数を抑制する必要があり、そのためには自ノードのキャッシュを大きくし、他ノードから受領したデータもできる限りキャッシュすることで実現することができる。
しかし、これはキャッシュ容量に限りがあるにもかかわらず、同一データを複数ノードでキャッシュすることとなり、分散ストレージ全体としてはキャッシュ効率が下がるという状態に陥る。これによりキャッシュミス率が上がり、結果としてキャッシュミスした実データを保持したノードへのアクセス集中が起き、性能不安定化を回避できない。
本発明は、上記事情に鑑みなされたものであり、その目的は、ノード間重複排除における容量効率と性能安定性を両立可能な分散ストレージ装置および分散ストレージ装置におけるデータ管理方法を提供することにある。
上記課題を解決すべく、本発明の一つの観点に従う分散ストレージ装置は、複数のストレージノードを有する分散ストレージ装置であって、ストレージノードはストレージデバイスとプロセッサとを有し、複数のストレージノードは、ストレージノード間にて重複排除する重複排除機能を有し、ストレージデバイスには、複数のストレージノードにおいて重複排除されていないファイルと、重複排除された重複データが格納された重複データ格納ファイルと、他のストレージノードに格納された重複データのキャッシュデータが格納されたキャッシュデータ格納ファイルとが格納され、プロセッサは、所定の条件を満たした場合に、キャッシュデータを破棄し、キャッシュデータのリードアクセス要求を受けた際に、キャッシュデータをキャッシュデータ格納ファイルに格納している場合には当該キャッシュデータを読み出し、キャッシュデータを破棄している場合には他のストレージノードに要求してキャッシュデータにかかる重複データを読み出す。
本発明によれば、ノード間重複排除におけるノード間通信の回数を低減し、性能安定性と高い容量効率を両立することができる。
実施形態に係る分散ストレージシステムの概略構成を示すブロック図である。 実施形態に係る分散ストレージシステムのハードウェア構成例を示すブロック図である。 実施形態に係る分散ストレージシステムの論理構成例を示すブロック図である。 実施形態に係る分散ストレージシステムの更新管理テーブルの構成を示す図である。 実施形態に係る分散ストレージシステムのポインタ管理テーブルの構成を示す図である。 実施形態に係る分散ストレージシステムのハッシュテーブルの構成を示す図である。 実施形態に係る分散ストレージシステムのリード処理を示すフローチャートである。 実施形態に係る分散ストレージシステムのキャッシュデータ更新処理を示すフローチャートである。 実施形態に係る分散ストレージシステムのインライン重複排除ライト処理を示すフローチャートである。 実施形態に係る分散ストレージシステムの重複データ更新処理を示すフローチャートである。 実施形態に係る分散ストレージシステムのインライン重複排除処理を示すフローチャートである。 実施形態に係る分散ストレージシステムのキャッシュデータ解放処理を示すフローチャートである。 実施形態に係る分散ストレージシステムのポストプロセス重複排除ライト処理を示すフローチャートである。 実施形態に係る分散ストレージシステムのポストプロセス重複排除処理を示すフローチャートである。
以下、本発明の実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
本実施例の分散ストレージシステム(分散ストレージ装置)は、例えば以下の構成を有する。すなわち、分散ストレージシステムにおいて、インライン重複排除ライト処理もしくはポストプロセス重複排除ライト処理を行った際、各ノードの空き容量を重複データのキャッシュとして割り当てる。分散ストレージシステムのリード処理の際に、前記キャッシュデータに必要な重複データが存在する場合は、キャッシュデータを優先的に読み出すことで、ノード間通信を削減し、高速にデータ応答する。また、空き容量が不足している場合は、自ノードがデータ保持ノードになっている重複データを優先的にキャッシュに残しつつキャッシュ領域を解放する制御を行う。
なお、以下の説明において、「メモリ」は、1以上のメモリであり、典型的には主記憶デバイスでよい。メモリ部における少なくとも1つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
また、以下の説明において、「プロセッサ」は、1以上のプロセッサである。少なくとも1つのプロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサであるが、GPU(Graphics Processing Unit)のような他種のプロセッサでもよい。少なくとも1つのプロセッサは、シングルコアでもよいしマルチコアでもよい。
また、少なくとも1つのプロセッサは、処理の一部又は全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))といった広義のプロセッサでもよい。
また、以下の説明において、「xxxテーブル」といった表現により、入力に対して出力が得られる情報を説明することがあるが、この情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「xxxテーブル」を「xxx情報」と言うことができる。
また、以下の説明において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部又は一部が1つのテーブルであってもよい。
また、以下の説明において、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶資源(例えば、メモリ)及び/又は通信インターフェースデバイス(例えば、ポート)を用いながら行うため、処理の主語がプログラムとされてもよい。プログラムを主語として説明された処理は、プロセッサまたはそのプロセッサを有する計算機が行う処理としてもよい。
プログラムは、計算機のような装置にインストールされてもよいし、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体にあってもよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
また、以下の説明において、同種の要素を区別しないで説明する場合には、参照符号(又は、参照符号のうちの共通符号)を使用し、同種の要素を区別して説明する場合は、要素の識別番号(又は参照符号)を使用することがある。
図1は、実施形態に係る分散ストレージシステムの概略構成を示すブロック図である。
図1において、分散ストレージシステムSは、分散配置された複数のストレージノード100〜110およびクライアントサーバ120を備える。
ストレージノード100〜110は、協調して分散ストレージを構成する。図1で示されているストレージノード100〜110は2台だが、2台より多くのストレージノードで分散ストレージシステムSを構成してもよい。分散ストレージシステムSを構成するストレージノード100〜110の台数は、何台でもよい。
また、ストレージノード100〜110は、それぞれ重複排除データを格納するボリューム101〜111を備える。重複排除データは、ストレージノード100〜110間で重複している重複データ(重複排除対象データ)について、ストレージノード100〜110から重複排除されたデータである。重複排除データは、分散ストレージシステムSを構成する一つのストレージノード100〜110内で重複している重複データについて、その一つのストレージノード100〜110から重複排除されたデータを含んでいてもよい。
さらに、ストレージノード100〜110は、それぞれ重複データをキャッシュするボリューム102〜112を備える。キャッシュデータは、重複データとして各ストレージノードから削除されるデータを、キャッシュとして残存させたデータである。このボリューム102〜112には重複データ以外のキャッシュデータを含んでいてもよい。
分散ストレージシステムSは、クライアントサーバ120からのIOリクエスト(データのリード要求またはライト要求)をストレージノード100〜110のいずれかが受領し、ネットワークを介してストレージノード100〜110間で互いに通信し、ストレージノード100〜110同士で協調してIO処理を実行する。ストレージノード100〜110は、ストレージノード100〜110間で重複している重複データに対して重複排除処理を実行し、ボリューム101〜111に重複データを、ボリューム102〜112にキャッシュデータを保存する。
ここで、例えばストレージノード100は、クライアントサーバ120からリード要求された重複データが自ノード100に保存されている場合は、ボリューム101から読み込むことができる。一方、重複データが他ノードに保存されている場合(例えばストレージノード110のボリューム111に保存されている場合)においても、自ノード100にキャッシュデータが保存されている場合は、ボリューム102から読み込むことができる。このため、各ストレージノード100〜110は、クライアントサーバ120からリード要求された重複データを自ノードが保存していない場合においても、キャッシュデータとして重複データを保持している場合は、重複データを読み込むためのノード間通信の回数を低減することができる。
図2は、実施形態に係る分散ストレージシステムのハードウェア構成例を示すブロック図である。
図2において、分散ストレージシステムSは、分散配置された複数のストレージノード200〜210およびクライアントサーバ220を備える。ストレージノード200〜210は、分散ストレージプログラム300〜310(図3参照)を実行して一体となって動作し、分散ストレージシステムSを構成する。図2で示されているストレージノード200〜210は2台だが、2台より多くのストレージノード200〜210で分散ストレージを構成してもよい。分散ストレージシステムSを構成するストレージノード200〜210の台数は、何台でもよい。
各ストレージノード200〜210は、回線242〜243を介してLAN(Local Area Network)240に接続され、クライアントサーバ220は、回線241を介してLAN240に接続され、管理サーバ230は、回線244を介してLAN240に接続されている。
ストレージノード200は、プロセッサ202、メモリ203、ドライブ204およびNIC(Network Interface Card)205を備える。プロセッサ202、メモリ203、ドライブ204およびNIC205は、バス201を介して互いに接続されている。
メモリ203は、プロセッサ202が読み書き可能な主記憶装置である。メモリ203は、例えば、SRAMまたはDRAMなどの半導体メモリである。メモリ203には、プロセッサ202が実行中のプログラムを格納したり、プロセッサ202がプログラムを実行するためのワークエリアを設けたりすることができる。
ドライブ204は、プロセッサ202が読み書き可能な二次記憶装置である。ドライブ204は、例えば、ハードディスク装置またはSSD(Solid State Drive)である。ドライブ204には、各種プログラムの実行ファイルやプログラムの実行に用いられるデータや重複データを格納するボリューム、キャッシュデータを格納するボリュームを保持することができる。
なお、ドライブ204は、RAID(Redundant Arrays of Independent Disks)技術などを用いて複数のハードディスク装置やSSDから構成されていてもよい。
プロセッサ202は、ドライブ204上に格納されている分散ストレージプログラム300(図3参照)をメモリ203上に読み込んで実行する。プロセッサ202は、バス201を介してNIC205と接続し、LAN240および回線241〜243を介して、他のストレージノードおよびクライアントサーバ220とデータを送受信することができる。
ストレージノード210は、プロセッサ212、メモリ213、ドライブ214およびNIC215を備える。プロセッサ212、メモリ213、ドライブ214およびNIC215は、バス211を介して互いに接続されている。
メモリ213は、プロセッサ212が読み書き可能な主記憶装置である。メモリ213は、例えば、SRAMまたはDRAMなどの半導体メモリである。メモリ213には、プロセッサ212が実行中のプログラムを格納したり、プロセッサ212がプログラムを実行するためのワークエリアを設けたりすることができる。
ドライブ214は、プロセッサ212が読み書き可能な二次記憶装置である。ドライブ214は、例えば、ハードディスク装置またはSSDである。ドライブ214には、各種プログラムの実行ファイルやプログラムの実行に用いられるデータや重複データを格納するボリューム、キャッシュデータを格納するボリュームを保持することができる。
なお、ドライブ214は、RAID技術などを用いて複数のハードディスク装置やSSDから構成されていてもよい。
プロセッサ212は、ドライブ214上に格納されている分散ストレージプログラム310(図3参照)をメモリ213上に読み込んで実行する。プロセッサ212は、バス211を介してNIC215と接続し、LAN240および回線241〜243を介して、他のストレージノードおよびクライアントサーバ220とデータを送受信することができる。
管理サーバ230は、LAN240および回線244を介して、分散ストレージを構成するストレージノード200〜210と接続し、ストレージノード200〜210を管理する。
図3は、実施形態に係る分散ストレージシステムの論理構成例を示すブロック図である。
図3において、ストレージノード200上で実行される分散ストレージプログラム300と、ストレージノード210上で実行される分散ストレージプログラム310と、その他のストレージノード上で動作する分散ストレージプログラム(図では省略)は、協調して動作し、分散ストレージシステムSを構成する。
分散ストレージシステムSは、各ストレージノード200〜210のドライブ上に作成されたボリューム302〜312にまたがって分散ファイルシステム320を構成する。分散ストレージシステムSは、データをファイル330、340という単位で管理する。クライアントサーバ220は、分散ストレージプログラム300〜310を介し、分散ファイルシステム320上の各ファイル330、340にデータを読み書きすることができる。
分散ファイルシステム320上の各ファイル330、340は、複数のファイル(分割ファイル)に分割され、各ストレージノード200〜210の持つボリューム302〜312に分散配置される。
ファイル330は、分割ファイル331、334に分割され、各ストレージノード200〜210の持つボリューム302〜312に分散配置されている。例えば、分割ファイル331は、ストレージノード200の持つボリューム302に配置され、分割ファイル334は、ストレージノード210の持つボリューム312に配置される。図3には示していないが、ファイル330は、より多くの分割ファイルに分割されてもよい。
また、ファイル340は、分割ファイル341、344に分割され、各ストレージノード200〜210の持つボリューム302〜312に分散配置されている。例えば、分割ファイル341は、ストレージノード200の持つボリューム302に配置され、分割ファイル344は、ストレージノード210の持つボリューム312に配置される。図3には示していないが、ファイル340は、より多くの分割ファイルに分割されてもよい。
どのストレージノードに割り当てられたボリュームにどの分割ファイルを格納するかは、任意のアルゴリズムで決定される。アルゴリズムの例として、CRUSH(Controlled Replication Under Scalable Hashing)が挙げられる。各分割ファイル341、344は、各分割ファイル341、344を格納するボリューム302〜312を持つストレージノード200〜210によって管理される。
分散ファイルシステム320上の各ファイル330、340は、分割ファイルの他、更新管理テーブルと、ポインタ管理テーブルを保持する。更新管理テーブルは、分割ファイルの更新状況を管理する。ポインタ管理テーブルは、重複データへのポインタ情報を管理する。更新管理テーブルとポインタ管理テーブルは、分割ファイルごとに存在する。
図3の例では、分割ファイル331に対応する更新管理テーブル332およびポインタテーブル333がボリューム302に格納され、分割ファイル334に対応する更新管理テーブル335およびポインタテーブル336がボリューム312に格納されている。また、分割ファイル341に対応する更新管理テーブル342およびポインタテーブル343がボリューム302に格納され、分割ファイル344に対応する更新管理テーブル345およびポインタテーブル346がボリューム312に格納されている。
また、分散ストレージシステムSは、ストレージノード200〜210の持つボリューム302〜312上に、ファイルシステム321〜322を構成する。ファイルシステム321〜322は、重複データ格納ファイル350〜351、キャッシュデータ格納ファイル360〜361を保持する。
そして、分散ストレージシステムSは、分散ファイルシステム320で重複している重複データを分散ファイルシステム320から排除し、分散ファイルシステム320から排除した重複データを、重複排除データとしてファイルシステム321〜322上の重複データ格納ファイル350〜351に格納する。重複データ格納ファイル350〜351は複数作成され、それぞれ各ストレージノード200〜210が使用する。分散ファイルシステム320で重複している重複データは、分割ファイル341、344間で重複している重複データであってもよいし、各分割ファイル341、344内で重複している重複データであってもよい。
さらに、分散ストレージシステムSは、分散ファイルシステム320から排除される重複データのうち、自ノードに重複排除データとしてファイルシステム321〜322上の重複データ格納ファイル350〜351に格納されない重複データを、キャッシュデータ格納ファイル360〜361に格納する。キャッシュデータ格納ファイル360〜361は、それぞれ各ストレージノード200〜210が使用する。分散ファイルシステム320で重複している重複データは、分割ファイル341、344間で重複している重複データであってもよいし、各分割ファイル341、344内で重複している重複データであってもよい。
図3の例では、重複データ格納ファイル350およびキャッシュデータ格納ファイル360が、ストレージノード200に使用され、重複データ格納ファイル351およびキャッシュデータ格納ファイル361が、ストレージノード210に使用されている。
また、図3の例では、分散ファイルシステム320とファイルシステム321〜322が同一のボリューム302〜312を使用しているが、異なるボリュームを使用してもよい。
同様に、図3の例では、重複データ格納ファイル350〜351とキャッシュデータ格納ファイル360〜361がそれぞれ同一のファイルシステム321〜322上に格納されているが、異なるボリュームの異なるファイルシステム上、もしくは、同一のボリュームの異なるファイルシステム上に格納されてもよい。
また、図3の例では、重複データ格納ファイルおよびキャッシュデータ格納ファイルは、各ストレージノードに1つずつ存在しているが、それぞれ複数存在してもよい。
各分散ストレージプログラム300〜310は、重複データを管理するためのテーブルとしてハッシュテーブル301〜311を保持する。図3の例では、分散ストレージプログラム300がハッシュテーブル301を保持し、分散ストレージプログラム310がハッシュテーブル311を保持している。各ストレージノード200〜210が保持するハッシュ値は、ハッシュ値の範囲で区切って各ストレージノード200〜210に分散配置することができる。
図4は、図3の更新管理テーブルの構成を示す図である。
図4において、更新管理テーブル400は、分割ファイルの更新状況を管理するために用いられる。更新管理テーブル400は、分割ファイルごとに存在し、分割ファイルを格納するボリュームに分割ファイルとセットで保存される。分割ファイルが更新された場合、更新部位の先頭のオフセット値がカラム401に、更新サイズがカラム402に記録される。
図5は、図3のポインタ管理テーブルの構成を示す図である。
図5において、ポインタ管理テーブル500は、重複データへのポインタ情報とキャッシュデータへのポインタ情報を管理するために用いられる。このポインタ情報は、それぞれ重複データもしくはキャッシュデータにアクセスするためのアクセス情報として用いることができる。
ポインタ管理テーブル500は、分割ファイルごとに存在し、分割ファイルを格納するボリュームに分割ファイルとセットで保存される。カラム501には、分割ファイルのうち、重複データである部分の先頭のオフセット値が記録される。カラム502には、当該重複データを格納する重複データ格納ファイルのシステム上のパスが記録される。このパス情報にはノード識別子などの情報を含んでよい。カラム503には、重複データ格納ファイルにおいて、当該重複データを格納する部分の先頭のオフセット値が記録される。カラム504には、当該重複データのサイズが記録される。このサイズは、当該重複データのキャッシュデータが有効な場合、キャッシュデータのサイズとしても使用する。カラム505には、当該重複データのキャッシュデータを格納するキャッシュデータ格納ファイルのファイルシステム上のパスが記録される。キャッシュデータが当該ノードに存在しない場合は無効に設定される。カラム506には、キャッシュデータ格納ファイルにおいて、当該重複データのキャッシュデータを格納する部分の先頭のオフセット値が記録される。キャッシュデータが当該ノードに存在しない場合は無効に設定される。
図6は、図3のハッシュテーブルの構成を示す図である。
図6において、ハッシュテーブル600は、分散ストレージ上に書き込まれたデータを管理するために用いられる。カラム601には、分散ストレージ上のファイルに書き込まれたデータのハッシュ値を記録する。カラム602には、当該データを格納するファイルのシステム上のパスが記録される。このパス情報にはノード識別子などの情報を含んでよい。このパスが指し示すファイルは、分割ファイルもしくは重複データ格納ファイルとなりうる。カラム603には、当該データを格納するファイルにおいて、当該データを格納する部分の先頭のオフセット値が記録される。カラム604には、当該データのサイズが記録される。カラム605には、当該データの参照カウントが記録される。当該データが重複データである場合、参照カウントが2以上となる。一方、当該データが重複データでない場合、参照カウントは1になる。
ハッシュテーブル600は、各ストレージノード上のメモリに保存される。各ストレージノードが管理するハッシュ値の範囲は予め決められており、管理するデータのハッシュ値に応じて、どのストレージノードのハッシュテーブルに情報が記録されるかが決まる。
図7は、実施形態に係る分散ストレージシステムSのリード処理を示すフローチャートである。図7では、分散ストレージシステムS上に格納されたファイルのデータをクライアントサーバ220が読み込む際のリード処理を示す。
図7において、ストレージノードAは、クライアントサーバ220からの要求を受け付けるリクエスト受領ノード、ストレージノードBは、クライアントサーバ220からの要求に対応する分割ファイルを格納している分割ファイル格納ノード、ストレージノードCは、クライアントサーバ220からの要求に対応する分割ファイルの重複データを格納している重複データ格納ノードであるものとする。
そして、クライアントサーバ220が、分散ストレージを構成するいずれかのストレージノードAの分散ストレージプログラムに対し、リード要求を送信した時点でリード処理が開始される。リード要求を受信したストレージノードAの分散ストレージプログラムは、リード要求に含まれる情報(データを読み込むファイルのパス、オフセットおよびサイズ)により、当該データを格納する分割ファイルと、当該分割ファイルを格納する分割ファイル格納ノード(ストレージノードB)を特定する(710)。なお、処理710において分割ファイル格納ノードを特定するには、例えばGlusterFS、Cephと呼ばれるファイルシステムに依拠する手法が挙げられる。
次に、ストレージノードAの分散ストレージプログラムは、当該分割ファイルを管理するストレージノードBの分散ストレージプログラムに対し、リード要求を転送する(711)。リード要求されたデータが、複数の分割ファイルにまたがる場合、ストレージノードAの分散ストレージプログラムは、複数のストレージノードの分散ストレージプログラムに対し、リード要求を転送する。
リクエストを転送されたストレージノードBの分散ストレージプログラムは、当該分割ファイルのポインタ管理テーブルを参照し(720)、リード要求データに重複排除済みの重複データが含まれているか確認する(721)。
リード要求データが重複データを含まない場合、ストレージノードBの分散ストレージプログラムは、分割ファイルから要求されたデータを読み込み(727)、読み込んだデータを、リード要求を受領したストレージノードAに送信する(728)。
一方、リード要求データが重複データを含む場合、ストレージノードBの分散ストレージプログラムは、ポインタ管理テーブルを参照し、カラム505〜506が有効かどうか、つまりキャッシュデータがキャッシュデータ格納ファイルに格納されているかを判定し(722)、カラム505〜506が有効であった場合は、カラム504〜506の情報を使ってキャッシュデータ格納ファイルから重複データを読み込む(723)。
しかし、カラム505〜506が無効であった場合、ストレージノードBの分散ストレージプログラムは、ストレージノードCの分散ストレージプログラムに対して、カラム502〜504の情報を使って重複データを読み出す要求を送信する(724)。要求を受けたストレージノードCの分散ストレージプログラムは、指定されたデータを自ノードの重複データ格納ファイルから読み込み(730)、ストレージノードBの分散ストレージプログラムにデータを送信する(731)。ストレージノードBの分散ストレージプログラムは、データを受信(725)した後、受領したデータをもとにキャッシュデータ更新処理(800)を実行する。
次に、ストレージノードBの分散ストレージプログラムは、リード要求に重複排除されていない通常データが含まれているか確認する(726)。リード要求に重複排除されていない通常データが含まれていない場合、ストレージノードBの分散ストレージプログラムは、読み込んだデータを、リード要求を受領したストレージノードAに送信する(728)。
一方、リード要求に重複排除されていない通常データが含まれている場合、ストレージノードBの分散ストレージプログラムは、当該データを分割ファイルから読み込み(727)、処理722〜725で読み込んだデータと共に、リード要求を受領したストレージノードAに送信する(728)。
次に、データを受領したストレージノードAの分散ストレージプログラムは、リクエストを転送した全てのノードからデータを受領したか確認する(712)。ストレージノードAの分散ストレージプログラムは、全てのストレージノードからデータを受領していたら、クライアントサーバ220にデータを送信し、処理を終了する。全てのストレージノードからデータを受領していない場合、処理712に戻り、確認処理を繰り返す。
図8は、図7のキャッシュデータ更新処理(800)を示すフローチャートである。図8は、自ノードのキャッシュデータ格納ファイルに格納されていない重複データを、キャッシュデータ格納ファイルに格納する際の処理を示す。
分散ストレージプログラムは、自ノードの空き容量が枯渇していないかを確認(801)する。枯渇に代えて、空き容量が所定量あるかを確認してもよい。枯渇していない場合は、キャッシュデータ格納ファイルに重複データを追記して格納(804)し、格納されたキャッシュデータに対応するポインタ管理テーブルのカラム505〜506を更新する(805)。この時、キャッシュデータ格納ファイルが存在しない場合は、新規に作成することができる。
一方、自ノードの空き容量が枯渇していた場合、分散ストレージプログラムは、キャッシュデータ格納ファイルが存在するかを確認する(802)。キャッシュデータ格納ファイルが存在しない場合、キャッシュデータのキャッシュデータ格納ファイルへの格納は行わず終了する。しかし、キャッシュデータ格納ファイルが存在していた場合、キャッシュデータ格納ファイルの一部もしくは全部を破棄(803)し、解放された領域に重複データを格納(804)し、破棄されたキャッシュデータおよび格納されたキャッシュデータに対応するポインタ管理テーブルのカラム505〜506を更新する(805)。
このキャッシュデータ格納ファイルの一部もしくは全部を破棄(803)する際、例えばCRUSHのような分割ファイルの格納ノード決定アルゴリズムにより、自ノードがデータ保持ノードになっている分割データに含まれる重複データを優先的にキャッシュデータ格納ファイルに残すようにする。また、キャッシュデータを開放する際に、破棄することが決定したキャッシュデータと同一のファイルのためにキャッシュされたキャッシュデータをまとめて破棄してもよい。この分割ファイル格納ノード決定アルゴリズムは、分散ファイルシステムに合わせて選択することができる。また、一般的なLRU(Least Recently Used)のようなキャッシュ入れ替えアルゴリズムも併用してよい。
次に説明するライト処理では、分散ストレージシステムSは、データの書き込み時に重複排除を実行するインライン重複排除と、任意のタイミングで重複排除を実行するポストプロセス重複排除の双方をサポートする。
図9は、実施形態に係る分散ストレージシステムSのインライン重複排除ライト処理を示すフローチャートである。図9では、インライン重複排除時に、クライアントサーバ220が、分散ストレージシステムS上に格納されたファイルにデータを書き込む際のライト処理を示す。
図9において、ストレージノードAは、クライアントサーバ220からの要求を受け付けるリクエスト受領ノード、ストレージノードBは、クライアントサーバ220からの要求に対応する分割ファイルを格納している分割ファイル格納ノードであるものとする。
そして、クライアントサーバ220が、分散ストレージシステムSを構成するいずれかのストレージノードAの分散ストレージプログラムに対し、ライト要求を送信した時点でライト処理が開始される。ライト要求を受信したストレージノードAの分散ストレージプログラムは、ライト要求に含まれる情報(データを書き込むファイルのパス、オフセットおよびサイズ)により、ライト対象の分割ファイルと、当該分割ファイルを格納する分割ファイル格納ノード(ストレージノードB)を特定する(910)。なお、処理910において分割ファイル格納ノードを特定するには、処理710と同様に、例えばGlusterFS、Cephと呼ばれるファイルシステムに依拠する手法が挙げられる。
次に、ストレージノードAの分散ストレージプログラムは、当該分割ファイルを管理するストレージノードBの分散ストレージプログラムに対し、ライト要求を転送する(911)。ライト要求されたデータが、複数の分割ファイルにまたがる場合、ストレージノードAの分散ストレージプログラムは、複数のストレージノードの分散ストレージプログラムに対し、ライト要求を転送する。
リクエストを転送されたストレージノードBの分散ストレージプログラムは、当該分割ファイルのポインタ管理テーブルを参照し(920)、ライト要求データに重複排除済みの重複データが含まれているか確認する(921)。
ライト要求データが重複データを含む場合、ストレージノードBの分散ストレージプログラムは、重複データ更新処理を実行してから(1000)、インライン重複排除処理を実行する(1100)。
一方、ライト要求データが重複データを含まない場合、ストレージノードBの分散ストレージプログラムは、インライン重複排除処理を実行する(1100)。
次に、ストレージノードBの分散ストレージプログラムは、インライン重複排除処理後の処理結果を、ライト要求を受領したストレージノードAの分散ストレージプログラムに通知する(922)。
次に、ストレージノードBから処理結果を受領したストレージノードAの分散ストレージプログラムは、リクエストを転送した全てのストレージノードから処理結果を受領したか確認する(912)ストレージノードAの分散ストレージプログラムは、全てのストレージノードから処理結果を受領していたら、クライアントサーバ220にライト処理の結果を送信し(913)、処理を終了する。全てのストレージノードから処理結果を受領していない場合、処理912に戻り、確認処理を繰り返す。
図10は、図9の重複データ更新処理(1000)を示すフローチャートである。
図10において、ストレージノードBは、クライアントサーバ220からの要求に対応する分割ファイルを格納している分割ファイル格納ノード、ストレージノードCは、クライアントサーバ220からの要求に対応する重複データのハッシュ値を管理するハッシュテーブル管理ノード、ストレージノードDは、クライアントサーバ220からの要求に対応する分割ファイルの重複データを格納している重複データ格納ノードであるものとする。
まず、図9の重複データ更新処理を実行するストレージノードBの分散ストレージプログラムは、データを書き込む分割ファイルのポインタ管理テーブルを参照する(1010)。
次に、ストレージノードBの分散ストレージプログラムは、ポインタ管理テーブルを参照し、カラム505〜506が有効かどうか、つまりキャッシュデータがキャッシュデータ格納ファイルに格納されているかを判定し(1011)、カラム505〜506が有効であった場合は、カラム504〜506の情報を使ってキャッシュデータ格納ファイルから重複データを読み込み(1012)、その後、キャッシュデータ格納ファイルに格納されている当該重複データを破棄する(1013)。
一方、カラム505〜506が無効であった場合、ストレージノードBの分散ストレージプログラムは、ストレージノードDの分散ストレージプログラムに対して、カラム502〜504の情報を使って重複データを読み出す要求を送信する(1014)。要求を受けたストレージノードDの分散ストレージプログラムは、指定されたデータを自ノードの重複データ格納ファイルから読み込み(1030)、ストレージノードBの分散ストレージプログラムにデータを送信し(1031)、ストレージノードBの分散ストレージプログラムは、データを受信(1015)する。
次に、ストレージノードBの分散ストレージプログラムは、ポインタ管理テーブルから該当の重複データのエントリを削除する(1016)。なお、当該重複データのエントリに、有効なキャッシュデータ格納ファイルの参照情報(カラム505〜506)がある場合は、こちらも削除する。
次に、ストレージノードBの分散ストレージプログラムは、処理1011〜1015で読み込んだ重複データのハッシュ値を計算し(1017)、当該重複データを管理するハッシュテーブルを持つストレージノードCに重複データの情報を送信する(1018)。
次に、重複データの情報を受信したストレージノードCの分散ストレージプログラムは、自身のハッシュテーブルに記録されている当該データのエントリを検索し、当該データの参照カウントを減算する(1020)。
ストレージノードCの分散ストレージプログラムは、当該データの参照カウントが0でない場合は、そのまま処理を終了する。
一方、ストレージノードCの分散ストレージプログラムは、参照カウントが0になった場合は、ハッシュテーブルから当該データのエントリを削除し(1022)、ストレージノードDに重複データの削除要求を送信する(1023)。削除要求を受領したストレージノードDの分散ストレージプログラムは、指定された重複データを削除し(1032)、重複データの削除完了を通知する(1033)。ストレージノードCの分散ストレージプログラムは、この通知を受け取った後(1024)、処理を終了する。
図11は、図9のインライン重複排除処理(1100)を示すフローチャートである。
図11において、ストレージノードBは、クライアントサーバ220からの要求に対応する分割ファイルを格納している分割ファイル格納ノード、ストレージノードCは、クライアントサーバ220からの要求に対応する重複データのハッシュ値を管理するハッシュテーブル管理ノード、ストレージノードDは、重複排除対象データと重複しているデータを保持する重複データ格納ノードであるものとする。
インライン重複排除処理を実行するストレージノードBの分散ストレージプログラムは、ライト処理で書き込むデータのハッシュ値を計算する(1110)。このとき、ストレージノードBの分散ストレージプログラムは、重複排除対象のデータごとにハッシュ値を計算する。例えば、書き込むデータが1000バイトで、そのうち重複排除対象のデータが、書き込むデータの先頭から20バイト目から100バイトと、先頭から540バイト目から400バイトの場合、処理1110は、2回実行される。
次に、ストレージノードBの分散ストレージプログラムは、計算したハッシュ値をもとに、重複排除対象データを管理するハッシュテーブルを持つストレージノードCに、重複排除対象データの情報(ハッシュ値、重複排除対象データを格納する分割ファイルのパス、オフセットおよびサイズ)を送信する(1111)。
情報を受領したストレージノードCの分散ストレージプログラムは、ハッシュテーブルを検索し(1120)、重複排除対象データのエントリがハッシュテーブルに存在するか確認する(1121)。
ストレージノードCの分散ストレージプログラムは、ハッシュテーブルにエントリがなければ、ハッシュテーブルに重複排除対象データの情報(ハッシュ値、重複排除対象データを格納する分割ファイルのパス、オフセットおよびサイズ)を登録し、参照カウントを1にする(1122)。
次に、ストレージノードCの分散ストレージプログラムは、インライン重複排除処理を実行するストレージノードBに処理終了を通知する(1123)。
処理終了の通知を受け取ったストレージノードBの分散ストレージプログラムは、キャッシュデータ解放処理(1200)を行った後、重複排除対象のデータを分割ファイルに書き込む(1012)。
次に、ストレージノードBの分散ストレージプログラムは、全重複排除対象データの処理が終了したか確認し(1114)、全重複排除対象データの処理が終了していなければ、処理1110から処理を繰り返す。全重複排除対象データの処理が終了していれば、キャッシュデータ解放処理(1200)を行った後、重複排除対象外のデータも分割ファイルに書き込む(1115)。この後、すべての重複排除対象外データの処理が終了したかを確認し(1116)、終了していればインライン重複排除処理を終了し、そうでなければ、処理1200、1115から処理を繰り返す。
一方、処理1121において、ストレージノードCの分散ストレージプログラムは、ハッシュテーブルにエントリあれば、当該エントリの参照カウントが1か確認し(1124)、1でなければ(参照カウントが2以上であれば)、重複データとみなし、当該エントリの参照カウントを1増やす(1125)。
次に、ストレージノードCの分散ストレージプログラムは、当該エントリに記録されている情報(重複データを格納する重複データ格納ファイルのパス、オフセットおよびサイズ)をポインタ情報としてインライン重複排除処理を実行するストレージノードBに通知する(1126)。
次に、ポインタ情報を受け取ったストレージノードBの分散ストレージプログラムは、重複排除対象データを格納するはずだった分割ファイルのポインタ管理テーブルに、受け取ったポインタ情報を書き込む(1113)。さらに、ストレージノードBの分散ストレージプログラムは、重複データを自ノードのキャッシュデータ格納ファイルに格納するためにキャッシュデータ更新処理(800)を実行する。
そして、ストレージノードBの分散ストレージプログラムは、全重複排除対象データの処理が終了したか確認し(1114)、全重複排除対象データの処理が終了していなければ、処理1110から処理を繰り返す。全重複排除対象データの処理が終了していれば、キャッシュデータ解放処理(1200)を行った後、重複排除対象外のデータも分割ファイルに書き込む(1115)。この後、すべての重複排除対象外データの処理が終了したかを確認し(1116)、終了していればインライン重複排除処理を終了し、そうでなければ、処理1200、1115から処理を繰り返す。
一方、処理1124において、ストレージノードCの分散ストレージプログラムは、参照カウントが1であった場合、ハッシュテーブルのエントリの情報をもとに、重複排除対象データと重複しているデータを保持しているストレージノードDに、当該エントリに記録されている情報(重複データを格納する分割ファイルのパス、オフセットおよびサイズ)を通知する(1127)。
通知を受けたストレージノードDの分散ストレージプログラムは、自身のボリュームに格納されている重複データを、分割ファイルから重複データ格納ファイルに移動する(1130)。このとき、ストレージノードDの分散ストレージプログラムは、重複排除対象データと重複データが本当に重複するかバイト比較を行ってもよい。ストレージノードDの分散ストレージプログラムは、このデータ移動にあわせてポインタ管理テーブルを更新し(1131)、このポインタ情報(重複データを格納する重複データ格納ファイルのパス、オフセットおよびサイズ)をストレージノードCの分散ストレージプログラムに通知する(1132)。
ポインタ情報を受け取ったストレージノードCの分散ストレージプログラムは、ハッシュテーブルにおける重複データのエントリのパス、オフセットおよびサイズを、重複データ格納ファイルに格納された重複データのパス、オフセットおよびサイズに対応するように上書きする(1128)。
次に、ストレージノードCの分散ストレージプログラムは、重複データのポインタ情報(重複データを格納する重複データ格納ファイルのパス、オフセットおよびサイズ)を、インライン重複排除処理を実行するストレージノードBに通知する(1129)。
次に、ポインタ情報を受け取ったストレージノードBの分散ストレージプログラムは、重複排除対象データを格納するはずだった分割ファイルのポインタ管理テーブルに、受け取ったポインタ情報を書き込む(1113)。さらに、ストレージノードBの分散ストレージプログラムは、重複データを自ノードのキャッシュデータ格納ファイルに格納するためにキャッシュデータ更新処理(800)を実行する。
そして、ストレージノードBの分散ストレージプログラムは、全重複排除対象データの処理が終了したか確認し(1114)、全重複排除対象データの処理が終了していなければ、処理1110から処理を繰り返す。全重複排除対象データの処理が終了していれば、キャッシュデータ解放処理(1200)を行った後、重複排除対象外のデータも分割ファイルに書き込む(1115)。この後、すべての重複排除対象外データの処理が終了したかを確認し(1116)、終了していればインライン重複排除処理を終了し、そうでなければ、処理1200、1115から処理を繰り返す。
図12は、図11のキャッシュデータ解放処理(1200)を示すフローチャートである。図12は、自ノードの持つボリュームの空き容量を確認し、空き容量が枯渇している場合は、キャッシュデータを破棄して空き容量を確保する際の処理を示す。
分散ストレージプログラムは、自ノードの空き容量が枯渇していないかを確認(1201)し、枯渇していない場合は、キャッシュデータの破棄を行わずに終了する。
一方、自ノードの空き容量が枯渇していた場合、分散ストレージプログラムは、キャッシュデータ格納ファイルが存在するかを確認する(1202)。キャッシュデータ格納ファイルが存在しない場合、キャッシュデータの破棄は行わずに終了する。しかし、キャッシュデータ格納ファイルが存在していた場合、キャッシュデータ格納ファイルの一部もしくは全部を破棄して領域を解放し(1203)、格納されていたキャッシュデータに対応するポインタ管理テーブルのカラム505〜506を無効にする(1204)。
このキャッシュデータ格納ファイルの一部もしくは全部を破棄して領域を解放(1203)する際、例えばCRUSHのような分割ファイルの格納ノード決定アルゴリズムにより、自ノードがデータ保持ノードになっている分割データに含まれる重複データを優先的にキャッシュデータ格納ファイルに残すようにする。また、キャッシュデータを開放する際に、破棄することが決定したキャッシュデータと同一のファイルのためにキャッシュされたキャッシュデータをまとめて破棄してもよい。この分割ファイル格納ノード決定アルゴリズムは、分散ファイルシステムに合わせて選択することができる。また、一般的なLRU(Least Recently Used)のようなキャッシュ入れ替えアルゴリズムも併用してよい。
図13は、実施形態に係る分散ストレージシステムSのポストプロセス重複排除ライト処理を示すフローチャートである。図13では、ポストプロセス重複排除時に、クライアントサーバ220が、分散ストレージシステムS上に格納されたファイルにデータを書き込む際のライト処理を示す。
図13において、クライアントサーバ220が、分散ストレージシステムSを構成するいずれかのストレージノードAの分散ストレージプログラムに対し、ライト要求を送信した時点でライト処理が開始される。ライト要求を受信したストレージノードAの分散ストレージプログラムは、ライト要求に含まれる情報(データを書き込むファイルのパス、オフセットおよびサイズ)により、ライト処理の実行対象の分割ファイルと、当該分割ファイルを格納する分割ファイル格納ノード(ストレージノードB)を特定する(1310)。なお、処理1310において分割ファイル格納ノードを特定するには、処理710、910と同様に、例えばGlusterFS、Cephと呼ばれるファイルシステムに依拠する手法が挙げられる。
次に、ストレージノードAの分散ストレージプログラムは、当該分割ファイルを管理するストレージノードBの分散ストレージプログラムに対し、ライト要求を転送する(1311)。ライト要求されたデータが、複数の分割ファイルにまたがる場合、ストレージノードAの分散ストレージプログラムは、複数のストレージノードの分散ストレージプログラムに対し、ライト要求を転送する。
リクエストを転送されたストレージノードBの分散ストレージプログラムは、当該分割ファイルのポインタ管理テーブルを参照し(1320)、ライト要求データに重複排除済みの重複データが含まれているか確認する(1321)。
ライト要求データが重複データを含む場合、ストレージノードBの分散ストレージプログラムは、重複データ更新処理1000と、キャッシュデータ解放処理1200を実行してから、当該分割ファイルにデータを書き込む(1322)。
一方、処理1321において、ライト要求データが重複データを含まない場合は、ストレージノードBの分散ストレージプログラムは、キャッシュデータ解放処理1200を実行してから、当該分割ファイルにデータを書き込む(1322)。
次に、ストレージノードBの分散ストレージプログラムは、当該分割ファイルの更新管理テーブルに対して、データを書き込んだ部位の先頭オフセットとサイズを記録する(1323)。
次に、ストレージノードBの分散ストレージプログラムは、ライト要求を受領したストレージノードAの分散ストレージプログラムに処理結果を通知する(1324)。
次に、ストレージノードBから処理結果を受領したストレージノードAの分散ストレージプログラムは、リクエストを転送した全てのストレージノードから処理結果を受領したか確認する(1312)。ストレージノードAの分散ストレージプログラムは、全てのストレージノードから処理結果を受領していたら、クライアントサーバ220にライト処理の結果を送信し、処理を終了する。全てのストレージノードから処理結果を受領していない場合、処理1312に戻り、確認処理を繰り返す。
図14は、実施形態に係る分散ストレージシステムSのポストプロセス重複排除処理を示すフローチャートである。
図14において、ストレージノードBは、クライアントサーバ220からの要求に対応する分割ファイルを格納している分割ファイル格納ノード、ストレージノードCは、クライアントサーバ220からの要求に対応する重複データのハッシュ値を管理するハッシュテーブル管理ノード、ストレージノードDは、重複排除対象データと重複しているデータを保持する重複データ格納ノードであるものとする。
図14において、ポストプロセス重複排除処理を実行するストレージノードBの分散ストレージプログラムは、自身が管理する分割ファイルの更新管理テーブルを参照する(1410)。
次に、ストレージノードBの分散ストレージプログラムは、分割ファイルに格納されたデータのうち、更新されているデータを読み込み、ハッシュ値を計算する(1411)。このとき、ストレージノードBの分散ストレージプログラムは、重複排除対象のデータごとにハッシュ値を計算する。例えば、読み込んだ更新データが1000バイトで、そのうち重複排除対象のデータが、書き込むデータの先頭から20バイト目から100バイトと、先頭から540バイト目から400バイトの場合、処理1211は、2回実行される。
次に、ストレージノードBの分散ストレージプログラムは、計算したハッシュ値をもとに、重複排除対象データを管理するハッシュテーブルを持つストレージノードCに、重複排除対象データの情報(ハッシュ値、重複排除対象データを格納する分割ファイルのパス、オフセットおよびサイズ)を送信する(1412)。
情報を受領したストレージノードCの分散ストレージプログラムは、ハッシュテーブルを検索し(1420)、重複排除対象データのエントリがハッシュテーブルに存在するか確認する(1421)。
ストレージノードCの分散ストレージプログラムは、ハッシュテーブルにエントリがなければ、ハッシュテーブルに重複排除対象データの情報(ハッシュ値、重複排除対象データを格納する分割ファイルのパス、オフセットおよびサイズ)を登録し、参照カウントを1にする(1422)。
次に、ストレージノードCの分散ストレージプログラムは、ポストプロセス重複排除処理を実行するストレージノードBに処理終了を通知する(1423)。
処理終了の通知を受け取ったストレージノードBの分散ストレージプログラムは、全重複排除対象データの処理が終了したか確認し(1415)、全重複排除対象データの処理が終了していれば、更新管理テーブルから処理した更新データのエントリを削除し(1416)、全更新データを処理したか確認する(1417)。
ストレージノードBの分散ストレージプログラムは、全更新データを処理していれば、ポストプロセス重複排除処理を終了し、そうでなければ、処理1410から処理を繰り返す。
一方、ストレージノードBの分散ストレージプログラムは、処理1415において、全重複排除対象データの処理が終了していなければ、処理1411以降の処理を繰り返し実行する。
一方、処理1421において、ストレージノードCの分散ストレージプログラムは、ハッシュテーブルにエントリあれば、当該エントリの参照カウントが1か確認し(1424)、1でなければ(参照カウントが2以上であれば)、重複データとみなし、当該エントリの参照カウントを1増やす(1425)。
次に、ストレージノードCの分散ストレージプログラムは、当該エントリに記録されている情報(重複データを格納する重複データ格納ファイルのパス、オフセットおよびサイズ)をポインタ情報としてポストプロセス重複排除処理を実行するストレージノードBに通知する(1426)。
次に、ポインタ情報を受け取ったストレージノードBの分散ストレージプログラムは、重複排除対象データを格納するはずだった分割ファイルのポインタ管理テーブルに、受け取ったポインタ情報を書き込む(1413)。さらに、ストレージノードBの分散ストレージプログラムは、キャッシュデータ更新処理(800)を実行した後、分割ファイルに格納されているローカルの重複データを削除する(1414)。
次に、ストレージノードBの分散ストレージプログラムは、全重複排除対象データの処理が終了したか確認し(1415)、全重複排除対象データの処理が終了していれば、更新管理テーブルから処理した更新データのエントリを削除し(1416)、全更新データを処理したか確認する(1417)。
ストレージノードBの分散ストレージプログラムは、全更新データを処理していれば、ポストプロセス重複排除処理を終了し、そうでなければ、処理1410から処理を繰り返す。
一方、ストレージノードBの分散ストレージプログラムは、処理1415において、全重複排除対象データの処理が終了していなければ、処理1411以降の処理を繰り返し実行する。
一方、処理1124において、ストレージノードCの分散ストレージプログラムは、参照カウントが1であった場合、ハッシュテーブルのエントリの情報をもとに、重複排除対象データと重複しているデータを保持しているストレージノードDに、当該エントリに記録されている情報(重複データを格納する分割ファイルのパス、オフセットおよびサイズ)を通知する(1427)。
通知を受けたストレージノードDの分散ストレージプログラムは、自身のボリュームに格納されている重複データを、分割ファイルから重複データ格納ファイルに移動する(1430)。このとき、ストレージノードDの分散ストレージプログラムは、重複排除対象データと重複データが本当に重複するかバイト比較を行ってもよい。ストレージノードDの分散ストレージプログラムは、このデータ移動にあわせてポインタ管理テーブルを更新し(1431)、このポインタ情報(重複データを格納する重複データ格納ファイルのパス、オフセットおよびサイズ)をストレージノードCの分散ストレージプログラムに通知する(1432)。
ポインタ情報を受け取ったストレージノードCの分散ストレージプログラムは、ハッシュテーブルにおける重複データのエントリのパス、オフセットおよびサイズを、重複データ格納ファイルに格納された重複データのパス、オフセットおよびサイズに対応するように上書きする(1428)。
次に、ストレージノードCの分散ストレージプログラムは、重複データのポインタ情報(重複データを格納する重複データ格納ファイルのパス、オフセットおよびサイズ)を、ポストプロセス重複排除処理を実行するストレージノードBに通知する(1429)。
次に、ポインタ情報を受け取ったストレージノードBの分散ストレージプログラムは、重複排除対象データを格納するはずだった分割ファイルのポインタ管理テーブルに、受け取ったポインタ情報を書き込む(1413)。さらに、ストレージノードBの分散ストレージプログラムは、重複データを自ノードのキャッシュデータ格納うファイルに格納するためにキャッシュデータ更新処理(800)を実行した後、分割ファイルに格納されているローカルの重複データを削除する(1414)。
次に、ストレージノードBの分散ストレージプログラムは、全重複排除対象データの処理が終了したか確認し(1415)、全重複排除対象データの処理が終了していれば、更新管理テーブルから処理した更新データのエントリを削除し(1416)、全更新データを処理したか確認する(1417)。
ストレージノードBの分散ストレージプログラムは、全更新データを処理していれば、ポストプロセス重複排除処理を終了し、そうでなければ、処理1410から処理を繰り返す。
一方、ストレージノードBの分散ストレージプログラムは、処理1415において、全重複排除対象データの処理が終了していなければ、処理1411以降の処理を繰り返し実行する。
このように構成される本実施例によれば、ノード間重複排除における容量効率と性能安定性を両立可能な分散ストレージシステムSおよび分散ストレージシステムにおけるデータ管理方法を実現することができる。
より詳細には、以上の動作フローにより、インライン重複排除ライト処理もしくはポストプロセス重複排除ライト処理において、空き容量を重複データのキャッシュとして割り当て、また容量枯渇時にはキャッシュ領域を解放することで、ノード間重複排除を用いた高容量効率の分散ストレージを実現しつつ、リード処理の際にキャッシュデータを利用した高性能を安定的に供給することができる。
また、全ストレージノードの分割ファイルサイズ、重複データ格納ファイル、キャッシュデータ格納ファイルの容量を合算することで、ノード間重複排除適用前の容量を算出し、ストレージ管理者等に提供することができる。
さらに、各ストレージノードにドライブなどを増設し、ボリューム容量を追加することで、キャッシュデータ格納ファイルに利用可能な容量を増やし、性能を向上することができる。
なお、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD−ROM、DVD−ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
S…分散ストレージシステム、100、110…ストレージノード、120…クライアントサーバ、101、111…重複排除データ、102、112…キャッシュデータ、300、310…分散ストレージプログラム、320…分散ファイルシステム、350、351…重複データ格納ファイル、360、361…キャッシュデータ格納ファイル、400…更新管理テーブル、500…ポインタ管理テーブル、600…ハッシュテーブル



Claims (14)

  1. 複数のストレージノードを有する分散ストレージ装置であって、
    前記ストレージノードはストレージデバイスとプロセッサとを有し、
    前記複数のストレージノードは、ストレージノード間にて重複排除する重複排除機能を有し、
    前記ストレージデバイスには、複数の前記ストレージノードにおいて重複排除されていないファイルと、重複排除された重複データが格納された重複データ格納ファイルと、他のストレージノードに格納された重複データのキャッシュデータが格納されたキャッシュデータ格納ファイルとが格納され、
    前記プロセッサは、
    所定の条件を満たした場合に、前記キャッシュデータを破棄し、
    前記キャッシュデータのリードアクセス要求を受けた際に、前記キャッシュデータを前記キャッシュデータ格納ファイルに格納している場合には当該キャッシュデータを読み出し、前記キャッシュデータを破棄している場合には前記他のストレージノードに要求して前記キャッシュデータにかかる前記重複データを読み出す
    ことを特徴とする分散ストレージ装置。
  2. 請求項1記載の分散ストレージ装置において、
    前記所定の条件は、前記ストレージノード内のストレージデバイスの空き容量が少ないことである
    ことを特徴とする分散ストレージ装置。
  3. 請求項1記載の分散ストレージ装置において、
    前記プロセッサは、前記キャッシュデータ格納ファイルの前記キャッシュデータの一部もしくは全部を破棄して、前記他のストレージノードから読み出した前記リードアクセス要求にかかる前記重複データを前記キャッシュデータ格納ファイルに格納する
    ことを特徴とする分散ストレージ装置。
  4. 請求項3記載の分散ストレージ装置において、
    前記所定の複数のファイルがサーバからのアクセス単位となっており、前記アクセス単位内の所定の複数のファイルは複数のストレージノードに分散して格納されるとともに、前記ファイルを格納する担当がストレージノードに定められており、
    前記プロセッサは、前記キャッシュデータ格納ファイルを破棄する際、自身の前記ストレージノードが担当となっているファイルにかかる前記重複データの前記キャッシュデータを優先的に前記キャッシュデータ格納ファイルに残す
    ことを特徴とする分散ストレージ装置。
  5. 請求項3記載の分散ストレージ装置において、
    前記所定の複数のファイルがサーバからのアクセス単位となっており、前記アクセス単位内の所定の複数のファイルは複数のストレージノードに分散して格納されるとともに、前記ファイルを格納する担当がストレージノードに定められており、
    前記プロセッサは、前記キャッシュデータを破棄する際、破棄する前記キャッシュデータがあるアクセス単位の一部分を構成しているファイルである場合に、前記ファイルと同一のアクセス単位を構成する別のファイルの前記キャッシュデータを破棄する
    ことを特徴とする分散ストレージ装置。
  6. 請求項1記載の分散ストレージ装置において、
    前記プロセッサは、ライトアクセス要求を受けた際に、ライトアクセス要求にかかるデータがいずれかのデータと重複していることを検出した場合、重複排除を行うとともに、このライトアクセス要求にかかるデータを前記キャッシュデータ格納ファイルに格納する
    ことを特徴とする分散ストレージ装置。
  7. 請求項6記載の分散ストレージ装置において、
    前記プロセッサは、前記キャッシュデータ格納ファイルの前記キャッシュデータの一部もしくは全部を破棄し、前記ライトアクセス要求にかかる前記データの中に検出された前記重複データを前記キャッシュデータ格納ファイルに格納する
    ことを特徴とする分散ストレージ装置。
  8. 請求項7記載の分散ストレージ装置において、
    前記所定の複数のファイルがサーバからのアクセス単位となっており、前記アクセス単位内の所定の複数のファイルは複数のストレージノードに分散して格納されるとともに、前記ファイルを格納する担当がストレージノードに定められており、
    前記プロセッサは、前記キャッシュデータ格納ファイルを破棄する際、自身の前記ストレージノードが担当となっているファイルにかかる前記重複データの前記キャッシュデータを優先的に前記キャッシュデータ格納ファイルに残す
    ことを特徴とする分散ストレージ装置。
  9. 請求項7記載の分散ストレージ装置において、
    前記所定の複数のファイルがサーバからのアクセス単位となっており、前記アクセス単位内の所定の複数のファイルは複数のストレージノードに分散して格納されるとともに、前記ファイルを格納する担当がストレージノードに定められており、
    前記プロセッサは、前記キャッシュデータを破棄する際、破棄する前記キャッシュデータがあるアクセス単位の一部分を構成しているファイルである場合に、前記ファイルと同一のアクセス単位を構成する別のファイルの前記キャッシュデータを破棄する
    ことを特徴とする分散ストレージ装置。
  10. 請求項1記載の分散ストレージ装置において、
    前記プロセッサは、ライトアクセス要求を受けて前記重複排除されていないファイルに書き込みした後、任意のタイミングで重複判定を行い、書き込まれたデータの中に重複しているデータを検出した場合、この重複しているデータを前記キャッシュデータ格納ファイルに保存する
    ことを特徴とする分散ストレージ装置。
  11. 請求項10記載の分散ストレージ装置において、
    前記プロセッサは、前記キャッシュデータ格納ファイルの前記キャッシュデータの一部もしくは全部を破棄し、前記ライトアクセス要求にかかる前記データの中に検出された前記重複データを前記キャッシュデータ格納ファイルに格納する
    ことを特徴とする分散ストレージ装置。
  12. 請求項11記載の分散ストレージ装置において、
    前記所定の複数のファイルがサーバからのアクセス単位となっており、前記アクセス単位内の所定の複数のファイルは複数のストレージノードに分散して格納されるとともに、前記ファイルを格納する担当がストレージノードに定められており、
    前記プロセッサは、前記キャッシュデータ格納ファイルを破棄する際、自身の前記ストレージノードが担当になっているファイルにかかる前記重複データの前記キャッシュデータを優先的に前記キャッシュデータ格納ファイルに残す
    ことを特徴とする分散ストレージ装置。
  13. 請求項11記載の分散ストレージ装置において、
    前記所定の複数のファイルがサーバからのアクセス単位となっており、前記アクセス単位内の所定の複数のファイルは複数のストレージノードに分散して格納されるとともに、前記ファイルを格納する担当がストレージノードに定められており、
    前記プロセッサは、前記キャッシュデータを破棄する際、破棄する前記キャッシュデータがあるアクセス単位の一部分を構成しているファイルである場合に、前記ファイルと同一のアクセス単位を構成する別のファイルの前記キャッシュデータを破棄する
    ことを特徴とする分散ストレージ装置。
  14. 複数のストレージノードを有する分散ストレージ装置におけるデータ管理方法であって、
    前記ストレージノードはストレージデバイスとプロセッサとを有し、
    前記複数のストレージノードは、ストレージノード間にて重複排除する重複排除機能を有し、
    前記ストレージデバイスには、複数の前記ストレージノードにおいて重複排除されていないファイルと、重複排除された重複データが格納された重複データ格納ファイルと、他のストレージノードに格納された重複データのキャッシュデータが格納されたキャッシュデータ格納ファイルとが格納され、
    所定の条件を満たした場合に、前記キャッシュデータを破棄し、
    前記キャッシュデータのリードアクセス要求を受けた際に、前記キャッシュデータを前記キャッシュデータ格納ファイルに格納している場合には当該キャッシュデータを読み出し、前記キャッシュデータを破棄している場合には他のストレージノードに要求して前記キャッシュデータにかかる前記重複データを読み出す
    ことを特徴とする分散ストレージ装置におけるデータ管理方法。
JP2020092660A 2020-05-27 2020-05-27 分散ストレージ装置および分散ストレージ装置におけるデータ管理方法 Active JP7102460B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2020092660A JP7102460B2 (ja) 2020-05-27 2020-05-27 分散ストレージ装置および分散ストレージ装置におけるデータ管理方法
US17/182,316 US11520745B2 (en) 2020-05-27 2021-02-23 Distributed storage device and data management method in distributed storage device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020092660A JP7102460B2 (ja) 2020-05-27 2020-05-27 分散ストレージ装置および分散ストレージ装置におけるデータ管理方法

Publications (2)

Publication Number Publication Date
JP2021189624A true JP2021189624A (ja) 2021-12-13
JP7102460B2 JP7102460B2 (ja) 2022-07-19

Family

ID=78706371

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020092660A Active JP7102460B2 (ja) 2020-05-27 2020-05-27 分散ストレージ装置および分散ストレージ装置におけるデータ管理方法

Country Status (2)

Country Link
US (1) US11520745B2 (ja)
JP (1) JP7102460B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102467372B1 (ko) * 2022-01-06 2022-11-14 삼성전자주식회사 스토리지 장치 및 이의 동작 방법
JP7274057B1 (ja) * 2022-04-13 2023-05-15 三菱電機株式会社 重複排除システム、サーバ装置、重複排除方法、および、重複排除プログラム

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10459892B2 (en) 2014-04-23 2019-10-29 Qumulo, Inc. Filesystem hierarchical aggregate metrics
US11360936B2 (en) 2018-06-08 2022-06-14 Qumulo, Inc. Managing per object snapshot coverage in filesystems
US10795796B1 (en) 2020-01-24 2020-10-06 Qumulo, Inc. Predictive performance analysis for file systems
US11151001B2 (en) 2020-01-28 2021-10-19 Qumulo, Inc. Recovery checkpoints for distributed file systems
US11775481B2 (en) 2020-09-30 2023-10-03 Qumulo, Inc. User interfaces for managing distributed file systems
US11157458B1 (en) 2021-01-28 2021-10-26 Qumulo, Inc. Replicating files in distributed file systems using object-based data storage
US11461241B2 (en) 2021-03-03 2022-10-04 Qumulo, Inc. Storage tier management for file systems
US11132126B1 (en) 2021-03-16 2021-09-28 Qumulo, Inc. Backup services for distributed file systems in cloud computing environments
US11567660B2 (en) 2021-03-16 2023-01-31 Qumulo, Inc. Managing cloud storage for distributed file systems
US11669255B2 (en) 2021-06-30 2023-06-06 Qumulo, Inc. Distributed resource caching by reallocation of storage caching using tokens and agents with non-depleted cache allocations
US11354273B1 (en) * 2021-11-18 2022-06-07 Qumulo, Inc. Managing usable storage space in distributed file systems
US11599508B1 (en) 2022-01-31 2023-03-07 Qumulo, Inc. Integrating distributed file systems with object stores
US20230409483A1 (en) * 2022-06-16 2023-12-21 Samsung Electronics Co., Ltd. System and method for caching in storage devices
US11722150B1 (en) 2022-09-28 2023-08-08 Qumulo, Inc. Error resistant write-ahead log
US11729269B1 (en) 2022-10-26 2023-08-15 Qumulo, Inc. Bandwidth management in distributed file systems
US11966592B1 (en) 2022-11-29 2024-04-23 Qumulo, Inc. In-place erasure code transcoding for distributed file systems
US11934660B1 (en) 2023-11-07 2024-03-19 Qumulo, Inc. Tiered data storage with ephemeral and persistent tiers
US11921677B1 (en) 2023-11-07 2024-03-05 Qumulo, Inc. Sharing namespaces across file system clusters

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014160311A (ja) * 2013-02-19 2014-09-04 Hitachi Ltd 自律分散重複排除ファイルシステム、記憶装置ユニット及びデータアクセス方法
US20140280664A1 (en) * 2013-03-14 2014-09-18 Microsoft Corporation Caching content addressable data chunks for storage virtualization

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8745329B2 (en) * 2011-01-20 2014-06-03 Google Inc. Storing data across a plurality of storage nodes

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014160311A (ja) * 2013-02-19 2014-09-04 Hitachi Ltd 自律分散重複排除ファイルシステム、記憶装置ユニット及びデータアクセス方法
US20140280664A1 (en) * 2013-03-14 2014-09-18 Microsoft Corporation Caching content addressable data chunks for storage virtualization

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102467372B1 (ko) * 2022-01-06 2022-11-14 삼성전자주식회사 스토리지 장치 및 이의 동작 방법
JP7274057B1 (ja) * 2022-04-13 2023-05-15 三菱電機株式会社 重複排除システム、サーバ装置、重複排除方法、および、重複排除プログラム
WO2023199427A1 (ja) * 2022-04-13 2023-10-19 三菱電機株式会社 重複排除システム、機器、サーバ装置、重複排除方法、および、重複排除プログラム

Also Published As

Publication number Publication date
US20210374105A1 (en) 2021-12-02
JP7102460B2 (ja) 2022-07-19
US11520745B2 (en) 2022-12-06

Similar Documents

Publication Publication Date Title
JP7102460B2 (ja) 分散ストレージ装置および分散ストレージ装置におけるデータ管理方法
US20210255791A1 (en) Distributed storage system and data management method for distributed storage system
CN111587428B (zh) 分布式存储系统中的元数据日志
US10216651B2 (en) Primary data storage system with data tiering
US9996421B2 (en) Data storage method, data storage apparatus, and storage device
US11301159B2 (en) Storage system and data transfer method
US10359967B2 (en) Computer system
JP2022512064A (ja) 様々なデータ冗長性スキームを備えた、システムにおける利用可能なストレージ空間を改善すること
US11169879B2 (en) Storage system
US11449402B2 (en) Handling of offline storage disk
US20180307440A1 (en) Storage control apparatus and storage control method
US20180307426A1 (en) Storage apparatus and storage control method
US10394484B2 (en) Storage system
US10761764B1 (en) Storage system and data transfer method
US20140188824A1 (en) Reducing fragmentation in compressed journal storage
US11947419B2 (en) Storage device with data deduplication, operation method of storage device, and operation method of storage server
JP6406283B2 (ja) ストレージ装置およびストレージ方法
US10963485B1 (en) Storage system and data replication method in storage system
JP2020154626A (ja) 分散ストレージシステム、データ管理方法、及びデータ管理プログラム
JP7435735B2 (ja) 分散処理システム、分散処理システムの制御方法、及び、分散処理システムの制御装置
US20210191628A1 (en) Distributed storage system, data control method and storage medium
WO2018055686A1 (ja) 情報処理システム
US11112973B2 (en) Computer system and data management method
CN112256657A (zh) 日志镜像方法及系统
US20230236932A1 (en) Storage system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210514

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220530

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220706

R150 Certificate of patent or registration of utility model

Ref document number: 7102460

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150