(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-09
(45)【発行日】2024-09-18
(54)【発明の名称】ストレージシステム
(51)【国際特許分類】
G06F 3/06 20060101AFI20240910BHJP
G06F 11/10 20060101ALI20240910BHJP
【FI】
G06F3/06 305C
G06F3/06 540
G06F11/10 692
(21)【出願番号】P 2023041303
(22)【出願日】2023-03-15
(62)【分割の表示】P 2021150984の分割
【原出願日】2018-12-27
【審査請求日】2023-03-15
(73)【特許権者】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】山本 貴大
(72)【発明者】
【氏名】江原 寛人
(72)【発明者】
【氏名】千葉 武尊
(72)【発明者】
【氏名】揚妻 匡邦
【審査官】吉田 歩
(56)【参考文献】
【文献】国際公開第2017/145223(WO,A1)
【文献】国際公開第2016/052665(WO,A1)
【文献】国際公開第2018/179073(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06
G06F 11/10
(57)【特許請求の範囲】
【請求項1】
プロセッサ及びドライブを有するノードをそれぞれ有する複数のサイトと、管理部と、を含んで構成されるストレージシステムであって、
それぞれの前記サイトは、前記ドライブにデータを格納するとともに、データのライト及びリード要求を受信して自サイト
ドライブに格納されたデータのライト及びリードを行い、
前記複数のサイトは、当該複数のサイトのうちのmのサイト(mは2以上の整数)に格納されるmのデータに基づいてnのパリティ(nは1以上の整数)を生成して、当該複数のサイトのうち前記mのサイトとは異なるnのサイト
ドライブにそれぞれ格納し、前記mのデータ及びこのmのデータに基づいて生成されたnのパリティによりストライプを形成し、
前記管理部は、サイトが増減設される場合に、配置変更要求を前記複数のサイトに送信し、
前記複数のサイトは、前記配置変更要求に基づいて、
減設されるサイトに格納されたデータのサイト間移動を行い、且つ、
減設されるサイト以外に格納されたデータを移動させずに、増減設がされるサイトに関わる複数のストライプの複数のデータを用いて、当該複数のストライプを構成するデータを変えて複数のパリティを再生成することで、当該複数のストライプの各々について、当該ストライプを構成するデータの数mとパリティの数nを変えること無しに、当該ストライプを再構成する
ことを特徴とするストレージシステム。
【請求項2】
前記サイトは、受信したライト要求にかかるデータを自サイトのボリュームに格納する
ことを特徴とする請求項1に記載のストレージシステム。
【請求項3】
プロセッサ及びドライブを有するノードをそれぞれ有する複数のサイトと、管理部と、を含んで構成されるストレージシステムにおける構成変更方法であって、
それぞれの前記サイトが、前記ドライブにデータを格納するとともに、データのライト及びリード要求を受信して自サイト
ドライブに格納されたデータのライト及びリードを行うことと、
前記複数のサイトが、当該複数のサイトのうちのmのサイト(mは2以上の整数)に格納されるmのデータに基づいてnのパリティ(nは1以上の整数)を生成して、当該複数のサイトのうち前記mのサイトとは異なるnのサイト
ドライブにそれぞれ格納し、前記mのデータ及びこのmのデータに基づいて生成されたnのパリティによりストライプを形成することと、
前記管理部が、サイトが増減設される場合に、配置変更要求を前記複数のサイトに送信することと、
前記複数のサイトが、前記配置変更要求に基づいて、
減設されるサイトに格納されたデータのサイト間移動を行い、且つ、
減設されるサイト以外に格納されたデータを移動させずに、増減設がされるサイトに関わる複数のストライプの複数のデータを用いて、当該複数のストライプを構成するデータを変えて複数のパリティを再生成することで、当該複数のストライプの各々について、当該ストライプを構成するデータの数mとパリティの数nを変えること無しに、当該ストライプを再構成すること
を含むことを特徴とする構成変更方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はストレージシステムに関し、例えば冗長化を行うストレージシステムに適用して好適なものである。
【背景技術】
【0002】
従来、ストレージシステムにおける複数のストレージ装置により、RAID(Redundant Array of Independent Disks)グループを構成し、RAIDグループに基づいて作成された論理ボリュームを、上位装置(例えば、ホストコンピュータ)に提供することが行われている。
【0003】
例えば、RAIDに関する技術として、分散RAIDが知られている。分散RAIDとは、データと、データを復元するための冗長データとを含むストライプ列をデータ保護ポリシ(mDnP)で定義されるm+nよりも多くの複数のストレージ装置に分散させて管理する技術である。
【0004】
近年、SDS(Software Defined Storage)の市場が拡大している。この点、SDSにおけるノード間のデータ保護方式として、データの自ノードでの格納(データローカリティ)を維持したEC(Erasure Coding)方式が開示されている(特許文献1参照)。かかるデータ保護方式によれば,高容量効率と高信頼性との並立を図ることができる。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
近時、ストレージ装置、デバイスなどのノードの増設に対するニーズが高まっている。
【0007】
従来の分散RAIDでは、現在のストライプ列に対して増設後のストライプ列を生成し、生成したストライプ列に合わせてデータを移動することでノードの増設が実現される。しかしながら、増設したノードの空き容量を使用するためには,既存のノードから増設したノードへのデータの移動が必要となり、データの格納先が変わることで、ストレージシステムに悪影響を及ぼすおそれがある。
【0008】
また、特許文献1に記載の技術に基づいて冗長化グループを形成している場合、既存のノードからデータを移動すると,データローカリティを消失し、ストレージ性能が低下してしまう問題がある。
【0009】
本発明は以上の点を考慮してなされたもので、ノード構成が変更された場合に、パリティのノード間移動およびストライプの再構成を行うストレージシステムを提案しようとするものである。
【課題を解決するための手段】
【0010】
かかる課題を解決するため本発明においては、複数のノードを含んで構成されるストレージシステムであって、前記ノードは、データのライト及びリード要求のターゲットとなっており、異なるノードに格納される複数のデータ及びこの複数のデータに基づいて生成されたパリティによりストライプを形成し、前記ライト要求のデータが属する前記ストライプのパリティを、前記複数のデータを格納する複数のノードとは異なるノードに格納して冗長化を行い、管理部は、ノード構成が変更された場合に、前記パリティのノード間移動及び前記ストライプの再構成を行う配置変更要求を前記ノードに送信するようにした。
【0011】
上記構成によれば、例えば、構成の変更に応じて組み替えられたストライプのパリティを計算することで構成の変更を行うことが可能となる。
【発明の効果】
【0012】
本発明によれば、適応性の高いストレージシステムを実現することができる。
【図面の簡単な説明】
【0013】
【
図1】第1の実施の形態によるストレージシステムの概要を示すイメージ図である。
【
図2】第1の実施の形態によるストレージシステムに係る物理構成の一例を示す図である。
【
図3】第1の実施の形態によるストレージシステムに係る論理構成の一例を示す図である。
【
図4】第1の実施の形態によるメモリ内の情報の一例を示す図である。
【
図5】第1の実施の形態によるクラスタ構成管理テーブルの一例を示す図である。
【
図6】第1の実施の形態によるストレージプール構成管理テーブルの一例を示す図である。
【
図7】第1の実施の形態によるチャンク構成管理テーブルの一例を示す図である。
【
図8】第1の実施の形態によるチャンクマッピング管理テーブルの一例を示す図である。
【
図9】第1の実施の形態によるチャンクグループ内マッピング管理テーブルの一例を示す図である。
【
図10】第1の実施の形態によるマッピング変更の概要を示すイメージ図である。
【
図11】第1の実施の形態によるマッピング変更の特徴的構成を示すイメージ図である。
【
図12】第1の実施の形態によるマッピング変更の特徴的構成を示すイメージ図である。
【
図13】第1の実施の形態によるリード処理に係るフローチャートの一例を示す図である。
【
図14】第1の実施の形態によるライト処理に係るフローチャートの一例を示す図である。
【
図15】第1の実施の形態によるストレージプール拡張処理に係るフローチャートの一例を示す図である。
【
図16】第1の実施の形態による構成変更処理に係るフローチャートの一例を示す図である。
【
図17】第1の実施の形態によるマッピング変更処理に係るフローチャートの一例を示す図である。
【
図18】第1の実施の形態によるデータ冗長化先変更処理に係るフローチャートの一例を示す図である。
【
図19】第2の実施の形態によるマッピング変更の特徴的構成を示すイメージ図である。
【
図20】第3の実施の形態によるMECの概要を示すイメージ図である。
【
図21】第3の実施の形態によるマッピング変更の特徴的構成を示すイメージ図である。
【
図22】第4の実施の形態によるマッピング変更の特徴的構成を示すイメージ図である。
【
図23】第5の実施の形態によるマッピング変更の概要を示すイメージ図である。
【
図24】第5の実施の形態によるマッピング変更処理に係るフローチャートの一例を示す図である。
【発明を実施するための形態】
【0014】
以下図面について、本発明の一実施の形態を詳述する。本実施の形態は、データの移動を行うことなく、ストレージシステムの構成の変更を行うことができる技術に関する。本実施の形態に示すストレージシステムは、1以上の特徴的な構成を有する。例えば、本ストレージシステムは、データを読み出して、新規グルーピングでのパリティ生成先のノードに転送し、新規グルーピングのパリティを生成し、さらに旧グルーピングについても別のデータ格納領域と新規のパリティを生成することを特徴とする。また、例えば、本ストレージシステムは、各ノードのデータの個数とパリティの個数との比率が均一になるようにグルーピングを決めることを特徴とする。また、例えば、本ストレージシステムは、増設対象がノードであるかデバイスであるかを判定し、デバイスの増設であると判定した場合、ノード内のデバイス間でのデータの移動により、再グルーピングすることを特徴とする。以下では、これら以外の特徴的な構成についても示されている。
【0015】
なお、以下の説明では、同種の要素を区別しないで説明する場合には、枝番を含む参照符号のうちの共通部分(枝番を除く部分)を使用し、同種の要素を区別して説明する場合は、枝番を含む参照符号を使用することがある。例えば、ノードを特に区別しないで説明する場合には、「ノード100」と記載し、個々のノードを区別して説明する場合には、「ノード100-0」、「ノード100-1」のように記載することがある。
【0016】
(1)第1の実施の形態
図1において、1は全体として第1の実施の形態によるストレージシステムを示す。
【0017】
図1は、ストレージシステム1の概要を示すイメージ図である。ストレージシステム1は、1以上のノード100(例えば、サーバ装置)を含んで構成される。
【0018】
ユーザは、ストレージシステム1に係る構成の変更の指示(ノード100を増設する指示など)を図示は省略するクライアントノード(例えば、クライアント装置)を介して管理プログラム101に出す。管理プログラム101は、各ノード100上のストレージ制御プログラム102に構成の変更に伴うマッピング変更要求を出す。マッピング変更要求は、データを格納するノード100を変更すること(例えば、データを移動すること)なく、当該データの冗長化に係るパリティの配置(ストライプ)を変更する要求である。ストレージ制御プログラム102は、マッピング変更要求に従って、パリティを計算し、パリティを書き変える。
【0019】
管理プログラム101(コーディネータ:調停プログラムとも呼ぶ)は、何れかのノードに設けられてよいし、全てのノード100に設けられてもよいし、一部のノード100に設けられてもよいし、ストレージ制御プログラム102が存在しない独立したノードに設けられてもよい。
【0020】
管理プログラム101は、例えば、論理領域103に割り当てられている物理領域104を処理対象として、マッピング変更処理によるパリティの計算を実行するようにマッピング変更要求を出す。かかる構成によれば、未使用の物理領域104に対しての無駄な計算、計算に必要なデータの転送が削減される。
【0021】
以下では、構成を変更(増設または減設)する記憶資源としては、主にノード100を例に挙げて説明するが、データセンタといったサイト、ドライブといった記憶デバイスなどの他の記憶資源であってもよく、同様に処理できる。
【0022】
図2は、ストレージシステム1に係る物理構成の一例を示す図である。
【0023】
ストレージシステム1には、1以上のサイト210が設けられてもよい。サイト210は、ネットワーク220を介して通信可能に接続される。ネットワーク220は、例えば、WAN(Wide Area Network)であるが、WANに限定するものではない。
【0024】
サイト210は、データセンタ等であり、1以上のノード100を含んで構成される。
【0025】
ノード100は、一般的なサーバ計算機の構成を備えてよい。ノード100は、例えば、プロセッサ211、メモリ212等を含む1以上のプロセッサパッケージ、1以上のドライブ213、1以上のポート214を含んで構成される。各構成要素は、内部バス215を介して接続されている。
【0026】
プロセッサ211は、例えば、CPU(Central Processing Unit)であり、各種の処理を行う。
【0027】
メモリ212は、ノード100の機能を実現する上で必要な制御用の情報を格納したり、キャッシュデータを格納したりする。また、メモリ212は、例えば、プロセッサ211により実行されるプログラムを格納する。メモリ212は、揮発性のDRAM(Dynamic Random Access Memory)であってもよいし、不揮発のSCM(Storage Class Memory)であってもよいし、その他の記憶デバイスであってもよい。
【0028】
ドライブ213は、各種のデータ、プログラムなどを記憶する。ドライブ213は、SAS(Serial Attached SCSI)またはSATA(Serial Advanced Technology Attachment)接続のHDD(Hard Disk Drive)やSSD(Solid State Drive)、NVMe(Non-Volatile Memory Express)接続のSSDの他、不揮発メモリ(SCM:Storage Class Memory)等であってもよく、記憶装置の一例である。
【0029】
ポート214は、ネットワーク216に接続され、サイト210内の他のノード100と通信可能に接続されている。ネットワーク216は、例えば、LAN(Local Area Network)であるが、LANに限定するものではない。
【0030】
ストレージシステム1に係る物理構成は、上述の内容に限定されるものではない。例えば、ネットワーク216,220については、冗長化されていてもよい。また、例えば、ネットワーク216は、管理用のネットワークとストレージ用のネットワークとで分離してもよく、接続規格は、Ethernet(登録商標)、Infiniband、無線でもよく、接続トポロジも
図2に示す構成に限定しない。
【0031】
図3は、ストレージシステム1に係る論理構成の一例を示す図である。ストレージシステム1では、ストレージ仮想化が行われ、複数の物理領域が仮想的に統合され、1つのストレージプールとして利用される。さらに、ストレージシステム1では、シンプロビジョニングにより、各ホストノード300が現在利用している容量だけが割り当てられている。
【0032】
より具体的には、
図3に示すように、ドライブ213は、データ、パリティ等を格納する物理的な領域であるデータ格納領域を有する。データ格納領域のうちの全部または一部の領域であり、連続した領域である物理チャンク301は、チャンクグループ302に割り当てられる。
【0033】
チャンクグループ302は、複数のノード100のドライブ213の物理チャンク301から構成される。例えば、データ保護ポリシが4D1Pである場合、異なるノード100のドライブ213から確保した5つの物理チャンク301でチャンクグループ302が構成される。
【0034】
ここで、データ保護ポリシとしては、例えば、EC(Erasure Coding)、MEC(Multi-stage Erasure Coding)などがある。なお、ECとしては、データローカリティを保持しない第1の方式と、データローカリティを保持する第2の方式(例えば、国際公開第2016/52665号に記載の方式)とがあるが、ストレージシステム1には、何れの方式も適用可能である。なお、本実施の形態では、第2の方式を適用したケースを例に挙げて主に説明する。
【0035】
付言するならば、例えば、第1の方式の2D1PのECでは、ライト要求のデータを第1のデータと第2のデータとに分け、第1のデータを第1のノード100に格納し、第2のデータを第2のノード100に格納し、第1のデータおよび第2のデータのパリティを第3のノード100に格納することで冗長化が行われる。また、例えば、第2の方式の2D1PのECでは、ライト要求のデータを第1のデータと第2のデータとに分け、第1のデータおよび第2のデータを第1のノード100(自ノード100)に格納し、第1のデータのパリティを第2のノード100に格納し、第2のデータのパリティを第3のノード100に格納することで冗長化が行われる。なお、MECについては、
図20を用いて後述する。
【0036】
チャンクグループ302からは、論理チャンク303が切り出される。論理チャンク303は、各ノード100のストレージプール305に容量を割り当てる単位である。1つのチャンクグループ302から1つの論理チャンク303が切り出されてもよいし、複数の論理チャンク303が切り出されてよい。
【0037】
付言するならば、例えば、データ保護ポリシが4D1Pである場合、データの格納領域として利用できるのは、チャンクグループ302に割り当てられた物理チャンク301の総量の4/5となり、パリティの格納領域として利用できるのは、チャンクグループ302に割り当てられた物理チャンク301の総量の1/5となる。つまり、論理チャンク303として切り出せる最大の容量は、データ保護ポリシに応じて異なる。
【0038】
切り出された論理チャンク303は、プールボリューム304としてストレージプール305にアタッチされる。ストレージプール305は、1以上のプールボリューム304を含んで構成される。ストレージプール305からは、アプリケーション311により利用される仮想ボリューム306が切り出される。つまり、ストレージ制御プログラム102は、利用者の要求に応じた容量を、ドライブ213に割り当てず、仮想ボリューム306として割り当てる。
【0039】
例えば、ストレージ制御プログラム102は、アプリケーション311からライト要求を受信した場合、新規のライトであるときは、仮想ボリューム306のページ307(より詳細には、ページ307に紐づく物理チャンク301の物理領域)を割り当てる。なお、ページ307には、プールボリューム304のページ308が対応付けられている。更新のライトであるときは、ストレージ制御プログラム102は、割り当てたページ307に紐づく物理チャンク301の物理領域を特定してデータを更新する。なお、ライト要求のデータ(または後述の中間データ)は、データの冗長化に係る他のノード100に転送されてパリティが更新される。
【0040】
このように、ストレージ制御プログラム102は、ドライブ213を共有のストレージプール305として管理し、仮想ボリューム306に書き込まれたデータ量に応じてドライブ213に容量を割り当てる。これにより、使用されないドライブ213の無駄をなくし、効率的な運用が行わる。
【0041】
以下では、データを更新するにあたり、当該データは、ライト要求を受領したノード100のドライブ213(ローカルドライブ)に格納される構成(データローカリティを維持し、リード時のネットワークオーバヘッドを排除する構成)を例に挙げて主に説明する。
【0042】
なお、データにアクセスするアプリケーション311は、ホストノード300に設けられて動作するものであってもよいし、ストレージ制御プログラム102と同一ノード100に設けられて動作するものであってもよいし、別のノード100に設けられて動作するものであってもよい。
【0043】
図4は、メモリ212内の情報(ドライブ213からメモリ212に読み出される情報)の一例を示す図である。なお、制御情報テーブル410、各種のプログラム(管理プログラム101、ストレージ制御プログラム102等)は、実行中はメモリ212上に展開されるが、停電等に備えてドライブ213等の不揮発な領域に格納されている。
【0044】
制御情報テーブル410には、クラスタ構成管理テーブル411、ストレージプール構成管理テーブル412、チャンク構成管理テーブル413、チャンクマッピング管理テーブル414、およびチャンクグループ内マッピング管理テーブル415が含まれる。各テーブルについては、
図5~
図9を用いて後述する。
【0045】
管理プログラム101は、管理部の一例であり、増減設管理処理部421および論理チャンク割当処理部422を備える。
【0046】
ストレージ制御プログラム102は、ストレージ制御部の一例であり、リード処理部431、ライト処理部432、およびマッピング変更処理部433を備える。
【0047】
ノード100の機能(増減設管理処理部421、論理チャンク割当処理部422、リード処理部431、ライト処理部432、マッピング変更処理部433など)は、例えば、プロセッサ211がドライブ213に格納されたプログラムをメモリ212に読み出して実行すること(ソフトウェア)により実現されてもよいし、専用の回路などのハードウェアにより実現されてもよいし、ソフトウェアとハードウェアとが組み合わされて実現されてもよい。また、ノード100の機能の一部は、ノード100と通信可能な他のコンピュータにより実現されてもよい。
【0048】
図5は、クラスタ構成管理テーブル411の一例を示す図である。
【0049】
クラスタ構成管理テーブル411は、サイト210、ノード100、ドライブ213の構成を管理するための情報を格納する。
【0050】
クラスタ構成管理テーブル411は、サイト構成管理テーブル510、ノード構成管理テーブル520、およびドライブ構成管理テーブル530を含んで構成される。なお、ストレージシステム1は、サイト構成管理テーブル510を管理し、サイト210は、サイト210内の複数のノード構成管理テーブル520を管理し、ノード100は、ノード100内の複数のドライブ構成管理テーブル530を管理する。
【0051】
サイト構成管理テーブル510は、サイト210に係る構成(サイト210とノード100との関係など)を示す情報を格納する。より具体的には、サイト構成管理テーブル510は、サイトID(identification)511と、状態512と、関連ノードID513とが対応付けられた情報を格納する。
【0052】
サイトID511は、サイト210を識別可能な識別情報(例えば、ID)である。状態512は、サイト210の状態を示す状態情報(NORMAL、WARNING、FAILURE等)である。関連ノードID513は、サイト210に設けられるノード100を識別可能な識別情報(例えば、ID)である。
【0053】
ノード構成管理テーブル520は、サイト210ごとに設けられ、サイト210に設けられるノード100に係る構成(ノード100とドライブ213との関係など)を示す情報を格納する。より具体的には、ノード構成管理テーブル520は、ノードID521と、状態522と、関連ドライブID523とが対応付けられた情報を格納する。
【0054】
ノードID521は、ノード100を識別可能な識別情報(例えば、ID)である。状態522は、ノード100の状態を示す状態情報(NORMAL、WARNING、FAILURE等)である。関連ドライブID523は、ノード100に設けられるドライブ213を識別可能な識別情報(例えば、ID)である。
【0055】
ドライブ構成管理テーブル530は、ノード100ごとに設けられ、ノード100に設けられるドライブ213に係る構成を示す情報を格納する。より具体的には、ドライブ構成管理テーブル530は、ドライブID531と、状態532と、サイズ533(ブロック)とが対応付けられた情報を格納する。
【0056】
ドライブID531は、ドライブID531を識別可能な識別情報(例えば、ID)である。状態532は、ドライブ213の状態を示す状態情報(NORMAL、WARNING、FAILURE等)である。サイズ533は、ドライブ213の容量を示す情報(例えば、ブロックの数)である。例えば、ブロックは、固定サイズ(512kbyte等)である。
【0057】
図6は、ストレージプール構成管理テーブル412の一例を示す図である。
【0058】
ストレージプール構成管理テーブル412は、ストレージプール305が提供するシンプロビジョニング機能のための制御情報を格納する。
【0059】
ストレージプール構成管理テーブル412は、ストレージプール情報テーブル610、仮想ボリューム管理テーブル620、ページマッピングテーブル630、およびプールボリューム管理テーブル640を含んで構成される。
【0060】
ストレージプール情報テーブル610は、ストレージプール305に係る情報を格納する。より具体的には、ストレージプール情報テーブル610は、ストレージプールID611と、総容量612(ブロック)と、消費容量613(ブロック)と、枯渇閾値614とが対応付けられた情報を格納する。
【0061】
ストレージプールID611は、ストレージプール305を識別可能な識別情報(例えば、ID)である。総容量612は、ストレージプール305の総容量を示す情報(例えば、ブロックの数)である。消費容量613は、ストレージプール305で消費されている容量を示す情報(例えば、ブロックの数)である。枯渇閾値614は、ストレージプール305の容量が枯渇しているか否かを判定するための閾値(不足を監視するための閾値)である。枯渇と判断した場合は、
図15にて説明するストレージプール拡張処理により、ストレージプールを拡張する。
【0062】
仮想ボリューム管理テーブル620は、仮想ボリューム306に係る情報(仮想ボリューム306と仮想ボリューム306を割り当てたストレージプール305との対応関係を示す情報など)を格納する。より具体的には、仮想ボリューム管理テーブル620は、仮想ボリュームID621、サイズ622(ブロック)、およびストレージプールID623が対応付けられた情報を格納する。
【0063】
仮想ボリュームID621は、仮想ボリューム306を識別可能な識別情報(例えば、ID)である。サイズ622(ブロック)は、仮想ボリューム306の容量を示す情報(例えば、ブロックの数)である。ストレージプールID623は、仮想ボリューム306が属するストレージプール305を識別可能な識別情報(例えば、ID)である。
【0064】
ページマッピングテーブル630は、仮想ボリューム306に割り当てたページ307に係る情報(仮想ボリューム306とプールボリューム304との対応関係を示す情報など)を格納する。より具体的には、ページマッピングテーブル630は、仮想ボリュームID631、LBA(Logical Block Addressing)632、サイズ633(ブロック)、プールボリュームID634、およびLBA635が対応付けられた情報を格納する。
【0065】
仮想ボリュームID631は、仮想ボリューム306を識別可能な識別情報(例えば、ID)である。LBA632は、仮想ボリューム306の最初のページ307から何番目であるかを示す情報(例えば、数値)である。なお、ページ307は、ストレージ制御プログラム102が仮想ボリューム306にアクセスする単位である。サイズ633(ブロック)は、ページ307(ページ308)の容量を示す情報(ブロックの数)である。プールボリュームID634は、プールボリューム304を識別可能な識別情報(例えば、ID)である。LBA635は、プールボリューム304の最初のページ308から何番目であるかを示す情報(例えば、数値)である。なお、ページ308は、ストレージ制御プログラム102がプールボリューム304にアクセスする単位であり、ページ307と同じサイズである。
【0066】
なお、サイズ633は、全てのページ307で同じであってもよいし、ページ307ごとに異なっていてもよい。
【0067】
付言するならば、ストレージ制御プログラム102は、仮想ボリューム306のアドレスからプールボリューム304のアドレスへの変換を行う際にページマッピングテーブル630を参照する。また、ストレージ制御プログラム102は、新規ライトを受領する度に、ページ307の割当て(ページマッピングテーブル630へのレコードの追加)を行う。
【0068】
プールボリューム管理テーブル640は、プールボリューム304に係る情報(プールボリューム304と論理チャンク303との対応関係を示す情報)を格納する。より具体的には、プールボリューム管理テーブル640は、プールボリュームID641と、サイズ642(ブロック)と、論理チャンクID643とが対応付けられた情報を格納する。
【0069】
プールボリュームID641は、プールボリューム304を識別可能な識別情報(例えば、ID)である。サイズ642(ブロック)は、プールボリューム304の容量を示す情報(例えば、ブロックの数)である。論理チャンクID643は、プールボリューム304にアタッチされている論理チャンク303を識別可能な識別情報(例えば、ID)である。
【0070】
なお、サイズ642は、全てのプールボリューム304で同じであってもよいし、プールボリューム304ごとに異なっていてもよい。
【0071】
図7は、チャンク構成管理テーブル413の一例を示す図である。
【0072】
チャンク構成管理テーブル413は、物理チャンク301と複数の物理チャンク301を組み合わせて構成したチャンクグループ302(冗長化グループ)の構成を管理するための制御情報を格納する。
【0073】
チャンク構成管理テーブル413は、論理チャンク管理テーブル710、チャンクグループ管理テーブル720、および物理チャンク管理テーブル730を含んで構成される。
【0074】
論理チャンク管理テーブル710は、チャンクグループ302から切り出された論理チャンク303に係る情報(論理チャンク情報)を格納する。より具体的には、論理チャンク管理テーブル710は、論理チャンクID711と、サイズ712(ブロック)と、チャンクグループID713とが対応付けられた情報を格納する。
【0075】
論理チャンクID711は、チャンクグループ302から切り出された論理チャンク303を識別可能な識別情報(例えば、ID)である。サイズ712は、論理チャンク303の容量を示す情報(例えば、ブロックの数)である。チャンクグループID713は、論理チャンク303が属するチャンクグループ302を識別可能な識別情報(例えば、ID)である。
【0076】
チャンクグループ管理テーブル720は、チャンクグループ302に係る情報(チャンクグループ情報)を格納する。より具体的には、チャンクグループ管理テーブル720は、チャンクグループID721と、データ保護ポリシ722と、関連物理チャンクID723と、マッピング変更進捗情報724とが対応付けられた情報を格納する。
【0077】
チャンクグループID721は、チャンクグループ302を識別可能な識別情報(例えば、ID)である。データ保護ポリシ722は、チャンクグループ302のデータ保護ポリシである。関連物理チャンクID723は、チャンクグループ302に割り当てられた物理チャンク301を識別可能な識別情報(例えば、ID)である。マッピング変更進捗情報724は、マッピング変更の進捗を示す情報(例えば、アドレス)である。マッピング変更進捗情報724は、データ725と、パリティ726とが対応付けられた情報を含んで構成される。データ725は、データについてのマッピング変更の進捗を示す情報(例えば、アドレス)である。パリティ726は、パリティについてのマッピング変更の進捗を示す情報(例えば、アドレス)である。
【0078】
物理チャンク管理テーブル730は、物理チャンク301に係る情報(開始オフセットからサイズ分だけドライブ213の領域を切り出して物理チャンク301として管理するための情報)を格納する。より具体的には、物理チャンク管理テーブル730は、物理チャンクID731と、開始オフセット732と、サイズ733(ブロック)と、サイトID/ノードID/ドライブID734とが対応付けられた情報を格納する。
【0079】
物理チャンクID731は、物理チャンク301を識別可能な識別情報(例えば、ID)である。開始オフセット732は、ドライブ213から物理チャンク301を切り出すときの開始位置を示す。サイズ733(ブロック)は、物理チャンク301の容量を示す情報(ブロックの数)である。サイトID/ノードID/ドライブID734は、物理チャンク301が切り出されている記憶資源を識別可能な識別情報(物理チャンク301がどのサイト210のどのノード100のどのドライブ213から切り出されているかを示す情報)である。
【0080】
図8は、チャンクマッピング管理テーブル414の一例を示す図である。
【0081】
図8では、チャンクマッピング管理テーブル414の概念をイメージ800として示している。イメージ800に示すように、チャンクグループ302が3つ(「Group0」、「Group1」、および「Group2」)まとめてマッピング変更されることが示されている。例えば、第1の列(カラム0)に「node0」のノード100が配置され、第2の列(カラム1)に「node1」のノード100が配置され、第3の列(カラム2)に「node2」のノード100が配置されることがわかる。また、「Group0」のチャンクグループ302が全て第1のオフセット(Offset0)に設定され、「Group1」のチャンクグループ302が全て第2のオフセット(Offset1)に設定され「Group2」のチャンクグループ302が全て第3のオフセット(Offset2)に設定されていることがわかる。付言するならば、データ保護ポリシが変わっても、設定済みのチャンクグループ302の配置(チャンクマッピング管理テーブル414)は変わらない。
【0082】
なお、まとめてマッピング変更されるチャンクグループ302の数は、3つに限られるものではなく、1つであってもよいし、2つであってもよいし、4以上であってもよい。また、以下では、一のチャンクグループ302が全て同じオフセットで設定される場合を例に挙げて説明するが、これに限られるものではない。また、マッピング変更の処理単位としてチャンクグループ302が複数設けられている場合、全て同じオフセットで設定される必要はなく、異なるオフセットを含んで設定されてもよい。
【0083】
チャンクマッピング管理テーブル414は、マッピング変更の単位を規定するためのチャンクマッピング管理情報(複数のノード100内の物理チャンク301に対して、チャンクグループ302をどの組合せで組むかを決めるための制御情報など)が格納される。チャンクマッピング管理テーブル414は、チャンクグループマッピング情報810と、ノード内チャンクオフセット管理テーブル820と、フリー物理チャンクリスト830とを含んで構成される。
【0084】
チャンクグループマッピング情報810は、グループID811と、マッピングリスト812(カラムID,ノードID,オフセット)とが対応付けられた情報を格納する。
【0085】
グループID811は、チャンクグループ302を識別可能な識別情報(例えば、ID)である。マッピングリスト812は、ノード100の配列を特定するためのカラムIDと、各列に配置するノード100を特定するためのノードIDと、チャンクグループ302の相対位置を示すオフセットとが対応付けられた情報である。
【0086】
なお、チャンクグループマッピング情報810は、あくまで一例であり、サイト210の構成、ノード100の構成に応じて算出される。
【0087】
ノード内チャンクオフセット管理テーブル820は、ノード100内の物理チャンク301の位置を特定するための情報を格納する。ノード内チャンクオフセット管理テーブル820は、ノード100ごとに、ドライブ213の構成に応じて管理される。
【0088】
より具体的には、ノード内チャンクオフセット管理テーブル820は、オフセット821と、物理チャンクID822と、状態823とが対応付けられた情報を格納する。オフセット821は、チャンクグループ302に割り当てられている物理チャンク301の位置を示す情報である。物理チャンクID822は、チャンクグループ302に割り当てられている物理チャンク301を識別可能な識別情報(例えば、ID)である。状態823は、チャンクグループ302に割り当てられている物理チャンク301の状態(NORMAL、ALTERINGなど)を示す情報である。
【0089】
フリー物理チャンクリスト830は、ノード100内のドライブ213の物理チャンク301のうち、チャンクグループ302に割り当てられていない物理チャンク301を識別可能な識別情報(例えば、ID)のリストである。フリー物理チャンクリスト830では、物理チャンク301の消費容量が少ないドライブ213の先頭の物理チャンク301から並べられている。換言するならば、ノード100内の物理チャンク301の選定は、ドライブ213あたりの消費容量が少ないものから行われる。
【0090】
図9は、チャンクグループ内マッピング管理テーブル415の一例を示す図である。
【0091】
チャンクグループ内マッピング管理テーブル415は、チャンクグループ302内のデータとパリティとの配置を管理するための情報を格納する。より具体的には、チャンクグループ内マッピング管理テーブル415には、列(Column)と、行(Row)とにより識別される各セグメント(要素)に、チャンクグループ302のデータとパリティとの何れが格納されるかを示す情報が格納される。
【0092】
例えば、「Column0」と「Row0」とにより識別されるセグメント901「A1」には、チャンクグループ302が「GroupA」のデータが格納されることが示されている。「Column1」と「Row0」とにより識別されるセグメント902「A2」には、チャンクグループ302が「GroupA」のデータが格納されることが示されている。「Column3」と「Row0」とにより識別されるセグメント903「AP」には、チャンクグループ302が「GroupA」のパリティが格納されることが示されている。なお、チャンクグループ302「GroupA」を示すセグメント901「A1」と、セグメント902「A2」と、セグメント903「AP」との組合せを「ストライプ」と適宜称する。
【0093】
ここで、構成単位910に示すように、マッピング変更の処理の単位を「フレーム」と称する。構成単位920に示すように、一のオフセットが一のチャンクグループ302で構成される場合、当該一のオフセットを示す単位を「チャンク」と称する。構成単位930に示すように、一のオフセットが一のチャンクグループ302で構成される場合、チャンクグループ内マッピング管理テーブル415で管理される単位を「サイクル」と称する。
【0094】
また、チャンクグループ内マッピング管理テーブル415は、データ保護ポリシが「2D1P」である場合の例を示し、データ保護ポリシが変わると、チャンクグループ内マッピング管理テーブル415の内容が変更される。
【0095】
また、あるチャンクグループ302における物理チャンク301あたりのデータとパリティとの格納比率は、データ保護ポリシがmDnPのとき、データ:パリティ=m:nとなるように、チャンクグループ内マッピング管理テーブル415が設定されるのが好適である。パリティは、頻繁に更新されるので、あるノード100にパリティが偏って格納されると、当該ノード100に負荷が偏ってしまう。しかしながら、上述したように格納比率を決定することで、各ノード100における負荷を均一化することができるようになる。
【0096】
ここで、チャンクグループ内マッピング管理テーブル415では、あるデータ領域の物理LBAに対して、パリティ領域の物理LBA(冗長化先)を特定するために使用される。冗長化先を特定する方法としては、例えば、次のような方法が挙げられる。
【0097】
・チャンクグループマッピング情報810のリストの先頭からカラムID=0を採番
・アクセス先のグループIDとノードIDとから対応するカラムIDを取得
・アクセス先のLBAからRowを算出
Row ID = LBA mod Rowmax
(Rowmaxは、チャンクグループ内マッピング管理テーブル415では「3」)
・データ側のRowおよびColumnが特定できたら、対応するxP(パリティ側)のRowおよびColumnを取得
・パリティ側のノードIDと物理LBAを算出
LBAp = LBAd + Ssize × Row ID
(Ssizeは、セグメントのサイズ)
なお、データの修復処理におけるパリティ位置からデータ位置を特定する方法は、上記の逆手順となる。
【0098】
図10は、マッピング変更の概要を示すイメージ図である。ここでは、構成の変更前のチャンクマッピング管理情報1010および構成の変更後のチャンクマッピング管理情報1020に示すように、「N3」のノード100(ノード100-3)が追加(ノード増設)されるケースを例に挙げて説明する。
【0099】
チャンクマッピング管理情報1020では、「N3」のノード100に対して、オフセット「♯1」にチャンクグループ302のグループ「G0」が設定され、オフセット「♯1」にグループ「G1」が設定され、オフセット「♯2」にグループ「G3」が設定されている。
【0100】
なお、各チャンクグループ302の各ノード100でデータとパリティとが偏らないように、チャンクグループ内マッピング管理テーブル415が作成(変更)されている。付言するならば、構成の変更後も、各ノード100におけるデータとパリティとの格納比率は、mDnPに応じて均一となっている(ノード100ごとにデータまたはパリティが偏ったりしない)。
【0101】
マッピング変更では、フレーム1030の単位にマッピング変更要求が管理プログラム101から各ノード100に送信され、各ノード100において、チャンクグループ302に割り当てられた物理チャンク301が先頭から順番に処理(データまたは中間データの転送、パリティの計算など)される。
【0102】
図11は、マッピング変更の特徴的構成(フレーム内の動作の概要)を示すイメージ図である。ここでは、一のチャンクの一のサイクルを例に挙げて説明する。
【0103】
ノード100が増設された場合、データはノード100間で移動することなく、パリティを組み替えて、追加されたノード100を含めたストライプが組まれる。その際、例えば、データとパリティとが偏らないようにチャンクグループ内マッピング管理テーブル415が変更され、変更されたチャンクグループ内マッピング管理テーブル415に従ってマッピング変更が行われる。
【0104】
マッピング変更の主な処理は、下記のようになる。
<処理A>
既存のノード100の一部のパリティを増設されたノード100に再構築する。
<処理B>
新規のストライプのパリティを生成する。
<処理C>
既存のストライプでデータの組合せが変わるストライプについてパリティを生成する。
【0105】
本例では、マッピング変更前および処理Aについてはイメージ1110として示し、処理Bおよび処理Cについてはイメージ1120として示し、マッピング変更後についてはイメージ1130として示す。本例において、「A1-A2-AP」、「B1-B2-BP」、「C1-C2-CP」は、既存のストライプを示し、「D1-D2-DP」は、新規のストライプを示す。
【0106】
また、イメージ1110とイメージ1130とを比較するとわかるように、既存のストライプのうち、「B1-B2-BP」は、パリティの格納位置が変更されたストライプ(移動ストライプ)であり、「C1-C2-CP」は、データの組合せが変更されたストライプ(変更ストライプ)である。
【0107】
なお、「A1,A2,B1,B2,C1,C2,D1,D2」は、データを格納するセグメントを示し、「AP,BP,CP,DP」は、パリティを格納するセグメントを示す。
【0108】
イメージ1110では、ストレージシステム1は、イメージ1130をもとに、既存の「ノード0」の「BP」のパリティを増設された「ノード3」に再構築(ここでは、「B1」のデータ1111と「B2」のデータ1112との排他的論理和1113を計算して「BP」のパリティ1114として格納)し、既存の「ノード0」に空き領域を設ける。
【0109】
イメージ1120では、ストレージシステム1は、イメージ1130をもとに、設けた空き領域に、新規のストライプを構成する「D1」のデータ1121(「ノード2」に格納されている「C1」のデータ1121)と「D2」のデータ1122との排他的論理和1123を計算して「DP」のパリティ1124を生成する。
【0110】
また、イメージ1120では、ストレージシステム1は、イメージ1130をもとに、既存のストライプでデータの組合せが変更される「C1-C2-CP」について、変更後のストライプを構成する「C1」のデータ1125と「C2」のデータ1126との排他的論理和1127を計算して変更後の「CP」のパリティ1128を生成する。
【0111】
イメージ1130では、データを移動することなく、パリティを構築(移動、計算など)することで、ノード100-3の増設に対応したストライプに組み替えられたことが示される。
【0112】
図12は、マッピング変更の特徴的構成(フレーム内動作の概要)を示すイメージ図である。
図11とは、ノード100間のデータ転送の最適化が行われている点が異なり、その点について主に説明する。
【0113】
本例では、処理Aについてはイメージ1210として示し、処理Bおよび処理Cについてはイメージ1220として示し、マッピング変更後についてはイメージ1230として示す。
【0114】
イメージ1210に示すように、ストレージシステム1は、空き領域を設けるために移動する既存のパリティ1211の計算に用いるデータを転送するのではなく、既存のパリティ1211そのものを転送して「B1-B2-BP」のパリティ1212とする。かかる転送によれば、ノード100間の転送量を削減することが可能になる。
【0115】
イメージ1220に示すように、ストレージシステム1は、増設するノード100-3内のデータを「0(ゼロ)」として扱い、変更するストライプの「C1」のデータ1221を転送することで、新規のパリティ1222を生成し、既存のパリティ1223を再生成する。かかる転送によれば、ノード100間の転送量を削減することが可能になる。
【0116】
例えば、パリティ1222(新DP)は、次のように変形して生成される。旧DPについては、旧DP=0=0 XOR 0のように考え、新DPについては、新DP=D1(=旧C1) XOR 0であるので、旧DPにD1をXOR演算すると、旧DP XOR D1=0 XOR D1=新DPとして生成される。つまり、D2を用いる(転送する)ことなく、C1を用いて新DPを生成できる。
【0117】
例えば、パリティ1223は、次のように変形して再生成される。旧CPについては、旧CP=C1 XOR C2であり、新CPについては、新CP=0 XOR C2であるので、旧CPにC1をXOR演算すると、旧CP OXR C1=(C1 XOR C2) XOR C1=(C1 XOR C1) OXR C2= 0 XOR C2=新CPとして生成される。つまり、C2を用いる(転送する)ことなく、C1を用いて新DPを生成できる。
【0118】
次に、ストレージシステム1に係る処理について説明する。
【0119】
図13は、リード処理に係るフローチャートの一例を示す図である。リード処理では、アプリケーション311からのリード要求を受けて、自ノード100のドライブ213からデータが読み出される。アクセス先の領域(ドライブ213)が障害状態である場合、冗長データからリード対象のデータが修復されて応答される。また、マッピング変更中における修復処理では、チャンクグループ内マッピング管理テーブル415(以下では、適宜、マッピング情報と称する。)が新面(構成変更後のマッピング情報)であるか旧面(構成変更前のマッピング情報)であるかが判定されて、修復対象の冗長データ位置が決定される。以下、詳細について説明する。
【0120】
ステップS1301では、リード処理部431は、リード要求のデータについて、ストレージプール305にはページ307が未割当てであるか否かを判定する。リード処理部431は、未割当てであると判定した場合、ステップS1302に処理を移し、未割当てでないと判定した場合、ステップS1303に処理を移す。
【0121】
ステップS1302では、リード処理部431は、データがないことを示す0データをホストノード300に返却し、リード処理を終了する。
【0122】
ステップS1303では、リード処理部431は、割当先のアドレスを取得する。
【0123】
ステップS1304では、リード処理部431は、排他取得を行う。排他取得では、アクセス先のLBA(Logical Block Addressing)に対して、ミューテクス等の排他アルゴリズムを用いて、複数の処理が同時に同じ領域へアクセスしないように制御する。以降の排他処理についても同様の処理を行う。
【0124】
ステップS1305では、リード処理部431は、アクセス先のドライブ213が障害状態であるか否かを判定する。リード処理部431は、障害状態であると判定した場合、ステップS1306に処理を移し、障害状態でないと判定した場合、ステップS1320に処理を移す。
【0125】
ステップS1306では、リード処理部431は、マッピング変更中であるか否かを判定する。リード処理部431は、マッピング変更中であると判定した場合、ステップS1307に処理を移し、マッピング変更中でないと判定した場合、ステップS1310に処理を移す。例えば、リード処理部431は、チャンクマッピング管理テーブル414のノード内チャンクオフセット管理テーブル820を確認し、更新中「ALTERING」である場合、マッピング変更中であると判定する。
【0126】
ステップS1307では、リード処理部431は、リード要求のデータについて、マッピング変更が済んでいるか否かを判定する。リード処理部431は、済んでいると判定した場合、ステップS1308に処理を移し、済んでいないと判定した場合、ステップS1309に処理を移す。例えば、リード処理部431は、ノード100内チャンクグループ管理テーブル720のマッピング変更進捗情報724を確認し、「アクセス先のLBA<進捗情報」である場合、マッピング変更が済んでいると判定する。
【0127】
ステップS1308では、リード処理部431は、変更後のマッピング情報(新マッピング情報)から、リード要求のデータのパリティを格納する冗長化先のノード100(冗長化先ノード)を決定する。なお、以下では、冗長化先のノード100としては、リード要求のデータのパリティを格納するノード100が決定されるものとして説明する。
【0128】
ステップS1309では、リード処理部431は、変更前のマッピング情報(旧マッピング情報)から冗長化先のノード100を決定する。
【0129】
ステップS1310では、リード処理部431は、現行のマッピング情報から冗長化先のノード100を決定する。
【0130】
ステップS1311では、リード処理部431は、決定した冗長化先のノード100にデータの修復を行う要求(データ修復要求)を送信する。
【0131】
ステップS1312では、冗長化先のノード100のリード処理部431(冗長化先リード処理部)は、排他取得を行う。
【0132】
ステップS1313では、冗長化先リード処理部は、修復に必要なデータのリード要求を送信する。なお、図示は省略しているが、ここでノード100間の通信を発生させて、修復に必要なデータと同じストライプを組むデータを有する他のノード100から当該データを読み出す。
【0133】
ステップS1314では、冗長化先リード処理部は、修復に必要なパリティを読み出す。
【0134】
ステップS1315では、冗長化先リード処理部は、修復に必要なデータを受信する。
【0135】
ステップS1316では、冗長化先リード処理部は、データとパリティとから障害のデータを修復する。
【0136】
ステップS1317では、冗長化先リード処理部は、修復したデータを送信する。
【0137】
ステップS1318では、冗長化先リード処理部は、排他解除を行う。
【0138】
ステップS1319では、リード処理部431は、修復されたデータを受信する。
【0139】
ステップS1320では、リード処理部431は、自ノード100のドライブ213(ローカルドライブ)からデータを読み出す。
【0140】
ステップS1320では、リード処理部431は、排他解放を行い、リード処理を終了する。
【0141】
図14は、ライト処理に係るフローチャートの一例を示す図である。ライト処理では、アプリケーション311からのライト要求を受けて、自ノード100のドライブ213にデータが書き込まれ、さらに他ノード100のドライブ213に冗長データ(パリティ)が書き込まれる。マッピング変更中は、新面であるか旧面であるかが判定されてから冗長化先が決定される。以下、詳細について説明する。
【0142】
ステップS1401では、ライト処理部432は、ライト要求のデータについて、ストレージプール305にはページ307が未割当てであるか否かを判定する。ライト処理部432は、未割当てであると判定した場合、ステップS1402に処理を移し、未割当てでないと判定した場合、ステップS1403に処理を移す。
【0143】
ステップS1402では、ライト処理部432は、自ノード100のドライブ213の物理チャンク301が関連付けられているボリューム304(自系ボリューム)にページ307を割り当てる。
【0144】
ステップS1403では、ライト処理部432は、割当先のアドレスを取得する。
【0145】
ステップS1404では、ライト処理部432は、排他取得を行う。
【0146】
ステップS1405では、ライト処理部432は、書込み前のデータ(旧データ)を読込む(より具体的には、旧データについて
図13に示すリード処理を行う)。
【0147】
ステップS1406では、ライト処理部432は、中間データを生成する。中間データは、データを部分的に更新するときに作成する一時的なデータであり、新旧の差分を示すデータである。例えば、旧データのストライプが「A1-A2-AP」である場合、中間データは、次のように求められる。
AP(旧パリティ)=A1(旧データ) XOR A2(旧データ)
A1(新データ) XOR A1(旧データ)=M(中間データ)
なお、新パリティについては、次のように求められる。
AP(旧パリティ) XOR M(中間データ)=AP(新パリティ)
【0148】
ステップS1407では、ライト処理部432は、マッピング変更中であるか否かを判定する。ライト処理部432は、マッピング変更中であると判定した場合、ステップS1408に処理を移し、マッピング変更中でないと判定した場合、ステップS1411に処理を移す。なお、判定の方法は、ステップS1306と同様であるので、説明を省略する。
【0149】
ステップS1408では、ライト処理部432は、ライト要求のデータについて、マッピング変更が済んでいるか否かを判定する。ライト処理部432は、済んでいると判定した場合、ステップS1409に処理を移し、済んでいないと判定した場合、ステップS1410に処理を移す。なお、判定の方法は、ステップS1307と同様であるので、説明を省略する。
【0150】
ステップS1409では、ライト処理部432は、新マッピング情報から冗長化先のノード100を決定する。なお、以下では、冗長化先のノード100としては、ライト要求のデータのパリティを格納するノード100が決定されるものとして説明する。
【0151】
ステップS1410では、ライト処理部432は、旧マッピング情報から冗長化先のノード100を決定する。
【0152】
ステップS1411では、ライト処理部432は、現行のマッピング情報から冗長化先のノード100を決定する。
【0153】
ステップS1412では、ライト処理部432は、決定した冗長化先のノード100に中間データを送信する。なお、ライト処理部432は、冗長度に応じて(冗長度が2以上である場合、2以上のノード100に)中間データを転送する。
【0154】
ステップS1413では、冗長化先のノード100のライト処理部432(冗長化先ライト処理部)は、中間データを受信する。
【0155】
ステップS1414では、冗長化先ライト処理部は、排他取得を行う。
【0156】
ステップS1415では、冗長化先ライト処理部は、自ノード100のドライブ213(ローカルドライブ)から旧パリティを読み出す。
【0157】
ステップS1416では、冗長化先ライト処理部は、中間データと旧パリティとから新パリティを計算する。
【0158】
ステップS1417では、冗長化先ライト処理部は、ローカルドライブに新パリティを書き込む。
【0159】
ステップS1418では、冗長化先ライト処理部は、排他解放を行う。
【0160】
ステップS1419では、ライト処理部432は、ローカルドライブにライト要求のデータ(新データ)を書き込む。
【0161】
ステップS1420では、ライト処理部432は、冗長化先のノード100から書込み応答を受信する。
【0162】
ステップS1421では、ライト処理部432は、排他解放を行い、ライト処理を終了する。
【0163】
図15は、ストレージプール拡張処理(論理チャンク割当処理)に係るフローチャートの一例を示す図である。ストレージプール拡張処理では、ストレージプール305の枯渇の閾値に到達したとき、論理チャンク303がストレージプール305に割り当てられてプールサイズが拡張される。ストレージプール拡張処理は、周期的に実行されてもよいし、ライト処理後に毎回実行されてもよい。なお、論理チャンク化するグループは、ノード100間の負荷や使用容量が均等になるように決定することが好適である。
【0164】
ステップS1501では、論理チャンク割当処理部422は、ストレージプール構成管理テーブル412のストレージプール情報テーブル610を確認し、総容量612に対する消費容量613がストレージプール305の枯渇閾値614(プール枯渇閾値)を超過しているか否かを判定する。論理チャンク割当処理部422は、超過していると判定した場合、ステップS1502に処理を移し、超過していないと判定した場合、ストレージプール拡張処理を終了する。
【0165】
ステップS1502では、論理チャンク割当処理部422は、自ノード100のドライブ213の物理チャンク301から論理チャンク303を切り出すこと(自系ノードの容量から論理チャンク化)ができるか否かを判定する。論理チャンク割当処理部422は、できると判定した場合、ステップS1503に処理を移し、できないと判定した場合、ステップS1504に処理を移す。例えば、論理チャンク割当処理部422は、容量の割当ての対象のノード100のフリー物理チャンクリスト830が空でない場合、できると判定する。
【0166】
ステップS1503では、論理チャンク割当処理部422は、自系ノードの容量から論理チャンク化を行う。例えば、論理チャンク割当処理部422は、まず、自系ノードのフリー物理チャンクリスト830から物理チャンク301を取得し、自系ノードのノード内チャンクオフセット管理テーブル820の未割当オフセットに登録する。次に、論理チャンク割当処理部422は、割り当てた自系ノードのノード内オフセットから、チャンクグループマッピング情報を参照して、チャンクグループを構成する他系ノードのノード番号とオフセットを特定する。次に、論理チャンク割当処理部422は、特定した他系ノードのフリー物理チャンクリスト830から物理チャンク301を取得して、特定したノード内チャンクオフセット管理テーブル820に登録する。次に、論理チャンク割当処理部422は、チャンクグループ情報と論理チャンク情報とをチャンク構成管理テーブル413に登録する。
【0167】
ステップS1504では、論理チャンク割当処理部422は、消費容量が最も少ない他ノード100(他系ノード)を選定する。
【0168】
ステップS1505では、論理チャンク割当処理部422は、他系ノードの容量から論理チャンク化が可能であるか否かを判定する。論理チャンク割当処理部422は、可能であると判定した場合、ステップS1506に処理を移し、可能でないと判定した場合、ステップS1507に処理を移す。
【0169】
ステップS1506では、論理チャンク割当処理部422は、選定した他系ノードの容量から論理チャンク化を行い、ステップS1509に処理を移す。他系ノードの容量を使用して論理チャンクを作成する処理は、ステップS1503で説明した手順の自系ノードを他系ノードに置き換えるだけであるため、省略する。
【0170】
ステップS1507では、論理チャンク割当処理部422は、全ノード100に対して確認したか否か(確認済みであるか否か)を判定する。論理チャンク割当処理部422は、確認したと判定した場合、ステップS1510に処理を移し、確認していないと判定した場合、ステップS1508に処理を移す。
【0171】
ステップS1508では、論理チャンク割当処理部422は、次に消費容量が少ない他系ノードを選定し、ステップS1505に処理を移す。
【0172】
ステップS1509では、論理チャンク割当処理部422は、論理チャンク303をストレージプール305に割り当て、ストレージプール拡張処理を終了する。
【0173】
ステップS1510では、論理チャンク割当処理部422は、割当てできない(割当不可)として、ストレージプール拡張処理を終了する。
【0174】
ストレージプール305の枯渇の閾値に到達時に論理チャンク303を動的に割り当てることで、マッピング変更時のノード100間の転送コストを削減することができる。
【0175】
図16は、構成変更処理に係るフローチャートの一例を示す図である。構成変更処理では、構成変更指示に基づいて、各ノード100にマッピング変更要求がフレーム単位に発行される。構成変更処理は、管理プログラム101内で実行される。実行の契機としては、周期的に実行されてもよいし、ユーザからの操作受領契機で実行されてもよい。また、冗長度(p)以下のノード障害、ドライブ障害などとなった場合、変更処理を継続(ロールフォワード)し、その後、障害部位をリプレースすることで正常状態に復帰される。なお、冗長度以上の障害発生時は変更処理が中止される。障害部位については、コレクションアクセスによりアクセス継続し、マッピング変更処理が継続される。
【0176】
ステップS1601では、増減設管理処理部421は、ドライブ213を増設または減設する旨の指示(ドライブ増減設指示)を受信したか否かを判定する。増減設管理処理部421は、受信したと判定した場合、ステップS1602に処理を移し、受信していないと判定した場合、ステップS1603に処理を移す。
【0177】
ステップS1602では、増減設管理処理部421は、ノード内チャンクオフセット管理テーブル820を再計算する。増減設管理処理部421は、ドライブ213の増減設の場合は、ノード100内のチャンクオフセットに割り当てる物理チャンク301を変更し、ノード100内のデータおよびパリティをドライブ213間で移動(データ移動)することで構成を変更する。この際、例えば、増減設管理処理部421は、各ドライブ213の容量が均一化されるように割当てを変更してデータ移動してもよいし、各ドライブ213のIO負荷が均一化されるように割当てを変更してデータ移動してもよい。なお、増減設管理処理部421は、ドライブ213の増設の場合、ノード内チャンクオフセット管理テーブル820の割当てを変更することなく、フリー物理チャンクリスト830に追加するようにしてもよい。
【0178】
ステップS1603では、増減設管理処理部421は、ノード100を増設または減設する旨の指示(ノード増減設指示)を受信したか否かを判定する。増減設管理処理部421は、受信したと判定した場合、ステップS1604に処理を移し、受信していないと判定した場合、ステップS1605に処理を移す。
【0179】
ステップS1604では、増減設管理処理部421は、配置情報を再計算し、ステップS1606に処理を移す。例えば、増減設管理処理部421は、構成の変更に応じて、データを他のノード100に移動することがないようにストライプを変更するための配置情報(例えば、チャンクマッピング管理テーブル414およびチャンクグループ内マッピング管理テーブル415)を新規に生成する。なお、再計算された配置情報は、適宜のタイミングで各ノード100に送信される。
【0180】
ステップS1605では、増減設管理処理部421は、サイト210を増設または減設する旨の指示(サイト増減設指示)を受信したか否かを判定する。増減設管理処理部421は、受信したと判定した場合、ステップS1604に処理を移し、受信していないと判定した場合、ステップS1601に処理を移す。
【0181】
ステップS1606では、増減設管理処理部421は、マッピング変更の対象のフレームとして先頭のフレームを設定する。
【0182】
ステップS1607では、増減設管理処理部421は、フレーム内の論理チャンク303は、ストレージプール305に割当て済みであるか否かを判定する。増減設管理処理部421は、割当て済みであると判定した場合、ステップS1608に処理を移し、割当て済みでないと判定した場合、ステップS1610に処理を移す。
【0183】
このように、ストレージプール305に割り当てた領域のみを対象とすることで、構成変更時のノード100間の転送コストを削減することができる。
【0184】
ステップS1608では、増減設管理処理部421は、マッピング変更処理を行う。マッピング変更処理では、マッピング変更要求が各ノード100に送信される。なお、マッピング変更処理については、
図17および
図18を用いて後述する。
【0185】
ステップS1609では、増減設管理処理部421は、新規のチャンクグループマッピング情報810をチャンク構成管理テーブル413に反映する。
【0186】
ステップS1610では、増減設管理処理部421は、全フレームに対して処理を完了したか否かを判定する。増減設管理処理部421は、完了したと判定した場合、ステップS1601に処理を移し、完了していないと判定した場合、ステップS1611に処理を移す。
【0187】
ステップS1611では、増減設管理処理部421は、マッピング変更の対象のフレームを次のフレームに進め、ステップS1607に処理を移す。
【0188】
図17は、マッピング変更処理に係るフローチャートの一例を示す図である。マッピング変更処理では、ノード100を増設する指示を受信したときに、一のチャンクについて実行が行われる場合を例に挙げて説明する。管理プログラム101側の処理は、構成変更処理の延長で呼び出され、ストレージ制御プログラム102側の処理は、各ノード100上のストレージ制御部430で実行される。なお、
図17に示すマッピング変更処理は、
図12に示す最適化した方式での処理について例示している。
【0189】
ステップS1701では、管理プログラム101の増減設管理処理部421は、増設対象のノード100に物理領域の0クリア要求を送信する。
【0190】
ステップS1702では、0クリア要求を受信したノード100のマッピング変更処理部433は、増設対象の物理領域を0クリアする。ここで、物理領域の0クリア(0データ化)は、実際に「0」を書き込んでもよいし、ビットで「0」の状態であることを管理してもよい。
【0191】
ステップS1703では、増減設管理処理部421は、完了応答を受信する。
【0192】
ステップS1704では、増減設管理処理部421は、新旧の配置情報を参照し、移動元の物理チャンク301(移動元チャンク)と、移動先の物理チャンク301(移動先チャンク)とのノードIDとノード内オフセットとを特定する。
【0193】
例えば、
図10に示す例では、マッピング変更前とマッピング変更後の配置情報を参照して、グループ0(G0)、グループ1(G1)、およびグループ2(G2)の配置が変更されていると判断する。また、後述する
図23に示す例では、グループ1(G1)、グループ2(G2)、およびグループ3(G3)の配置が変更されていると判断する。
図23に示す例では、グループ0(G0)については配置が変更されていないため、移動対象の物理チャンクから除外する。
【0194】
ステップS1705では、増減設管理処理部421は、移動元チャンクから移動先チャンクにパリティの移動を行う移動要求を移動元チャンクのノード100に送信する。本マッピング変更処理では、発行箇所が一のノード100のように示しているが、ここでは、一のフレーム内の変更対象のノード100すべてに送信(発行)が行われる。なお、パリティの移動が不要な場合、ステップS1705の処理は、スキップされる。
【0195】
ステップS1706では、パリティの移動要求を受信したノード100のマッピング変更処理部433は、マッピング変更進捗情報724を初期化する。
【0196】
ステップS1707では、マッピング変更処理部433は、排他取得を行う。
【0197】
ステップS1708では、マッピング変更処理部433は、移動元チャンクのパリティを読み出す。
【0198】
ステップS1709では、マッピング変更処理部433は、移動先チャンクのストレージ制御プログラム102にパリティの書込み要求を送信する。
【0199】
ステップS1710では、マッピング変更処理部433は、応答を受信する。
【0200】
ステップS1711では、マッピング変更処理部433は、読み出した移動元チャンクのパリティを「0」にする(移動元チャンクを0クリアする)。
【0201】
ステップS1712では、マッピング変更処理部433は、物理チャンク301内の全領域に対して処理を完了したか否かを判定する。マッピング変更処理部433は、完了したと判定した場合、ステップS1715の処理が行われ、完了していないと判定した場合、ステップS1713に処理を移す。
【0202】
ステップS1713では、マッピング変更処理部433は、マッピング変更進捗情報724を更新する。
【0203】
ステップS1714では、マッピング変更処理部433は、排他解放を行い、ステップS1707に処理を移す。
【0204】
ステップS1715では、増減設管理処理部421は、完了応答を受信する。
【0205】
ステップS1716では、増減設管理処理部421は、移動元チャンクのデータのパリティを更新する更新要求を送信する。本マッピング変更処理では、発行箇所が一のノード100のようになっているが、ここは一のフレーム内の変更対象のノード100すべてに送信(発行)が行われる。なお、パリティの更新が不要な場合、ステップS1716の処理は、スキップされる。
【0206】
ステップS1717では、パリティの更新要求を受信したノード100のマッピング変更処理部433は、データ冗長化先変更処理を行う。なお、データ冗長化先変更処理については、
図18を用いて後述する。
【0207】
ステップS1718では、増減設管理処理部421は、完了応答を受信する。
【0208】
ステップS1719では、増減設管理処理部421は、特定した移動元チャンク全てに対して処理を完了したか否かを判定する。増減設管理処理部421は、完了したと判定した場合、マッピング変更処理を終了し、完了していないと判定した場合、ステップS1720に処理を移す。
【0209】
ステップS1720では、増減設管理処理部421は、次の移動元チャンク(および移動先チャンク)を設定し、ステップS1705に処理を移す。
【0210】
図18は、データ冗長化先変更処理に係るフローチャートの一例を示す図である。データ冗長化先変更処理では、データを移動せずに冗長化先のパリティが変更される。より具体的には、新規の冗長化先にデータが転送されて新パリティが生成され、旧冗長化先にデータが転送されて旧パリティとの関係が解除されてパリティが再計算される。
【0211】
ステップS1801では、マッピング変更処理部433は、マッピング変更進捗情報724を初期化する。
【0212】
ステップS1802では、マッピング変更処理部433は、排他取得を行う。
【0213】
ステップS1803では、マッピング変更処理部433は、ローカルドライブ(自ノード100のドライブ213)から、データ(移動先チャンクに新たにパリティを生成するためのデータ、または移動先チャンクのパリティを更新するためのデータ)を読み出す。
【0214】
ステップS1804では、マッピング変更処理部433は、新マッピング情報から新しい冗長化先のノード100(新冗長化先ノード)を決定する。
【0215】
ステップS1805では、マッピング変更処理部433は、新冗長化先ノードにデータを転送する。なお、冗長度が2以上である場合、2以上のノード100にデータを転送する。また、データを受信したノード100は、ライト処理と同じ処理でパリティを更新し、更新が完了したことを返信(応答)する。
【0216】
ステップS1806では、マッピング変更処理部433は、応答を受信する。
【0217】
なお、新規ストライプのパリティの生成でない場合(例えば、
図12に示す例で、移動元チャンクのノード100がノード100-2であり、移動先チャンクのノード100-1である場合)、ステップS1804~ステップS1806については、スキップされてもよい。
【0218】
ステップS1807では、マッピング変更処理部433は、旧マッピング情報から変更前の冗長化先のノード100(旧冗長化先ノード)を決定する。
【0219】
ステップS1808では、マッピング変更処理部433は、旧冗長化先ノードにデータを転送する。なお、データを受信したノード100は、ライト処理と同じ処理でパリティを更新し、更新が完了したことを返信(応答)する。
【0220】
ステップS1809では、マッピング変更処理部433は、応答を受信する。
【0221】
なお、変更ストライプのパリティの更新でない場合(例えば、
図12に示す例で、移動元チャンクのノード100がノード100-2であり、移動先チャンクのノード100-0である場合)、ステップS1807~ステップS1809については、スキップされてもよい。
【0222】
ステップS1810では、マッピング変更処理部433は、排他解除を行う。
【0223】
ステップS1811では、マッピング変更処理部433は、物理チャンク301内の全領域に対して処理が完了したか否かを判定する。マッピング変更処理部433は、完了したと判定した場合、データ冗長化先変更処理を終了し、完了していないと判定した場合、ステップS1812に処理を移す。
【0224】
ステップS1812では、マッピング変更処理部433は、マッピング変更進捗情報724を更新し、ステップS1802に処理を移す。
【0225】
本実施の形態によれば、例えば、構成の変更前後で、既存のボリュームに性能影響を与えることなく、ノードの増設などを行うことができる。また、例えば、データローカリティを保持するECであっても、構成の変更前後また構成変更中で、データローカリティを維持するので、ストレージ性能が低下しない。
【0226】
(2)第2の実施の形態
本実施の形態は、パリティが2つである点について説明する。本実施の形態では、第1の実施の形態と同じ点については、説明を適宜省略し、異なる点について主に説明する。以下では、データ保護ポリシが2D2Pである場合を例に挙げて説明する。
【0227】
図19は、マッピング変更の特徴的構成(フレーム内動作の概要)を示すイメージ図である。
【0228】
パリティが2つの場合は、パリティが1つの場合と、マッピング変更の主な処理については、基本的には同じである。
<処理A>
既存のノード100の一部のパリティを増設されたノード100に再構築(移動または再計算)する。
<処理B>
新規のストライプのパリティを生成する。
<処理C>
既存のストライプでデータの組合せが変わるストライプについてパリティを生成する。
【0229】
本例では、処理Aについてはイメージ1910として示し、処理Bについてはイメージ1920として示し、処理Cについてはイメージ1930として示し、マッピング変更後についてはイメージ1940として示す。本例において、「A1-A2-AP-AQ」、「B1-B2-BP-BQ」、「C1-C2-CP-CQ」、「D1-D2-DP-DQ」は、既存のストライプを示し、「E1-E2-EP-EQ」は、新規のストライプを示す。なお、「AP、BP、CP、DP、EP」は、単純な排他的論理和で計算される第1のパリティであるのに対して、「AQ、BQ、CQ、DQ、EQ」は、例えば、Cauchy-Reed-Solomon等のアルゴリズムを使用して計算された第2のパリティを意味する。冗長度が3以上となった場合も、例えば、Cauchy-Reed-Solomon等のアルゴリズムを使用して、第3、第4のパリティを計算することができる。Cauchy-Reed-Solomon等のアルゴリズムについても、排他的論理和(XOR)を使用して、パリティが計算されることから、以降の説明では、符号計算方式の詳細については言及せず、単に排他的論理和と説明する。
【0230】
本例では、イメージ1940に示すストライプでマッピング情報が生成されたとする。付言するならば、データ保護ポリシが2D2Pであるので、マッピング情報については、各ノード100においてデータ:パリティ=2:2と配置されるように生成されるのが好適である。
【0231】
イメージ1910では、ストレージシステム1は、イメージ1940をもとに、「ノード0」には、「EP」のパリティを格納する領域が必要であるため、既存の「ノード0」の「CP」および「BQ」のパリティ1911を増設された「ノード4」に再構築する。また、ストレージシステム1は、「ノード1」には、「EQ」のパリティを格納する領域が必要であるため、「ノード1」の「DP」および「CQ」のパリティ1912を空き領域とした「ノード0」に再構築する。
【0232】
イメージ1920では、ストレージシステム1は、イメージ1940をもとに、移動後の「DP」のセグメントに、新規のストライプを構成する「E1」のデータ1921(格納されているのは、既存のストライプを構成する「D1」のデータ)と「E2」のデータ1922との排他的論理和1923を計算して「EP」のパリティ1924を生成して格納する。また、ストレージシステム1は、イメージ1940をもとに、「EQ」のセグメントに、新規のストライプを構成する「E1」のデータ1921と「E2」のデータ1922との排他的論理和1925を計算して「EQ」のパリティ1926を生成する。
【0233】
イメージ1930では、ストレージシステム1は、イメージ1940をもとに、既存のストライプでデータの組合せが変更されるストライプ「D1-D2-DP-DQ」について、変更後のストライプを構成する「D1」のデータ1931と「D2」のデータ1932との排他的論理和1933を計算して変更後の「DP」のパリティ1934を生成する。また、ストレージシステム1は、変更後のストライプを構成する「D1」のデータ1931と「D2」のデータ1932との排他的論理和1935を計算して変更後の「DQ」のパリティ1936を生成する。
【0234】
イメージ1940では、データを移動することなく、パリティを計算してストライプが組み替えられたことが示される。
【0235】
なお、第1の実施の形態で
図12を用いて説明したように、ノード100間のデータ転送の最適化が行われてもよい。
【0236】
本実施の形態によれば、例えば、パリティが2つのデータ保護ポリシであっても、構成の変更前後で、既存のボリュームに性能影響を与えることなく、ノードの増設などを行うことができる。
【0237】
(3)第3の実施の形態
本実施の形態は、ネットワークの転送量を減らすために、データを符号化し、符号化したデータとライト要求のデータとでパリティを生成して格納する点が第1の実施の形態と主に異なる。本実施の形態では、第1の実施の形態と同じ点については、説明を適宜省略し、異なる点について主に説明する。以下では、データ保護ポリシがMEC(Multi-stage Erasure Coding)である場合を例に挙げて説明する。なお、MECについては、国際公開第2016/052665号に開示され、必要に応じて援用してもよい。
【0238】
図20は、MECの概要を示すイメージ図である。
図20では、符号化処理イメージ2010と、復号化処理イメージ2020とが示されている。
【0239】
符号化処理イメージ2010に示すように、例えば、ノード100-3では、ノード100-0で書き込まれた「A1」データ2011がノード100-0から転送される。また、ノード100-1で書き込まれた「A2」データ2012がノード100-1から転送される。また、ノード100-2で書き込まれた「B2」データ2013および「C1」データ2014を1次符号化(例えば、XOR演算)した「A3」データ2015がノード100-2から転送される。
【0240】
ノード100-3では、転送された「A1」データ2011と、「A2」データ2012と、「A3」データ2015とを用いて、2次符号化(例えば、XOR演算)して「AP」パリティ2016が生成され、2次符号化(例えば、ガロア演算)して「AQ」パリティ2017が生成される。なお、パリティの更新について、データが揃わない場合は、旧データとXORで計算した中間データが転送され、RMW(Read Modify Write)動作でパリティが更新される。また、データが揃うまでメモリ212、ドライブ213等にキャッシュしていてもよい。
【0241】
復号化処理イメージ2020に示すように、例えば、ノード100-0およびノード100-3に障害が発生した場合、ノード100-1およびノード100-2のデータおよびパリティからノード100-0の「A1」2011が復元される。
【0242】
より具体的には、ノード100-1では、格納している「B1」データ2021と「A2」データ2022とを復号化して「D3」データ2023を生成し、ノード100-2に転送する。ノード100-1では、「CP」パリティ2024と、「CQ」パリティ2025と、ノード100-2から転送される「C1」データ2026とを用いて「C3」データ2027を生成し、ノード100-0に転送する。
【0243】
また、ノード100-2では、「DP」パリティ2028と「DQ」パリティ2029とノード100-1から転送された「D3」データ2023とを用いて「D2」データ2030を生成し、ノード100-0に転送する。
【0244】
また、ノード100-0では、転送された「C3」データ2023と、「D2」データ2030とを用いて「A1」データ2011を復元する。
【0245】
付言するならば、mDnPのデータ保護ポリシにおいて、ECでは、m×nのデータの転送が必要であるが、MECでは、一次符号化することで、m+n-1のデータの転送とすることができ、転送量を削減することができる。
【0246】
図21は、マッピング変更の特徴的構成(フレーム内動作の概要)を示すイメージ図である。
【0247】
データ保護ポリシがMECである場合は、ECである場合と、マッピング変更の主な処理は、基本的には同じである。
<処理A>
既存のノード100の一部のパリティを増設されたノード100に再構築(移動または再計算)する。
<処理B>
新規のストライプのパリティを生成する。
<処理C>
既存のストライプでデータの組合せが変わるストライプについてパリティを生成する。
【0248】
本例では、処理Aについてはイメージ2110として示し、処理Bについてはイメージ2120として示し、処理Cについてはイメージ2130および2140として示し、マッピング変更後についてもイメージ2140として示す。本例において、「A1-A2-A3-AP-AQ」、「B1-B2-B3-BP-BQ」、「C1-C2-C3-CP-CQ」、「D1-D2-D3-DP-DQ」は、既存のストライプを示し、「E1-E2-E3-EP-EQ」は、新規のストライプを示す。
【0249】
本例では、イメージ2140に示すストライプでマッピング情報が生成されたとする。付言するならば、データ保護ポリシがMEC(2D2P)であるので、マッピング情報については、各ノード100においてデータ:パリティ=2:2と配置されるように生成されるのが好適である。なお、「A3」のデータは、ノード100上には存在しない仮想的なデータであり、アクセスする際は、「A1」のデータと「D2」のデータとを読み出して、XORにより算出される。なお、「B3」、「C3」、「D3」、「E3」についても同様である。
【0250】
イメージ2110では、ストレージシステム1は、イメージ2140をもとに、既存の「ノード0」の「BP」および「BQ」のパリティ2111を増設された「ノード4」に再構築する。また、ストレージシステム1は、「ノード1」には、「EP」および「EQ」のパリティを格納する領域が必要であるため、「ノード1」の「CP」および「CQ」のパリティ2112を空き領域とした「ノード0」に再構築する。
【0251】
イメージ2120では、ストレージシステム1は、イメージ2140をもとに、移動前の「CP」および「CQ」のセグメントに、新規のストライプを構成する「E1」のデータ2121(なお、格納されているのは、既存のストライプを構成する「D1」のデータである。)と「E2」のデータ2122と「E3」のデータ2123(なお、「A1」のデータと「D2」のデータとの1次符号化により求められる。)とを用いて2次符号化2124して「EP」および「EQ」のパリティ2125を生成して格納する。
【0252】
イメージ2130では、ストレージシステム1は、イメージ2140をもとに、既存のストライプでデータの組合せが変更されるストライプ「D1-D2-D3-DP-DQ」について、変更後のストライプを構成する「D1」のデータ2131と「D2」のデータ2132と「D3」のデータ2133(なお、「B1」のデータと「A2」のデータとの1次符号化により求められる。)とを用いて2次符号化2134して変更後の「DP」および「DQ」のパリティ2135を生成する。
【0253】
イメージ2140では、ストレージシステム1は、イメージ2140をもとに、既存のストライプでデータの組合せが変更されるストライプ「C1-C2-C3-CP-CQ」について、変更後のストライプを構成する「C1」のデータ2141と「C2」のデータ2142と「C3」のデータ2143(なお、「D1」のデータと「E2」のデータとの1次符号化により求められる。)とを用いて2次符号化2144して変更後の「CP」および「CQ」のパリティ2145を生成する。
【0254】
また、イメージ2140では、データを移動することなく、パリティを計算してストライプが組み替えられたことが示される。
【0255】
本実施の形態によれば、例えば、データ保護ポリシがMECであっても、構成の変更前後で、既存のボリュームに性能影響を与えることなく、ノードの増設などを行うことができる。
【0256】
(4)第4の実施の形態
本実施の形態は、ノード100が減設される点について説明する。本実施の形態では、第1の実施の形態と同じ点については、説明を適宜省略し、異なる点について主に説明する。以下では、データ保護ポリシが2D1Pである場合を例に挙げて説明する。
【0257】
図22は、マッピング変更の特徴的構成(フレーム内動作の概要)を示すイメージ図である。
【0258】
ノードの減設である場合、マッピング変更の主な処理は、下記のようになる。
<処理A>
減設するノード100のデータを、事前に別のノード100に移動する。
<処理B>
既存のストライプでデータの組合せが変わるストライプについてパリティを生成する。
<処理C>
減設されるノード300のパリティについてパリティを再構築する。
【0259】
本例では、処理Aについてはイメージ2210として示し、処理Bについてはイメージ2220として示し、処理Cについてはイメージ2230として示し、マッピング変更後についてもイメージ2230として示す。本例において、「A1-A2-AP」、「B1-B2-BP」、「C1-C2-CP」、「D1-D2-DP」は、既存のストライプを示し、「D1-D2-DP」は、減設のストライプを示す。
【0260】
イメージ2210では、ストレージシステム1は、イメージ2230をもとに、ホストノード300(アプリケーションプログラム側)で、減設するノード100-3の「C1」のデータ2211および「D1」のデータ2212の移動を実行し、「C1」のデータ2211および「D1」のデータ2212を不要データ化(例えば、0クリア)する。
【0261】
イメージ2220では、ストレージシステム1は、イメージ2230をもとに、既存のストライプでデータの組合せが変更されるストライプ「C1-C2-CP」について、変更後のストライプを構成する「C1」のデータ2221と「C2」のデータ2222との排他的論理和2223を計算して変更後の「CP」のパリティ2224を生成する。
【0262】
イメージ2230では、ストレージシステム1は、イメージ2230をもとに、減設のストライプのパリティを格納している「DP」に、減設される「ノード3」の「BP」を含むストライプ「B1-B2-BP」について、当該ストライプを構成する「B1」のデータ2231と「B2」のデータ2232との排他的論理和2233を計算して、「BP」のパリティ2234を生成する。なお、生成ではなく、移動により、「BP」のパリティ2234を再構築してもよい。なお、減設されるノード100のパリティについては、不要データ化(例えば、0クリア)されてもよい。
【0263】
本実施の形態によれば、例えば、構成の変更前後で、既存のボリュームに性能影響を与えることなく、ノードの減設を行うことができる。
【0264】
(5)第5の実施の形態
本実施の形態は、ノード100の増設の際、既存のチャンクグループ302を適用するのではなく、新規のチャンクグループ302を追加する点が第1の実施の形態と主に異なる。本実施の形態では、第1の実施の形態と同じ点については、説明を適宜省略し、異なる点について主に説明する。
【0265】
図23は、マッピング変更の概要を示すイメージ図である。ここでは、チャンクマッピング管理情報2310およびチャンクマッピング管理情報2320に示すように、「N3」のノード100(ノード100-3)が増設されるケースを例に挙げて説明する。
【0266】
チャンクマッピング管理情報2320に示すように、新たなチャンクグループ302として「G3」が追加されている。
【0267】
本ストレージシステム1では、ノード100内のオフセットは、上位オフセットから使用されていくので、未使用の最下位オフセットを使用してマッピング変更を行う。未使用のオフセットのマッピングを切り換えた後、上位オフセットのフレーム内の同位置の物理チャンク301の領域からデータをコピーする。コピーした契機でパリティを計算して構築する。このデータの移動は、ノード100内のデータの移動となるので、データローカリティは消失しない。
【0268】
例えば、「G0」のチャンクグループ302を構成する移動元チャンクのデータ2331を移動先チャンクにコピーする際、データ2331は、「G0」のチャンクグループ302を構成する他のノード100(ノード100-1、ノード100-2)に転送される。データ2331を受け取ったノード100-1は、転送されたデータ2331と旧パリティ2332とを用いて新パリティ2333を計算して格納する。また、データ2331を受け取ったノード100-2は、転送されたデータ2331と旧パリティ2334とを用いて新パリティ2335を計算して格納する。
【0269】
なお、上述したデータの移動では、ストレージプール305は、データの移動の前後でデータが移動したことを意識しない。
【0270】
図24は、マッピング変更処理に係るフローチャートの一例を示す図である。
【0271】
ステップS2401では、増減設管理処理部421は、現行のフレームを移動元のフレームに設定し、次オフセットのフレームを移動先のフレームに設定する。
【0272】
ステップS2402では、増減設管理処理部421は、移動元のフレームから移動元のチャンクを設定する。
【0273】
ステップS2403では、増減設管理処理部421は、移動先のフレームにおいて移動元の物理チャンク301(移動元チャンク)とフレーム内の相対位置が同一の物理チャンク301を移動先の物理チャンク301(移動先チャンク)に設定する。
【0274】
ステップS2404では、増減設管理処理部421は、移動元チャンクから移動先チャンクへパリティを移動する要求(移動要求)を移動元チャンクを有するノード100に送信する。
【0275】
ステップS2405では、移動要求を受信したノード100のマッピング変更処理部433は、マッピング変更進捗情報724を初期化する。
【0276】
ステップS2406では、マッピング変更処理部433は、排他取得を行う。
【0277】
ステップS2407では、マッピング変更処理部433は、移動元チャンクのデータを読み出す。
【0278】
ステップS2408では、マッピング変更処理部433は、移動先チャンクにデータを書き込む。なお、マッピング変更処理部433は、ホストノード300のライト処理と同様に、
図14に示すライト処理を行う。なお、このとき、ライト処理部432は、マッピング変更中、かつ、書き込み先が変更済みの属性でデータを書き込む。
【0279】
ステップS2409では、マッピング変更処理部433は、物理チャンク301内の全領域に対して処理が完了したか否かを判定する。マッピング変更処理部433は、完了したと判定した場合、ステップS2412の処理が行われ、完了していないと判定した場合、ステップS2410に処理を移す。
【0280】
ステップS2410では、マッピング変更処理部433は、マッピング変更進捗情報724を更新する。
【0281】
ステップS2411では、マッピング変更処理部433は、排他解放を行い、ステップS2406に処理を移す。
【0282】
ステップS2412では、増減設管理処理部421は、応答完了を受信する。
【0283】
ステップS2413では、増減設管理処理部421は、フレーム内の全物理チャンク301に対して処理が完了したか否かを判定する。増減設管理処理部421は、完了したと判定した場合、現行フレームを前オフセットのフレームに設定し、全てのオフセットについてS2401~S2414の処理を繰り返す。また、増減設管理処理部421は、完了していないと判定した場合、ステップS2414に処理を移す。
【0284】
ステップS2414では、増減設管理処理部421は、次の移動元チャンクを設定し、ステップS2403に処理を移す。
【0285】
本実施の形態によれば、例えば、チャンクグループを追加する場合でも、構成の変更前後で、既存のボリュームに性能影響を与えることなく、ノードの増設などを行うことができる。
【0286】
(6)他の実施の形態
なお上述の実施の形態においては、本発明をストレージシステムに適用するようにした場合について述べたが、本発明はこれに限らず、この他種々のシステム、装置、方法、プログラムに広く適用することができる。
【0287】
また、上述の実施の形態において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部または一部が1つのテーブルであってもよい。
【0288】
また、上述の実施の形態において、説明の便宜上、XXテーブルを用いて各種のデータを説明したが、データ構造は限定されるものではなく、XX情報などと表現してもよい。
【0289】
また、上記の説明において、各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記憶装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【0290】
また、本発明は、以下に示す特徴的構成を有してもよい。
【0291】
例えば、複数のノード(例えば、ノード100)を含んで構成されるストレージシステム(例えば、ストレージシステム1)であって、上記ノードは、データのライト及びリード要求のターゲットとなっており、異なるノードに格納される複数のデータ及びこの複数のデータに基づいて生成されたパリティによりストライプを形成し、上記ライト要求のデータが属する上記ストライプのパリティを、上記複数のデータを格納する複数のノードとは異なるノードに格納して冗長化(mDnPのEC、mDnPのMECなど)を行い、管理部(例えば、管理プログラム101)は、ノード構成が変更(ノード100の増減設、サイト210の増減設など)された場合に、上記パリティのノード間移動及び上記ストライプの再構成を行う配置変更要求(例えば、マッピング変更要求)を上記ノードに送信することを特徴とする。
【0292】
上述の構成によれば、例えば、構成の変更に応じて組み替えられたストライプのパリティを計算することで構成の変更を行うことが可能となる。
【0293】
また、例えば、上記ノードは、受信したライト要求にかかるデータを自ノードのボリュームに格納することを特徴とする。
【0294】
また、例えば、上記配置変更要求は、上記データをノード間で移動させないことを特徴とする。
【0295】
上述の構成によれば、例えば、データを他のノードに移動することなく構成の変更に応じて組み替えられたストライプのパリティを計算することで構成の変更を行うことが可能となる。
【0296】
また、例えば、上記ノードは、受信したライト要求にかかるデータと、複数の他のノードが格納しているデータとストライプを形成しているパリティとを格納しており、上記構成の変更は、ノードを増設する変更であり、上記配置変更要求により、上記増設したノード内に、いずれかのノードに格納されたパリティを移動させるとともに、上記増設したノード内のデータと既存のノードに格納されたデータ及びパリティによりストライプを形成することを特徴とする。
【0297】
上述の構成によれば、例えば、各ノードでパリティを持ち合うことができる。
【0298】
また、例えば、上記パリティを移動させるストライプ(例えば、B1-B2-BP)と、新たに形成するストライプ(例えば、D1-D2-DP)とは、別のストライプであることを特徴とする。
【0299】
また、例えば、上記ストライプの再構成は、増設されたノード内のデータを所定のデータ(なお、上述の実施の形態では、データが全て「0」である場合を例示したが、全て「1」であってもよい。)として、上記ストライプに加えてパリティを計算する、ことを特徴とする。
【0300】
上述の構成によれば、例えば、増設されたノード内のデータを転送する必要がないので、ノード間のデータの転送量を削減することができる。
【0301】
また、例えば、上記増設したノードに移動させたパリティを格納していたノードに、新たに形成した上記ストライプのパリティを格納することを特徴とする。
【0302】
また、例えば、複数のノードの物理領域(例えば、物理チャンク301)を含んで冗長化グループ(例えば、チャンクグループ302)が構築され、構築された冗長化グループから論理的に切り出された論理領域(例えば、論理チャンク303)がストレージプール(例えば、ストレージプール305)として割り当てられ、上記管理部は、上記ストレージプールに割り当てられている論理領域に紐づく物理領域が処理対象である場合、上記配置変更要求を送信する(例えば、ステップS1607、ステップS1608参照。)ことを特徴とする。
【0303】
上述の構成によれば、例えば、ストレージプールに割り当てられていない物理チャンクを処理対象から外すことで、マッピング変更時のノード間のデータの転送コストを削減できる。
【0304】
また、例えば、上記管理部は、一または複数の冗長化グループを処理単位(例えば、フレーム)として上記要求を送信することを特徴とする。
【0305】
上述の構成によれば、例えば、一または複数の冗長化グループをフレーム単位としてまとめて処理できるようになるので、管理部とノードとにおける通信コストを削減できる。
【0306】
また、例えば、上記管理部は、データの保護ポリシがmDnPとして設定されている場合、各ノードに配置するデータの個数がm、パリティの個数がnの比率となるように配置情報(チャンクグループマッピング情報、マッピング情報など)を生成することを特徴とする。
【0307】
上述の構成によれば、例えば、一のノードにパリティが偏って格納されることで、当該ノードの負荷が高くなってしまう事態を回避できるようになる。
【0308】
また、例えば、上記要求を受信したノードは、上記構成の変更前の配置情報と上記構成の変更後の配置情報とを比較し、パリティの配置が変更されている領域(例えば、物理チャンク301)に対してパリティが計算されるように上記配置変更要求を送信する(例えば、ステップS1704、ステップS1705参照。)ことを特徴とする。
【0309】
上述の構成によれば、例えば、パリティの計算が不要な物理領域を処理対象から外すことで、マッピング変更時のノード間のデータの転送コストを削減できる。
【0310】
また、例えば、上記管理部は、上記構成の変更がドライブ(例えば、ドライブ213)を変更するものである場合、ドライブが変更されたノードに対して、上記ドライブにデータとパリティとを移動する要求または上記ドライブからデータとパリティとを移動する要求を送信する(例えば、ステップS1602参照)ことを特徴とする。
【0311】
上述の構成によれば、例えば、ノード内のドライブ間でのデータおよびパリティの移動により(データごと移動することにより)、移動コストを削減することができる。
【0312】
また、例えば、ライト要求のデータを受けたノードは、上記データを自ノードに格納(例えば、2D1Pのデータ保護ポリシにおいて、
図11のイメージ1130に示すストライプが組まれている場合、ノード100-0がライト要求のデータを受信した場合、「A1」および「C2」にデータを格納)し、上記データと上記データの旧データとの差分を示す中間データを生成(例えば、「A1」のデータの中間データと、「C2」のデータの中間データを生成)し、配置情報に基づいて冗長化先のノードを特定(例えば、「A1」のパリティを格納するノード100-2と、「C2」のパリティを格納するノード100-1とを特定)し、特定したノードに上記中間データを送信し、上記中間データを受信したノードは、上記中間データと、上記旧データのパリティとから上記データのパリティを計算することを、1のパリティに対して複数のノードから受信した上記中間データを用いて行うことを特徴とする。
【0313】
上述の構成によれば、例えば、データローカリティを保持するECにおいて、データローカリティを消失することなく、構成の変更を行うことができるので、構成の変更によりストレージ性能が低下してしまう事態を回避できるようになる。
【0314】
また、例えば、上記管理部は、構成の変更に応じて、新たな冗長化グループを含めて配置情報を生成し、上記配置情報に従ってパリティを構築する要求を各ノードに送信することを特徴とする。
【0315】
上述の構成では、例えば、ノード内でデータは移動するが、構成の変更に応じて変更された冗長化グループ(ストライプ)のパリティを再計算することで、ノード間でデータを移動することなしに構成の変更を行うことができる。上述の構成によれば、データローカリティを消失しないので、構成の変更によりストレージ性能が低下してしまう事態を回避できるようになる。
【0316】
また、例えば、第1のノードに格納される複数のデータ(例えば、
図20に示すノード100-2の「B2」データ2013および「C1」データ2014)より生成される一次符号(例えば、「A3」データ2015)と、上記第1のノードとは異なる第2のノードに格納されるデータ(例えば、ノード100-0の「A1」データ2011およびノード100-1の「A2」データ2012)と、に基づいて生成される二次符号(例えば、「AP」パリティ2016および「AQ」パリティ2017)をパリティとして上記第1のノードおよび上記第2のノードとは異なる第3のノード(例えば、ノード100-3)に格納することで冗長化(例えば、MEC)が行われ、上記配置変更要求を受信した上記第1のノード(例えば、
図21に示すノード100-1)は、格納している複数のデータ(「B1」のデータおよび「A2」のデータ)から上記一次符号(例えば、「D3」のデータ2133)を計算し、配置情報より上記一次符号を用いた冗長化に係るパリティ(例えば、「DP」および「DQ」のパリティ2135)を格納するノード(例えば、ノード100-2)を特定して上記一次符号を送信することを特徴とする。
【0317】
上述の構成によれば、例えば、データローカリティを保持するMECにおいて、データローカリティを消失することなく、構成の変更を行うことができるので、構成の変更によりストレージ性能が低下してしまう事態を回避できるようになる。
【0318】
また、本発明は、例えば、SDSシステムにおけるノード、デバイスの増減設に有用である。例えば、安価なネットワーク機器を用いて高性能なSDSシステムを柔軟に構築、運用できるようになるため、本発明の有用性は高い。
【0319】
また上述した構成については、本発明の要旨を超えない範囲において、適宜に、変更したり、組み替えたり、組み合わせたり、省略したりしてもよい。
【符号の説明】
【0320】
1……ストレージシステム、100……ノード、101……管理プログラム、102……ストレージ制御プログラム。