<システム構成>
図1は、本発明の実施例1を示し、ストレージシステムの一例を示すブロック図である。本実施例1では、性能の異なるストレージデバイスを用いて、ボリュームの種別毎に優先度制御を行うストレージシステムに本発明を適用した例を示す。
性能が異なるストレージデバイスを有するストレージノード103−1〜103−nと、多数のストレージノード103−1〜103−nを管理する管理ノード104と、ストレージノード103−1〜103−nの記憶領域を利用するホスト101−1〜101−mは、ネットワーク102を介して接続される。
なお、以下の説明ではストレージノードの個々について特定しない場合には「−」以降を省略した符号103を用いる。他の構成要素の符号についても同様である。
管理ノード104は、ローカルプールを有する多数のストレージノード103と、ストレージノード103をまたがったグローバルプールを管理する。管理ノード104は、ホスト101に対して性能の異なるボリュームを提供する。
ローカルプールはストレージノード103が内部的に管理するとはストレージプールのことで、性能特性に応じた複数のTierから構成される。また、グローバルプールとはノードをまたがったストレージデバイスのストレージプールであり、ローカルプールに対してストレージデバイスの物理容量を割当てる制御を行う。管理ノード104は、ローカルプールの各Tierに対するグローバルプールのリソース(チャンク)の割り当てを制御する。ストレージノード103を利用するホスト101のユーザは、ストレージノード103の物理的な構成を意識することなくボリュームを使用することができる。
<ストレージノード>
図2は、ストレージノード103の一例を示すブロック図である。ストレージノード103は、CPU11と、メモリ12と、ネットワークインタフェース(図中NIC)13と、ストレージデバイスとしての1以上のドライブ20−Sと、ストレージデバイスとしての1以上のドライブ20−Hを含んで、ホスト101にボリュームを提供する計算機である。
ドライブ20−Sは、ドライブ20−Hに比して性能の高い高性能なストレージデバイスで、例えば、SSD(Solid State Drive)等の不揮発性半導体メモリで構成される。なお、ドライブ20−Sの性能は、例えば、IOPSがドライブ20−Hに比して高い、またはシーケンシャル読み出し速度がドライブ20−Hに比して高速なドライブである。
一方、ドライブ20−Hは、ドライブ20−Sに比して性能は低いが、ビット当たりの価格が安くコストパフォーマンスの高いストレージデバイスで、例えば、HDD(Hard Disk Drive)で構成される。
ネットワークインタフェース13は、ネットワーク102に接続されてホスト101や管理ノード104や他のストレージノード103と通信を行う。
メモリ12には、ローカルプール階層管理31と、ローカルボリューム管理32と、ローカルページ制御33と、ローカルモニタ34と、ボリュームI/O制御35と、ドライブ管理37の各機能部がプログラムとしてロードされてCPU11によって実行される。
CPU11は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、CPU11は、ローカルプール階層管理プログラムに従って処理することでローカルプール階層管理31として機能する。他のプログラムについても同様である。さらに、CPU11は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
ストレージノード103の各機能を実現するプログラム、テーブル等の情報は、ストレージデバイスや不揮発性半導体メモリ、ハードディスクドライブ、SSD等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
ローカルプール階層管理31は、ストレージノード103が有するローカルプールの階層(Tier)ごとに構成を管理する機能部で、ローカルTier制御テーブル41に基づいて、各階層に割り当てるチャンクを管理する。なお、プールと階層(Tier)については後述する。
ローカルプール階層管理31は、所定の周期でローカルプール26の状態を取得してローカルTier制御テーブル41を更新する。また、ローカルプール階層管理31は、ローカルTier27の使用率(例えば、割り当てページ容量414/合計チャンク容量413)が所定の閾値Th4(例えば、90%)以上であれば、管理ノード104にチャンクの容量不足を通知する。ローカルTier27の使用率の監視は、ローカルTier27−1〜27−3のそれぞれについて実施され、容量不足の通知にはストレージノード103の種別が含まれる。
ローカルボリューム管理32は、ローカルボリューム管理テーブル42を参照して、ストレージノード103がホスト101に提供するボリュームを管理する機能部である。ローカルページ制御33は、ボリュームページ制御テーブル43と、物理ページ制御テーブル44を参照して、ボリュームを構成する論理ページ(ストレージノード103内のローカルプールのデータ管理の単位)と、チャンク(ノードをまたがったグローバルプールのデータ管理単位)上の物理ページの対応関係を管理する機能部である。
ローカルモニタ34は、ストレージノード103が有するリソースの監視を行って統計情報を収集する機能部である。ローカルモニタ34は、管理ノード104のグローバルモニタ65からの要求に応じて、統計情報をグローバルモニタ65へ送信する。本実施例1では、ローカルモニタ34が収集する統計情報として、ボリューム200の性能を示す統計情報としてIO数(IOPSまたはIOPH)を用いる例を示すが、これらに限定されるものではない。例えば、ボリューム200が読み書きする速度(MB/Sec)等の性能を示す統計情報として用いることができる。
ボリュームI/O制御35は、ストレージノード103がホスト101に提供するボリュームに対する読み書き等の指令を処理する機能部である。ドライブI/O制御36は、ストレージノード103内のドライブ20−S、20−Hに対する読み書き等の指令を処理する機能部である。
なお、メモリ12に読み込まれて、上記各機能部が利用するテーブルについては後述する。
<管理ノード>
図3は、管理ノード104の一例を示すブロック図である。管理ノード104は、CPU51と、メモリ52と、ネットワークインタフェース(図中NIC)53と、ストレージデバイスとしてのドライブ54と、入力装置55と、ディスプレイ56を含んで、ストレージノード103を管理する計算機である。管理ノード104は、独立したノードではなくストレージノードの一機能として存在してもよいし、ストレージシステム外からストレージシステムを管理するようにしてもよい。
ネットワークインタフェース53は、ネットワーク102に接続されてホスト101やストレージノード103と通信を行う。入力装置55は、キーボードやマウスやタッチパネルを含んで、利用者(あるいは管理者)の操作を受け付ける。ディスプレイ56には、管理インタフェースの画面などが表示される。
メモリ52には、グローバルノード管理61と、グローバルプール階層制御62と、グローバルボリューム管理63と、グローバルチャンク管理64と、グローバルモニタ65と、ボリューム優先度管理66と、GUI/CLI67と、REST I/F68と、ユーザ通知制御69の各機能部がプログラムとしてロードされてCPU51によって実行される。
CPU51は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、CPU51は、グローバルノード管理プログラムに従って処理することでグローバルノード管理61として機能する。他のプログラムについても同様である。さらに、CPU51は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
管理ノード104の各機能を実現するプログラム、テーブル等の情報は、ストレージデバイス(ドライブ54)や不揮発性半導体メモリ、ハードディスクドライブ、SSD等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
グローバルノード管理61は、グローバルノードテーブル71を参照してストレージノード103を管理する。グローバルプール階層制御62は、グローバルTier管理テーブル72を参照して、ローカルプールに割り当てるチャンクのTierを管理する機能部である。
グローバルボリューム管理63は、グローバルプールで生成したホストボリュームをグローバルボリュームテーブル73で管理する機能部である。グローバルチャンク管理64は、グローバルチャンク制御テーブル74に基づいてグローバルプールのチャンク(グローバルプール内のデータ管理単位)を管理する機能部である。
グローバルモニタ65は、ストレージノード103のローカルモニタ34の情報をモニタ情報収集テーブル75へ格納し、グローバルIO度数分布テーブル76やグローバル使用容量テーブル77を更新する機能部である。
ボリューム優先度管理66は、優先度管理テーブル78を参照して、各ストレージノード103が提供するボリュームの種別毎に優先度を管理する機能部である。GUI/CLI67は、管理インタフェースをGUI(Graphical user interface)やCLI(Command line interface)を提供する機能部である。
REST I/F68は、REST形式でホスト101やストレージノード103等と通信する機能部である。ユーザ通知制御69は、容量の不足や障害の発生など所定の状態となったときにディスプレイ56等に通知を出力する機能部である。
なお、メモリ52に読み込まれて、上記各機能部が利用するテーブルについては後述する。また、ドライブ20はRAID構成であっても良い。
<プールの構成>
図4は、グローバルプールとローカルプールの関係を示すブロック図である。本実施例では、性能が異なるドライブ20を有する3つのストレージノード103−1〜103−3に跨がるストレージプールがグローバルプールとして設定され、ストレージノード103−1〜103−3は性能(または種別)が異なるノードとして運用される例を示す。
図示の例では、ストレージノード103−1が、高性能なボリューム(図中、高性能VOL)200−1を複数提供する高性能ノードとして機能する。ストレージノード103−2は、高性能なボリューム200−1と標準的な性能のボリューム(図中、標準VOL)200−2を提供する標準ノードとして機能する。そして、ストレージノード103−3は、ビット当たりの価格が安い高コストパフォーマンスボリューム(図中、高cost performanceVOL)200−3を提供する高コストパフォーマンスノードとして機能する。
なお、本実施例では、ストレージノード103の種別を、高性能と標準及び高コストパフォーマンスの3つに分ける例を示すが、これに限定されるものではなく、複数の性能の種別があれば良い。なお、ストレージノード103の種別は、管理者の指令に応じて管理ノード104で決定する。
また、本実施例1では、複数のストレージノード103にチャンク21を提供する高性能なドライブ20−Sと高コストパフォーマンスのドライブ20−Hによって、ボリューム200の優先度制御が行われる。
高性能ノード(ストレージノード103−1)は、高性能なボリューム200−1を割り当てる優先度が高く、高性能なボリューム200−1は、高性能なチャンク21−Sを割り当てる優先度が高い。標準ノード(ストレージノード103−2)は、高性能なボリューム200−1を割り当てる優先度は高性能ノードに比して低い。また、標準のボリューム200−2は、高性能なチャンク21−Sを割り当てる優先度が低く設定される。
高性能ノードのストレージノード103−1には、ストレージデバイスとしてSSD等の高性能なドライブ20−Sを搭載する。標準ノードのストレージノード103−2には、ストレージデバイスとしてSSDのドライブ20−Sと、HDDのドライブ20−Hを搭載する。高コストパフォーマンスノードのストレージノード103−3には、ストレージデバイスとしてHDDのドライブ20−Hを搭載する。本実施例では、ドライブの性能を二つにしたが、SSD内やHDD内で性能を細かく分けてもよい。また、ボリュームから見て自ノード内か他ノード内かによって、性能を区別してもよい。
なお、高性能ノードのストレージノード103−1は、標準ノードのストレージノード103−2に比して高性能なCPU11と、大容量のメモリ12を搭載するようにしてもよい。また、高コストパフォーマンスノードのストレージノード103−3は、標準ノードに比して廉価なCPU11と、最低限のメモリ12を搭載するようにしてもよい。
管理ノード104は、ホスト101へストレージ領域を提供するストレージノード103−1〜103−3に搭載されたドライブ20をグローバルプール24に割り当てる。そして、グローバルプール24には、高性能なドライブ20−Sで構成されるグローバルTier1(25−1)と、ビット当たりの価格が安いドライブ20−Hで構成されるグローバルTier2(25−2)の2つの階層(グループ)が設定される。
管理ノード104は、グローバルプール24に割り当てたドライブ20の記憶領域を所定のサイズ(例えば、100GB)のチャンク単位で管理する。すなわち、管理ノード104は、グローバルTier1(25−1)に割り当てられたドライブ20−Sの記憶領域をチャンク21−Sの単位で管理し、同様に、グローバルTier2(25−2)に割り当てられたドライブ20−Hの記憶領域を、チャンク21−Hの単位で管理する。
管理ノード104は、ストレージノード103−1〜103−3にそれぞれローカルプール26−1〜26−3を設定し、ストレージノード103の種別に応じてグローバルプール24のグローバルTier1(25−1)とグローバルTier2(25−2)から、チャンク21−Sまたはチャンク21−Hを、ローカルプール26−1〜103−3にそれぞれ割り当てる。
各ストレージノード103は、ローカルプール26に割り当てられたチャンク21を所定の容量(例えば、42MB)の物理ページとして管理する。ストレージノード103は、ボリューム200の論理ブロックアドレス(LBA)を所定の容量(例えば、42MB)ごとの論理ページに分割してボリューム200を管理する。
各ストレージノード103は、割り当てられたチャンク21の性能差(種別)に応じて、ローカルプール26をローカルTier1(27−1)と、ローカルTier2(27−2)と、ローカルTier3(27−3)に区分けして管理する。
ローカルTier1〜3の構成はチャンク21−Sに対応するドライブ20の種別ごとに決定される。
ローカルTier1(27−1)は、同一のストレージノード103内の高性能なドライブ20−Sのチャンク21−Sに割当てられたページ(ローカルSSDページ)で構成される。ローカルTier2(27−2)は、高性能なドライブ20−Sではあるが他のストレージノード103のチャンク21−Sに割当てられたページ(リモートSSDページ)で構成される。
ローカルTier3(27−3)は、ビット当たりの価格が安いドライブ20−Hのチャンク21−Hのページ(HDDページ)から構成される。なお、ローカルTier3(27−3)のHDDページは、自他のノードを問わずHDDのチャンク21−Hから構成されたページであれば良い。
各ストレージノード103は、論理ページへの初回の書き込み時には、ローカルプール26の物理ページに割り当てる論理ページと物理ページの対応関係をボリュームページ制御テーブル43に設定して、以降のデータの読み書きに使用する。
ローカルプール26へのチャンク21の割り当ては、ストレージノード103の容量が不足したときなど所定のタイミングで実行される。例えば、管理ノード104は、高性能ノードでローカルTier1(27−1)の割り当て済みページの容量の割合が、ローカルTier1(27−1)の全体容量の80%を超えたら、グローバルTier1(25−1)から新しいチャンク21−Sを割り当てる。
高性能ノードのストレージノード103−1では、ローカルTier1(27−1)の論理ページから高性能ボリューム200−1を生成して、ホスト101に提供する。標準ノードのストレージノード103−2では、ローカルTier1(27−1)の論理ページから生成した高性能ボリューム200−1と、ローカルTier2(27−2)の論理ページから生成した標準ボリューム200−2をホスト101に提供する。
高コストパフォーマンスノードのストレージノード103−3では、ローカルTier3(27−3)の論理ページから高コストパフォーマンスボリューム200−3を生成して、ホスト101に提供する。
ストレージノード103は、ボリューム200を構成する論理ページのアクセス頻度に応じて、論理ページに割り当てる物理ページのローカルTier1〜3をリバランス(データコピー)する。
なお、グローバルプール24とローカルプール26の構成は上記の例に限定されるものではない。例えば、ストレージノード103にローカルプールを設定せず、グローバルプール24からボリューム200を生成するようにしても良い。この場合、グローバルプール24の記憶領域の管理単位はチャンクではなく、ページでストレージノード103へ提供すればよい。
また、ページの容量(サイズ)や、チャンクの容量は上述の例に限定されるものではなく、所望のサイズに設定してもよく、あるいは可変長としてもよい。また、本実施例1ではグローバルプール24のチャンク21を直接ストレージノード103に割り当てる構成を示しているが、これに限定されるものではない。例えば、冗長化(レプリケーションや消失訂正符号)した2つ以上のチャンクを一つのチャンクとしてストレージノードに割り当てる構成を用いてもよい。
<テーブルの構成>
図5は、優先度管理テーブル78の一例を示す図である。優先度管理テーブル78は、管理ノード104のボリューム優先度管理66で使用される。
優先度管理テーブル78は、ボリューム種別781と、優先度782と、優先オーナノード種別783と、使用可能オーナノード種別784と、使用可能グローバルTier785と、許容SSDミス率786をひとつのエントリに含む。
Volume種別781には、「高性能」、「標準」、「高コストパフォーマンス」のいずれかが予め設定される。「高性能」は、性能重視で高性能なドライブ20−Sを優先的に割り当てる高性能ボリューム200−1を示す。
「高性能」は、性能重視で高性能なドライブ20−Sを優先的に割り当てる高性能なボリューム200−1を示す。「標準」は、高性能なドライブ20−Sのページが余っていたら使用し、余っていなければビット当たりの価格が安いドライブ20−Hのページを利用する標準的な性能のボリューム200−2を示す。「高コストパフォーマンス」は、常にビット当たりの価格が安いドライブ20−Hのページを利用する高コストパフォーマンスボリューム200−3を示す。
なお、標準的な性能のボリューム200−2は、ローカルプール26においてローカルTier1のページが余っていればローカルTier1のローカルSSDのページを利用し、ローカルTier1のページに余りはなく、ローカルTier2のページが余っていればローカルTier2のリモートSSDのページを利用し、ローカルTier2にも余りが無ければローカルTier3のHDDのページを利用する。
優先度782には、高性能なドライブ20−Sを優先的に割り当てる順序が格納され、値の小さい方が優先度は高い。
優先オーナノード種別783には、当該エントリのVolume種別781のボリューム200をデフォルトで割り当てるストレージノード103の種別が格納される。ストレージノード103の種別は、ボリューム種別781と同様に、「高性能」、「標準」、「高コストパフォーマンス」の3種のいずれかが設定される。
使用可能オーナノード種別784には、優先オーナノード種別783で指定された種別のストレージノード103が使用できない場合に使用可能なストレージノード103の種別が格納される。例えば、ローカルSSDページが不足して高性能ボリューム200−1を生成できないときは、指定された種別のノードに代わって使用可能オーナノード種別784の種別を代用する。
使用可能グローバルTier785には、当該エントリのボリューム種別781に割り当てるチャンク21を提供可能なグローバルプール24の区分(グローバルTier)が格納される。
許容SSDミス率786には、ボリューム種別781ごとに許容するSSDのミス率が予め設定される。SSDのミス率は、ホスト101がボリューム200に対して読み書きした際に、高性能なドライブ20−Sのページにアクセスできなかった比率(後述のSSDミス率)を示し、当該比率が許容SSDミス率786の値を上回った場合には、管理ノード104が、利用者(または管理者)に通知をする。本実施例1ではシステムの固有値を使用するが、利用者(または管理者)がGUI/CLI67やREST I/F68によって設定してもよい。
図6は、グローバルノードテーブル71の構成の一例を示す図である。グローバルノードテーブル71はグローバルノード管理61が参照するストレージノード103の管理テーブルである。
グローバルノードテーブル71は、ノードID711と、ノード種別712と、CPU容量713と、メモリ容量714と、ドライブID715と、ドライブ種別716と、チャンク容量717と、割り当て済みチャンク容量718をひとつのエントリに含む。
ノードID711には、管理対象のストレージノード103の識別子が格納される。識別子はグローバルプール24内で一意の値である。ノード種別712には、ストレージノード103の種別が設定され、本実施例では、「高性能」、「標準」、「高コストパフォーマンス」のいずれかが設定される。
CPU容量713には、ストレージノード103内のCPU11の処理能力に相当する値、例えば、周波数×CPUコア数が格納される。メモリ容量714には、ストレージノード103に搭載されたメモリ12の容量が格納される。
ドライブID715には、ストレージノード103に搭載された物理的なドライブ20の識別子が格納される。ドライブID715にはグローバルプール内で一意の値が設定される。
ドライブ種別716には、ドライブ20の種別が格納される。本実施例では種別としてSSDとHDDのいずれかが設定される。チャンク容量717には、ドライブ20ごとのチャンクの総容量が格納される。割り当て済みチャンク容量718には、ドライブ20毎にローカルプール26へ割り当て済みのチャンク容量が格納される。
図7は、グローバルボリュームテーブル73の構成の一例を示す図である。グローバルボリュームテーブル73は、管理ノード104のグローバルボリューム管理63が使用するローカルプールの全ボリュームの管理テーブルである。
グローバルボリュームテーブル73は、ボリュームID731と、ボリューム種別732と、オーナノード733と、サイズ734と、割り当て済みページ容量735と、使用可能グローバルTier736をひとつのエントリに含む。
ボリュームID731には、ボリューム200の識別子が格納される。識別子はグローバルプール24内で一意の値である。ボリューム種別732には、ボリューム200の種別が設定され、本実施例1では、「高性能」、「標準」、「高コストパフォーマンス」のいずれかが設定される。
オーナノード733には、当該ボリューム200を生成するストレージノード103の識別子が格納される。サイズ734には、当該ボリュームの論理サイズが格納される。シンプロビジョニングボリュームの場合には、実際に使用する物理的な記憶容量よりも大きな値が設定される。
割当済ページ容量735には、物理的な記憶容量が割り当てられた論理ページの容量が格納される。使用可能グローバルTier736には、当該ボリュームで使用可能なグローバルTier25の値が格納される。グローバルTier25の値は、複数の値を設定することが可能である。グローバルTier25の値は、ボリューム種別732に応じて決定される。
図8は、グローバルチャンク制御テーブル74の構成の一例を示す図である。グローバルチャンク制御テーブル74は、管理ノード104のグローバルチャンク管理64が使用するグローバルプール24の全てのチャンク21を管理する。
グローバルチャンク制御テーブル74は、物理チャンクID741と、搭載ノード742と、ドライブID743と、グローバルTier744と、チャンク容量745と、オフセット(LBA)746と、割り当てノードID747をひとつのエントリに含む。
物理チャンクID741には、管理対象の物理的なチャンク21の識別子が格納される。物理的なチャンク21の識別子は、グローバルプール24内で一意に識別可能な値が管理ノード104によって設定される。搭載ノード742には、管理対象の物理的なチャンク21を搭載するストレージノード103の識別子が格納される。
ドライブID743には、管理対象の物理的なチャンク21が格納されるドライブ20の識別子が設定される。グローバルTier744には、ドライブ20が所属するグローバルTier25の値が格納される。チャンク容量745には、物理的なチャンクの容量が格納される。本実施例1では、ひとつのチャンク21の容量を、100GBとした例を示す。
オフセット746には、ドライブ20内での物理的なチャンクの格納領域の先頭のLBA(Logical Block Address)が格納される。割り当てノードID747には、管理対象の物理的なチャンク21を割り当てたストレージノード103の識別子が格納される。なお、当該チャンク21が未割り当ての場合には「未」が設定される。
グローバルチャンク制御テーブル74によって、チャンク21の割り当て先のストレージノード103と、当該チャンク21を生成したストレージノード103とドライブ20及び開始位置が定義される。
図9は、グローバルTier管理テーブル72の構成の一例を示す図である。グローバルTier管理テーブル72は、管理ノード104のグローバルプール階層制御62が使用する。
グローバルTier#721には、管理対象のグローバルTier25の階層番号が格納される。ドライブ種別722には、当該グローバルTier2に含まれるドライブ20の種別が格納される。本実施例では、上述のようにSSDまたはHDDのいずれかが格納される。
合計チャンク容量723には、グローバルTier25内の合計チャンク容量が格納される。割り当て済みチャンク容量724には、ローカルプール26へ割り当て済みのチャンク容量が格納される。
図10は、ローカルボリューム管理テーブル42の構成の一例を示す図である。ローカルボリューム管理テーブル42は、ストレージノード103のローカルモニタ34及びローカルボリューム管理32がノード内のボリュームを管理するテーブルである。
ボリュームID421には、管理対象のボリュームの識別子が格納される。識別子は、グローバルプール24内で一意の値が設定される。種別422には、優先度管理テーブル78のVolume種別781と同様であり、「高性能」、「標準」、「高コストパフォーマンス」のいずれかが予め設定される。
サイズ423には、当該ボリュームの論理サイズが格納される。シンプロビジョニングボリュームの場合には、実際に使用する物理的な記憶容量よりも大きな値が設定される。
割当済ページ容量424には、物理的な記憶容量が割り当てられた論理ページの容量が格納される。使用可能ローカルTier425には、当該ボリュームで使用可能なローカルTier27の値(階層)が格納される。ローカルTier27の値は、複数の値を設定することが可能である。ローカルTier27の値は、ボリュームの種別422に応じて決定される。
図11は、ローカルTier制御テーブル41の構成の一例を示す図である。ローカルTier制御テーブル41は、ストレージノード103のローカルプール階層管理31によって管理される。
ローカルTier制御テーブル41は、ローカルTier#411と、チャンク種別412と、合計チャンク容量413と、割当ページ容量414と、論理チャンクID415と、物理チャンクID416と、チャンクサイズ417をひとつのエントリに含む。
ローカルTier#411には、管理対象のローカルTier27の値(階層)が格納される。チャンク種別412には、ページを提供したチャンクの種別が格納される。本実施例では、チャンク種別として、「ローカルSSD」、「リモートSSD」、「HDD」のいずれかが設定される。
合計チャンク容量413には、当該ローカルTier27に割り当てられたチャンクの容量が格納される。割当ページ容量414には、ローカルTier27のチャンク容量のうち、ページに割り当てられた容量が格納される。論理チャンクID415には、ローカルTier27内の論理チャンクIDが格納される。物理チャンクID416には、論理チャンクが実際に格納された物理チャンク21のIDが格納される。チャンクサイズ417には、チャンク21のサイズが格納される。
ローカルTier制御テーブル41で論理チャンクと物理チャンクを分離して管理することで、ストレージノード103では、論理チャンクに対応する物理チャンクのIDを書き換えることで、チャンク21のリバランスを実現することができる。
図12は、ボリュームページ制御テーブル43の構成の一例を示す図である。ボリュームページ制御テーブル43は、ストレージノード103のローカルページ制御33が管理するボリューム200ごとの論理ページの制御テーブルである。
ボリュームページ制御テーブル43は、ボリュームID431と、LBA432と、論理ページ#433と、物理ページ#434と、積算IO数435をひとつのエントリに含む。
ボリュームID431には、ボリューム200の識別子が格納される。識別子はグローバルプール24内で一意の値である。LBA432には、ボリューム200内のLBAが格納される。
論理ページ#433には、LBA432に割り当てられた論理ページの番号が格納される。物理ページ#434には、論理ページ#433に対応する物理ページの番号が格納される。なお、物理ページ#434の値は、ローカルプール26内で一意の値が設定される。また、論理ページに割り当てられていない場合には「未割り当て」が格納される。
積算IO数435には、当該論理ページに対して発生したIO数の積算値が格納される。なお、IO数の積算値は、所定の間隔(例えば、1時間)毎にリセットするようにしても良い。また、本実施例1では、ボリューム200の性能を測定する統計情報としてIO数を用いる例を示すがこれに限定されるものではない。例えば、ボリューム200の読み書きの速度やデータを読み書きしたバイト数などを用いても良い。
図13は、物理ページ制御テーブル44の構成の一例を示す図である。物理ページ制御テーブル44の構成はストレージノード103のローカルページ制御33が使用する物理ページの制御テーブルである。
物理ページ制御テーブル44は、物理ページ#441と、ローカルTier442と、論理チャンクID443と、チャンクオフセット444と、論理ページ#445をひとつのエントリに含む。
物理ページ#441には、物理ページの番号が格納される。ローカルTier442には、物理ページが格納されたローカルプール26内のローカルTier27の値(階層)が格納される。論理チャンクID443には、当該物理ページが格納されたチャンク21の識別子が格納される。
チャンクオフセット444には、物理ページが格納されたデータ領域のチャンク21内でのオフセットが格納される。論理ページ#445には、当該物理ページが割り当てられた論理ページの番号が格納される。当該物理ページが未割り当ての場合「未使用」が格納される。
図14は、モニタ情報収集テーブル75の構成の一例を示す図である。モニタ情報収集テーブル75は、管理ノード104のグローバルモニタ65が、各ストレージノード103のローカルモニタ34から定期的(例えば、1時間毎)に収集したモニタ情報を格納する。
モニタ情報収集テーブル75は、ボリュームID751と、論理ページ#752と、IOPH753と、物理チャンクID754をひとつのエントリに含む。ボリュームID751には、ボリューム200の識別子が格納される。識別子はグローバルプール24内で一意の値である。
論理ページ#7523には、LBA432割り当てられた論理ページの番号が格納される。IOPH(IO per hour)753には、当該論理ページに対する1時間当たりのIO数が格納される。物理チャンクID754には、当該論理ページに割り当てられた物理チャンクの番号が格納される。
管理ノード104のグローバルモニタ65は、所定の間隔(例えば、1時間)毎に各ストレージノード103のローカルモニタ34からモニタ情報を読み込んで、論理ページ#をキーとしてモニタ情報収集テーブル75を更新する。
ボリュームページ制御テーブル43の積算IO数435が積算値の場合は、グローバルモニタ65が、前回値との差に基づいてIOPH753を算出すればよい。また、積算IO数435の積算値が1時間当たりのIO数であれば、そのままIOPH753に設定することができる。
図15は、グローバルIO度数分布テーブル76の構成の一例を示す図である。グローバルIO度数分布テーブル76は、管理ノード104のグローバルモニタ65が、グローバルプール24全体のIO度数の分布をページ単位で管理するテーブルである。
グローバルIO度数分布テーブル76は、ページランク761と、ボリューム種別762と、IOPH763をひとつのエントリに含む。ページランク761には、論理ページのIOPHの順位が格納される。本実施例では、IOPHが最大の論理ページを1位として降順に順位を設定した例を示す。
ボリューム種別762には、当該順位に該当する論理ページを構成したボリューム200の種別422が格納される。IOPHには、当該順位に該当する論理ページのIOPH753が格納される。
なお、グローバルIO度数分布テーブル76には、論理ページ#のフィールドを追加して、ボリューム200を容易に特定できるようにしてもよい。
図16は、グローバル使用容量テーブル77の構成の一例を示す図である。グローバル使用容量テーブル77は、管理ノード104のグローバルモニタ65がグローバルプール24のボリューム種別ごとに使用済みの容量を管理する。
グローバル使用容量テーブル77は、ボリューム種別771と、割り当て済みページ容量772をひとつのエントリに含む。ボリューム種別771には、ストレージノード103が提供するボリューム200の種別が格納される。本実施例では、「高性能」、「標準」、「高コストパフォーマンス」の3種類となる。
割り当て済みページ容量772には、グローバルモニタ65で算出されたボリューム200の種別毎に割り当て済みとなったページの総計が格納される。
なお、ストレージノード103のテーブルについては、各機能部が管理するのに加えて、ローカルモニタ34が所定の周期で更新するようにしても良い。
<処理>
図17は、管理ノード104で行われる処理の一例を示すフローチャートである。このフローチャートは、管理ノード104によって所定の周期(例えば、1時間)毎に実行される。
ステップS1001では、管理ノード104のグローバルモニタ65が、グローバルプール24を構成する全てのストレージノード103のローカルモニタ34から統計情報を取得して、モニタ情報収集テーブル75を更新する。
具体的には、ローカルモニタ34が、ボリュームページ制御テーブル43を読み込んでボリュームID431と、論理ページ#433と、物理ページ#434と、積算IO数435の値を取得して、グローバルモニタ65へ送信し、グローバルモニタ65は、これらの情報からモニタ情報収集テーブル75を更新する。
ステップS1002では、グローバルモニタ65は、グローバルボリュームテーブル73を参照し、モニタ情報収集テーブル75中の論理ページ#752を、ボリューム種別762ごとに分類する。グローバルモニタ65は、ボリューム種別ごとに分類された論理ページ#をIOPH763の降順でソートする。
そして、グローバルモニタ65は、ソートした結果について、優先度の高いボリューム種別からIOPHの大きい順に並べてグローバルIO度数分布テーブル76(図15)を生成する。
ステップS1003では、グローバルモニタ65は、ボリューム種別762ごとの論理ページ数×単位容量(42MB)から、ボリューム種別ごとに割り当て済みページ容量772を計算して、グローバル使用容量テーブル77(図16)を更新する。また、グローバルモニタ65は、算出された割り当て済みページ容量772で、グローバルボリュームテーブル73(図7)の割り当て済みページ容量735を更新する。
ステップS1004では、グローバルモニタ65が、図18に示すグローバルTier1容量不足判定処理を実行する。後述するように、グローバルTier1容量不足判定処理では、高性能なドライブ20−Sが不足していた場合には、管理ノード104のディスプレイ56に高性能なドライブ20−Sの不足を通知する。管理者は通知内容に基づき高性能ストレージノード103−1、または高性能なドライブ20−Sを追加する。
図18は、グローバルTier1容量不足判定処理の一例を示すフローチャートである。この処理は、図17のステップS1004で行われる処理である。
ステップSS2002では、グローバルモニタ65が、グローバルIO度数分布テーブル76とグローバルボリュームテーブル73から、標準的な性能のボリューム(標準VOL)200−2に対するアクセスのSSDミス率と、高性能なボリューム(高性能VOL)200−1に対するアクセスのSSDミス率について、それぞれの理論値を計算する(ボリューム種別ごとの合計値で計算)。なお、高コストパフォーマンスのボリューム200−3の場合には、ステップS2005へ進んで次のボリューム200に進んでも良い。
標準VOLのSSDミス率=1 −(全ての標準VOLにおけるSSD期待ページのIOPHの合計)÷(全ての標準VOL全ページのIOPHの合計) ・・(1)
高性能VOLのSSDミス率=1 −(全ての高性能VOLにおけるSSD期待ページのIOPHの合計)÷(全ての高性能VOL全ページのIOPHの合計) ・・(2)
ただし、SSD期待ページとは、グローバルIO度数分布テーブル76のページランク761の順に、論理ページを高性能なドライブ20−S(SSD)のチャンク21−Sから割り当てた場合に、SSD(グローバルTier1)の合計チャンク容量723内に収まるページを指す。
すなわち、本実施例1では、ボリューム200の種別(優先度)毎に、SSDページにアクセスした数(IOPH)と、当該ボリューム200のアクセス数(IOPH)の合計値の比率からSSDミス率を算出する。SSDミス率は、理論的にはSSDページにアクセス可能であるのに、実際にはHDDページにアクセスした比率としても良い。
また、SSDミス率は、ボリューム200の種別(優先度)毎にSSDが割り当てられていない容量と、当該ボリューム200の容量の比率としてもよい。すなわち、IOPHの比率に代えて容量の比率を用いてもよい。また、SSDミス率に代えて、SSDヒット率を用いてもよい(SSDミス率+SSDヒット率=1)。
本実施例1では、後述するように、高性能VOLに加えて、標準VOLにも高性能なグローバルTier1のSSDのチャンク21−S(SSDチャンク)を割り当てる制御を実施するので、高性能VOLのSSDミス率は基本的に0を維持するのが望ましい。このため、高性能VOLの許容SSDミス率786は「1%」に設定されて、グローバルTier1のSSDチャンクを優先的に割り当てる。
一方、標準VOLのSSDミス率は「20%」に設定されているので、標準VOLの80%までは、SSDチャンク(グローバルTier1)を割り当てて、残りの20%にHDDチャンクを割り当てる。
本実施例1の標準VOLのSSDミス率は、後述する図21のように、標準VOLに割り当てたSSDチャンク(グローバルTier1)と、HDDチャンク(グローバルTier2)の境界が、割り当て済みのページのどの位置にあるかを利用者に知らせる指標となる。
なお、上記SSD期待ページは物理的にSSDに配置されているとは限らない。グローバルプール階層制御62およびローカルプール階層管理31によるページや、ボリュームまたは、チャンクリバランス処理によりSSDに格納されるのが期待されることを含む。
ステップS2003では、グローバルモニタ65が、上記算出されたSSDミス率を優先度管理テーブル78に予め設定された許容SSDミス率786(図5)と比較して、当該ボリューム200のSSDミス率が許容SSDミス率を超えたか否かを判定する。
そして、グローバルモニタ65は、当該ボリューム200のSSDミス率が許容SSDミス率を超える場合にはステップS2004へ進み、そうでない場合には処理を終了する。
ステップS2004では、グローバルモニタ65が、高性能なドライブ(SSD)20−Sが不足していることをディスプレイ56に出力し、管理ノード104の利用者(または管理者)に性能が劣化する可能性を通知する。なお、高性能なドライブ(SSD)20−Sの不足の通知は、後述する図21の画面で行うようにしてもよい。
なお、グローバルモニタ65が通知を出力する手法としては、管理ツールを介したイベント通知やSNMP通知、あるいはその他の通知手法を用いることができる。
また、上記ではボリューム200の統計情報から高性能VOLのSSDミス率または標準VOLのSSDミス率を算出し、許容SSDミス率786と比較することで高性能VOLのSSDチャンクの不足を検出する例を示したが、これに限定されるものではない。
例えば、管理ノード104は、ストレージノード103のボリュームページ制御テーブル43を参照することで、ボリューム200に割り当てられた物理ページ#434から物理ページ制御テーブル44の論理チャンクID443を取得する。そして、管理ノード104は論理チャンクID443でローカルTier制御テーブル41を検索することで物理チャンクID416を取得し、この物理チャンクID416でグローバルチャンク制御テーブル74を検索することで、当該ボリューム200に割り当てられたグローバルTier744を取得できる。したがって、ボリューム200に割り当てられたグローバルTier1の容量に基づいてSSDページの不足を判定しても良い。
図19は、管理ノード104で行われるボリューム生成ノードの選択処理の一例を示すフローチャートである。この処理は、管理ノード104の管理者が入力装置55を操作して、所定の指令を入力したときに管理ノード104のグローバルボリューム管理63で実行される。管理者ボリューム作成の指示にあたり、必要な容量とボリューム種別を指定する。
ステップS3001では、グローバルボリューム管理63が、まず、グローバル使用容量テーブル77とグローバルTier管理テーブル72を参照して、新たにボリューム200を生成する際に、グローバルプール24に空き容量があるか否かを判定する。
具体的には、グローバルボリューム管理63が、グローバルTier管理テーブル72の合計チャンク容量723の合計値(チャンク容量合計値)と、グローバル使用容量テーブル77の割り当て済みページ容量772の合計値の比率を所定の閾値Th1(例えば、90%)と比較して、比率(割り当て済みページ容量/チャンク容量合計値)が閾値以下であれば、空き容量があると判定してステップS3002へ進む。一方、上記比率が閾値を超えていれば、空き容量がないと判定してステップS3004へ進む。
ステップS3002では、グローバルボリューム管理63が、新たにボリューム200を生成可能なノード種別712を決定する。この処理は管理者が指定したボリューム種別に対し、優先度管理テーブル78で定義された優先オーナノード種別783、使用可能オーナノード種別783の順に新たなボリューム200を生成可能な空きがあるノード種別を探索する。使用可能オーナノード種別784が複数指定されている場合、性能の高いノード種別から探索する。
グローバルボリューム管理63は、グローバルノードテーブル71とグローバルボリュームテーブル73を参照し、ノード種別712ごとに全てのボリューム200のサイズ734の合計値(合計ボリュームサイズ)と、チャンク容量717の合計値(合計チャンク容量)を算出する。
そして、グローバルボリューム管理63は、ノード種別毎の合計チャンク容量に対する合計ボリュームサイズの比率(合計ボリュームサイズ/合計チャンク容量)が閾値Th2(例えば2)以下の場合、該当するノード種別に対して新たなボリューム200を生成可能と判定する。一方、上記比率が閾値Th2を超える場合、グローバルボリューム管理63は、優先度管理テーブル78の使用可能オーナノード種別784に設定されたノード種別を選択する。なお、グローバルボリューム管理63は、上記比率が閾値Th2以下の場合にはボリュームの生成に失敗したと判定する制御としてもよい。
ステップS3003では、グローバルボリューム管理63が、上記ステップS3002で選択したノード種別のストレージノード103間で、チャンク容量とボリュームサイズの合計値とボリューム数ができるだけ均等となるように、新たにボリューム200を生成するストレージノード103を選択する。
グローバルボリューム管理63は、選択したノード種別内のストレージノード103間で、ボリューム種別732毎にボリュームサイズの合計値とチャンク容量717の合計値の比率と、ボリューム200の数が均等になるストレージノード103を選択する。ストレージノード103の選択については、公知または周知の手法を用いれば良い。例えば、上記比率とボリューム数からストレージノード103毎の指標を算出して、ボリューム200を追加したときに指標が所定の範囲内となる各ストレージノード103を選択するようにすればよい。ボリューム種別732毎の使用容量が同程度と予測される場合や、使用容量の予測が難しい場合には、ストレージノード103間でボリューム数が均等になるように、新規のボリューム200を生成するストレージノード103を選択すれば良い。
一方、空き容量が無いステップS3004では、グローバルプール24に空きがないためボリューム200の生成に失敗した通知をディスプレイ56へ出力する。
本実施例ではボリューム200を生成するストレージノード103の選択時にノード種別ごとの容量のみを考慮しているが、他にストレージノード103の負荷状況や、可用性、ドライブ20の負荷状況や、可用性、ネットワークの負荷や距離を考慮してもよい。
以上の処理によって、管理ノード104のグローバルボリューム管理63は、利用者によるボリューム生成の指示を契機にボリューム生成ノードの選択処理を開始し、ボリューム生成ノードを生成するノード種別を選択する。そして、グローバルボリューム管理63は、ノード種別ごとのチャンク容量と合計ボリュームサイズの比が一定以下に収まるようにノード種別を選択する。
ボリューム200をシンプロビジョニングで管理する場合には、ボリュームサイズを実際のチャンクサイズよりも大きく設定することができる。ボリュームサイズが大きくなりすぎた場合は、下位のノード種別(使用可能オーナノード種別784)にボリューム200を生成する。これにより、新たなボリューム200のSSDミス率が低減されることが期待できる。そして、グローバルボリューム管理63は、選択したノード種別内でストレージノード103間のチャンク容量と合計ボリュームサイズの比が均等となるように、新たなボリューム200を生成するストレージノード103を選択する。
図20は、管理ノード104で行われるチャンク割り当て処理の一例を示すフローチャートである。管理ノード104のグローバルチャンク管理64は、ストレージノード103のローカルプール階層管理31からローカルTier27の使用率が閾値Th2(例えば90%)以上となった場合に通知(容量不足の通知)を受け付ける。通知を受信した後に、グローバルチャンク管理64は当該ストレージノード103に対してチャンクの割当処理を開始する。
まず、グローバルチャンク管理64は、ストレージノード103のローカルプール階層管理31から容量不足の通知を受け付ける(S4001)。グローバルチャンク管理64は、容量不足の通知に含まれるストレージノード103の種別を取得する。
ステップS4002では、グローバルチャンク管理64が上記取得した種別を判定し、種別が高性能または標準であればステップS4003へ進み、取得した種別が高コストパフォーマンスであればステップS4008に進む。
ステップS4003では、グローバルチャンク管理64が、グローバルTier管理テーブル72を参照してグローバルTier1(25−1)に空きがあるか否かを判定する。グローバルチャンク管理64は、グローバルTier1(25−1)に空きがあればステップS4006に進み、空きがなければステップS4004に進む。
ステップS4006では、グローバルチャンク管理64が、グローバルTier1(25−1)からSSDのチャンク21−Sを対象のストレージノード103に割り当てる。そして、グローバルチャンク管理64は、対象のストレージノード103にチャンク21−Sの追加の割り当てを通知してから処理を終了する。
ステップS4004では、グローバルチャンク管理64が、対象のストレージノード103のローカルモニタ34にローカルTier1(27−1)及びローカルTier2(27−2)が高性能のボリューム200−1に占有されているか否かを問い合わせる。
ローカルモニタ34は、ローカルボリューム管理テーブル42とローカルTier制御テーブル41を参照して、高性能なボリューム200−1がローカルTier1、2の占有状態を判定して管理ノード104のグローバルチャンク管理64に応答する。
グローバルチャンク管理64は、対象のストレージノード103からの回答に応じて、高性能なボリューム200−1がローカルTier1(27−1)及びローカルTier2(27−2)を占有していればステップS4005へ進み、そうでない場合にはステップS4008に進む。
ステップS4005では、グローバルチャンク管理64が、グローバルIO度数分布テーブル76と、グローバル使用容量テーブル77、グローバルTier管理テーブル72を参照して、標準のボリューム200−2のうちがグローバルTier1(SSD)を使用しているボリュームがあるか否かを判定する。グローバルチャンク管理64は、グローバルTier1を使用している標準のボリューム200−2があればステップS4007へ進み、SSDを使用していなければステップS4008に進む。
ステップS4007では、グローバルチャンク管理64が、グローバルボリュームテーブル73と、グローバルチャンク制御テーブル74からグローバルTier1を使用している標準のボリューム200−2が所属するストレージノード103を特定する。これは各オーナノードごとのボリューム種別ごとの割り当て済みページ容量735と、割当てられたグローバルTier1チャンク容量745の総和から算出することができる。
そして、グローバルチャンク管理64は、上記特定されたストレージノード103の標準のボリューム200−2からSSDのチャンク21−Sを回収して、対象のストレージノード103に割り当てる。
チャンク21−Sの回収については、ローカルTier1、2を使用している標準のボリューム200−2のうち、SSDのチャンク21−SをHDDのチャンク21−Hに置き換えた場合に、上記(1)式で算出されたSSDミス率の低下が最も少ないボリューム200−2をグローバルチャンク管理64が選択することができる。
グローバルチャンク管理64は、回収したチャンク21−Sの追加を対象のストレージノード103に通知して処理を終了する。
ノード種別が高コストパフォーマンスノードや、標準のボリューム200−2がグローバルTier1を使用していない場合、グローバルTier1を使用しているのは高性能ボリューム200−1のみと判断する。その場合、他のノードからグローバルTier1のチャンク21−Sを回収することができないのでステップS4008に進む。
ステップS4008では、グローバルチャンク管理64が、グローバルTier管理テーブル72を参照してグローバルTier2(25−2)に空きチャンク21−Hがあるか否かを判定する。グローバルTier2(25−2)に空きがある場合にはステップS4009へ進み、空きがない場合にはステップS4010へ進む。
ステップS4009では、グローバルチャンク管理64が、グローバルTier2(25−2)から空きチャンク21−Hを対象のストレージノード103に割り当て、当該ストレージノード103に通知する。
一方、ステップS4010では、グローバルTier2(25−2)に空きがないのでチャンク21を割り当てることができないので、割り当て失敗の通知をディスプレイ56に出力し、管理者に通知する。
以上の処理によって、グローバルチャンク管理64は、高性能なボリューム200−1や標準のボリューム200−2に対しては、グローバルTier1(25−1)のチャンク21−Sを割り当てる。また、グローバルチャンク管理64は、グローバルTier1(25−1)に空きチャンク21−Sがない場合には、標準のボリューム200−2が使用している高性能なボリューム200−1のチャンク21−Sを回収して、高性能なボリューム200−1に再割り当てを実施する。さらに、グローバルチャンク管理64は、標準のボリューム200−2がグローバルTier1(25−1)を使用していない場合には、グローバルTier2(25−2)の空きチャンク21−Hを割り当てる。
<管理インタフェース>
図21は、ボリューム管理GUI800の一例を示す図である。ボリューム管理GUI800は、例えば、グローバルボリューム管理63が利用者の要求に応じて生成し、ディスプレイ56に表示される。
ボリューム管理GUI800は、グローバルTier1、2のチャンク21を割り当てたボリューム200をボリュームの種別毎に棒グラフで表示する領域801と、高性能VOLのSSDミス率と、標準VOLのSSDミス率をそれぞれ表示するSSDミス率表示領域802と、グローバルTier1、2のチャンク21を割り当てたボリューム200をボリュームの種別毎にIOPHと割り当て済みページ容量のグラフで表示する表示領域803と、ボリュームリスト804と、ノードリスト805と、ボリューム200の追加ボタン806と、ボリューム200の削除ボタン807と、ストレージノード103の追加ボタン808と、ストレージノード103の削除ボタン809を含む。
表示領域803のグラフは、図15のグローバルIO度数分布テーブル76を折れ線グラフとしたもので、縦軸にIOPH、横軸に種別毎の割り当て済みページ容量を示す。そして、横軸は、左から高性能VOL、標準VOL、高コストパフォーマンスVOLの順に区分けし、さらに、グラフ上にグローバルTier1の領域と、グローバルTier2の領域を区分けする。
グローバルTier1とグローバルTier2の境界が、標準VOL(ボリューム200−2)よりも高コストパフォーマンスボリューム側にあれば、標準VOL及び高性能VOLへのSSDの割り当て量は十分である。
一方、グローバルTier1とグローバルTier2の境界が、標準VOL(ボリューム200−2)よりも高性能VOL(200−1)側に近づくと、ボリューム200へのSSDの割り当て量が不足しつつあると判定することができる。
そして、グローバルTier1とグローバルTier2の境界が、高性能VOLの領域に入って、図18に示したように、SSDミス率が許容SSDミス率を超えると、グローバルTier1のSSDの不足が検出されて、SSDの割り当て不足の通知が出力される。
ボリュームリスト804には、管理ノード104が管理するボリューム200の名称と、種別と、サイズ及び割り当て済みページ容量が表示される。
ノードリスト805には、管理ノード104が管理するストレージノード103のサーバ名、種別、SSD(ローカルTier1)容量、及びHDD(ローカルTier3)容量が表示される。
ボリューム管理GUI800では、ボリューム200やストレージノード103の追加や削除を行うことができる。ボリュームの追加ボタン806をクリックすることで、図22のボリューム追加GUI810からボリューム200の追加処理を開始することができる。また、ノードの追加ボタン808をクリックすることで、図23のノード追加GUI820からストレージノード103の追加処理を開始することができる。
ボリューム管理GUI800では、ボリュームリスト804で、不要なボリューム名を選択してから削除ボタン807をクリックすることで、当該ボリューム200を削除することができる。
同様に、ノードリスト805で、不要なサーバ名を選択してから削除ボタン809をクリックすることで、当該ストレージノード103を削除することができる。
図22は、ボリューム追加GUI810の一例を示す図である。ボリューム追加GUI810は、ボリュームの追加ボタン806がクリックされたときにグローバルボリューム管理63によって、ディスプレイ56に表示される。
ボリューム追加GUI810は、SSDミス率表示領域811と、グローバルTier1、2のチャンク21を割り当てたボリューム200をボリュームの種別毎にIOPHと容量のグラフで表示する表示領域812と、追加するボリューム200の名称813と、追加するボリューム200のサイズ814と、追加するボリューム200の種別815と、ボリューム200の追加処理を開始する決定ボタン816が表示される。
SSDミス率表示領域811と、表示領域812は図21のボリューム管理GUI800と同様である。管理ノード104の利用者は、名称813、サイズ814、追加するボリューム200の種別815を設定して決定ボタン816をクリックすることで新規のボリューム200を追加することができる。
図23は、ノード追加GUI820の一例を示す図である。ノード追加GUI820は、ノードの追加ボタン808がクリックされたときにグローバルノード管理61によって、ディスプレイ56に表示される。
ノード追加GUI820は、SSDミス率表示領域821と、グローバルTier1、2のチャンク21を割り当てたボリューム200をボリュームの種別毎にIOPHと容量のグラフで表示する表示領域822と、新規に追加するノードのリスト823と、ストレージノード103の追加処理を開始する決定ボタン824が表示される。
リスト823には、選択ボタン8231と、サーバ名、種別、SSD容量、HDD容量、CPU、メモリが表示される。図示の例では、リスト823で標準ノードの「Serv1」が選択された例を示す。
SSDミス率表示領域821には、標準ノードの「Serv1」を追加する前後のSSDミス率が表示され、図示の例では、標準ノード(103−2)を追加することで、標準VOLのSSDミス率が25%から5%に改善されることを示している。
表示領域822には図21のボリューム管理GUI800の内容に加え、標準ノードの「Serv1」を追加した場合のボリューム200の領域が図中「ノード追加分」として表示される。これにより、管理ノード104の利用者は、選択したストレージノード103の性能を把握することが可能となる。
そして、利用者は決定ボタン826をクリックすることで新規のストレージノード103を追加することができる。
以上のように、実施例1では、SSD(20−S)のページを割り当てた高性能VOL(200−1)と、SSDのページを割り当て可能な標準VOL(200−2)を含んで性能の優先度を制御するストレージノード103で、ボリューム200毎の使用容量(割り当て済みページ容量)と、IOPH(ボリューム200の性能に関する統計情報)を取得してSSDミス率を算出することで、高性能VOLや標準VOLに割り当てられたグローバルTier1のチャンクの不足を通知することができる。
これにより、高性能なストレージデバイス(例えば、SSD)が不足したことを管理ノード104の管理者に通知することが可能となる。ストレージシステムの管理者は、高性能なボリューム200−1の不足によって性能が劣化する前に増設することが可能となる。その結果、管理者が性能情報常に監視する必要がなくなり、管理コストを削減することができる。
なお、上記実施例1ではボリューム種別として高性能VOL、標準VOL、高コストパフォーマンスVOLの3種類としたが、これらに限定されるものではない。他に上位アプリケーションごとのノード種別や、より細粒度の優先度を持つノード種別を用いてもよい。また、ストレージノード103のノード種別についても同様である。
また、ドライブ20の種別をSSDとHDDの2種類としたが、これに限定されるものではない。例えば、Storage Class Memoryのような高速なストレージデバイスや、同一のストレージデバイスであってもリード特化、ライト特化などの処理特性に応じてドライブ種別を分類するようにしてもよい。
また、SSD等の高性能なボリューム200−1の不足の判定方法としてSSDミス率を用いた例を示したが、これに限定されるものではない。例えば、SSD期待ページのうち最も低アクセスのページのIOPHが、HDDドライブが仕様としてサポートするIOPHを上回った場合にSSDが不足したと判定してもよい。
なお、本実施例1では、管理者が新たなボリューム200を生成する際に、ボリュームの種別を選択する例を示したが、グローバルボリューム管理63が生成するボリューム種別を指定するようにしてもよい。
また、上記実施例1では、SSDが不足する場合には管理ノード104のユーザに通知を行う例を示したが、図19のボリューム200作成時にボリューム200の生成の可否として通知してもよい。
図26、図27は、本発明の実施例3を示す。本実施例3では、前記実施例1のローカルプール26の階層(ローカルTier27−2〜27−3)を廃止して単一の階層(ローカルTier27−1)とし、階層制御を行わないローカルプール26を有する複数のストレージノード103に、グローバルプール24からチャンク21を提供するストレージシステムで、ローカルのボリューム200の容量不足の判定および容量不足の通知を行う例を示す。
図26は、グローバルプール24とローカルプール26の関係を示すブロック図である。各ストレージノード103は自ノード内の高性能なドライブ20−Sと、他のストレージノード103(他ノード)の高性能なドライブ20−Sでローカルプール26を構成する。
本実施例3では、ローカルプール26を自ストレージノード103内の高性能なドライブ20−S(SSD)のみで構成することで、ボリューム200のアクセス性能を高くすることができる。特に高性能なボリューム200−1にはローカルノード(自ノード)のチャンク21(以下、ローカルチャンク)のみを割り当てる。
一方、ボリューム200の管理にシンプロビジョニングを適用した場合では、物理容量以上のボリューム200を生成することができる。シンプロビジョニングでは、ユーザが使用するボリューム200の容量はボリューム200のサイズ以下となるため、このようなオーバープロビジョニングを行うことで容量効率を向上させることができる。
上記シンプロビジョニングの運用では、ボリューム200の使用容量がローカルのドライブ20−Sの容量を超えた場合に、他のストレージノード103から提供されるチャンク21−S(以下、リモートチャンク)の割り当てが発生し、アクセス性能が低下していく。
なお、リモートチャンクはネットワークなどの遅延と、ネットワークなどの帯域の制限があるため、ローカルチャンクに比して性能が低い。このため、本実施例3では、ローカルチャンクを高性能なストレージデバイスとして扱い、リモートチャンクを低性能なストレージデバイスとして扱う。
本実施例3では、管理ノード104がボリューム200の実使用容量と、ローカルプール26のローカルSSD(ローカルチャンク)の容量と、リモートSSD(リモートチャンク)の物理容量と、IOの統計情報(IOPH)を取得して、リモートチャンクへのIO量またはリモートチャンクのSSD割り当て量によりローカルプール26のSSDページが十分であるか否かを判定する。
当該ストレージノード103(自ノード)でローカルプール26のSSDページの容量が、性能要件を満たすために不十分な場合には、管理ノード104の利用者に通知を行う。利用者は通知に示されたストレージノード103にSSDデバイスを追加することで、SSDページの容量不足を解消する。または、管理ノード104が、他のストレージノード103(他ノード)で低優先度の標準のボリューム200−2に自ノードのリモートチャンクが割り当てられている場合には、他ノードから自ノードのリモートチャンクを回収することでSSDページの容量不足を解消する。これらの処理により利用者はストレージノード103ごとの容量不足を常に監視する必要がなくなり、必要なタイミングでデバイス追加を行うことが可能となる。
管理ノード104は、回収したリモートチャンクをローカルチャンクとして自ノードのローカルプール26へ割り当てて、SSDページの不足を解消する。管理ノード104は、リモートチャンクを回収した他ノードに不足したチャンクを割り当てる。
本実施例3ではドライブ20の種別としてSSD(20−S)を使用する例を示すが、NVRAMなどの高速デバイスや、HDDなど低速デバイスを使用した場合でも適用可能である。
本実施例3のストレージシステムの構成は、前記実施例1の図1〜図3と同様ではあるが、ローカルプール26とグローバルプール24の階層制御は行わず、グローバルプール24のシンプロビジョニング機能を利用する。また、本実施例3では、グローバルプール24のSSDのチャンク21−Sのみを使用し、ローカルプール26ではローカルTier27−1のSSDページを使用する。
そして、高性能なボリューム200−1(高性能VOL)にはローカルチャンクのみを割り当て、標準のボリューム200−2(標準VOL)にはローカルチャンクまたはリモートチャンクを割り当てる。なお、本実施例3では、HDDを使用しないので、図4のストレージノード103−3に代わって、標準のボリューム200−2で構成された標準ノードのストレージノード103−3Aを用いる。
管理ノード104は、前記実施例1の図5から図9のテーブルを用いてグローバルプール24を制御する。また、図5の許容SSDミス率786は許容ローカルミス率と読み替えるものとする。
ローカルミス率=リモートチャンクへのIOPH/ローカルチャンクへのIOPH ・・(3)
管理ノード104は上記ローカルミス率を、図14のモニタ情報収集テーブルと図27のローカルプールIO度数分布テーブル79を用いて算出する。
図27は、ローカルプールIO度数分布テーブル79の構成の一例を示す図である。ローカルプールIO度数分布テーブル79は、管理ノード104のグローバルモニタ65が、ローカルプール26のIO度数の分布をページ単位で管理するテーブルである。
ローカルプールIO度数分布テーブル79は、ページランク791と、アクセス種別792と、IOPH793をひとつのエントリに含む。ページランク791には、論理ページのIOPHの順位が格納される。本実施例では、IOPHが最大の論理ページを1位として降順に順位を設定した例を示す。
アクセス種別792には、当該順位に該当する論理ページがローカルチャンクで構成されるか、リモートで構成されるかの情報が格納される。IOPHには、当該順位に該当する論理ページのIOPH753が格納される。
なお、ローカルプールIO度数分布テーブル79には、論理ページ#のフィールドを追加して、ボリューム200を容易に特定できるようにしてもよい。
一方、各ストレージノード103は、前記実施例1の図10から図13のテーブルを用いてローカルプール26を制御する。上述のように、ローカルプール26の階層は1階層のみの制御となる。
図27は、管理ノード104で行われるグローバルTier1容量不足判定処理の一例を示すフローチャートである。このフローチャートは、所定の周期(例えば、1時間)で管理ノード104のグローバルモニタ65が実行する。管理ノード104は、この処理によって、ストレージノード103のローカルチャンクの容量不足を検出した場合には、ユーザへの通知またはチャンクのリバランスによってローカルプール26のSSDの容量不足を解消する。
ステップS5001では、管理ノード104のグローバルモニタ65が、各ストレージノード103のローカルモニタ34からモニタ情報を収集して、前記実施例1と同様に図14のモニタ情報収集テーブル75やローカルプールIO度数分布テーブル79を生成する。
ステップS5002では、グローバルモニタ65が、モニタ情報収集テーブル75に登録された全てのボリューム200について、ステップS5010までの処理を繰り返して実行する。
ステップS5003では、グローバルモニタ65が、各ストレージノード103のボリューム200について、リモートチャンクとローカルチャンクのIOアクセスの比率を上記(3)式からローカルミス率として算出する。
ステップS5004では、グローバルモニタ65が、優先度管理テーブル78の許容ローカルミス率(図中許容SSDミス率)を超えたか否かを判定する。ローカルミス率が許容ローカルミス率を超えていれば、グローバルモニタ65は、ローカルチャンクの容量不足と判定してステップS5005へ進み、そうでない場合にはステップS5010に進んで次のボリューム200を選択してステップS5002へ戻って上記処理を繰り返す。
ステップS5005では、グローバルモニタ65が、グローバルノードテーブル71を参照して、他のストレージノード103の空きチャンク容量を取得して、容量不足となったストレージノード103のボリューム200を、他のストレージノード103のリモートチャンクでリバランス可能か否かを判定する。
なお、リバランスの判定は、他ノードのボリューム200に、自ノードのリモートチャンクが割り当てられて、かつ、他ノードのボリューム200に割り当て可能な空きチャンク容量がある場合に、グローバルモニタ65はリバランス可能と判定し、そうでない場合にはリバランス不可と判定する。
グローバルモニタ65は、ボリュームのリバランスが可能な場合にはステップS5007に進み、そうでない場合には、ステップS5006に進む。
ステップS5007では、上述したように、ローカルチャンクが容量不足となったストレージノード103(自ノード)が、他ノードにリモートチャンクを提供している場合には、グローバルモニタ65は、当該リモートチャンクを他ノードのボリューム200から回収し、ローカルチャンクとして自ノードのボリューム200へ割り当てる。なお、グローバルモニタ65は、回収した他ノードのボリューム200に他のチャンクを割り当てる。
また、グローバルモニタ65は、前記実施例1と同様に、グローバルIO度数分布テーブル76のボリューム種別762とページランク761から、リモートチャンクを回収可能な標準のボリューム200−2を選択することができる。
ステップS5006では、前記実施例1と同様に、ローカルチャンクが不足して性能が劣化する可能性が発生したことをディスプレイ56に出力して、利用者に高性能なデバイス(ローカルチャンク)が不足したことを通知する。出力内容にはデバイスが不足したストレージノード103のノードID711を含め、利用者がそのノードにデバイスを追加できるようにする。
次に、ステップS5008では、グローバルモニタ65が、当該ストレージノード103で対象のボリューム200の使用容量に対し、チャンクの割り当て量を減らしても十分な物理容量が割り当てられるか否かを判定する。十分な物理容量は、例えば、使用容量/物理容量が70%以上など、所定の空き比率以上であれば、ローカルプール26の縮退が可能と判定する。
グローバルモニタ65は、プールの縮退が可能であれば、ステップS5009に進んでローカルプール26の縮退を実行し、そうでない場合にはステップS5010に進んで次のボリューム200について上記の処理を実行する。
ステップS5009では、グローバルモニタ65が、対象のボリューム200からリモートチャンクを削除してローカルプール26の縮退を実行し、ボリューム200に対するリモートチャンクの割り当てを低減する。
以上の処理によって、単一のドライブ20−S(SSD)を利用してローカルチャンクとリモートチャンクで性能差の異なるボリューム200−1、200−2を運用する場合でも、ローカルチャンクのページを割り当てた高性能VOL(200−1)と、リモートチャンクを割り当て可能な標準VOL(200−2)を含んで性能の優先度を制御するストレージノード103で、ボリューム200毎の使用容量と、IOPH(IOの統計情報)を取得してローカルミス率を算出することで、高性能VOLのストレージノード103に割り当てるローカルチャンクの不足を通知することができる。
なお、上記実施例3では、ローカルミス率の計算にモニタ情報を使用しているが、これに限定されるものではない。例えば、チャンク間でIOの負荷分散制御を行うプールを有するストレージシステムでは、プールに含まれるローカルデバイス容量とリモートデバイス容量の容量比からローカルミス率を算出してもよい。
<まとめ>
以上のように本実施例1〜3では、高性能なストレージデバイス(SSD)と低性能なストレージデバイス(HDD)を有するストレージノード103で、SSDの記憶領域を優先的に割り当てる高性能ボリュームと、SSDまたはHDDの記憶領域を割り当てる低性能ボリュームを提供するストレージシステムで、管理ノード104が高性能ボリュームに割り当てたSSDの不足を検出して通知する。これにより、SSDの不足が進行して高性能ボリュームの性能が劣化する以前に、高性能ボリュームへのSSDの割り当てを実行することができる。
管理ノード104は、SSDを割り当てる優先度を低性能ボリュームよりも高性能ボリュームの方を高く設定する。そして、管理ノード104は、ボリューム200ごとのIO数の単位時間当たりの積算値や転送速度や転送量など性能に関する統計情報と優先度からSSDミス率(指標)を算出し、所定の許容値(許容SSDミス率786)と比較することで、迅速にSSDの割り当て不足を検出することができる。
このように、管理ノード104が、性能に関する統計情報と優先度に基づいて高性能なデバイスが不足していることを示す指標(SSDミス率)を算出することで、高性能なストレージデバイスを割り当てる優先度が高い高性能ボリュームと、優先度が低い低性能ボリュームを運用するストレージシステムにおいて、高性能ボリュームの性能が劣化する以前に高性能なストレージデバイスの不足を通知することが可能となる。
また、上記実施例1〜3では、管理ノード104が独立した計算機で構成される例を示したが、ストレージノード103−1〜103−nのいずれかで管理ノード104を実行するようにしても良い。
なお、上記実施例1〜3は、SDSの他に大規模ストレージシステムにも適用することが可能である。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。