(57)【要約】【課題】  システム全体としての運用コストの低減を図ることができる情報処理システム及びボリューム割当て方法を提案する。【解決手段】  レプリケーションを実行するレプリケーショングループが１又は複数のノードにより構成され、ストレージノードが、搭載された各記憶装置を、当該記憶装置のドライブ種別に応じて複数の記憶階層に分けて管理し、コントローラノードが、レプリケーショングループを構成する各ノードに対して、当該ノードが利用するミドルウェアの種別及びレプリケーショングループにおける当該ノードのノード種別に応じた記憶階層の記憶装置が記憶領域を提供するボリュームをそれぞれ割り当てるようにした。【選択図】        図１１
2019191951.tif 000002
【特許請求の範囲】
【請求項１】
データのリード及び又はライト処理を実行する複数のノードが稼動する情報処理システムにおいて、
前記ノードを構成し、又は１若しくは複数の前記ノードが稼動するコンピュートサーバと、
応答性能が異なる複数のドライブ種別の記憶装置がそれぞれ搭載され、いずれかのドライブ種別の前記記憶装置が記憶領域を提供するボリュームが作成されるストレージノードと、
前記コンピュートサーバ及び前記ストレージノードを制御するコントローラノードと
を備え、
前記ノードは、
１又は複数の他の前記ノードと共にレプリケーションを実行するレプリケーショングループをそれぞれ構成し、
前記ストレージノードは、
搭載された各前記記憶装置を、当該記憶装置の前記ドライブ種別に応じて複数の記憶階層に分けて管理し、
前記コントローラノードは、
各前記ノードに対して、当該ノードが利用するミドルウェアの種別及び前記レプリケーショングループにおける当該ノードのノード種別に応じた記憶階層の前記記憶装置が記憶領域を提供する前記ボリュームをそれぞれ割り当てる
ことを特徴とする情報処理システム。
【請求項２】
前記コントローラノードは、
各前記ストレージノードの前記記憶階層ごとの空き容量をそれぞれ管理し、
必要な前記ノードに対して、対応する前記記憶階層の空き容量が最も多い前記ストレージノードから前記ボリュームを割り当てる
ことを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記コントローラノードは、
前記ノードを構成するコンピュートサーバの障害を検出したときに、当該ノード以外の他の前記ノードに対して、前記障害が発生した前記ノードに割り当てられていた前記ボリュームを割り当てて起動する
ことを特徴とする請求項１に記載の情報処理システム。
【請求項４】
前記コントローラノードは、
前記レプリケーショングループにおけるノード種別がレプリケート元である前記ノードを構成するコンピュートサーバ又は当該ノードが存在する前記コンピュートサーバの障害を検出した場合であって、当該ノードに代えて当該レプリケーショングループを構成する他の前記ノードが前記レプリケート元に昇格したときには、当該レプリケーショングループを構成する他の前記ノード以外のノードに対して当該障害が発生する前の前記レプリケート元のノードに割り当てられていた前記ボリュームを割り当て、当該ボリュームを割り当てた前記ノードを当該レプリケーショングループにおけるレプリケート先として起動した後に、起動した当該ノードのノード種別を当該レプリケーショングループにおける前記レプリケート元に切り替える
ことを特徴とする請求項３に記載の情報処理システム。
【請求項５】
前記コントローラノードは、
前記レプリケーショングループにおけるノード種別がレプリケート元である前記ノードに割り当てられた前記ボリュームが存在する前記ストレージノードの障害を検出した場合であって、当該ノードに代えて当該レプリケーショングループを構成する他の前記ノードがレプリケート元に昇格したときには、前記レプリケート元に昇格した前記ノードに割り当てられている前記ボリュームに記憶領域を提供する前記記憶装置の前記記憶階層が、当該レプリケーショングループにおける前記レプリケート元の前記ノードに割り当てるべき前記記憶階層であるか否かを判定し、否定結果を得た場合には、前記レプリケート元に昇格した前記ノードに割り当てられている前記ボリュームに格納されたデータを、当該レプリケーショングループにおける前記レプリケート元の前記ノードに割り当てるべき前記記憶階層の前記記憶装置が提供する記憶領域に移動させる
ことを特徴とする請求項１に記載の情報処理システム。
【請求項６】
前記コントローラノードは、
同一の前記レプリケーショングループを構成する各前記ノードに対して、互いに異なるフォルトセットにそれぞれ属する前記ストレージノード内に作成された前記ボリュームを割り当てる
ことを特徴とする請求項２に記載の情報処理システム。
【請求項７】
データのリード及び又はライト処理を実行する複数のノードが稼動する情報処理システムにおいて実行されるボリューム割当て方法において、
前記情報処理システムは、
前記ノードを構成し、又は１若しくは複数の前記ノードが稼動するコンピュートサーバと、
応答性能が異なる複数のドライブ種別の記憶装置がそれぞれ搭載され、いずれかのドライブ種別の前記記憶装置が記憶領域を提供するボリュームが作成されるストレージノードと、
前記コンピュートサーバ及び前記ストレージノードを制御するコントローラノードと
を有し、
前記ノードは、
１又は複数の他の前記ノードと共にレプリケーションを実行するレプリケーショングループをそれぞれ構成し、
前記ストレージノードが、搭載された各前記記憶装置を、当該記憶装置の前記ドライブ種別に応じて複数の記憶階層に分けて管理する第１のステップと、
前記コントローラノードが、各前記ノードに対して、当該ノードが利用するミドルウェアの種別及び前記レプリケーショングループにおける当該ノードのノード種別に応じた記憶階層の前記記憶装置が記憶領域を提供する前記ボリュームをそれぞれ割り当てる第２のステップと
を備えることを特徴とするボリューム割当て方法。
【請求項８】
前記第１のステップにおいて、前記コントローラノードは、
各前記ストレージノードの前記記憶階層ごとの空き容量をそれぞれ管理し、
前記第２のステップにおいて、前記コントローラノードは、
必要な前記ノードに対して、対応する前記記憶階層の空き容量が最も多い前記ストレージノードから前記ボリュームを割り当てる
ことを特徴とする請求項７に記載のボリューム割当て方法。
【請求項９】
前記コントローラノードが、前記ノードを構成するコンピュートサーバの障害を検出したときに、当該ノード以外の他の前記ノードに対して、前記障害が発生した前記ノードに割り当てられていた前記ボリュームを割り当てて起動する第３のステップ
を備えることを特徴とする請求項７に記載のボリューム割当て方法。
【請求項１０】
前記第３のステップにおいて、前記コントローラは、
前記レプリケーショングループにおけるノード種別がレプリケート元である前記ノードを構成するコンピュートサーバ又は当該ノードが存在する前記コンピュートサーバの障害を検出した場合であって、当該ノードに代えて当該レプリケーショングループを構成する他の前記ノードが前記レプリケート元に昇格したときに、当該レプリケーショングループを構成する他の前記ノード以外のノードに対して当該障害が発生する前の前記レプリケート元のノードに割り当てられていた前記ボリュームを割り当て、当該ボリュームを割り当てた前記ノードを当該レプリケーショングループにおけるレプリケート先として起動した後に、起動した当該ノードのノード種別を当該レプリケーショングループにおける前記レプリケート元に切り替える
を備えることを特徴とする請求項９に記載のボリューム割当て方法。
【請求項１１】
前記コントローラノードが、前記レプリケーショングループにおけるノード種別がレプリケート元である前記ノードに割り当てられた前記ボリュームが存在する前記ストレージノードの障害を検出した場合であって、当該ノードに代えて当該レプリケーショングループを構成する他の前記ノードがレプリケート元に昇格したときには、前記レプリケート元に昇格した前記ノードに割り当てられている前記ボリュームに記憶領域を提供する前記記憶装置の前記記憶階層が、当該レプリケーショングループにおける前記レプリケート元の前記ノードに割り当てるべき前記記憶階層であるか否かを判定し、否定結果を得た場合には、前記レプリケート元に昇格した前記ノードに割り当てられている前記ボリュームに格納されたデータを、当該レプリケーショングループにおける前記レプリケート元の前記ノードに割り当てるべき前記記憶階層の前記記憶装置が提供する記憶領域に移動させる第３のステップを備える
ことを特徴とする請求項７に記載のボリューム割当て方法。
【請求項１２】
記第２のステップにおいて、前記コントローラノードは、
同一の前記レプリケーショングループを構成する各前記ノードに対して、互いに異なるフォルトセットにそれぞれ属する前記ストレージノード内に作成された前記ボリュームを割り当てる
ことを特徴とする請求項８に記載のボリューム割当て方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージシステム及びその制御方法に関し、例えば、レプリケーションを実行し、要求されるボリュームの応答性能がそれぞれ異なる複数種別の仮想マシンが稼動する情報処理システムに適用して好適なものである。
【背景技術】
【０００２】
近年、ビッグデータ分析や顧客向けのＷｅｂスケールサービスなどにＨａｄｏｏｐやＮｏＳＱＬ（Not only SQL（Structured Query Language））等のミドルウェアが広く用いられている。
【０００３】
特に、大規模ユーザは、ＴＣＯ（Total Cost of Ownership）削減のため、従来はローカルドライブを使用していたのに対して、近年では分散型ＳＤＳ（Software Defined Storage）を導入し、ストレージと、ストレージの上位装置であるコンピュートとを独立にスケールさせている。
【０００４】
しかしながら、ＯＳＳ（Open Source Software）ミドルウェアのユーザは、ストレージの知識に乏しいことが多い。このためストレージ装置に搭載された階層記憶制御機能や、圧縮・重複排除機能といった使いこなしが複雑な機能は、使用する際の難易度が高く、ＯＳＳミドルウェアのユーザには受け入れられていない。
【０００５】
このため、分散型ＳＤＳを導入した情報処理システムでは、ＯＳＳミドルウェアと連携することでＳＤＳ機能の使いこなしを容易化することが求められている。なお、特許文献１には、ミドルウェア込みで仮想マシン（ＶＭ：Virtual Machine）を自動的にデプロイすることにより、ミドルウェアごとに異なる手順で環境を構築する難しさを緩和する方法が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第９３３６２６６号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、仮想マシン又は仮想マシンで実行されるプロセス（以下、これらをまとめてノードと呼ぶ）が利用するミドルウェアの種別によってはノード間でＩ／Ｏ処理の実行頻度に偏りが生じることがある。このため従来から、コスト削減のために、レプリケーションを実行するノードが利用するミドルウェアの種別や、レプリケーション構成におけるそのノードの種別（以下、これをノード種別と呼ぶ）に対して適切な特性のボリュームを割り当てたいという要求がある。
【０００８】
ここで、「レプリケーション構成」とは、レプリケーションを実行するノードの合計数や、そのレプリケーションにおいてレプリケート元やレプリケート先にそれぞれ設定されるノード数などのレプリケーション環境の構成を指す。また「ノード種別」とは、そのノードにおけるレプリケーションの役割（レプリケート元又はレプリケート先）を指す。さらに「ボリュームの特性」とは、そのボリュームの応答性能を指す。従って、「ボリュームの特性」は、そのボリュームに記憶領域を提供する記憶装置（ハードディスク装置又はＳＳＤ（Solid State Drive）など）の応答性能に依存する。
【０００９】
しかしながら、従来では、ミドルウェアの種別やレプリケーション構成におけるノード種別に応じた適切な特性のボリュームを各ノードに割り当てるための技術の提案はなされていない。
【００１０】
本発明は以上の点を考慮してなされたもので、レプリケーションを実行する各ノードに対して、そのノードが利用するミドルウェアの種別及びレプリケーション構成におけるそのノードのノード種別に応じた適切な特性のボリュームをそれぞれ割り当てることにより、システム全体としての運用コストの低減を図り得る情報処理システム及びボリューム割当て方法を提案しようとするものである。
【課題を解決するための手段】
【００１１】
かかる課題を解決するため本発明においては、データのリード及び又はライト処理を実行する複数のノードが稼動する情報処理システムにおいて、前記ノードを構成し、又は１若しくは複数の前記ノードが稼動するコンピュートサーバと、応答性能が異なる複数のドライブ種別の記憶装置がそれぞれ搭載され、いずれかのドライブ種別の前記記憶装置が記憶領域を提供するボリュームが作成されるストレージノードと、前記コンピュートサーバ及び前記ストレージノードを制御するコントローラノードとを設け、前記ノードが、１又は複数の他の前記ノードと共にレプリケーションを実行するレプリケーショングループをそれぞれ構成し、前記ストレージノードが、搭載された各前記記憶装置を、当該記憶装置の前記ドライブ種別に応じて複数の記憶階層に分けて管理し、前記コントローラノードが、各前記ノードに対して、当該ノードが利用するミドルウェアの種別及び前記レプリケーショングループにおける当該ノードのノード種別に応じた記憶階層の前記記憶装置が記憶領域を提供する前記ボリュームをそれぞれ割り当てるようにした。
【００１２】
また本発明においては、データのリード及び又はライト処理を実行する複数のノードが稼動する情報処理システムにおいて実行されるボリューム割当て方法において、前記情報処理システムは、前記ノードを構成し、又は１若しくは複数の前記ノードが稼動するコンピュートサーバと、応答性能が異なる複数のドライブ種別の記憶装置がそれぞれ搭載され、いずれかのドライブ種別の前記記憶装置が記憶領域を提供するボリュームが作成されるストレージノードと、前記コンピュートサーバ及び前記ストレージノードを制御するコントローラノードとを設け、前記ノードは、１又は複数の他の前記ノードと共にレプリケーションを実行するレプリケーショングループをそれぞれ構成し、前記ストレージノードが、搭載された各前記記憶装置を、当該記憶装置の前記ドライブ種別に応じて複数の記憶階層に分けて管理する第１のステップと、前記コントローラノードが、各前記ノードに対して、当該ノードが利用するミドルウェアの種別及び前記レプリケーショングループにおける当該ノードのノード種別に応じた記憶階層の前記記憶装置が記憶領域を提供する前記ボリュームをそれぞれ割り当てる第２のステップとを設けるようにした。
【００１３】
本情報処理システム及びボリューム割当て方法によれば、レプリケーショングループを構成する各ノードに対して、そのノードが利用するミドルウェアの種別及び当該プリケーショングループにおけるそのノードのノード種別に応じた適切な記憶階層の仮想ボリュームを割り当てることができる。
【発明の効果】
【００１４】
本発明によれば、システム全体としての運用コストの低減を図ることができる情報処理システム及びボリューム割当て方法を実現できる。
【図面の簡単な説明】
【００１５】
【図１】本実施の形態による情報処理システムの全体構成を示すブロック図である。
【図２】コンピュートサーバのメモリの論理構成を示すブロック図である。
【図３】ストレージノードのメモリの論理構成を示すブロック図である。
【図４】コントローラノードのメモリの論理構成を示すブロック図である。
【図５】ドライブ判定テーブルの構成例を示す図表である。
【図６】ストレージ容量管理テーブルの構成例を示す図表である。
【図７】コンピュートサーバ管理テーブルの構成例を示す図表である。
【図８】レプリケーション管理テーブルの構成例を示す図表である。
【図９】ボリューム管理テーブルの構成例を示す図表である。
【図１０】ミドルウェアデプロイ処理の処理手順を示すフローチャートである。
【図１１】ボリューム配置決定処理の処理手順を示すフローチャートである。
【図１２】仮想マシン作成処理の処理手順を示すフローチャートである。
【図１３】障害検知処理の処理手順を示すフローチャートである。
【図１４】第１の構成変更処理の処理手順を示すフローチャートである。
【図１５】第２の構成変更処理の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下図面について、本発明の一実施の形態を詳述する。
【００１７】
以下、図面を参照して、本発明の一実施の形態を詳述する。以下の記載及び図面は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略及び簡略化がなされている。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。本発明が実施形態に制限されることは無く、本発明の思想に合致するあらゆる応用例が本発明の技術的範囲に含まれる。本発明は、当業者であれば本発明の範囲内で様々な追加や変更等を行うことができる。本発明は、他の種々の形態でも実施する事が可能である。特に限定しない限り、各構成要素は複数でも単数でも構わない。
【００１８】
以下の説明では、「テーブル」、「表」、「リスト」、「キュー」等の表現にて各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ＸＸテーブル」、「ＸＸリスト」等を「ＸＸ情報」と呼ぶことがある。各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「ＩＤ」、「番号」等の表現を用いるが、これらについてはお互いに置換が可能である。
【００１９】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号又は参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用又は参照符号に代えてその要素に割り振られたＩＤを使用することがある。
【００２０】
また、以下の説明では、プログラムを実行して行う処理を説明する場合があるが、プログラムは、少なくとも１以上のプロセッサ（例えばＣＰＵ）によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又はインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主体がプロセッサとされてもよい。同様に、プログラムを実行して行う処理の主体が、プロセッサを有するコントローラ、装置、システム、計算機、ノード、ストレージシステム、ストレージ装置、サーバ、管理計算機、クライアント、又は、ホストであってもよい。プログラムを実行して行う処理の主体（例えばプロセッサ）は、処理の一部又は全部を行うハードウェア回路を含んでもよい。例えば、プログラムを実行して行う処理の主体は、暗号化及び復号化、又は圧縮及び伸張を実行するハードウェア回路を含んでもよい。プロセッサは、プログラムに従って動作することによって、所定の機能を実現する機能部として動作する。プロセッサを含む装置及びシステムは、これらの機能部を含む装置及びシステムである。
【００２１】
プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ（例えばＣＰＵ）と記憶資源を含み、記憶資源はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００２２】
（１）本実施の形態による情報処理システムの構成
図１において、１は全体として本実施の形態による情報処理システムを示す。この情報処理システムは、１又は複数のコンピュートサーバ２と、１又は複数のストレージノード３と、コントローラノード４とがネットワーク５を介して相互に接続されて構成される。
【００２３】
コンピュートサーバ２は、ストレージノード３に対してホスト（上位装置）として機能するサーバ装置であり、クライアント６から与えられるリード要求やライト要求に応じて、要求されたデータをネットワーク５を介してストレージノード３に読み書きする。
【００２４】
このコンピュートサーバ２は、内部ネットワーク１０を介して接続された１以上のＣＰＵ（Central Processing Unit）１１、１以上のメモリ１２、１以上の記憶装置１３及び１以上の通信装置１４を備えた汎用のサーバ装置から構成される。
【００２５】
ＣＰＵ１１は、コンピュートサーバ２全体の動作制御を司るプロセッサである。またメモリ１２は、ＤＲＡＭ（Dynamic RAM（Random Access Memory））又はＳＲＡＭ（Static RAM）などの揮発性の半導体メモリから構成され、主としてＣＰＵ１１のワークメモリとして利用される。
【００２６】
記憶装置１３は、例えば、ハードディスク装置やＳＳＤ（Solid State Disk）などの不揮発性の大容量の記憶装置から構成され、プログラムや制御データを長期間保持するために利用される。記憶装置１３に格納されたプログラムがコンピュートサーバ２の起動時や必要時にメモリ１２にロードされ、このプログラムをＣＰＵ１１が実行することによりコンピュートサーバ２全体としての各種処理が実行される。
【００２７】
通信装置１４は、例えば、ＮＩＣ（Network Interface Card）から構成され、ネットワーク５を介したストレージノード３やコントローラノード４との通信時におけるプロトコル制御を行う。
【００２８】
ストレージノード３は、１又は複数のＳＤＳ（Software Defined Storage）を提供する物理的なサーバ装置である。ただしストレージノード３がディスクアレイ装置等の通常のストレージ装置であってもよい。またストレージノード３がコンピュートサーバ２と同一の物理サーバに同居する構成であってもよい。
【００２９】
ストレージノード３は、内部ネットワーク２０を介して相互に接続された１以上のＣＰＵ２１、１以上のメモリ２２、複数の記憶装置２３及び１以上の通信装置２４を備える。ＣＰＵ２１、メモリ２２及び通信装置２４の機能及び構成はコンピュートサーバ２の対応部位（ＣＰＵ１１、メモリ１２又は通信装置１４）と同様であるため、ここでの詳細説明は省略する。
【００３０】
記憶装置２３は、ＳＳＤ、ＡＴＡ（Advanced Technology Attachment）ハードディスク装置及びＳＡＴＡ（Serial ATA）ハードディスク装置などの応答性能が異なる複数のドライブ種別のドライブから構成される。同一のドライブ種別（ＳＳＤ、ＡＴＡハードディスク装置、ＳＡＴＡハードディスク装置など）の１又は複数の記憶装置２３がプールとして纏めて管理される。
【００３１】
この場合、各プールは、最も応答性能が高いドライブ種別の記憶装置２３から構成されるプールが「Ｔｉｅｒ１（第１の記憶階層）」、次に応答性能が高いドライブ種別の記憶装置２３から構成されるプールが「Ｔｉｅｒ２（第２の記憶階層）」、……といった具合に、そのプールを構成する記憶装置２３のドライブ種別の応答性能に応じて複数の階層（以下、これを記憶階層又はＴｉｅｒと呼ぶ）に分けて管理される。従って、応答性能が要求されるデータについては、より高い記憶階層（「Ｔｉｅｒ○」や「第○の記憶階層」の○に入る数字がより小さい）のプールに格納することにより、より迅速にそのデータの読み書きを行うことができる。
【００３２】
なお以下においては、「Ｔｉｅｒ（ティア）」や「記憶階層」という用語はプールだけでなく、そのプールを構成する記憶装置２３やそのプールに対応付けられる仮想ボリュームに対しても同様に用いる場合がある。例えば、最も応答性能が高いドライブ種別の記憶装置２３や、その記憶装置２３により構成されるプールと対応付けられた（そのプールから記憶領域が割り当てられる）仮想ボリュームを「Ｔｉｅｒ１」若しくは「第１の記憶階層」の記憶装置２３又は仮想ボリュームと呼び、次に応答性能が高いドライブ種別の記憶装置２３や、その記憶装置２３により構成されるプールと対応付けられた仮想ボリュームを「Ｔｉｅｒ２」又は「第２の記憶階層」の記憶装置２３又は仮想ボリュームと呼ぶものとする。
【００３３】
コントローラノード４は、本情報処理システム１の管理者がネットワーク５を介してコンピュートサーバ２やストレージノード３に対する各種設定やメンテナンスを行う際に利用するコンピュータ装置である。コントローラノード４は、内部ネットワーク３０を介して接続された１以上のＣＰＵ３１、１以上のメモリ３２、１以上の記憶装置３３及び１以上の通信装置３４を備えた汎用のコンピュータ装置から構成される。これらＣＰＵ３１、メモリ３２、記憶装置３３及び通信装置３４の機能及び構成はコンピュートサーバ２の対応部位（ＣＰＵ１１、メモリ１２、記憶装置１３又は通信装置１４）と同様であるため、ここでの詳細説明は省略する。
【００３４】
図２は、コンピュートサーバ２のメモリ１２の論理構成を示す。この図２に示すように、コンピュートサーバ２のメモリ１２には、ハイパバイザプログラム４０及び複数の仮想マシンテンプレート４１が格納される。ハイパバイザプログラム４０は、コンピュートサーバ２を仮想化して１又は複数の仮想マシンをクライアント６に提供する機能を有するプログラムである。従って、本情報処理システム１の場合、クライアント６は、仮想マシンに対してリード要求やライト要求を発行することになる。
【００３５】
また仮想マシンテンプレート４１は、対応する仮想マシンのＯＳ（Operating System）種別や、ＣＰＵ性能、メモリ容量、及び、その仮想マシンに割り当てるボリュームの容量、その仮想マシンが利用するミドルウェアの種別などが定義されたテンプレートである。各コンピュートサーバ２は、自コンピュートサーバ２上に作成する仮想マシンごとの仮想マシンテンプレート４１をメモリ１２内に保持しており、ハイパバイザプログラム４０が、これら仮想マシンテンプレート４１に従った構成及び機能を有する仮想マシンを作成してクライアント６に提供する。
【００３６】
さらにコンピュートサーバ２のメモリ１２には、各仮想マシンテンプレート４１にそれぞれ対応させて、仮想マシン使用領域４２が確保される。この仮想マシン使用領域４２は、対応する仮想マシンテンプレート４１を用いて作成された仮想マシンが使用するメモリ領域であり、当該仮想マシンテンプレート４１において定義された容量（メモリ容量）を有する。
【００３７】
各仮想マシン使用領域４２には、対応する仮想マシンテンプレート４１を用いて作成された仮想マシンが利用するアプリケーションプログラム４３と、ＭｏｎｇｏＤＢやＮｅｏ４ｊなどのミドルウェアプログラム４４と、仮想マシンがストレージノード３に格納されたファイルにアクセスするために利用するファイルシステムプログラム４５となどの必要なプログラムがそれぞれ格納される。
【００３８】
図３は、ストレージノード３のメモリ２２の論理構成を示す。この図３に示すように、ストレージノード３のメモリ２２には、１又は複数のＳＤＳ制御プログラム５０と、Ｔｉｅｒ（ティア）制御プログラム５１と、ボリューム管理テーブル５２とが格納される。
【００３９】
ＳＤＳ制御プログラム５０は、ＳＤＳのストレージコントローラとして機能するプログラムである。ＳＤＳ制御プログラム５０は、仮想マシンに対して仮想的な論理ボリューム（以下、これを仮想ボリュームと呼ぶ）を提供し、当該仮想ボリュームに対する仮想マシンからのライト要求に応じてその仮想ボリュームと対応付けられたプールから記憶領域を動的に割り当て、その記憶領域にライト対象のデータを格納する。またＳＤＳ制御プログラム５０は、仮想ボリュームに対する仮想マシンからのリード要求に応じてその仮想ボリュームと対応付けられたプールから要求されたデータを読み出してリード要求の送信元の仮想マシンに転送する。
【００４０】
Ｔｉｅｒ制御プログラム５１は、自ストレージノード３内に作成された各プールの記憶階層を管理し、必要に応じて一の記憶階層のプールに格納されたデータを他の記憶階層のプールに移動させる機能を有するプログラムである。
【００４１】
ボリューム管理テーブル５２は、自ストレージノード３内に作成された仮想ボリュームを管理するために利用されるテーブルである。ボリューム管理テーブル５２の詳細については後述する。
【００４２】
（２）ボリューム割当て機能
次に、コントローラノード４に搭載されたボリューム割当て機能について説明する。図１について説明した構成を有する情報処理システム１では、仮想マシンが利用するミドルウェアプログラム４４（図２）の種別やレプリケーション構成によっては、ストレージノード３や仮想ボリュームごとのＩ／Ｏ（Input/Output）頻度に偏りが生じる場合がある。このためコスト削減を考えた場合、各仮想マシンや各仮想マシンが実行するプロセス（ノード）に対して適切な記憶階層の仮想ボリュームを割り当てたいという要求がある。
【００４３】
例えば、図２について上述した仮想マシンテンプレート４１に基づいて作成される仮想マシンが利用するミドルウェアプログラム４４がＭｏｎｇｏＤＢであり、レプリケーション構成が「プライマリ（Primary）」と呼ばれるレプリケーションの元となるノード（仮想マシン又はプロセス）が１つ、プライマリに追従してデータの複製を行う「セカンダリ（Secondary）」と呼ばれるノードが２つのレプリケーション構成（レプリカセット）である場合について考える。なお、「セカンダリ」の各ノードは、それぞれ「プライマリ」のノードが存在するコンピュートサーバ２以外の互いに異なるコンピュートサーバ２内に存在するノードの中から選択される。
【００４４】
この場合、クライアント６（図１）のライト要求やリード要求は、「プライマリ」に設定されたノードに与えられる。そして、「プライマリ」のノードは、クライアント６からのライト要求及びライト対象のデータを受信した場合には、ネットワーク５を介して対応するストレージノード３にアクセスし、そのストレージノード３内の自仮想マシンに割り当てられた仮想ボリュームにそのライト対象のデータを書き込む。
【００４５】
また「プライマリ」のノードは、これと併せてそのデータを、「セカンダリ」に設定された各ノードにそれぞれ転送する。そして、このデータを受信した「セカンダリ」のノードは、受信したデータを自ノードに割り当てられた仮想ボリュームに書き込む。
【００４６】
これに対して、「プライマリ」のノードは、クライアント６からのリード要求を受信した場合には、ネットワーク５を介して対応するストレージノード３にアクセスし、当該ストレージノード３内の自ノードに割り当てられた仮想ボリュームから要求されたデータを読み出し、読み出したデータをリード要求の送信元のクライアント６に転送する。
【００４７】
このようにＭｏｎｇｏＤＢのレプリカセットでは、「プライマリ」のノードに割り当てられた仮想ボリュームに対してはランダムリードやシーケンシャルライトが行われる一方で、「セカンダリ」のノードに割り当てられた仮想ボリュームに対してはシーケンシャルライトだけが行われる。ただし、これは１つの構成例である。
【００４８】
このため、上述のような構成例の場合、「プライマリ」のノードに割り当てる仮想ボリュームについては高い応答性能が求められ、「セカンダリ」のノードに割り当てる仮想ボリュームについてはそれ程高い応答性能が求められない。よって、「プライマリ」のノードに対しては、高価ではあるが応答性能が高いドライブ種別の記憶装置２３により構成されるプールから記憶領域が提供される仮想ボリュームを割り当て、「セカンダリ」のノードに対しては、応答性能は高くないが安価なドライブ種別の記憶装置２３により構成されるプールから記憶領域が提供される仮想ボリュームを割り当てることが望ましい。
【００４９】
以上のことは、ノードがミドルウェアプログラム４４としてＮｅｏ４ｊを利用する場合にも同様に言える。例えば、Ｎｅｏ４ｊの場合、マスタ−スレーブ方式のレプリケーションを設定することができ、この場合に古典的な設定では、ライト要求を「マスタ」のノードが処理し、リード要求を「スレーブ」のノードが処理する。従って、Ｎｅｏ４ｊでは、「スレーブ」のノードに割り当てる仮想ボリュームについては高い応答性能が求められ、「マスタ」のノードに割り当てる仮想ボリュームについてはそれ程高い応答性能が求められない。なお、以下においては、同一のレプリケーションを実行するノードの集合体を「レプリケーショングループ」と呼ぶものとする。
【００５０】
このように本情報処理システム１においては、レプリケーショングループを構成する各ノードに対して、そのノードが利用するミドルウェアプログラム４４の種別やレプリケーションにおけるそのノードのノード種別に応じた適切な記憶階層の仮想ボリュームを割り当てることがコスト削減の観点からも望ましい。しかしながら、従来では、レプリケーショングループを構成する各ノードに対して、そのノードが利用するミドルウェアプログラム４４の種別や、そのノードのノード種別に応じた適切な記憶階層の仮想ボリュームを割り当てるための技術の提案はない。
【００５１】
そこで本実施の形態による情報処理システム１では、レプリケーショングループを構成するノードを起動する際、そのノードが利用するミドルウェアプログラム４４の種別及びレプリケーション構成におけるそのノードのノード種別に基づいて、そのノードに対して適切な記憶階層の仮想ボリュームを割り当てるボリューム割当て機能がコントローラノード４に搭載されている。
【００５２】
具体的に、コントローラノード４は、ＭｏｎｇｏＤＢにおける「プライマリ」や、Ｎｅｏ４ｊにおける「マスタ」といった、より高い応答性能が求められるノードに対しては最も記憶階層が高い仮想ボリュームを割り当て、ＭｏｎｇｏＤＢにおける「セカンダリ」や、Ｎｅｏ４ｊにおける「マスタ」といった、それ程高い応答性能が求められないノードに対してはそれよりも低い記憶階層の仮想ボリュームを割り当てるようにコンピュートサーバ２やストレージノード３を制御する。またコントローラノード４は、この際、各ノードに割り当てる仮想ボリュームを、対応する記憶階層の空き容量が最も多いストレージノード３内に作成された仮想ボリュームの中からそれぞれ選択する。
【００５３】
一方、例えば、ＭｏｎｇｏＤＢ規格では、「プライマリ」のノードが稼動するコンピュートサーバ２や、「プライマリ」のノードに割り当てられた仮想ボリュームを提供するストレージノード３に障害が発生した場合には、「セカンダリ」のノードの１つが自動的に「プライマリ」に昇格する機能が規定されている。
【００５４】
このため、本情報処理システム１において、各ノードが利用するミドルウェアとしてＭｏｎｇｏＤＢを利用し、各ノードに割り当てる仮想ボリュームを固定とした場合、「プライマリ」に昇格したノードに対して、そのノードが「セカンダリ」であったときに割り当てられていた記憶階層の低い仮想ボリュームがそのまま割り当て続けられることとなり、クライアント６（図１）から見た本情報処理システム１の応答性能が低下するという事態が発生する問題がある。
【００５５】
そこで本実施の形態による情報処理システム１では、本情報処理システム１内のいずれかのコンピュートサーバ２又はストレージノード３に障害が発生した場合に、その障害の内容に応じた必要なノードについて、そのノードに割り当てる仮想ボリュームを適切な記憶階層の仮想ボリュームに切り替えるようコンピュートサーバ２やストレージノード３を制御する構成変更機能がコントローラノード４に搭載されている。
【００５６】
実際上、コントローラノード４は、あるレプリケーショングループのレプリケート元に設定されたノードが稼動するコンピュートサーバ２の障害を検知した場合には、障害発生の契機でレプリケート元に昇格したノードに割り当てられている仮想ボリュームが、そのレプリケーショングループのレプリケート元のノードに割り当てられるべき記憶階層の仮想ボリュームであるか否かを判定する。そしてコントローラノード４は、この判定で否定結果を得た場合には、それまでレプリケート元のノードに割り当てていた仮想ボリュームを新たなコンピュートサーバ２内に存在する新たなノードに割り当てた上で、その新たなノードをそのレプリケーショングループにおけるレプリケート先として起動し、その後、そのノードをレプリケート元に昇格させる。なお、ここで言う「新たなコンピュートサーバ」とは、そのレプリケーショングループを構成するいずれのノードも存在しないコンピュートサーバ２を指し、「新たなノード」とは、そのレプリケーショングループに属さないノードを指す。以下においても同様である。
【００５７】
またコントローラノード４は、あるレプリケーショングループのレプリケート元に設定されたノードに割り当てられた仮想ボリュームを提供するストレージノード３の障害を検知した場合にも、上述と同様に、障害発生の契機でレプリケート元に昇格したノードに割り当てられている仮想ボリュームが、そのレプリケーショングループのレプリケート元のノードに割り当てられるべき記憶階層の仮想ボリュームであるか否かを判定する。そしてコントローラノード４は、この判定で否定結果を得た場合には、その仮想ボリュームに格納されていたデータを、レプリケート元のノードに割り当てるべき記憶階層のプールに移動させると共に、冗長度を維持するため、新たなコンピュートサーバ２内に存在する新たなノードに新たな仮想ボリュームを割り当てた上で、その新たなノードをそのレプリケーショングループの新たなレプリケート先として起動する。なお、ここで言う「新たな仮想ボリューム」とは、そのレプリケーショングループのいずれのノードにも割り当てられていない仮想ボリュームを指す。以下においても同様である。
【００５８】
一方、コントローラノード４は、あるレプリケーショングループのレプリケート先に設定されたノードが稼動するコンピュートサーバ２の障害を検知した場合には、そのノードに割り当てられていた仮想ボリュームを新たなコンピュートサーバ２内に存在する新たなノードに割り当て、その新たなノードをそのレプリケーショングループの新たなレプリケート先として起動する。
【００５９】
またコントローラノード４は、あるレプリケーショングループのレプリケート先に設定されたノードに割り当てられた仮想ボリュームを提供するストレージノード３の障害を検知した場合には、新たなコンピュートサーバ２内に存在する新たなノードに新たな仮想ボリュームを割り当て、その新たなノードをそのレプリケーショングループの新たなレプリケート先として起動する。
【００６０】
以上のような本実施の形態のボリューム割当て機能及び構成変更機能を実現するための手段として、図４に示すように、コントローラノード４のメモリ３２には、プログラムとして、ミドルウェアデプロイプログラム６０、ボリューム作成プログラム６１、障害検知プログラム６２及び構成変更プログラム６３が格納され、制御情報として、ドライブ判定テーブル６４、ストレージ容量管理テーブル６５、コンピュートサーバ管理テーブル６６及びレプリケーション管理テーブル６７が格納されている。
【００６１】
ミドルウェアデプロイプログラム６０は、ミドルウェアプログラム４４の種別や、レプリケーション構成などの運用条件を指定したノードのデプロイ指示が管理者から与えられた場合に、指定された運用条件を満たす環境を構築してそのノードをミドルウェアプログラム４４込みでデプロイする機能を有するプログラムである。
【００６２】
またボリューム作成プログラム６１は、ミドルウェアデプロイプログラム６０がノードをデプロイする際にデプロイ対象のノードに割り当てるべき仮想ボリュームを作成して当該ノードに割り当てる機能を有するプログラムである。
【００６３】
障害検知プログラム６２は、本情報処理システム１内の各コンピュートサーバ２及び各ストレージノード３を監視し、いずれかのコンピュートサーバ２やストレージノード３に障害が発生した場合にこれを検知する機能を有するプログラムである。さらに構成変更プログラム６３は、障害検知プログラム６２が検知した障害の内容に応じて必要なレプリケーション構成の構成変更を行う機能を有するプログラムである。
【００６４】
一方、ドライブ判定テーブル６４は、ミドルウェアプログラム４４の種別ごとに、レプリケート元及びレプリケート先とするノードの数（ノード数）や、これらレプリケート元及びレプリケート先の各ノードにそれぞれ割り当てるべき記憶装置２３（図１）のドライブ種別を規定したテーブルである。このドライブ判定テーブル６４は、予め本情報処理システム１の管理者などにより作成されてコントローラノード４のメモリ３２に格納される。
【００６５】
このドライブ判定テーブル６４は、図５に示すように、ミドルウェア種別欄６４Ａ、ノード区分欄６４Ｂ、ノード数欄６４Ｃ、ノード種別欄６４Ｄ及びドライブ種別欄６４Ｅを備えて構成される。そしてミドルウェア種別欄６４Ａには、ＭｏｎｇｏＤＢやＮｅｏ４ｊといった、本情報処理システム１においてノードが利用可能なミドルウェアプログラム４４（図２）の種別がすべて格納される。
【００６６】
またノード区分欄６４Ｂには、対応するミドルウェアプログラム４４の種別において規定されるノード種別の区分（以下、これをノード区分と呼ぶ）が格納される。本実施の形態においては、ＭｏｎｇｏＤＢの「プライマリ」やＮｅｏ４ｊの「スレーブ」といった、より高い応答性能が求められるノード種別のノードは第１区分、ＭｏｎｇｏＤＢの「セカンダリ」やＮｏ４ｊの「マスタ」といった、第１区分のノードよりも低い応答性能でもよいノード種別のノードは第２区分というように、より記憶階層が高い仮想ボリュームを割り当てるべきノード種別がより高い区分（第○区分の○の数字がより小さい区分）となるように、各ノード種別のノード区分がそれぞれ決定される。
【００６７】
またノード数欄６４Ｃには、対応するミドルウェアプログラム４４の種別及びレプリケーション構成において、対応するノード区分のノード種別に設定されるべきノードの数が格納され、ノード種別欄６４Ｄには、そのノード区分に属するノード種別が格納される。さらにドライブ種別欄６４Ｅには、対応するノード区分に属するノード種別のノードに割り当てるべき仮想ボリュームが対応付けられたプールを構成する記憶装置２３（つまり対応するノード区分に属するノードに記憶領域を提供する記憶装置２３）のドライブ種別が格納される。
【００６８】
従って、図５の例の場合、種別が「ミドルウェア１」のミドルウェアプログラム４４を利用するノードのレプリケーション構成では、ノード種別が「プライマリ（Primary）」に設定される「１」つのノードのノード区分が「第１区分」であり、第１区分のノードに対しては「ＳＳＤ」から構成されるプールが対応付けられた仮想ボリュームを割り当て、ノード種別が「セカンダリ（Secondary）」に設定される「残り」のノードのノード区分が「第２区分」であり、第２の区分のノードに対しては「ＨＤＤ（ハードディスク装置）」から構成されるプールが対応付けられた仮想ボリュームを割り当てるべきことが規定されている。
【００６９】
なお図５の例では、記憶装置２３のドライブ種別が「ＳＳＤ」及び「ＨＤＤ（ハードディスク装置）」の２種類しか存在しない場合について例示しているが、ドライブ種別が３つ以上あってもよい。
【００７０】
ストレージ容量管理テーブル６５は、本情報処理システム１内に存在する各ストレージノード３におけるドライブ種別ごとの記憶装置２３の空き容量の合計をコントローラノード４が管理するために利用するテーブルであり、図６に示すように、ストレージノードＩＤ欄６５Ａ、ドライブ種別欄６５Ｂ及び空き容量欄６５Ｃを備えて構成される。
【００７１】
そしてストレージノードＩＤ欄６５Ａには、本情報処理システム１内に存在する各ストレージノード３にそれぞれ付与されたそのストレージノード３に固有の識別子（ストレージノードＩＤ）が格納される。図６では、かかるストレージノードＩＤとして、「１」から始まる連番が各ストレージノード３に付与された場合を例示している。
【００７２】
また１つのストレージノードＩＤ欄６５Ａに対応するドライブ種別欄６５Ｂには、対応するストレージノード３に搭載されたすべての記憶装置２３のドライブ種別が格納され、１つのドライブ種別に対応する空き容量欄６５Ｃには、対応するストレージノード３に搭載された対応するドライブ種別の記憶装置２３の空き容量の合計が格納される。
【００７３】
従って、図６の例の場合、「１」というストレージノードＩＤが付与されたストレージノード３については、「ＳＳＤ」というドライブ種別の記憶装置２３と、「ＨＤＤ（ハードディスク装置）」というドライブ種別の記憶装置２３とが搭載されており、このうち「ＳＳＤ」の空き容量の合計が「1500GB」、「ＨＤＤ」の空き容量の合計が「10000GB」であることが示されている。
【００７４】
なお図６では、各ストレージノード３が「ＳＳＤ」及び「ＨＤＤ（ハードディス装置）」の２種類のドライブ種別の記憶装置２３のみを備える場合について例示しているが、図５についても上述したように、記憶装置２３として「ＳＳＤ」及び「ＨＤＤ（ハードディスク装置）」以外のドライブ種別の記憶装置２３が各ストレージノード３に搭載されていてもよい。
【００７５】
コンピュートサーバ管理テーブル６６は、本情報処理システム１内に存在するコンピュートサーバ２をコントローラノード４が管理するために利用するテーブルであり、図７に示すように、コンピュートサーバＩＤ欄６６Ａ、仮想マシンＩＤ欄６６Ｂ、プロセスＩＤ欄６６Ｃ、ミドルウェア種別欄６６Ｄ、ノード種別欄６６Ｅ、ストレージノードＩＤ欄６６Ｆ、ボリュームＩＤ欄６６Ｇ及びドライブ種別欄６６Ｈを備えて構成される。
【００７６】
そしてコンピュートサーバＩＤ欄６６Ａには、本情報処理システム１内に存在する各コンピュートサーバ２にそれぞれ付与されたそのコンピュートサーバ２に固有の識別子（コンピュートサーバＩＤ）が格納される。図７では、かかるコンピュートサーバＩＤとして、「１」から始まる連番が各コンピュートサーバ２に付与された場合を例示している。
【００７７】
また仮想マシンＩＤ欄６６Ｂは、対応するコンピュートサーバ２上で稼動する各仮想マシンにそれぞれ対応させて分割されており、これら分割された各欄内に、対応する仮想マシンに付与されたその仮想マシンに固有の識別子（仮想マシンＩＤ）がそれぞれ格納される。図７では、かかる仮想マシンＩＤとして、個々のコンピュートサーバ２内においてのみ固有の番号が各仮想マシンにそれぞれ付与された場合を例示している。
【００７８】
またプロセスＩＤ欄６６Ｃは、対応する仮想マシンで実行される各プロセスにそれぞれ対応させて分割されており、これら分割された各欄内に、対応する仮想マシンで実行される対応するプロセスに対して付与されたそのプロセスに固有の識別子（プロセスＩＤ）がそれぞれ格納される。図７では、かかるプロセスＩＤとして、個々のコンピュートサーバ２内においてのみ固有の番号が各プロセスにそれぞれ付与された場合を例示している。
【００７９】
ミドルウェア種別欄６６Ｄも対応する仮想マシンで実行される各プロセスにそれぞれ対応させて分割されており、これら分割された各欄内に、対応する仮想マシンが利用するミドルウェアプログラム４４（図２）の種別（ＭｏｎｇｏＤＢ、Ｎｅｏ４ｊなど）がそれぞれ格納される。
【００８０】
ノード種別欄６６Ｅも対応する仮想マシンで実行される各プロセスにそれぞれ対応させて分割されており、これら分割された各欄内に、対応するノード（仮想マシン又はプロセス）のノード種別が格納される。
【００８１】
例えば、ミドルウェアプログラム４４がＭｏｎｇｏＤＢであれば、ノード種別として、上述のようにクライアント６（図１）からのＩ／Ｏ要求を処理すると共にレプリケーションのレプリケート元となる「プライマリ」と、当該レプリケーションのレプリケート先となる「セカンダリ」の２つの種別があるため、これら「プライマリ」及び「セカンダリ」のうちのいずれかが各欄にそれぞれ格納される。またミドルウェアプログラム４４がＮｅｏ４ｊの場合には、ノード種別として、クライアント６からのＩ／Ｏ要求を処理すると共にレプリケーションのレプリケート元となる「マスタ」と、当該レプリケーションのレプリケート先となる「スレーブ」の２つの区分があるため、これら「マスタ」及び「スレーブ」のいずれかが各欄にそれぞれ格納される。
【００８２】
ボリュームＩＤ欄６６Ｇ及びストレージノードＩＤ欄６６Ｆも対応する仮想マシンで実行される各プロセスにそれぞれ対応させて分割されており、これら分割された各欄内に、対応するノード（仮想マシン又はプロセス）に割り当てられた仮想ボリュームの仮想ボリュームＩＤ（ボリュームＩＤ欄６６Ｇの場合）や、その仮想ボリュームを提供するストレージノード３のストレージノードＩＤ（ストレージノードＩＤ欄６６Ｆの場合）が格納される。
【００８３】
さらにドライブ種別欄６６Ｈも対応する仮想マシンで実行される各プロセスにそれぞれ対応させて分割されており、これら分割された各欄内に、対応するノードに割り当てられた仮想ボリュームに記憶領域を提供する記憶装置（その仮想ボリュームに割り当てられた仮想ボリュームと対応付けられたプールを構成する記憶装置）２３のドライブ種別がそれぞれ格納される。
【００８４】
従って、図７の例の場合、「１」というコンピュートサーバＩＤが付与されたコンピュートサーバ２上では、「ミドルウェア１」というミドルウェアプログラム４４を利用し、「１」という仮想マシンＩＤが付与された仮想マシンが稼動しており、この仮想マシンは、少なくとも「１」というプロセスＩＤが付与されたノード種別が「プライマリ」のプロセスと、「２」というプロセスＩＤが付与されたノード種別が「プライマリ」のプロセスとを実行していることが示されている。
【００８５】
また図７では、かかる「１」というプロセスＩＤが付与されたプロセスには、「１」というストレージノードＩＤが付与されたストレージノード３内の、「ＳＳＤ」から構成されるプールと対応付けられたボリュームＩＤが「１」の仮想ボリュームが割り当てられ、かかる「２」というプロセスＩＤが付与されたプロセスには、「４」というストレージノードＩＤが付与されたストレージノード３内の、「ＳＳＤ」から構成されるプールと対応付けられたボリュームＩＤが「41」の仮想ボリュームが割り当てられていることも併せて示されている。
【００８６】
レプリケーション管理テーブル６７は、コンピュートサーバ２が、本情報処理システム１内に設定されたレプリケーション（の設定）を管理するために利用するテーブルであり、図８に示すように、レプリケーションＩＤ欄６７Ａ及び複数の区分欄６７Ｂを備えて構成される。
【００８７】
そしてレプリケーションＩＤ欄６７Ａには、対応するレプリケーション（の設定）に対して付与されたそのレプリケーション（の設定）に固有の識別子（レプリケーションＩＤ）が格納される。
【００８８】
また区分欄６７Ｂは、対応するレプリケーション（の設定）のレプリケーション構成におけるノード区分にそれぞれ対応させて設けられており、これらの区分欄６７ＢがそれぞれコンピュートサーバＩＤ欄６７ＢＡ、仮想マシンＩＤ欄６７ＢＢ及びプロセスＩＤ欄６７ＢＣに分割されている。またノードが２つ以上設定されたノード区分に対応する区分欄６７Ｂについては、コンピュートサーバＩＤ欄６７ＢＡ、仮想マシンＩＤ欄６７ＢＢ及びプロセスＩＤ欄６７ＢＣがそのノード区分を構成する各ノードにそれぞれ対応させた行に分割されている。
【００８９】
そしてコンピュートサーバＩＤ欄６７ＢＡには、対応するレプリケーション（の設定）において第１区分に設定されたノードが仮想マシンである場合には、その仮想マシンが存在するコンピュートサーバ２のコンピュートサーバＩＤ、そのノードがプロセスである場合には、そのプロセスを実行する仮想マシンが存在するコンピュートサーバ２のコンピュートサーバＩＤが格納される。
【００９０】
また仮想マシンＩＤ欄６７ＢＢには、対応するそのノードが仮想マシンである場合にはその仮想マシンＩＤ、そのノードがプロセスである場合には、そのプロセスを実行する仮想マシンの仮想マシンＩＤが格納される。さらにプロセスＩＤ欄６７ＢＣには、対応するノードが仮想マシンである場合には何も情報が格納されず、対応するノードがプロセスである場合には、そのプロセスのプロセスＩＤが格納される。
【００９１】
従って、図８の例の場合、「レプリケーション１」というレプリケーションＩＤが付与されたレプリケーション（の設定）では、第１区分のノードが、「１」というコンピュートサーバＩＤが付与されたコンピュートサーバ２上で稼動する「１」という仮想マシンＩＤが付与された仮想マシンが実行するプロセスＩＤが「１」のプロセスであり、第２区分のノードが、「２」というコンピュートサーバＩＤが付与されたコンピュートサーバ２上で稼動する「２」という仮想マシンＩＤが付与された仮想マシンが実行するプロセスＩＤが「４」のプロセスと、「４」というコンピュートサーバＩＤが付与されたコンピュートサーバ２上で稼動する「１」という仮想マシンＩＤが付与された仮想マシンが実行するプロセスＩＤが「２」のプロセスとであることが示されている。
【００９２】
ボリューム管理テーブル５２（図３）は、ストレージノード３が、本情報処理システム１内に存在する仮想ボリュームを管理するために利用するテーブルであり、図９に示すように、ボリュームＩＤ欄５２Ａ、ページＩＤ欄５２Ｂ及びＴｉｅｒ欄５２Ｃを備えて構成される。
【００９３】
そしてボリュームＩＤ欄５２Ａには、本情報処理システム１内に存在する各仮想ボリュームの識別子（ボリュームＩＤ）が格納される。またページＩＤ欄５２Ｂ及びＴｉｅｒ欄５２Ｃは、それぞれ対応する仮想ボリューム内のページにそれぞれ対応させて分割されており、ページＩＤ欄５２Ｂにおける分割された各欄に、それぞれ対応するページに付与されたそのページに固有の識別子（ページＩＤ）が格納され、Ｔｉｅｒ欄５２Ｃにおける分割された各欄に、それぞれ対応する仮想ボリューム内の対応するページに割り当てられた記憶領域の記憶階層（その記憶領域を提供するプールの記憶階層）が格納される。
【００９４】
従って、図９の例の場合、ボリュームＩＤが「１」の仮想ボリュームにおけるページＩＤが「１」〜「３」の各ページには、それぞれ「Tier1」の記憶階層のプールから記憶領域が割り当てられていることが示されている。
【００９５】
（３）本実施の形態によるボリューム割当て機能及び構成変更機能に関連する各種処理
次に、上述した本実施の形態によるボリューム割当て機能及び構成変更機能に関連して図４について上述したコントローラノード４のミドルウェアデプロイプログラム６０、ボリューム作成プログラム６１、障害検知プログラム６２及び構成変更プログラム６３によりそれぞれ実行される処理の内容について説明する。
【００９６】
（３−１）レプリケーション設定処理
図１０は、かかるボリューム割当て機能に関連してコントローラノード４のミドルウェアデプロイプログラム６０（図４）により実行されるレプリケーション設定処理の処理内容を示す。
【００９７】
ミドルウェアデプロイプログラム６０は、管理者がコントローラノード４を操作して、レプリケーションを設定すべき旨の指示（以下、この指示をレプリケーション設定指示と呼ぶ）が与えられると、この図１０に示すレプリケーション設定処理を開始する。なお、このレプリケーション設定指示には、そのレプリケーションを実行するレプリケーショングループを構成するノードの数や、各ノード種別の数、及び、そのノードが利用するミドルウェアの種別などのそのレプリケーションの環境条件が含まれる。
【００９８】
そしてミドルウェアデプロイプログラム６０は、このレプリケーション設定処理を開始すると、まず、かかるレプリケーション設定指示において指定された環境条件の中から、そのとき設定すべきレプリケーションを実行するノードの数（対応するレプリケーショングループを構成するノードの数）と、これらノードが利用するミドルウェアプログラム４４の種別とを抽出する（Ｓ１）。
【００９９】
続いて、ミドルウェアデプロイプログラム６０は、ステップＳ１で抽出したノード数及びミドルウェアプログラム４４の種別に基づいて、要求されたレプリケーションを実行する各ノードにそれぞれ割り当てる仮想ボリュームをそれぞれ異なるストレージノード３内に作成する（Ｓ２）。
【０１００】
次いで、ミドルウェアデプロイプログラム６０は、ステップＳ１で抽出したノード数のノードをそれぞれ異なるコンピュートサーバ２内にそれぞれ作成し、作成した各ノードに対して、ステップＳ２で作成した仮想ボリュームの中からそのノードのノード種別に応じた特性を有する仮想ボリュームをそれぞれ割り当て、この後、これらノードを起動する（Ｓ３）。
【０１０１】
そしてミドルウェアデプロイプログラム６０は、レプリケーション設定指示において指定されたレプリケーションの設定が完了した旨を表示し（Ｓ４）、この後、このレプリケーション設定処理を終了する。
【０１０２】
（３−２）ボリューム作成処理
図１１は、図１０について上述したレプリケーション設定処理のステップＳ２においてミドルウェアデプロイプログラム６０により実行されるボリューム作成処理の処理内容を示す。
【０１０３】
ミドルウェアデプロイプログラム６０は、レプリケーション設定処理のステップＳ２に進むと、この図１１に示すボリューム作成処理を開始し、まずドライブ判定テーブル６４（図５）を参照して、レプリケーション設定指示において指定されたミドルウェアプログラム４４の種別（以下、これを指定ミドルウェア種別と呼ぶ）に対するノード区分の数（ノード区分数）Ｎを取得する（Ｓ１０）。
【０１０４】
例えば、図５の例の場合、指定ミドルウェア種別が「ミドルウェア１」である場合には、ノード区分の数が「第１区分」及び「第２区分」の「２」つ、指定ミドルウェア種別が「ミドルウェア３」である場合には、ノード区分数Ｎが「第１区分」、「第２区分」及び「第３区分」の「３」つとして取得される。
【０１０５】
続いて、ミドルウェアデプロイプログラム６０は、変数ｎをリセット（ｎを「１」にセット）する（Ｓ１１）。またミドルウェアデプロイプログラム６０は、ドライブ判定テーブル６４（図５）を参照して、指定ミドルウェア種別における第ｎ区分のノード数及びドライブ種別を当該ドライブ判定テーブル６４から取得する（Ｓ１２）。例えば、図５の例で、指定ミドルウェア種別が「ミドルウェア１」の場合、この段階ではｎが「１」であるため、「ミドルウェア１」の第１区分のノード数は「１」、ドライブ種別は「ＳＳＤ」として取得されることになる。なお、指定ミドルウェア種別がドライブ判定テーブル６４に登録されていない場合には、指定ミドルウェア種別における第ｎ区分のノード数をすべて予め設定されたノード数（例えば１つ）とし、ドライブ種別をすべて最も応答性能が高いドライブ種別としてもよい。
【０１０６】
次いで、ミドルウェアデプロイプログラム６０は、ステップＳ１２で取得したノード数が「残り」であるか否かを判断する（Ｓ１３）。そしてミドルウェアデプロイプログラム６０は、この判断で否定結果を得ると、ステップＳ１２で取得したドライブ種別の空き容量が最も多いストレージノード３内に、そのドライブ種別の記憶装置２３（図１）から構成されたプールを対応付ける仮想ボリュームを作成する（Ｓ１４）。
【０１０７】
具体的に、ミドルウェアデプロイプログラム６０は、ストレージ容量管理テーブル６５（図６）を参照して、ステップＳ１２で取得したドライブ種別の空き容量が最も多いストレージノード３を選択する。またミドルウェアデプロイプログラム６０は、選択したストレージノード３のＳＤＳ制御プログラム５０（図３）に対して、ステップＳ１２で取得したドライブ種別の記憶装置２３（図１）から構成されるプールに対応付けた仮想ボリュームを作成するよう指示を与える。この際、ミドルウェアデプロイプログラム６０は、そのとき作成すべき仮想ボリュームの容量も指定する。
【０１０８】
かくして、この指示を受けたＳＤＳ制御プログラム５０は、要求された容量の仮想ボリュームを、指定されたドライブ種別の記憶装置２３から構成されるプールに対応付けて作成する。
【０１０９】
次いで、ミドルウェアデプロイプログラム６０は、コンピュートサーバ２を１つ選択する。このとき選択するコンピュートサーバ２としては、例えば、そのときの負荷が最も少ないコンピュートサーバ２や、稼動する仮想マシンの数が最も少ないコンピュートサーバ２を適用することができる。そして、ミドルウェアデプロイプログラム６０は、ステップＳ１４で作成を指示した仮想ボリュームと対応付けて仮想マシンテンプレート４１（図２）を作成し、作成した仮想マシンテンプレート４１をそのコンピュートサーバ２に与える（Ｓ１５）。かくして、この仮想マシンテンプレート４１を受領したコンピュートサーバ２は、この仮想マシンテンプレート４１をメモリ１２（図１）に保存すると共に、その仮想マシンテンプレート４１に対応付けた仮想マシン使用領域４２（図２）をメモリ１２上に確保する。
【０１１０】
続いて、ミドルウェアデプロイプログラム６０は、ステップＳ１４〜ステップＳ１５の処理をステップＳ１２で取得したノード数と同じ回数実行したか否かを判断する（Ｓ１６）。そしてミドルウェアデプロイプログラム６０は、この判断で否定結果を得ると、ステップＳ１４に戻り、この後、ステップＳ１４〜ステップＳ１６の処理を繰り返す。
【０１１１】
そしてミドルウェアデプロイプログラム６０は、やがてステップＳ１４〜ステップＳ１５の処理をステップＳ１２で取得したノード数と同じ回数実行し終えることによりステップＳ１６で肯定結果を得ると、変数ｎをインクリメント（ｎの値を１だけ増加）する（Ｓ１７）。またミドルウェアデプロイプログラム６０は、ｎの値が、ステップＳ１０で取得したノード区分数Ｎよりも大きくなったか否か（ｎがＮ＋１となったか否か）を判断する（Ｓ１８）。
【０１１２】
ミドルウェアデプロイプログラム６０は、この判断で否定結果を得るとステップＳ１２に戻り、この後、ステップＳ１２以降の処理を繰り返す。そしてミドルウェアデプロイプログラム６０は、やがてステップＳ１０で取得した区分数ＮだけステップＳ１２以降の処理を実行し終えることによりステップＳ１８で肯定結果を得ると、このボリューム作成処理を終了する。
【０１１３】
これに対して、ミドルウェアデプロイプログラム６０は、ステップＳ１３の判断で肯定結果を得ると、「残り」のノード数を算出する（Ｓ１９）。具体的に、ミドルウェアデプロイプログラム６０は、図１０について上述したレプリケーション設定処理のステップＳ１で取得したノード数から、そのとき対象としている区分（以下、これを対象区分と呼ぶ）よりも前のすべての区分のノード数をそれぞれ減算することにより、「残り」のノード数を算出する。この際、「対象区分よりも前の各区分のノード数」は、ドライブ判定テーブル６４（図５）から取得する。
【０１１４】
続いて、ミドルウェアデプロイプログラム６０は、ステップＳ１４〜ステップＳ１６と同様にしてステップＳ２０〜ステップＳ２２を処理することにより、対象区分の各ノードに対応する仮想ボリュームと仮想マシンテンプレート４１とをそれぞれ作成させる（Ｓ２０〜Ｓ２２）。
【０１１５】
そしてミドルウェアデプロイプログラム６０は、対象区分の各ノードに対応する仮想ボリューム及び仮想マシンテンプレート４１を作成し終えることによりステップＳ２２で肯定結果を得ると、ステップＳ１７に進み、この後、ステップＳ１７以降の処理を上述のように処理する。
【０１１６】
（３−３）ノード作成処理
一方、図１２は、図１０について上述したレプリケーション設定処理のステップＳ３においてミドルウェアデプロイプログラム６０により実行されるノード作成処理の処理内容を示す。
【０１１７】
ミドルウェアデプロイプログラム６０は、レプリケーション設定処理のステップＳ３に進むとこの図１２に示すノード作成処理を開始し、まず、ボリューム作成処理のステップＳ１５やステップＳ２１で該当するストレージノード３に保存させた仮想マシンテンプレート４１の中からステップＳ３１以降が未処理の仮想マシンテンプレート４１を１つ選択する（Ｓ３０）。
【０１１８】
続いて、ミドルウェアデプロイプログラム６０は、ステップＳ３０で選択した仮想マシンテンプレート４１を保存しているコンピュートサーバ２のハイパバイザプログラム４０（図２）に対して、ステップＳ３０で選択した仮想マシンテンプレート４１を用いて仮想マシンを作成するよう指示を与える（Ｓ３１）。かくして、この指示が与えられたコンピュートサーバ２は、指定された仮想マシンテンプレート４１を用いて仮想マシンを作成する。またミドルウェアデプロイプログラム６０は、その仮想マシンに対する必要な情報をコンピュートサーバ管理テーブル６６（図７）やレプリケーション管理テーブル６７（図８）に登録する。
【０１１９】
次いで、ミドルウェアデプロイプログラム６０は、そのとき作成すべきノードがプロセスであるか否かを判断する（Ｓ３２）。この判断は、そのときコントローラノード４から与えられたレプリケーション設定指示に基づいて行われる。
【０１２０】
そしてミドルウェアデプロイプログラム６０は、この判断で否定結果を得るとステップＳ３４に進む。またミドルウェアデプロイプログラム６０は、ステップＳ３２の判断で肯定結果を得ると、ステップＳ３１で作成した仮想マシンが実行するプロセスを作成するよう当該仮想マシンを作成させたストレージノード３に指示を与える（Ｓ３３）。
【０１２１】
この後、ミドルウェアデプロイプログラム６０は、ノードが仮想マシンの場合にはステップＳ３１で作成した仮想マシン、ノードがプロセスの場合にはステップＳ３３で作成したプロセスに対して直前のボリューム作成処理（図１１）で作成した仮想ボリュームを割り当てるよう対応するコンピュートサーバ２及びストレージノード３に指示を与える（Ｓ３４）。
【０１２２】
続いて、ミドルウェアデプロイプログラム６０は、ボリューム作成処理のステップＳ１５やステップＳ２１で該当するコンピュートサーバ２に保存させたすべての仮想マシンテンプレート４１に対するステップＳ３１〜ステップＳ３３の処理を完了し終えたか否かを判断する（Ｓ３５）。
【０１２３】
ミドルウェアデプロイプログラム６０は、この判断で否定結果を得るとステップＳ３０に戻り、この後ステップＳ３０で選択する仮想マシンテンプレート４１をステップＳ３１以降が未処理の他の仮想マシンテンプレート４１に順次切り替えながらステップＳ３０〜ステップＳ３５の処理を繰り返す。
【０１２４】
そしてミドルウェアデプロイプログラム６０は、やがてボリューム作成処理のステップＳ１５やステップＳ２１で該当するストレージノード３に保存させたすべての仮想マシンテンプレート４１に基づく仮想マシンを作成し終えることによりステップＳ３５で肯定結果を得ると、このノード作成処理を終了する。
【０１２５】
（３−４）障害検知時処理
他方、図１３は、上述した構成変更機能に関連して、障害検知プログラム６２（図４）が、障害を検知した場合に実行する障害検知時処理の処理手順を示す。障害検知プログラム６２は、本情報処理システム１内の各コンピュートサーバ２及び各ストレージノード３の状態をポーリングにより監視しており、いずれかのコンピュートサーバ２又はストレージノード３の障害を検知すると、この図１３に示す障害検知時処理を実行する。ただし、コンピュートサーバ２やストレージノード３が障害発生を契機としてその障害の発生をコントローラノード４（障害検知プログラム６２）に通知するようにしてもよい。
【０１２６】
そして障害検知プログラム６２は、いずれかのコンピュートサーバ２又はストレージノード３の障害を検知すると、この障害検知処理を開始し、まず、障害のタイプを判定する（Ｓ４０）。具体的には、いずれかのレプリケーションにおけるレプリケート元の仮想マシン又は当該仮想マシンが稼動するコンピュートサーバ２に障害が発生した第１の障害タイプと、いずれかのレプリケーションにおけるレプリケート元の仮想マシンに割当てられた仮想ボリュームが配置されたストレージノード３に障害が発生した第２の障害タイプと、いずれかのレプリケーションにおけるレプリケート先の仮想マシン又は当該仮想マシンが稼動するコンピュートサーバ２に障害が発生した第３の障害タイプと、いずれかのレプリケーションにおけるレプリケート先の仮想マシンに割当てられた仮想ボリュームが配置されたストレージノード３に障害が発生した第４の障害タイプとのうちのいずれの障害タイプの障害が発生したかを判定する。
【０１２７】
そして障害検知プログラム６２は、そのとき検知した障害タイプに応じた構成変更処理を構成変更プログラム６３（図４）に実行させる（Ｓ４１〜Ｓ４４）。具体的に、障害検知プログラム６２は、検知した障害のタイプが第１の障害タイプであると判定した場合には、図１４について後述する第１の構成変更処理を構成変更プログラム６３に実行させ（Ｓ４１）、第２の障害タイプであると判定した場合には、図１５について後述する第２の構成変更処理を構成変更プログラム６３に実行させる（Ｓ４２）。そして障害検知プログラム６２は、この後、この障害検知処理を終了する。
【０１２８】
また障害検知プログラム６２は、検知した障害のタイプが第３の障害タイプであると判定した場合には、コンピュートサーバ管理テーブル６６（図７）及びレプリケーション管理テーブル６７（図８）を参照して、そのとき検知した障害が発生したコンピュートサーバ２上で稼動していたレプリケート先のノードの代わりとなるノードを新たなコンピュートサーバ２上に作成し、作成したノードに、元のレプリケート先のノードに割り当てられていた仮想ボリュームを割り当てた上で、そのノードを稼動させる（Ｓ４３）。そして障害検知プログラムは、この後、この障害検知処理を終了する。
【０１２９】
さらに障害検知プログラム６２は、検知した障害のタイプが第４の障害タイプであると判定した場合には、それまで障害が発生したストレージノード３内の仮想ボリュームが割り当てられていたノード（以下、これを障害ノードと呼ぶ）の代わりとなる新たなノードを新たなストレージノード３内に作成し、障害ノードに割り当てられていた仮想ボリュームと同じ記憶階層の仮想ボリュームを上述の新たなノードに割り当てた上で、その新たなノードを再稼動させる（Ｓ４４）。そして障害検知プログラム６２は、この後、この障害検知処理を終了する。
【０１３０】
（３−５）第１の構成変更処理
図１４は、図１３について上述した障害検知処理のステップＳ４１において障害検知プログラム６２（図４）からの指示を受けた構成変更プログラム６３（図４）により実行される第１の構成変更処理の処理内容を示す。
【０１３１】
構成変更プログラム６３は、かかる指示が障害検知プログラム６２から与えられると、この図１４に示す第１の構成変更処理を開始し、まず、コンピュートサーバ管理テーブル６６（図７）を参照して、障害発生の契機で自動的にレプリケート元に昇格したノードに割当られた仮想ボリュームに記憶領域を割り当てる記憶装置２３（その仮想ボリュームに対応付けられたプールを構成する記憶装置２３）のドライブ種別を取得する（Ｓ５０）。
【０１３２】
具体的に、構成変更プログラム６３は、コンピュートサーバ管理テーブル６６の各レコードのうち、そのとき障害が発生したコンピュートサーバ２のコンピュートサーバＩＤがコンピュートサーバＩＤ欄６６Ａ（図７）に格納され、かつその障害の発生を契機としてレプリケート元に昇格したノードが仮想マシンである場合にはその仮想マシンＩＤが仮想マシンＩＤ欄６６Ｂ（図７）に格納されたレコード、そのノードがプロセスである場合にはそのプロセスのプロセスＩＤがプロセスＩＤ欄６６Ｃ（図７）に格納されたレコードを特定し、そのレコードのドライブ種別欄６６Ｈ（図７）に格納されているドライブ種別を取得する。
【０１３３】
続いて、構成変更プログラム６３は、ドライブ判定テーブル６４（図５）を参照して、ステップＳ５０で取得したドライブ種別と、第１区分のノードに割り当てるべき記憶装置２３のドライブ種別とが一致するか否かを判断する（Ｓ５１）。
【０１３４】
この判断は、ドライブ判定テーブル６４のレコードのうち、ミドルウェア種別欄６４Ａ（図５）に、そのノードが利用するミドルウェアプログラム４４の種別が格納され、ノード区分欄６４Ｂ（図５）に格納された区分が第１区分であるレコードのドライブ種別欄６４Ｅ（図５）に格納されたドライブ種別と、ステップＳ５０で取得したドライブ種別と比較し、これらが一致するか否かを判定することにより行われる。そして構成変更プログラム６３は、この判断で肯定結果を得ると、第１の構成変更処理を終了する。
【０１３５】
これに対して、構成変更プログラム６３は、ステップＳ５１の判断で否定結果を得ると、新しいコンピュートサーバ２内に新しいレプリケート先のノードを作成すると共に、そのノードに元のレプリケート元のノードに割り当てられていた仮想ボリュームを割り当てた上で、そのノードを起動させる（Ｓ５２）。
【０１３６】
具体的に、構成変更プログラム６３は、レプリケーション管理テーブル６７（図８）を参照して、そのとき対象としているレプリケーションを実行する各ノードがそれぞれ配置された各コンピュートサーバ２のコンピュートサーバＩＤをすべて取得する。そして構成変更プログラム６３は、コンピュートサーバ管理テーブル６６を参照して、上述のように取得したコンピュートサーバＩＤ以外のコンピュートサーバＩＤが付与されたコンピュートサーバ２を選択し、そのコンピュートサーバ２に新たなノードを作成するよう指示を与える。
【０１３７】
なお、このとき構成変更プログラム６３が、コンピュートサーバ２のフォルトセット（Fault Set）をも考慮して新たなノードを作成するコンピュートサーバ２を選択するようにしてもよい。ここで、「フォルトセット」とは、電源系統やネットワークスイッチを共有するコンピュートサーバ２のグループである。レプリケーショングループを構成する各ノードが、それぞれ異なるフォルトセットに属するコンピュートサーバ２上で稼動するようにノードの配置先を選択することにより、より耐障害性の高いレプリケーショングループを構築することができる。
【０１３８】
従って、ステップＳ５２において構成変更プログラム６３が、上述の条件に加えて、そのとき対象としているレプリケーションを実行する他のノードがそれぞれ稼動する各コンピュートサーバ２のいずれも属さないフォルトセットに属するという条件を満たすコンピュートサーバ２の中から、かかる新たなノードを作成するコンピュートサーバ２を選択するようにしてもよい。
【０１３９】
そして構成変更プログラム６３は、元のレプリケート元のノードに割り当てられていた仮想ボリュームをその新たなノードに割り当てるよう、そのコンピュートサーバ２に指示を与え、この後、その新たなノードを起動するようそのコンピュートサーバ２に指示を与える。
【０１４０】
続いて、構成変更プログラム６３は、そのとき対象としているレプリケーションにおけるレプリケート先としてステップＳ５２で起動した新たなノードのノード種別を、そのレプリケーションにおけるレプリケート元に切り替える（Ｓ５３）。
【０１４１】
具体的に、構成変更プログラム６３は障害発生を契機としてそのレプリケーションにおけるレプリケート元に昇格したノードが配置されたコンピュートサーバ２に、そのノードのノード種別をそのレプリケーション構成におけるレプリケート先に戻すよう指示を与える。かくして、この指示を受領したそのコンピュートサーバ２のそのノードが利用するミドルウェアプログラム４４は、そのノードのノード種別をレプリケート先に変更する。
【０１４２】
また構成変更プログラム６３は、これと並行して、ステップＳ５２で新たなノードを起動したコンピュートサーバ２に対して、そのノードのノード種別をレプリケート元に変更するよう指示を与える。かくして、この指示を受領したそのコンピュートサーバ２のそのノードが利用するミドルウェアプログラム４４は、そのノードのノード種別をレプリケート元に変更する。
【０１４３】
そして構成変更プログラム６３は、以上の処理が完了すると、ステップＳ５３において実行した新たなノードのノード種別の切り替えに応じてコンピュートサーバ管理テーブル６６の対応するレコードのノード種別欄６６Ｅや、レプリケーション管理テーブル６７の対応するレコードの必要な区分欄６７Ｂの情報を更新し、この後、この第１の構成変更処理を終了する。
【０１４４】
（３−６）第２の構成変更処理
図１５は、図１３について上述した障害検知処理のステップＳ４２において障害検知プログラム６２（図４）からの指示を受けた構成変更プログラム６３（図４）により実行される第２の構成変更処理の処理内容を示す。
【０１４５】
構成変更プログラム６３は、かかる指示が障害検知プログラム６２から与えられると、この図１５に示す第２の構成変更処理を開始し、まず、第１の構成変更処理のステップＳ５０と同様にして、障害発生の契機で自動的にレプリケート元に昇格したノードに割当られた仮想ボリュームに記憶領域を割り当てる記憶装置２３（その仮想ボリュームに対応付けられたプールを構成する記憶装置２３）のドライブ種別を取得する（Ｓ６０）。
【０１４６】
続いて、構成変更プログラム６３は、第１の構成変更処理のステップＳ６１と同様にして、ステップＳ６０で取得したドライブ種別と、対応するレプリケーション構成における第１区分のノードに割り当てるべき記憶装置２３のドライブ種別とが一致するか否かを判断する（Ｓ６１）。そして構成変更プログラム６３は、この判断で肯定結果を得ると、ステップＳ６３に進む。
【０１４７】
これに対して、構成変更プログラム６３は、ステップＳ６１の判断で否定結果を得ると、レプリケート元に昇格したノードに割り当てられた仮想ボリュームに格納されているデータを、そのレプリケーションにおいて第１区分のノードに割り当てるべき記憶装置２３のドライブ種別から構成されるプールに再配置するよう、そのノードに割り当てられた仮想ボリュームが設定されているストレージノード３に指示を与える（Ｓ６２）。
【０１４８】
かくして、この指示を受けたストレージノード３のＴｉｅｒ制御プログラム５１（図３）は、レプリケート元に昇格したノードに割り当てられている仮想ボリュームに格納されているデータを、そのレプリケーションにおいて第１区分のノードに割り当てるべき記憶装置２３のドライブ種別から構成されるいずれかのプールにページ単位で移動させる。またＴｉｅｒ制御プログラム５１は、自ストレージノード３内で管理しているその仮想ボリュームにおける各ページに書き込まれたデータの保存先を、そのデータの移動先のプールにおけるそのデータの移動先のページに変更する。さらにＴｉｅｒ制御プログラム５１は、上述のようなデータの移動に応じてボリューム管理テーブル５２（図９）を更新する。
【０１４９】
この後、構成変更プログラム６３は、新たなノードに新たな仮想ボリュームを割り当て、そのノードをそのとき対象としているレプリケーションにおける新たなレプリケート先として起動させる（Ｓ６３）。
【０１５０】
具体的に、構成変更プログラム６３は、まず、レプリケーション管理テーブル６７（図８）を参照して、本情報処理システム１内のコンピュートサーバ２の中から、そのとき対象としているレプリケーションを実行するいずれかのノードが存在するコンピュートサーバ２以外のコンピュートサーバ２の中から１つのコンピュートサーバ２を選択する。この際、構成変更プログラム６３が、上述の条件に加えて、図１４のステップＳ５２について上述したようにコンピュートサーバ２のフォルトセットをも考慮してコンピュートサーバ２を選択するようにしてもよい。そして構成変更プログラム６３は、選択したコンピュートサーバ２に対して、そのレプリケーションのレプリケート元に昇格したノードに代えて、新たにレプリケート先とするノードを作成するよう指示を与える。以下においては、このとき作成されたノードを新規ノードと呼ぶ。
【０１５１】
また構成変更プログラム６３は、コンピュートサーバ管理テーブル６６（図７）及びボリューム管理テーブル５２を参照して、本情報処理システム１内のストレージノード３の中から１つのストレージノード３を選択する。より詳しくは、そのとき対象としているレプリケーションを実行するいずれかのノードに対して仮想ボリュームを提供していないストレージノード３を１つ選択する。この際、構成変更プログラム６３が、ストレージノード３のフォルトセットをも考慮してストレージノード３を選択するようにしてもよい。この場合、構成変更プログラム６３が、上述の条件に加えて、そのとき対象としているレプリケーションを実行するいずれかのノードに仮想ボリュームを提供しているストレージノード３のいずれも属さないフォルトセットに属するという条件を満たすストレージノード３の中からストレージノード３を選択すればよい。
【０１５２】
そして構成変更プログラム６３は、選択したストレージノード３に対して、所定容量の仮想ボリュームを新規に作成するよう指示を与える。以下においては、このとき作成された仮想ボリュームを新規仮想ノードと呼ぶ。
【０１５３】
そして構成変更プログラム６３は、上述のようにして作成させた新規ノードに上述のようにして作成させた新規仮想ボリュームを割り当て、この後、その新規ノードをそのとき対象としているレクリエーションのレプリケート先として起動するようかかるコンピュートサーバ２に指示を与える。
【０１５４】
そして構成変更プログラム６３は、以上の処理が完了すると、ステップＳ６３において実行した新たなレプリケート先のノード及びそのノードに対する仮想ボリュームの割り当てに応じて、コンピュートサーバ管理テーブル６６やレプリケーション管理テーブル６７の対応するレコードの情報を更新し、この後、この第２の構成変更処理を終了する。
【０１５５】
（４）本実施の形態の効果
以上のように本実施の形態の情報処理システム１では、コンピュートサーバ２がミドルウェア込みでノードをデプロイする際に、そのノードが利用するミドルウェアプログラム４４の種別と、そのノードが属するレプリケーショングループにおけるそのノードのノード種別との組み合わせに対して予め規定されたドライブ種別の記憶装置２３から構成されるプールが対応付けられた仮想ボリュームを割り当てる。
【０１５６】
従って、本情報処理システム１によれば、ノードが利用するミドルウェアプログラム４４の種別（ミドルウェアの種別）及び当該ノードのノード種別に応じた適切な記憶階層の仮想ボリュームをそのノードに割り当てることができるため、例えば、ミドルウェアプログラム４４の種別がＭｏｎｇｏＤＢである場合に、「セカンダリ」に設定されたノードに対してＳＳＤなどの高価な記憶装置２３から構成されるプールと対応付けられた仮想ボリュームが割り当てられるのを防止することができ、その分、本情報処理システム１の運用コストの低減を図ることができる。
【０１５７】
また本情報処理システム１では、この際、各ノードに割り当てる仮想ボリュームを、その仮想ボリュームが属する記憶階層の空き容量が最も多いストレージノード３内に作成されたものから選択するため、各ストレージノード３間におけるＩ／Ｏ頻度の偏りが発生するのを未然に防止することができる。
【０１５８】
さらに本情報処理システム１では、いずれかのコンピュートサーバ２又はストレージノード３に障害が発生した場合に、コントローラノード４が、その障害の内容に応じた必要なノードについて、そのノードに割り当てる仮想ボリュームを適切な記憶階層の仮想ボリュームに切り替えるようコンピュートサーバ２やストレージノード３を制御する。
【０１５９】
従って、本情報処理システム１によれば、例えば、レプリケート元のノードが配置されたコンピュートサーバ２やそのノードに割り当てられた仮想ボリュームが存在するストレージノード３に障害が発生し、それまでレプリケート先であったノードがレプリケート元に昇格した場合においても、クライアント６から見た本情報処理システム１の応答性能が劣化するのを未然に防止することができる。
【０１６０】
（５）他の実施の形態
なお上述の実施の形態においては、本発明を図１のように構成された情報処理システム１に適用するようにした場合について述べたが、本発明はこれに限らず、この他種々の構成の情報処理システムに広く適用することができる。
【０１６１】
また上述の実施の形態においては、各仮想マシンやプロセスに割り当てるボリュームとして仮想ボリュームを適用するようにした場合について述べたが、本発明はこれに限らず、例えば、記憶装置２３が直接記憶領域を提供する論理ボリューム（仮想ではなく、実体を有する論理ボリューム）を適用するようにしてもよい。
【０１６２】
さらに上述の実施の形態においては、ノードがコンピュートサーバ上２上で稼動する仮想マシン又は仮想マシンが実行する１つのプロセスである場合について述べたが、本発明はこれに限らず、ノードがコンテナであってもよく、さらにはコンピュートサーバ２自体がノード（コンピュートサーバ２がノードを構成）であってもよい。
【０１６３】
さらに上述の実施の形態においては、１つのノードに１つの仮想ボリュームが割り当てられる場合について述べたが、本発明はこれに限らず、１つのノードに複数のノード（例えば、データボリューム及びジャーナルボリュームの２つのボリューム）が割り当てられる構成であっても本発明を適用することができる。
【０１６４】
さらに上述の実施の形態においては、より高いノード区分のノード種別のノードに対してより高い記憶階層の仮想ボリュームを割り当てるようにした場合について述べたが、本発明はこれに限らず、例えば、Ｎｅｏ４ｊのように、より低いノード区分のノード種別のノードに対してより高い記憶階層の仮想ボリュームを割り当てるようにしてもよく、どのノード区分のノード種別のノードにどのような記憶階層の仮想ボリュームを割り当てるかについては、ノードが利用するミドルウェアの種別に応じて適宜決定すればよい。
【０１６５】
さらに上述の実施の形態においては、図１１のボリューム作成処理について上述したように、レプリケーショングループを構成する各ノードにそれぞれ割り当てる仮想ボリュームの配置先を、対応する記憶階層の空き容量が多いストレージノード３から選択するようにした場合について述べたが、本発明はこれに限らず、ストレージノード３のフォルトセットをも考慮して各ノードにそれぞれ割り当てる仮想ボリュームの配置先のストレージノード３を選択するようにしてもよい。
【産業上の利用可能性】
【０１６６】
本発明は、レプリケーショングループをそれぞれ構成し、要求されるボリュームの応答性能がそれぞれ異なる複数種別のノードが稼動する情報処理システムに適用することができる。
【符号の説明】
【０１６７】
１……情報処理システム、２……コンピュートサーバ、３……ストレージノード、４……コントローラノード、１１，２１，３１……ＣＰＵ、１２，２２，３２……メモリ、１３，２３，３３……記憶装置、４０……ハイパバイザプログラム、４１……仮想マシンテンプレート、４４……ミドルウェアプログラム、５１……Ｔｉｅｒ制御プログラム、５２……ボリューム管理テーブル、６０……ミドルウェアデプロイプログラム、６１……ボリューム作成プログラム、６２……障害検知プログラム、６３……構成変更プログラム、６４……ドライブ判定テーブル、６５……ストレージ容量管理テーブル、６６……コンピュートサーバ管理テーブル、６７……レプリケーション管理テーブル。
【図１】
2019191951.tif 000003
【図２】
2019191951.tif 000004
【図３】
2019191951.tif 000005
【図４】
2019191951.tif 000006
【図５】
2019191951.tif 000007
【図６】
2019191951.tif 000008
【図７】
2019191951.tif 000009
【図８】
2019191951.tif 000010
【図９】
2019191951.tif 000011
【図１０】
2019191951.tif 000012
【図１１】
2019191951.tif 000013
【図１２】
2019191951.tif 000014
【図１３】
2019191951.tif 000015
【図１４】
2019191951.tif 000016
【図１５】
2019191951.tif 000017