(57)【要約】【課題】  ＩａａＳ／ＰａａＳの運用に必要な余剰ストレージリソースを低減させ、かつ、障害時であってもストレージ性能のＳＬＡを維持する。【解決手段】  アプリケーション１０１が実行されるコンピュータ１のデータを格納する格納領域を提供する複数のストレージノード２を含んで構成されるストレージシステムにおいて、コンピュートノード１からストレージノード２へのデータの入出力要求に対する処理モードとして、通常設定される通常モードと、通常モードに比べて所定の機能を抑制する非常用モードと、が用意される。このようなストレージシステムにおいて、ストレージノード２Ａにおける障害の発生を契機として、当該障害が発生しなかったストレージノード２Ｂにおける処理モードを非常用モードに切り替える。【選択図】図３
2020101949.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションが実行されるコンピュータのデータを格納する格納領域を提供する複数のストレージノードを含んで構成されるストレージシステムであって、
データの入出力要求に対する処理モードとして、通常設定される通常モードと、前記通常モードに比べて所定の機能を抑制する非常用モードと、を備え、
第１の前記ストレージノードにおける障害の発生を契機として、当該障害が発生しなかった第２の前記ストレージノードにおける前記処理モードを前記非常用モードに切り替える
ことを特徴とするストレージシステム。
【請求項２】
前記第２のストレージノードにおけるコントローラの処理負荷に基づいて、前記処理モードの切替可否を判断する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記第２のストレージノードにおいて、同一のコントローラによって制御可能な複数のボリュームの全体を単位として、または、前記複数のボリュームのそれぞれを単位として、前記処理モードの切替を行う
ことを特徴とする請求項１に記載のストレージシステム。
【請求項４】
前記通常モードでは、前記データに対する圧縮または重複削除を実行し、
前記非常用モードでは、前記通常モードで実行される前記データに対する圧縮または重複削除を停止する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項５】
前記通常モードでは、前記データに対する分散イレーシャーコーディングを実行し、
前記非常用モードでは、前記データに対する分散イレーシャーコーディングを停止する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項６】
前記通常モードでは、前記データに対するミラーリングを実行し、
前記非常用モードでは、前記データに対するミラーリングを停止する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項７】
前記コンピュータは、アプリケーションが動作するミドルウェアを有し、
前記第２のストレージノードにおいて、ボリュームを使用する前記ミドルウェアがレプリケーションを行っているか否かに基づいて、当該ボリュームに対する前記処理モードの切替可否を判断する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項８】
前記第２のストレージノードにおいて、前記ミドルウェアによってレプリケーションが行われている前記ボリュームを優先的に前記処理モードの切替対象に割り当てる
ことを特徴とする請求項７に記載のストレージシステム。
【請求項９】
アプリケーションが実行されるコンピュータのデータを格納する格納領域を提供する複数のストレージノードを含んで構成されるストレージシステムによるストレージシステム制御方法であって、
前記ストレージシステムは、データの入出力要求に対する処理モードとして、通常設定される通常モードと、前記通常モードに比べて所定の機能を抑制する非常用モードと、を有し、
第１の前記ストレージノードにおける障害の発生を契機として、当該障害が発生しなかった第２の前記ストレージノードにおける前記処理モードを前記非常用モードに切り替える
ことを特徴とするストレージシステム制御方法。
【請求項１０】
前記第２のストレージノードにおけるコントローラの処理負荷に基づいて、前記処理モードの切替可否を判断する
ことを特徴とする請求項９に記載のストレージシステム制御方法。
【請求項１１】
前記通常モードでは、前記データに対する圧縮または重複削除を実行し、
前記非常用モードでは、前記通常モードで実行される前記データに対する圧縮または重複削除を停止する
ことを特徴とする請求項９に記載のストレージシステム制御方法。
【請求項１２】
前記通常モードでは、前記データに対する分散イレーシャーコーディングを実行し、
前記非常用モードでは、前記データに対する分散イレーシャーコーディングを停止する
ことを特徴とする請求項９に記載のストレージシステム制御方法。
【請求項１３】
前記通常モードでは、前記データに対するミラーリングを実行し、
前記非常用モードでは、前記データに対するミラーリングを停止する
ことを特徴とする請求項９に記載のストレージシステム制御方法。
【請求項１４】
前記コンピュータは、アプリケーションが動作するミドルウェアを有し、
前記第２のストレージノードにおいて、ボリュームを使用する前記ミドルウェアがレプリケーションを行っているか否かに基づいて、当該ボリュームに対する前記処理モードの切替可否を判断する
ことを特徴とする請求項９に記載のストレージシステム制御方法。
【請求項１５】
前記第２のストレージノードにおいて、前記ミドルウェアによってレプリケーションが行われている前記ボリュームを優先的に前記処理モードの切替対象に割り当てる
ことを特徴とする請求項１４に記載のストレージシステム制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びストレージシステム制御方法に関し、ＩａａＳ／ＰａａＳによって複数のテナントにリソースを提供するストレージシステム及びストレージシステム制御方法に適用して好適なものである。
【背景技術】
【０００２】
近年、社内のＩＴ部門やサービスプロバイダが、企業のビジネス部門にＩａａＳ（Infrastructure as a Service）やＰａａＳ（Platform as a Service）を提供することが増えている。このＩａａＳ／ＰａａＳ提供者は、リソースを共用する複数のテナントに対して、ストレージ性能のサービス品質保証（ＳＬＡ：Service Level Agreement）を維持する必要がある。
【０００３】
例えば特許文献１には、必要な性能を保証する論理区画について、障害時にも性能を保証しようとするストレージ装置が開示されている。特許文献１に開示されたストレージ装置は、ストレージシステムのリソース（ＣＰＵやメモリ等）を論理パーティションに分割することにより、障害によって過負荷の論理パーティションが発生した場合には、他の論理パーティションからリソースを融通してテナントごとの性能を維持しようとするものであった。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１６／０７５７７９号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、ＩａａＳ／ＰａａＳで一般的に使用されるスケールアウト型ストレージシステムでは、障害時にクラスタ内に空きリソースがあっても、ノード内でしかリソースを融通できないため、残されたノードの負荷が上がり、テナントに提供できるサービスが低下してしまうという問題があった。この問題に対して、上述した特許文献１に開示された技術によれば、他の論理パーティションからリソースを融通することによってストレージ性能を維持することに期待できるものの、そのためには、障害時の性能維持のためにノード内に多くの余剰ストレージリソースを持つ必要があり、コストが嵩むという新たな問題が生じる。
【０００６】
本発明は以上の点を考慮してなされたもので、ＩａａＳ／ＰａａＳの運用に必要な余剰ストレージリソースを低減させ、かつ、障害時であってもストレージ性能のＳＬＡを維持することが可能なストレージシステム及びストレージシステム制御方法を提案しようとするものである。
【課題を解決するための手段】
【０００７】
かかる課題を解決するため本発明においては、アプリケーションが実行されるコンピュータのデータを格納する格納領域を提供する複数のストレージノードを含んで構成されるストレージシステムであって、データの入出力要求に対する処理モードとして、通常設定される通常モードと、前記通常モードに比べて所定の機能を抑制する非常用モードと、を備え、第１の前記ストレージノードにおける障害の発生を契機として、当該障害が発生しなかった第２の前記ストレージノードにおける前記処理モードを前記非常用モードに切り替えるストレージシステムが提供される。
【０００８】
また、かかる課題を解決するため本発明においては、アプリケーションが実行されるコンピュータのデータを格納する格納領域を提供する複数のストレージノードを含んで構成されるストレージシステムによる以下のストレージシステム制御方法が提供される。このストレージシステム制御方法において、前記ストレージシステムは、データの入出力要求に対する処理モードとして、通常設定される通常モードと、前記通常モードに比べて所定の機能を抑制する非常用モードと、を有し、第１の前記ストレージノードにおける障害の発生を契機として、当該障害が発生しなかった第２の前記ストレージノードにおける前記処理モードを前記非常用モードに切り替える。
【発明の効果】
【０００９】
本発明によれば、ＩａａＳ／ＰａａＳの運用に必要な余剰ストレージリソースを低減させ、かつ、障害時であってもストレージ性能のＳＬＡを維持することができる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態に係るストレージシステムの全体構成例を示すブロック図である。
【図２】図１に示したストレージノードのハードウェア構成例を示すブロック図である。
【図３】図１に示したストレージシステムにおけるソフトウェアのアーキテクチャの一例を示すブロック図である。
【図４】メモリに記憶されているデータを説明するための図である。
【図５】負荷情報管理テーブルのデータ構成例を説明するための図である。
【図６】ＶＯＬ管理テーブルのデータ構成例を説明するための図である。
【図７】ミラーリング管理テーブルのデータ構成例を説明するための図である。
【図８】イレーシャーコーディング管理テーブルのデータ構成例を説明するための図である。
【図９】Ｉ／Ｏ処理モード変更処理の処理手順例を示すフローチャートである。
【図１０】データ読込み処理の処理手順例を示すフローチャートである。
【図１１】Ｉ／Ｏ処理モード特定処理の詳細な処理手順例を示すフローチャートである。
【図１２】Ｒｅａｄデータ読出し処理の詳細な処理手順例を示すフローチャートである。
【図１３】データ書込み処理の処理手順例を示すフローチャートである。
【図１４】Ｗｒｉｔｅデータ書出し処理の詳細な処理手順例を示すフローチャートである。
【図１５】第２の実施の形態に係るストレージシステムにおけるソフトウェアのアーキテクチャの一例を示すブロック図である。
【図１６】第２の実施の形態におけるＶＯＬ管理テーブルのデータ構成例を説明するための図である。
【図１７】Ｉ／Ｏ処理モード変更ＶＯＬ選択処理の処理手順例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、本発明の実施の形態を詳述する。なお、各図面では、同一のまたは同様の機能や構成を有する要素について、同一の番号を付した一方で、当該要素を個別に識別するためにアルファベットによる添字を付したものがある。そして、明細書では、ある要素について全体的に表記する場合には、上記添字を記載しないことがある。
【００１２】
（１）第１の実施の形態
（１−１）ストレージシステムの構成
図１は、第１の実施の形態に係るストレージシステムの全体構成例を示すブロック図である。図１に示したように、本実施の形態に係るストレージシステムは、複数のノード（ストレージノード２）を連結してクラスタを構築したスケールアウト型のストレージシステムであり、複数のコンピュートノード１、複数のストレージノード２、及び管理ノード３が、ネットワーク４，５，６を介して接続されて構成される。
【００１３】
コンピュートノード１は、ネットワーク５（ＳＡＮ：Storage Area Network）を介して複数のストレージノード２に接続され、ユーザデータの入出力（Ｉ／Ｏ）の要求を発行する。コンピュートノード１が発行するＩ／Ｏ要求は、全てのストレージノード２（より具体的には、図３に示すＩ／Ｏコントローラ２０３）に送られる。コンピュートノード１は、一般的な物理サーバや計算機で構成することができ、そのハードウェア構成は省略する。コンピュートノード１では、アプリケーション（以後、アプリとも称する）やミドルウェア（以後、ミドルとも称する）が動作する。
【００１４】
ストレージノード２は、複数のストレージノード２が連結されてクラスタリングされたストレージ空間を提供するノードである。図２は、図１に示したストレージノードのハードウェア構成例を示すブロック図である。図２に示したように、ストレージノード２は、一般的なストレージ装置であって、ストレージノード２全体の制御処理を司るＣＰＵ（Central Processing Unit）２１と、主にＣＰＵ２１によって使用されるデータを記憶する不揮発なメモリ２２と、論理ボリュームの記憶媒体であるドライブ２３と、ＳＡＮ（ネットワーク５）の接続に用いられるＳＡＮポート２５と、マネジメントネットワーク（ネットワーク６）の接続に用いられる管理ポート２６と、が互いにバスで接続されて構成されている。
【００１５】
管理ノード３は、ネットワーク６（マネジメントネットワーク）を介して複数のストレージノード２に接続され、ストレージシステム全体の管理を行うノードである。管理ノード３は、一般的な物理サーバで構成することができ、そのハードウェア構成は省略する。
【００１６】
図３は、図１に示したストレージシステムにおけるソフトウェアのアーキテクチャの一例を示すブロック図である。
【００１７】
図３に示したように、本実施の形態に係るストレージシステムでは、複数のストレージノード２（２Ａ〜２Ｃ）を連結してクラスタ２０１が構築される。当ストレージシステムを用いてＩａａＳ／ＰａａＳを提供する場合、クラスタ２０１内のストレージリソースが複数のテナントに共用され、当ストレージリソースの論理ボリュームが論理パーティションで区切られる等して各テナントに提供される。
【００１８】
ソフトウェアのアーキテクチャとして、クラスタ２０１は、データの入出力（Ｉ／Ｏ）を制御する複数のデュアルコントローラ２０２（２０２Ａ，２０２Ｂ）と、クラスタ２０１の構成を管理するクラスタ構成管理部２０５とを備えて構成される。
【００１９】
このうち、デュアルコントローラ２０２（２０２Ａ，２０２Ｂ）はそれぞれ、２つのＩ／Ｏコントローラ２０３（２０３Ａ〜２０３Ｄ）から備えて構成される。各Ｉ／Ｏコントローラ２０３は、コンピュートノード１のアプリ１０１（１０１Ａ〜１０１Ｃ）やミドル（不図示）から発行されたＩ／Ｏ要求に応じて、自身が管理する自ノード内のボリューム（ＶＯＬ）２０４（２０４Ａ〜２０４Ｄ）へのデータＩ／Ｏを制御する。
【００２０】
また、クラスタ構成管理部２０５は、クラスタ２０１の全体に跨る処理を制御する複数のクラスタコントローラ２０６（２０６Ａ〜２０６Ｃ）によって構成され、例えば管理ノード３からの管理操作に応じて、クラスタ構成を制御する。なお、図３に図示した構成は、本実施の形態に係るストレージシステムにおける構成の一部であり、全ての構成を示すものではない。例えば、Ｓｌａｖｅなボリューム（ＶＯＬ）２０４は図示されていない。
【００２１】
図３において、デュアルコントローラ２０２Ａは、互いにフェイルオーバーするＩ／Ｏコントローラ２０３ＡとＩ／Ｏコントローラ２０３Ｂとから構成される。Ｉ／Ｏコントローラ２０３ＡとＩ／Ｏコントローラ２０３Ｂは、Ａｃｔｉｖｅ／Ｐａｓｓｉｖｅの関係で動作する。例えば、通常時、Ｉ／Ｏコントローラ２０３ＡがＡｃｔｉｖｅであるとすれば、Ｉ／Ｏコントローラ２０３ＢはＰａｓｓｉｖｅであり、Ｉ／Ｏコントローラ２０３Ａで障害が発生した場合に使われる。
【００２２】
一方、デュアルコントローラ２０２Ｂは、互いにフェイルオーバーするＩ／Ｏコントローラ２０３ＣとＩ／Ｏコントローラ２０３Ｄとから構成されるが、Ｉ／Ｏコントローラ２０３ＣとＩ／Ｏコントローラ２０３Ｄは、通常時からともにＡｃｔｉｖｅで動作する（Ａｃｔｉｖｅ／Ａｃｔｉｖｅの関係）。
【００２３】
上記のように、図３には、動作種別の異なる２種類のデュアルコントローラ２０２Ａ，２０２Ｂを示したが、本実施の形態に係るストレージシステムは、ソフトウェア的にＡｃｔｉｖｅ／ＰａｓｓｉｖｅもしくはＡｃｔｉｖｅ／Ａｃｔｉｖｅのデュアルコントローラ２０２がクラスタリングされている構成であればよく、デュアルコントローラ２０２Ａ，２０２Ｂの動作種別や組合せが限定されるものではない。
【００２４】
（１−２）各種データ
図４は、メモリに記憶されているデータを説明するための図である。図４には、ストレージノード２のメモリ２２に記憶される、デュアルコントローラ２０２を構成するＩ／Ｏコントローラ２０３による処理で必要なデータの一例が示されている。
【００２５】
メモリ２２の記憶データは、Ｉ／Ｏコントローラ２０３単位で見ると、デュアルコントローラ２０２を構成する２つのＩ／Ｏコントローラ２０３が整合性の取れた情報を有する。具体的には例えば、デュアルコントローラ２０２Ａにおいて、ボリューム２０４Ａ，２０４Ｂに関する情報は、Ｉ／Ｏコントローラ２０３Ａ，２０３Ｂの両方で持つ。これにより、Ｉ／Ｏコントローラ２０３Ａ，２０３Ｂの片方で障害が発生して落ちたとしても、他方のＩ／Ｏコントローラが処理を継続することができる。
【００２６】
但し、各ストレージノード２のメモリ２２は、クラスタ全体（例えばストレージノード２Ａ〜２Ｃ）の情報を持つ必要はない。また、図４は、異なるデュアルコントローラ２０２Ａ，２０２Ｂにおいて同様のデータ内容が保持されることを限定するものではなく、各デュアルコントローラ２０２で異なる内容のデータが保持され得る。したがって例えば、デュアルコントローラ２０２Ａの一方を含むストレージノード２Ａのメモリ２２と、デュアルコントローラ２０２Ａ，２０２Ｂの一方を含むストレージノード２Ｂのメモリ２２とでは、保持する情報が部分的に異なっていてもよい。
【００２７】
図４には、メモリ２２が記憶するデータの具体例として、キャッシュ領域２２１、負荷情報管理テーブル２２２、ボリューム（ＶＯＬ）管理テーブル２２３、ミラーリング（Mirroring）管理テーブル２２４、イレーシャーコーディング（Erasure Coding）管理テーブル２２５、Ｉ／Ｏ処理モード適用範囲情報２２６、及びノード単位Ｉ／Ｏ処理モード情報２２７が示されている。
【００２８】
図５は、負荷情報管理テーブルのデータ構成例を説明するための図である。負荷情報管理テーブル２２２は、自ストレージノード２におけるＣＰＵ２１の負荷状況をコントローラ単位で示すデータテーブルである。図５に例示した負荷情報管理テーブル２２２の場合、当該テーブルによる管理対象のＩ／Ｏコントローラ２０３が制御可能な各ＣＰＵコア（ＣＰＵ  ＩＤ２２２１）について、その使用率（負荷２２２２）が示されている。負荷２２２２を参照することにより、負荷状態が過負荷であるか否かを判断できる。
【００２９】
図６は、ＶＯＬ管理テーブルのデータ構成例を説明するための図である。ＶＯＬ管理テーブル２２３は、自ストレージノード２におけるボリューム２０４（ドライブ２３）の使用状況をコントローラ単位で示すデータテーブルである。図６に例示したＶＯＬ管理テーブル２２３の場合、ボリュームの識別子（ＶＯＬ  ＩＤ２２３１）ごとに、ポートのＩＤ（ポートＩＤ２２３２）、論理ユニット番号（ＬＵＮ２２３３）、データの保護モードの種別を示すデータ保護モード２２３４、Ｉ／Ｏ処理に関する実行モードを示すＩ／Ｏ処理モード２２３５が示されている。
【００３０】
なお、データ保護モード２２３４について、本実施の形態では、ミラーリング（Mirroring）とイレーシャーコーディング（Erasure Coding）とを用いて説明する。ミラーリング及びイレーシャーコーディング（本例では特に分散イレーシャーコーディングを想定）によるデータ保護技術は周知技術であり、詳細な説明を省略するが、何れも、スケールアウト型のストレージシステムに適用する場合は、異なるストレージノード２のボリューム２０４（例えば、デュアルコントローラ２０３内の複数のＩ／Ｏコントローラ２０３が制御する別々のボリューム２０４）に、データを重複または分散して書込むことにより、データを保護し、信頼性を高めることができる。
【００３１】
そして、ＶＯＬ管理テーブル２２３においてデータ保護モード２２３４が「Mirroring」となっている場合は、後述する図７のミラーリング管理テーブル２２４を参照することにより、データの書込み先（または読込み先）を決定することができる。また、ＶＯＬ管理テーブル２２３においてデータ保護モード２２３４が「Erasure Coding」となっている場合は、後述する図８のイレーシャーコーディング管理テーブル２２５を参照することにより、データの書込み先（または読込み先）を決定することができる。
【００３２】
また、Ｉ／Ｏ処理モード２２３５には、通常時のＩ／Ｏ処理モードを意味する「通常（モード）」の他に、「高速（モード）」という種別が記載されている。本実施の形態では、通常モードよりもストレージサービスの機能性を低下・抑制（デグレ）することによって、Ｒｅａｄ／ＷｒｉｔｅのＩ／Ｏ処理を高速化する非常用のモードとして、「高速モード」が用意されている。また、詳細は図９を参照して後述するが、Ｉ／Ｏ処理モードの変更について、本実施の形態に係るストレージシステムでは、障害が発生してフェイルオーバーが行われる場合等に、所定の判定処理を経て、Ｉ／Ｏ処理モードを通常モードから高速モードに切り替えることができる。
【００３３】
ここで、本実施の形態における高速モードについて詳しく説明する。高速モードは、通常モードに比べてＩ／Ｏ処理におけるＩ／Ｏコントローラ２０３の処理負荷を低減させるＩ／Ｏ処理モードであり、具体的なストレージサービス機能の抑制例として、圧縮・重複排除を停止すること、及び、分散イレーシャーコーディングやミラーリング等によるデータ保護を停止することを挙げることができる。
【００３４】
まず、圧縮・重複排除は、データの容量消費の低減に効果的な技術であって、データのＩ／Ｏ処理において一般的に利用されている。但し、Ｉ／Ｏ処理の際にデータの圧縮・重複排除を実行することは、Ｉ／Ｏコントローラ２０３への処理負荷となる。
【００３５】
そこで、ノード障害時に、高速モードによってこの圧縮・重複排除を停止すれば、障害が回復するまでの間、ボリューム２０４（物理的なドライブ２３と考えてもよい）の容量消費の増加を許容する代わりに、Ｉ／Ｏコントローラ２０３の処理負荷を低減することができ、Ｉ／Ｏコントローラ２０３の処理能力を高めることができる。この結果、障害発生による機能停止によってストレージシステムのノードが減少したとしても、ストレージシステム全体で高速な処理を維持することに期待できる。
【００３６】
次に、分散イレーシャーコーディングやミラーリングは、データを冗長化して、他のボリューム２０４（またはドライブ２３）に分散または複製することによって、データの信頼性の向上に効果的なデータ保護技術であって、複数のストレージノードを備えて構成されるストレージシステムでは一般的に利用されている。しかし、当然ながらこれらのデータ保護を行うことは、Ｉ／Ｏコントローラ２０３への処理負荷となる。
【００３７】
そこで、ノード障害時に、高速モードによってこれらのデータ保護を停止すれば、障害が回復するまでの間、データ書込みの際に自ノードだけにデータを書き込むため、データの信頼性は低下する。しかし、その代わりに他のノードに書き込まない分、Ｉ／Ｏコントローラ２０３の処理負荷は大きく低減される。また、高速モードによってデータ保護の保護レベルを低下させるとしても、Ｉ／Ｏコントローラ２０３の処理負荷を低減することができる。したがって、ノード障害時に、高速モードによってこれらのデータ保護を停止（あるいはレベルを低下）すれば、障害が回復するまでの間、データの信頼性低下を許容する代わりに、Ｉ／Ｏコントローラ２０３の処理負荷の低減によって処理能力を高めることができる。この結果、障害発生による機能停止によってストレージシステムのノードが減少したとしても、ストレージシステム全体で高速な処理を維持することに期待できる。
【００３８】
以上のことから、以下の説明では、Ｉ／Ｏ処理モードを高速モードに変更したときに、圧縮・重複排除の停止、及び分散イレーシャーコーディングまたはミラーリングによるデータ保護の停止を行うとして説明する。なお、本実施の形態に係るストレージシステムにおいて、高速モードは、上記の全てを含むものに限定されず、Ｉ／Ｏコントローラ２０３の処理負荷を低減できる機能制限であればよい。例えば、圧縮・重複排除の停止、またはデータ保護の停止の一方だけが実施されるものであってもよい。
【００３９】
なお、ノード障害時に所定のボリューム２０４のＩ／Ｏ処理モードを高速モードに設定することによって、フェイルオーバー後のＩ／Ｏ処理におけるＩ／Ｏコントローラ２０３の処理負荷が、通常モードに設定されている場合よりも低減されることは、後述するＩ／Ｏ処理（データ読込み処理，データ書込み処理）の処理説明のなかで詳しく示される。
【００４０】
図７は、ミラーリング管理テーブルのデータ構成例を説明するための図である。ミラーリング管理テーブル２２４は、ミラーリングの管理情報であって、ミラーリングのデータ保護モードが設定されている場合に、データの書込み先／読込み先を決めるために参照されるテーブルである。図７の場合、ＬＢＡ（Logical Block Addressing）範囲２２４１ごとに、ミラーリングで対応するノードＩＤ（Mirror先ノードＩＤ２２４２）が示されている。
【００４１】
図８は、イレーシャーコーディング管理テーブルのデータ構成例を説明するための図である。イレーシャーコーディング管理テーブル２２５は、分散イレーシャーコーディングの管理情報であって、イレーシャーコーディングのデータ保護モードが設定されている場合に、データの書込み先／読込み先を決めるために参照されるテーブルである。図８の場合、ＬＢＡ（Logical Block Addressing）範囲２２５１ごとに、イレーシャーコーディングの対象グループ（Erasure Codingグループ２２５２）が示されている。
【００４２】
また、詳細なデータ構成は図示しないが、Ｉ／Ｏ処理モード適用範囲情報２２６は、Ｉ／Ｏ処理モード（通常モード／高速モード）の適用先を設定するための情報である。Ｉ／Ｏ処理モードの適用先は、Ｉ／Ｏコントローラ２０３ごとに設定され、ノード単位またはボリューム単位で任意に設定することができる。
【００４３】
Ｉ／Ｏ処理モード適用範囲情報２２６においてＩ／Ｏ処理モードの適用先を「ノード単位」と設定した場合、Ｉ／Ｏコントローラ２０３から制御可能な自ノードのボリューム２０４全体にＩ／Ｏ処理モードが適用される。ここでの「自ノード全体」について具体例を挙げて補足する。図３のストレージノード２Ａにおいて、Ｉ／Ｏコントローラ２０３Ａに関するＩ／Ｏ処理モード適用範囲情報２２６が「ノード単位」と設定されていた場合、Ｉ／Ｏコントローラ２０３Ａは、自身から見える自ノード全体として、Ｉ／Ｏコントローラ２０３Ａが制御するボリューム２０４全体、すなわちボリューム２０４Ａ，２０４Ｂに対して、Ｉ／Ｏ処理モードを適用する。したがって、仮に、ストレージノード２Ａに他のＩ／Ｏコントローラ２０３によって制御されるボリューム２０４が存在したとしても、当該ボリューム２０４はＩ／Ｏ処理モードの適用先から除外される。
【００４４】
一方、Ｉ／Ｏ処理モード適用範囲情報２２６においてＩ／Ｏ処理モードの適用先を「ボリューム単位」と設定した場合、Ｉ／Ｏ処理モードは、個々のボリューム２０４に適用される。上記の補足例を用いて具体的に述べると、Ｉ／Ｏコントローラ２０３Ａに関するＩ／Ｏ処理モード適用範囲情報２２６が「ボリューム単位」と設定されていた場合、Ｉ／Ｏコントローラ２０３Ａから見える個々のボリューム２０４Ａ，２０４Ｂに対して、別々にＩ／Ｏ処理モードが適用される。
【００４５】
また、詳細なデータ構成は図示しないが、ノード単位Ｉ／Ｏ処理モード情報２２７は、Ｉ／Ｏ処理モードがノード単位で適用される場合に、Ｉ／Ｏコントローラ２０３から見える自ノード全体に設定されるＩ／Ｏ処理モード（通常モードまたは高速モード）を示す情報である。すなわち、ノード単位Ｉ／Ｏ処理モード情報２２７に設定されたＩ／Ｏ処理モードは、Ｉ／Ｏ処理モード適用範囲情報２２６においてＩ／Ｏ処理モードの適用先が「ノード単位」と設定されている場合にのみ有効となり、Ｉ／Ｏ処理モード適用範囲情報２２６においてＩ／Ｏ処理モードの適用先が「ボリューム単位」と設定されている場合には、ノード単位Ｉ／Ｏ処理モード情報２２７の設定内容は効力をもたない。
【００４６】
以上が、Ｉ／Ｏコントローラ２０３による処理で必要な各種データの詳細な説明である。
【００４７】
次に、本実施の形態に係るストレージシステムにおいて実行される各種処理について、図３に示したストレージシステムの構成等を用いて詳しく説明する。
【００４８】
（１−３）Ｉ／Ｏ処理モード変更処理
図９は、Ｉ／Ｏ処理モード変更処理の処理手順例を示すフローチャートである。Ｉ／Ｏ処理モード変更処理は、クラスタ２０１内でノード（ストレージノード２）の障害が検知された場合に実行される処理である。ここでいう障害とは、例えば、当該ノードのボリューム２０４の一部または全てに対してＩ／Ｏ処理が不可能となる障害を意味する。本実施の形態に係るストレージシステムでは、このような障害が発生した場合、障害が発生したノードのＩ／Ｏコントローラ２０３から、デュアルコントローラ２０２を構成する他のＩ／Ｏコントローラ２０３へのフェイルオーバーが行われる。
【００４９】
図９の開始時点において、ストレージシステムには特段の障害は発生しておらず、クラスタ２０１内の各ボリューム２０４は、通常モードのＩ／Ｏ処理モードが設定されているとする。このとき、クラスタコントローラ２０６（クラスタ構成管理部２０５と置き換えてもよい）が、クラスタ２０１内でノード（ストレージノード２）の障害発生を監視している。なお、本実施の形態に係るストレージシステムでは、ノードの障害発生を監視する主体はクラスタコントローラ２０６に限定されるものではなく、既存の技術を利用して他の主体が行うようにしてもよい。例えば、各Ｉ／Ｏコントローラ２０３やデュアルコントローラ２０２が、クラスタ２０１内の自身以外のノード（他のノード）における障害発生の監視を行い、障害発生を検知した場合は他のＩ／Ｏコントローラ２０３に通知する等の構成であってもよい。
【００５０】
そして、ステップＳ１０１において、クラスタコントローラ２０６が、クラスタ２０１内でストレージノード２（例えば、図３のストレージノード２Ａ）の障害を検知したとする。このとき、クラスタコントローラ２０６は、障害を検知したストレージノード２ＡのＩ／Ｏコントローラ２０３Ａとデュアルコントローラ２０２Ａを構成している他ノードのＩ／Ｏコントローラ、すなわち、Ｉ／Ｏコントローラ２０３Ｂに対して、ステップＳ１０２以降の処理を実行するように指示する。
【００５１】
ステップＳ１０２において、Ｉ／Ｏコントローラ２０３Ｂは、自身に関する負荷情報管理テーブル２２２を参照し（図５参照）、自身が制御可能なＣＰＵコアの負荷状況が過負荷であるか否かを判定する。過負荷の判定基準には任意の閾値を設定することができるが、フェイルオーバーによってＩ／Ｏコントローラ２０３Ｂに処理負荷が集中したときに、テナントに提供可能なストレージ性能がＳＬＡを維持できない場合には過負荷と判定できるように、計算または経験等に基づいて所定の閾値を設定することが好ましい。本例では、図５において負荷２２２２が「７０％」以上であった場合に、過負荷と判定する。
【００５２】
ステップＳ１０２において過負荷と判定した場合は（ステップＳ１０２のＹＥＳ）、ステップＳ１０３に進む。一方、ステップＳ１０２において過負荷ではないと判定した場合は（ステップＳ１０２のＮＯ）、Ｉ／Ｏ処理モードを変更せず、通常モードのままＩ／Ｏ処理モード変更処理を終了する。
【００５３】
ステップＳ１０３において、Ｉ／Ｏコントローラ２０３Ｂは、自身に関するＩ／Ｏ処理モード適用範囲情報２２６を参照し、Ｉ／Ｏ処理モードの適用先が「ボリューム単位」と設定されているか否かを判定する。ボリューム単位と設定されていた場合は（ステップＳ１０３のＹＥＳ）、ステップＳ１０４に進み、ボリューム単位と設定されていなかった場合、すなわち「ノード単位」と設定されていた場合は（ステップＳ１０３のＮＯ）、ステップＳ１０６に進む。
【００５４】
ステップＳ１０４では、Ｉ／Ｏコントローラ２０３Ｂは、ストレージノード２において自身が制御可能なボリューム２０４のうちから、Ｉ／Ｏ処理モードを高速モードに変更するボリューム（モード変更ＶＯＬ）を選択する。ここで、モード変更ＶＯＬの選択数及び選択方法は特に限定されないが、例えば、過負荷の度合いに応じて、所定数の選択するボリューム２０４を決定することが考えられる。具体的には、ステップＳ１０２で確認した過負荷状態の負荷２２２２が高いほど、多数（または大容量）のモード変更ＶＯＬを選択するようにし、過負荷状態であっても負荷２２２２が比較的低ければ、モード変更ＶＯＬの選択数（または選択容量）を低減させる。そして、ステップＳ１０５では、ステップＳ１０４で選択したボリューム２０４（モード変更ＶＯＬ）のＩ／Ｏ処理モードを高速モードに変更し、Ｉ／Ｏ処理モード変更処理を終了する。
【００５５】
一方、ステップＳ１０６では、Ｉ／Ｏコントローラ２０３Ｂは、ストレージノード２において自身が制御可能なボリューム２０４の全体に対してＩ／Ｏ処理モードを高速モードに変更し、Ｉ／Ｏ処理モード変更処理を終了する。
【００５６】
以上が、本実施の形態におけるＩ／Ｏ処理モード変更処理の説明である。
【００５７】
次に、このようなＩ／Ｏ処理モード変更処理が行われるストレージシステムにおけるＩ／Ｏ処理として、データ読込み処理とデータ書込み処理について詳しく説明する。なお、以下の各Ｉ／Ｏ処理の説明では、一例として、ボリューム２０４のＩ／Ｏ処理モードが通常モードに設定されている場合には、当該ボリューム２０４におけるデータは圧縮・重複排除が行われ、かつ、分散イレーシャーコーディングまたはミラーリングの何れかによるデータ保護が行われるとする。一方、ボリューム２０４のＩ／Ｏ処理モードが高速モードに設定されている場は合、当該ボリューム２０４におけるデータは圧縮・重複排除が行われず、さらに上記のデータ保護も行われないとする。
【００５８】
（１−４）データ読込み処理
図１０は、データ読込み処理の処理手順例を示すフローチャートである。図１０に示されたデータ読込み処理は、コンピュートノード１からストレージノード２にデータの読込み要求（Ｒｅａｄ要求）が発行された場合に、ストレージノード２のＩ／Ｏコントローラ２０３が当該Ｒｅａｄ要求を受信して実行するデータ読込みの処理である。このデータ読込み処理は、正常時／障害時に拘わらず実行される。Ｉ／Ｏ処理モードは、正常時は全て通常モードに設定されており、障害時は、通常モードに設定されている場合と高速モードに設定されている場合とがあり得る。
【００５９】
図１０によればまず、ステップＳ２０１において、Ｉ／Ｏコントローラ２０３がＲｅａｄ要求を受信する。次に、Ｉ／Ｏコントローラ２０３は、ステップＳ２０１で受信したＲｅａｄ要求からＲｅａｄパラメタを抽出し（ステップＳ２０２）、読込み対象のデータ（Ｒｅａｄデータ）を保持しているボリューム２０４（Ｒｅａｄ元ＶＯＬ）を特定する（ステップＳ２０３）。
【００６０】
次に、ステップＳ２０４において、Ｉ／Ｏコントローラ２０３は、「Ｉ／Ｏ処理モード特定処理」を実行し、ステップＳ２０３で特定したボリューム２０４（Ｒｅａｄ元ＶＯＬ）に設定されたＩ／Ｏ処理モードを特定する。
【００６１】
図１１は、Ｉ／Ｏ処理モード特定処理の詳細な処理手順例を示すフローチャートである。図１１に示したＩ／Ｏ処理モード特定処理は、図１０のステップＳ２０４の処理に相当する。また、後述するデータ書込み処理においても、図１１に示したＩ／Ｏ処理モード特定処理が行われる（図１３のステップＳ５０４参照）。
【００６２】
図１１によればまず、ステップＳ３０１において、Ｉ／Ｏコントローラ２０３は、自身に関するＩ／Ｏ処理モード適用範囲情報２２６を参照し、Ｉ／Ｏ処理モードの適用先が「ボリューム単位」と設定されているか否かを判定する。
【００６３】
ステップＳ３０１においてＩ／Ｏ処理モードの適用先が「ボリューム単位」と設定されていた場合（ステップＳ３０１のＹＥＳ）、ボリューム２０４ごとに異なるＩ／Ｏ処理モードが設定されている可能性がある。そこで、Ｉ／Ｏコントローラ２０３は、ＶＯＬ管理テーブル２２３のＩ／Ｏ処理モード２２３５を参照することによって、対象のボリューム２０４（データ読込み処理の場合は、図１０のステップＳ２０３で特定したＲｅａｄ元ＶＯＬに相当し、後述するデータ書込み処理の場合は、図１３のステップＳ５０３で特定されるＷｒｉｔｅ先ＶＯＬに相当する）に設定されたＩ／Ｏ処理モードを特定する（ステップＳ３０２）。
【００６４】
一方、ステップＳ３０１においてＩ／Ｏ処理モードの適用先が「ボリューム単位」と設定されていなかった場合（ステップＳ３０１のＮＯ）、すなわち「ノード単位」と設定されていた場合には、Ｉ／Ｏコントローラ２０３から見える自ノード全体（全ボリューム２０４）で同じＩ／Ｏ処理モードが設定されている。そこで、Ｉ／Ｏコントローラ２０３は、ノード単位Ｉ／Ｏ処理モード情報２２７を参照することによって、自ノードのＩ／Ｏ処理モードを特定し、これは対象のボリューム２０４に設定されたＩ／Ｏ処理モードを意味する（ステップＳ３０３）。
【００６５】
ステップＳ３０２またはステップＳ３０３の処理が行われることにより、Ｉ／Ｏコントローラ２０３は、対象のボリューム２０４に設定されたＩ／Ｏ処理モードを特定できるため、Ｉ／Ｏ処理モード特定処理を終了する。
【００６６】
図１１を参照して詳述したように、ステップＳ２０４のＩ／Ｏ処理モード特定処理が終了すると、ステップＳ２０５において、Ｉ／Ｏコントローラ２０３は、ステップＳ２０３で特定したボリューム２０４（Ｒｅａｄ元ＶＯＬ）からＲｅａｄデータを読出す「Ｒｅａｄデータ読出し処理」を実行する。
【００６７】
図１２は、Ｒｅａｄデータ読出し処理の詳細な処理手順例を示すフローチャートである。図１２に示したＲｅａｄデータ読出し処理は、図１０のステップＳ２０５の処理に相当する。
【００６８】
図１２によればまず、ステップＳ４０１において、Ｉ／Ｏコントローラ２０３は、自ドライブ２３が正常であるか否かを判断する。この自ドライブ２３は、読込み対象のデータ（Ｒｅａｄデータ）を格納しているローカルドライブである。
【００６９】
ステップＳ４０１において自ドライブ２３が正常であった場合は（ステップＳ４０１のＹＥＳ）、ステップＳ４０２に進み、Ｉ／Ｏコントローラ２０３は、自ドライブ２３（ローカルドライブ）からＲｅａｄデータを読み出し、Ｒｅａｄデータ読出し処理を終了する。
【００７０】
一方、ステップＳ４０１において自ドライブ２３が異常であった場合は（ステップＳ４０１のＮＯ）、自ドライブ２３からＲｅａｄデータを読み出すことができないため、Ｉ／Ｏコントローラ２０３は、保護データ（あるいは冗長データ）からＲｅａｄデータを読み出すために、ステップＳ４０３以降の処理を行う。
【００７１】
ステップＳ４０３において、Ｉ／Ｏコントローラ２０３は、Ｉ／Ｏ処理モード特定処理（図１０のステップＳ２０４）による特定結果に基づいて、Ｒｅａｄ元ＶＯＬに設定されたＩ／Ｏ処理モードが高速モードであるか否かを判定する。
【００７２】
そして、ステップＳ４０３においてＩ／Ｏ処理モードが高速モードであった場合には（ステップＳ４０３のＹＥＳ）、Ｒｅａｄ元ＶＯＬはデータ保護がされていないことを意味する（詳細は、データ書込み処理で後述する）。したがって、この場合、Ｉ／Ｏコントローラ２０３は別のドライブ２３からＲｅａｄデータの保護データ（あるいは冗長データ）を読み出すことはできず、異常終了としてＲｅａｄデータ読出し処理を終了する。この結果、図１０に示すデータ読込み処理も異常終了となる。
【００７３】
一方、ステップＳ４０３においてＩ／Ｏ処理モードが高速モードではなかった場合、すなわち通常モードであった場合には（ステップＳ４０３のＮＯ）、Ｒｅａｄ元ＶＯＬがデータ保護されていること（本例では、分散イレーシャーコーディングまたはミラーリングの何れか）を意味する。この場合、Ｉ／Ｏコントローラ２０３は、ＶＯＬ管理テーブル２２３（特にデータ保護モード２２３４）を参照し、Ｒｅａｄ元ＶＯＬのデータ保護モードがイレーシャーコーディングであるか否かを判定する（ステップＳ４０４）。
【００７４】
ステップＳ４０４においてデータ保護モードがイレーシャーコーディングではなかった場合は（ステップＳ４０４のＮＯ）、ミラーリングでデータ保護されていることを意味するので、Ｉ／Ｏコントローラ２０３は、ミラーリング対象のドライブ２３（リモートドライブ）からＲｅａｄデータを読み出し（ステップＳ４０５）、Ｒｅａｄデータ読出し処理を終了する。
【００７５】
一方、ステップＳ４０４においてデータ保護モードがイレーシャーコーディングであった場合は（ステップＳ４０４のＹＥＳ）、Ｉ／Ｏコントローラ２０３は、イレーシャーコーディングによって分散保持されているＲｅａｄデータのイレーシャーコードデータを他のドライブ２３（リモートドライブ）から読み出し（ステップＳ４０６）、イレーシャーコードデータを用いてＲｅａｄデータを復元し（ステップＳ４０７）、Ｒｅａｄデータ読出し処理を終了する。
【００７６】
図１２を参照して詳述したように、ステップＳ２０５のＲｅａｄデータ読出し処理が終了すると、Ｉ／Ｏコントローラ２０３は、Ｒｅａｄデータを読み出したボリューム２０４に設定されたＩ／Ｏ処理モードが高速モードであるか否かを判定する（ステップＳ２０６）。この判定は、例えば図１２のステップＳ４０３の処理と同様である。
【００７７】
ステップＳ２０６においてＩ／Ｏ処理モードが高速モードであった場合（ステップＳ２０６のＹＥＳ）、Ｉ／Ｏコントローラ２０３は、Ｒｅａｄ要求を発行したコンピュートノード１に、ステップＳ２０５のＲｅａｄデータ読出し処理で読み出したＲｅａｄデータをそのまま送信する（ステップＳ２０７）。さらにＩ／Ｏコントローラ２０３は、Ｒｅａｄデータの送信完了後に、データ読込みの完了を意味するＲｅａｄ応答をコンピュートノード１に送信し（ステップＳ２０８）、データ読込み処理を終了する。
【００７８】
一方、ステップＳ２０６においてＩ／Ｏ処理モードが高速モードではなかった場合、すなわち通常モードであった場合（ステップＳ２０６のＮＯ）、ステップＳ２０５のＲｅａｄデータ読出し処理で読み出したＲｅａｄデータは圧縮されていることから、Ｉ／Ｏコントローラ２０３は、読み出したＲｅａｄデータを伸長する（ステップＳ２０９）。その後、Ｉ／Ｏコントローラ２０３は、Ｒｅａｄ要求を発行したコンピュートノード１に、伸長後のＲｅａｄデータを送信し（ステップＳ２０７）、送信後にＲｅａｄ応答を送信し（ステップＳ２０８）、データ読込み処理を終了する。
【００７９】
以上のように、本実施の形態におけるデータ読込み処理では、Ｒｅａｄデータを読み出したボリューム２０４のＩ／Ｏ処理モードが高速モードであった場合には（ステップＳ２０６のＹＥＳ）、ステップＳ２０９の伸長処理を実行しないことにより、Ｉ／Ｏコントローラ２０３に掛かる処理負荷を軽減させることができる。
【００８０】
（１−５）データ書込み処理
図１３は、データ書込み処理の処理手順例を示すフローチャートである。図１３に示されたデータ書込み処理は、コンピュートノード１からストレージノード２にデータの書込み要求（Ｗｒｉｔｅ要求）が発行された場合に、ストレージノード２のＩ／Ｏコントローラ２０３が当該Ｗｒｉｔｅ要求を受信して実行するデータ書込みの処理である。図１０に示したデータ読込み処理と同様、データ書込み処理は、正常時／障害時に拘わらず実行される。そしてＩ／Ｏ処理モードは、正常時は全て通常モードに設定されており、障害時は、通常モードに設定されている場合と高速モードに設定されている場合とがあり得る。
【００８１】
図１３によればまず、ステップＳ５０１において、Ｉ／Ｏコントローラ２０３がＷｒｉｔｅ要求を受信する。次に、Ｉ／Ｏコントローラ２０３は、ステップＳ５０１で受信したＷｒｉｔｅ要求からＷｒｉｔｅパラメタを抽出し（ステップＳ５０２）、書込みデータ（Ｗｒｉｔｅデータ）の書込み先となるボリューム２０４（Ｗｒｉｔｅ先ＶＯＬ）を特定する（ステップＳ５０３）。
【００８２】
次に、ステップＳ５０４において、Ｉ／Ｏコントローラ２０３は、「Ｉ／Ｏ処理モード特定処理」を実行し、ステップＳ５０３で特定したボリューム２０４（Ｗｒｉｔｅ先ＶＯＬ）に設定されたＩ／Ｏ処理モードを特定する。なお、Ｉ／Ｏ処理モード特定処理の詳細な処理手順は、図１１を参照しながら前述したため、説明を省略する。
【００８３】
次に、ステップＳ５０５において、Ｉ／Ｏコントローラ２０３は、ステップＳ５０４のＩ／Ｏ処理モード特定処理による特定結果に基づいて、Ｗｒｉｔｅ先ＶＯＬに設定されたＩ／Ｏ処理モードが高速モードであるか否かを判定する。
【００８４】
ステップＳ５０５においてＩ／Ｏ処理モードが高速モードであった場合には（ステップＳ５０５のＹＥＳ）、Ｉ／Ｏコントローラ２０３は、特段の処理（具体的には圧縮・重複排除）を行わずに、ステップＳ５０８に進み、「Ｗｒｉｔｅデータ書出し処理」を実行することにより、ステップＳ５０１のＷｒｉｔｅ要求で受信したＷｒｉｔｅデータをドライブ２３に書き込む。
【００８５】
一方、ステップＳ５０５においてＩ／Ｏ処理モードが高速モードではなかった場合、すなわち通常モードであった場合には（ステップＳ５０５のＮＯ）、Ｗｒｉｔｅデータをドライブ２３に書き込む前に、Ｗｒｉｔｅデータに対する圧縮・重複排除を実行する必要がある。そこでＩ／Ｏコントローラ２０３は、Ｗｒｉｔｅデータを重複排除し（ステップＳ５０６）、さらに重複排除後のＷｒｉｔｅデータを圧縮する（ステップＳ５０７）。これらの圧縮・重複排除により、ＷｒｉｔｅデータのデータサイズをステップＳ５０１のＷｒｉｔｅ要求で受信したときよりも小さくすることができる。そして、Ｉ／Ｏコントローラ２０３は、この圧縮・重複排除後のＷｒｉｔｅデータを用いて、ステップＳ５０８の「Ｗｒｉｔｅデータ書出し処理」を実行する。
【００８６】
図１４は、Ｗｒｉｔｅデータ書出し処理の詳細な処理手順例を示すフローチャートである。図１４に示したＷｒｉｔｅデータ書出し処理は、図１３のステップＳ５０８の処理に相当する。
【００８７】
図１４によればまず、ステップＳ６０１において、Ｉ／Ｏコントローラ２０３は、自ドライブ２３が正常であるか否かを判断する。この自ドライブ２３は、通常時に書込みデータ（Ｗｒｉｔｅデータ）の書込み先となるローカルドライブである。
【００８８】
ステップＳ６０１において自ドライブ２３が正常であった場合は（ステップＳ６０１のＹＥＳ）、ステップＳ６０２に進み、Ｉ／Ｏコントローラ２０３は、Ｗｒｉｔｅデータを自ドライブ２３（ローカルドライブ）に書き込み、ステップＳ６０３に進む。
【００８９】
そしてステップＳ６０３では、Ｉ／Ｏコントローラ２０３は、Ｉ／Ｏ処理モード特定処理（図１３のステップＳ５０４）による特定結果に基づいて、Ｗｒｉｔｅ先ＶＯＬに設定されたＩ／Ｏ処理モードが高速モードであるか否かを判定する。ステップＳ６０３においてＩ／Ｏ処理モードが高速モードであった場合には（ステップＳ６０３のＹＥＳ）、データ保護処理（具体的にはイレーシャーコーディングまたはミラーリング）を行わずに、Ｗｒｉｔｅデータ書出し処理を終了する。一方、ステップＳ６０３においてＩ／Ｏ処理モードが高速モードではなかった場合、すなわち通常モードであった場合には（ステップＳ６０３のＮＯ）、Ｗｒｉｔｅデータに対するデータ保護を実行するために、ステップＳ６０５に進む。
【００９０】
一方、ステップＳ６０１において自ドライブ２３が異常であった場合は（ステップＳ６０１のＮＯ）、自ドライブ２３にＷｒｉｔｅデータを書き込むことができず、ステップＳ６０４に進む。
【００９１】
そしてステップＳ６０４では、Ｉ／Ｏコントローラ２０３は、Ｉ／Ｏ処理モード特定処理（図１３のステップＳ５０４）による特定結果に基づいて、Ｗｒｉｔｅ先ＶＯＬに設定されたＩ／Ｏ処理モードが高速モードであるか否かを判定する。ステップＳ６０４においてＩ／Ｏ処理モードが高速モードであった場合には（ステップＳ６０４のＹＥＳ）、Ｉ／Ｏコントローラ２０３はＷｒｉｔｅデータを何れのドライブ２３にも書き込むことができないため、異常終了としてＷｒｉｔｅデータ書出し処理を終了する。この結果、図１３に示すデータ書込み処理も異常終了となる。一方、ステップＳ６０４においてＩ／Ｏ処理モードが高速モードではなかった場合、すなわち通常モードであった場合には（ステップＳ６０４のＮＯ）、データ保護を実行することによってＷｒｉｔｅデータを別のドライブ２３（リモートドライブ）に書き込むために、ステップＳ６０５に進む。
【００９２】
ステップＳ６０５では、Ｉ／Ｏコントローラ２０３は、ＶＯＬ管理テーブル２２３（特にデータ保護モード２２３４）を参照し、Ｗｒｉｔｅ先ＶＯＬのデータ保護モードがイレーシャーコーディングであるか否かを判定する。
【００９３】
ステップＳ６０５においてデータ保護モードがイレーシャーコーディングであった場合は（ステップＳ６０５のＹＥＳ）、Ｉ／Ｏコントローラ２０３は、Ｗｒｉｔｅデータのイレーシャーコードデータを生成し（ステップＳ６０６）、生成したイレーシャーコードデータをイレーシャーコーディングによる分散保持を行う他のドライブ２３（リモートドライブ）に書き込み（ステップＳ６０７）、Ｗｒｉｔｅデータ書出し処理を終了する。
【００９４】
一方、ステップＳ６０５においてデータ保護モードがイレーシャーコーディングではなかった場合は（ステップＳ６０５のＮＯ）、ミラーリングでデータ保護されることを意味するので、Ｉ／Ｏコントローラ２０３は、Ｗｒｉｔｅデータをミラーリング対象のドライブ２３（リモートドライブ）に書き込み（ステップＳ６０８）、Ｗｒｉｔｅデータ書出し処理を終了する。
【００９５】
そして、図１４を参照して詳述したように、ステップＳ５０８のＷｒｉｔｅデータ書出し処理が終了すると、Ｉ／Ｏコントローラ２０３は、Ｗｒｉｔｅ要求を発行したコンピュートノード１に、データ書込みの完了を意味するＷｒｉｔｅ応答を送信し（ステップＳ５０９）、データ書込み処理を終了する。
【００９６】
以上のように、本実施の形態におけるデータ書込み処理では、Ｗｒｉｔｅデータが書き込まれる予定のボリューム２０４のＩ／Ｏ処理モードが高速モードであった場合には、ステップＳ５０８の重複排除処理やステップＳ５０９の圧縮処理を実行しないことにより、Ｉ／Ｏコントローラ２０３に掛かる処理負荷を軽減させることができる。また、図１４のＷｒｉｔｅデータ書出し処理で説明したように、Ｗｒｉｔｅデータが書き込まれたドライブ２３のＩ／Ｏ処理モードが高速モードであった場合には（ステップＳ６０３のＹＥＳ）、Ｗｒｉｔｅデータに対してイレーシャーコーディングやミラーリングによるデータ保護を実行しないことにより、Ｉ／Ｏコントローラ２０３に掛かる処理負荷を軽減させることができる。
【００９７】
（１−６）まとめ
以上のように、第１の実施の形態では、ノードで障害が発生した際に、図９のステップＳ１０２〜Ｓ１０６に示したＩ／Ｏ処理モード変更処理を行うことにより、フェイルオーバーによって負荷が集中することが想定されるＩ／Ｏコントローラ２０３Ｂの負荷状態に基づいて、過負荷状態であれば、Ｉ／Ｏコントローラ２０３Ｂが制御可能なボリューム２０４の少なくとも何れかに対して、Ｉ／Ｏ処理モードをストレージサービスの機能性を抑制する高速モードに変更する。この結果、Ｉ／Ｏコントローラ２０３Ｂにおける処理負荷は通常モードの場合よりも低減されるため、Ｉ／Ｏコントローラ２０３Ａのフェイルオーバーが行われても、Ｉ／Ｏコントローラ２０３Ｂは、ストレージ性能のＳＬＡを維持しながら、ストレージサービスを継続して提供することができる。さらにこのとき、ＳＬＡを維持するために余剰ストレージリソースを追加する必要もない。
【００９８】
また一方で、第１の実施の形態によるＩ／Ｏ処理モード変更処理では、ノードで障害が発生しても、デュアルコントローラ２０２を構成する他のノード（Ｉ／Ｏコントローラ２０３Ｂ）の処理能力に余裕がある場合は、フェイルオーバーによって負荷が集中したとしてもＳＬＡを維持できると考えられるため、ステップＳ１０２のＮＯで説明したように、Ｉ／Ｏ処理モードを通常モードから変更しない。この結果、Ｉ／Ｏコントローラ２０３Ｂは、障害時にフェイルオーバーが行われても、ストレージサービスの機能性を低下させることなく、ＳＬＡを維持することができる。またこの場合も、ＳＬＡを維持するために余剰ストレージリソースを追加する必要はない。
【００９９】
このように、Ｉ／Ｏ処理モード変更処理によって、ストレージ性能のＳＬＡを維持できる範囲内では高速モードへの切替を行わないことにより、高速モードによる機能性の低下をできるだけ抑えながらも、余剰ストレージリソースを新たに追加することなく、ストレージ性能のＳＬＡを維持しながら、ストレージサービスを継続して提供することができる。
【０１００】
かくして、第１の実施の形態に係るストレージシステムによれば、障害発生時にノードが使用不可になったとしても、障害時の性能維持のためにノード内に多くの余剰ストレージリソースを持つことなく、ストレージリソースを効率よく利用して、テナントに提供するストレージ性能のＳＬＡを維持することができるため、ＩａａＳ／ＰａａＳの運用に必要な余剰ストレージリソースを低減する効果が得られる。
【０１０１】
（２）第２の実施の形態
第２の実施の形態に係るストレージシステムは、第１の実施の形態に係るストレージシステムを基にして、データ保護の性能低下を抑制する改良を加えたものである。以下に詳しく説明する。
【０１０２】
図１５は、第２の実施の形態に係るストレージシステムにおけるソフトウェアのアーキテクチャの一例を示すブロック図である。図１５に示した構成のうち、第１の実施の形態で図３に示した構成と共通するものについては、説明を省略する。また、第２の実施の形態に係るストレージシステムの全体構成及びハードウェア構成は、図１及び図２と同様であり、図示を省略する。
【０１０３】
図１５において図３と異なる点として、まず、アプリ１０１Ａ〜１０１Ｃが、それぞれミドル１０２Ａ〜１０２Ｃ上で動作するように構成されている。アプリ１０１がミドル１０２上で動作する場合、アプリ１０１からストレージノード２側へのＩ／Ｏ要求は、ミドルウェア１０２を介して発行される。また、アプリ１０１Ｄは、単独で動作するアプリケーションであり、ボリューム２０４Ｄのみを使用する。
【０１０４】
また、図１５によれば、コンピュートノード１側において、ミドルウェア１０２Ａ，１０２Ｂ，１０２Ｃがレプリケーションを実行することが示されている。すなわち、ミドルウェア１０２Ａは、ミドルウェア１０２Ｂ，１０２Ｃとの間で互いにデータを複製し、同期する。このレプリケーションにより、例えば図１５において、アプリ１０１Ａ（またはアプリ１０１Ｂ，１０１Ｃ）の関連データは、ボリューム２０４Ａ，２０４Ｂ，２０４Ｃで複製されて保持される。ボリューム２０４側から見たとき、このような状況を、アプリレベルレプリケーションがある（Ｙｅｓ）と称する。一方、図１５においてアプリ１０１Ｄは、ミドルウェア１０２によるレプリケーションの対象とはなっておらず、ボリューム２０４Ｄにのみ関連データが保持される。ボリューム２０４側から見たとき、このような状況を、アプリレベルレプリケーションがない（Ｎｏ）と称する。また図示はしないが、自身でデータ保護を行わないミドルウェア１０２も存在し得る。
【０１０５】
そして第２の実施の形態では、図４に例示したストレージノード２のメモリ２２が保持するデータのうち、ＶＯＬ管理テーブル２２３を、新たなデータ項目を有するＶＯＬ管理テーブル２２８に置き換える。
【０１０６】
図１６は、第２の実施の形態におけるＶＯＬ管理テーブルのデータ構成例を説明するための図である。図１６に示したＶＯＬ管理テーブル２２８のうち、ＶＯＬ  ＩＤ２２８１〜Ｉ／Ｏ処理モード２２８５までのデータ項目は、図４に示した同名称の項目に対応するものであり、説明を省略する。
【０１０７】
ＶＯＬ管理テーブル２２８のアプリレベルレプリケーション２２２８には、ＶＯＬ  ＩＤ２２８１に対応するボリューム２０４について、上述したアプリレベルレプリケーションの有無（Ｙｅｓ／Ｎｏ）が示される。具体的には例えば、図１５において、ボリューム２０４Ａ〜２０４Ｃはアプリレベルレプリケーションが「Ｙｅｓ」となり、ボリューム２０４Ｄは「Ｎｏ」となる。
【０１０８】
次に、第２の実施の形態に係るストレージシステムにおいて実行される各種処理について説明する。
【０１０９】
第２の実施の形態では、Ｉ／Ｏ処理モード変更処理の一部について、図９に例示した第１の実施の形態とは異なる処理手順で実行される。具体的には、図９のステップＳ１０４における「Ｉ／Ｏ処理モードを高速モードに変更するボリューム２０４を選択する」という処理（Ｉ／Ｏ処理モード変更ＶＯＬ選択処理）について、Ｉ／Ｏコントローラ２０３が第１の実施の形態とは異なる処理手順で実行する。なお、データ読込み処理やデータ書込み処理については、第１の実施の形態と同様の処理手順で実行することができるため、詳細な説明は省略する（図１０〜図１４参照）。
【０１１０】
図１７は、Ｉ／Ｏ処理モード変更ＶＯＬ選択処理の処理手順例を示すフローチャートである。Ｉ／Ｏ処理モード変更ＶＯＬ選択処理は、クラスタ２０１内でノード（ストレージノード２）の障害が検知された場合に実行されるＩ／Ｏ処理モード変更処理のなかの一処理であり、障害によるフェイルオーバー先のＩ／Ｏコントローラ２０３によって実行される。なお、図１７では、簡便のために、ストレージノード２において各ボリューム２０４が同サイズで構築されてクラスタリングされているという条件下で、処理手順を説明する。仮にボリューム２０４のサイズが異なるような場合には、後述する選択ＶＯＬ数を用いるのではなく、例えば、合計サイズを計算しながら高速モードに変更するボリュームを選択していき、必要なサイズを確保するまでボリューム選択を続ける等の処理を行えばよい。
【０１１１】
図１７によればまず、Ｉ／Ｏコントローラ２０３は、Ｉ／Ｏ処理モードを高速モードに変更するボリューム（モード変更ＶＯＬ）の選択数を決定する（ステップＳ７０１）。そして、ステップＳ７０２では、Ｉ／Ｏコントローラ２０３は、所定のパラメタに、ステップＳ７０１で決定したモード変更ＶＯＬの選択数（選択ＶＯＬ数）をセットする。
【０１１２】
次に、Ｉ／Ｏコントローラ２０３は、自身が制御可能な全てのボリューム２０４を順次、処理対象とし、ステップＳ７０６の終了条件を満たすまで、ステップＳ７０３〜ステップＳ７０６のループ処理を実行する。
【０１１３】
ステップＳ７０４では、Ｉ／Ｏコントローラ２０３は、ＶＯＬ管理テーブル２２８を参照して、処理対象としているボリューム２０４におけるアプリレベルレプリケーションの有無を判定する。ステップＳ７０４においてアプリレベルレプリケーションがある（Ｙｅｓ）の場合は、当該ボリューム２０４をモード変更ＶＯＬに選択し（ステップＳ７０５）、パラメタの選択ＶＯＬ数を１減算する（ステップＳ７０６）。その後、ステップＳ７０７に進む。一方、ステップＳ７０４においてアプリレベルレプリケーションがない（Ｎｏ）の場合は、そのままステップＳ７０７に進む。
【０１１４】
ステップＳ７０７では、ループ処理の終了条件を確認し、終了条件を満たしていない場合は、ステップＳ７０３に戻り、次のボリューム２０４を処理対象としてループ処理を繰り返す。具体的なループ処理の終了条件は、パラメタの選択ＶＯＬ数が０となっていること、あるいはＩ／Ｏコントローラ２０３が制御可能な全てのボリューム２０４についてループ処理を行ったことである。ステップＳ７０３〜Ｓ７０７のループ処理によって、アプリレベルレプリケーションがあるボリューム２０４を優先的にモード変更ＶＯＬに選択することができる。そして、ループ処理の終了条件を満たした場合は、ステップＳ７０８に進む。
【０１１５】
ステップＳ７０８では、パラメタの選択ＶＯＬ数が０であるか否かを判定する。ステップＳ７０８においてパラメタの選択ＶＯＬ数が０以外であった場合（ステップＳ７０８のＮＯ）、さらにモード変更ＶＯＬを選択する必要があるため、Ｉ／Ｏコントローラ２０３は、自身が制御可能な全てのボリューム２０４のうちのモード変更ＶＯＬに選択されていないもの（言い換えれば、アプリレベルレプリケーションがないボリューム２０４）から１つを選び、当該ボリューム２０４をモード変更ＶＯＬに選択する（ステップＳ７０９）。そして、パラメタの選択ＶＯＬ数を１減算し（ステップＳ７１０）、ステップＳ７０８に戻る。
【０１１６】
一方、ステップＳ７０８においてパラメタの選択ＶＯＬ数が０であった場合は（ステップＳ７０８のＹＥＳ）、ステップＳ７０１で決定した選択ＶＯＬ数の分だけ、モード変更ＶＯＬが選択されたことを意味するので、Ｉ／Ｏ処理モード変更ＶＯＬ選択処理を終了する。
【０１１７】
以上のように、ステップＳ７０１〜Ｓ７１０に示したＩ／Ｏ処理モード変更ＶＯＬ選択処理が実行されることにより、Ｉ／Ｏコントローラ２０３は、自身が制御可能なボリューム２０４のうちから、レプリケーションが行われているボリュームを積極的に、そして、レプリケーションが行われていないボリュームを消極的に、高速モードに変更する対象（モード変更ＶＯＬ）として選択することができる。
【０１１８】
なお、図１７の処理手順は一例であって、データの保護性が高いボリューム２０４を優先的にモード変更ＶＯＬとして選択するような処理であれば、他の処理手順であってもよい。例えば、アプリレベルに応じて詳細な優先度を付し、その優先度に応じてモード変更ＶＯＬを選択していくようにする等であってもよい。
【０１１９】
そして、第２の実施の形態では、上述したＩ／Ｏ処理モード変更ＶＯＬ選択処理を踏まえてＩ／Ｏ処理モード変更処理が実行されることで、レプリケーションによるデータ保護が行われているボリューム２０４に対して優先的に、Ｉ／Ｏ処理モードを高速モードに変更することができる。
【０１２０】
ここで、レプリケーションによるデータ保護は、コンピュートノード１側で（ミドル１０２によって）実行制御されるデータ保護である。したがって、ストレージノード２側のＩ／Ｏ処理モードが高速モードに変更されて、例えばボリューム２０４Ａに対するイレーシャーコーディングやミラーリング等のデータ保護が行われないとしても、レプリケーションによって他のボリューム２０４Ｂ，２０４Ｃにコピーが残されている。すなわち、レプリケーション有りのミドル１０２Ａ〜１０２Ｃ（アプリ１０１Ａ〜１０１Ｃ）によって使用されるボリューム２０４Ａ〜２０４Ｃの場合は、コンピュートノード１側でデータの信頼性が確保されていることから、ストレージノード２側でＩ／Ｏ処理モードをデータの信頼性が低下する高速モードに変更したとしても、ストレージシステム全体においてデータの信頼性低下を抑制することができる。一方、アプリ１０１Ｄによって使用されるボリューム２０４Ｄの場合は、ミドルウェア１０２によるレプリケーションによってデータ保護が行われないことから、ボリューム２０４ＤのＩ／Ｏ処理モードを高速モードに変更してしまうと、データは複製されず、ストレージシステム全体におけるデータの信頼性が低下してしまう。
【０１２１】
これらのことから、第２の実施の形態に係るストレージシステムによれば、障害発生時にＩ／Ｏ処理モード変更処理を実行することにより、ストレージシステム全体を考慮した場合にデータの信頼性低下・可用性低下を許容できるボリューム２０４に対して積極的にＩ／Ｏ処理モードを高速モードに変更することができる一方、データの信頼性低下・可用性低下を許容し難いボリューム２０４に対しては消極的にＩ／Ｏ処理モードを高速モードに変更することができる。
【０１２２】
かくして、第２の実施の形態に係るストレージシステムによれば、ストレージシステム全体の可用性・信頼性への影響を最小化しながら、高速モードの設定によるストレージサービスの機能性の低下（データの信頼性低下）を抑制することができ、Ｉ／Ｏコントローラ２０３の処理負荷を低減することができる。また、第１の実施の形態と同様の効果も得られる。
【０１２３】
以上、第１及び第２の実施の形態で説明したように、本発明のストレージシステム及びストレージシステム制御方法によれば、障害発生時にノードが使用不可になったとしても、障害時の性能維持のためにノード内に多くの余剰ストレージリソースを持つことなく、ストレージリソースを効率よく利用して、テナントに提供するストレージ性能のＳＬＡを維持することができる。
【０１２４】
そして上記効果を鑑みると、以下のようなストレージリソースの効率的な運用を実施することもできる。
【０１２５】
例えば、ストレージシステムにおける１ノード当りの性能（スペック）を低機能にしても、高速モードを効果的に使用することにより、従来と同等のＳＬＡを維持できることから、比較的低スペックのサーバに切り替えることができる。また例えば、ストレージシステムにおいてサーバのスペックを変えずにノード数を減らすこともできる。あるいは、サーバのスペック及びノード数を変えない場合には、従来よりも高い処理負荷でも運用が可能となるので、運用に必要なクラスタ数を減らすことができる。
【０１２６】
そして、上記の何れの場合も、ストレージシステム及びそのサービス運用に掛かるコストを抑制する効果が得られるため、低コストでテナントに対するＳＬＡを維持することができ、ＩａａＳ／ＰａａＳ事業におけるＱｏＳ（Quality of Service）の保証に有効となる。
【０１２７】
なお、本発明は上記した実施の形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。各実施の形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１２８】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０１２９】
また、各図面において、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実施には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１３０】
１（１Ａ〜１Ｃ）  コンピュートノード
２（２Ａ〜２Ｃ）  ストレージノード
３      管理ノード
４，５，６  ネットワーク
２１    ＣＰＵ
２２    メモリ
２３    ドライブ
２５    ＳＡＮポート
２６    管理ポート
１０１（１０１Ａ〜１０１Ｄ）  アプリケーション（アプリ）
１０２（１０２Ａ〜１０２Ｃ）  ミドルウェア（ミドル）
２０１  クラスタ
２０２（２０２Ａ，２０２Ｂ）  デュアルコントローラ
２０３（２０３Ａ〜２０３Ｄ）  Ｉ／Ｏコントローラ
２０４（２０４Ａ〜２０４Ｄ）  ボリューム
２０５  クラスタ構成管理部
２０６（２０６Ａ〜２０６Ｃ）  クラスタコントローラ
２２１  キャッシュ領域
２２２  負荷情報管理テーブル
２２３，２２８  ＶＯＬ管理テーブル
２２４  ミラーリング管理テーブル
２２５  イレーシャーコーディング管理テーブル
２２６  Ｉ／Ｏ処理モード適用範囲情報
２２７  ノード単位Ｉ／Ｏ処理モード情報
【図１】
2020101949.tif 000003
【図２】
2020101949.tif 000004
【図３】
2020101949.tif 000005
【図４】
2020101949.tif 000006
【図５】
2020101949.tif 000007
【図６】
2020101949.tif 000008
【図７】
2020101949.tif 000009
【図８】
2020101949.tif 000010
【図９】
2020101949.tif 000011
【図１０】
2020101949.tif 000012
【図１１】
2020101949.tif 000013
【図１２】
2020101949.tif 000014
【図１３】
2020101949.tif 000015
【図１４】
2020101949.tif 000016
【図１５】
2020101949.tif 000017
【図１６】
2020101949.tif 000018
【図１７】
2020101949.tif 000019