(57)【要約】      （修正有）【課題】高い可用性を有し、高速なフェイルオーバーを実現するスケールアウト型のストレージシステムを提供する。【解決手段】ストレージシステム１００において、２以上のノード１３０はそれぞれ、クラスタコントローラ１３１Ａ、１３１Ｂと、ノードコントローラ１３２Ａ、１３２Ｂと、自ノード内のプロセス間でサブクラスタを構成するとともに、他のノードにおけるActive／Passiveの対応プロセスと同期する、複数のサブクラスタ１３３Ａ〜１３４Ｂと、不揮発なデータストアＳＯＤＢ１３５Ａ、１３５Ｂとを備える。ストレージシステムの構成情報は、ＳＯＤＢのグローバル構成情報と、サブクラスタのローカル構成情報１３６Ａ、１３６Ｂに分割保持される。このとき稼働系のサブクラスタ１３３Ａは、ＳＯＤＢ１３５ＡにアクセスすることなくＩ／Ｏ処理を実施できる。【選択図】図１
2020009336.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードを連結してクラスタを構築したスケールアウト型のストレージシステムであって、
前記複数のノードのうち少なくとも２以上のノードはそれぞれ、
前記クラスタの全体に跨る処理を制御するクラスタコントローラと、
自ノードに閉じた処理を制御するノードコントローラと、
自ノード内のＩ／Ｏ処理を実施するプロセスであって、自ノード内のプロセス間でサブクラスタを構成するとともに、他の前記ノードにおける稼働系／待機系の対応プロセスと同期する、複数のサブクラスタプロセスと、
前記クラスタの全体で共有される不揮発なデータストアと、
を備え、
前記データストアが、前記ストレージシステムの構成情報のうち、前記クラスタの全体で共有が必要な情報を含む構成情報をグローバル構成情報として保持し、
前記サブクラスタプロセスが、前記ストレージシステムの構成情報のうち、自サブクラスタプロセスが動作するために必要な構成情報をローカル構成情報として保持し、
稼働系の前記サブクラスタプロセスが、前記データストアにアクセスすることなく前記Ｉ／Ｏ処理を実施可能である
ことを特徴とするストレージシステム。
【請求項２】
前記Ｉ／Ｏ処理を実施中の稼働系の前記サブクラスタプロセスを備える前記ノードが停止または稼働不可状態になった場合に、他の前記ノードの１つにおいて当該サブクラスタプロセスに対応する待機系の前記サブクラスタプロセスを稼働系に切り替え、
前記稼働系に切り替えられた前記サブクラスタプロセスは、自身が保持する前記ローカル構成情報を用いて前記Ｉ／Ｏ処理の実施を引き継ぐ
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記グローバル構成情報を更新する場合には、当該グローバル構成情報の更新とあわせて、複数の前記ローカル構成情報のうち、当該更新の内容に対応する情報を含む特定のローカル構成情報を更新する
ことを特徴とする請求項１または請求項２に記載のストレージシステム。
【請求項４】
前記グローバル構成情報には、前記複数のサブクラスタプロセスのそれぞれが稼働系であるか待機系であるかを識別可能な制御情報が含まれ、
前記グローバル構成情報の更新が要求された場合に、
前記クラスタコントローラが、前記グローバル構成情報を更新し、さらに、前記制御情報に基づいて、前記特定のローカル構成情報を保持する稼働系の前記サブクラスタプロセスを特定し、
前記特定されたサブクラスタプロセスを備える前記ノードの前記ノードコントローラが、前記特定のローカル構成情報を前記グローバル構成情報の更新内容で更新する
ことを特徴とする請求項３に記載のストレージシステム。
【請求項５】
複数のノードを連結してクラスタが構築されたスケールアウト型のストレージシステムの構成情報を制御する構成情報制御方法であって、
前記ストレージシステムにおいて前記複数のノードのうち少なくとも２以上のノードはそれぞれ、
前記クラスタの全体に跨る処理を制御するクラスタコントローラと、
自ノードに閉じた処理を制御するノードコントローラと、
自ノード内のＩ／Ｏ処理を実施するプロセスであって、自ノード内のプロセス間でサブクラスタを構成するとともに、他の前記ノードにおける稼働系／待機系の対応プロセスと同期する、複数のサブクラスタプロセスと、
前記クラスタの全体で共有される不揮発なデータストアと、
を備え、
前記データストアが、前記ストレージシステムの構成情報のうち、前記クラスタの全体で共有が必要な情報を含む構成情報をグローバル構成情報として保持し、
前記サブクラスタプロセスが、前記ストレージシステムの構成情報のうち、自サブクラスタプロセスが動作するために必要な構成情報をローカル構成情報として保持し、
稼働系の前記サブクラスタプロセスが、前記データストアにアクセスすることなく前記Ｉ／Ｏ処理を実施可能とする
ことを特徴とする構成情報制御方法。
【請求項６】
前記Ｉ／Ｏ処理を実施中の稼働系の前記サブクラスタプロセスを備える前記ノードが停止または稼働不可状態になった場合に、他の前記ノードの１つにおいて当該サブクラスタプロセスに対応する待機系の前記サブクラスタプロセスを稼働系に切り替える切替ステップと、
前記切替ステップで前記稼働系に切り替えられた前記サブクラスタプロセスが、自身が保持する前記ローカル構成情報を用いて前記Ｉ／Ｏ処理の実施を引き継ぐ引継ステップと、
を備えることを特徴とする請求項５に記載の構成情報制御方法。
【請求項７】
前記グローバル構成情報を更新する場合には、当該グローバル構成情報の更新とあわせて、複数の前記ローカル構成情報のうち、当該更新の内容に対応する情報を含む特定のローカル構成情報を更新する
ことを特徴とする請求項５または請求項６に記載の構成情報制御方法。
【請求項８】
前記グローバル構成情報には、前記複数のサブクラスタプロセスのそれぞれが稼働系であるか待機系であるかを識別可能な制御情報が含まれ、
前記グローバル構成情報の更新が要求された場合に、
前記クラスタコントローラが、前記グローバル構成情報を更新するグローバル構成情報更新ステップと、
前記グローバル構成情報更新ステップとともに、前記クラスタコントローラが、前記制御情報に基づいて、前記特定のローカル構成情報を保持する稼働系の前記サブクラスタプロセスを特定するサブクラスタプロセス特定ステップと、
前記サブクラスタプロセス特定ステップによって特定されたサブクラスタプロセスを備える前記ノードの前記ノードコントローラが、前記特定のローカル構成情報を前記グローバル構成情報の更新内容で更新するグローバル構成情報更新ステップと、
をさらに備える
ことを特徴とする請求項７に記載の構成情報制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及び構成情報制御方法に関し、複数のノードがクラスタ化されて構成されたスケールアウト型のストレージシステムにおいてその構成情報を制御するストレージシステム及び構成情報制御方法に適用して好適なものである。
【背景技術】
【０００２】
近年、複数のノードを連結してクラスタを構築したスケールアウト型のストレージシステムが注目されている。スケールアウト型のストレージシステムは、複数のノードを連結して１つのファイルシステムとして管理可能にしたものであり、システムを停止することなくノードを追加可能なことから、高い拡張性や管理性を有している。また、スケールアウト型のストレージシステムは、複数のノード間でＩ／Ｏを処理するプロセスをクラスタ化することによって、あるノードが障害等で停止しても、待機系のプロセスで処理を引き継ぐことが可能となり、Ｉ／Ｏの継続（フェイルオーバー）を実現することができることから、従来のストレージシステムに比べて可用性も高い。
【０００３】
例えば特許文献１には、スケールアウト型のストレージシステムにおけるノードの管理方法が開示されている。詳しくは、特許文献１のノード管理方法では、スケールアウト型のストレージシステムにおいて、クラスタ内の２ノード間でＨＡペアを構築し、ＨＡペアとクラスタ間を冗長化した構成とし、ストレージノードの障害または異常終了が発生した際は、ＨＡ間でフェイルオーバーすることによって、可用性の高いフェイルオーバーを実現しようとしている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２０１８−５００６４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、上述した従来のスケールアウト型のストレージシステムでは、フェイルオーバーの実行時のようにノードの構成情報を取得する必要がある場合に、不揮発なデータストアにアクセスしなければならなかった。具体的には例えば、上記の特許文献１に開示されたノードの管理方法では、各ノードの構成情報はストレージアレイのディスク（メールボックスルートディスク）に格納されており、ＨＡペアを構築したノードＡとノードＢとの間でノードＡからノードＢにフェイルオーバーする場合、ノードＢは、自身のストレージアレイの物理ディスクにアクセスして構成情報を取得していた。
【０００６】
ここで、構成情報を不揮発なデータストアに保存することはデータロストの防止の観点において重要である。しかし、不揮発なデータストアに用いられる物理ディスク（例えば、ＨＤＤやＳＳＤ等）は揮発性のインメモリに比べてデータアクセス速度が非常に低速であることが広く知られている。したがって、従来技術では、ノードの構成情報の取得が必要な際に、低速な不揮発なデータストアにアクセスすることによって処理時間が長くなってしまい、例えば、即時のフェイルオーバーを実現できないおそれがあった。
【０００７】
本発明は以上の点を考慮してなされたもので、スケールアウト型のストレージシステムにおいて、高い可用性を有し、高速なフェイルオーバーを実現することが可能なストレージシステム及び構成情報制御方法を提案しようとするものである。
【課題を解決するための手段】
【０００８】
かかる課題を解決するため本発明においては、複数のノードを連結してクラスタを構築したスケールアウト型のストレージシステムであって、前記複数のノードのうち少なくとも２以上のノードはそれぞれ、前記クラスタの全体に跨る処理を制御するクラスタコントローラと、自ノードに閉じた処理を制御するノードコントローラと、自ノード内のＩ／Ｏ処理を実施するプロセスであって、自ノード内のプロセス間でサブクラスタを構成するとともに、他の前記ノードにおける稼働系／待機系の対応プロセスと同期する、複数のサブクラスタプロセスと、前記クラスタの全体で共有される不揮発なデータストアと、を備えるストレージシステムが提供される。このストレージシステムは、前記データストアが、前記ストレージシステムの構成情報のうち、前記クラスタの全体で共有が必要な情報を含む構成情報をグローバル構成情報として保持し、前記サブクラスタプロセスが、前記ストレージシステムの構成情報のうち、自サブクラスタプロセスが動作するために必要な構成情報をローカル構成情報として保持し、稼働系の前記サブクラスタプロセスが、前記データストアにアクセスすることなく前記Ｉ／Ｏ処理を実施可能であることを特徴とする。
【０００９】
また、かかる課題を解決するため本発明においては、複数のノードを連結してクラスタが構築されたスケールアウト型のストレージシステムの構成情報を制御する以下の構成情報制御方法が提供される。ここで、前記ストレージシステムにおいて前記複数のノードのうち少なくとも２以上のノードはそれぞれ、前記クラスタの全体に跨る処理を制御するクラスタコントローラと、自ノードに閉じた処理を制御するノードコントローラと、自ノード内のＩ／Ｏ処理を実施するプロセスであって、自ノード内のプロセス間でサブクラスタを構成するとともに、他の前記ノードにおける稼働系／待機系の対応プロセスと同期する、複数のサブクラスタプロセスと、前記クラスタの全体で共有される不揮発なデータストアと、を備える。そして、本構成情報制御方法では、前記データストアが、前記ストレージシステムの構成情報のうち、前記クラスタの全体で共有が必要な情報を含む構成情報をグローバル構成情報として保持し、前記サブクラスタプロセスが、前記ストレージシステムの構成情報のうち、自サブクラスタプロセスが動作するために必要な構成情報をローカル構成情報として保持し、稼働系の前記サブクラスタプロセスが、前記データストアにアクセスすることなく前記Ｉ／Ｏ処理を実施可能とすることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、スケールアウト型のストレージシステムにおいて、高い可用性を有し、高速なフェイルオーバーを実現することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施の形態に係るストレージシステムの構成例を示すブロック図である。
【図２】図１に示したストレージシステムを構成する各ノードのハードウェア構成の一例を示すブロック図である。
【図３】構成情報に関するノードの機能ブロックを示す図である。
【図４】グローバル構成情報及びローカル構成情報の構成例を示すオブジェクト図である。
【図５】グローバル構成情報及びローカル構成情報の具体例を示す図である。
【図６】構成情報更新処理の処理手順例を示すフローチャートである。
【図７】サブクラスタ選択処理の詳細な処理手順例を示すフローチャートである。
【図８】ノード選択処理の詳細な処理手順例を示すフローチャートである。
【図９】構成情報更新処理の具体的な流れを説明するための図である。
【図１０】従来技術によるスケールアウト型のストレージシステムにおけるＩ／Ｏ処理の動作を説明するための図である。
【図１１】本実施の形態におけるＩ／Ｏ処理の動作を説明するための図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照しながら、本発明の一実施の形態を詳述する。なお、各図面において、同様の機能・構成を有する複数の要素に対して、それぞれを区別するために、同一番号の後に「Ａ」，「Ｂ」等の添字を付することがあるが、これらの区別を必要としない場合は、添字を省略して表記する。
【００１３】
また、本明細書においては、コントローラ、サービス、プロセス等の運用状況について、稼働状態にあるものを「活性化」あるいは「Active」と表記するが、これらは、当業者において一般に用いられている「稼働系」、「運用系」、「アクティブ系」等と同義である。同様に、待機状態にあるものを「非活性化」あるいは「Passive」と表記するが、これらは、「待機系」、「スタンバイ系」等と同義である。
【００１４】
（１）スケールアウト型のストレージシステムの構成
図１は、本発明の一実施の形態に係るストレージシステムの構成例を示すブロック図である。図１に示したストレージシステム１００は、複数のノードを連結してクラスタを構築したスケールアウト型のストレージシステムである。ストレージシステム１００を構成する各ノードは、役割に応じて、コントローラノード（Controller Node）１１０、コンピュートノード（Compute Node）１２０、またはストレージノード（Storage Node）１３０と呼ぶ。
【００１５】
なお、図１には、本実施の形態に係るスケールアウト型のストレージシステム１００のうち、本発明の特徴に関する要部の構成を示している。したがって、本実施の形態に係るストレージシステム１００は、図１に示した以外の構成を備えることができる。具体的には例えば、図示した以上の複数のストレージノード１３０を備えて構成することができ、また、各ノードにおいて不図示のサーバ（Server）やサービス（Service）等を含む構成とすることができる。また、図１において破線で示されたコントローラやサービスは、非活性化（または、不存在と置き換えてもよい）を意味している。
【００１６】
コントローラノード１１０は、マネジメントネットワーク（Management Network）２１０を介して複数のストレージノード１３０に接続され、ストレージの管理操作（例えば、後述する構成設定リクエスト等）を発行するノードである。コントローラノード１１０が発行するストレージの管理操作は、複数のストレージノード１３０のうち、プライマリのクラスタマスタ（後述）にのみ送られる。
【００１７】
コンピュートノード１２０は、コンピュートネットワーク（Compute Network）２２０を介して複数のストレージノード１３０に接続され、ユーザデータの処理（Ｉ／Ｏ）を発行するノードである。コンピュートノード１２０が発行するＩ／Ｏは、全てのストレージノード１３０に分散して送られる。
【００１８】
ストレージノード１３０（個別には、ストレージノード１３０Ａ，１３０Ｂ）は、不図示のノード間ネットワーク（Inter-Node Network）を介して複数のストレージノード１３０が連結されて１つのファイルシステムとして管理可能なストレージ空間を提供するノードである。複数のストレージノード１３０は、クラスタ構成における役割に応じて、ストレージ全体の監視及び協調動作を制御するクラスタマスタ（Cluster Master）と、クラスタマスタによって制御されるクラスタスレイブ（Cluster Slave）とに分類される。例えば、後に説明する図３では、ストレージノード１３０Ａをクラスタマスタとし、ストレージノード１３０Ｂをクラスタスレイブとしている。クラスタスレイブは、クラスタマスタからの構成設定処理要求を受け付けた場合、ノード内のプロセスに対して構成設定処理を行う。
【００１９】
さらに詳しくは、クラスタマスタは、現行サービスとして動作するプライマリ（Primary）と、クラスタマスタの待機系サービスとしてプライマリに障害があった場合にプライマリに昇格するセカンダリ（Secondary）に分類することができる。セカンダリのクラスタマスタは、冗長化のために２以上が存在することが好ましい。また、クラスタスレイブの個数は０以上である（すなわち、存在しなくてもよい）。
【００２０】
図２は、図１に示したストレージシステムを構成する各ノードのハードウェア構成の一例を示すブロック図である。図２に示すように、ノードは例えば、一般的な物理サーバ１０によって構成され、ハードウェア（Hardware）２０の構成として、ＣＰＵ（Central Processing Unit）２１、メモリ２２、ｉＳＣＳＩ（Internet Small Computer System Interface）やＦＣ（Fibre Channel）やＬＡＮ（Local Area Network）等の各種物理ポート２３、及びＳＳＤ（Solid State Drive）やＨＤＤ（Hard Disk Drive）による物理ディスク２４，２５等を備える。そしてこれらのハードウェア２０によって、ＳＤＳ  ＯＳ（Software-Defined Storage Operating System）３１、ＯＳＳ（Open Source Software）３２、仮想マシン３３、ハイパーバイザ（Hypervisor）３４、及びＬｉｎｕｘカーネル（Linux Kernel）３５（Linux：登録商標）等といった、ミドルウェア・ソフトウェア（Middleware/Software）３０が実現される。
【００２１】
なお、図２には、ノードのハードウェア構成の一般的な例を示したが、本発明は図示した構成に限定されるものではなく、同様の機能を実現可能な様々な構成を採用してよい。具体的には例えば、物理ディスクは、ＳＳＤ２４またはＨＤＤ２５の何れかのみで構成されてもよいし、その他の物理ディスクを含むものであってもよい。また、ハードウェアの各構成の個数にも、特段の限定はない。
【００２２】
図１に戻り、ストレージノード１３０の内部構成について詳しく説明する。前述したように、図１に示したストレージノード１３０の内部構成は、本発明の特徴に関する要部の構成に限られている。なお、以降の説明では、異なる分類のノードを併記する場合を除き、ストレージノード１３０等を「ノード１３０」等と表記することがあり、個別のストレージノード１３０Ａ，１３０Ｂを指す場合には、ノード１３０Ａやノード１３０Ｂと表記する。
【００２３】
図１に示したように、ストレージノード（Storage Node）１３０は、クラスタコントローラ（Cluster Controller）１３１、ノードコントローラ（Node Controller）１３２、複数のサブクラスタ（SubCluster）１３３，１３４、及び、スケールアウトデータベース（ＳＯＤＢ：Scale-out DB）１３５を備えて構成される。
【００２４】
クラスタコントローラ１３１（個別には、クラスタコントローラ１３１Ａ，１３１Ｂ）は、グローバル構成情報１３８の更新等、クラスタ全体にまたがる制御処理を行うコントローラである。また、クラスタコントローラ１３１は、ノードコントローラ１３２に処理リクエストを送る。なお、クラスタコントローラ１３１は、プライマリのクラスタマスタのノード１３０内でのみ活性化（Active）し、セカンダリのクラスタマスタのノード１３０内では非活性化（Passive）する。但し、プライマリが停止してセカンダリの何れかがプライマリに昇格した場合は、当該セカンダリのクラスタマスタにおいてクラスタコントローラ１３１が活性化する。
【００２５】
ノードコントローラ１３２（個別には、ノードコントローラ１３２Ａ，１３２Ｂ）は、ローカル構成情報１３６，１３７の更新等、ノード１３０に閉じた制御処理を行う。また、ノードコントローラ１３２は、クラスタコントローラ１３１から指示を受けて動作する。
【００２６】
クラスタコントローラ１３１及びノードコントローラ１３２は、コントロールプレーンであり、マネジメントネットワーク２１０を介してコントローラノード１１０と接続する。なお、ストレージノード１３０におけるコントロールプレーンは、図１に示した構成に限られるものではなく、例えばウェブサーバ等も含まれる。
【００２７】
サブクラスタ１３３，１３４（個別には、サブクラスタ１３３Ａ，１３３Ｂ，１３４Ａ，１３４Ｂ）は、ノード内のプロセス間でサブクラスタ構成をとるＩ／Ｏプロセスのサービスであり、ノード１３０のなかに不特定数存在する。図１にも示したように、サブクラスタ１３３，１３４は、活性化しているプロセス（Active Process）と非活性化しているプロセス（Passive Process）とがある。具体的には例えば、サブクラスタ１３３Ａは活性化しているプロセスであり、サブクラスタ１３４Ａは非活性化しているプロセスである。
【００２８】
これら複数のサブクラスタ１３３，１３４は、データプレーンであり、コンピュートネットワーク２２０を介してコンピュートノード１２０に接続する。各サブクラスタ１３３，１３４は、ローカル構成情報（Local Config. Data）１３６，１３７を格納している。本実施の形態では、ノード間のクラスタ構成によって、クラスタマスタとクラスタスレイブの関係が構築されたノード間では、それぞれ対応するサブクラスタ同士でローカル構成情報が同期される。具体的には例えば、ノード１３０Ａのサブクラスタ１３３Ａとノード１３０Ｂのサブクラスタ１３３Ｂとの間で、ローカル構成情報１３６Ａとローカル構成情報１３６Ｂとが同期される。なお、ストレージノード１３０におけるデータプレーンは、図１に示した構成に限られるものではなく、他のＩ／Ｏプロセス、例えばフロントエンドサービスやバックエンドサービス等も含まれる。なお、これら他のＩ／Ｏプロセスは、プロセスごとにクラスタ内での構成が異なる。
【００２９】
なお、以降の説明では、サブクラスタ１３３とサブクラスタ１３４とを区別する必要がない場合、すなわち、サブクラスタ全般を指す場合には、記載を省略して、「サブクラスタ１３３」と表記することがある。同様に、ローカル構成情報１３６とローカル構成情報１３７とを区別する必要がない場合、すなわち、ローカル構成情報全般を指す場合には、記載を省略して、「ローカル構成情報１３６」と表記することがある。
【００３０】
ＳＯＤＢ１３５（個別には、ＳＯＤＢ１３５Ａ，１３５Ｂ）は、コントロールプレーン及びデータプレーンの双方に接続される不揮発なデータストアであり、グローバル構成情報（Global Config. Data）１３８を格納している。そして、ＳＯＤＢ１３５は、他ノード１３０のＳＯＤＢ１３５同士でデータを同期し、グローバル構成情報１３８を複製する。なお、ＳＯＤＢ１３５は、クラスタマスタのノード内でのみ活性化し、クラスタスレイブのノードは、クラスタマスタのノード内のＳＯＤＢ１３５を参照する。例えば、ノード１３０ＡのＳＯＤＢ１３５Ａが活性化しており、ノード１３０ＢのＳＯＤＢ１３５Ｂが非活性化している場合（後述するように、ＳＯＤＢ１３５Ｂが存在しない場合でもよい）、ノード１３０Ｂはノード１３０ＡのＳＯＤＢ１３５Ａを参照する。
【００３１】
なお、本実施の形態に係るストレージシステム１００においては、基本的には全てのストレージノード（ノード）１３０がＳＯＤＢ１３５を持っている。このなかには、非活性化（Passive）されたＳＯＤＢ１３５を含む。但し、全てのノード１３０でＳＯＤＢ１３５を持つようにすると、ＳＯＤＢ１３５同士の情報の同期に時間が掛かりやすいことから、性能向上のためにＳＯＤＢ１３５を持つノード１３０を限定する構成にしてもよい。このとき、ＳＯＤＢ１３５を持たないノード１３０は、ＳＯＤＢ１３５を持つノード１３０に対して構成情報の参照を行うようにすればよい。
【００３２】
以上が、ストレージノード１３０の内部構成である。上記の内部構成のうち、コントロールプレーン及びデータプレーンは、ハードウェア的には、図２に示したＣＰＵ２１やメモリ（インメモリ）２２によって実現され、ＳＯＤＢ１３５は、ＳＳＤやＨＤＤ等の物理ディスク２４，２５によって構成される。すなわち、サブクラスタ１３３が保持するローカル構成情報１３６は、データアクセス速度が高速なインメモリ２２に格納されるのに対し、ＳＯＤＢ１３５が保持するグローバル構成情報１３８は、データアクセス速度が低速な物理ディスク２４，２５に格納される。
【００３３】
ここで、上述した説明で用いた語句のいくつかについて説明を補足する。
【００３４】
まず、本説明において、クラスタ（メインクラスタ）とは、ストレージシステム１００が備える複数のノードによって構成されるクラスタを意味する。これに対して、サブクラスタとは、個々のストレージノード１３０内のプロセスやサービス間で構成されるクラスタを意味し、メインクラスタに対して内的なクラスタである。サブクラスタ１３３，１３４は、このようなサブクラスタのプロセスである。
【００３５】
次に、本説明において、グローバル構成情報１３８及びローカル構成情報１３６は、何れも、ストレージシステム１００の構成を示すメタデータ（構成情報）を意味する。本実施の形態に係るスケールアウト型のストレージシステム１００では、この構成情報をグローバルとローカルとに分割保持することを特徴の１つとしている。
【００３６】
ストレージシステム１００に保持される上記構成情報のうち、グローバル構成情報１３８には、メインクラスタ全体で共有が必要な構成情報が含まれる。例えば、メインクラスタ全体の構成に関する情報や、ノード１３０の障害発生時に他のノード１３０に引き継ぐ必要がある、ノード１３０ごとの情報等が相当する。
【００３７】
一方、ローカル構成情報１３６には、サブクラスタ１３３のプロセスでしか利用しない構成情報（言い換えれば、サブクラスタ１３３が動作するために必要な構成情報）が含まれる。例えば、当該サブクラスタ１３３がＩ／Ｏ処理をするために必要な情報等が相当する。
【００３８】
但し、グローバル構成情報１３８とローカル構成情報１３６は、完全に独立した情報ではなく、ローカル構成情報１３６のなかには、グローバル構成情報１３８と紐付いた情報も含まれる。したがって、互いの構成情報で整合性を保つために、ローカル構成情報１３６に変更があった場合には、グローバル構成情報１３８も変更する必要がある。また、グローバル構成情報１３８に変更があった場合には、変更内容の構成情報を保持するローカル構成情報１３６を変更する必要がある。構成情報の変更については、構成情報更新処理として後に詳述する。
【００３９】
（２）ノードの機能構成と構成情報
次に、ノード（ストレージノード）１３０が保持する構成情報と、構成情報に関する機能構成について、より詳しく説明する。
【００４０】
図３は、構成情報に関するノードの機能ブロックを示す図である。図３に示すストレージノード（クラスタマスタ）１３０Ａ及びストレージノード（クラスタスレイブ）１３０Ｂは、図１に示したストレージノード１３０Ａ，１３０Ｂにそれぞれ対応している。また、図３には、管理操作者１１１の操作によって構成設定リクエストが発行された場合の処理（構成情報更新処理）の流れが、矢印付きの実線あるいは破線によって記載されているが、これは、図６等を参照しながら後述する構成情報更新処理の説明に対応するものである。
【００４１】
クラスタマスタ１３０Ａとクラスタスレイブ１３０Ｂとの関係においては、クラスタマスタ１３０Ａのクラスタコントローラ１３１Ａが、コントローラノード１１０からの指示（例えば、管理操作者１１１の操作による構成設定リクエスト）を受け付ける。図３では図示が省略されているが、クラスタスレイブ１３０ＢのクラスタコントローラはPassiveである。
【００４２】
同様に、クラスタマスタ１３０Ａとクラスタスレイブ１３０Ｂとの関係において、グローバル構成情報は、クラスタマスタのＳＯＤＢに格納されたグローバル構成情報１３８Ａが参照される。なお、図３では図示は省略されているが、例えばクラスタスレイブ１３０ＢがPassiveなＳＯＤＢを備えている場合、当該ＳＯＤＢにはグローバル構成情報（例えば、図１に示したグローバル構成情報１３８Ｂ）が格納されており、クラスタスレイブのグローバル構成情報はクラスタマスタのグローバル構成情報と同期される（図１参照）。
【００４３】
また、クラスタマスタ１３０Ａ及びクラスタスレイブ１３０Ｂは、同様のサブクラスタ構成を備え、対応関係にある複数のサブクラスタ１３３Ａ，１３３Ｂ（１３４Ａ，１３４Ｂ）のうちの何れか１つが活性化（Active）となり、残りが非活性化（Passive）となる。そして、対応関係にあるサブクラスタ間では、保持するローカル構成情報は同期される仕組みとなっている。具体的には例えば、図３において、クラスタマスタ１３０ＡのActiveなサブクラスタ１３３Ａはクラスタスレイブ１３０ＢのPassiveなサブクラスタ１３３Ｂと対応関係にあり、サブクラスタ１３３Ａが保持するローカル構成情報１３６Ａは、サブクラスタ１３３Ｂが保持するローカル構成情報１３６Ｂと同期される。同様に、クラスタマスタ１３０ＡのPassiveなサブクラスタ１３４Ａはクラスタスレイブ１３０ＢのActiveなサブクラスタ１３４Ｂと対応関係にあり、サブクラスタ１３４Ａが保持するローカル構成情報１３７Ａは、サブクラスタ１３４Ｂが保持するローカル構成情報１３７Ｂと同期される。
【００４４】
クラスタコントローラ１３１Ａは、自ノードのＳＯＤＢ（図示省略）に格納されたグローバル構成情報１３８Ａを更新する機能（グローバル構成情報更新）と、グローバル構成情報更新に応じてローカル構成情報を更新するために、対象となるローカル構成情報を有するサブクラスタのプロセスを特定する機能（サブクラスタプロセス特定）とを有する。グローバル構成情報更新は、後述する図６のステップＳ１０２の処理に相当する。また、サブクラスタプロセス特定は、後述する図６のステップＳ１０３〜Ｓ１０４（図７及び図８）の処理に相当する。
【００４５】
また、ノードコントローラ１３２Ａ，１３２Ｂは、自ノード内のサブクラスタ１３３に当該サブクラスタ１３３が有するローカル構成情報１３６の更新を要求する機能（ローカル構成情報更新）を有する。ローカル構成情報更新は、後述する図６のステップＳ１０６〜Ｓ１０７の処理に相当する。
【００４６】
図４は、グローバル構成情報及びローカル構成情報の構成例を示すオブジェクト図である。図４では、図１や図３に示したグローバル構成情報１３８に対応する一例として、グローバル構成情報３００を示し、図１や図３に示したローカル構成情報１３６，１３７に対応する一例として、ローカル構成情報４００を示している。
【００４７】
図４に破線で示すように、サブクラスタの構成情報を示すグローバル構成情報３００は、サブクラスタ内に保持されるローカル構成情報４００と紐付けされている。また、グローバル構成情報３００に含まれる個々の構成情報（図中の「object_A」や「object_B」）はそれぞれ、ローカル構成情報４００に含まれる個々の構成情報（図中の「object_A'」や「object_B'」）と関連付けられている。具体的には、メインクラスタ内で一意な識別子（ＩＤ）を用いて、グローバル構成情報３００及びローカル構成情報４００を管理することによって、これらの関連付けを行うことができる。
【００４８】
図５は、グローバル構成情報及びローカル構成情報の具体例を示す図である。図５は、図４に示したグローバル構成情報３００及びローカル構成情報４００に含まれるオブジェクト（構成情報）の一部についてその具体的なテーブル（構成情報テーブル）を例示したものである。なお、図４に示した「object_A」及び「object_A'」は、図５においては「volume」及び「volume'」という具体例に置き換え、それぞれの構成情報テーブル（Volumeテーブル３１０，Volume'テーブル４１０）を示している。
【００４９】
図５に示すVolumeテーブル３１０は、ストレージシステム１００において仮想的なデータストアとしてユーザに提供される複数のボリューム（Volume）について、各ボリュームの構成を示すグローバル構成情報「Volume」の構成情報テーブルである。図５の場合、Volumeテーブル３１０は、ボリュームの識別子（id）３１１と、当該識別子によって特定されるボリュームの容量（size）３１２と、を備えて構成される。
【００５０】
なお、Volumeテーブル３１０における「ボリュームの識別子（id）３１１」は、メインクラスタ内の各ボリュームを一意に特定可能な識別子（ＩＤ）であり、後述するConnectionObjectテーブル３２０の「ボリュームの識別子（id_volume）３２２」、及びVolume'テーブル４１０の「ボリュームの識別子（id）４１１」においても、共通する識別子が用いられる。
【００５１】
ConnectionObjectテーブル３２０は、オブジェクト間の接続関係を示す情報である。図５の場合、ConnectionObjectテーブル３２０は、当該テーブルにおけるレコードの識別子（id）３２１と、ボリュームの識別子（id_volume）３２２と、サブクラスタの識別子（id_subCluster）３２３と、を備えて構成される。サブクラスタの識別子（id_subCluster）３２３は、メインクラスタ内のサブクラスタ１３３，１３４を識別するための識別子であり、同期関係にあるサブクラスタ（例えば、サブクラスタ１３３Ａとサブクラスタ１３３Ｂ）には共通する識別子が付与される。
【００５２】
SubClusterテーブル３３０は、サブクラスタのプロセスがどのノードにおいて活性化（Active）または非活性化（Passive）となっているかを示す情報である。図５の場合、SubClusterテーブル３３０は、サブクラスタの識別子（id）３３１と、識別子３３１で特定されるサブクラスタがActiveなノードの識別子（activeNodeId）３３２と、識別子３３１で特定されるサブクラスタがPassiveなノードの識別子（passiveNodeId）３３３と、を備えて構成される。SubClusterテーブル３３０の「サブクラスタの識別子（id）３３１」には、ConnectionObjectテーブル３２０の「サブクラスタの識別子（id_subCluster）３２３」と共通する識別子が用いられる。
【００５３】
Volume'テーブル４１０は、グローバル構成情報のオブジェクト「Volume」と関連付けられるローカル構成情報のオブジェクト「Volume'」の構成情報テーブルである。図５の場合、Volume'テーブル４１０は、ボリュームの識別子（id）４１１と、当該識別子によって特定されるボリュームの容量（size）４１２と、を備えて構成される。Volume'テーブル４１０には、Volumeテーブル３１０で管理される構成情報のうち、Volume'テーブル４１０を保持するサブクラスタにおけるＩ／Ｏ処理に必要な構成情報が管理される。
【００５４】
以上、図３〜図５を参照しながら説明したように、本実施の形態に係るストレージシステム１００では、サブクラスタ構造を持つスケールアウト型のストレージシステムにおいて、システムの構成情報をグローバルなＳＯＤＢに持たせる（グローバル構成情報３００）だけでなく、一部をローカルなサブクラスタにも持たせる（ローカル構成情報４００）ようにしている。そして、グローバル構成情報３００とローカル構成情報４００とにおいて共通の識別子を用いることによって、互いの構成情報を関連付けられるようにしている。なお、このように構成情報が分割保持されている場合、一方の構成情報が更新されたときには、整合性を保つために、他方の構成情報も同様に更新する必要がある。
【００５５】
なお、本実施の形態において、グローバル構成情報３００とローカル構成情報４００との間に共通の識別子を用いて管理する方法は、図５に例示した構成情報テーブルの形式に限定されるものではない。例えば、図４に示した「object_B」と「object_B'」との関係をみると、グローバル構成情報の「object_B」が、サブクラスタのActive/Passiveなノードに関する構造情報「SubCluster」に対する識別子（id_SubCluster）を有することによって、オブジェクト間の接続関係を示す構成情報「ConnectionObject」を介することなく、対応するローカル構成情報「object_B'」と関連付けることができる。
【００５６】
（３）構成情報の更新
以下では、本実施の形態に係るストレージシステム１００において分割保持された構成情報を更新する際の処理について詳しく説明する。構成情報の更新は、様々なタイミングで発生し得る。具体的には例えば、通常稼働時のＩ／Ｏ実施や、ノード故障等に伴うフェイルオーバー等の際に、構成情報の更新が発生する。
【００５７】
まず、あるノード１３０Ａのサブクラスタ１３３Ａに格納されているローカル構成情報１３６Ａを更新する場合は、当該サブクラスタ１３３Ａにおいてローカル構成情報１３６Ａを更新後、当該ノード１３０ＡのＳＯＤＢ１３５Ａに格納されているグローバル構成情報１３８Ａ（または、クラスタマスタのノードのＳＯＤＢに格納されているグローバル構成情報）を同様に更新すればよい。ＳＯＤＢ１３５Ａ，１３５Ｂはノード間で同期されるため、何れかのグローバル構成情報を更新すればよい。このようにすることで、ローカル構成情報の更新に応じてグローバル構成情報も更新し、分割保持された構成情報の整合性を維持することができる。
【００５８】
一方、グローバル構成情報１３８Ａを更新する場合は、更新内容の構成情報を有する「特定のローカル構成情報」を更新する必要がある。ここで、本実施の形態では、ノード内のプロセス間でサブクラスタ構成をとっているため、システム内に不特定多数のサブクラスタが存在する。さらに、これらのサブクラスタは、システムの状況によってActive／Passiveが動的に変化する。したがって、グローバル構成情報１３８Ａを更新する場合は、ローカル構成情報を保持する不特定多数のサブクラスタのうちから、「特定のローカル構成情報」を保持するActiveなサブクラスタのプロセスを特定する必要がある。
【００５９】
図３の構成を用いて具体的に説明する。例えば、ノード１３０Ａにおいてクラスタコントローラ１３１Ａがグローバル構成情報１３８Ａを更新した際、この更新内容に対応する構成情報は、ローカル構成情報１３７Ａ，１３７Ｂに格納されているとする（同期関係にあるため、両者のローカル構成情報は同じ）。しかし、ローカル構成情報１３７Ａを保持するサブクラスタ１３４ＡはPassiveであるため、クラスタコントローラ１３１Ａは、サブクラスタ１３４Ａのローカル構成情報１３７Ａを更新させることはできず、この場合は、ローカル構成情報１３７Ｂを保持するActiveなサブクラスタ１３４Ｂを、更新すべき「特定のローカル構成情報」を保持するプロセスとして特定できる必要がある。
【００６０】
そこで、本実施の形態に係るストレージシステム１００では、動的に変化するサブクラスタを特定するための制御情報（具体的には、図４や図５に示した「SubCluster」や「ConnectionObject」）を持つことによって、上記の問題を解決し、グローバル構成情報を更新する場合に、対応する「特定のローカル構成情報」を保持するサブクラスタを特定し、ローカル構成情報を更新できるようにしている。これらの制御情報（オブジェクト）は、サブクラスタと関連があるグローバル構成情報を作成する際に作成することによって（図４の「object_A」と「object_A'」のような管理方法）、またはサブクラスタのＩＤをグローバル構成情報に持たせることによって（図４の「object_B」と「object_B'」のような管理方法）、サブクラスタを特定できるようにしている。補足すると、サブクラスタが特定できれば、サブクラスタ構成情報（SubCluster）が持つ「activeNodeId」から、構成設定を要求するべきノードを特定することができる。
【００６１】
以下では、上記のように本実施の形態に係るストレージシステム１００において、グローバル構成情報を更新し、さらに、対応するローカル構成情報を更新するまでの処理を、構成情報更新処理として詳しく説明する。
【００６２】
図６は、構成情報更新処理の処理手順例を示すフローチャートである。図６には、構成情報更新処理として、グローバル構成情報の構成設定を変更するリクエスト（構成設定リクエスト）が発行された場合に、当該リクエストに対応するローカル構成情報が更新されるまでの一連の処理の手順例が示されている。
【００６３】
また、図７は、図６のステップＳ１０３におけるサブクラスタ選択処理の詳細な処理手順例を示すフローチャートであり、図８は、図６のステップＳ１０４におけるノード選択処理の詳細な処理手順例を示すフローチャートである。
【００６４】
これら図６〜図８に示した構成情報更新処理の処理手順について、図３〜図５に示した機能構成や構成情報例を用いて、詳しく説明する。
【００６５】
図６によればまず、ステップＳ１０１において、コントローラノード１１０から構成設定リクエストが発行される。ここで、構成設定とは、ストレージの構成を変更する処理の総称を指す。具体的には例えば、ボリューム（Volume）やプールを拡張・作成する処理、並びにストレージデバイスを削除する処理等が相当する。発行された構成設定リクエストは、クラスタマスタ１３０Ａのクラスタコントローラ１３１Ａが受け取る（図３参照）。
【００６６】
なお、本実施の形態において、構成設定リクエストの発行方法は特に限定されない。例えば、管理操作者１１１がコマンドの入力操作を行うことによって、構成設定の対象や内容を直接指定するようにしてもよい。具体的には例えば、後述する図９に示したVolume拡張リクエスト５１０を発行しようとする場合には、「volume expand --id 0000 --size 0200」といったコマンド入力が考えられる。また、ストレージシステム１００において所定の状況が生じた場合（例えば、ノードの障害によってフェイルオーバーを実行する場合等）に、内部処理によって、構成情報の変更対象や変更内容を決定して指示する等であってもよい。
【００６７】
次のステップＳ１０２では、ステップＳ１０１で発行されたリクエストを受け取ったクラスタマスタ１３０Ａのクラスタコントローラ１３１Ａが、当該リクエストに従ってグローバル構成情報１３８Ａを更新する。
【００６８】
次にステップＳ１０３では、クラスタコントローラ１３１Ａが、ステップＳ１０２で更新したグローバル構成情報と関連するローカル構成情報を持つサブクラスタを特定する（サブクラスタ選択処理）。
【００６９】
ここで、図７に示されたサブクラスタ選択処理の詳細な処理手順について、図４のオブジェクト図を参照しながら説明する。
【００７０】
まず、ステップＳ１１１において、クラスタコントローラ１３１Ａは、ステップＳ１０１で発行された構成設定リクエストから、構成設定の対象オブジェクトの識別子（例えば「object_A」の「id」）を取得する。
【００７１】
次のステップＳ１１２では、クラスタコントローラ１３１Ａは、ステップＳ１１１で取得した識別子（「object_A」の「id」）と同じ識別子「id_object_A」を持つオブジェクト「ConnectionObject」を取得する。
【００７２】
次のステップＳ１１３では、クラスタコントローラ１３１Ａは、ステップＳ１１２で取得したオブジェクト「ConnectionObject」が有する「id_SubCluster」を参照し、サブクラスタのプロセスを特定する。
【００７３】
ステップＳ１１１〜Ｓ１１３のサブクラスタ選択処理が行われることによって、クラスタコントローラ１３１Ａは、グローバル構成情報更新で更新した構成情報「object_A」と関連するローカルな構成情報「object_A'」を持つサブクラスタを特定することができる。
【００７４】
なお、図７に示したサブクラスタ選択処理の処理手順は、図４に示した「object_A」と「object_A'」のオブジェクト関係に沿った処理方法である。図４の説明でも前述したように、本実施の形態において、対応関係にあるグローバル構成情報とローカル構成情報をどのように関連付けて管理するかは、上記例に限定されない。したがって、サブクラスタ選択処理の詳細な処理手順も関連付けの方法に応じて変更することができる。具体的には例えば、図４に示した「object_B」と「object_B'」のオブジェクト関係のように、対応関係にあるグローバル構成情報とローカル構成情報を「SubCluster」に対する識別子（id_SubCluster）だけで関連付けられるようにしている場合には、サブクラスタ選択処理において、図７の処理のように「ConnectionObject」を介することなく、id_SubClusterをキーとして「SubCluster」を参照することによって、グローバル構成情報更新で更新した構成情報「object_B」と関連するローカルな構成情報「object_B'」を持つサブクラスタを特定するようにしてもよい。
【００７５】
図６に戻る。ステップＳ１０４において、クラスタコントローラ１３１Ａは、ステップＳ１０３で特定されたサブクラスタの構成情報を用いて、Activeなサブクラスタが存在するノードを特定する（ノード選択処理）。
【００７６】
ここで、図８に示されたノード選択処理の詳細な処理手順について、図４のオブジェクト図を参照しながら説明する。
【００７７】
まず、ステップＳ１２１において、クラスタコントローラ１３１Ａは、サブクラスタ選択処理で特定したサブクラスタの構成情報「SubCluster」を取得する。
【００７８】
そしてステップＳ１２２では、クラスタコントローラ１３１Ａは、ステップＳ１２１で取得したオブジェクト「SubCluster」が有する「activeNodeId」を参照し、サブクラスタプロセスがActiveであるノードを特定する。
【００７９】
ステップＳ１２１〜Ｓ１２２のノード選択処理が行われることによって、クラスタコントローラ１３１Ａは、構成設定の対象オブジェクト「object_A」と関連するローカルな構成情報「object_A'」を持つサブクラスタのうちから、サブクラスタがActiveなノード（例えば、図３に示す処理の流れの場合、ノード１３０Ｂ）を特定することができる。
【００８０】
したがって、図６に戻り、ステップＳ１０５において、クラスタコントローラ１３１Ａは、ステップＳ１０４のノード選択処理で特定されたノード１３０Ｂのノードコントローラ１３２Ｂに、ローカル構成情報の更新処理を要求する。
【００８１】
次いで、ステップＳ１０６では、ノードコントローラ１３２Ｂが、特定されたActiveなサブクラスタ（図３の場合、サブクラスタ１３４Ｂ）に対して、ローカル構成情報の更新を要求する。
【００８２】
そして、次のステップＳ１０７では、ステップＳ１０６の要求に基づいて、サブクラスタ１３４Ｂが、自身が持つローカル構成情報１３７Ｂを更新する。なお、Activeなサブクラスタ１３４ＢとPassiveなサブクラスタ１３４Ａとの間で同期がとられることにより、ステップＳ１０７におけるローカル構成情報１３７Ｂの更新内容は、ローカル構成情報１３７Ａにも反映される。
【００８３】
以上、図６のステップＳ１０１〜Ｓ１０７の処理が行われることにより、ストレージシステム１００は、構成設定リクエストが発行された場合に、グローバル構成情報を更新するとともに、対応するローカル構成情報も更新することができる。
【００８４】
図９は、構成情報更新処理の具体的な流れを説明するための図である。図９は、図５に例示したグローバル構成情報３００及びローカル構成情報４００の具体的な構成情報テーブルを流用しているため、流用部分の説明は省略する。
【００８５】
図９の例では、グローバル構成情報「volume」が存在するときに、「volume」の容量を拡張する構成設定リクエスト（Volume拡張リクエスト５１０）が発行されたとする（図６のステップＳ１０１に相当）。Volume拡張リクエスト５１０は、拡張対象のボリュームの識別子（id）５１１と、拡張後のボリュームの容量（size）５１２とを備えて構成され、本例では、「００００」のidを有するボリュームに対して容量を「２００」に拡張するリクエストが発行されている。
【００８６】
なお、ボリュームの識別子（id，id_volume）は、当該ボリュームの作成時に戻り値として取得することができる。構成設定リクエストにおける対象ボリュームの指定においては、ボリュームの識別子（id）によって指定することに限定されず、例えば、ボリュームの作成時に設定するボリューム名（name）でボリュームを指定するようにしてもよい。
【００８７】
上記のVolume拡張リクエスト５１０を受け取ったクラスタコントローラ１３１Ａは、Volume拡張リクエスト５１０のリクエスト内容に沿って、Volumeテーブル３１０において、識別子（id）３１１が「００００」のボリュームの容量（size）３１２を、それまでの「１００」から「２００」に更新する（図６のステップＳ１０２に相当）。この結果、グローバル構成情報が更新される。
【００８８】
次に、クラスタコントローラ１３１Ａは、Volumeテーブル３１０において容量を更新したボリュームのＩＤ「００００」を取得し、ConnectionObjectテーブル３２０を参照し、ボリュームの識別子（id_volume）３２２に同じＩＤ「００００」を有するデータを取得する（図７のステップＳ１１１，Ｓ１１２に相当）。本例では、ConnectionObjectテーブル３２０のデータ行の３行目が取得される。
【００８９】
そして、クラスタコントローラ１３１Ａは、取得したConnectionObjectテーブル３２０のデータから、サブクラスタの識別子（id_subCluster）３２３を特定する（図７のステップＳ１１３に相当）。本例では、「０００１」が特定され、この「０００１」の識別子を有するサブクラスタが、Volume拡張リクエスト５１０によって更新されたグローバル構成情報に対応するローカル構成情報を保持しているサブクラスタとして特定される。
【００９０】
次に、クラスタコントローラ１３１Ａは、SubClusterテーブル３３０を参照し、特定されたサブクラスタと同じの識別子「０００１」をサブクラスタの識別子（id）３３１に有するデータを取得する（図８のステップＳ１２１に相当）。本例では、SubClusterテーブル３３０のデータ行の２行目が取得される。
【００９１】
そして、クラスタコントローラ１３１Ａは、取得したSubClusterテーブル３３０のデータから、Activeなノードの識別子（activeNodeId）３３２を特定する（図８のステップＳ１２２に相当）。本例では、「０００２」が特定され、この「０００２」の識別子を有するノード（例えばノード１３０Ｂ）が、グローバル構成情報の更新に対応して更新すべきローカル構成情報を保持している、Activeなサブクラスタが存在するノードとして特定される。
【００９２】
その後は、クラスタコントローラ１３１Ａが、先に特定した「０００２」の識別子を有するノード１３０Ｂのノードコントローラ１３２Ｂに、ローカル構成情報の更新処理を要求する（図６のステップＳ１０５に相当）。具体的には、図９に示したようにVolume拡張リクエスト５２０が送信される。Volume拡張リクエスト５２０は、Volume拡張リクエスト５１０と同様に、拡張対象のボリュームの識別子（id）５２１と、拡張後のボリュームの容量（size）５２２とを備えて構成され、本例では、「００００」のidを有するボリュームに対して容量を「２００」に拡張するリクエストが発行されている。
【００９３】
このVolume拡張リクエスト５２０を受け取ったノードコントローラ１３２Ｂは、Volume拡張リクエスト５２０のリクエスト内容に沿って、Activeなサブクラスタ１３４Ｂに指示を出し、当該サブクラスタ１３４Ｂに格納されているローカル構成情報４００（１３７Ｂ）のVolume'テーブル４１０において、識別子（id）４１１が「００００」のボリュームの容量（size）４１２を、それまでの「１００」から「２００」に更新する（図６のステップＳ１０６，Ｓ１０７に相当）。この結果、対応するローカル構成情報が更新される。
【００９４】
以上、図９を参照しながら確認したように、本実施の形態におけるストレージシステム１００では、構成設定リクエストによるグローバル構成情報３００の更新に伴って、対応するローカル構成情報４００の場所を特定したうえで、当該ローカル構成情報４００を更新することができる。その結果、ストレージシステム１００の通常動作を停止することなく、グローバル構成情報３００とローカル構成情報４００とに分割保持された構成情報の整合性を保つことができる。
【００９５】
（４）Ｉ／Ｏ処理やフェイルオーバーにおける利点
これまでに説明したように、本実施の形態に係るストレージシステム１００は、スケールアウト型のストレージシステムの個々のストレージノードにおいてＩ／Ｏ処理を行うプロセスをサブクラスタ構成とし、さらに、システムの構成情報のうち、メインクラスタ全体で共有が必要な構成情報（グローバル構成情報）を全ノードの共通領域（例えばＳＯＤＢ）に、サブクラスタが動作するために必要な構成情報（ローカル構成情報）をローカルなサブクラスタに、分割保持するよう構成している。さらに、構成情報更新処理で詳述したように、構成情報を更新した場合に、グローバル構成情報とローカル構成情報との整合性を維持できるようにしている。
【００９６】
このようなストレージシステム１００によれば、通常稼働時、ＳＯＤＢにアクセスしなくてもＩ／Ｏ処理を実施できるため、Ｉ／Ｏの性能向上に期待できる。さらに、通常稼働時だけでなく、障害発生等によってあるノードが使用できなくなった場合のフェイルオーバー時にも、ＳＯＤＢにアクセスせずに、Ｉ／Ｏの構成情報を取得することができるため、Ｉ／Ｏ性能の向上及び即時フェイルオーバーの実現が可能となる。このような本実施の形態に係るストレージシステム１００の特徴について、以下に、従来技術と比較しながら詳しく説明する。
【００９７】
まず、従来技術について説明する。図１０は、従来技術によるスケールアウト型のストレージシステムにおけるＩ／Ｏ処理の動作を説明するための図である。図１０（Ａ）は、通常稼働時における動作を説明する図であり、図１０（Ｂ）は、フェイルオーバー時の動作を説明する図である。
【００９８】
図１０（Ａ），図１０（Ｂ）に示したストレージシステム９００は、複数のストレージノード（Storage Node）９３０Ａ，９３０Ｂを連結してクラスタを構築した、従来技術によるスケールアウト型のストレージシステムの一例である。図１０（Ａ），（Ｂ）には、ストレージシステム９００のうちＩ／Ｏ処理に関連する概略構成が示されている。本実施の形態に係るストレージシステム１００におけるサブクラスタ１３３，１３４と同様、Ｉ／Ｏプロセス（I/O Process）９３３Ａ，９３４ＢはＩ／Ｏ処理を行うプロセスであるが、本実施の形態のようにサブクラスタ化されてはいない。また、本実施の形態と違って、ストレージシステム９００では構成情報の分割保持は行われず、Ｉ／Ｏプロセス９３３Ａ，９３４Ｂに構成情報は保持されない。構成情報は、スケールアウトデータベース（ＳＯＤＢ：Scale-out DB）９３５Ａ，９３５Ｂ等の、全ノードの共通領域に保持される。全ノードの共通領域は、不揮発なデータストアであり、一般には物理ディスクによって提供されることから、インストアメモリに比べて、データアクセス速度が非常に遅い（メモリアクセス性能が低い）。他の構成要素の説明は省略する。
【００９９】
図１０（Ａ）では、通常稼働時におけるデータ処理（Ｉ／Ｏ処理）として、コンピュートノード（Compute Node）９２０からのＩ／Ｏを受けて、ストレージノード９３０ＡのＩ／Ｏプロセス９３３ＡがＩ／Ｏ処理を実施している（図中の「data I/O」と記載されたステップＳ９０１）。データ処理中、Ｉ／Ｏ処理に必要な情報（構成情報の１つ）は、全ノードの共通領域（例えばＳＯＤＢ９３５Ａ）に保存される（ステップＳ９０２）。また、ＳＯＤＢ９３５Ａに保存されたデータは、任意のタイミングでノード間で同期され、本例では、ＳＯＤＢ９３５ＢにもＳＯＤＢ９３５Ａと同じデータが保存される（ステップＳ９０３）。
【０１００】
図１０（Ｂ）では、障害によってストレージノード９３０Ａが停止または稼働不可状態に陥っており、フェイルオーバーによって、ストレージノード９３０Ａが実施していたＩ／Ｏ処理は、ストレージノード９３０Ｂに引き継がれる。このとき、ストレージノード９３０ＢのＩ／Ｏプロセス９３４Ｂは、ストレージノード９３０ＡにおけるＩ／Ｏの処理状況を知らないため、一度、ＳＯＤＢ９３５Ｂにアクセスし、ストレージノード９３０ＡにおけるＩ／Ｏのプロセス状況を確認し、Ｉ／Ｏ処理のために必要な情報があれば取得する（ステップＳ９０４）。その後、ストレージノード９３０ＢのＩ／Ｏプロセス９３４Ｂが、引き継いだＩ／Ｏ処理を実施する（ステップＳ９０５）。
【０１０１】
以上のように、従来技術によるストレージシステム９００では、構成情報がグローバル（不揮発なデータストア）に保持されることから、Ｉ／Ｏ中やフェイルオーバー時に、データアクセス速度が低速なＳＯＤＢ９３５Ａ，９３５Ｂにアクセスする必要がある（ステップＳ９０２やステップＳ９０４）。したがって、データアクセスに時間が掛かるため、Ｉ／Ｏ性能の低下や即時フェイルオーバーができないといった問題が生じてしまう。
【０１０２】
次に、本実施の形態に係るストレージシステム１００について説明する。図１１は、本実施の形態におけるＩ／Ｏ処理の動作を説明するための図である。図１１（Ａ）は、通常稼働時における動作を説明する図であり、図１１（Ｂ）は、フェイルオーバー時の動作を説明する図である。図１１（Ａ），図１１（Ｂ）には、図１に示したストレージシステム１００の構成のうちＩ／Ｏ処理に関連する構成が示されている。各構成要素の説明は省略する。
【０１０３】
図１１（Ａ）では、通常稼働時におけるデータ処理（Ｉ／Ｏ処理）として、コンピュートノード（Compute Node）１２０からのＩ／Ｏを受けて、ストレージノード１３０ＡのActiveなサブクラスタ１３３ＡがＩ／Ｏ処理を実施している（図中の「data I/O」と記載されたステップＳ２０１）。データ処理中、Ｉ／Ｏ処理に必要な情報は、ローカル構成情報１３６Ａとして更新され、ストレージノード１３０Ｂにおいて待機系として存在するPassiveなサブクラスタ１３３Ｂのローカル構成情報１３６Ｂと同期される（ステップＳ２０２）。前述したように、各ローカル構成情報は、データアクセス速度が高速なローカルメモリ（インメモリ）に格納されている。
【０１０４】
なお、図１１（Ａ）には、ローカル構成情報（サブクラスタ１３３Ａのローカル構成情報１３６Ａ等）とグローバル構成情報（ＳＯＤＢ１３５Ａのグローバル構成情報１３８Ａ等）との間でデータ送受が行われることが示されている（ステップＳ２０３）。これは、ローカル構成情報とグローバル構成情報との整合性を維持するための処理であって、その実行タイミングは特に限定されるものではない。つまり、本実施の形態では、ステップＳ２０３の処理タイミングに拘わらず、サブクラスタ１３３ＡがＩ／Ｏ処理を進めることができる。そして、ＳＯＤＢ１３５Ａに保存されたグローバル構成情報１３８Ａは、任意のタイミングでノード間で同期され、本例では、ＳＯＤＢ１３５Ｂにおいて同じグローバル構成情報（グローバル構成情報１３８Ｂ）が保存される（ステップＳ２０４）。
【０１０５】
図１１（Ｂ）では、障害によってストレージノード１３０Ａが停止または稼働不可状態に陥っており、フェイルオーバーによって、ストレージノード１３０Ａが実施していたＩ／Ｏ処理は、ストレージノード１３０Ｂに引き継がれる。このとき、ストレージノード１３０ＡにおいてＩ／Ｏ処理を実施していたActiveなサブクラスタ１３３Ａの代わりに、ストレージノード１３０Ｂのサブクラスタ１３３ＢがPassiveからActiveに切り替わる。
【０１０６】
ここで、先のステップＳ２０２で説明した同期によって、サブクラスタ１３３Ｂが保持するローカル構成情報１３６Ｂには、ストレージノード１３０Ａにおいてサブクラスタ１３３Ａによって処理されていたＩ／Ｏに関する情報が保持されている。したがって、Activeに切り替わったサブクラスタ１３３Ｂは、自身が保持するローカル構成情報１３６Ｂを参照することにより（ステップＳ２０５）、即座にＩ／Ｏ処理を継続して実施することができる（ステップＳ２０６）。
【０１０７】
以上のように、本実施の形態に係るストレージシステム１００によれば、Ｉ／Ｏに必要な構成情報がローカル構成情報としてローカル（インメモリ）に保持され、かつローカル構成情報がノード間で同期されることから、Ｉ／Ｏ中やフェイルオーバー時に、データアクセス速度が低速なＳＯＤＢ１３８Ａ，１３８Ｂにアクセスすることなく、データアクセス速度が高速なローカルメモリ（インメモリ）へのアクセスのみで処理を進行することができる。したがって、従来技術に比してデータアクセスに要する時間が短縮できるため、Ｉ／Ｏ性能の向上や即時フェイルオーバーの実現が可能となる。言い換えれば、本実施の形態に係るストレージシステム１００は、高い可用性を有し、高速なフェイルオーバーを実現することができる。
【０１０８】
なお、本発明は上記した実施の形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施の形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１０９】
また、実施の形態で示した各構成や機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０１１０】
また、各図面において、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１１１】
１０    物理サーバ
２０    ハードウェア（Hardware）
２１    ＣＰＵ
２２    メモリ（インメモリ）
２３    各種物理ポート
２４    物理ディスク（ＳＳＤ）
２５    物理ディスク（ＨＨＤ）
３０    ミドルウェア・ソフトウェア（Middleware/Software）
３１    ＳＤＳ  ＯＳ
３２    ＯＳＳ
３３    仮想マシン
３４    ハイパーバイザ（Hypervisor）
３５    Ｌｉｎｕｘカーネル（Linux Kernel）
１００  ストレージシステム
１１０  コントローラノード（Controller Node）
１１１  管理操作者
１２０  コンピュートノード（Compute Node）
１３０（１３０Ａ，１３０Ｂ）  ストレージノード（Storage Node）
１３１（１３１Ａ，１３１Ｂ）  クラスタコントローラ（Cluster Controller）
１３２（１３２Ａ，１３２Ｂ）  ノードコントローラ（Node Controller）
１３３（１３３Ａ，１３３Ｂ）  サブクラスタ（SubCluster）
１３４（１３４Ａ，１３４Ｂ）  サブクラスタ（SubCluster）
１３５（１３５Ａ，１３５Ｂ）  スケールアウトデータベース（ＳＯＤＢ：Scale-out DB）
１３６（１３６Ａ，１３６Ｂ）  ローカル構成情報（Local Config. Data）
１３７（１３７Ａ，１３７Ｂ）  ローカル構成情報（Local Config. Data）
１３８（１３８Ａ，１３８Ｂ）  グローバル構成情報（Global Config. Data）
２１０  マネジメントネットワーク（Management Network）
２２０  コンピュートネットワーク（Compute Network）
【図１】
2020009336.tif 000003
【図２】
2020009336.tif 000004
【図３】
2020009336.tif 000005
【図４】
2020009336.tif 000006
【図５】
2020009336.tif 000007
【図６】
2020009336.tif 000008
【図７】
2020009336.tif 000009
【図８】
2020009336.tif 000010
【図９】
2020009336.tif 000011
【図１０】
2020009336.tif 000012
【図１１】
2020009336.tif 000013