(57)【要約】      （修正有）【課題】システム全体としての情報法処理資源を有効に活用する記憶システム及び制御ソフトウェア配置方法。【解決手段】複数のストレージノードを有する記憶システムにおいて、ストレージノードは、それぞれ記憶領域を提供する１又は複数の記憶装置と、上位装置からの要求に応じて、要求されたデータを対応する記憶装置に読み書きする１又は複数の制御ソフトウェアとを設ける。各制御ソフトウェアは、それぞれ上位装置からの要求に応じて要求されたデータを対応する記憶装置に読み書きするために必要な所定の構成情報を保持し、複数の制御ソフトウェアが冗長化グループとして管理され、同一の冗長化グループに属する各制御ソフトウェアがそれぞれ保持する構成情報は同期して更新され、冗長化グループを構成する複数の制御ソフトウェアを、各ストレージノードの負荷を分散するように、それぞれ異なる前記ストレージノードに配置する。【選択図】図１４
2019101703.tif 000002
【特許請求の範囲】
【請求項１】
複数のストレージノードを有する記憶システムにおいて、
前記ストレージノードは、
それぞれ記憶領域を提供する１又は複数の記憶装置と、
上位装置からの要求に応じて、要求されたデータを対応する前記記憶装置に読み書きする１又は複数の制御ソフトウェアと
を備え、
各前記制御ソフトウェアは、それぞれ前記上位装置からの要求に応じて、要求されたデータを対応する前記記憶装置に読み書きするために必要な所定の構成情報を保持し、
複数の前記制御ソフトウェアが冗長化グループとして管理され、同一の前記冗長化グループに属する各前記制御ソフトウェアがそれぞれ保持する前記構成情報は同期して更新され、
前記冗長化グループを構成する複数の前記制御ソフトウェアが、各前記ストレージノードの負荷を分散するように、それぞれ異なる前記ストレージノードに配置された
ことを特徴とする記憶システム。
【請求項２】
同一の前記冗長化グループに属する複数の前記制御ソフトウェアのうちの少なくとも１つの前記制御ソフトウェアが前記上位装置からの要求を受け付ける第１の状態に設定されると共に、当該冗長化グループに属する残りの前記制御ソフトウェアが前記上位装置からの要求を受け付けない第２の状態に設定され、
異なる前記冗長化グループに属する複数の前記制御ソフトウェアが同一の前記ストレージノードに配置され、
前記第１の状態に設定された複数の前記制御ソフトウェアをできる限り同一の前記ストレージノードに配置しないように、各前記制御ソフトウェアの配置先がそれぞれ決定された
ことを特徴とする請求項１に記載の記憶システム。
【請求項３】
複数の前記ストレージノードにより構成されるクラスタ内の各前記制御ソフトウェアを管理する管理部を備え、
前記管理部は、
前記ストレージノードの減設時又は障害発生時には、当該ストレージノードに配置された前記第１の状態の前記制御ソフトウェアと同じ前記冗長化グループに属する前記第２の状態のいずれかの前記制御ソフトウェアを前記第１の状態に切り替える
ことを特徴とする請求項２に記載の記憶システム。
【請求項４】
前記ストレージノードは、
前記制御ソフトウェアを実行する中央処理装置と、
前記中央処理装置のワークメモリとして利用されるメモリと
を備え、
前記管理部は、
減設又は障害が発生した前記ストレージノードに配置された前記第１の状態に設定された前記制御ソフトウェアの処理を引き継ぐ前記制御ソフトウェアの候補が複数存在する場合には、当該制御ソフトウェアのうち、前記中央処理装置の現在の負荷、前記メモリの現在の空き容量、及び、他の前記ストレージノードとの間のネットワークの現在の使用可能な通信帯域がそれぞれ当該負荷、当該空き容量及び当該通信帯域の許容範囲を超えない前記ストレージノードに配置された前記制御ソフトウェアに当該処理を引き継がせる
ことを特徴とする請求項３に記載の記憶システム。
【請求項５】
複数の前記ストレージノードにより構成されるクラスタ内の各前記制御ソフトウェアを管理する管理部を備え、
前記管理部は、
前記ストレージノードの減設又は障害発生により前記制御ソフトウェアの数が減少した前記冗長化グループについては、当該冗長化グループに属する前記制御ソフトウェアが配置されていない前記ストレージノードにおいて、減設又は障害が発生した前記ストレージノードに配置されていた前記制御ソフトウェアの代替となる新たな前記制御ソフトウェアを起動させる
ことを特徴とする請求項１に記載の記憶システム。
【請求項６】
前記ストレージノードは、
前記制御ソフトウェアを実行する中央処理装置と、
前記中央処理装置のワークメモリとして利用されるメモリと
を備え、
前記管理部は、
減設又は障害が発生した前記ストレージノードに配置されていた前記制御ソフトウェアの代替となる新たな前記制御ソフトウェアの配置先となり得る前記ストレージノードが複数存在する場合には、当該ストレージノードのうち、前記中央処理装置の現在の負荷、前記メモリの現在の空き容量、及び、他の前記ストレージノードとの間のネットワークの現在の使用可能な通信帯域がそれぞれ当該負荷、当該空き容量及び当該通信帯域の許容範囲を超えない前記ストレージノードを、減設又は障害が発生した前記ストレージノードに配置されていた前記制御ソフトウェアの代替となる新たな前記制御ソフトウェアの配置先に決定する
ことを特徴とする請求項５に記載の記憶システム。
【請求項７】
複数の前記ストレージノードにより構成されるクラスタ内の各前記制御ソフトウェアを管理する管理部を備え、
前記管理部は、
前記クラスタ内に前記ストレージノードが増設された場合に、当該クラスタ内の他の前記ストレージノードに配置されていた一部の前記制御ソフトウェアを、増設された前記ストレージノードに再配置する
ことを特徴とする請求項１に記載の記憶システム。
【請求項８】
複数の前記ストレージノードにより構成されるクラスタ内の各前記制御ソフトウェアを管理する管理部を備え、
前記管理部は、
前記クラスタ内に前記ストレージノードが増設された場合に、新たな前記冗長化グループを生成し、当該冗長化グループに属する１つの前記制御ソフトウェアを増設された前記ストレージノードに配置し、当該冗長化グループに属する他の前記制御ソフトウェアを他の前記ストレージノードに配置する
ことを特徴とする請求項１に記載の記憶システム。
【請求項９】
前記ストレージノードは、
前記制御ソフトウェアを実行する中央処理装置と、
前記中央処理装置のワークメモリとして利用されるメモリと
を備え、
前記管理部は、
新たな前記冗長化グループに属する他の前記制御ソフトウェアの配置先となり得る前記ストレージノードが複数存在する場合には、当該ストレージノードのうち、前記中央処理装置の現在の負荷、前記メモリの現在の空き容量、及び、他の前記ストレージノードとの間のネットワークの現在の使用可能な通信帯域がそれぞれ当該負荷、当該空き容量及び当該通信帯域の許容範囲を超えない前記ストレージノードを、当該他の制御ソフトウェアの配置先に決定する
ことを特徴とする請求項８に記載の記憶システム。
【請求項１０】
１又は複数の記憶装置がそれぞれ搭載された複数のストレージノードを有する記憶システムにおいて、上位装置からの要求に応じて、要求されたデータを対応する前記記憶装置に読み書きする制御ソフトウェアを配置する制御ソフトウェア配置方法であって、
各前記制御ソフトウェアは、それぞれ前記上位装置からの要求に応じて、要求されたデータを対応する前記記憶装置に読み書きするために必要な所定の構成情報を保持し、
複数の前記制御ソフトウェアが冗長化グループとして管理され、
前記冗長化グループを構成する複数の前記制御ソフトウェアを、各前記ストレージノードの負荷を分散するように、それぞれ異なる前記ストレージノードに配置する第１のステップと、
同一の前記冗長化グループに属する各前記制御ソフトウェアがそれぞれ保持する前記構成情報を同期して更新する第２のステップと
を備えることを特徴とする制御ソフトウェア配置方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は記憶システム及び制御ソフトウェア配置方法に関し、例えば、それぞれ１又は複数のＳＤＳ（Software Defined Storage）が実装された複数のストレージノードを備える情報処理システムに適用して好適なものである。なお、以下において、ＳＤＳとは、ストレージ機能を有するソフトウェアを汎用のサーバ装置に実装することにより構築されるストレージ装置を指す。
【背景技術】
【０００２】
従来、情報処理システムでは、可用性及び信頼性向上のためにサーバ装置の冗長化構成をとることが多い。このため従来の情報処理システムでは、システム全体の処理性能を向上させる場合、冗長化構成を構成する複数のサーバ装置単位で物理サーバを増減設するスケールアウト方式が広く用いられている。
【０００３】
しかしながら、このような従来のスケールアウト方式によると、１台分のサーバ機能を増加させる場合においても冗長化のために複数の物理サーバを増設しなければならず、その分、多くのコストを要する問題があった。
【０００４】
一方、近年では、１台の物理サーバ上で複数の仮想マシンを稼働させる仮想化技術が広く普及しており、仮想マシンの冗長化についての発明も数多く提案されている。例えば、特許文献１には、複数の現用系の仮想マシンと、これら現用系の仮想マシンにそれぞれ対応させて設けられた予備系の仮想マシンとを複数の物理サーバに配置する技術が開示されている。
【０００５】
このような仮想化技術によれば、現用系の仮想マシンと、その予備系の仮想マシンとの組（以下、これを仮想マシングループと呼ぶ）を増設する場合においても、仮想マシングループを構成する仮想マシンと同じ数の物理サーバを増設する必要がなく、効率的及び安価にスケールアウトを行い得るという利点がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１４−７５０２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１には、現用系の仮想マシンと、予備系の仮想マシンとをそれぞれ別個の物理サーバ（現用系専用の物理サーバ又は予備系専用の物理サーバ）に配置する技術が記載されている。ここで、例えば、同じ物理サーバに一部の現用系の仮想マシンと一部の予備系の仮想マシンを配置することで、システム全体としての情報処理資源を有効に活用できる可能性がある。
【０００８】
そこで、記憶システムに求められる可用性及び信頼性を維持しつつ、システム全体としての情報処理資源を有効に活用し得るストレージ制御ソフトウェアの配置方法を提案する。
【課題を解決するための手段】
【０００９】
かかる課題を解決するため本発明においては、複数のストレージノードを有する記憶システムにおいて、前記ストレージノードは、それぞれ記憶領域を提供する１又は複数の記憶装置と、上位装置からの要求に応じて、要求されたデータを対応する前記記憶装置に読み書きする１又は複数の制御ソフトウェアとを設け、各前記制御ソフトウェアは、それぞれ前記上位装置からの要求に応じて要求されたデータを対応する前記記憶装置に読み書きするために必要な所定の構成情報を保持し、複数の前記制御ソフトウェアが冗長化グループとして管理され、同一の前記冗長化グループに属する各前記制御ソフトウェアがそれぞれ保持する前記構成情報は同期して更新され、前記冗長化グループを構成する複数の前記制御ソフトウェアを、各前記ストレージノードの負荷を平準化するように、それぞれ異なる前記ストレージノードに配置するようにした。
【００１０】
また本発明においては、１又は複数の記憶装置がそれぞれ搭載された複数のストレージノードを有する記憶システムにおいて、上位装置からの要求に応じて、要求されたデータを対応する前記記憶装置に読み書きする制御ソフトウェアを配置する制御ソフトウェア配置方法であって、各前記制御ソフトウェアは、それぞれ前記上位装置からの要求に応じて要求されたデータを対応する前記記憶装置に読み書きするために必要な所定の構成情報を保持し、前記冗長化グループを構成する複数の前記制御ソフトウェアが、各前記ストレージノードの負荷を平準化するように、それぞれ異なる前記ストレージノードに配置する第１のステップと、複数の前記制御ソフトウェアを冗長化グループとして管理し、同一の前記冗長化グループに属する各前記制御ソフトウェアがそれぞれ保持する前記構成情報を同期して更新する第２のステップとを設けるようにした。
【発明の効果】
【００１１】
本発明によれば、システム全体としての情報処理資源を有効に活用し得る記憶システム及び制御ソフトウェア配置方法を実現できる。上記した以外の課題、構成及び効果は、以下の発明を実施するための形態の説明により明らかにされる。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態による情報処理システムの全体構成を示すブロック図である。
【図２】ストレージノードの概略構成を示すブロック図である。
【図３】本冗長化機能に関連してストレージノードのメモリに格納されたプログラム及び情報の説明に供するブロック図である。
【図４】論−物変換テーブルの構成例を示す図表である。
【図５】ストレージノード管理表の構成例を示す図表である。
【図６】制御ソフト管理表の構成例を示す図表である。
【図７】本実施の形態による冗長化機能の説明に供するブロック図である。
【図８】本実施の形態による冗長化機能の説明に供するブロック図である。
【図９】本実施の形態による冗長化機能の説明に供するブロック図である。
【図１０】本実施の形態による冗長化機能の説明に供するブロック図である。
【図１１】本実施の形態による冗長化機能の説明に供するブロック図である。
【図１２】本実施の形態による冗長化機能の説明に供するブロック図である。
【図１３】本実施の形態による冗長化機能の説明に供するブロック図である。
【図１４】冗長化回復処理の処理手順を示すフローチャートである。
【図１５】配置先ストトレージノード決定処理の処理手順を示すフローチャートである。
【図１６】リバランス処理の処理手順を示すフローチャートである。
【図１７】移動対象制御ソフト決定処理の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面を参照して、本発明の一実施の形態を詳述する。以下の記載及び図面は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略及び簡略化がなされている。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。本発明が実施形態に制限されることは無く、本発明の思想に合致するあらゆる応用例が本発明の技術的範囲に含まれる。本発明は、当業者であれば本発明の範囲内で様々な追加や変更等を行うことができる。本発明は、他の種々の形態でも実施する事が可能である。特に限定しない限り、各構成要素は複数でも単数でも構わない。
【００１４】
以下の説明では、「テーブル」、「表」、「リスト」、「キュー」等の表現にて各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ＸＸテーブル」、「ＸＸリスト」等を「ＸＸ情報」と呼ぶことがある。各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「ＩＤ」、「番号」等の表現を用いるが、これらについてはお互いに置換が可能である。
【００１５】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号又は参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用又は参照符号に代えてその要素に割り振られたＩＤを使用することがある。
【００１６】
また、以下の説明では、プログラムを実行して行う処理を説明する場合があるが、プログラムは、少なくとも１以上のプロセッサ（例えばＣＰＵ）によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又はインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主体がプロセッサとされてもよい。同様に、プログラムを実行して行う処理の主体が、プロセッサを有するコントローラ、装置、システム、計算機、ノード、ストレージシステム、ストレージ装置、サーバ、管理計算機、クライアント、又は、ホストであってもよい。プログラムを実行して行う処理の主体（例えばプロセッサ）は、処理の一部又は全部を行うハードウェア回路を含んでもよい。例えば、プログラムを実行して行う処理の主体は、暗号化及び復号化、又は圧縮及び伸張を実行するハードウェア回路を含んでもよい。プロセッサは、プログラムに従って動作することによって、所定の機能を実現する機能部として動作する。プロセッサを含む装置及びシステムは、これらの機能部を含む装置及びシステムである。
【００１７】
プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ（例えばＣＰＵ）と記憶資源を含み、記憶資源はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１８】
（１）本実施の形態による情報処理システムの構成
図１は、本実施の形態による情報処理システム１の構成を示す図である。この情報処理システム１は、複数のコンピュートノード２と、複数のストレージノード３とを備えて構成される。
【００１９】
各コンピュートノード２及び各ストレージノード３間は、例えばファイバーチャネル（Fibre Channel）、イーサネット（登録商標）、InfiniBand又は無線ＬＡＮ（Local Area Network）などから構成されるストレージサービスネットワーク４を介して接続されると共に、各ストレージノード３間は、ＬＡＮ、イーサネット（登録商標）、InfiniBand又は無線ＬＡＮなどから構成されるバックエンドネットワーク５を介して接続されている。
【００２０】
ただし、ストレージサービスネットワーク４及びバックエンドネットワーク５が同一のネットワークにより構成されていてもよく、また各コンピュートノード２及び各ストレージノード３がストレージサービスネットワーク４やバックエンドネットワーク５以外の管理用ネットワークに接続されていてもよい。
【００２１】
コンピュートノード２は、ストレージノード３に対してホスト（上位装置）として機能する汎用のコンピュータ装置である。なお、コンピュートノード２は仮想マシンのような仮想的なコンピュータ装置であってもよい。コンピュートノード２は、ユーザ操作や実装されたアプリケーションプログラムからの要求に応じて、ストレージサービスネットワーク４を介してストレージノード３にデータを読み書きする。
【００２２】
ストレージノード３は、コンピュートノード２に対してデータを読み書きするための記憶領域を提供するサーバ装置である。ストレージノード３は、仮想マシンであってもよい。またストレージノード３がコンピュートノード２と同一の物理ノードに同居する構成であってもよい。本実施の形態の場合、各ストレージノード３は、図１に示すように、他の１又は複数のストレージノード３と共にクラスタ６と呼ぶグループにまとめられて管理される。図１の例では、クラスタ６が１つのみ設定された場合について例示しているが、情報処理システム１内に複数のクラスタ６を設けるようにしてもよい。クラスタ６は、分散ストレージシステムと呼ばれてもよい。
【００２３】
このストレージノード３は、図２に示すように、１以上のＣＰＵ（Central Processing Unit）１０、１以上のメモリ１１及び複数の記憶装置１２と、それぞれ１又は複数の第１及び第２の通信装置１３，１４とを備える。ストレージノード３は、ＣＰＵ１０及び記憶装置１２と、第１及び第２の通信装置１３，１４とが内部ネットワーク１５を介して接続された汎用の物理サーバ装置から構成される。
【００２４】
ＣＰＵ１０は、ストレージノード３全体の動作制御を司るプロセッサである。またメモリ１１は、ＳＲＡＭ（Static RAM(Random Access Memory)）やＤＲＡＭ（Dynamic RAM）などの揮発性の半導体メモリや、不揮発性の半導体メモリから構成され、ＣＰＵ１０のワークメモリとして各種プログラムや必要なデータを一時的に保持するために利用される。メモリ１１に格納されたプログラムを、少なくとも１以上のＣＰＵ１０が実行することにより、後述のようなストレージノード３全体としての各種処理が実行される。
【００２５】
記憶装置１２は、ＨＤＤ（Hard Disk Drive）、ＳＳＤ（Solid State Drive）又はＳＣＭ（Storage Class Memory）などの大容量の不揮発性の記憶装置から構成され、ＮＶＭｅ（Non-Volatile Memory Express）やＳＡＳ（Serial Attached SCSI(Small Computer System Interface)）、ＳＡＴＡ（Serial ATA(Advanced Technology Attachment)）などのインタフェースで接続され、コンピュートノード２からのリード要求やライト要求に応じてデータを読み書きするための記憶領域を提供する。
【００２６】
第１の通信装置１３は、ストレージノード３がストレージサービスネットワーク４を介してコンピュートノード２と通信を行うためのインタフェースであり、例えばファイバーチャネルカードやイーサネット（登録商標）カード、InfiniBandカード、無線ＬＡＮカードなどから構成される。第１の通信装置１３は、コンピュートノード２との通信時におけるプロトコル制御を行う。
【００２７】
第２の通信装置１４は、ストレージノード３がバックエンドネットワーク５を介して他のストレージノード３と通信を行うためのインタフェースであり、例えばファイバーチャネルカードやイーサネット（登録商標）カード、InfiniBandカード、無線ＬＡＮカード、PCIeホストアダプタなどから構成される。第２の通信装置１４は、他のストレージノード３との通信時におけるプロトコル制御を行う。
【００２８】
なお本実施の形態の場合、各ストレージノード３は、図１に示すように、他の１又は複数のストレージノード３と共にクラスタ６と呼ぶグループにまとめられて管理される。図１の例では、クラスタ６が１つのみ設定された場合について例示しているが、情報処理システム１内に複数のクラスタ６を設けるようにしてもよい。
【００２９】
（２）本情報処理システムにおける各種処理の流れ
（２−１）各ストレージノードのメモリに格納されたプログラム及び情報
次に、本情報処理システム１における各種処理の流れについて説明する。これに際して、まず、かかる各種機能に関連して各ストレージノード３のメモリ１１（図２）に格納されるプログラム及び情報について、図３〜図６を参照して説明する。
【００３０】
図３に示すように、各ストレージノード３のメモリ１１には、複数の制御ソフトウェア（以下、これを制御ソフトと呼ぶ）２０及びこれら制御ソフト２０にそれぞれ対応させて用意された複数の構成情報２１と、冗長化部２２、クラスタ制御部２３、ストレージノード管理表２４及び制御ソフト管理表２５とがそれぞれ格納される。
【００３１】
制御ソフト２０は、ＳＤＳ（Software Defined Storage）のストレージコントローラとして機能するソフトウェアである。制御ソフト２０は、コンピュートノード２からのリード要求やライト要求を受け付け、対応する記憶装置１２（図２）にデータを読み書きする機能を有する。制御ソフト２０は、ストレージ制御部や、ストレージ制御プログラムと呼ばれてもよい。
【００３２】
本実施の形態の場合、図７に示すように、ストレージノード３に実装された各制御ソフト２０は、それぞれ互いに異なる他のストレージノード３にそれぞれ実装された１又は複数の他の制御ソフト２０と共に冗長化のための１つのグループ（以下、これを冗長化グループと呼ぶ）２６として管理される。
【００３３】
なお図７は、２つの制御ソフト２０により冗長化グループ２６が構成される場合を示しており、以下においても、２つの制御ソフト２０により冗長化グループ２６が構成されるものとして説明を進めるが、３つ以上の制御ソフト２０により冗長化グループ２６が構成されるものとしてもよい。
【００３４】
冗長化グループ２６では、少なくとも１つの制御ソフト２０がコンピュートノード２からのリード要求やライト要求を受け付けることができる状態（現用系の状態であり、以下、これをアクティブモードと呼ぶ）に設定され、残りの制御ソフト２０がコンピュートノード２からのリード要求やライト要求を受け付けない状態（待機系の状態であり、以下、これをパッシブモードと呼ぶ）に設定される。
【００３５】
従って、２つの制御ソフト２０から構成される冗長化グループ２６は、これら２つの制御ソフト２０の双方がアクティブモードに設定された構成（以下、これをアクティブ−アクティブ構成と呼ぶ）と、一方の制御ソフト２０がアクティブモードに設定され、他方の制御ソフト２０がそのバックアップとしてパッシブモードに設定された構成（以下、これをアクティブ−パッシブ構成と呼ぶ）とのうちのいずれかの構成をとることになる。
【００３６】
そしてアクティブ−パッシブ構成が採用された冗長化グループ２６では、アクティブモードに設定された制御ソフト２０又はその制御ソフト２０が稼働するストレージノード３に障害が発生した場合や、そのようなストレージノード３がクラスタ６から撤去（ストレージノード３が減設）された場合に、それまでパッシブモードに設定されていた制御ソフト２０の状態がアクティブモードに切り替えられる。これにより、アクティブモードに設定された制御ソフト２０が稼働し得なくなった場合に、当該制御ソフト２０が実行していたＩ／Ｏ（Input/Output）処理をそれまでパッシブモードに設定されていた制御ソフト２０により引き継ぐことができる（フェールオーバ機能）。
【００３７】
このようなフェールオーバ機能を実現するため、同じ冗長化グループ２６に属する制御ソフト２０は、常に同一内容の構成情報２１を保持している。構成情報２１は、上述の容量仮想化機能や、アクセス頻度の多いデータをより応答速度が速い記憶領域に移動させる階層記憶制御機能、格納されたデータの中から重複するデータを削除する重複排除機能、データを圧縮して記憶する圧縮機能、ある時点でのデータの状態を保持するSnapshot（スナップショット）機能、及び、災害対策のために同期あるいは非同期で遠隔地にデータをコピーするリモートコピー機能などの各種機能に関する処理を制御ソフト２０が実行するために必要な情報である。
【００３８】
そして、冗長化グループ２６を構成するアクティブモードの制御ソフト２０の構成情報２１が更新された場合、更新前後のその構成情報２１の差分が差分データとしてその冗長化グループ２６を構成する他方の制御ソフト２０に転送され、この差分データに基づいて当該他方の制御ソフト２０によりその制御ソフト２０が保持する構成情報２１が更新される。これにより冗長化グループ２６を構成する各制御ソフト２０がそれぞれ保持する構成情報２１が常に同期した状態に維持される。
【００３９】
このように冗長化グループ２６を構成する２つの制御ソフト２０同士が常に同じ内容の構成情報２１を保持することにより、アクティブモードに設定された制御ソフト２０や、当該制御ソフト２０が配置されたストレージノード３に障害が発生し又は当該ストレージノード３が撤去された場合にも、それまでその制御ソフト２０が実行していた処理を、その制御ソフト２０と同じ冗長化グループ２６内の他の制御ソフト２０が直ちに引き継ぐことが可能となる。
【００４０】
冗長化部２２は、このように同じ冗長化グループ２６内の各制御ソフト２０がそれぞれ保持する構成情報２１を常に同期させる機能を有するプログラムである。実際上、冗長化部２２は、自ストレージノード３内のいずれかの制御ソフト２０が自己の構成情報２１を更新した場合、更新前後のその構成情報２１の差分を差分データとして、バックエンドネットワーク５を介して、その制御ソフト２０と同じ冗長化グループ２６に属する他の制御ソフト２０が実装されたストレージノード３に送信する。この際、冗長化部２２は、その差分データに基づいて構成情報２１を更新すべき制御ソフト２０を指定する。そして、この差分データを受信したストレージノード３の冗長化部２２は、当該差分データに基づいて、指定された制御ソフト２０が保持する構成情報２１を更新する。冗長化部２２は、冗長化ソフトウェアや、冗長化プログラムと呼ばれてもよい。
【００４１】
クラスタ制御部２３は、コンピュートノード２から与えられたライト要求又はリード要求からなるＩ／Ｏ（Input/Output）要求を、バックエンドネットワーク５を介して、対応するストレージノード３のクラスタ制御部２３に転送したり、他のクラスタ制御部２３から転送されてきたかかるＩ／Ｏ要求を、対応する冗長化グループ２６の制御ソフト２０に引き渡す機能を有するプログラムである。クラスタ制御部２３は、クラスタ制御ソフトウェアや、クラスタ制御プログラムと呼ばれてもよい。
【００４２】
実際上、本実施の形態の場合、冗長化グループ２６ごとに、その冗長化グループ２６に対応させて１又は複数の仮想的な論理ボリューム（以下、これを仮想ボリュームと呼ぶ）が定義され、これらの仮想ボリュームがデータをリード／ライトする記憶領域としてコンピュートノード２に提供される。
【００４３】
この場合、仮想ボリューム内の記憶領域は所定の大きさの小領域（以下、これを論理ページと呼ぶ）に区分して管理される。またストレージノード３に搭載された各記憶装置１２が提供する記憶領域は論理ページと同じ大きさの小領域（以下、これを物理ページと呼ぶ）に区分されて管理される。ただし、論理ページ及び物理ページは同じサイズでなくてもよい。
【００４４】
そしてコンピュートノード２は、所望する仮想ボリュームにデータをリード／ライトする場合、そのデータのリード／ライト先の仮想ボリュームの識別子（ＬＵＮ：Logical Unit Number）と、その仮想ボリュームにおけるそのデータのリード／ライト先の先頭の論理ページと、そのデータのデータ長とを指定したＩ／Ｏ要求を対応するクラスタ６内のいずれかのストレージノード３に送信する。
【００４５】
かくして、このＩ／Ｏ要求を受信したストレージノード３のクラスタ制御部２３は、バックエンドネットワーク５を介して、受信したＩ／Ｏ要求において指定されたリード／ライト対象の仮想ボリュームに対応付けられた冗長化グループ２６の制御ソフト２０が配置されている各ストレージノード３のクラスタ制御部２３にそのＩ／Ｏ要求を転送する。
【００４６】
また、このＩ／Ｏ要求を受領したクラスタ制御部２３は、このＩ／Ｏ要求を、当該Ｉ／Ｏ要求においてリード／ライト先として指定された仮想ボリュームに対応付けられた冗長化グループ２６の制御ソフト２０に引き渡す。そして、このＩ／Ｏ要求が引き渡された制御ソフト２０のうち、アクティブモードに設定された制御ソフト２０は、このＩ／Ｏ要求に応じて、当該Ｉ／Ｏ要求がライト要求である場合には当該Ｉ／Ｏ要求においてデータのライト先として指定された論理ページにいずれかの物理ページを動的に割り当てた上で、当該論理ページに割り当てた物理ページにデータをリード／ライトする。
【００４７】
このような一連の処理を実行するための手段として、クラスタ制御部２３は、クラスタ６内に存在する各制御ソフト２０がそれぞれどのストレージノード３に配置され、どの冗長化グループ２６に所属し、アクティブモード及びパッシブモードのいずれの状態に設定されているかといった情報を共有しており、これらの情報を後述する制御ソフト管理表２５に格納して管理している。
【００４８】
一方、構成情報２１は、上述のように制御ソフト２０が容量仮想化機能や、階層記憶制御機能、Snapshot機能、リモートコピー機能、重複排除機能、及び、圧縮機能などの各種機能を実現するために必要な情報から構成される。
【００４９】
図４は、このような構成情報２１の一部を構成する論−物変換テーブル２７を示す。論−物変換テーブル２７は、容量仮想化機能に関連して、上述の論理ページと、物理ページとの対応関係を管理するために利用されるテーブルであり、図４に示すように、ＬＵＮ欄２７Ａ、論理ページ欄２７Ｂ及び物理ページ欄２７Ｃを備えて構成される。論−物変換テーブル２７では、１つの行が１つの論理ページに対応する。
【００５０】
そしてＬＵＮ欄２７Ａには、かかるクラスタ６がコンピュートノード２に提供する各仮想ボリュームにそれぞれ付与されたその仮想ボリュームのＬＵＮが格納され、論理ページ欄２７Ｂには、対応する仮想ボリューム内の各論理ページにそれぞれ付与された識別子（論理ページ番号）が格納される。
【００５１】
また物理ページ欄２７Ｃは、ノードＩＤ欄２７ＣＡ、ドライブ番号欄２７ＣＢ及びセクタ番号欄２７ＣＣに区分されている。そしてノードＩＤ欄２７ＣＡには、対応する論理ページに割り当てた物理ページを提供するストレージノード３に付与されたそのストレージノード３に固有の識別子（ノードＩＤ）が格納され、ドライブ番号欄２７ＣＢには、その物理ページＰＰを提供する記憶装置１２（図２）に付与されたその記憶装置１２に固有の識別子（ドライブ番号）が格納される。さらにセクタ番号欄２７ＣＣには、対応する記憶装置１２内のその物理ページＰＰに該当する記憶領域（セクタ）に付与されたそのセクタに固有の識別子（セクタ番号）が格納される。
【００５２】
従って、図４の例の場合、例えば、「１」というＬＵＮが付与された仮想ボリュームの論理ページ番号が「０」の論理ページには、「０」というノードＩＤが付与されたストレージノード３におけるドライブ番号が「１」の記憶装置１２内の「0x00010000」というセクタ番号の記憶領域（セクタ）が物理ページとして割り当てられていることが示されている。
【００５３】
またストレージノード管理表２４は、同じクラスタ６内の各ストレージノード３の負荷状況等を管理するために利用されるテーブルであり、図５に示すように、ノードＩＤ欄２４Ａ、状態欄２４Ｂ、容量欄２４Ｃ、使用容量欄２４Ｄ、ＣＰＵ負荷欄２４Ｅ、メモリ量欄２４Ｆ、使用メモリ量欄２４Ｇ、通信帯域欄２４Ｈ、使用通信帯域欄２４Ｉ及び障害グループＩＤ欄２４Ｊを備えて構成される。ストレージノード管理表２４では、１つの行が１つのストレージノード３に対応する。
【００５４】
そしてノードＩＤ欄２４Ａには、そのクラスタ６を構成する各ストレージノード３のノードＩＤがそれぞれ格納され、状態欄２４Ｂには、対応するストレージノード３の現在の状態（「正常」又は「異常」）が格納される。また、容量欄２４Ｃには、対応するストレージノード３の全ての記憶装置の容量が格納され、使用容量欄２４Ｄには、対応するストレージノード３における現在の記憶装置の使用容量が格納される。
【００５５】
さらにＣＰＵ負荷欄２４Ｅには、対応するストレージノード３におけるＣＰＵ１０（図２）の現在の使用率が格納され、メモリ量欄２４Ｆには、そのストレージノード３におけるメモリ１１（図２）の容量が格納され、使用メモリ量欄２４Ｇには、対応するストレージノード３における現在のメモリ１１の使用量が格納される。
【００５６】
さらに通信帯域欄２４Ｈには、対応するストレージノード３が使用可能なバックエンドネットワーク５の通信帯域の大きさが格納され、使用通信帯域欄２４Ｉには、そのストレージノード３が他のストレージノード３との通信のために現在使用しているバックエンドネットワーク５の帯域量が格納される。
【００５７】
さらに障害グループＩＤ欄２４Ｊには、対応するストレージノード３が属する障害グループのグループＩＤが格納される。ここで、障害グループとは、同一の電源等を共用するなど、その電源等に障害が発生した場合に、これに起因する同様の障害が発生するストレージノード３のグループをいう。
【００５８】
このストレージノード管理表２４に格納される情報は、同一クラスタ６を構成するすべてのストレージノード３のクラスタ制御部２３により共有される情報である。このように同一クラスタ６内で各ストレージノード３のクラスタ制御部２３により同一の情報を共有するための手段として、クラスタ６を構成する各ストレージノード３にそれぞれ搭載されたクラスタ制御部２３の中から所定の方法により１つのクラスタ制御部２３が代表クラスタ制御部２３として選定される。
【００５９】
そして代表クラスタ制御部２３は、定期的に他のストレージノード３のクラスタ制御部２３から必要な情報を収集し、収集した情報に基づいて自己が管理するストレージノード管理表２４を更新する。また代表クラスタ制御部２３は、これら収集した情報をそのクラスタ６内の各ストレージノード３のクラスタ制御部２３に転送することにより、これらクラスタ制御部２３にそのクラスタ制御部２３がそれぞれ管理するストレージノード管理表２４を最新の状態に更新させる。
【００６０】
ただし、各ストレージノード３のクラスタ制御部２３が定期的に必要な情報を同じクラスタ６内の他のすべてのストレージノード３のクラスタ制御部２３にそれぞれ送信し、この情報に基づいて各ストレージノード３のクラスタ制御部２３がそれぞれ自ノード内のストレージノード管理表２４を更新するようにしてもよい。
【００６１】
制御ソフト管理表２５は、クラスタ制御部２３がクラスタ６内に存在するすべての制御ソフト２０を管理するために使用するテーブルであり、図６に示すように、制御ソフトＩＤ欄２５Ａ、状態欄２５Ｂ、グループＩＤ欄２５Ｃ、稼働ノードＩＤ欄２５Ｄ、使用容量欄２５Ｅ、ＣＰＵ負荷欄２５Ｆ、使用メモリ量欄２５Ｇ、使用通信帯域欄２５Ｈ及びＬＵＮ欄２５Ｉを備えて構成される。制御ソフト管理表２５では、１つの行が１つの制御ソフト２０に対応する。
【００６２】
そして制御ソフトＩＤ欄２５Ａには、対応するクラスタ６内に存在する現在稼働中の制御ソフト２０にそれぞれ付与されたその制御ソフト２０に固有の識別子（制御ソフトＩＤ）が格納され、状態欄２５Ｂには、対応する制御ソフト２０の現在の状態が格納される。なお制御ソフト２０の状態としては、上述したアクティブモード（「Active」）及びパッシブモード（「Passive」）のほか、障害等により稼働し得ない状態であるデッド（「Dead」）、保守などでＩ／Ｏ処理を停止している状態であるストップ（「Stop」）などがある。
【００６３】
またグループＩＤ欄２５Ｃには、対応する制御ソフト２０が構成する冗長化グループ２６（図７）に対して付与されたその冗長化グループ２６に固有の識別子（グループＩＤ）が格納され、稼働ノードＩＤ欄２５Ｄには、対応する制御ソフト２０が稼働するストレージノード３のノードＩＤが格納される。また使用容量欄２５Ｅには、対応する制御ソフト２０が現在使用している記憶領域の合計容量が格納される。
【００６４】
またＣＰＵ負荷欄２５Ｆには、対応する制御ソフト２０を稼働するためのＣＰＵ１０（図２）の現在の使用率が格納され、使用メモリ量欄２５Ｇには、対応する制御ソフト２０のために現在使用されているメモリ１１（図２）の容量が格納される。さらに使用通信帯域欄２５Ｈには、対応する制御ソフト２０が他のストレージノード３との通信のために現在使用しているバックエンドネットワーク５の帯域量が格納される。
【００６５】
ＬＵＮ欄２５Ｉは、コンピュートノード２に提供される仮想ボリュームを識別する識別情報のＬＵＮ（Logical Unit Number：ボリューム番号）が格納され、当該ＬＵＮで識別される仮想ボリュームを管理する制御ソフトの制御ソフトＩＤ２５Ａと対応付けて管理される。
【００６６】
各ストレージノード３のクラスタ制御部２３は、コンピュートノード２からＩ／Ｏ要求（リード要求又はライト要求）を受領した際、Ｉ／Ｏ要求に含まれるＬＵＮを取得し、制御ソフト管理表２５を用いて当該ＬＵＮに対応付けられた制御ソフトＩＤ２５Ａ、稼働ノードＩＤを特定する。これにより、各ストレージノード３のクラスタ制御部２３は、Ｉ／Ｏ要求先となる仮想ボリュームを管理する制御ソフトとその制御ソフトの配置先ノードを特定できる。なお、ＬＵＮ欄２５ＩのＬＵＮは、当該ＬＵＮで識別される仮想ボリュームに対応する冗長化グループのグループＩＤ２５Ｃに対応付けられて管理されてもよい。制御ソフト管理表２５により、Ｉ／Ｏ要求に含まれるＬＵＮから、グループＩＤを特定できれば、グループＩＤで識別される冗長化グループに含まれる制御ソフトＩＤ及び当該制御ソフトＩＤで識別される制御ソフトも特定できる。
【００６７】
この制御ソフト管理表２５に格納される情報も、同一クラスタ６を構成するすべてのストレージノード３のクラスタ制御部２３により共有される情報である。このため代表クラスタ制御部２３は、定期的に他のストレージノード３のクラスタ制御部２３から必要な情報を収集し、収集した情報に基づいて自己が管理する制御ソフト管理表２５を更新する。また代表クラスタ制御部２３は、これら収集した情報をそのクラスタ６内の各ストレージノード３のクラスタ制御部２３に転送することにより、これらクラスタ制御部２３にそのクラスタ制御部２３がそれぞれ管理する制御ソフト管理表２５を最新の状態に更新させる。
【００６８】
（２−２）各種処理の流れ
（２−２−１）ライト処理の流れ
図７は、本情報処理システム１において、平常時にコンピュートノード２からクラスタ６内のいずれかのストレージノード３にライト要求が与えられた場合の処理の流れを示す。
【００６９】
この図７では、「ストレージノードＡ」〜「ストレージノードＤ」はそれぞれストレージノード３を示し、「制御ソフトＡ」〜「制御ソフトＨ」はそれぞれ制御ソフト２０を示している。そして図７では、「ストレージノードＡ」上で稼働する「制御ソフトＡ」と、「ストレージノードＢ」上で稼働する「制御ソフトＢ」とが冗長化グループ２６を構成し、「ストレージノードＢ」上で稼働する「制御ソフトＣ」と、「ストレージノードＣ」上で稼働する「制御ソフトＤ」とが冗長化グループ２６を構成し、「ストレージノードＣ」上で稼働する「制御ソフトＥ」と、「ストレージノードＤ」上で稼働する「制御ソフトＦ」とが冗長化グループ２６を構成し、「ストレージノードＤ」上で稼働する「制御ソフトＧ」と、「ストレージノードＡ」上で稼働する「制御ソフトＨ」とが同じ冗長化グループ２６を構成している例を示している。また、ここでは、制御ソフト２０の冗長化により作成される各冗長化グループ２６の構成がアクティブ−パッシブ構成であるものとする。
【００７０】
この場合、各ストレージノード３のクラスタ制御部２３は、平常時、上述のように各ストレージノード３のＣＰＵ１０（図２）の負荷状態及びメモリ１１（図２）の使用量等の情報を共有し、これらの情報をストレージノード管理表２４や制御ソフト管理表２５に格納して管理する（Ｓ１）。
【００７１】
そして、コンピュートノード２からライト要求がクラスタ６内のいずれかのストレージノード３に与えられると、当該ストレージノード３のクラスタ制御部２３は、制御ソフト管理表２５を用いて、上述のようにこのライト要求に含まれるＬＵＮに基づいて、対応するストレージノード３のクラスタ制御部２３を介して対応する冗長化グループ２６の各制御ソフト２０にそれぞれライト要求を転送する。ライト要求を転送された制御ソフト２０のうち、アクティブモードに設定された制御ソフト２０によりライト処理が実行される。なお、クラスタ制御部２３は、アクティブモードに設定された制御ソフト２０にのみライト要求を転送してもよい。
【００７２】
ここでは、かかるライト要求が、「制御ソフトＡ」及び「制御ソフトＢ」から構成される冗長化グループ２６と対応付けられた仮想ボリュームをライト先とするものであるものとする。また、かかる冗長化グループ２６では、「制御ソフトＡ」がアクティブモードに設定され、「制御ソフトＢ」がパッシブモードに設定されているものとする。従って、この場合、アクティブモードに設定された「制御ソフトＡ」がかかるライト要求に応じたライト処理を実行することになる。
【００７３】
そして、このようなライト処理が実行されると、当該ライト処理を実行した「制御ソフトＡ」が配置された「ストレージノードＡ」の冗長化部２２は、同じストレージノード３（「ストレージノードＡ」）内のクラスタ制御部２３から、そのときライト処理を実行した「制御ソフトＡ」と共に冗長化グループ２６を構成する制御ソフト２０（「制御ソフトＢ」）の制御ソフトＩＤ及び当該制御ソフト２０が配置されたストレージノード３（「ストレージノードＢ」）のバックエンドネットワーク５上のＩＰアドレスを取得する（Ｓ２）。
【００７４】
また、「ストレージノードＡ」の冗長化部２２は、かかるライト処理の処理内容に応じて「制御ソフトＡ」が保持する構成情報２１を更新し（Ｓ３）、当該構成情報２１の更新前後の差分を表す差分データを、バックエンドネットワーク５を介して、ステップＳ２で取得したＩＰアドレスのストレージノード３（「ストレージノードＢ」）に送信する（Ｓ４）。この際、かかる冗長化部２２は、その差分データにより構成情報２１を更新すべき制御ソフト２０として、「制御ソフトＡ」と共に冗長化グループ２６を構成する「制御ソフトＢ」を指定する。
【００７５】
かくして、この差分データが与えられた「ストレージノードＢ」の冗長化部２２は、この差分データに基づいて、「制御ソフトＢ」が保持する構成情報２１を、「制御ソフトＡ」が保持する構成情報２１と同様に更新する。
【００７６】
以上により、同じ冗長化グループ２６を構成する２つの制御ソフト２０（「制御ソフトＡ」及び「制御ソフトＢ」）がそれぞれ保持する２つの構成情報２１が同じ内容に維持される。
【００７７】
（２−２−２）ストレージノードの障害発生時における処理の流れ
次に、クラスタ６を構成するいずれかのストレージノード３に障害が発生した場合の処理の流れについて説明する。なお、ここでは、図８に示すように、「ストレージノードＡ」に障害が発生し、当該「ストレージノードＡ」に実装された「制御ソフトＡ」及び「制御ソフトＨ」がダウンした場合の処理の流れについて説明する。
【００７８】
この場合、かかる障害を検知したいずれかのクラスタ制御部２３は、その障害を代表クラスタ制御部２３に通知する。ここでは、「ストレージノードＢ」のクラスタ制御部２３が代表クラスタ制御部２３に選定されているものとし、かかる通知が「ストレージノードＢ」のクラスタ制御部２３に与えられるものとする。
【００７９】
この通知を受信した代表クラスタ制御部２３は、制御ソフト管理表２５（図６）を参照して、「制御ソフトＡ」と共に同じ冗長化グループ２６を構成する「制御ソフトＢ」が実装された「ストレージノードＢ」のクラスタ制御部２３に対して「制御ソフトＡ」に障害が発生した旨を通知する。また代表クラスタ制御部２３は、「制御ソフトＨ」と共に同じ冗長化グループ２６を構成する「制御ソフトＧ」が実装された「ストレージノードＤ」のクラスタ制御部２３に対して「制御ソフトＨ」に障害が発生した旨を通知する（Ｓ１０）。
【００８０】
この通知を受信した「ストレージノードＢ」のクラスタ制御部２３は、それまでパッシブモードに設定されていた「制御ソフトＢ」の状態をアクティブモードに変更する（Ｓ１１）。これによりそれまで「制御ソフトＡ」が実行していたＩ／Ｏ処理が「制御ソフトＢ」に引き継がれることになる。
【００８１】
また、かかる通知を受信した「ストレージノードＤ」のクラスタ制御部２３は、「制御ソフトＧ」に対応付けられた冗長化部２２に対して、この後「制御ソフトＧ」が保持する構成情報２１が更新された場合においても、その差分データを「ストレージノードＡ」に転送しないよう指示を与える（Ｓ１２）。
【００８２】
続いて、代表クラスタ制御部２３は、「制御ソフトＢ」及び「制御ソフトＧ」の冗長化構成を回復させるため、図９に示すように、「制御ソフトＡ」の新たな配置先とすべきストレージノード３と、「制御ソフトＨ」の新たな配置先とすべきストレージノード３とをそれぞれ決定し、決定結果を各ストレージノード３内のクラスタ制御部２３にそれぞれ通知する（Ｓ１３）。
【００８３】
この際、代表クラスタ制御部２３は、「制御ソフトＡ」や「制御ソフトＨ」の新たな配置先として、ストレージノード管理表２４（図５）を参照して、同じ冗長化グループ２６を構成する他の制御ソフト２０が既に配置されているストレージノード３とは異なるストレージノード３であって、その冗長化グループ２６を構成する他の制御ソフト２０が既に配置されているストレージノード３とは異なる障害グループに属するストレージノード３を選択する。また代表クラスタ制御部２３は、そのようなストレージノード３（「制御ソフトＡ」や「制御ソフトＨ」の新たな配置先の候補となり得るストレージノード３）が複数存在する場合には、ストレージ管理表２４及び制御ソフト管理表２５を参照して、負荷が低いストレージノード３を「制御ソフトＡ」及び「制御ソフトＨ」の新たな配置先としてそれぞれ決定する。
【００８４】
なお、「負荷が低いストレージノード３」とは、候補となり得るストレージノード３の中で、制御ソフト２０を配置してもストレージノード３が持つ記憶装置の容量、ＣＰＵ負荷、メモリ量、バックエンドネットワーク５の通信帯域の許容範囲を超えないストレージノード３の中で最もＣＰＵ負荷が低いものを指す。ここでは、「制御ソフトＡ」の新たな配置先が「ストレージノード３」、「制御ソフトＨ」の新たな配置先が「ストレージノードＢ」にそれぞれ決定されたものとする。なお、ここでいう「許容範囲」とは、容量及びメモリ量であればストレージノード３が持つ記憶装置の容量やメモリ量の範囲内、ＣＰＵ負荷であれば100％以下、バックエンドネットワーク５であれば使用可能な通信帯域の範囲内、あるいは、これら容量、ＣＰＵ負荷、メモリ量及び又はバックエンドネットワーク５の通信帯域について事前にそれぞれ設定された閾値があればその範囲内を指す。以下においても同様である。
【００８５】
この通知を受信した「ストレージノードＢ」のクラスタ制御部２３は、自ストレージノード３内の冗長化部２２に対して「制御ソフトＢ」が保持する構成情報２１を「制御ソフトＡ」の新たな配置先である「ストレージノードＣ」にフルコピーするよう指示を与える（Ｓ１４）。また、この指示を受領したかかる冗長化部２２は、その構成情報２１をバックエンドネットワーク５を介して「ストレージノードＣ」に転送する（Ｓ１５）。そして、この構成情報２１を受信した「ストレージノードＣ」のクラスタ制御部２３は、この構成情報２１を「制御ソフトＡ」と対応付けてメモリ１１（図２）に格納する。
【００８６】
なお、「制御ソフトＢ」が保持する構成情報２１の「ストレージノードＣ」へのフルコピーが完了すると、この後、「ストレージノードＢ」の冗長化部２２が、「制御ソフトＢ」が保持する構成情報２１が更新されるごとに元の構成情報２１との差分データを「ストレージノードＣ」に転送し始めるようになり、これにより「制御ソフトＢ」が保持する構成情報２１と、「ストレージノードＣ」にコピーされた構成情報２１とが同期して更新されるようになる（Ｓ１６）。
【００８７】
同様に、かかる通知を受信した「ストレージノード４」のクラスタ制御部２３は、自ストレージノード３内の冗長化部２２に対して「制御ソフトＧ」が保持する構成情報２１を「制御ソフトＨ」の新たな配置先である「ストレージノードＢ」にフルコピーするよう指示を与える（Ｓ１７）。また、この指示を受領したかかる冗長化部２２は、その構成情報２１をバックエンドネットワーク５を介して「ストレージノードＢ」に転送する（Ｓ１８）。そして、この構成情報２１を受信した「ストレージノードＢ」のクラスタ制御部２３は、この構成情報２１を「制御ソフトＨ」と対応付けてメモリ１１に格納する。
【００８８】
なお、「制御ソフトＧ」が保持する構成情報２１の「ストレージノードＢ」へのフルコピーが完了した場合にも、この後、「ストレージノードＤ」の冗長化部２２が、「制御ソフトＧ」が保持する構成情報２１が更新されるごとに元の構成情報２１との差分データを「ストレージノードＢ」に転送し始めるようになり、これにより「制御ソフトＧ」が保持する構成情報２１と、「ストレージノードＢ」にコピーされた構成情報２１とが同期して更新されるようになる（Ｓ１９）。
【００８９】
この後、「ストレージノードＣ」のクラスタ制御部２３は、「ストレージノードＣ」にインストールされている制御ソフト２０を新たな「制御ソフトＡ」としてパッシブモードで起動する（Ｓ２０）。同様に、「ストレージノードＢ」のクラスタ制御部２３は、「ストレージノードＢ」にインストールされている制御ソフト２０を新たな「制御ソフトＨ」としてパッシブモードで起動する（Ｓ２１）。これにより「制御ソフトＢ」及び「制御ソフトＧ」の冗長化構成が回復される。
【００９０】
そして代表クラスタ制御部２３は、この後、上述のような構成変更に応じて自己が管理する制御ソフト管理表２５を更新する。具体的に、代表クラスタ制御部２３は、制御ソフト管理表２５における「制御ソフトＡ」に対応する行の稼働ノードＩＤ欄２５Ｄ（図６）に格納されたノードＩＤを、「制御ソフトＡ」の新たな配置先である「ストレージノードＣ」のノードＩＤに変更すると共に、制御ソフト管理表２５における「制御ソフトＨ」に対応する行の稼働ノードＩＤ欄２５Ｄに格納されたノードＩＤを、「制御ソフトＨ」の新たな配置先である「ストレージノードＢ」のノードＩＤに変更する。
【００９１】
また代表クラスタ制御部２３は、このようにして更新した自己が管理する制御ソフト管理表２５の内容を同じクラスタ６内の各ストレージノード３のクラスタ制御部２３にそれぞれ通知する（Ｓ２２）。かくして、かかる通知を受領した各クラスタ制御部２３は、代表クラスタ制御部２３から通知された新たな制御ソフト管理表２５の内容と同じ内容となるように自己が管理する制御ソフト管理表２５をそれぞれ更新する。
【００９２】
以上により「ストレージノードＡ」に障害が発生した場合の一連の処理が終了する。
【００９３】
なお、上述の例では、図９に示すように、最終的に「ストレージノードＢ」上で「制御ソフトＢ」、「制御ソフトＣ」及び「制御ソフトＨ」の３つの制御ソフト２０が稼働し、「ストレージノードＣ」上で「制御ソフトＡ」、「制御ソフトＤ」及び「制御ソフトＥ」の３つの制御ソフト２０が稼働する構成になるが、ＣＰＵ負荷やメモリ消費量を抑制するため、制御ソフト２０の構成情報２１をマージし、一部の制御ソフト２０が他の制御ソフト２０のＩ／Ｏ処理を引き継ぐことにより、ストレージノード３上で稼働する制御ソフト２０の数を減らすようにしてもよい。
【００９４】
例えば、図９の例では、「制御ソフトＣ」が保持する構成情報２１を「制御ソフトＢ」が保持する構成情報２１にマージして「制御ソフトＣ」のＩ／Ｏ処理を「制御ソフトＢ」に引き継がせ、同じ冗長化グループに属する「制御ソフトＣ」と「制御ソフトＤ」を停止することができる。
【００９５】
またクラスタ６のストレージノード３を減設（いずれかのストレージノード３を撤去）する際にクラスタ６内で実行される処理の流れも基本的には上述と同様である。ただし、この場合には、本情報処理システム１の管理者が予め撤去対象のストレージノード３を指定し、そのストレージノード３上で稼働するすべての制御ソフト２０を同一クラスタ６内の他のストレージノード３に移動すべき旨の指示（以下、これを全制御ソフト移動指示と呼ぶ）を代表クラスタ制御部２３に与える。
【００９６】
そして、この全制御ソフト移動指示が与えられた代表クラスタ制御部２３は、この全制御ソフト移動指示に従って、「撤去対象のストレージノード３」を上述の「障害が発生したストレージノード３」と置き換えた内容でステップＳ１１以降の処理を実行する。これにより、管理者は、上述のステップＳ２２までの処理が完了した後に、撤去対象のストレージノード３をクラスタ６から撤去することができる。
【００９７】
（２−２−３）ストレージノード増設時の流れ
次に、図７の状態から、図１０に示すように、新たに「ストレージノードＥ」というストレージノード３がクラスタ６内に増設された場合にそのクラスタ６内で実行される処理の流れについて説明する。
【００９８】
まず、「ストレージノードＥ」を増設した後、その「ストレージノードＥ」に実装されたクラスタ制御部２３を起動すると、当該クラスタ制御部２３から「ストレージノードＥ」のＣＰＵ負荷及びメモリ消費量などの情報がそのクラスタ６内の各ストレージノード３のクラスタ制御部２３にそれぞれ通知される。
【００９９】
そして、この通知を受信した上述の代表クラスタ制御部２３（「ストレージノードＢ」のクラスタ制御部２３）は、各ストレージノード３の負荷平準化（リバランス）のために、それまで「ストレージノードＡ」〜「ストレージノードＤ」のいずれかのストレージノード３に実装されていた「制御ソフトＡ」〜「制御ソフトＨ」の中から増設された「ストレージノードＥ」に再配置すべき制御ソフト２０を決定する。そして代表クラスタ制御部２３は、その決定結果をそのクラスタ６内の各クラスタ制御部２３にそれぞれ通知する（Ｓ３０）。
【０１００】
この際、代表クラスタ制御部２３は、「ストレージノードＡ」〜「ストレージノードＥ」のＣＰＵ負荷及び空きメモリ量や、バックエンドネットワーク５の空き帯域の大きさに基づいて、これらを平準化させるように、かつ、できる限り複数のアクティブモードの制御ソフト２０が同一ストレージノード３上で稼働しないように「ストレージノードＥ」に再配置する制御ソフト２０を決定する。ここでは、「ストレージノードＡ」上に実装された「制御ソフトＨ」が「ストレージノードＥ」に再配置する制御ソフト２０として決定されたものとする。
【０１０１】
一方、「制御ソフトＨ」と共に冗長化グループ２６を構成する「制御ソフトＧ」が実装された「ストレージノードＤ」のクラスタ制御部２３は、この決定結果を受信すると、その冗長化グループ２６においてアクティブモードである「制御ソフトＧ」の構成情報２１を「ストレージノードＥ」にフルコピーするよう冗長化部２２に指示を与える（Ｓ３１）。また、この指示を受領した冗長化部２２は、「制御ソフトＧ」の構成情報２１をバックエンドネットワーク５を介して「ストレージノードＥ」に転送する（Ｓ３２）。かくして、この構成情報２１を受信した「ストレージノードＥ」のクラスタ制御部２３は、その構成情報２１をメモリ１１に格納する。
【０１０２】
また「ストレージノードＤ」の冗長化部２２は、「制御ソフトＧ」の構成情報２１を「ストレージノードＥ」にコピーし終えると、「制御ソフトＧ」の構成情報２１が更新されるごとに当該構成情報２１の更新前との差分データをバックエンドネットワーク５を介して「ストレージノードＥ」に転送し始める。かくして、この差分データに基づいて「ストレージノードＥ」内の「制御ソフトＧ」の構成情報２１のコピー結果（つまり構成情報２１）が更新され、これにより「制御ソフトＧ」の構成情報２１と、「ストレージノードＥ」内の「制御ソフトＧ」の構成情報２１のコピー結果との同期が開始される。
【０１０３】
この後、「ストレージノードＤ」のクラスタ制御部２３は、図１１に示すように、「制御ソフトＧ」の冗長化先を「ストレージノードＥ」だけとするよう冗長化部２２に指示を与える（Ｓ３３）。また「ストレージノードＤ」のクラスタ制御部２３は、「制御ソフトＧ」が保持する構成情報２１の「ストレージノードＥ」へのフルコピーが完了した旨を「ストレージノードＥ」のクラスタ制御部２３に通知する。
【０１０４】
かくして、この通知を受信した「ストレージノードＥ」のクラスタ制御部２３は、当該「ストレージノードＥ」にインストールされている制御ソフト２０を新たな「制御ソフトＨ」としてパッシブモードで起動する（Ｓ３４）。また「ストレージノードＥ」のクラスタ制御部２３は、元の「制御ソフトＨ」が稼働している「ストレージノードＡ」のクラスタ制御部２３にその旨を通知する。
【０１０５】
そして、この通知を受領した「ストレージノードＡ」のクラスタ制御部２３は、自ストレージノード３内で稼働している「制御ソフトＨ」の稼働を停止させる（Ｓ３５）。以上により「制御ソフトＨ」の「ストレージノードＥ」への再配置が完了する。
【０１０６】
この後、代表クラスタ制御部２３は、上述のようなシステムの構成変更に応じて自己が管理する制御ソフト管理表２５を更新する。具体的に、代表クラスタ制御部２３は、制御ソフト管理表２５における「制御ソフトＨ」に対応する行の稼働ノードＩＤ欄２５Ｄ（図６）に格納されたノードＩＤを、「制御ソフトＨ」の新たな配置先である「ストレージノードＥ」のノードＩＤに変更する。
【０１０７】
また代表クラスタ制御部２３は、このようにして更新した自己が管理する制御ソフト管理表２５の内容を同じクラスタ６内の各ストレージノード３のクラスタ制御部２３にそれぞれ通知する（Ｓ３６）。かくして、かかる通知を受領した各クラスタ制御部２３は、代表クラスタ制御部２３から通知された新たな制御ソフト管理表２５の内容と同じ内容となるように自己が管理する制御ソフト管理表２５をそれぞれ更新する。
【０１０８】
他方、代表クラスタ制御部２３は、この後、ストレージノード管理表２４及び制御ソフト管理表２５を参照して、「ストレージノードＥ」のＣＰＵ負荷及び空きメモリ量や、バックエンドネットワーク５の通信帯域に余裕がある場合には、図１２に示すように、「ストレージノードＥ」のクラスタ制御部２３に対して、新たな制御ソフト２０をアクティブモードの「制御ソフトＩ」として起動するよう指示を与える。かくして、かかる「制御ソフトＩ」の起動指示を受けた「ストレージノードＥ」のクラスタ制御部２３は、その「ストレージノードＥ」内でそのとき未使用の制御ソフト２０を「制御ソフトＩ」としてアクティブモードで起動する（Ｓ３７）。
【０１０９】
また代表クラスタ制御部２３は、「制御ソフトＩ」と同じ冗長化グループ２６を構成する制御ソフト２０（以下、これを「制御ソフトＪ」とする）の配置先のストレージノード３を決定する。この際、代表クラスタ制御部２３は、ストレージ管理表２４及び制御ソフト管理表２５を参照して、負荷が低いストレージノード３を「制御ソフトＪ」の配置先として決定する。ここでは、「制御ソフトＪ」の配置先として「ストレージノードＡ」が決定されたものとする。
【０１１０】
そして代表クラスタ制御部２３は、このようにして決定したストレージノード３（「ストレージノードＡ」）のクラスタ制御部２３に対して、新たな制御ソフト２０をパッシブモードの「制御ソフトＪ」として起動するよう指示を与える。かくして、この指示を受けた「ストレージノードＡ」のクラスタ制御部２３は、その「ストレージノードＡ」内で新たな制御ソフト２０を「制御ソフトＪ」としてパッシブモードで起動する（Ｓ３８）。
【０１１１】
この後、代表クラスタ制御部２３は、「制御ソフトＪ」が配置されたストレージノード３のノードＩＤを「ストレージノードＥ」のクラスタ制御部２３に通知する。また、この通知を受領した「ストレージノードＥ」のクラスタ制御部２３は、「制御ソフトＩ」と冗長化グループ２６を構成する制御ソフト２０（「制御ソフトＪ」）の制御ソフトＩＤと、その制御ソフト２０が配置されたストレージノード３（「ストレージノードＡ」）のノードＩＤとを自ストレージノード３内の冗長化部２２に通知する（Ｓ３９）。なお、以下においては、このように「ストレージノードＥ」のクラスタ制御部２３から自ストレージノード３内の冗長化部２２に与えられる通知をＩＤ通知と呼ぶ。
【０１１２】
また代表クラスタ制御部２３は、上述のような新たな冗長化グループ２６の構築に応じて自己が管理する制御ソフト管理表２５を更新する。具体的に、代表クラスタ制御部２３は、制御ソフト管理表２５に「制御ソフトＩ」及び「制御ソフトＪ」を新たに登録する。
【０１１３】
また代表クラスタ制御部２３は、制御ソフト管理表２５における「制御ソフトＩ」に対応する行の状態欄２５Ｂ（図６）に「Active」を格納し、その行のグループＩＤ欄２５Ｃ（図６）に「制御ソフトＩ」が構成する冗長化グループ２６に付与したグループＩＤを格納し、さらにその行の稼働ノードＩＤ欄２５Ｄに「制御ソフトＩ」の配置先である「ストレージノードＥ」のノードＩＤを格納する。
【０１１４】
さらに代表クラスタ制御部２３は、制御ソフト管理表２５における「制御ソフトＪ」に対応する行の状態欄２５Ｂ（図６）に「Passive」を格納し、その行のグループＩＤ欄２５Ｃ（図６）に「制御ソフトＪ」が構成する冗長化グループ２６に付与したグループＩＤを格納し、さらにその行の稼働ノードＩＤ欄２５Ｄに「制御ソフトＪ」の配置先である「ストレージノードＡ」のノードＩＤを格納する。
【０１１５】
一方、上述したＩＤ通知を受領した冗長化部２２は、この後、「制御ソフトＩ」へのリード要求やライト要求の受付けを開始させると共に、この後、「制御ソフトＩ」の構成情報２１が変更されるたびに、元の構成情報２１との差分を差分データとして「制御ソフトＪ」が実装された「ストレージノードＡ」に送信することにより、「制御ソフトＪ」の構成情報２１を「制御ソフトＩ」の構成情報２１に常に同期して変更させる（Ｓ４０）。
【０１１６】
また代表クラスタ制御部２３は、このようにして更新した自己が管理する制御ソフト管理表２５の内容を同じクラスタ６内の各ストレージノード３のクラスタ制御部２３にそれぞれ通知する（Ｓ４１）。かくして、かかる通知を受領した各クラスタ制御部２３は、代表クラスタ制御部２３から通知された新たな制御ソフト管理表２５の内容と同じ内容となるように自己が管理する制御ソフト管理表２５をそれぞれ更新する。
【０１１７】
なお上述のようにストレージノード３を増設した後、増設したストレージノード３上で制御ソフト２０を直ちに稼働させる運用の他、クラスタ６内の他のストレージノード３の負荷が急激に増大した場合に備えて、ストレージノード３の増設後直ぐにはそのストレージノード３上で制御ソフト２０を稼働させず、そのストレージノード３を空けておく運用を適用するようにしてもよい。
【０１１８】
（２−２−４）アクティブ−アクティブ構成
図１３は、各冗長化グループ２６において、その冗長化グループ２６を構成する２つの制御ソフト２０が共にアクティブモードに設定された場合のクラスタ６の論理構成例を示す。
【０１１９】
この場合、各冗長化グループ２６では、いずれの制御ソフト２０が構成情報２１を更新した場合においても、更新前の構成情報２１との差分が差分データとして相手側の制御ソフト２０が稼働するストレージノード３に転送され、当該差分データに基づいてかかる相手側の制御ソフト２０が保持する構成情報２１が更新される（Ｓ４２）。これにより同じ冗長化グループ２６を構成する２つの制御ソフト２０がそれぞれ保持する２つの構成情報２１が常に同じ内容に維持（同期して更新）される。
【０１２０】
なお、冗長化グループ２６がアクティブ−アクティブ構成に設定された場合においても、ストレージノード３の障害発生時や増設時における処理の流れは、図７〜図１２について上述したアクティブ−パッシブ構成の場合と同様であるため、ここでの説明は省略する。
【０１２１】
（２−３）ストレージノードの増減設時等における各プログラムの具体的な処理内容
次に、上述したストレージノード３の増減設時等における代表クラスタ制御部２３や冗長化部２２の具体的な処理内容について説明する。なお、以下においては、クラスタ制御部２３や冗長化部２２といった「プログラム」を各種処理の処理主体として説明するが、実際上は、その「プログラム」に基づいてストレージノード３のＣＰＵ１０（図２）がその処理を実行することは言うまでもない。
【０１２２】
（２−３−１）冗長化回復処理
図１４は、クラスタ６内のいずれかのストレージノード３に障害が発生した場合に、そのクラスタ６内の代表クラスタ制御部２３により実行される冗長化回復処理の処理手順を示す。
【０１２３】
代表クラスタ制御部２３は、平常時、上述のようにその代表クラスタ制御部２３が属するクラスタ６内の各ストレージノード３にそれぞれ実装されたクラスタ制御部２３と定期的に通信し、これらの各クラスタ制御部２３から図５について上述したストレージノード管理表２４や、図６について上述した制御ソフト管理表２５に格納するための情報を収集している。
【０１２４】
また代表クラスタ制御部２３は、この処理と並行して図１４に示す冗長化回復処理を実行しており、各ストレージノード３のクラスタ制御部２３とかかる定期的な通信を行うことができたか否かに基づいて、いずれかのストレージノード３に障害が発生したか否かを監視し、又は、いずれかのストレージノード３を撤去する旨の所定指示が与えられるのをされたか否かを監視している（Ｓ５０）。
【０１２５】
そして代表クラスタ制御部２３は、いずれかのストレージノード３に障害が発生したことを検出することによりステップＳ５０で肯定結果を得ると、障害が発生したストレージノード３に配置されていた制御ソフト（以下、これを稼働不能制御ソフトと呼ぶ）２０ごとに、その稼働不能制御ソフト２０のＩ／Ｏ処理を当該稼働不能制御ソフト２０と同じ冗長化グループ２６を構成する他の制御ソフト（以下、これを同一グループ内制御ソフトと呼ぶ）２０に引き継がせるよう、当該同一グループ内制御ソフト２０が配置されたストレージノード３のクラスタ制御部２３に指示を与える（Ｓ５１）。
【０１２６】
この際、代表クラスタ制御部２３は、かかる同一グループ内制御ソフト２０が複数存在する場合には、これら同一グループ内制御ソフト２０のうち、稼働不能制御ソフト２０が障害発生前までに使っていた記憶装置の容量、ＣＰＵ負荷、メモリ使用量及びバックエンドネットワーク５の通信帯域を引き継いでも、記憶装置の容量、ＣＰＵ負荷、メモリ量、及びバックエンドネットワーク５の通信帯域の許容範囲を超過しないストレージノード３に配置された同一グループ内制御ソフト２０を稼働不能制御ソフト２０のＩ／Ｏ処理を引き継ぐべき制御ソフト２０として決定し、その同一グループ内制御ソフト２０が配置されたストレージノード３のクラスタ制御部２３に指示を与える。
【０１２７】
かくして、この指示を受けたクラスタ制御部２３は、制御ソフト管理表２５を参照して、同一グループ内制御ソフト２０がパッシブモードに設定されている場合には、当該同一グループ内制御ソフト２０の状態をアクティブモードに変更する。
【０１２８】
続いて、代表クラスタ制御部２３は、かかる稼働不能制御ソフト２０の代替となる新たな制御ソフト２０の配置先のストレージノード（以下、これを配置先ストレージノードと呼ぶ）３を決定する配置先ストレージノード決定処理を実行する（Ｓ５２）。例えば、稼働不能制御ソフト２０及び同一グループ内制御ソフト２０により構成される冗長化グループ２６がアクティブ−アクティブ構成であった場合、代表クラスタ制御部２３は、ストレージノード管理表２４（図５）を参照して、負荷が低いストレージノード３を、かかる配置先ストレージノード３に決定する。
【０１２９】
次いで、代表クラスタ制御部２３は、ステップＳ５２の配置先ストレージノード決定処理により、かかる配置先ストレージノード３を決定できたか否かを判定する（Ｓ５３）。そして代表クラスタ制御部２３は、この判定で否定結果を得た場合には、この冗長化回復処理を終了する。
【０１３０】
これに対して、代表クラスタ制御部２３は、ステップＳ５３の判定で肯定結果を得ると、上述の同一グループ内制御ソフト２０が実装されたストレージノード３のクラスタ制御部２３に、上述のようにして決定した配置先ストレージノード３のノードＩＤを通知する（Ｓ５４）。
【０１３１】
かくして、この通知を受領したクラスタ制御部２３は、同一グループ内制御ソフト２０が保持している構成情報２１を配置先ストレージノード３に転送するよう自ストレージノード３の冗長化部２２に指示を与える。また、この指示を受けた冗長化部２２は、同一グループ内制御ソフト２０が保持している構成情報２１を、バックエンドネットワーク５を介して配置先ストレージノード３に転送することにより、当該構成情報２１を当該配置先ストレージノード３にフルコピーする。
【０１３２】
なお、かかる冗長化部２２は、この後、同一グループ内制御ソフト２０が保持している構成情報２１が更新された場合に、更新前の構成情報２１との差分データをバックエンドネットワーク５を介して配置先ストレージノード３に転送する。かくして配置先ストレージノード３側では、この差分データに基づいてかかる構成情報２１のコピーが更新され、これにより同一グループ内制御ソフト２０が保持している構成情報２１と、配置先ストレージノード３における当該構成情報２１とのコピーとが完全に同期して更新されることになる。
【０１３３】
一方、代表クラスタ制御部１２は、ステップＳ５４の処理後、同一グループ内制御ソフト２０が保持している構成情報２１と、配置先ストレージノード３におけるその構成情報２１のコピーとが同期し終えるのを待ち受ける（Ｓ５５）。そして代表クラスタ制御部２３は、やがてこれら２つの構成情報２１が同期し終えると、稼働不能制御ソフト２０の代替となる制御ソフト２０を起動するよう配置先ストレージノード３のクラスタ制御部２３に指示を与える（Ｓ５６）。
【０１３４】
かくして、この指示を受けた配置先ストレージノード３のクラスタ制御部２３は、そのときの未使用の制御ソフト２０を起動する。この際、かかるクラスタ制御部２３は、その制御ソフト２０及び同一グループ内制御ソフト２０で構成される冗長化グループ２６をアクティブ−パッシブ構成とする場合には、その制御ソフト２０をパッシブモードで起動し、当該冗長化グループ２６をアクティブ−アクティブ構成とする場合には、その制御ソフト２０をアクティブモードで起動する。また、かかるクラスタ制御部２３は、この後、ステップＳ５４で配置先ストレージノード３にフルコピーされた構成情報２１をその制御ソフト２０に対応付ける。かくして、その制御ソフト２０は、この後、この構成情報２１を保持し、当該構成情報２１に基づいてＩ／Ｏ処理を実行する。
【０１３５】
続いて、代表クラスタ制御部２３は、自ストレージノード３が保持する制御ソフト管理表２５（図６）を、上述のように稼働不能制御ソフト２０をステップＳ５６で起動した制御ソフト２０に入れ替えた後の状態に更新する（Ｓ５７）。
【０１３６】
具体的に、代表クラスタ制御部２３は、自ストレージノード３内の制御ソフト管理表２５における稼働不能制御ソフト２０に対応する行の状態欄２５Ｂ（図６）にその稼働不能制御ソフト２０が使用できなくなったことを意味する「Dead」を格納する。
【０１３７】
また代表クラスタ制御部２３は、その制御ソフト管理表２５の未使用の行を１つ確保し、その行の制御ソフトＩＤ欄２５Ａ（図６）にステップＳ５６で起動させた制御ソフト２０に対して付与したその制御ソフト２０に固有の制御ソフトＩＤを格納し、その行の状態欄２５Ｂ（図６）にその制御ソフト２０の状態（「Active」又は「Passive」）を格納し、その行のグループＩＤ欄２５Ｃ（図６）に稼働不能制御ソフト２０と同じ冗長化グループ２６のグループＩＤを格納し、その行の稼働ノードＩＤ欄２５Ｄ（図６）に配置先ストレージノード３のノードＩＤを格納する。
【０１３８】
さらに代表クラスタ制御部２３は、同じクラスタ６内の他のストレージノード３のクラスタ制御部２３に対して、上述と同様に制御ソフト管理表２５を更新するよう指示を与える。
【０１３９】
そして代表クラスタ制御部２３は、上述のようにしてクラスタ６内の各ストレージノード３の制御ソフト管理表２５を更新し終えるとステップＳ５０に戻り、この後、ステップＳ５０以降を同様に繰り返す。
【０１４０】
なお、撤去対象のストレージノード３を指定した上述の全制御ソフト移動指示が与えられた場合における代表クラスタ制御部２３の処理内容も上述と同様である。この場合、上述の「稼働不能制御ソフト２０」を「撤去対象のストレージノード３上で稼働する制御ソフト２０」に置き換えた処理が実行される。
【０１４１】
（２−３−２）配置先ストレージノード決定処理
図１５は、かかる冗長化回復処理（図１４）のステップＳ５２において代表クラスタ制御部２３により実行される配置先ストレージノード決定処理の具体的な処理手順を示す。
【０１４２】
代表クラスタ制御部２３は、冗長化回復処理のステップＳ５２に進むと、この図１５に示す配置先ストレージノード決定処理を開始し、まず、ストレージノード管理表２４（図５）を参照して、クラスタ６内の各ストレージノード３のノードＩＤをＣＰＵ負荷が低いストレージノード３の順番で並べたリスト（以下、これを配置先ノード候補リストと呼ぶ）を作成する（Ｓ６０）。このとき代表クラスタ制御部２３は、ＣＰＵ負荷が同じストレージノード３が複数存在する場合には、制御ソフト２０の稼働数がより少ないストレージノード３をこれらのストレージノード３の中でより先頭に近い順位に設定する。
【０１４３】
続いて、代表クラスタ制御部２３は、ステップＳ６０で作成した配置先ノード候補リストにノードＩＤが掲載された各ストレージノード３の中から先頭のノードＩＤを選択し（Ｓ６１）、選択したノードＩＤに対応するストレージノード（以下、これを第１の選択ストレージノードと呼ぶ）３上で稼働不能制御ソフト２０と同じ冗長化グループ２６に属する制御ソフト２０（つまり同一グループ内制御ソフト２０）が稼働しているか否かを制御ソフト管理表２５（図６）を参照して判断する（Ｓ６２）。そして代表クラスタ制御部２３は、この判断で肯定結果を得るとステップＳ６５に進む。
【０１４４】
これに対して、代表クラスタ制御部２３は、ステップＳ６２の判断で否定結果を得ると、ストレージノード管理表２４を参照して、第１の選択ストレージノード３が、稼働不能制御ソフト２０と同じ冗長化グループ２６に属する他の制御ソフト２０が配置されたストレージノードと同じ障害グループに属しているか否かを判断する（Ｓ６３）。そして代表クラスタ制御部２３は、この判断で肯定結果を得ると、ステップＳ６５に進む。
【０１４５】
これに対して、代表クラスタ制御部２３は、ステップＳ６３の判断で否定結果を得ると、ストレージノード管理表２４を参照して、第１の選択ストレージノード３上に稼働不能制御ソフト２０の代替となる制御ソフト２０を配置した場合に、第１の選択ストレージノード３の記憶装置の容量、ＣＰＵ負荷、メモリ量及びバックエンドネットワーク５の通信帯域の許容範囲を超過するか否かを判断する（Ｓ６４）。なお、代替となる制御ソフト２０の使用する使用容量、ＣＰＵ負荷、メモリ使用量及び使用通信帯域は、例えば、障害発生直後に稼働不能制御ソフト２０が使っていたＣＰＵ負荷、メモリ使用量及び使用通信帯域を制御ソフト管理表２５から保存しておくことで判断できる。
【０１４６】
そして代表クラスタ制御部２３は、ステップＳ６４の判断で否定結果を得ると、直前のステップＳ６１で選択したノードＩＤが付与されたストレージノード（第１の選択ストレージノード）３を上述の配置先ストレージノード３に決定し（Ｓ６７）、この後、この配置先ストレージノード決定処理を終了して冗長化回復処理（図１４）に戻る。
【０１４７】
これに対して、代表クラスタ制御部２３は、ステップＳ６４の判断で肯定結果を得ると、直前のステップＳ６１で選択したノードＩＤを配置先ノード候補リストから削除した後（Ｓ６５）、配置先ノード候補先リストが空になったか否かを判断する（Ｓ６６）。
【０１４８】
そして代表クラスタ制御部２３は、この判断で否定結果を得るとステップＳ６１に戻り、この後、ステップＳ６１以降の処理を同様に実行する。また代表クラスタ制御部２３は、ステップＳ６６の判断で肯定結果を得ると、この配置先ストレージノード決定処理を終了する。
【０１４９】
（２−３−３）リバランス処理
一方、図１６は、クラスタ６にストレージノード３が増設された場合や、クラスタ６にストレージノード３が増設されていない場合においても定期的又は不定期にそのクラスタ６内の代表クラスタ制御部２３により実行されるリバランス処理の処理手順を示す。代表クラスタ制御部２３は、この処理手順に従って、クラスタ６内のいずれかの制御ソフト２０の機能を当該クラスタ６内の他のストレージノード３（クラスタ６にストレージノード３が増設された場合には、その増設されたストレージノード（以下、これを増設ストレージノードと呼ぶ）３）に移動させることによりクラスタ６内で各ストレージノード３の負荷を分散する。
【０１５０】
実際上、かかる代表クラスタ制御部２３は、新たなストレージノード３が増設されたこと、又は、リバランス処理の定期的な又は不定期の実行タイミングが到来したことを認識すると、この図１６に示すリバランス処理を開始し、まず、クラスタ６内の他のストレージノード３（増設ストレージノード３を含む）に移動させる制御ソフト（以下、これを移動対象制御ソフトと呼ぶ）２０と、その移動対象制御ソフト２０の移動先となるストレージノード（以下、これを移動先ストレージノードと呼ぶ）３とをそれぞれ決定する移動対象制御ソフト及び移動先ストレージノード決定処理を実行する（Ｓ７０）。
【０１５１】
例えば、代表クラスタ制御部２３は、各冗長化グループ２６がアクティブ−パッシブ構成の場合、負荷が高いストレージノード３に実装された制御ソフト２０のうち、パッシブモードに設定された１つの制御ソフト２０を移動対象制御ソフト２０に決定する。また代表クラスタ制御部２３は、クラスタ６内にストレージノード３が増設された場合には、増設ストレージノード３を移動先ストレージノード３に決定する。
【０１５２】
続いて、代表クラスタ制御部２３は、ステップＳ７０で決定した移動対象制御ソフト２０が稼働しているストレージノード３のクラスタ制御部２３に対して、移動対象制御ソフト２０の制御ソフトＩＤと、その移動対象制御ソフト２０の移動先となるストレージノード（移動先ストレージノード）３のノードＩＤとを通知する（Ｓ７１）。
【０１５３】
かくして、この通知を受信したクラスタ制御部２３は、通知された移動先ストレージノード３に対し、移動対象制御ソフト２０が保持する構成情報２１を転送するよう自ストレージノード３内の冗長化部２２に指示を与える。また、この指示を受けた冗長化部２２は、移動対象制御ソフト２０が保持している構成情報２１を、バックエンドネットワーク５を介して移動先ストレージノード３に転送する。そして、ストレージノード３のクラスタ制御部２３は、この構成情報２１を受信すると、これをメモリ１１に格納する。また、かかる冗長化部２２は、この後、移動対象制御ソフト２０が保持している構成情報２１と、移動先ストレージノード３が保持するその構成情報２１のコピーとを同期させるよう、差分のデータをバックエンドネットワーク５を介して移動先ストレージノード３に転送する。
【０１５４】
一方、代表クラスタ制御部２３は、ステップＳ７１の処理後、移動対象制御ソフト２０が保持している構成情報２１と、移動先ストレージノード３にコピーされた構成情報２１とが同期し終えるのを待ち受けている（Ｓ７２）。そして代表クラスタ制御部２３は、やがてこれら２つの構成情報２１が同期し終えると、移動対象制御ソフト２０の代わりとなる制御ソフト２０を起動するよう移動先ストレージノード３のクラスタ制御部２３に指示を与える（Ｓ７３）。
【０１５５】
かくして、この指示が与えられた移動先ストレージノード３のクラスタ制御部２３は、移動対象制御ソフト２０の代替となる制御ソフト２０を起動する。この際、かかるクラスタ制御部２３は、移動対象制御ソフト２０がパッシブモードで稼働していた場合にはその制御ソフト２０もパッシブモードで起動し、移動対象制御ソフト２０がアクティブモードで稼働していた場合にはその制御ソフト２０もアクティブモードで起動する。
【０１５６】
この後、代表クラスタ制御部２３は、移動対象制御ソフト２０が稼働しているストレージノード３のクラスタ制御部２３に対して、移動対象制御ソフト２０の稼働を停止させるよう指示を与える（Ｓ７４）。かくして、この指示を受けたクラスタ制御部２３は、その移動対象制御ソフト２０の稼働を停止させる。
【０１５７】
続いて、代表クラスタ制御部２３は、自ストレージノード３が保持する制御ソフト管理表２５（図６）を、上述のように移動対象制御ソフト２０をステップＳ７３で起動させた制御ソフト２０に入れ替えた後の状態に更新すると共に、他のクラスタ制御部２３にも同様に制御ソフト管理表２５を更新するよう指示を与える（Ｓ７５）。
【０１５８】
具体的に、代表クラスタ制御部２３は、自ストレージノード３内の制御ソフト管理表２５における移動対象制御ソフト２０に対応する行の稼働ノードＩＤ欄２５Ｄ（図６）に格納されているノードＩＤを移動先ストレージノード３のノードＩＤに更新する。また代表クラスタ制御部２３は、同じクラスタ６内の他のストレージノード３のクラスタ制御部２３に対して、これと同様に制御ソフト管理表２５を更新するよう指示を与える。
【０１５９】
次いで、代表クラスタ制御部２３は、新たな冗長化グループ２６を生成し、当該冗長化グループ２６を構成する各制御ソフト２０の配置先のストレージノード３をそれぞれ決定する（Ｓ７６）。この場合、代表クラスタ制御部２３は、かかる冗長化グループ２６を構成する各制御ソフト２０のうちの１つの制御ソフト２０の配置先を移動先ストレージノード３に決定し、他の制御ソフト２０の配置先を図１５について上述した配置先ストレージノード決定処理により決定する。
【０１６０】
さらに代表クラスタ制御部２３は、ステップＳ７６の決定結果に従って、新規の冗長化グループ２６を構成する各制御ソフト２０をそれぞれステップＳ７６で決定したストレージノード３に配置する（Ｓ７７）。具体的に、代表クラスタ制御部２３は、移動先ストレージノード３と、ステップＳ７６で決定した各ストレージノード３のクラスタ制御部２３に新規の制御ソフト２０を起動するよう指示を与える。かくして、この指示を受けた各クラスタ制御部２３は、それぞれ自ストレージノード３内のそのとき未使用の制御ソフト２０を起動する。
【０１６１】
このとき代表クラスタ制御部２３は、ステップＳ７７で起動させた２つの制御ソフト２０のうちのアクティブモードに設定すべき制御ソフト２０が実装されたストレージノード３（移動先ストレージノード３）のクラスタ制御部２３に対して、相手側の制御ソフト２０が配置されたストレージノード３のノードＩＤを通知する（Ｓ７８）。
【０１６２】
かくしてこの通知を受領したクラスタ制御部２３は、かかる相手側の制御ソフト２０の制御ソフトＩＤと、当該相手側の制御ソフト２０が実装されたストレージノード３のノードＩＤとを自ストレージノード３内の冗長化部２２に通知する。また、この通知を受けたクラスタ制御部２３は、その制御ソフト２０へのリード要求やライト要求の受付けを開始させると共に、その制御ソフト２０が保持する構成情報２１が更新されるたびに、元の構成情報２１との差分を差分データとして相手側の制御ソフト２０が実装されたストレージノード３にバックエンドネットワーク５を介して転送することにより、当該相手側の制御ソフト２０が保持する構成情報２１を同様に更新させる。
【０１６３】
この後、代表クラスタ制御部２３は、ステップＳ７６〜ステップＳ７８の処理結果に基づいて自ストレージノード３内の制御クラスタ管理表２５（図６）を更新し、さらにこれと同様に他のストレージノード３内の制御クラスタ管理表２５を更新させる（Ｓ７９）。
【０１６４】
具体的に、代表クラスタ制御部２３は、自ストレージノード３内の制御ソフト管理表２５にそのとき新たに作成した冗長化グループ２６を構成する各制御ソフト２０をそれぞれ新規登録し、これら制御ソフト２０のうち、移動先ストレージノード３上で稼働する制御ソフト２０に対応する行の状態欄２５Ｂ（図６）に「Active」、他方の制御ソフト２０に対応する行の状態欄２５Ｂに「Passive」を格納する。また代表クラスタ制御部２３は、これら行のグループＩＤ欄２５Ｃ（図６）にそれぞれそのとき作成した冗長化グループ２６に対して付与したグループＩＤを格納し、さらにこれら行の稼働ノードＩＤ欄（図６）にそれぞれ対応する制御ソフト２０が稼働しているストレージノード３のノードＩＤをそれぞれ格納する。
【０１６５】
さらに代表クラスタ制御部２３は、このようにして更新した自己が管理する制御ソフト管理表２５の内容を同じクラスタ６内の各ストレージノード３のクラスタ制御部２３にそれぞれ通知する。かくして、かかる通知を受領した各クラスタ制御部２３は、代表クラスタ制御部２３から通知された新たな制御ソフト管理表２５の内容と同じ内容となるように自己が管理する制御ソフト管理表２５をそれぞれ更新する。
【０１６６】
この後、代表クラスタ制御部２３は、このリバランス処理を終了する。
【０１６７】
（２−３−４）移動対象制御ソフト及び移動先ストレージノード決定処理
図１７は、かかるリバランス処理のステップＳ７０において代表クラスタ制御部２３により実行される移動対象制御ソフト及び移動先ストレージノード決定処理の具体的な処理手順を示す。
【０１６８】
代表クラスタ制御部２３は、リバランス処理のステップＳ７０に進むと、この図１７に示す移動対象制御ソフト及び移動先ストレージノード決定処理を開始し、まず、ストレージノード管理表２４（図５）を参照して、クラスタ６内の各ストレージノード３のノードＩＤをＣＰＵ負荷が高いストレージノードの順番で並べたリスト（以下、これを移動元ノード候補リストと呼ぶ）を作成する（Ｓ８０）。このとき代表クラスタ制御部２３は、ＣＰＵ負荷が同じストレージノード３が複数存在する場合には、制御ソフト２０の稼働数がより多いストレージノード３をこれらストレージノード３の中でより先頭に近い順位に設定する。
【０１６９】
続いて、代表クラスタ制御部２３は、ステップＳ８０で作成した移動元ノード候補リストにノードＩＤが掲載された各ストレージノード３の中から先頭のノードＩＤを選択し（Ｓ８１）、選択したノードＩＤに対応するストレージノード（以下、これを第２の選択ストレージノードと呼ぶ）３上で１つ以上の制御ソフト２０が稼働しているか否かを制御ソフト管理表２５（図６）を参照して判断する（Ｓ８２）。そして代表クラスタ制御部２３は、この判断で否定結果を得ると、ステップＳ８６に進む。
【０１７０】
これに対して、代表クラスタ制御部２３は、ステップＳ８２の判断で肯定結果を得ると、ステップＳ８１で選択したノードＩＤのストレージノード３上で稼働する制御ソフト２０のうち、１つを選択し、これを移動対象制御ソフト２０に決定する（Ｓ８３）。移動対象制御ソフト２０の選択方法としては、例えば、移動中のＩ／Ｏ性能への影響を抑えるために、パッシブモードに設定された制御ソフト２０を選択する。あるいは、パッシブモードに設定された制御ソフト２０がない場合には、アクティブモードに設定された制御ソフト２０のうち、ＣＰＵ負荷が低い制御ソフト２０を選択する。
【０１７１】
続いて、代表クラスタ制御部２３は、図１５について上述した配置先ストレージノード決定処理を実行することにより、移動対象制御ソフト２０の配置先ストレージノード（移動先ストレージノード）３を決定する（Ｓ８４）。
【０１７２】
さらに代表クラスタ制御部２３は、ステップＳ８４の配置先ストレージノード決定処理により移動対象制御ソフト２０の配置先ストレージノード（移動先ストレージノード）３を決定できたか否かを判断する（Ｓ８５）。そして代表クラスタ制御部２３は、この判断で肯定結果を得ると、この移動対象制御ソフト決定処理を終了してリバランス処理に戻る。
【０１７３】
これに対して、代表クラスタ制御部２３は、ステップＳ８５の判断で否定結果を得ると、ステップＳ８１で選択したノードＩＤを移動元ノード候補リストから削除した後（Ｓ８６）、移動元ノード候補リストが空になったか否かを判断する（Ｓ８７）。
【０１７４】
そして代表クラスタ制御部２３は、この判断で否定結果を得るとステップＳ８１に戻り、この後、ステップＳ８１以降の処理を同様に実行する。また代表クラスタ制御部２３は、ステップＳ８７の判断で肯定結果を得ると、この移動対象制御ソフト決定処理を終了してリバランス処理に戻る。
【０１７５】
（３）本実施の形態の効果
以上のように本実施の形態では、同じ冗長化グループ２６を構成する制御ソフト２０を、クラスタ６を構成する各ストレージノード３の負荷を分散するように、それぞれ異なるストレージノード３に分散して配置するため、各ストレージノード３に制御ソフトウェア２０が分散して配置される。
【０１７６】
従って、本実施の形態の情報処理システム１によれば、クラスタ６内の各ストレージノード３で処理負荷を分散し、各ストレージノード３のＣＰＵ１０やメモリ１１、記憶装置１２並びに第１及び第２の通信装置１３，１４といった情報処理資源を有効に活用することができる。
【０１７７】
また本情報処理システム１では、ストレージノード３の減設又は障害発生により冗長化グループ２６のいずれかの制御ソフト２０が稼働し得なくなった場合においても、その代替となる制御ソフト２０や当該制御ソフト２０が利用する構成情報２１が適切なストレージノード３上に直ちに再現されるため、制御ソフト２０の冗長構成を常にかつ確実に維持することができ、その分、システム全体としての可用性及び信頼性を向上させることができる。
【０１７８】
さらに本情報処理システム１では、ストレージノード３の増設時にはクラスタ３内のいずれかの制御ソフト２０がそのストレージノード３に再配置されるため、本情報処理システム１の管理者の手を煩わせることなくストレージノード３の負荷分散を行うことができ、その分、システム全体としての管理を容易化させることができる。
【０１７９】
（４）他の実施の形態
なお上述の実施の形態においては、図１４〜図１７の処理を代表クラスタ制御部２３が実行するようにした場合について述べたが、本発明はこれに限らず、ストレージノード３とは別個に、サーバ装置等のコンピュータ装置からなる管理装置（管理部）をストレージサービスネットワーク４やバックエンドネットワーク５に接続し、当該管理装置が代表クラスタ制御部２３に変えて図１４〜図１７の処理の一部又は全部を実行するようにしてもよい。
【０１８０】
また上述の実施の形態においては、クラスタ６にストレージノード３が増設された場合に図１６について上述したリバランス処理を実行するようにした場合について述べたが、本発明はこれに限らず、各ストレージノード３の負荷を分散させるように、必要な制御ソフト２０を他のストレージノード３に再配置するリバランス処理を適宜行うようにしてもよい。
【０１８１】
また上述の実施の形態においては、全てのストレージノード３に負荷を分散するように制御ソフト２０を配置するリバランス処理（図１６）について述べたが、本発明はこれに限らず、平常時、一部のストレージノード３には、アクティブモードの制御ソフト２０あるいは、アクティブモードやパッシブモードに限らず制御ソフト２０自体を配置しない分散方式をとってもよい。すなわち、記憶装置の容量、ＣＰＵ負荷、メモリ量、バックエンドネットワーク５の通信帯域に余裕を持たせたストレージノード３を用意することで、障害発生時に計算資源不足となることを防ぐ分散方式をとってもよい。
【０１８２】
また、サーバ上でハイパーバイザが動作し、ハイパーバイザ上で１または複数の仮想計算機が稼働し、その仮想計算機上で、図３に示す各種プログラムが動作してもよい。すなわち、各種プログラム（制御ソフト２０、冗長化部２２、クラスタ制御部２３）は、物理計算機のハードウェア上で動作することもあれば、仮想計算機上で動作しても良い。同様に、コンピュートノード２は、仮想計算機上で動作するアプリケーションプログラム（ホストプログラム）であってもよいし、物理的なホスト計算機（ホストコンピュータ）であっても良い。情報処理システム１が複数のサーバを有するとき、サーバの一部が異なるサイトにあっても良い。また、情報処理システム１のサーバの一部または全部がクラウド上にあって、ネットワークを介して、ユーザにサービスが提供されても良い。
【０１８３】
各種プログラム（制御ソフト２０、冗長化部２２、クラスタ制御部２３）が動作する仮想計算機と、ホストプログラムが動作する仮想計算機とが、同一のサーバ（ノード）上にある構成（ハイパーコンバージドインフラストラクチャ）であっても、ネットワークを介して接続する異なるサーバ上にある構成であってもよい。
【産業上の利用可能性】
【０１８４】
本発明は、複数のストレージノードを備える種々の構成の情報処理システムに広く適用することができる。
【符号の説明】
【０１８５】
１……情報処理システム、２……コンピュートノード、３……ストレージノード、４……ストレージサービスネットワーク、５……バックエンドネットワーク、６……クラスタ、１０……ＣＰＵ、１１……メモリ、１２……記憶装置、２０……制御ソフト、２１……構成情報、２２……冗長化部、２３……クラスタ制御部、２４……ストレージノード管理表、２５……制御ソフト管理表。
【図１】
2019101703.tif 000003
【図２】
2019101703.tif 000004
【図３】
2019101703.tif 000005
【図４】
2019101703.tif 000006
【図５】
2019101703.tif 000007
【図６】
2019101703.tif 000008
【図７】
2019101703.tif 000009
【図８】
2019101703.tif 000010
【図９】
2019101703.tif 000011
【図１０】
2019101703.tif 000012
【図１１】
2019101703.tif 000013
【図１２】
2019101703.tif 000014
【図１３】
2019101703.tif 000015
【図１４】
2019101703.tif 000016
【図１５】
2019101703.tif 000017
【図１６】
2019101703.tif 000018
【図１７】
2019101703.tif 000019