(57)【要約】【課題】ミドルウェアの設定を変更することなく、システムの可用性を維持し、かつ、記憶容量を有効に活用したデータ制御を実現する。【解決手段】記憶装置と、サービスを提供するシステムの可用性を実現するためのデータ保護機能を有するデータ管理部に記憶装置に基づく記憶領域を提供し、記憶領域のデータ制御機能を有する記憶領域管理部と、記憶領域の配置及び前記記憶領域に適用するデータ制御ポリシを管理する制御部と、を備える計算機システムであって、制御部は、サービスを提供するシステムの可用性及びサービスの性能に関する設定情報を取得し、設定情報に基づいて、記憶領域に適用するデータ制御ポリシを決定し、記憶領域管理部は、データ制御ポリシに基づいて記憶領域に対する制御を行う。【選択図】図１
2020154587.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置と、サービスを提供するシステムの可用性を実現するためのデータ保護機能を有するデータ管理部に前記記憶装置に基づく記憶領域を提供し、前記記憶領域のデータ制御機能を有する記憶領域管理部と、前記記憶領域の配置及び前記記憶領域に適用するデータ制御ポリシを管理する制御部と、を備える計算機システムであって、
前記制御部は、
前記サービスを提供するシステムの可用性及び前記サービスの性能に関する第１の設定情報を取得し、
前記第１の設定情報に基づいて、前記記憶領域に適用する前記データ制御ポリシを決定し、
前記記憶領域管理部は、前記データ制御ポリシに基づいて、前記記憶領域に対する制御を行うことを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記記憶領域管理部は、前記記憶領域を管理するための記憶領域管理情報を保持し、
前記制御部は、
第１のデータ管理部から、前記第１の設定情報を含む、第１の記憶領域の生成要求を受け付けた場合、前記第１の記憶領域を配置する前記記憶装置を管理する前記記憶領域管理部を決定し、
前記第１の設定情報に基づいて、前記第１の記憶領域に適用する前記データ制御ポリシを決定し、
前記データ制御ポリシを含む前記第１の記憶領域の生成要求を、前記決定された記憶領域管理部に送信し、
前記記憶領域管理部は、
前記第１の記憶領域の生成要求を受信した場合、前記データ制御ポリシに基づいて、前記データ制御機能の設定を行い、
前記第１の記憶領域を生成し、
前記第１の記憶領域の情報及び前記第１の記憶領域に適用する前記データ制御ポリシを対応づけた管理データを前記記憶領域管理情報に追加し、
前記記憶領域管理情報に基づいて、前記第１の記憶領域に対する制御を行うことを特徴とする計算機システム。
【請求項３】
請求項１に記載の計算機システムであって、
前記記憶領域管理部は、前記記憶領域及び前記記憶領域に適用する前記データ制御ポリシを対応づけた管理データを格納する記憶領域管理情報を保持し、
前記制御部は、
前記記憶領域管理部の状態を監視し、
前記監視の結果、第２のデータ管理部に提供される第２の記憶領域の移動イベントが検出された場合、前記記憶領域管理情報を参照し、
前記第２の記憶領域に対して適用される前記データ制御ポリシに基づいて、前記第２の記憶領域の移動先の前記記憶装置を管理する前記記憶領域管理部を決定し、
前記第２の記憶領域が配置された移動元の前記記憶領域管理部及び移動先の前記記憶領域管理部に、前記第２の記憶領域の移動指示を送信することを特徴とする計算機システム。
【請求項４】
請求項２に記載の計算機システムであって、
前記データ制御ポリシは、データ冗長化処理及びデータ容量削減処理を行う第１の方式、前記データ制御機能を無効化した第２の方式、データ冗長化処理を行う第３の方式を含むことを特徴とする計算機システム。
【請求項５】
請求項４に記載の計算機システムであって、
前記制御部は、
前記データ制御ポリシが前記第１の方式である場合、一つの前記記憶領域管理部が管理するように前記記憶領域を管理する前記記憶領域管理部を決定し、
前記データ制御ポリシが前記第２の方式である場合、前記複数の記憶領域管理部が管理するように前記記憶領域を管理する前記記憶領域管理部を決定し、
前記データ制御ポリシが前記第３の方式である場合、任意のアルゴリズムに基づいて前記記憶領域を管理する前記記憶領域管理部を決定することを特徴とする計算機システム。
【請求項６】
請求項４に記載の計算機システムであって、
前記第１の方式のデータ冗長化処理は、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇを用いたデータ冗長化処理であり、
前記第１の方式のデータ容量削減処理は、重複排除処理及び圧縮処理の少なくともいずれかであり、
前記第３の方式のデータ冗長化処理は、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ及びＭｉｒｒｏｒｉｎｇのいずれかを用いたデータ冗長化処理であることを特徴とする計算機システム。
【請求項７】
記憶装置と、サービスを提供するシステムの可用性を実現するためのデータ保護機能を有するデータ管理部に前記記憶装置に基づく記憶領域を提供し、前記記憶領域のデータ制御機能を有する記憶領域管理部と、前記記憶領域の配置及び前記記憶領域に適用するデータ制御ポリシを管理する制御部と、を備える計算機システムのデータ管理方法であって、
前記データ管理方法は、
前記制御部が、前記サービスを提供するシステムの可用性及び前記サービスの性能に関する第１の設定情報を取得し、前記第１の設定情報に基づいて、前記記憶領域に適用する前記データ制御ポリシを決定する第１のステップと、
前記記憶領域管理部が、前記データ制御ポリシに基づいて、前記記憶領域に対する制御を行う第２のステップと、を含むことを特徴とするデータ管理方法。
【請求項８】
請求項７に記載のデータ管理方法であって、
前記記憶領域管理部は、前記記憶領域を管理するための記憶領域管理情報を保持し、
前記第１のステップは、
前記制御部が、第１のデータ管理部から、前記第１の設定情報を含む、第１の記憶領域の生成要求を受け付けた場合、前記第１の記憶領域を配置する前記記憶装置を管理する前記記憶領域管理部を決定するステップと、
前記制御部が、前記第１の設定情報に基づいて、前記第１の記憶領域に適用する前記データ制御ポリシを決定するステップと、
前記制御部が、前記データ制御ポリシを含む前記第１の記憶領域の生成要求を、前記決定された記憶領域管理部に送信するステップを含み、
前記第２のステップは、
前記記憶領域管理部が、前記第１の記憶領域の生成要求を受信した場合、前記データ制御ポリシに基づいて、前記データ制御機能の設定を行うステップと、
前記記憶領域管理部が、前記第１の記憶領域を生成するステップと、
前記記憶領域管理部が、前記第１の記憶領域の情報及び前記第１の記憶領域に適用する前記データ制御ポリシを対応づけた管理データを前記記憶領域管理情報に追加するステップと、
前記記憶領域管理部が、前記記憶領域管理情報に基づいて、前記第１の記憶領域に対する制御を行うステップと、を含むことを特徴とするデータ管理方法。
【請求項９】
請求項７に記載のデータ管理方法であって、
前記記憶領域管理部は、前記記憶領域及び前記記憶領域に適用する前記データ制御ポリシを対応づけた管理データを格納する記憶領域管理情報を保持し、
前記データ管理方法は、
前記制御部が、前記記憶領域管理部の状態を監視するステップと、
前記制御部が、前記監視の結果、第２のデータ管理部に提供される第２の記憶領域の移動イベントが検出された場合、前記記憶領域管理情報を参照し、前記第２の記憶領域に対して適用される前記データ制御ポリシに基づいて、前記第２の記憶領域を移動先の前記記憶装置を管理する前記記憶領域管理部を決定するステップと、
前記制御部が、前記第２の記憶領域が配置された移動元の前記記憶領域管理部及び移動先の前記記憶領域管理部に、前記第２の記憶領域の移動指示を送信するステップと、を含むことを特徴とするデータ管理方法。
【請求項１０】
請求項８に記載のデータ管理方法であって、
前記データ制御ポリシは、データ冗長化処理及びデータ容量削減処理を行う第１の方式、前記データ制御機能を無効化した第２の方式、データ冗長化処理を行う第３の方式を含むことを特徴とするデータ管理方法。
【請求項１１】
請求項１０に記載のデータ管理方法であって、
前記記憶領域を配置する前記記憶領域管理部を決定する処理は、
前記データ制御ポリシが前記第１の方式である場合、前記制御部が、一つの前記記憶領域管理部が管理するように前記記憶領域を管理する前記記憶領域管理部を決定するステップと、
前記データ制御ポリシが前記第２の方式である場合、前記制御部が、前記複数の記憶領域管理部が管理するように前記記憶領域を管理する前記記憶領域管理部を決定するステップと、
前記データ制御ポリシが前記第３の方式である場合、前記制御部が、任意のアルゴリズムに基づいて前記記憶領域を管理する前記記憶領域管理部を決定するステップと、を含むことを特徴とするデータ管理方法。
【請求項１２】
請求項１０に記載のデータ管理方法であって、
前記第１の方式のデータ冗長化処理は、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇを用いたデータ冗長化処理であり、
前記第１の方式のデータ容量削減処理は、重複排除処理及び圧縮処理の少なくともいずれかであり、
前記第３の方式のデータ冗長化処理は、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ及びＭｉｒｒｏｒｉｎｇのいずれかを用いたデータ冗長化処理であることを特徴とするデータ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶領域の制御に関する。
【背景技術】
【０００２】
近年、様々なデータを活用し、新たな知見の提供等を行うサービスが提供されている。このようなサービスでは、大量のデータを蓄積し、また、管理する必要がある。そのため、業務システムで扱われるデータの蓄積及びアクセスを管理するミドルウェアが稼働するノードと、業務システムにおいて扱われるデータを格納する記憶領域を管理するストレージ管理ソフトウェアが稼働するノードとが連携した計算機システムが採用される。
【０００３】
ミドルウェアはレプリケーション機能等を用いてデータを冗長化するデータ保護機能を有し、ストレージ管理ソフトウェアはＥｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能及びＭｉｒｒｏｒｉｎｇ機能等を用いてデータを冗長化するデータ保護機能を有する。これらのデータ保護機能を用いることによって可用性が高い業務システム（サービス）を実現できる。
【０００４】
例えば、特許文献１には、「分散型ストレージシステムにおいて、少なくとも３以上のノードを含む第１ノードグループが予め定義されている。第１ノードグループのノードそれぞれは、その管理しているストレージデバイスに格納するデータを、第１ノードグループに属する他ノードに送信する。第１ノードは、第１ノードグループの２以上の他ノードから受信したデータの組み合わせを使用して冗長コードを生成し、上記生成した冗長コードを、上記冗長コードを生成したデータを格納するストレージデバイスとは異なるストレージデバイスに格納する。第１のノードが生成する冗長コードのうち、少なくとも二つの冗長コードのデータ組み合わせは、構成するデータの論理アドレスの組み合わせが異なる、分散型ストレージシステム」が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１６／０５２６６５号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ミドルウェア及びストレージ管理ソフトウェアの各々のデータ保護機能を利用した場合、データを格納する記憶容量が大量に必要になるという問題がある。例えば、データを二重化するために、ミドルウェアのレプリケーション機能及びストレージ管理ソフトウェアのＭｉｒｒｏｒｉｎｇ機能を有効化した場合、オリジナルデータのデータ量の４倍の記憶容量が必要となる。また、データ保護機能の処理負荷等によって、サービスの性能及び品質等が低下する可能性がある。
【０００７】
ミドルウェアの設定等を変更して、ミドルウェアのデータ保護機能を無効化し、ストレージソフトウェアのＥｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能のみを有効化した場合、記憶容量の消費量を削減することができる。しかし、ミドルウェアのデータ保護機能を無効化した場合、ミドルウェア層の障害に対する業務システムの可用性が確保できない可能性がある。また、ミドルウェアの設定の変更にはコストがかかるため、現実的ではない。
【課題を解決するための手段】
【０００８】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、記憶装置と、サービスを提供するシステムの可用性を実現するためのデータ保護機能を有するデータ管理部に前記記憶装置に基づく記憶領域を提供し、前記記憶領域のデータ制御機能を有する記憶領域管理部と、前記記憶領域の配置及び前記記憶領域に適用するデータ制御ポリシを管理する制御部と、を備える計算機システムであって、前記制御部は、前記サービスを提供するシステムの可用性及び前記サービスの性能に関する第１の設定情報を取得し、前記第１の設定情報に基づいて、前記記憶領域に適用する前記データ制御ポリシを決定し、前記記憶領域管理部は、前記データ制御ポリシに基づいて、前記記憶領域に対する制御を行う。
【発明の効果】
【０００９】
本発明の一形態によれば、ミドルウェア（データ管理部）の設定を変更することなく、サービスを提供するシステムの可用性を維持し、かつ、記憶容量を有効に活用したデータ制御を実現できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１０】
【図１】実施例１の計算機システムの構成例を示す図である。
【図２】実施例１のコントローラノードのメモリに格納されるプログラム及び情報の一例を示す図である。
【図３】実施例１のストレージノードのメモリに格納されるプログラム及び情報の一例を示す図である。
【図４】実施例１のクラスタ管理情報のデータ構造の一例を示す図である。
【図５】実施例１のミドルウェア管理情報のデータ構造の一例を示す図である。
【図６】実施例１のボリューム管理情報のデータ構造の一例を示す図である。
【図７】実施例１のコントローラノードが実行するボリューム初期配置処理の一例を説明するフローチャートである。
【図８】実施例１のコントローラノードが実行する通常配置処理の一例を説明するフローチャートである。
【図９】実施例１のコントローラノードが実行する分散配置処理の一例を説明するフローチャートである。
【図１０】実施例１のコントローラノードが実行する集約配置処理の一例を説明するフローチャートである。
【図１１】実施例１のストレージノードが実行するボリューム生成処理の一例を説明するフローチャートである。
【図１２Ａ】実施例１のストレージノードが実行するＷｒｉｔｅ処理の一例を説明するフローチャートである。
【図１２Ｂ】実施例１のストレージノードが実行するＷｒｉｔｅ処理の一例を説明するフローチャートである。
【図１３Ａ】実施例１のコントローラノードが実行するボリューム移動判定処理の一例を説明するフローチャートである。
【図１３Ｂ】実施例１のコントローラノードが実行するボリューム移動判定処理の一例を説明するフローチャートである。
【図１４】実施例１のコントローラノードが実行する第１の移動判定処理の一例を説明するフローチャートである。
【図１５】実施例１のコントローラノードが実行する第２の移動判定処理の一例を説明するフローチャートである。
【図１６】実施例１のコントローラノードが実行する第３の移動判定処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の実施例を、図面を用いて説明する。ただし、本発明は以下に示す実施例の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【００１２】
以下に説明する発明の構成において、同一又は類似する構成又は機能には同一の符号を付し、重複する説明は省略する。
【００１３】
本明細書等における「第１」、「第２」、「第３」等の表記は、構成要素を識別するために付するものであり、必ずしも、数又は順序を限定するものではない。
【００１４】
図面等において示す各構成の位置、大きさ、形状、及び範囲等は、発明の理解を容易にするため、実際の位置、大きさ、形状、及び範囲等を表していない場合がある。したがって、本発明では、図面等に開示された位置、大きさ、形状、及び範囲等に限定されない。
【実施例１】
【００１５】
図１は、実施例１の計算機システムの構成例を示す図である。
【００１６】
計算機システムは、コントローラノード１００、複数の計算機ノード１１０、及び複数のストレージノード１２０から構成される。コントローラノード１００、複数の計算機ノード１１０、及び複数のストレージノード１２０は、ネットワーク１５０を介して互いに接続される。
【００１７】
ネットワーク１５０は、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等が考えられる。ネットワーク１５０の接続方式は無線及び有線のいずれでもよい。また、計算機ノード１１０及びストレージノード１２０を接続するネットワーク、コントローラノード１００及び計算機ノード１１０を接続するネットワーク、並びにコントローラノード１００及びストレージノード１２０を接続するネットワークは、それぞれ異なる種別のネットワーク及び接続方式でもよい。
【００１８】
コントローラノード１００は、計算機ノード１１０に提供されるボリューム（記憶領域）に関する管理を行うプログラムが稼働するノードである。
【００１９】
コントローラノード１００は、ＣＰＵ１０１、メモリ１０２、記憶装置１０３、及びネットワークインタフェース１０４を有する。各ハードウェアはバスを介して互いに接続される。なお、コントローラノード１００は、キーボード、マウス、タッチパネル等の入力装置、及びディスプレイ、プリンタ等の出力装置を有してもよい。
【００２０】
ＣＰＵ１０１は、メモリ１０２に格納されるプログラムを実行する。ＣＰＵ１０１がプログラムにしたがって処理を実行することによって、特定の機能を実現するモジュールとして動作する。以下の説明では、プログラムを主語に処理を説明する場合、ＣＰＵ１０１がプログラムを実行していることを示す。
【００２１】
メモリ１０２は、ＣＰＵ１０１が実行するプログラム及び情報を格納する。また、メモリ１０２は、プログラムが使用するワークエリアを含む。メモリ１０２に格納されるプログラム及び情報の詳細は図２を用いて説明する。
【００２２】
記憶装置１０３は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）及びＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等、データを永続的に記憶する装置である。メモリ１０２に格納されるプログラム及び情報は、記憶装置１０３に格納されてもよい。この場合、ＣＰＵ１０１が、記憶装置１０３からプログラム及び情報を読み出してメモリ１０２にロードし、ロードされたプログラムを実行する。
【００２３】
ネットワークインタフェース１０４は、ネットワーク１５０を介して他のノードと接続するためのインタフェースである。
【００２４】
計算機ノード１１０は、データの蓄積及びアクセスの制御を行うサービスを提供するミドルウェア（図示省略）が稼働するノードである。少なくとも一つの計算機ノード１１０から業務システムが構成される。なお、ミドルウェアは、レプリケーション機能等を用いてデータを冗長化するデータ保護機能を有するものとする。
【００２５】
計算機ノード１１０は、ＣＰＵ１１１、メモリ１１２、記憶装置１１３、及びネットワークインタフェース１１４を有する。各ハードウェアはバスを介して互いに接続される。なお、計算機ノード１１０は入力装置及び出力装置を有してもよい。
【００２６】
ＣＰＵ１１１、メモリ１１２、記憶装置１１３、及びネットワークインタフェース１１４は、ＣＰＵ１０１、メモリ１０２、記憶装置１０３、及びネットワークインタフェース１０４と同様のハードウェアである。
【００２７】
ストレージノード１２０は、計算機ノード１１０に対してデータを格納するためのボリュームを提供するプログラムが稼働するノードである。複数のストレージノード１２０からストレージシステムが構成される。なお、ストレージノード１２０上で稼働するプログラムは、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能及びＭｉｒｒｏｒｉｎｇ機能等を用いてデータを冗長化するデータ保護機能、並びに、重複排除処理及び圧縮処理等のデータ容量削減機能を含むデータ制御機能を有するものとする。
【００２８】
ストレージノード１２０は、ＣＰＵ１２１、メモリ１２２、複数の記憶装置１２３、及びネットワークインタフェース１２４を有する。各ハードウェアはバスを介して互いに接続される。
【００２９】
ＣＰＵ１２１、メモリ１２２、記憶装置１２３、及びネットワークインタフェース１２４は、ＣＰＵ１０１、メモリ１０２、記憶装置１０３、及びネットワークインタフェース１０４と同様のハードウェアである。メモリ１２２に格納されるプログラム及び情報の詳細は図３を用いて説明する。
【００３０】
ストレージノード１２０は、複数の記憶装置１２３からＲＡＩＤグループを生成し、ＲＡＩＤグループから計算機ノード１１０に提供するボリューム、例えば、ＬＤＥＶを生成する。なお、複数のストレージノード１２０は、互いに連携して、記憶領域をプールとして管理してもよい。なお、ボリュームは、ＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）単位の記憶領域又はページ単位の記憶領域から構成される。
【００３１】
実施例１では、一つの計算機（例えば、ベアメタルサーバ）を一つの計算機ノード１１０として記載しているがこれに限定されない。例えば、仮想計算機又はコンテナを計算機ノード１１０としてもよい。この場合、一つの計算機には複数の計算機ノード１１０が含まれる。すなわち、一つの計算機上で複数のミドルウェアが稼働する。
【００３２】
実施例１では、一つのストレージ装置を一つのストレージノード１２０として記載しているがこれに限定されない。例えば、仮想的なストレージ装置をストレージノード１２０としてもよい。この場合、一つのストレージ装置には複数のストレージノード１２０が含まれる。すなわち、一つのストレージ装置上で複数のストレージ管理プログラムが稼働する。
【００３３】
また、計算機ノード１１０及びストレージノード１２０は、別々の構成として記載しているがこれに限定されない。計算機ノード１１０及びストレージノード１２０を一つの構成としてもよい。例えば、計算機及びストレージ装置を統合したＨｙｐｅｒ  Ｃｏｎｖｅｒｇｅｄ  Ｉｎｆｒａｓｔｒｕｃｔｕｒｅを用いてもよい。
【００３４】
図２は、実施例１のコントローラノード１００のメモリ１０２に格納されるプログラム及び情報の一例を示す図である。
【００３５】
メモリ１０２は、制御ポリシ決定プログラム２０１、初期配置制御プログラム２０２、ボリューム移動制御プログラム２０３、クラスタ管理情報２１１、及びミドルウェア管理情報２１２を格納する。なお、メモリ１０２には、図示しないプログラム及び情報が格納されてもよい。
【００３６】
制御ポリシ決定プログラム２０１は、計算機ノード１１０（ミドルウェア）に割り当てられた記憶領域に対して適用する、ストレージノード１２０のデータ制御ポリシを決定するプログラムである。
【００３７】
初期配置制御プログラム２０２は、新たに生成するボリュームの配置を制御するプログラムである。
【００３８】
ボリューム移動制御プログラム２０３は、ボリュームの移動を制御するプログラムである。ボリューム移動制御プログラム２０３は、イベントの発生を監視し、当該イベントの発生を検出した場合、ボリュームの移動を制御する。具体的には、ボリューム移動制御プログラム２０３は、ストレージノード１２０を監視し、当該監視結果に基づいて重複排除条件及び負荷条件のいずれかを満たすか否かを判定する。
【００３９】
クラスタ管理情報２１１は、一つの業務システムを構成する計算機ノード１１０のグループ（クラスタ）を管理するための情報である。クラスタ管理情報２１１のデータ構造の詳細は図４を用いて説明する。
【００４０】
ミドルウェア管理情報２１２は、計算機ノード１１０上で稼働するミドルウェアを管理するための情報である。ミドルウェア管理情報２１２のデータ構造の詳細は図５を用いて説明する。
【００４１】
なお、コントローラノード１００が有する各プログラムについては、複数のプログラムを一つのプログラムにまとめてもよいし、一つのプログラムを機能毎に複数のプログラムに分けてもよい。例えば、制御ポリシ決定プログラム２０１、初期配置制御プログラム２０２、及びボリューム移動制御プログラム２０３をまとめて一つの制御プログラムとしてもよい。
【００４２】
図３は、実施例１のストレージノード１２０のメモリ１２２に格納されるプログラム及び情報の一例を示す図である。
【００４３】
メモリ１２２は、ボリューム生成プログラム３０１、ボリューム移動プログラム３０２、Ｉ／Ｏ処理プログラム３０３、重複排除／圧縮プログラム３０４、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇプログラム３０５、Ｍｉｒｒｏｒｉｎｇプログラム３０６、及びボリューム管理情報３１１を格納する。なお、メモリ１２２には、図示しないプログラム及び情報が格納されてもよい。
【００４４】
ボリューム生成プログラム３０１は、ボリュームを生成するプログラムである。
【００４５】
ボリューム移動プログラム３０２は、ボリュームの移動を行うプログラムである。
【００４６】
Ｉ／Ｏ処理プログラム３０３は、ボリュームに対するＩ／Ｏを処理するプログラムである。
【００４７】
重複排除／圧縮プログラム３０４は、データ量を削減するために、重複するデータの排除及びデータの圧縮を行うプログラムである。
【００４８】
Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇプログラム３０５は、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇを用いたデータの書込み及び読出しを行うプログラムである。
【００４９】
Ｍｉｒｒｏｒｉｎｇプログラム３０６は、Ｍｉｒｒｏｒｉｎｇを用いたデータの書込みを行うプログラムである。
【００５０】
ボリューム管理情報３１１は、ボリュームを管理するための情報である。ボリューム管理情報３１１のデータ構造の詳細は図６を用いて説明する。
【００５１】
なお、ストレージノード１２０が有する各プログラムについては、複数のプログラムを一つのプログラムにまとめてもよいし、一つのプログラムを機能毎に複数のプログラムに分けてもよい。例えば、ボリューム生成プログラム３０１、ボリューム移動プログラム３０２、Ｉ／Ｏ処理プログラム３０３、重複排除／圧縮プログラム３０４、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇプログラム３０５、Ｍｉｒｒｏｒｉｎｇプログラム３０６をまとめて一つの記憶領域管理プログラムとしてもよい。
【００５２】
図４は、実施例１のクラスタ管理情報２１１のデータ構造の一例を示す図である。
【００５３】
クラスタ管理情報２１１は、クラスタＩＤ４０１、計算機ノードＩＤ４０２、コンテナＩＤ４０３、ストレージノードＩＤ４０４、ボリュームＩＤ４０５、容量４０６、及びＩＯ負荷４０７から構成されるエントリを格納する。
【００５４】
クラスタＩＤ４０１は、クラスタの識別情報を格納するフィールドである。クラスタＩＤ４０１には、例えば、数値が格納される。クラスタの識別情報は、コントローラノード１００が設定してもよいし、業務システムを運用するユーザが手動で設定してもよい。
【００５５】
計算機ノードＩＤ４０２は、計算機ノード１１０の識別情報を格納するフィールドである。計算機ノードＩＤ４０２には、例えば、計算機ノード１１０の型番及び識別子等が格納される。計算機ノード１１０の識別情報は、コントローラノード１００が設定してもよいし、業務システムを運用するユーザが手動で設定してもよい。
【００５６】
コンテナＩＤ４０３は、ミドルウェアが稼働するコンテナ（図示省略）の識別情報を格納するフィールドである。コンテナＩＤ４０３には、例えば、コンテナの識別子等が格納される。コンテナの識別情報は、コントローラノード１００が設定してもよいし、業務システムを運用するユーザが手動で設定してもよい。
【００５７】
ストレージノードＩＤ４０４は、計算機ノード１１０にボリュームを提供するストレージノード１２０の識別情報を格納するフィールドである。ストレージノードＩＤ４０４には、例えば、ストレージノードＩＤ４０４の型番及び識別子等が格納される。計算機ノード１１０の識別情報は、コントローラノード１００が設定してもよいし、ストレージシステムを運用するユーザが手動で設定してもよい。
【００５８】
ボリュームＩＤ４０５は、計算機ノード１１０に提供されるボリュームの識別情報を格納するフィールドである。ボリュームＩＤ４０５には、例えば、数値が格納される。ボリュームの識別情報は、ストレージノード１２０が設定してもよいし、ストレージシステムを運用するユーザが手動で設定してもよい。なお、ボリュームの識別情報は、ストレージノード１２０内でボリュームを識別するための情報であるため、ストレージノード１２０間で重複する可能性がある。
【００５９】
容量４０６は、ボリュームの容量を格納するフィールドである。
【００６０】
ＩＯ負荷４０７は、ボリュームに対するＩＯの負荷を示す情報を格納するフィールドである。本実施例のＩＯ負荷４０７には「Ｈｏｔ」及び「Ｃｏｌｄ」のいずれかが格納される。「Ｈｏｔ」は頻繁にＩＯ要求を受け付けている状態を示し、「Ｃｏｌｄ」は、ＩＯ要求がない又はＩＯ要求の数が少ない状態を示す。例えば、単位時間当たりのＩＯ要求の数が閾値より大きい場合、ＩＯ負荷４０７には「Ｈｏｔ」が設定され、単位時間当たりのＩＯ要求の数が閾値以下の場合、ＩＯ負荷４０７には「Ｃｏｌｄ」が設定される。なお、ＩＯ負荷４０７に格納される値は一例であってこれに限定されない。例えば、ＩＯ負荷４０７にはＩＯ要求の数が格納されてもよい。
【００６１】
実施例１では、一つのコンテナ上で一つのミドルウェアが稼働するためエントリにはコンテナＩＤ４０３が含まれる。一つの計算機ノード１１０上で一つのミドルウェアが稼働する場合、コンテナＩＤ４０３はエントリに含まれない。また、一つの仮想計算機上で一つのミドルウェアが稼働する場合、エントリには、コンテナＩＤ４０３の代わりに仮想計算機ＩＤが含まれる。
【００６２】
図５は、実施例１のミドルウェア管理情報２１２のデータ構造の一例を示す図である。
【００６３】
ミドルウェア管理情報２１２は、クラスタＩＤ５０１、レプリケーション数５０２、モード５０３、コンテナＩＤ５０４、ミドルウェア５０５、及び属性５０６から構成されるエントリを格納する。
【００６４】
クラスタＩＤ５０１はクラスタＩＤ４０１と同一のフィールドであり、コンテナＩＤ５０４はコンテナＩＤ４０３と同一のフィールドである。
【００６５】
レプリケーション数５０２は、ミドルウェアのレプリケーション機能を用いて生成するレプリカの数を格納するフィールドである。実施例１では、レプリケーション数５０２の値と同数のコンテナが一つのクラスタを構成する。
【００６６】
モード５０３は、ミドルウェアを用いて提供される業務システムに要求される性能に関する情報を格納するフィールドである。実施例１のモード５０３には、「性能重視」及び「容量重視」のいずれかが格納される。「性能重視」は、アクセス性能を重視した業務システムであることを示し、「容量重視」は、ボリュームの容量の効率的な利用を重視した業務システムであることを示す。なお、モード５０３に格納される情報は一例であってこれに限定されない。
【００６７】
ミドルウェア５０５は、コンテナＩＤ５０４に対応するコンテナ上で稼働するミドルウェアの種別を示す情報を格納するフィールドである。
【００６８】
属性５０６は、クラスタ内におけるミドルウェアの属性を格納するフィールドである。属性５０６には、例えば、「Ｐｒｉｍａｒｙ」及び「Ｓｅｃｏｎｄａｒｙ」のいずれで稼働しているか示す情報が格納される。
【００６９】
なお、クラスタ管理情報２１１及びミドルウェア管理情報２１２は一つにまとめてもよい。
【００７０】
図６は、実施例１のボリューム管理情報３１１のデータ構造の一例を示す図である。
【００７１】
ボリューム管理情報３１１は、ボリュームＩＤ６０１、容量６０２、データ制御ポリシ６０３、データ保護レベル６０４、及び重複排除パターン６０５から構成されるエントリを格納する。
【００７２】
ボリュームＩＤ６０１及び容量６０２は、ボリュームＩＤ４０５及び容量４０６と同一のフィールドである。
【００７３】
データ制御ポリシ６０３は、計算機ノード１１０（ミドルウェア）に割り当てられた記憶領域に対して適用するストレージノード１２０のデータ制御ポリシを示す情報を格納する。すなわち、ボリュームに適用するストレージシステムのデータ制御機能を設定するためのフィールドである。
【００７４】
実施例１のデータ制御ポリシ６０３には、「Ｄｅｄｕｐｅ＋ＥＣ」、「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」、「Ｍｉｒｒｏｒｉｎｇ」、及び「ＥＣ」が格納される。「Ｄｅｄｕｐｅ＋ＥＣ」は重複排除機能及びＥｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能を適用することを示す。「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」は、ストレージシステムのデータ保護機能を適用しないことを示す。「Ｍｉｒｒｏｒｉｎｇ」はＭｉｒｒｏｒｉｎｇ機能を適用することを示す。また、「ＥＣ」は、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能を適用することを示す。
【００７５】
データ保護レベル６０４は、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能の設定を格納するフィールドである。Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能が適用されないボリュームのデータ保護レベル６０４は空欄となる。
【００７６】
重複排除パターン６０５は、重複排除処理の実行タイミングを示す情報を格納するフィールドである。実施例１の重複排除パターン６０５には「インライン」及び「ポストプロセス」のいずれかが格納される。「インライン」はボリュームのＩＯと同期して重複排除処理を実行することを示す。「ポストプロセス」はボリュームのＩＯと非同期で重複排除処理を実行することを示す。
【００７７】
次に、計算機システムにおいて実行される処理の詳細について説明する。まず、ボリュームの生成時に実行される処理について説明する。
【００７８】
図７は、実施例１のコントローラノード１００が実行するボリューム初期配置処理の一例を説明するフローチャートである。
【００７９】
計算機ノード１１０は、ボリュームが必要な場合、コントローラノード１００に対してボリューム生成要求を送信する。
【００８０】
実施例１のボリューム生成要求には、クラスタに関する情報、ボリュームの容量、モードに関する情報、サービスを提供する業務システムの可用性に関する情報、及び重複排除パターンに関する情報が含まれる。
【００８１】
クラスタに関する情報は、クラスタの識別情報、クラスタを構成する計算機ノード１１０の識別情報、コンテナの識別情報、ミドルウェアの種別、及びミドルウェアの属性等を含む。モードに関する情報は、「性能重視」又は「容量重視」のいずれかを含む。サービスを提供する業務システムの可用性に関する情報は、ミドルウェア層におけるデータ保護機能に関する設定情報として、レプリケーション機能の有効又は無効を示す値、及びレプリケーション数等を含む。重複排除パターンに関する情報は、Ｎｕｌｌ、「インライン」、及び「ポストプロセス」のいずれかを含む。以下の説明では、モードに関する情報をモード情報と記載し、サービスを提供する業務システムの可用性に関する情報を可用性情報と記載する。
【００８２】
コントローラノード１００は、計算機ノード１１０からボリューム生成要求を受信した場合（ステップＳ１０１）、クラスタ管理情報２１１及びミドルウェア管理情報２１２を更新する（ステップＳ１０２）。具体的には、以下のような処理が実行される。
【００８３】
制御ポリシ決定プログラム２０１は、クラスタ管理情報２１１にエントリを追加し、追加されたエントリのクラスタＩＤ５０１にクラスタの識別情報を設定する。制御ポリシ決定プログラム２０１は、追加されたエントリに、クラスタに含まれる計算機ノード１１０の数だけ行を生成し、生成された行の計算機ノードＩＤ４０２及びコンテナＩＤ４０３に値を設定する。
【００８４】
制御ポリシ決定プログラム２０１は、ミドルウェア管理情報２１２にエントリを追加し、追加されたエントリのクラスタＩＤ５０１にクラスタの識別情報を設定し、モード５０３にモードを設定する。
【００８５】
制御ポリシ決定プログラム２０１は、レプリケーション機能が有効である場合、追加されたエントリのレプリケーション数５０２にレプリケーション数を設定し、コンテナＩＤ５０４、ミドルウェア５０５、及び属性５０６に、レプリケーションの数だけ行を生成する。制御ポリシ決定プログラム２０１は、生成された行のミドルウェア５０５にミドルウェアの識別情報を設定し、当該行の属性５０６に属性の値を設定する。
【００８６】
制御ポリシ決定プログラム２０１は、レプリケーション機能が無効である場合、追加されたエントリのレプリケーション数５０２に「１」を設定し、コンテナＩＤ５０４、ミドルウェア５０５、及び属性５０６に一つの行を生成する。制御ポリシ決定プログラム２０１は、生成された行のミドルウェア５０５にミドルウェアの識別情報を設定し、当該行の属性５０６に属性の値を設定する。
【００８７】
制御ポリシ決定プログラム２０１は、クラスタ、計算機ノード１１０、コンテナ、及びミドルウェアから構成されるエントリを含む参照リストを生成し、ワークエリアに格納する。以上がステップＳ１０２の処理の説明である。
【００８８】
次に、コントローラノード１００は、レプリケーション機能が有効であるか否かを判定する（ステップＳ１０３）。
【００８９】
具体的には、制御ポリシ決定プログラム２０１は、ミドルウェア管理情報２１２に追加されたエントリのレプリケーション数５０２が「１」であるか否かを判定する。レプリケーション数５０２が「１」である場合、制御ポリシ決定プログラム２０１は、レプリケーション機能が無効であると判定する。
【００９０】
レプリケーション機能が無効であると判定された場合、コントローラノード１００は、通常配置処理を実行する（ステップＳ１０４）。その後、コントローラノード１００はボリューム初期配置処理を終了する。通常配置処理の詳細は図８を用いて説明する。
【００９１】
レプリケーション機能が有効であると判定された場合、コントローラノード１００は、モードを判別する（ステップＳ１０５）。
【００９２】
モードが「性能重視」であると判定された場合、コントローラノード１００は分散配置処理を実行する（ステップＳ１０６）。その後、コントローラノード１００はボリューム初期配置処理を終了する。分散配置処理の詳細は図９を用いて説明する。
【００９３】
モードが「容量重視」であると判定された場合、コントローラノード１００は集約配置処理を実行する（ステップＳ１０７）。その後、コントローラノード１００はボリューム初期配置処理を終了する。集約配置処理の詳細は図１０を用いて説明する。
【００９４】
図８は、実施例１のコントローラノード１００が実行する通常配置処理の一例を説明するフローチャートである。
【００９５】
コントローラノード１００は、ボリューム生成要求に含まれる情報に基づいて、データ制御ポリシを決定する（ステップＳ２０１）。具体的には、以下のような処理が実行される。
【００９６】
ミドルウェア層のデータ保護機能が無効化されているため、制御ポリシ決定プログラム２０１は、業務システムの可用性を確保可能なデータ制御ポリシを設定する。すなわち、制御ポリシ決定プログラム２０１は、モードが「性能重視」である場合、データ制御ポリシを「Ｍｉｒｒｏｒｉｎｇ」に決定し、モードが「容量重視」である場合、データ制御ポリシを「ＥＣ」に決定し、また、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能の設定情報を生成する。当該設定情報には、例えば、複数のノードに分割して保持するデータ数、及びデータの復元に用いるパリティ数が含まれる。データ数をＤ、パリティ数をＰとして場合、４Ｄ２Ｐ等と表現される。
【００９７】
制御ポリシ決定プログラム２０１は、「Ｍｉｒｒｏｒｉｎｇ」、又は、「ＥＣ」及びＥｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能の設定情報を含むデータ制御ポリシ情報を生成する。
【００９８】
なお、可用性情報に、ストレージシステム層におけるデータ保護機能に関する情報を設定し、当該情報に基づいてデータ制御ポリシを決定してもよい。この場合、モードは考慮しなくてもよい。ストレージシステム層におけるデータ保護機能に関する情報には、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能及びＭｉｒｒｏｒｉｎｇ機能の有効又は無効を示す値、及び、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能の設定情報等が含まれる。以上がステップＳ２０１の処理の説明である。
【００９９】
次に、コントローラノード１００は、参照リストを参照して計算機ノード１１０を選択する（ステップＳ２０２）。また、コントローラノード１００は、選択された計算機ノード１１０に割り当てるボリュームの配置先のストレージノード１２０を選択する（ステップＳ２０３）。
【０１００】
具体的には、初期配置制御プログラム２０２は、参照リストからエントリを一つ選択する。また、初期配置制御プログラム２０２は、任意の選択アルゴリズムにしたがって、ストレージノード１２０を選択する。このとき、初期配置制御プログラム２０２は、選択されたエントリに含まれるクラスタの識別情報及び計算機ノード１１０の識別情報と、選択されたストレージノード１２０の識別情報とで構成される一時データをメモリ１０２に格納する。
【０１０１】
ボリュームの配置先のストレージノード１２０を選択する方法としては、例えば、以下のような三つの選択方法が考えられる。
【０１０２】
（方法１）初期配置制御プログラム２０２は、ラウンドロビン方式でボリュームの配置先のストレージノード１２０を選択する。
【０１０３】
（方法２）初期配置制御プログラム２０２は、ストレージノード１２０の使用容量又はＩＯ負荷に基づいてボリュームの配置先のストレージノード１２０を選択する。
【０１０４】
（方法３）初期配置制御プログラム２０２は、Ｉ／Ｏ性能に基づいてボリュームの配置先のストレージノード１２０を選択する。例えば、計算機ノード１１０及びストレージノード１２０が別々の計算機である場合、ボリューム生成要求を送信した計算機ノード１１０と物理的な距離又は通信応答が速いストレージノード１２０をボリュームの配置先として選択する。また、ハイパーコンバージドインフラストラクチャの場合、計算機ノード１１０と同一の筐体のストレージノード１２０をボリュームの配置先として選択する。
【０１０５】
次に、コントローラノード１００は、参照リストに登録された全ての計算機ノード１１０について処理が完了したか否かを判定する（ステップＳ２０４）。
【０１０６】
参照リストに登録された全ての計算機ノード１１０について処理が完了していないと判定された場合、コントローラノード１００はステップＳ２０２に戻り、同様の処理を実行する。
【０１０７】
参照リストに登録された全ての計算機ノード１１０について処理が完了したと判定された場合、コントローラノード１００は、決定されたストレージノード１２０にボリューム生成指示を送信する（ステップＳ２０５）。
【０１０８】
具体的には、初期配置制御プログラム２０２が、一時データに基づいて、ストレージノード１２０にボリューム生成指示を送信する。ボリューム生成指示には、ボリューム生成要求に含まれるボリュームの容量、選択された計算機ノード１１０の識別情報、及びデータ制御ポリシ情報が含まれる。
【０１０９】
次に、コントローラノード１００は、ストレージノード１２０から、計算機ノード１１０の識別情報、ストレージノード１２０の識別情報、ボリュームの識別情報、及びボリュームの容量等が含まれる生成完了通知を受信した場合、クラスタ管理情報２１１を更新する（ステップＳ２０６）。具体的には、以下のような処理が実行される。
【０１１０】
初期配置制御プログラム２０２は、ステップＳ１０２において、クラスタ管理情報２１１に追加されたエントリの各行を参照し、計算機ノードＩＤ４０２が生成完了通知に含まれる計算機ノード１１０の識別情報に一致するエントリを検索する。
【０１１１】
初期配置制御プログラム２０２は、検索された行のストレージノードＩＤ４０４、ボリュームＩＤ４０５、及び容量４０６に、生成完了通知に含まれる値を設定する。このとき、ＩＯ負荷４０７は空欄のままである。以上がステップＳ２０６の処理の説明である。
【０１１２】
コントローラノード１００は、生成指示を送信した全てのストレージノード１２０から生成完了通知を受信した場合、通常配置処理を終了する。
【０１１３】
図９は、実施例１のコントローラノード１００が実行する分散配置処理の一例を説明するフローチャートである。
【０１１４】
コントローラノード１００は、ボリューム生成要求に含まれる情報に基づいて、データ制御ポリシを決定する（ステップＳ３０１）。具体的には、以下のような処理が実行される。
【０１１５】
ミドルウェア層のデータ保護機能は有効化され、かつ、モードは「性能重視」である。したがって、ボリュームへのデータの書込み及び読出しを高速に行うために、制御ポリシ決定プログラム２０１は、ストレージシステム層のデータ制御機能を無効化する。すなわち、制御ポリシ決定プログラム２０１は、データ制御ポリシを「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」に決定する。
【０１１６】
制御ポリシ決定プログラム２０１は、「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」を含むデータ制御ポリシ情報を生成する。以上がステップＳ３０１の処理の説明である。
【０１１７】
次に、コントローラノード１００は、参照リストを参照して計算機ノード１１０を選択する（ステップＳ３０２）。また、コントローラノード１００は、選択された計算機ノード１１０に割り当てるボリュームの配置先のストレージノード１２０を選択する（ステップＳ３０３）。ステップＳ３０２及びステップＳ３０３の処理はステップＳ２０２及びステップＳ２０３の処理と同一である。
【０１１８】
次に、コントローラノード１００は、同一のクラスタの二つ以上のボリュームの配置先として選択されたストレージノード１２０が存在するか否かを判定する（ステップＳ３０４）。具体的には以下のような処理が実行される。
【０１１９】
初期配置制御プログラム２０２は、クラスタ管理情報２１１を参照し、クラスタＩＤ４０１が、参照リストから選択されたエントリに含まれるクラスタの識別情報に一致するエントリを検索する。初期配置制御プログラム２０２は、検索されたエントリに含まれる行を参照し、ストレージノードＩＤ４０４に選択されたストレージノード１２０の識別情報が設定された行が存在するか否かを判定する。
【０１２０】
前述の条件を満たす行が存在する場合、初期配置制御プログラム２０２は、同一のクラスタの二つ以上のボリュームの配置先として選択されたストレージノード１２０が存在すると判定する。
【０１２１】
前述の条件を満たす行が存在しない場合、初期配置制御プログラム２０２は、メモリ１０２に格納される一時データを参照し、クラスタの識別情報及びストレージノード１２０の識別情報の組合せが、参照リストから選択されたエントリに含まれるクラスタの識別情報及び選択されたストレージノード１２０の識別情報の組合せと一致する一時データが存在するか否かを判定する。
【０１２２】
前述の条件を満たす一時データが存在する場合、初期配置制御プログラム２０２は、同一のクラスタの二つ以上のボリュームの配置先として選択されたストレージノード１２０が存在すると判定する。
【０１２３】
前述の条件を満たす一時データが存在しない場合、初期配置制御プログラム２０２は、同一のクラスタの二つ以上のボリュームの配置先として選択されたストレージノード１２０が存在しないと判定する。
【０１２４】
ステップＳ３０４は、以下のような理由で実行される。分散配置処理が実行される状況下では、ミドルウェア層のデータ保護機能のみを用いて業務システムの可用性が確保される。したがって、同一のストレージノード１２０に複数のボリュームを生成した場合、ストレージシステム側の障害によって業務システムが停止する可能性がある。コントローラノード１００は、前述のような可用性の低下を回避するために、異なるストレージノード１２０にボリュームが配置されるように制御する。以上がステップＳ３０４の処理の説明である。
【０１２５】
同一のクラスタの二つ以上のボリュームの配置先として選択されたストレージノード１２０が存在すると判定された場合、コントローラノード１００はステップＳ３０３に戻り、同様の処理を実行する。
【０１２６】
同一のクラスタの二つ以上のボリュームの配置先として選択されたストレージノード１２０が存在しないと判定された場合、コントローラノード１００は、参照リストに登録された全ての計算機ノード１１０について処理が完了したか否かを判定する（ステップＳ３０５）。
【０１２７】
参照リストに登録された全ての計算機ノード１１０について処理が完了していないと判定された場合、コントローラノード１００はステップＳ３０２に戻り、同様の処理を実行する。
【０１２８】
参照リストに登録された全ての計算機ノード１１０について処理が完了したと判定された場合、決定されたストレージノード１２０にボリューム生成指示を送信する（ステップＳ３０６）。ステップＳ３０６の処理はステップＳ２０５の処理と同一である。
【０１２９】
次に、コントローラノード１００は、ストレージノード１２０から生成完了通知を受信した場合、クラスタ管理情報２１１を更新する（ステップＳ３０７）。ステップＳ３０７の処理はステップＳ２０６と同一の処理である。
【０１３０】
コントローラノード１００は、生成指示を送信した全てのストレージノード１２０から生成完了通知を受信した場合、分散配置処理を終了する。
【０１３１】
図１０は、実施例１のコントローラノード１００が実行する集約配置処理の一例を説明するフローチャートである。
【０１３２】
コントローラノード１００は、ボリューム生成要求に含まれる情報に基づいて、データ制御ポリシを決定する（ステップＳ４０１）。具体的には、以下のような処理が実行される。
【０１３３】
ミドルウェア層のデータ保護機能は有効化され、かつ、モードは「容量重視」である。そのため、コントローラノード１００は、データ容量削減機能の有効化を決定する。一方、データ容量削減機能によるデータの削除に伴う可用性の低下を回避する必要がある。したがって、コントローラノード１００は、データ保護機能の有効化を決定する。したがって、制御ポリシ決定プログラム２０１は、データ制御ポリシを「Ｄｅｄｕｐｅ＋ＥＣ」に決定する。
【０１３４】
また、制御ポリシ決定プログラム２０１は、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能の設定情報及び重複排除の設定情報を含むデータ制御ポリシ情報を生成する。制御ポリシ決定プログラム２０１は、データ制御ポリシ、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能の設定情報、及び重複排除の設定情報を含むデータ制御ポリシ情報を生成する。
【０１３５】
なお、可用性情報に、ストレージシステム層におけるデータ保護機能及びデータ容量削減機能に関する情報を設定してもよい。この場合、制御ポリシ決定プログラム２０１は、可用性情報に基づいて、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能の設定情報、及び重複排除の設定情報を生成する。以上がステップＳ４０１の処理の説明である。
【０１３６】
次に、コントローラノード１００は、参照リストを参照して計算機ノード１１０を選択する（ステップＳ４０２）。
【０１３７】
次に、コントローラノード１００は、選択された計算機ノード１１０と同じクラスタに所属する計算機ノード１１０のボリュームが生成されたストレージノード１２０が存在するか否かを判定する（ステップＳ４０３）。具体的には、以下のような処理が実行される。
【０１３８】
初期配置制御プログラム２０２は、クラスタ管理情報２１１を参照し、クラスタＩＤ４０１がターゲットクラスタの識別情報に一致するエントリが存在するか否かを判定する。初期配置制御プログラム２０２は、検索されたエントリに含まれる行を参照し、ストレージノードＩＤ４０４に選択されたストレージノード１２０の識別情報が設定された行が存在するか否かを判定する。
【０１３９】
前述の条件を満たすエントリが存在する場合、初期配置制御プログラム２０２は、選択された計算機ノード１１０と同じクラスタに所属する計算機ノード１１０のボリュームが生成されたストレージノード１２０が存在すると判定する。
【０１４０】
前述の条件を満たすエントリが存在しない場合、初期配置制御プログラム２０２は、メモリ１０２に、ターゲットクラスタの識別情報が設定された一時データが存在するか否かを判定する。
【０１４１】
前述の条件を満たす一時データが存在する場合、初期配置制御プログラム２０２は、選択された計算機ノード１１０と同じクラスタに所属する計算機ノード１１０のボリュームが生成されたストレージノード１２０が存在すると判定する。
【０１４２】
前述の条件を満たす一時データが存在しない場合、初期配置制御プログラム２０２は、選択された計算機ノード１１０と同じクラスタに所属する計算機ノード１１０のボリュームが生成されたストレージノード１２０が存在しないと判定する。以上がステップＳ４０３の処理の説明である。
【０１４３】
条件を満たすストレージノード１２０が存在しないと判定された場合、コントローラノード１００は、選択された計算機ノード１１０に割り当てるボリュームの配置先のストレージノード１２０を選択し（ステップＳ４０４）、その後、ステップＳ４０８に進む。ステップＳ４０４の処理は、ステップＳ２０３と同一の処理である。
【０１４４】
条件を満たすストレージノード１２０が存在すると判定された場合、コントローラノード１００は、当該ストレージノード１２０にボリュームを生成できるか否かを判定する（ステップＳ４０５）。
【０１４５】
具体的には、初期配置制御プログラム２０２は、ストレージノード１２０の空き容量、性能、及びストレージノード１２０間の負荷に基づいて、ストレージノード１２０にボリュームを生成できるか否かを判定する。
【０１４６】
条件を満たすストレージノード１２０にボリュームを生成できると判定された場合、コントローラノード１００は、当該ストレージノード１２０を選択し（ステップＳ４０６）、その後、ステップＳ４０８に進む。このとき、コントローラノード１００は、選択されたエントリに含まれるクラスタの識別情報及び計算機ノード１１０の識別情報と、選択されたストレージノード１２０の識別情報とで構成される一時データをメモリ１０２に格納する。
【０１４７】
条件を満たすストレージノード１２０にボリュームを生成できないと判定された場合、コントローラノード１００は、当該ストレージノード１２０を除くストレージノード１２０の中から、選択された計算機ノード１１０に割り当てるボリュームの配置先のストレージノード１２０を選択し（ステップＳ４０７）、その後、ステップＳ４０８に進む。このとき、コントローラノード１００は、選択されたエントリに含まれるクラスタの識別情報及び計算機ノード１１０の識別情報と、選択されたストレージノード１２０の識別情報とで構成される一時データをメモリ１０２に格納する。
【０１４８】
ステップＳ４０７では、（方法１）、（方法２）、及び（方法３）の他に、ボリュームの属性に基づいて、ストレージノード１２０を選択する方法も考えられる。例えば、ターゲット計算機ノード１１０の割り当てるボリュームの属性が「Ｓｅｃｏｎｄａｒｙ」である場合、初期配置制御プログラム２０２は、属性が「Ｐｒｉｍａｒｙ」であるボリュームが生成されたストレージノード１２０と物理的な距離又は通信応答が速いストレージノード１２０を選択する。
【０１４９】
ステップＳ４０４、ステップＳ４０６、又はステップＳ４０７の処理が実行された後、コントローラノード１００は、参照リストに登録された全ての計算機ノード１１０について処理が完了したか否かを判定する（ステップＳ４０８）。
【０１５０】
参照リストに登録された全ての計算機ノード１１０について処理が完了していないと判定された場合、コントローラノード１００はステップＳ４０２に戻り、同様の処理を実行する。
【０１５１】
参照リストに登録された全ての計算機ノード１１０について処理が完了したと判定された場合、決定されたストレージノード１２０にボリューム生成指示を送信する（ステップＳ４０９）。ステップＳ４０９の処理はステップＳ２０５の処理と同一である。なお、設定情報に含めるデータ及びパリティの数はユーザが入力したものでもよい。また、ミドルウェアのレプリケーション数から可用性を維持できるパリティ数が自動的に決定されてもよい。
【０１５２】
次に、コントローラノード１００は、ストレージノード１２０から生成完了通知を受信した場合、クラスタ管理情報２１１を更新する（ステップＳ４１０）。ステップＳ４１０の処理はステップＳ２０６と同一の処理である。
【０１５３】
コントローラノード１００は、生成指示を送信した全てのストレージノード１２０から生成完了通知を受信した場合、分散配置処理を終了する。
【０１５４】
図１１は、実施例１のストレージノード１２０が実行するボリューム生成処理の一例を説明するフローチャートである。
【０１５５】
ストレージノード１２０は、ボリューム生成指示を受信した場合、以下で説明する処理を開始する。
【０１５６】
ストレージノード１２０は、ボリューム生成指示に含まれるデータ制御ポリシ情報を参照し、データ制御ポリシが「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」であるか否かを判定する（ステップＳ５０１）。
【０１５７】
データ制御ポリシが「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」でないと判定された場合、ストレージノード１２０は、データ制御ポリシに応じたデータ制御機能の設定を行い、また、ボリュームを生成する（ステップＳ５０２）。その後、ストレージノード１２０はステップＳ５０４に進む。
【０１５８】
例えば、ボリューム生成プログラム３０１は、重複排除／圧縮プログラム３０４又はＥｒａｓｕｒｅ  Ｃｏｒｄｉｎｇプログラム３０５を実行するために必要な情報を設定する。
【０１５９】
データ制御ポリシが「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」であると判定された場合、ストレージノード１２０は、ボリュームを生成する（ステップＳ５０３）。その後、ストレージノード１２０はステップＳ５０４に進む。
【０１６０】
ステップＳ５０２又はステップＳ５０３の処理が実行された後、ストレージノード１２０は、ボリューム管理情報３１１を更新する（ステップＳ５０４）。
【０１６１】
具体的には、ボリューム生成プログラム３０１は、ボリューム管理情報３１１にエントリを生成し、生成されたエントリのボリュームＩＤ６０１に生成されたボリュームの識別情報を設定する。ボリューム生成プログラム３０１は、追加されたエントリの容量６０２に、ボリューム生成指示に含まれる容量を設定する。また、ボリューム生成プログラム３０１は、ボリューム生成指示に含まれるデータ制御ポリシ情報に基づいて、生成されたエントリのデータ制御ポリシ６０３、データ保護レベル６０４、及び重複排除パターン６０５に値を設定する。
【０１６２】
次に、ストレージノード１２０は、コントローラノード１００に生成完了通知を送信する（ステップＳ５０５）。その後、ストレージノード１２０はボリューム生成処理を終了する。
【０１６３】
次に、ストレージノード１２０が、計算機ノード１１０からＷｒｉｔｅ要求を受信した場合に実行する処理について説明する。
【０１６４】
図１２Ａ及び図１２Ｂは、実施例１のストレージノード１２０が実行するＷｒｉｔｅ処理の一例を説明するフローチャートである。
【０１６５】
ストレージノード１２０は、計算機ノード１１０からＷｒｉｔｅ要求を受信した場合、Ｗｒｉｔｅ処理を開始する。なお、Ｗｒｉｔｅ要求には、計算機ノード１１０のアドレス、計算機ノード１１０の識別情報、コンテナの識別情報、ミドルウェアの識別情報、ボリュームの識別情報、及び、書き込むデータ等が含まれる。
【０１６６】
ストレージノード１２０は、Ｗｒｉｔｅ要求に基づいて、ターゲットボリュームを特定する（ステップＳ６０１）。
【０１６７】
具体的には、Ｉ／Ｏ処理プログラム３０３は、Ｗｒｉｔｅ要求からボリュームの識別情報を取得する。
【０１６８】
次に、ストレージノード１２０は、データ制御ポリシが「Ｄｅｄｕｐｅ＋ＥＣ」であるか否かを判定する（ステップＳ６０２）。
【０１６９】
具体的には、Ｉ／Ｏ処理プログラム３０３は、ボリューム管理情報３１１を参照し、ボリュームＩＤ６０１にターゲットボリュームの識別情報が設定されるエントリを検索する。Ｉ／Ｏ処理プログラム３０３は、検索されたエントリのデータ制御ポリシ６０３に「Ｄｅｄｕｐｅ＋ＥＣ」が設定されているか否かを判定する。
【０１７０】
ターゲットボリュームのデータ制御ポリシが「Ｄｅｄｕｐｅ＋ＥＣ」であると判定された場合、ストレージノード１２０は、ターゲットボリュームの重複排除パターンが「インライン」であるか否かを判定する（ステップＳ６０３）。
【０１７１】
具体的には、Ｉ／Ｏ処理プログラム３０３は、ステップＳ６０２において検索されたエントリの重複排除パターン６０５が「インライン」であるか否かを判定する。
【０１７２】
ターゲットボリュームの重複排除パターンが「インライン」でないと判定された場合、ストレージノード１２０はステップＳ６０６に進む。
【０１７３】
ターゲットボリュームの重複排除パターンが「インライン」であると判定された場合、ストレージノード１２０は、ボリュームに重複データが存在するか否かを判定する（ステップＳ６０４）。
【０１７４】
具体的には、Ｉ／Ｏ処理プログラム３０３は、ボリュームに格納されるデータのハッシュ値を比較することによってボリュームに重複データが存在するか否かを判定する。なお、本発明は重複データの判定方法に限定されない。
【０１７５】
ボリュームに重複データが存在しないと判定された場合、ストレージノード１２０はステップＳ６０６に進む。
【０１７６】
ボリュームに重複データが存在すると判定された場合、ストレージノード１２０は、データ容量削減処理を実行する（ステップＳ６０５）。その後、ストレージノード１２０はステップＳ６０６に進む。
【０１７７】
具体的には、Ｉ／Ｏ処理プログラム３０３は、重複排除／圧縮プログラム３０４に実行指示を出力する。重複排除／圧縮プログラム３０４は、実行指示を受け付けた場合、重複排除処理及び圧縮処理の少なくともいずれかを実行する。重複排除処理及び圧縮処理は、公知の技術であるため詳細な説明は省略する。
【０１７８】
ステップＳ６０３の判定結果がＮｏ、ステップＳ６０４の判定結果がＮｏ、又は、ステップＳ６０５の処理が実行された後、ストレージノード１２０は、データ冗長化処理を実行する（ステップＳ６０６）。その後、ストレージノード１２０はステップＳ６０７に進む。
【０１７９】
具体的には、Ｉ／Ｏ処理プログラム３０３は、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇプログラム３０５にデータ保護レベル６０４に設定された値を含む実行指示を出力する。Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇプログラム３０５は、Ｉ／Ｏ処理プログラム３０３から入力された値に基づいてＥｒａｓｕｒｅ  Ｃｏｒｄｉｎｇを用いたデータ冗長化処理を実行する。Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇを用いたデータ冗長化処理は公知の技術であるため詳細な説明は省略する。
【０１８０】
ステップＳ６０２において、データ制御ポリシが「Ｄｅｄｕｐｅ＋ＥＣ」でないと判定された場合、ストレージノード１２０は、データ制御ポリシが「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」であるか否かが判定される（ステップＳ６０８）。
【０１８１】
具体的には、Ｉ／Ｏ処理プログラム３０３は、ステップＳ６０２において検索されたエントリのデータ制御ポリシ６０３に「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」が設定されているか否かを判定する。
【０１８２】
データ制御ポリシが「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」であると判定された場合、Ｉ／Ｏ処理プログラム３０３は、ターゲットボリュームにデータを書き込む（ステップＳ６０９）。その後、ストレージノード１２０はステップＳ６０７に進む。
【０１８３】
データ制御ポリシが「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」でないと判定された場合、Ｉ／Ｏ処理プログラム３０３は、データ冗長化処理を実行する（ステップＳ６１０）。その後、ストレージノード１２０はステップＳ６０７に進む。
【０１８４】
具体的には、Ｉ／Ｏ処理プログラム３０３は、データ制御ポリシが「ＥＣ」である場合、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇプログラム３０５に実行指示を出力し、データ制御ポリシが「Ｍｉｒｒｏｒｉｎｇ」である場合、Ｍｉｒｒｏｒｉｎｇプログラム３０６に実行指示を出力する。Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇプログラム３０５はＥｒａｓｕｒｅ  Ｃｏｒｄｉｎｇを用いたデータ冗長化処理を実行し、Ｍｉｒｒｏｒｉｎｇプログラム３０６はＭｉｒｒｏｒｉｎｇを用いたデータ冗長化処理を実行する。
【０１８５】
ステップＳ６０７では、ストレージノード１２０は、Ｗｒｉｔｅ要求を送信した計算機ノード１１０に対してＷｒｉｔｅ完了通知を送信し（ステップＳ６０７）、その後、Ｗｒｉｔｅ処理を終了する。
【０１８６】
なお、ターゲットボリュームの重複排除パターンが「ポストプロセス」である場合、ストレージノード１２０は、Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ処理が実行された後（ステップＳ６０６）、バックグラウンドで重複排除処理／圧縮処理を実行する。
【０１８７】
以上で説明したように、コントローラノード１００は、ボリュームの生成時に、モード情報及び可用性情報に基づいて、ミドルウェアに割り当てられたボリュームに対して適用するストレージノード１２０のデータ制御ポリシを決定し、ストレージノード１２０に通知する。ストレージノード１２０は、ボリューム及びデータ制御ポリシを対応づけて管理することによって、各ボリュームに適した処理を実行する。これによって、業務システムの可用性を維持し、かつ、記憶容量を有効に活用したシステムを実現できる。特に、データ制御ポリシとして「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」及び「Ｄｅｄｕｐｅ＋ＥＣ」を採用することに特徴がある。
【０１８８】
ミドルウェアのデータ保護機能が有効化され、かつ、サービスの性能が重視されている業務システムの場合、ストレージシステムにはデータ容量の削減及びサービスの性能の両立が要求される。この場合、ストレージノード１２０がデータの冗長化等を行わないように制御するために、コントローラノード１００は、データ制御ポリシを「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」に決定する。以上の制御によって、データ容量を抑えつつ、可用性を維持し、かつ、高い性能のサービスを提供できる業務システムを実現できる。
【０１８９】
ただし、レプリケーション機能によってデータが書き込まれたボリュームが同一のストレージノード１２０に配置された場合、ストレージノード１２０の障害等によって、サービスが停止する。そのため、コントローラノード１００は、データ制御ポリシが「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」であるボリューム群が異なるストレージノード１２０に配置されるように制御する。
【０１９０】
ミドルウェアのデータ保護機能が有効化され、かつ、容量が重視されている業務システムの場合、ストレージシステムにはデータ容量の削減及び可用性の維持の両立が要求される。この場合、重複するデータを削減し、かつデータの削除による可用性の低下を回避するように制御するために、コントローラノード１００は、データ制御ポリシを「Ｄｅｄｕｐｅ＋ＥＣ」に決定する。Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇ機能を用いてボリュームのデータを複数のストレージノード１２０に書き込むことによって、重複したデータが削除されてもサービスの長時間の停止を回避できる。以上の制御によって、データ容量を抑え、かつ可用性を維持した業務システムを実現できる。
【０１９１】
ただし、重複したデータを高速に検索及び削除を実現するために、コントローラノード１００は、データ制御ポリシが「Ｄｅｄｕｐｅ＋ＥＣ」であるボリューム群が同一のストレージノード１２０に配置されるように制御する。
【０１９２】
次に、ボリュームを用いた業務システムの運用時に実行される処理について説明する。
【０１９３】
図１３Ａ及び図１３Ｂは、実施例１のコントローラノード１００が実行するボリューム移動判定処理の一例を説明するフローチャートである。
【０１９４】
コントローラノード１００のボリューム移動制御プログラム２０３は、コントローラノード１００の起動後にボリューム移動判定処理を開始する。
【０１９５】
コントローラノード１００は、ストレージノード１２０の状態を監視する（ステップＳ７０１）。監視のタイミングは、周期的でもよいし、また、Ｉ／Ｏ要求の発生時でもよい。
【０１９６】
コントローラノード１００は、監視結果に基づいて、重複排除条件を満たすクラスタが存在するか否かを判定する（ステップＳ７０２）。
【０１９７】
具体的には、ボリューム移動制御プログラム２０３は、ＩＯ負荷４０７が全て「Ｃｏｌｄ」であるクラスタが存在する場合、又は、閾値より大きいサイズのデータのＷｒｉｔｅ要求が発行された場合、重複排除条件を満たすクラスタが存在すると判定する。なお、重複排除条件は一例であってこれに限定されない。
【０１９８】
重複排除条件を満たすクラスタが存在すると判定された場合、コントローラノード１００は、ターゲットボリューム群を特定する（ステップＳ７０３）。
【０１９９】
具体的には、ボリューム移動制御プログラム２０３は、クラスタ管理情報２１１を参照し、クラスタＩＤ４０１に、重複排除条件を満たすクラスタの識別情報が設定されたエントリを検索する。ボリューム移動制御プログラム２０３は、検索されたエントリに含まれる各行のボリュームＩＤ４０５を取得し、ボリュームの識別情報から構成されるボリュームリストを生成し、ワークエリアに格納する。
【０２００】
次に、コントローラノード１００は、ターゲットボリューム群の移動先のストレージノード１２０を決定する（ステップＳ７０４）。
【０２０１】
具体的には、ボリューム移動制御プログラム２０３は、ストレージノード１２０の空き容量及び負荷に基づいて、ボリュームの配置先となるストレージノード１２０が少なくなるように、配置先のストレージノード１２０を決定する。
【０２０２】
例えば、「Ｐｒｉｍａｒｙ」及び「Ｓｅｃｏｎｄａｒｙ」の属性があるミドルウェアの場合、ボリューム移動制御プログラム２０３は、「Ｐｒｉｍａｒｙ」のミドルウェアが稼働する計算機ノード１１０と物理的な距離又は通信応答が速いストレージノード１２０をボリュームの移動先として選択する方法が考えられる。なお、前述した決定方法は一例であってこれに限定されない。
【０２０３】
なお、ボリューム移動制御プログラム２０３は、ボリューム単位で移動先のストレージノード１２０を決定してもよいし、ＬＵ単位又はページ群単位で移動先のストレージノード１２０を決定してもよい。
【０２０４】
次に、コントローラノード１００は、ターゲットボリューム群から一つのターゲットボリュームを選択し（ステップＳ７０５）、当該ターゲットボリュームの移動元のストレージノード１２０に、計算機ノード１１０の識別情報、ボリュームの識別情報、及び移動先のストレージノード１２０の識別情報を含む移動指示を送信する（ステップＳ７０６）。
【０２０５】
ターゲットボリュームの移動元のストレージノード１２０のボリューム移動プログラム３０２は、移動指示にしたがって、ボリュームの移動処理を実行する。ボリュームの移動処理では、データのコピー、移動元のボリュームの削除、ボリューム管理情報３１１の更新等が行われる。なお、ボリュームの移動処理は公知の技術であるため詳細な説明は省略する。なお、ボリュームの移動に伴って、移動元のストレージノード１２０及び移動先のストレージノード１２０のボリューム管理情報３１１が更新される。
【０２０６】
移動元のストレージノード１２０のボリューム移動プログラム３０２は、ボリュームの移動処理が終了した後、ストレージノード１２０の識別情報、計算機ノード１１０の識別情報、及びボリュームの識別情報を含む移動完了通知をコントローラノード１００に送信する。
【０２０７】
次に、コントローラノード１００は、ボリュームリストに登録された全てのボリュームの移動が完了したか否かを判定する（ステップＳ７０７）。
【０２０８】
ボリュームリストに登録された全てのボリュームの移動が完了していないと判定された場合、コントローラノード１００は、ステップＳ７０５に戻り、同様の処理を実行する。
【０２０９】
ボリュームリストに登録された全てのボリュームの移動が完了したと判定された場合、コントローラノード１００は、クラスタ管理情報２１１を更新する（ステップＳ７０８）。その後、コントローラノード１００は、ステップＳ７０１に戻り、同様の処理を実行する。
【０２１０】
具体的には、ボリューム移動制御プログラム２０３は、ステップＳ７０２において検索されたエントリに含まれる各行のストレージノードＩＤ４０４及びボリュームＩＤ４０５に、移動完了通知に含まれる値を設定する。
【０２１１】
ステップＳ７０２において、重複排除条件を満たすクラスタが存在しないと判定された場合、コントローラノード１００は、負荷条件を満たすストレージノード１２０が存在するか否かを判定する（ステップＳ７０９）。
【０２１２】
具体的には、ボリューム移動制御プログラム２０３は、記憶領域の使用量又はＩ／Ｏ負荷が閾値より大きいストレージノード１２０が存在するか否かを判定する。なお、負荷条件は一例であってこれに限定されない。
【０２１３】
負荷条件を満たすストレージノード１２０が存在しないと判定された場合、コントローラノード１００は、ステップＳ７０１に戻り、同様の処理を実行する。
【０２１４】
負荷条件を満たすストレージノード１２０が存在すると判定された場合、コントローラノード１００は、ターゲットストレージノード１２０を特定する（ステップＳ７１０）。
【０２１５】
具体的には、ボリューム移動制御プログラム２０３は、負荷条件を満たすストレージノード１２０をターゲットストレージノード１２０として特定する。このとき、ボリューム移動制御プログラム２０３は、ターゲットストレージノード１２０を除くストレージノード１２０の識別情報から構成されるストレージノードリストを生成し、ワークエリアに格納する。
【０２１６】
負荷条件を満たすストレージノード１２０が複数存在する場合、ボリューム移動制御プログラム２０３は、負荷が最も高いストレージノード１２０をターゲットストレージノード１２０として特定する。なお、ボリューム移動制御プログラム２０３は、負荷が大きい順に所定の数のストレージノード１２０を、ターゲットストレージノード１２０として特定してもよい。
【０２１７】
次に、コントローラノード１００は、ターゲットストレージノード１２０に配置されたボリュームの中からターゲットボリュームを選択し（ステップＳ７１１）、ターゲットボリュームに対応づけられるデータ制御ポリシを判定する（ステップＳ７１２）。
【０２１８】
具体的には、ボリューム移動制御プログラム２０３は、クラスタ管理情報２１１を参照し、ストレージノードＩＤ４０４にターゲットストレージノード１２０の識別情報が設定された行を検索する。ボリューム移動制御プログラム２０３は、検索された行の容量４０６を参照し、容量４０６の値が最も大きい行を選択する。ボリューム移動制御プログラム２０３は、選択された行のボリュームＩＤ４０５に対応するボリュームをターゲットボリュームとして選択する。
【０２１９】
なお、容量４０６の値が最も大きい行が複数存在する場合、ボリューム移動制御プログラム２０３は、ラウンドロビン方式でボリュームを選択してもよいし、ストレージノード１２０の負荷に基づいてボリュームを選択してもよい。
【０２２０】
ターゲットボリュームに対応づけられるデータ制御ポリシが「Ｎｏ  Ｐｒｏｔｅｃｔｉｏｎ」である場合、コントローラノード１００は第１の移動判定処理を実行する（ステップＳ７１３）。コントローラノード１００は、第１の移動判定処理が終了した後、ステップＳ７１６に進む。第１の移動判定処理の詳細は図１４を用いて説明する。
【０２２１】
ターゲットボリュームに対応づけられるデータ制御ポリシが「Ｄｅｄｕｐｅ＋ＥＣ」である場合、コントローラノード１００は第２の移動判定処理を実行する（ステップＳ７１４）。コントローラノード１００は、第２の移動判定処理が終了した後、ステップＳ７１６に進む。第２の移動判定処理の詳細は図１５を用いて説明する。
【０２２２】
ターゲットボリュームに対応づけられるデータ制御ポリシが「ＥＣ」及び「Ｍｉｒｒｏｒｉｎｇ」のいずれかである場合、コントローラノード１００は第３の移動判定処理を実行する（ステップＳ７１５）。コントローラノード１００は、第３の移動判定処理が終了した後、ステップＳ７１６に進む。第３の移動判定処理の詳細は図１６を用いて説明する。
【０２２３】
ステップＳ７１６では、コントローラノード１００は、ターゲットボリュームを移動できるか否かを判定する（ステップＳ７１６）。
【０２２４】
具体的には、ボリューム移動制御プログラム２０３は、各移動判定処理の処理結果に基づいてターゲットボリュームを移動できるか否かを判定する。移動判定処理を実行することによって「移動可」を示す処理結果が出力された場合、ボリューム移動制御プログラム２０３は、ターゲットボリュームを移動できると判定する。
【０２２５】
ターゲットボリュームの移動できないと判定された場合、コントローラノード１００は、ステップＳ７１１に戻り、同様の処理を実行する。
【０２２６】
ターゲットボリュームを移動できると判定された場合、コントローラノード１００は、ターゲットボリュームの移動元及び移動先のストレージノード１２０に、計算機ノード１１０の識別情報及びボリュームの識別情報を含む移動指示を送信する（ステップＳ７１７）。ステップＳ７１７の処理はステップＳ７０６と同一の処理である。
【０２２７】
次に、コントローラノード１００は、クラスタ管理情報２１１を更新する（ステップＳ７１８）。その後、コントローラノード１００は、ステップＳ７０１に戻り、同様の処理を実行する。ステップＳ７１８の処理はステップＳ７０８の処理と同一である。
【０２２８】
図１４は、実施例１のコントローラノード１００が実行する第１の移動判定処理の一例を説明するフローチャートである。
【０２２９】
コントローラノード１００は、ストレージノードリストを参照し、選択されていないストレージノード１２０が存在するか否かを判定する（ステップＳ８０１）。
【０２３０】
選択されていないストレージノード１２０が存在しないと判定された場合、コントローラノード１００は、ステップＳ８０６に進む。
【０２３１】
選択されていないストレージノード１２０が存在すると判定された場合、コントローラノード１００は、最も負荷が低いストレージノード１２０を候補ストレージノード１２０として選択する（ステップＳ８０２）。
【０２３２】
具体的には、ボリューム移動制御プログラム２０３は、ストレージノード１２０のリストを参照し、選択されていないストレージノード１２０を特定する。ボリューム移動制御プログラム２０３は、特定されたストレージノード１２０の監視結果に基づいて、負荷が最も低いストレージノード１２０を選択する。
【０２３３】
次に、コントローラノード１００は、候補ストレージノード１２０に、ターゲットボリュームが割り当てられた計算機ノード１１０と同じクラスタに所属する計算機ノード１１０のボリュームが存在するか否かを判定する（ステップＳ８０３）。具体的には、以下のような処理が実行される。
【０２３４】
ボリューム移動制御プログラム２０３は、クラスタ管理情報２１１を参照し、ストレージノードＩＤ４０４及びボリュームＩＤ４０５にターゲットストレージノード１２０及びターゲットボリュームの識別情報が設定された行を検索する。
【０２３５】
ボリューム移動制御プログラム２０３は、検索された行を含むエントリのストレージノードＩＤ４０４を参照し、候補ストレージノード１２０の識別情報が設定された行が存在するか否かを判定する。前述した条件を満たす行が存在する場合、ボリューム移動制御プログラム２０３は、候補ストレージノード１２０に、ターゲットボリュームが割り当てられた計算機ノード１１０と同じクラスタに所属する計算機ノード１１０のボリュームが存在すると判定する。
【０２３６】
なお、ステップＳ８０３が実行されるのは、ステップＳ３０４と同一の理由である。以上がステップＳ８０３の処理の説明である。
【０２３７】
ステップＳ８０３の条件を満たすボリュームが存在すると判定された場合、コントローラノード１００は、ストレージノード１２０のリストから選択されたストレージノード１２０を削除した後、ステップＳ８０１に戻り、同様の処理を実行する。
【０２３８】
ステップＳ８０３の条件を満たすボリュームが存在しないと判定された場合、コントローラノード１００は、候補ストレージノード１２０のターゲットボリュームを移動できるか否かを判定する（ステップＳ８０４）。
【０２３９】
具体的には、ボリューム移動制御プログラム２０３は、候補ストレージノード１２０にターゲットボリュームを移動させた後の空き容量又はＩ／Ｏ負荷が閾値より小さい場合、候補ストレージノード１２０のターゲットボリュームを移動できると判定する。なお、前述の判定方法は一例であって、これに限定されない。
【０２４０】
候補ストレージノード１２０のターゲットボリュームを移動できると判定された場合、コントローラノード１００は、ターゲットストレージノード１２０の識別情報、ターゲットボリュームの識別情報、候補ストレージノード１２０の識別情報、及び「移動可」を含む処理結果を出力し（ステップＳ８０５）、第１の移動判定処理を終了する。
【０２４１】
ステップＳ８０１又はステップＳ８０４の判定結果がＮｏである場合、コントローラノード１００は、「移動不可」を含む処理結果を出力し（ステップＳ８０６）、第１の移動判定処理を終了する。
【０２４２】
図１５は、実施例１のコントローラノード１００が実行する第２の移動判定処理の一例を説明するフローチャートである。
【０２４３】
コントローラノード１００は、ターゲットボリュームが割り当てられた計算機ノード１１０と同じクラスタに所属する計算機ノード１１０のボリューム群を特定する（ステップＳ９０１）。
【０２４４】
具体的には、ボリューム移動制御プログラム２０３は、クラスタ管理情報２１１を参照し、ストレージノードＩＤ４０４及びボリュームＩＤ４０５にターゲットストレージノード１２０及びターゲットボリュームの識別情報が設定された行を検索する。ボリューム移動制御プログラム２０３は、検索された行を含むエントリのストレージノードＩＤ４０４及びボリュームＩＤ４０５の組を取得する。
【０２４５】
第２の移動判定処理では、ボリューム群単位でボリュームの移動が行われる。なるべく同一のストレージノード１２０にボリュームを集約することによって、効率的に容量を削減するためである。
【０２４６】
次に、コントローラノード１００は、最も負荷が低いストレージノード１２０を候補ストレージノード１２０として選択する（ステップＳ９０２）。ステップＳ９０２の処理はステップＳ８０２の処理と同一である。
【０２４７】
次に、コントローラノード１００は、ボリューム群を移動できるか否かを判定する（ステップＳ９０３）。
【０２４８】
具体的には、ボリューム移動制御プログラム２０３は、候補ストレージノード１２０にボリューム群を移動させた後の空き容量又はＩ／Ｏ負荷が閾値より小さいか否かを判定する。候補ストレージノード１２０にボリューム群を移動させた後の空き容量又はＩ／Ｏ負荷が閾値より小さい場合、ボリューム移動制御プログラム２０３は、ボリューム群を移動できると判定する。なお、前述の判定方法は一例であって、これに限定されない。
【０２４９】
ボリューム群を移動できると判定された場合、コントローラノード１００は、ターゲットストレージノード１２０の識別情報、ターゲットボリュームの識別情報、候補ストレージノード１２０の識別情報、及び「移動可」を含む処理結果を出力し（ステップＳ９０４）、第２の移動判定処理を終了する。
【０２５０】
ボリューム群を移動できないと判定された場合、コントローラノード１００は、コントローラノード１００は、「移動不可」を含む処理結果を出力し（ステップＳ９０５）、第２の移動判定処理を終了する。
【０２５１】
図１６は、実施例１のコントローラノード１００が実行する第３の移動判定処理の一例を説明するフローチャートである。
【０２５２】
コントローラノード１００は、最も負荷が低いストレージノード１２０を候補ストレージノード１２０として選択する（ステップＳ１００１）。ステップＳ１００１の処理はステップＳ８０２の処理と同一である。
【０２５３】
次に、コントローラノード１００は、候補ストレージノード１２０のターゲットボリュームを移動できるか否かを判定する（ステップＳ１００２）。ステップＳ１００２の処理はステップＳ８０４の処理と同一である。
【０２５４】
候補ストレージノード１２０のターゲットボリュームを移動できると判定された場合、コントローラノード１００は、ターゲットストレージノード１２０の識別情報、ターゲットボリュームの識別情報、候補ストレージノード１２０の識別情報、及び「移動可」を含む処理結果を出力し（ステップＳ１００３）、第３の移動判定処理を終了する。
【０２５５】
候補ストレージノード１２０のターゲットボリュームを移動できると判定された場合、コントローラノード１００は、コントローラノード１００は、「移動不可」を含む処理結果を出力し（ステップＳ１００４）、第３の移動判定処理を終了する。
【０２５６】
以上で説明したように、コントローラノード１００は、ボリュームに対応づけられたデータ制御ポリシに基づいて、ボリュームを配置するストレージノード１２０を決定する。これによって、業務システムの可用性を維持し、かつ、記憶容量を有効に活用したシステムを実現できる。
【０２５７】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【０２５８】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【０２５９】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｐｙｔｈｏｎ、Ｊａｖａ（登録商標）等の広範囲のプログラム又はスクリプト言語で実装できる。
【０２６０】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【０２６１】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【０２６２】
１００  コントローラノード
１１０  計算機ノード
１２０  ストレージノード
１５０  ネットワーク
１０１、１１１、１２１  ＣＰＵ
１０２、１１２、１２２  メモリ
１０３、１１３、１２３  記憶装置
１０４、１１４、１２４  ネットワークインタフェース
２０１  制御ポリシ決定プログラム
２０２  初期配置制御プログラム
２０３  ボリューム移動制御プログラム
２１１  クラスタ管理情報
２１２  ミドルウェア管理情報
３０１  ボリューム生成プログラム
３０２  ボリューム移動プログラム
３０３  Ｉ／Ｏ処理プログラム
３０４  重複排除／圧縮プログラム
３０５  Ｅｒａｓｕｒｅ  Ｃｏｒｄｉｎｇプログラム
３０６  Ｍｉｒｒｏｒｉｎｇプログラム
３１１  ボリューム管理情報
【図１】
2020154587.tif 000003
【図２】
2020154587.tif 000004
【図３】
2020154587.tif 000005
【図４】
2020154587.tif 000006
【図５】
2020154587.tif 000007
【図６】
2020154587.tif 000008
【図７】
2020154587.tif 000009
【図８】
2020154587.tif 000010
【図９】
2020154587.tif 000011
【図１０】
2020154587.tif 000012
【図１１】
2020154587.tif 000013
【図１２Ａ】
2020154587.tif 000014
【図１２Ｂ】
2020154587.tif 000015
【図１３Ａ】
2020154587.tif 000016
【図１３Ｂ】
2020154587.tif 000017
【図１４】
2020154587.tif 000018
【図１５】
2020154587.tif 000019
【図１６】
2020154587.tif 000020