(57)【要約】      （修正有）【課題】マルチストレージノードシステムにおいて、データの冗長性を確保するために、データ再構築のための容量を確保する方法を提供する。【解決手段】複数のストレージノードから構成されるマルチストレージノードシステムにおいて、ストレージノードは、データを記憶する複数のドライブと、ドライブにデータの書き込みを制御する制御部とを有する。制御部は、複数のドライブの記憶領域を複数の物理チャンクに分割し、分割された物理チャンクを論理チャンクに割り当てることでデータを格納する。複数のストレージノードは、単一の障害で影響を受けるフォールトセットに分割され、マルチストレージノードシステムを管理する。複数のストレージノードの内の一つのプライマリノードの制御部は、複数のストレージノードの物理チャンクの論理チャンクに対する割り当てを、ドライブ毎、ストレージノード毎、フォールトセット毎に管理するデータベースを有する。【選択図】図３
2020135137.tif 000002
【特許請求の範囲】
【請求項１】
複数のストレージノードから構成されるマルチストレージノードシステムにおいて、
前記複数のストレージノードは、データを記憶する複数のドライブと、前記複数のドライブにデータの書き込みを制御する制御部とを有し、
前記制御部は、前記複数のドライブの記憶領域を複数の物理チャンクに分割し、分割された物理チャンクを論理チャンクに割り当てることでデータを格納し、
前記複数のストレージノードは、単一の障害で影響を受けるフォールトセットに分割され、
前記マルチストレージノードシステムを管理する、前記複数のストレージノードの内の一つのプライマリノードの制御部は、前記複数のストレージノードの物理チャンクの論理チャンクに対する割り当てを、前記ドライブ毎、前記ストレージノード毎、前記フォールトセット毎に管理するデータベースを有する、
ことを特徴とするマルチストレージノードシステム。
【請求項２】
請求項１に記載のマルチストレージノードシステムにおいて、
前記データベースは、前記ドライブ毎に、物理チャンクの数と、論理チャンクに割当済みの物理チャンクの数と、論理チャンクに割当されていない物理チャンクの数を管理するドライブ管理テーブルを含む、
ことを特徴とするマルチストレージノードシステム。
【請求項３】
請求項２に記載のマルチストレージノードシステムにおいて、
前記データベースは、
前記ストレージノード毎に、論理チャンクに割当てられた物理チャンクの数を割当済みチャンクの数として管理する割当済み物理チャンク(ノード)管理テーブルと、
前記ストレージノード毎に、論理チャンクに割当てられていない物理チャンクの数を空き物理チャンクの数として管理する空き物理チャンク(ノード)管理テーブルとを含む
ことを特徴とするマルチストレージノードシステム。
【請求項４】
請求項３に記載のマルチストレージノードシステムにおいて、
前記データベースは、
前記フォールトセット毎に、論理チャンクに割当てられた物理チャンクの数を割当済みチャンクの数として管理する割当済み物理チャンク(フォールトセット)管理テーブルと、
前記フォールトセット毎に、論理チャンクに割当てられていない物理チャンクの数を空き物理チャンクの数として管理する空き物理チャンク(フォールトセット)管理テーブルとを含む
ことを特徴とするマルチストレージノードシステム。
【請求項５】
請求項４に記載のマルチストレージノードシステムにおいて、
前記割当済み物理チャンク(ノード)管理テーブルと、前記割当済み物理チャンク(フォールトセット)管理テーブルは、
前記ドライブの種別ごとに、割当済み物理チャンクの数を管理し、
前記空き物理チャンク(ノード)管理テーブルと、前記空き物理チャンク(フォールトセット)管理テーブルは、
前記ドライブの種別ごとに、論理チャンクに割り当てられていない物理チャンクの数を管理する
ことを特徴とするマルチストレージノードシステム。
【請求項６】
請求項１に記載のマルチストレージノードシステムにおいて、
前記プライマリノードの制御部は、
前記複数のストレージノードの内の第１のストレージノードにおける第１のドライブの割当済み物理チャンクの数が、前記第１のストレージノードにおける前記第１のドライブ以外のドライブの、割り当てられていない空き物理チャンクの数の合計を上回るか判定し、
上回る場合に、前記第１のストレージノードに対し、空き物理チャンクの数を追加する警告を通知する
ことを特徴とするマルチストレージノードシステム。
【請求項７】
請求項６に記載のマルチストレージノードシステムにおいて、
前記プライマリノードの制御部は、
前記複数のストレージノードの内の第１のフォールトセットに属する第１のストレージノードの割当済み物理チャンクの数が、前記第１のフォールトセットに属する前記第１のストレージノード以外のストレージノードの、論理チャンクに割り当てられていない物理チャンクの数の合計を上回るか判定し、
上回る場合に、前記第１のフォールトセットに対し、空き物理チャンクの数を追加する警告を通知する
ことを特徴とするマルチストレージノードシステム。
【請求項８】
請求項７に記載のマルチストレージノードシステムにおいて、
前記プライマリノードの制御部は、
前記複数のストレージノードの内の第２のフォールトセットに属するストレージノードの割当済み物理チャンクの数が、前記第２のフォールトセット以外のフォールトセットに属するストレージノードの、論理チャンクに割り当てられていない物理チャンクの数の合計を上回るか判定し、
上回る場合に、前記第２のフォールトセット以外のフォールセットに対し、空き物理チャンクの数を追加する警告を通知する
ことを特徴とするマルチストレージノードシステム。
【請求項９】
複数のストレージノードから構成されるマルチストレージノードシステムの容量管理方法において、
前記複数のストレージノードは、データを記憶する複数のドライブと、前記複数のドライブにデータの書き込みを制御する制御部とを有し、
前記制御部は、前記複数のドライブの記憶領域を複数の物理チャンクに分割し、分割された物理チャンクを論理チャンクに割り当てることでデータを格納し、
前記複数のストレージノードは、単一の障害で影響を受けるフォールトセットに分割され、
前記マルチストレージノードシステムを管理する、前記複数のストレージノードの内の一つのプライマリノードの制御部は、前記複数のストレージノードの物理チャンクの論理チャンクに対する割り当てを、前記ドライブ毎、前記ストレージノード毎、前記フォールトセット毎にデータベースで管理する、
ことを特徴とするマルチストレージノードシステムの容量管理方法。
【請求項１０】
請求項９に記載のマルチストレージノードシステムの容量管理方法において、
前記データベースは、前記ドライブ毎に、物理チャンクの数と、論理チャンクに割当済みの物理チャンクの数と、論理チャンクに割当されていない物理チャンクの数を管理するドライブ管理テーブルを含む、
ことを特徴とするマルチストレージノードシステムの容量管理方法。
【請求項１１】
請求項１０に記載のマルチストレージノードシステムの容量管理方法において、
前記データベースは、
前記ストレージノード毎に、論理チャンクに割当てられた物理チャンクの数を割当済みチャンクの数として管理する割当済み物理チャンク(ノード)管理テーブルと、
前記ストレージノード毎に、論理チャンクに割当てられていない物理チャンクの数を空き物理チャンクの数として管理する空き物理チャンク(ノード)管理テーブルとを含む
ことを特徴とするマルチストレージノードシステムの容量管理方法。
【請求項１２】
請求項１１に記載のマルチストレージノードシステムの容量管理方法において、
前記データベースは、
前記フォールトセット毎に、論理チャンクに割当てられた物理チャンクの数を割当済みチャンクの数として管理する割当済み物理チャンク(フォールトセット)管理テーブルと、
前記フォールトセット毎に、論理チャンクに割当てられていない物理チャンクの数を空き物理チャンクの数として管理する空き物理チャンク(フォールトセット)管理テーブルとを含む
ことを特徴とするマルチストレージノードシステムの容量管理方法。
【請求項１３】
請求項９に記載のマルチストレージノードシステムの容量管理方法において、
前記プライマリノードの制御部は、
前記複数のストレージノードの内の第１のストレージノードにおける第１のドライブの割当済み物理チャンクの数が、前記第１のストレージノードにおける前記第１のドライブ以外のドライブの、割り当てられていない空き物理チャンクの数の合計を上回るか判定し、
上回る場合に、前記第１のストレージノードに対し、空き物理チャンクの数を追加する警告を通知する
ことを特徴とするマルチストレージノードシステムの容量管理方法。
【請求項１４】
請求項１３に記載のマルチストレージノードシステムの容量管理方法において、
前記プライマリノードの制御部は、
前記複数のストレージノードの内の第１のフォールトセットに属する第１のストレージノードの割当済み物理チャンクの数が、前記第１のフォールトセットに属する前記第１のストレージノード以外のストレージノードの、論理チャンクに割り当てられていない物理チャンクの数の合計を上回るか判定し、
上回る場合に、前記第１のフォールトセットに対し、空き物理チャンクの数を追加する警告を通知する
ことを特徴とするマルチストレージノードシステムの容量管理方法。
【請求項１５】
請求項１４に記載のマルチストレージノードシステムの容量管理方法において、
前記プライマリノードの制御部は、
前記複数のストレージノードの内の第２のフォールトセットに属するストレージノードの割当済み物理チャンクの数が、前記第２のフォールトセット以外のフォールトセットに属するストレージノードの、論理チャンクに割り当てられていない物理チャンクの数の合計を上回るか判定し、
上回る場合に、前記第２のフォールトセット以外のフォールセットに対し、空き物理チャンクの数を追加する警告を通知する
ことを特徴とするマルチストレージノードシステムの容量管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチストレージノードシステム、マルチストレージノードシステムの容量管理方法に関する。
【背景技術】
【０００２】
近年、複数のノードに分散している記憶装置をソフトウェアで管理して全体を大きな記憶装置として定義し、使用効率を高める技術であるソフトウェア・デファインド・ストレージ（Software Defined Storage (SDS)）が普及している。
【０００３】
このような複数のノードに記憶領域が分散しているシステムにおいて、システム全体の空き容量の管理は非常に重要となる。複数のノードに分散しているシステムの空き容量を管理する技術として特許文献１がある。
【０００４】
特許文献１では、複数のノードに分散している記憶領域を連結して、１つの記憶領域としてホスト計算機にアクセスさせる技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−１６５７０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
SDSのように複数のノードから構成されるマルチストレージシステムでは、複数のノードのドライブにデータを格納するMirroringやErasure-Coding技術を適応することで、データを冗長化している。
【０００７】
一般的なSDSでは、ノードやノードに搭載されるドライブの障害時、ノードやドライブ減設時、ドライブ障害の予兆検知時には、格納されているデータの冗長性を回復するために、データの再構築(リビルド)を行う。例えば、ドライブ障害時には障害の発生したドライブに格納されていたデータを、マルチストレージシステムの他のドライブに再構築することで、マルチストレージシステムにおいてデータの冗長性を確保している。
【０００８】
データの冗長性を回復するデータの再構築を行うためには、ドライブやノード障害が発生した場合や、ノードやドライブ減設を行う場合に、冗長データが複数のノードから構成されるシステム上に存在する必要があり、冗長データからデータを再構築して格納する物理容量が必要となる。
【０００９】
しかしながら、特許文献１には、複数のノードに分散している記憶領域を連結して、１つの記憶領域として空き領域を管理する技術は開示されているものの、論理デバイスに対し、物理デバイスの割り当て時にストレージアダプタ（SA）内に空き領域があるかを判定するためであり、データ再構築のための空き容量を把握することについては言及されていない。
【００１０】
また、SDS環境においてデータ再構築のために、ノードに搭載されるドライブ単位、ノード単位、複数のノードをフォールトセットとして定義されたフォールトセット単位に容量を管理することについても言及されていない。
【００１１】
そこで、本発明の目的は、マルチストレージノードシステムにおいて、データの冗長性を確保するために、データ再構築のための容量を確保するマルチストレージノードシステム、マルチストレージノードシステムの容量管理方法を提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明のマルチストレージノードシステムの一態様は、複数のストレージノードから構成される。複数のストレージノードは、データを記憶する複数のドライブと、ドライブにデータの書き込みを制御する制御部とを有する。制御部は、複数のドライブの記憶領域を複数の物理チャンクに分割し、分割された物理チャンクを論理チャンクに割り当てることでデータを格納する。複数のストレージノードは、単一の障害で影響を受けるフォールトセットに分割されており、マルチストレージノードシステムを管理する、複数のストレージノードの内の一つのプライマリノードの制御部は、複数のストレージノードの物理チャンクの論理チャンクに対する割り当てを、ドライブ毎、ストレージノード毎、フォールトセット毎に管理するデータベースを有する。
【発明の効果】
【００１３】
本発明によれば、マルチストレージノードシステムにおいて、ドライブやノード障害、ドライブやノード減設時においても、データの冗長性を確保するためにデータ再構築を行うための容量管理を、ドライブ、ノード、フォールトセット単位で管理することができる。
【図面の簡単な説明】
【００１４】
【図１】本実施例のシステム構成図の一例を示す図である。
【図２】本実施例のストレージノードのハードウェア構成図の一例を示す図である。
【図３】本実施例の制御部とストレージノード間のボリュームの位置付けの一例を示すシステムブロック図である。
【図４】本実施例の各種管理テーブルの一例を示す図である。
【図５】本実施例のストレージノード管理テーブルの一例を示す図である。
【図６】本実施例のドライブ管理テーブルの一例を示す図である。
【図７】本実施例の物理チャンク管理テーブルの一例を示す図である。
【図８】本実施例の論理チャンク管理テーブルの一例を示す図である。
【図９】本実施例の割当済み物理チャンク(ノード)管理テーブルの一例を示す図である。
【図１０】本実施例の空き物理チャンク(ノード)管理テーブルの一例を示す図である。
【図１１】本実施例の割当済み物理チャンク（フォールトセット）管理テーブルの一例を示す図である。
【図１２】本実施例の空き物理チャンク（フォールトセット）管理テーブルの一例を示す図である。
【図１３】本実施例のクラスタ制御の処理フローを示したフローチャートである。
【図１４】本実施例の通知条件（１）の確認処理フローを示したフローチャートである。
【図１５】本実施例の通知条件（２）の確認処理フローを示したフローチャートである。
【図１６】本実施例の通知条件（３）の確認処理フローを示したフローチャートである。
【図１７Ａ】本実施例の通知条件（１）によるアラート（１）の一例を示した図である。
【図１７Ｂ】本実施例の通知条件（２）によるアラート（２）の一例を示した図である。
【図１７Ｃ】本実施例の通知条件（３）によるアラート（３）の一例を示した図である。
【図１８】本実施例のノード内優先割当処理を示したフローチャートである。
【図１９】本実施例のＤＰプールへの物理チャンク割当処理を示したフローチャートである。
【発明を実施するための形態】
【００１５】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１６】
以下の説明では、［AAAテーブル］の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、［AAAテーブル］を［AAA情報］とすることができる。
【００１７】
また、以下の説明では、［CPU］は、１以上のプロセッサを含むCentral  Processing  Unitである。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１８】
また、以下の説明では、［プログラム］を動作の主体として処理を説明する場合があるが、プログラムは、CPUによって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）等を用いながら行うため、実際の処理の主体はCPUである。従って、プログラムを動作の主体として説明された処理は、プロセッサが処理としてもよい。また、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでもよい。コンピュータプログラムは、プログラムソースから装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ、又は、計算機が読み取り可能な記憶メディアであってもよい。
【００１９】
＜概要＞
本技術は、マルチストレージノードシステムにおいて、複数のノードを単位としたフォールトセット、ノード、各ノードに搭載されるドライブ単位での障害や、ノードやドライブの減設が発生した場合においても、Software Defined Storage(SDS)では、予め適所(フォールトセット、ノード）にデータのリビルドのための容量を確保しておかなければならない。また、SDSは、データのリビルド時のI/O性能への影響を低減する必要がある。ここで、フォールトセットとは、例えば、同一の電源系統によって電源供給を受けているノードを纏めたグループや同一のスイッチによってネットワークに接続されたノードを纏めたグループを意味し、単一の障害で影響を受けるノードのグループである。つまり、フォールトセットとは、電源障害やスイッチ障害時においても、冗長データがマルチストレージノードシステム上に存在できるようにノードをグルーピングしたものである。
【００２０】
このように、複数のノードがフォールトセットという概念でグルーピングされているマルチストレージノードシステムでは、管理者がデータをリビルドするための適所(フォールトセット、ノード）、即ち、ビルドデータを格納するための物理容量をどこに確保するかを判断することは非常に難しい。
【００２１】
本技術は、マルチストレージノードシステムにおいて、ドライブやノード障害、ドライブやノード減設時においても、データの冗長性を確保するためにデータ再構築を行うための容量管理を、ドライブ、ノード、フォールトセット単位で管理し、リビルドデータの格納先をドライブ、ノード、フォールトセットで把握することができるマルチストレージノードシステム、マルチストレージノードシステムの容量管理方法に関する。
【００２２】
＜用語の説明＞
SC（Storage Cluster）：ストレージクラスタはマルチストレージノードシステム全体に相当する。
FS(Fault Set)：フォールトセットは、ストレージクラスタのサブセットで、単一の障害で影響を受けるストレージノードのグループである。例えば、電源系統やネットワークスイッチを共有しているノードのグループで、電源障害やネットワークスイッチの障害によって影響を受けるノードのグループである。これら単一の電源障害時等においても、データの冗長性を確保するためには、ストレージクラスタ上に冗長データが他のフォールトセット上に存在する必要がある。
SN(Storage Node):ストレージノード。
CM(P)(Cluster Master（Primary）)：クラスタマスター(プライマリ)は、マルチストレージノードシステム全体を管理するストレージノードであって、マルチストレージノードシステムに一つ存在する。プライマリノードと称する。
CM(S)(Cluster Master (Secondary) )：クラスタマスター（セカンダリ）は、クラスタマスター(プライマリ)の待機系ノードであって、クラスタマスター(プライマリ)に障害が発生した場合には、クラスタマスター(プライマリ)に昇格する。
CW(Cluster Worker)：クラスタワーカー・クラスタマスタ(プライマリ、セカンダリ)以外のストレージノード。
CN(Compute Node):コンピュートノード。ストレージノードに格納されたデータにアクセスするアプリケーションが動作するコンピュートノード。
MN(Management Node)：管理ノード。ストレージクラスタを管理するノード。
【００２３】
＜システム構成＞
まず、本発明の一実施形態に係るマルチストレージノードシステムについて説明する。
【００２４】
図１は、一実施形態に係るシステム構成図である。
複数のストレージノード（SN）101a、101b、101cは、データを格納するドライブを有し、ストレージノード間ネットワーク104を介して互いに接続されている。
【００２５】
一以上のコンピュートノード（CN）107は、アプリケーションが動作し、コンピュートネットワーク105を介して複数のストレージノード101に接続される。複数のストレージノード101は、コンピュートノード107からIO要求を受信して、ドライブにデータを格納したり、データを読み出してコンピュートノードに送る。
【００２６】
複数のストレージノード101は、複数のストレージノード101を管理する管理ノード（MN）108に管理ネットワーク106を介して接続されている。
【００２７】
複数のストレージノード101は、ストレージクラスタ（SC）103を構成し、ストレージクラスタ103は、マルチストレージノードシステムに相当し、電源系統やネットワークスイッチを共有しているストレージノードのグループであるフォールトセット102をサブセットとして構成する。
【００２８】
フォールトセットは、ストレージクラスタ103に２つ以上構成でき、本実施例では３台程度を想定する。各フォールトセットには、ストレージノードが１台以上で構成できる。本実施例では、最大１６台程度を想定する。尚、各ノード101に搭載されるドライブの数は、２台以上であり、本実施例では、最大２６台程度を想定する。これら、台数の数は、例示したものに限らず、本発明の要旨を逸脱しない範囲内で適宜適当な数を想定し得る。
【００２９】
複数のストレージノード101は、ストレージクラスタを管理し、ストレージクラスタに一つ存在するクラスタマスター(プライマリ)（CM(P)）101aと、クラスタマスター(プライマリ)の待機系となるクラスタマスター（セカンダリ）（CM(S)）101bと、それ以外のクラスタワーカー（CW）101cとから構成される。
【００３０】
図２は、一実施形態に係るストレージノードのハードウェア構成図の一例を示す図である。
【００３１】
ストレージノード101は、図１のストレージノード101a、1011b等に相当し、サーバ等の計算機からのI/O要求を処理し、ドライブ119にデータを格納、或いは、ドライブ119からデータを読み出し、コンピュートノード107に送る処理を行う。ドライブ119は、NVMeドライブ119a、SASドライブ119b、SATAドライブ119c等、各種ドライブで構成される。
【００３２】
ストレージノード101は、ストレージノード間ネットワーク104、コンピュートネットワーク105、管理ネットワーク106に接続するためのネットワークインタフェース203と、一つ以上の中央処理部（CPU）201と、メモリ202と、これらを接続するバス205を有する。メモリ202は、ＳＲＡＭ、ＤＲＡＭの揮発メモリで構成される。
【００３３】
メモリ202には、複数のストレージノードでクラスタを構成するためのクラスタ制御プログラム111と、ストレージノードの制御を行うノード制御プログラム112、コンピュートノード107からのIO要求を処理し、ドライブ119へのデータの書き込み、ドライブ119からのデータの読み出しを制御するIO制御アクティブプログラム113とを格納する。また、メモリ202は、他のストレージノードがクラスタマスター(プライマリ)となり、そのノードのIO制御アクティブプログラムに対する待機系のIO制御スタンバイプログラム114の他、図４に示す各種テーブルをＳＯＤＢ（Scale Out Data Base）112を格納する。
【００３４】
CPU201がメモリ202に格納されたプログラムを実行することで、制御部として各種機能を実現する。
【００３５】
メモリ202には、図示したプログラムの他、スナップショットやリモート機能等の各種プログラムが格納され、ストレージノードとして機能する。また、メモリ202には、IOリクエストに関するデータを一時的に記憶するキャッシュメモリとなるキャッシュ領域を有する。
【００３６】
クラスタ制御プログラム111、ノード制御プログラム112、IO制御アクティブプログラム113、IO制御スタンバイプログラム114は、ドライブ119に格納され、CPU201によってメモリ202に読み出されて、動作する形態であっても良い。これら各種プログラムを実行して実現される機能を、クラスタ制御部111、ノード制御部112、IO制御部アクティブ113、IO制御部スタンバイ114と、呼ぶ場合がある。
【００３７】
ネットワークインタフェースNW I/F303は、便宜上一つのインタフェースとして図示しているが、他のストレージノードと接続するためのストレージノード間ネットワーク104、コンピュートノード107と接続するためのコンピュートネットワーク105、管理ノード107と接続するための管理ネットワーク106と接続するためのインタフェースを別の２つ以上のインタフェースで構成しても良い。
【００３８】
ストレージノードの構成は、クラスタマスター(プライマリ)（CM(P)）101a、クラスタマスター（セカンダリ）（CM(S)）101bと、それ以外のクラスタワーカー（CW）101cとで共通する。
【００３９】
図３は、一実施形態にかかるCPU201によって実現される制御部とストレージノード間のボリュームの位置付けの一例を示すシステムブロック図である。
【００４０】
ストレージノード101aはクラスタマスタープライマリ（プライマリノード）として動作するノード、ストレージノード101bはクラスタマスターセカンダリとして動作するノード、ストレージノード101cはクラスタワーカーとして動作するノードである。各ストレージノード101は、図２に示したようなプログラムを格納しているが、図３では、動作の説明上必要なプログラムのみを図示して説明する。また、図３は、説明を簡単にするため、各フォールトセットに、ストレージノードが1台で構成される例を示しているが、１つのフォールトセットには、複数台のストレージノードが含まれる場合がある。
【００４１】
各ストレージノードは、ドライブ119の一定サイズの記憶領域を管理単位として、複数の物理チャンク(Physical chunk)118a、118bを管理する。プライマリノード101aは、各ストレージノードから複数の物理チャンク118、118bを論理チャンクLC１（Logical Chunk、LC）117aに割り当てる。プライマリノードの制御部は、複数の論理チャンクLC117を含むストレージプール120を構成する。
【００４２】
プライマリノードの制御部201は、ストレージプール120の論理チャンク117aを含む複数の論理チャンクをDPプール116に割当てることで、DPプールを構成する。制御部201は、コンピュートノード107に対し、一つ以上のDPボリューム115を記憶領域として提供する。制御部201は、DPボリューム115に対し、DPプール116から記憶領域の割当を行う。
【００４３】
図３は、ドライブ119と物理チャンク118との関係、物理チャンク118と論理チャンク117との関係、論理チャンク117とストレージプール120との関係、論理チャンク、ストレージプール120、DPプール116との関係、DPプール116とDPボリューム115との関係を模式的に示している。
【００４４】
また、図３はプライマリノード101aのIO制御アクティブ113とクラスタマスターセカンダリ101bのIO制御スタンバイは、あるDPボリュームに対しては現用系と待機系を構成する。一方、他のDPボリュームに対しては、ストレージノード101bがIO制御アクティブ、ストレージノード101cに対してはIO制御スタンバイの関係となることを示している。
【００４５】
＜各種テーブル＞
図４は、本実施例の各種管理テーブルの一例を示す図である。
SODB110には、ストレージノード管理テーブル401、ドライブ管理テーブル402、物理チャンク管理テーブル403、論理チャンク管理テーブル404、割当済み物理チャンク（ノード）管理テーブル405、空き物理チャンク（ノード）管理テーブル406、割当済み物理チャンク（フォールトセット）管理テーブル407、空き物理チャンク（フォールトセット）管理テーブル408の各種テーブルを格納する。
【００４６】
ストレージノード管理テーブル401は図５に、ドライブ管理テーブル402は図６に、物理チャンク管理テーブル403は図７に、論理チャンク管理テーブル404は図８に、割当済み物理チャンク（ノード）管理テーブル405は図９に、空き物理チャンク（ノード）管理テーブル406は図１０に、割当済み物理チャンク（フォールトセット）管理テーブル407は図１１に、空き物理チャンク（フォールトセット）管理テーブル408は図１２に、詳細を示す。
【００４７】
尚、説明の便宜上テーブルという表現を用いて説明するが、テーブルに限らず、ポインタやリレーショナルデータベース等他のデータ構造で実現することができる。
【００４８】
図５は、本実施例のストレージノード管理テーブルの一例を示す図である。
ストレージノード管理テーブル401は、SODB110に格納される。ストレージノード管理テーブル401のノード番号501は、ストレージクラスタ内で各ストレージノードを一意に特定するための識別子である。フォールトセット番号は、ストレージクラスタ内で各フォールトセットを一意に特定するための識別子である。例えば、ノード番号501「１」で特定されるストレージノード（以下、単にノードと呼ぶこともある）は、フォールトセット番号502「１」に属するノードであることを示している。同様に、ノード番号501「３」のノードは、フォールトセット番号「２」に属することを示している。
【００４９】
図６は、本実施例のドライブ管理テーブルの一例を示す図である。
ドライブ管理テーブル402は、SODB110に格納される。ドライブ番号601は、ストレージクラスタ内で各ドライブ119を一意に特定するための識別子である。ノード番号602は、ストレージクラスタ内で各ストレージノードを一意に特定するための識別子であり、図５のノード番号501に相当する。物理チャンク数(合計)603は、ドライブ番号によって特定されるドライブに含まれる物理チャンクの数を表す。物理チャンク数(割当済み)604は、ドライブ番号によって特定されるドライブに含まれる物理チャンクの内、論理チャンクに割当られている割当済みのチャンク数を表す。物理チャンク数(空き)605は、ドライブ番号によって特定されるドライブに含まれる物理チャンクの内、論理チャンクに割当てられていないチャンク数を表す。メディアタイプ606は、ドライブ番号によって特定されるドライブの種類を示し情報である。
【００５０】
例えば、ドライブ番号601「２」は、ノード番号602「１」に属し、物理チャンク数(合計)603が「２０」、物理チャンク数(割当済み)604が「５」、物理チャンク数(空き)605が「１５」、メディアタイプ606が「SAS」であることを示している。メディアタイプは、データのリビルド時に、データが格納されていたメディアと同一のタイプのメディアをリビルドされたデータの格納先として選択するための情報として用いる。
【００５１】
図７は、本実施例の物理チャンク管理テーブルの一例を示す図である。
物理チャンク管理テーブル403は、SODB110に格納される。物理チャンク管理テーブル403の物理チャンク番号701は、ストレージクラスタ102内で各物理チャンク118を一意に特定するための識別子である。ドライブ番号702は、ストレージクラスタ102内で各ドライブ119を一意に特定するための識別子であり、図６のドライブ番号601に相当する。ドライブ内オフセット703は、各物理チャンク番号で特定される物理チャンクの、ドライブ番号で特定されるドライブ内のアドレスを示す。ステータス704は、物理チャンク番号701で特定される物理チャンクが論理デバイスに割当てられているかを示す。尚、ステータス704は、論理デバイスに対する割当の他、予約状態である（Reserved）や当該物理チャンクが使えない状態であることを示す（Blockade）の状態を示す情報を格納する場合がある。
【００５２】
例えば、物理チャンク番号701「２」の物理チャンクは、ドライブ番号702「１」のドライブに属し、「0x10000」の位置から始まり、割当てられている「Allocated」状態を示す。
【００５３】
図８は、本実施例の論理チャンク管理テーブルの一例を示す図である。
論理チャンク管理テーブル404は、SODB110に格納される。論理チャンク管理テーブル404の論理チャンク番号801は、ストレージクラスタ102内で各論理チャンク117を一意に特定するための識別子である。DPプール番号802は、論理チャンクが割当てられるDPプールを識別するための識別子である。物理チャンク番号（マスタ）803は、論理チャンクに割当てられた物理チャンクの内、マスタとなる物理チャンクを特定する識別子で、物理チャンク番号（ミラー）804は、論理チャンクに割当てられた物理チャンクの内、ミラーとなる物理チャンクを特定する識別子である。
【００５４】
例えば、論理チャンク番号801「２」は、DPプール番号802「１」に割当てられ、物理チャンク番号803「２」にマスタデータが、物理チャンク番号804「６」にミラーデータがそれぞれ格納されていることを示している。
【００５５】
図８は、一つの論理チャンクに対し、マスタとミラーの二つの物理チャンクが割当てられるミラーリングによる冗長化を示したものであるが、Erasure-Codingを適応した冗長化の場合、データチャンクに対応して物理チャンク番号803として複数の物理チャンク番号を示す列が必要となる他、パリティを格納している物理チャンクを示す物理チャンク番号の列も必要となる。
【００５６】
図９は、本実施例の割当済み物理チャンク(ノード)管理テーブルの一例を示す図である。物理チャンク(ノード)管理テーブル405は、SODB110に格納される。物理チャンク(ノード)管理テーブル405のノード番号901は、ストレージクラスタ102内で各ストレージノード101を一意に特定するための識別子であり、図５のノード番号501、図６のノード番号602に相当する。ペア先フォールトセット番号902は、各ノードとペアを構成するノードが属するフォールトセットを特定する識別子である。フォールトセットは、電源障害時においても、冗長データがマルチストレージノードシステム上に存在できるようにノードをグルーピングしたものであり、電源障害時等に冗長データを格納するフォールトセットをペア先フォールトセット番号902として格納するものである。
【００５７】
割当済みチャンク数（合計）903は、当該ノードで割当済みの物理チャンク数の合計を示したものである。割当済みチャンク数（SSD）904は、当該ノードのSSDドライブで割当済みの物理チャンク数を示したものである。割当済みチャンク数（SAS）905は、当該ノードのSASドライブで割当済みの物理チャンク数を示したものである。割当済みチャンク数（SATA）906は、当該ノードのSATAドライブで割当済みの物理チャンク数を示したものである。従って、割当済みチャンク数（合計）903の値は、各ドライブの割当済みチャンク数904、905、906を合計した値となる。
【００５８】
例えば、ノード番号901「１」は、ペア先フォールトセット番号902が「２」と「３」であり、ペア先フォールトセット番号902が「２」となる場合、割当済みチャンク数（合計）903は「２０」、割当済みチャンク数（SSD）904は「１０」、割当済みチャンク数（SAS）905は「５」、割当済みチャンク数（SATA）906は「５」であることを示している。
【００５９】
図１０は、本実施例の空き物理チャンク(ノード)管理テーブルの一例を示す図である。
空き物理チャンク(ノード)管理テーブル406は、SODB110に格納される。空き物理チャンク(ノード)管理テーブル406のノード番号1001は、ストレージクラスタ102内で各ストレージノード101を一意に特定するための識別子であり、図５のノード番号501、図６のノード番号602、図９のノード番号901に相当する。
【００６０】
空き物理チャンク数（合計）1002は、ノード番号によって特定されるノードに含まれる物理チャンクの内、割当てられていない物理チャンク数の合計を表す。空き物理チャンク数（SSD）1003は、当該ノードのSSDドライブで割当に用いられていない物理チャンク数を示したものである。空き物理チャンク数（SAS）1004は、当該ノードのSASドライブで割当に使用されていない物理チャンク数を示したものである。空き物理チャンク数（SATA）1005は、当該ノードのSATAドライブで割当に使用されていない物理チャンク数を示したものである。従って、空き物理チャンク数（合計）1002の値は、各ドライブの空き物理チャンク数1003、1004、1005を合計した値となる。
【００６１】
例えば、ノード番号1001「１」は、空き物理チャンク数（合計）1002は「３０」、空き物理チャンク数（SSD）1003は「１０」、空き物理チャンク数（SAS）1004は「１０」、空き物理チャンク数（SATA）1005は「１０」であることを示している。
【００６２】
図１１は、本実施例の割当済み物理チャンク（フォールトセット）管理テーブルの一例を示す図である。割当済み物理チャンク（フォールトセット）管理テーブル407は、SODB110に格納される。
【００６３】
割当済み物理チャンク（フォールトセット）管理テーブル407のフォールトセット番号1101は、ストレージクラスタ102内で各フォールトセット102を一意に特定するための識別子である。ペア先フォールトセット番号1102は、フォールトセット番号1101で示されたフォールトセットとペアとなり、冗長データを格納するフォールトセットを特定する識別子である。
【００６４】
割当済みチャンク数（合計）1103は、フォールトセット内において割当済みの物理チャンクの数の合計を示したものである。割当済みチャンク数（SSD）1104は、当該フォールトセット内のSSDドライブで割当済みの物理チャンク数を示したものである。割当済みチャンク数（SAS）1105は、当該フォールトセット内のSASドライブで割当済みの物理チャンク数を示したものである。割当済みチャンク数（SATA）1106は、当該フォールトセット内のSATAドライブで割当済みの物理チャンク数を示したものである。従って、割当済みチャンク数（合計）1103の値は、各ドライブの割当済み物理チャンク数1104、1105、1106を合計した値となる。
【００６５】
例えば、フォールトセット番号1101「１」は、ペア先フォールトセット番号1102が「２」と「３」である。ペア先フォールトセット番号1102が「２」の場合、割当済みチャンク数（合計）1103は「２０」、割当済みチャンク数（SSD）1104は「１０」、割当済みチャンク数（SAS）1105は「５」、割当済みチャンク数（SATA）1106は「５」であることを示している。
【００６６】
図１２は、本実施例の空き物理チャンク（フォールトセット）管理テーブルの一例を示す図である。空き物理チャンク（フォールトセット）管理テーブル408は、SODB110に格納される。
【００６７】
空き物理チャンク（フォールトセット）管理テーブル408のフォールトセット番号1201は、ストレージクラスタ102内で各フォールトセット102を一意に特定するための識別子であり、図１１のフォールトセット番号1101に相当する。
【００６８】
空き物理チャンク数（合計）1202は、フォールトセット番号1201によって特定されるフォールトセットに含まれる物理チャンクの内、割当てられていない物理チャンク数の合計を表す。空き物理チャンク数（SSD）1203は、当該フォールトセット内のSSDドライブで割当に用いられていない物理チャンク数を示したものである。空き物理チャンク数（SAS）1204は、当該フォールトセット内のSASドライブで割当に使用されていない物理チャンク数を示したものである。空き物理チャンク数（SATA）1205は、当該フォールトセットのSATAドライブで割当に使用されていない物理チャンク数を示したものである。従って、空き物理チャンク数（合計）1202の値は、各ドライブの空き物理チャンク数1203、1204、1205を合計した値となる。
【００６９】
例えば、フォールトセット番号1201「１」は、空き物理チャンク数（合計）1202は「３０」、空き物理チャンク数（SSD）1203は「１０」、空き物理チャンク数（SAS）1204は「１０」、空き物理チャンク数（SATA）1205は「１０」であることを示している。
【００７０】
図５から図１２に示したノード番号等の番号で示した識別子は、数字に限らず記号や文字等、他の情報であっても構わない。
【００７１】
ここで、図１９を用いて、図３で説明した物理チャンク118と、論理チャンク117と、DPプール116との割当の処理をSODB110に格納された各種管理テーブルを用いて説明する。
【００７２】
図１９は、制御部201で実行される、ＤＰプールへの物理チャンク割当処理を示したフローチャートである。ステップS1901で、DPプール116の容量の枯渇を検知する。例えば、DPプールの容量の８０％をDPボリューム115に割当てた場合、枯渇状態と判断する。但し、８０％は単なる例であって、これ以外の値を設定しても良い。
【００７３】
ステップS1902で、SODBを更新する。具体的には、物理チャンク管理テーブル403のNon allocatedの物理チャンクのステータス704をNon AllocatedからReservedに変更する。
【００７４】
ステップS1903で、ノード制御部112は、SODB110の論理チャンク管理テーブル404において、ステータスがReservedに変更された物理チャンクを論理チャンクに割当てる。物理チャンクが割当てられた論理チャンクをDPプールに割当てる。
【００７５】
ステップS1904で、ノード制御部はプロセスの完了通知を受領すると、SODBを更新する。SODBの管理や更新をクラスタ制御部111によって行わせても良い。その場合、ノード制御部からプロセスの完了通知を受信したクラスタ制御部111は、SODBを更新する。
【００７６】
例えば、ドライブ管理テーブル402の物理チャンク数(割当済み)604の数を増やし、物理チャンク数（空き）605の値を減少させる。空き物理チャンク（ノード）管理テーブル406、割当済み物理チャンク（ノード）管理テーブル405、空き物理チャンク（フォールトセット）管理テーブル408、割当済み物理チャンク（フォールトセット）管理テーブル407も同様に更新する。
【００７７】
つまり、本実施例において、物理チャンクの割当は、対応する論理チャンクに対する割当、または、DPプールへの割当、或いはその両方を意味する。
【００７８】
＜制御フロー＞
図１３は、本実施例のクラスタ制御部の処理フローを示したフローチャートである。
ストレージクラスタの構成に変更があった場合、SODB110上の各種管理テーブルが更新される(ステップS1301)。
【００７９】
SODB110上の各種管理テーブルが更新される場合には、DPプール使用量増加やリバランスにより物理チャンクを新規割り当てする場合、フォールトセットの障害、ノードの障害、デバイスの障害が検出されたり、物理チャンクが使用不可となった場合、各ストレージノードからドライブが減設されたり、ストレージクラスタからストレージノードが減設され場合、が含まれる。
【００８０】
制御部201(例えば、クラスタ制御プログラムによる機能)は、図１４に示す通知条件（１）の確認を行い(ステップS1302)、図１５に示す通知条件（２）の確認を行い(ステップS1303)、図１６に示す通知条件（３）の確認を行い(ステップS1303)、それぞれの通知条件を満たした場合アラート（１）−（３）を通知するよう制御する。クラスタ制御部111は詳細フローには示さないが、管理者の対処(物理空き容量の増強)などで条件を満たさなくなった場合は、アラート解除を通知する。また、詳細フローには示さないが、ドライブのTier、即ちSSD、SAS、SATA等のドライブの種類を考慮する場合は、条件に”メディアタイプが一致すること”が追加される。
【００８１】
図１４は、本実施例の通知条件（１）の確認処理フローを示したフローチャートである。図１４に示した処理は、クラスタ制御部111によって実行され、各ドライブの割当済み物理容量が、同じノード内のその他のドライブの空き物理容量の合計を上回った場合に、通知条件（１）を満たし、アラート（１）を発行するための処理である。
【００８２】
SODB110に各種管理情報が更新されると、処理を開始する。ステップS1401で、ノード番号n = 1とし、ステップS1401からステップ1408までをストレージノード数分だけループ処理を行う。
【００８３】
ステップS1402で、空き物理チャンク(ノード)管理テーブル406よりノード番号 n の空き物理チャンク数(合計) a を取得する。即ち、ノード番号が１の場合、物理チャンク数(合計) a「３０」を、物理チャンク数(合計)1002から取得する。
【００８４】
ステップS1403で、ドライブ管理テーブル402よりノード番号nに接続するドライブ番号dを取得する。即ち、ドライブ管理テーブル402のノード番号「１」から、ドライブ番号「１、２、３」を取得する。ステップS1403からステップS1407までの処理をドライブ分繰り返すループ処理を行う。
【００８５】
ステップS1404で、ドライブ管理テーブル402よりドライブdの物理チャンク数(割当済み)b、物理チャンク数(空き)cを取得する。例えば、ステップS1403で取得したドライブ番号「１、２、３」の内、ドライブ番号「１」の処理を説明すると、ドライブ番号「１」の物理チャンク数(割当済み)bはドライブ管理テーブル402の列604から「５」、物理チャンク数(空き)cはドライブ管理テーブル402の列605から「５」を取得する。
【００８６】
ステップS1405で、a - c < bを判定する。即ち、ステップS1402で取得したノード番号 n の空き物理チャンク数(合計) aから、ステップS1404で取得したドライブの物理チャンク数(空き)cを減算した値が、ステップS1404で取得したドライブの物理チャンク数(割当済み)より小さいかを判定する。これは、各ドライブの割当済み物理容量が、同じノード内のその他のドライブの空き物理容量の合計を上回るかを判定することを意味する。つまり、複数のストレージノードの内の特定のストレージノードに属する特定のドライブの割当済み物理チャンクの数（物理容量）が、その特定のストレージノードの他のドライブの論理チャンクに割り当てられていない空き物理チャンクの数（物理容量）の合計を上回るか判定している。物理チャンクは所定のサイズであるため、物理チャンクの数は物理容量に置き換えることができる。
【００８７】
ステップS1405の判定の結果、否定的であればステップS1407に進み、肯定的であればステップS1406に進む。ステップS1406では、アラート(１)発行する。アラート(１)の内容については、図１７Ａで詳細に説明するが、簡単に説明すると、システムの管理者に対し、該当ノードの物理チャンクが不足しているため、ドライブの追加を促す警告を示す内容が含まれる。
【００８８】
該当ドライブの処理が終わると、次のドライブを選択し、ステップＳ1403からの処理を繰り返す。ここでは、ドライブ番号「１、２、３」の内、ドライブ番号「１」の処理が終了するとドライブ番号「２」を選択し、ドライブ番号「３」の処理までを繰り返す。全てのドライブについて処理が終了すると、ステップＳ1408に進み、次のノードが選択され、ステップＳ1401からの処理を繰り返す。
【００８９】
図１５は、本実施例の通知条件（２）の確認処理フローを示したフローチャートである。図１５に示した処理は、クラスタ制御部111によって実行され、各ノードの割当済み物理容量が、その他のノードの空き物理容量の合計を上回った場合に、通知条件（２）を満たし、アラート（２）を発行するための処理である。
【００９０】
ステップＳ1501で、ノード番号 n = 1とし、ストレージノード数だけステップＳ1501からステップS1512の処理を繰り返すループをスタートさせる。
【００９１】
ステップS1502で、ストレージノード管理テーブル401よりノード番号 n のフォールトセット番号 f を取得する。例えば、ノード番号n = 1の場合、ストレージノード管理テーブル401のフォールトセット番号502より、フォールトセット番号「１」を取得する。
【００９２】
ステップS1503で、割当済み物理チャンク(ノード)管理テーブル405よりノード番号 nの割当済み物理チャンク数(合計)の合計 a を取得する。ノード番号n = 1の場合、物理チャンク(ノード)管理テーブル405の割当済み物理チャンク数(合計)903より取得する。
【００９３】
ステップS1504で、空き物理チャンク(ノード)管理テーブル406よりノード番号 nの空き物理チャンク数(合計)の合計 b を取得する。ノード番号n = 1の場合空き物理チャンク(ノード)管理テーブル406の空き物理チャンク数(合計)1002から、空き物理チャンク数(合計)の合計 bとして取得する。
【００９４】
ステップS1505で、空き物理チャンク(フォールトセット)管理テーブル408よりフォールトセット番号 f の空き物理チャンク数(合計)の合計 c を取得する。例えば、フォールトセット番号が「１」の場合、空き物理チャンク(フォールトセット)管理テーブル408の空き物理チャンク合計1202から空き物理チャンク数(合計)の合計 c を取得する。
【００９５】
ステップS1506で、ステップS1503で取得したaと、ステップS1504で取得したｂと、ステップS1505で取得したcから、a > c - bという条件を満たすか否か判定する。これは、あるフォールトセットに属するノードの割当済み物理容量が、その他のノードの空き物理容量の合計を上回っているかを判定する。つまり、あるフォールトセットに属する第１のストレージノードの割当済み物理チャンクの数が、あるフォールトセットに属し、第１のストレージノード以外のストレージノードで、論理チャンクに割り当てられていない物理チャンクの数（空き物理容量）の合計を上回るか判定する。物理チャンクは所定のサイズであるため、物理チャンクの数は物理容量に置き換えることができる。
【００９６】
ステップS1506の条件に否定的な場合には、ステップS1512に進み、次のノードを選択してステップS1501からの処理を繰り返す。ステップS1506の条件に肯定的な場合、ステップS1507に進む。
【００９７】
ステップS1507で、割り当て済み物理チャンク(ノード)管理テーブル405より、ノード番号 nのペア先フォールトセット番号 p と割り当て済みチャンク数合計 dを取得する。ペア先フォールトセット番号 pは、割り当て済み物理チャンク(ノード)管理テーブル405のペア先フォールトセット番号902から、割り当て済みチャンク数合計 dは、割り当て済みチャンク数合計903からそれぞれ取得する。該当するペア先フォールトセット分ループ（ステップS1507からステップS1511まで）を開始する。
【００９８】
ステップS1508で、空き物理チャンク(フォールトセット)管理テーブル408よりフォールトセット番号 f, p以外のフォールトセット番号の空き物理チャンク数(合計)の合計 e を取得する。
【００９９】
ステップS1509で、ステップS1507で取得した割り当て済みチャンク数合計 dと、ステップS1508で取得したフォールトセット番号の空き物理チャンク数(合計)の合計 eから、
d > eという条件を満たすか否か判定する。即ち、ステップS1509では、ペア先フォールトセットの各ノードの割当済み物理容量が、その他のノードの空き物理容量の合計を上回ったか否かを判定する。物理チャンクは所定のサイズであるため、物理チャンクの数は物理容量に置き換えることができる。ここで、その他のノードには、処理中のフォールトセットとペア先フォールトセットに属するノードは除くものである。
【０１００】
ステップS1509の条件を満たさない場合には、ステップS1511に進み、ノード番号ｎの次のペア先フォールトセットについて、ステップS1507からの処理を繰り返す。
【０１０１】
ステップS1509の条件を満たす場合には、ステップS1510に進み、アラート（２）の発行を行う。アラート(２)の詳細は、図１７Ｂを用いて説明するが、簡単に説明するとシステムの管理者に対し、当該フォールトセットの物理チャンクが不足しているため、物理容量の増加を促す警告や、フォールトセットとペアを組むフォールトセット以外のフォールトセットに物理容量を追加することを促す警告を通知する。尚、物理容量の追加は、ドライブやノードを追加することで行われる。さらに、追加すべき物理容量の最低容量も通知される。
【０１０２】
次に、ステップS1511で、ステップS1507で取得した、ノード番号nのペア先フォールトセット番号pについて、処理が終了すると、次のフォールトセットが選択(ステップS1508)され、ループ処理を繰り返す。
【０１０３】
ノード番号ｎの全てのペア先フォールトセット番号の処理が終了すると、ステップS1512で次のノードが選択され、ループ処理を繰り返す。
【０１０４】
図１６は、本実施例の通知条件（３）の確認処理フローを示したフローチャートである。図１６に示した処理は、クラスタ制御部111によって実行され、各フォールトセットの割当済み物理容量が、その他のフォールトセットの空き物理容量の合計を上回った場合に、通知条件（３）を満たし、アラート（３）を発行するための処理である。ここで、その他のフォールトセットには、処理中のフォールトセットとペア先フォールトセットの双方が除かれる。
【０１０５】
ステップS1601で、フォールトセット番号  f = 1を選択し、ステップS1607までのフォールトセット数分ループ処理を開始する。
【０１０６】
ステップS1602で、割当済み物理チャンク(フォールトセット)管理テーブル407よりフォールトセット番号 fのペア先フォールトセット番号 p と割当済みチャンク数合計 aを取得する。ペア先フォールトセット番号 p は、割当済み物理チャンク(フォールトセット)管理テーブル407のペア先フォールトセット番号1102の値を用い、割当済みチャンク数合計 aは、割当済みチャンク数合計1103の値を用いる。該当するペア先フォールトセット分、ステップS1602からステップS1606までのループを実行する。
【０１０７】
ステップS1603で、空き物理チャンク(フォールトセット)管理テーブル408よりフォールトセット番号 f, p以外のフォールトセット番号の空き物理チャンク数(合計)の合計 b を取得する。ｂの値は、空き物理チャンク(フォールトセット)管理テーブル408の1202の値を用いる。
【０１０８】
ステップS1604で、a > bを判定する。つまり、ステップS1602で取得した割当済みチャンク数合計aが、ステップS1603で取得したフォールトセット番号f、p以外のフォールトセット番号の空き物理チャンク数(合計)の合計bより多いかを判定する。この処理は、フォールトセットの割当済み物理容量が、データのペア先フォールトセットを除くその他のフォールトセットの空き物理容量の合計を上回っているかを判定するものである。つまり、第２のフォールトセットに属するストレージノードの割当済み物理チャンクの数が、第２のフォールトセットと第２のフォールトセットとペアのフォールトセット以外のフォールトセットに属するストレージノードに属する、論理チャンクに割り当てられていない物理チャンクの数（空き物理容量）の合計を上回るか判定する。ここで、物理チャンクは所定のサイズであるため、物理チャンクの数は物理容量に置き換えることができる。
【０１０９】
ステップS1604の判定が否定的である場合、ステップS1606に進み、ペア先フォールトセット番号 pをインクリメントし、次のペア先フォールトセット番号を選択して、ループ処理を実行する。
【０１１０】
ステップS1604の判定が肯定的である場合、ステップS1605に進み、アラート（３）の発行を行う。アラート(３)の詳細は、図１７Cを用いて説明するが、簡単に説明するとシステムの管理者に対し、他のフォールトセットの物理チャンクが不足しているため、ドライブの追加を促す警告を示す内容が含まれる。
【０１１１】
図１７Ａは、本実施例の通知条件（１）によるアラート（１）の一例を示した図である。
【０１１２】
各ドライブの割当済み物理容量が、同じノード内のその他のドライブの空き物理容量の合計を上回った場合という通知条件（１）を満たした場合に、図１７Ａに示すアラート（１）をシステム管理者に通知する。
【０１１３】
アラート（１）の内容は、
「・ノード番号 n のノードに物理容量の合計が”b - (a - c)”以上のドライブを増設してください。
・ノード番号 n のノードでドライブの減設/障害予兆検知によるデータのリビルド時に通常時よりI/O性能が劣化する可能性があります。」
である。
【０１１４】
つまり、通知条件の判定を行ったノードに対し、物理容量の追加に加え、ノードに格納されたデータのリビルドに必要となる最低限必要となる物理容量を通知することができる。尚、実際に追加される物理容量は、最低限必要となる物理容量より多い値、例えば、１．５倍程度の物理容量を追加するようにしても良い。最低限必要となる物理容量よりどの程度多い物理容量を追加するかは、管理者によって適宜設定される。
【０１１５】
図１７Ａでは、ノード番号n上で実行されるデータのリビルドに伴うI/O性能へ影響も管理者に通知するようにしている。
【０１１６】
図１７Ｂは、本実施例の通知条件（２）によるアラート（２）の一例を示した図である。
【０１１７】
あるフォールトセットに属する第１のストレージノードの割当済み物理チャンクの数が、あるフォールトセットに属し、第１のストレージノード以外のストレージノードで、論理チャンクに割り当てられていない物理チャンクの数（空き物理容量）の合計を上回る場合、ペア先フォールトセットの各ノードの割当済み物理容量が、その他のノードの空き物理容量の合計を上回った場合という通知条件（２）を満たした場合に、図１７Ｂのようなアラート（２）をシステム管理者に通知する。
【０１１８】
アラート（２）の内容は、
「・フォールトセット番号 f のフォールトセットに物理容量の合計が”a - (c - b)”以上のノードまたはドライブを増設してください。
・またはフォールトセット番号 f, p 以外のフォールトセット番号のフォールトセットに物理容量の合計が”d - e”以上のノードまたはドライブを増設してください。
・ノード番号 n のノードが閉塞した場合，ノードのデータがリビルド出来ない可能性があります。」
である。
【０１１９】
つまり、通知条件の判定を行ったフォールトセットに対し、物理容量の追加と、ノードに格納されたデータのリビルドに必要となる最低限必要となる物理容量の追加を通知することができる。この物理容量の追加は、必要となる物理容量を有するノード或いはドライブの追加で達成することができることも通知する。
【０１２０】
また、フォールトセットとペアを組むフォールトセット以外のフォールトセットに対し、物理容量の追加と、リビルドに必要となる物理容量を通知する。この物理容量の追加は、必要となる物理容量を有するノード或いはドライブの追加で達成することができることも通知する。
【０１２１】
尚、実際に追加される物理容量は、最低限必要となる物理容量より多い値、例えば、１．５倍程度の物理容量を追加するようにしても良い。最低限必要となる物理容量よりどの程度多い物理容量を追加するかは、管理者によって適宜設定される。
【０１２２】
図１７Ｂでは、ノード番号ｎのノードが閉塞した場合、ノードのデータのリビルドができない可能性がある旨の警告も合わせて通知するようにしている。
【０１２３】
図１７Ｃは、本実施例の通知条件（３）によるアラート（３）の一例を示した図である。
【０１２４】
各ノードの割当済み物理容量が、データのペア先フォールトセットに属するノードは除くその他のノーの空き物理容量の合計を上回った場合という通知条件（３）を満たした場合に、図１７Ｃのようなアラート（３）をシステム管理者に通知する。
【０１２５】
アラート（３）の内容は、
「・フォールトセット番号 f, p 以外のフォールトセット番号のフォールトセットに物理容量の合計が”a - b”以上のノードまたはドライブを増設してください。
・フォールトセット番号 f のフォールトセットが閉塞した場合，フォールトセットのデータがリビルド出来ない可能性があります。」
である。
【０１２６】
つまり、通知条件の判定を行ったフォールトセット、ペアとなるフォールトセット以外のフォールトセットに対し、物理容量の追加と、フォールトセットに格納されたデータのリビルドに必要となる最低限必要となる物理容量の追加を通知することができる。この物理容量の追加は、必要となる物理容量を有するノード或いはドライブの追加で達成することができることも通知する。
【０１２７】
尚、実際に追加される物理容量は、最低限必要となる物理容量より多い値、例えば、１．５倍程度の物理容量を追加するようにしても良い。最低限必要となる物理容量よりどの程度多い物理容量を追加するかは、管理者によって適宜設定される。
【０１２８】
以上の通り、アラート（１）から（３）によって、システムの管理者は、リビルドのための物理容量が不足する場合、物理容量をどこに、どれだけ追加すればよいかを把握できる。
【０１２９】
つまり、アラート（１）から（３）によって、システムの管理者は、(ｉ)同一ノードに物理容量を追加するか、(ii)同一のフォールトセットに属するノードに物理容量を追加するか、或いは、同一フォールトセットにノードを追加するか、(iii)冗長データを格納しない他のフォールトセットに属するノードに物理容量を追加するか、あるいは、ノードを追加するか、といった物理容量を追加すべき場所を把握できる。
【０１３０】
また、上記の物理容量を追加すべき場所に、どれだけの物理容量を追加すべきかを把握することできる。
【０１３１】
図１８は、本実施例のノード内優先割当処理を示したフローチャートである。
【０１３２】
ステップS1801で、ドライブ d のデータのリビルド要求を受け付ける。
【０１３３】
ステップS1802で、物理チャンク管理テーブル403よりドライブ番号 d から切り出された物理チャンク番号 pを取得する。ステップS1803からステップS1810までは、該当する物理チャンク番号分処理を繰り返すためのループである。
【０１３４】
ステップS1803で、物理チャンク管理テーブル403より物理チャンク番号 p  のステータス s を取得する。
【０１３５】
ステップS1804では、ステップS1803で取得した物理チャンク番号のステータスが、割当（Allocated）の場合、ステップS1805に進み、閉塞（Blockade）の場合ステップS1812に進む。
【０１３６】
ステップS1805では、ドライブ管理テーブル402より、ドライブ番号 d と同じノード番号のノードに接続し，かつ物理チャンク数(空き)が1以上のドライブ番号 e を取得する。
【０１３７】
ステップS1805でドライブ番号eの取得に成功すると、ステップS1806に進み、取得に失敗するとステップS1811に進む。
【０１３８】
ステップS1806では、物理チャンク管理テーブル403より、ドライブ番号 e のドライブから切り出されており、かつステータスが"Non_allocated"の物理チャンク番号 q  を取得する。
【０１３９】
ステップS1807では、物理チャンク番号 p の物理チャンクをリビルド元データとしてノード内のデータのリビルドを指示する。
【０１４０】
ステップS1805でドライブ番号eの取得に失敗した場合、ステップS1811で、物理チャンク番号 p の物理チャンクをリビルド元データとしてノード間のデータのリビルドを指示する。
【０１４１】
ステップS1804で閉塞（Blockade）と判定し、ステップS1812に進むと、論理チャンク管理テーブルより物理チャンク番号 pとペアを組んでいる物理チャンク番号 q  を取得する。
【０１４２】
次に、ステップS1813で、物理チャンク番号 q  の物理チャンクをリビルド元データとしてノード間のデータのリビルドを指示する。
【０１４３】
ステップS1808で、データのリビルドの完了通知を受けると、データリビルド後の内容を反映するため各種テーブル情報更新する(ステップS1810)。
【０１４４】
図１８の処理により、ドライブｄに格納されたデータのリビルドデータを、同一ノードのドライブ上に格納することを優先して行うので、ノード間で発生するデータリビルドのためのデータ転送を抑止し、データリビルドの高速化とシステムのIO性能劣化を達成することができる。
【０１４５】
以上、本実施の形態によれば、マルチストレージノードシステムにおいて、ドライブやノード障害、ドライブやノード減設時においても、データの冗長性を確保するためにデータ再構築を行うための容量管理を、ドライブ、ノード、フォールトセット単位で管理することができる。
【０１４６】
また、システム管理者は、リオビルドされたデータの格納先の物理容量の不足を把握し、どこに、どれだけ物理容量を追加すればよいかを簡単に把握することができる。
【符号の説明】
【０１４７】
101：ストレージノード（SN）、
101a：クラスタマスタープライマリ(プライマリノード)、
101b：クラスタマスターセカンダリ、
101c：クラスタワーカー
102：フォールトセット（FS）、
103：ストレージクラスタ（SC）、
104：ストレージノード間ネットワーク、
105：コンピュートネットワーク、
106：管理ネットワーク、
107：コンピュートノード（CN）、
108：管理ノード（MN）、
110：SODB、
111：クラスタ制御プログラム、
112：ノード制御プログラム、
113：IO制御アクティブプログラム、
114：IO制御スタンバイプログラム、
115：DPボリューム、
116：DPプール、
117：論理チャンク、
118：物理チャンク、
119：ドライブ、
301：CPU、
302：メモリ。
【図１】
2020135137.tif 000003
【図２】
2020135137.tif 000004
【図３】
2020135137.tif 000005
【図４】
2020135137.tif 000006
【図５】
2020135137.tif 000007
【図６】
2020135137.tif 000008
【図７】
2020135137.tif 000009
【図８】
2020135137.tif 000010
【図９】
2020135137.tif 000011
【図１０】
2020135137.tif 000012
【図１１】
2020135137.tif 000013
【図１２】
2020135137.tif 000014
【図１３】
2020135137.tif 000015
【図１４】
2020135137.tif 000016
【図１５】
2020135137.tif 000017
【図１６】
2020135137.tif 000018
【図１７Ａ】
2020135137.tif 000019
【図１７Ｂ】
2020135137.tif 000020
【図１７Ｃ】
2020135137.tif 000021
【図１８】
2020135137.tif 000022
【図１９】
2020135137.tif 000023