(57)【要約】【課題】スライスの割当関係に関する情報の転送量を低減させる。【解決手段】ディスクノード２のスライス数計数手段２ｃから制御ノード１へスライス数情報５が送信される。論理ディスク１ｆの作成処理が制御ノード１で行われると、ディスクノード選択手段１ｃにより、フリーのスライスを有するディスクノードの中から割当対象となるスライスの提供元となる提供元ディスクノードが選択される。選択されたディスクノード２に対してスライス識別子が要求され、ディスクノード２のスライス識別子送信手段２ｄによりスライス識別子６が制御ノード１に送信される。スライス割当手段１ｄにより、スライス識別子６で示されるスライスの論理ディスク１ｆの記憶領域への割当が決定される。そして、スライス割当手段１ｄによって、決定した割当関係７がディスクノード２に通知され、割当情報更新手段２ｅにより、スライス割当情報が更新される。【選択図】図１
2010129024.tif 000002
【特許請求の範囲】
【請求項１】
仮想的に定義された論理ディスクの記憶領域への、複数のディスクノードそれぞれに接続されたストレージ装置の記憶領域の割当処理をコンピュータに実行させるデータ分散制御プログラムであって、
前記コンピュータを、
前記ストレージ装置の記憶領域をスライス単位に分割し、前記論理ディスクの記憶領域への前記スライスの割当関係を示すスライス割当情報を記憶する複数の前記ディスクノードそれぞれから、前記論理ディスクの記憶領域に割り当てられていないフリーの前記スライスの数を示すスライス数情報を収集し、スライス数記憶手段に格納するスライス数収集手段、
前記論理ディスクの記憶領域への前記スライスの割当を伴う処理が発生すると、前記スライス数記憶手段を参照し、フリーの前記スライスを有する前記ディスクノードの中から割当対象となる前記スライスの提供元となる提供元ディスクノードを選択し、選択された前記提供元ディスクノードに対して、フリーの前記スライスを識別するためのスライス識別子を要求するディスクノード選択手段、
前記提供元ディスクノードから前記スライス識別子を受け取り、受け取った前記スライス識別子で示される前記スライスの、前記論理ディスクの記憶領域への割当を決定し、決定した割当関係を前記ディスクノードに通知するスライス割当手段、
として機能させるデータ分散制御プログラム。
【請求項２】
前記ディスクノード選択手段は、前記論理ディスクの記憶領域へ割り当てる前記スライスが複数必要な場合、割り当てるべき前記スライスごとに前記提供元ディスクノードを選択し、選択された前記提供元ディスクノードに対して、前記提供元ディスクノードが提供すべきフリーの前記スライスの数を指定して前記スライス識別子を要求することを特徴とする請求項１記載のデータ分散制御プログラム。
【請求項３】
ストレージ装置の記憶領域をスライス単位に分割して管理する処理をコンピュータに実行させるストレージ管理プログラムであって、
前記コンピュータを、
仮想的に定義された論理ディスクの記憶領域への前記スライスの割当関係を示すスライス割当情報を記憶するスライス割当情報記憶手段、
前記スライス割当情報記憶手段を参照し、前記論理ディスクの記憶領域に割り当てられていないフリーの前記スライスの数を計数し、前記論理ディスクの記憶領域への前記スライスの割当処理を行う制御ノードに対して、フリーの前記スライスの数を示すスライス数情報を送信するスライス数計数手段、
前記制御ノードからの要求に応じて、フリーの前記スライスを識別するためのスライス識別子を前記制御ノードに送信するスライス識別子送信手段、
前記論理ディスクの記憶領域への前記スライスの割当関係が前記制御ノードから通知されると、通知された前記割当関係に基づいて前記スライス割当情報を更新する割当情報更新手段、
として機能させるストレージ管理プログラム。
【請求項４】
前記コンピュータを、さらに、
前記制御ノードから前記論理ディスクを指定したスライス割当情報送信要求を受け取ると、前記スライス割当情報記憶手段から前記論理ディスクの記憶領域に割り当てられた前記スライスを検索し、該当する前記スライスのスライス識別子を前記制御ノードに送信する検索手段として機能させることを特徴とする請求項３記載のストレージ管理プログラム。
【請求項５】
前記スライス割当情報記憶手段内の前記スライス割当情報は、前記論理ディスクの記憶領域に割り当てられた前記スライスのミラーリングが行われる場合、ミラーリング相手のディスクノードを示す情報を有しており、
前記割当情報更新手段は、前記制御ノードから前記ディスクノードの故障通知を受け取ると、前記ディスクノードをミラーリングの相手としている前記スライスに対して、ミラーリング環境が損なわれたことを示す縮退フラグを設定することを特徴とする請求項３記載のストレージ管理プログラム。
【請求項６】
前記コンピュータを、さらに、
前記制御ノードから前記ミラーリング環境が損なわれたスライスの照会要求を受け取ると、前記スライス割当情報記憶手段から前記縮退フラグが設定されている前記スライスを検索し、該当する前記スライスのスライス識別子を前記制御ノードに送信する検索手段として機能させることを特徴とする請求項５記載のストレージ管理プログラム。
【請求項７】
仮想的に定義された論理ディスクの記憶領域への、複数のディスクノードそれぞれに接続されたストレージ装置の記憶領域の割当処理を実行する制御ノードであって、
前記ストレージ装置の記憶領域をスライス単位に分割し、前記論理ディスクの記憶領域への前記スライスの割当関係を示すスライス割当情報を記憶する複数の前記ディスクノードそれぞれから、前記論理ディスクの記憶領域に割り当てられていないフリーの前記スライスの数を示すスライス数情報を収集し、スライス数記憶手段に格納するスライス数収集手段と、
前記論理ディスクの記憶領域への前記スライスの割当を伴う処理が発生すると、前記スライス数記憶手段を参照し、フリーの前記スライスを有する前記ディスクノードの中から割当対象となる前記スライスの提供元となる提供元ディスクノードを選択し、選択された前記提供元ディスクノードに対して、フリーの前記スライスを識別するためのスライス識別子を要求するディスクノード選択手段と、
前記提供元ディスクノードから前記スライス識別子を受け取り、受け取った前記スライス識別子で示される前記スライスの、前記論理ディスクの記憶領域への割当を決定し、決定した割当関係を前記ディスクノードに通知するスライス割当手段と、
を有する制御ノード。
【請求項８】
ストレージ装置の記憶領域をスライス単位に分割して管理するディスクノードであって、
仮想的に定義された論理ディスクの記憶領域への前記スライスの割当関係を示すスライス割当情報を記憶するスライス割当情報記憶手段と、
前記スライス割当情報記憶手段を参照し、前記論理ディスクの記憶領域に割り当てられていないフリーの前記スライスの数を計数し、前記論理ディスクの記憶領域への前記スライスの割当処理を行う制御ノードに対して、フリーの前記スライスの数を示すスライス数情報を送信するスライス数計数手段と、
前記制御ノードからの要求に応じて、フリーの前記スライスを識別するためのスライス識別子を前記制御ノードに送信するスライス識別子送信手段と、
前記論理ディスクの記憶領域への前記スライスの割当関係が前記制御ノードから通知されると、通知された前記割当関係に基づいて前記スライス割当情報を更新する割当情報更新手段と、
を有するディスクノード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ分散制御プログラム、ストレージ管理プログラム、制御ノード、およびディスクノードに関し、特にマルチノードストレージシステムを構成するデータ分散制御プログラム、ストレージ管理プログラム、制御ノード、およびディスクノードに関する。
【背景技術】
【０００２】
コンピュータシステムでは、多数のユーザが使用する大量のデータを管理する必要がある。このような大量のデータを管理するためのシステムの１つとして、マルチノードストレージシステムがある。
【０００３】
マルチノードストレージシステムは、複数のノード（コンピュータ）を用いて構築されるストレージシステムである。例えば、マルチノードストレージシステムには、アクセスノード、制御ノード、および複数のディスクノードが含まれる。アクセスノードは、ディスクノードに格納されたデータへのアクセス環境をユーザに提供する。ユーザは、アクセスノードに対してデータへのアクセス要求を出すことで、ディスクノードに格納されたデータにアクセスすることができる。制御ノードは、マルチノードストレージシステムで提供されるデータの保守管理を行う。
【０００４】
例えば制御ノードは、仮想的に定義した論理ディスクと、ディスクノードが管理するストレージ装置内の記憶領域との対応関係を管理する。このとき、ディスクノードは、ストレージ装置を有しており、ストレージ装置の物理的な記憶領域を、一定の大きさで区切ったスライスと呼ぶ領域単位で管理する。そして制御ノードは、論理ディスクをセグメント単位に分割し、セグメントに対して、異なるディスクノードに属する複数のスライスを割り当てる。論理ディスクを構成する複数のセグメントそれぞれに対して互いに異なるディスクノードに属するスライスを割り当てることで、データを分散させることができる。
【０００５】
割り当てられるスライスは、アクセスノードが直接リード／ライトするプライマリスライスと、プライマリスライスへの書き込みをミラーリングするためのセカンダリスライスライスとに分けられる。アクセスノードは、セグメントを指定したリード／ライトのアクセス要求に基づき、該当するセグメントに割り当てられたプライマリスライスにアクセスする。アクセス要求がデータのライト要求であれば、プライマリスライスを管理するディスクノードが書き込まれたデータのコピーをセカンダリスライスに転送する。これにより、ミラーリングによるデータの冗長性が確保される。
【０００６】
このようなマルチノードストレージシステムにおいて、論理ディスクのセグメントに対して割り当てるべきスライスの選択は制御ノードで行われる。そのため、制御ノードは、各ディスクノードストレージ装置内のスライスの状態を認識している必要がある。スライスの状態は、大別するとセグメントに割り当てられている状態と、割り当てられていない状態とに分けられる。セグメントに割り当てられていないスライスを、フリースライスと呼ぶ。
【０００７】
スライスの状態に関する情報は、メタデータとしてディスクノードが保持している。制御ノードは、ディスクノードからメタデータを収集し、システム全体のスライスの状態を認識する。そして、制御ノードは、セグメントへのスライスの割り当て、および割り当て解除を行うと、対象となるスライスを管理するディスクノードへ更新されたスライスを通知する。このように、制御ノードでスライスの状態を管理するためには、制御ノードとディスクノードとの間でメタデータの送受信が頻繁に行われることとなる。
【特許文献１】国際公開第ＷＯ２００４／１０４８４５号パンフレット
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、従来のマルチノードストレージシステムでは、システムの規模が大きくなるとそれに伴い制御ノードが取り扱うメタデータが大容量化し、メタデータ収集に時間がかかってしまうという問題がある。特にマルチノードストレージシステムの起動時には、制御ノードがすべてのディスクノードからメタデータを収集する必要がある。そのため、メタデータの量の増大によりマルチノードストレージシステムの起動時間が長期化していた。
【０００９】
また信頼性向上のため、制御ノードをクラスタ化する場合がある。この場合、運用中の制御ノードに障害が発生すると、クラスタ内で引き継ぎ（フェイルオーバ）が行われる。制御ノードの機能を引き継ぐ他のノードは、すべてのディスクノードからメタデータを収集してすべてのスライスの状態を把握した後、制御ノードとしての運用を開始する。そのためメタデータの量が膨大になると、フェイルオーバの時間が長くなりサービス停止期間も長くなってしまう。
【００１０】
本発明はこのような点に鑑みてなされたものであり、スライスの割当関係に関する情報の転送量を低減させることができるデータ分散制御プログラム、ストレージ管理プログラム、制御ノード、およびディスクノードを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、仮想的に定義された論理ディスクの記憶領域への、複数のディスクノードそれぞれに接続されたストレージ装置の記憶領域の割当処理を実行する制御ノードが提供される。この制御ノードは、スライス数収集手段、ディスクノード選択手段、およびスライス割当手段を有する。スライス数収集手段は、ストレージ装置の記憶領域をスライス単位に分割し、論理ディスクの記憶領域へのスライスの割当関係を示すスライス割当情報を記憶する複数のディスクノードそれぞれから、論理ディスクの記憶領域に割り当てられていないフリーのスライスの数を示すスライス数情報を収集し、スライス数記憶手段に格納する。ディスクノード選択手段は、論理ディスクの記憶領域へのスライスの割当を伴う処理が発生すると、スライス数記憶手段を参照し、フリーのスライスを有するディスクノードの中から割当対象となるスライスの提供元となる提供元ディスクノードを選択し、選択された提供元ディスクノードに対して、フリーのスライスを識別するためのスライス識別子を要求する。スライス割当手段は、提供元ディスクノードからスライス識別子を受け取り、受け取ったスライス識別子で示されるスライスの、論理ディスクの記憶領域への割当を決定し、決定した割当関係をディスクノードに通知する。
【００１２】
また、上記課題を解決するために、ストレージ装置の記憶領域をスライス単位に分割して管理するディスクノードが提供される。このディスクノードは、スライス割当情報記憶手段、スライス数計数手段、スライス識別子送信手段、および割当情報更新手段を有する。スライス割当情報記憶手段は、仮想的に定義された論理ディスクの記憶領域へのスライスの割当関係を示すスライス割当情報を記憶する。スライス数計数手段は、スライス割当情報記憶手段を参照し、論理ディスクの記憶領域に割り当てられていないフリーのスライスの数を計数し、論理ディスクの記憶領域へのスライスの割当処理を行う制御ノードに対して、フリーのスライスの数を示すスライス数情報を送信する。スライス識別子送信手段は、制御ノードからの要求に応じて、フリーのスライスを識別するためのスライス識別子を制御ノードに送信する。割当情報更新手段は、論理ディスクの記憶領域へのスライスの割当関係が制御ノードから通知されると、通知された割当関係に基づいてスライス割当情報を更新する。
【発明の効果】
【００１３】
上記制御ノードおよびディスクノードでは、スライス割当情報が分散管理され、スライスの状態に関する情報の転送量が低減する。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施の形態を、図面を参照して説明する。
図１は、実施の形態の概要を示す図である。マルチノードストレージシステムは、制御ノード１と複数のディスクノード２，３，４とで構成される。
【００１５】
制御ノード１は、仮想的に定義された論理ディスク１ｅの記憶領域への、複数のディスクノード２，３，４それぞれに接続されたストレージ装置２ａ，３ａ，４ａの記憶領域の割当処理を実行する。そのために制御ノード１は、スライス数記憶手段１ａ、スライス数収集手段１ｂ、ディスクノード選択手段１ｃ、およびスライス割当手段１ｄを有する。
【００１６】
スライス数記憶手段１ａは、ディスクノード２，３，４それぞれが有するフリースライスの数を記憶する。フリースライスとは、論理ディスク１ｅに割り当てられていないスライスである。
【００１７】
スライス数収集手段１ｂは、複数のディスクノード２，３，４それぞれから、論理ディスク１ｅの記憶領域に割り当てられていないフリーのスライスの数を示すスライス数情報５を収集する。そして、スライス数収集手段１ｂは、収集したスライス数情報５をスライス数記憶手段１ａに格納する。
【００１８】
ディスクノード選択手段１ｃは、論理ディスク１ｆの記憶領域へのスライスの割当を伴う処理が発生すると、スライス数記憶手段１ａを参照し、フリーのスライスを有するディスクノードの中から割当対象となるスライスの提供元となる提供元ディスクノードを選択する。そして、ディスクノード選択手段１ｃは、選択された提供元ディスクノードに対して、フリーのスライスを識別するためのスライス識別子６を要求する。
【００１９】
スライス割当手段１ｄは、提供元ディスクノードからスライス識別子６を受け取り、受け取ったスライス識別子６で示されるスライスの論理ディスク１ｆの記憶領域への割当を決定する。そして、スライス割当手段１ｄは、決定した割当関係７をディスクノード２，３，４に通知する。
【００２０】
ディスクノード２，３，４は、ストレージ装置２ａ，３ａ，４ａの記憶領域をスライス単位に分割して管理する。ディスクノード２は、スライス割当情報記憶手段２ｂ、スライス数計数手段２ｃ、スライス識別子送信手段２ｄ、および割当情報更新手段２ｅを有する。
【００２１】
スライス割当情報記憶手段２ｂは、仮想的に定義された論理ディスク１ｅの記憶領域へのスライスの割当関係を示すスライス割当情報を記憶する。
スライス数計数手段２ｃは、スライス割当情報記憶手段２ｂを参照し、論理ディスク１ｅの記憶領域に割り当てられていないフリーのスライスの数を計数する。そして、スライス数計数手段２ｃは、制御ノード１に対して、フリーのスライスの数を示すスライス数情報５を送信する。
【００２２】
スライス識別子送信手段２ｄは、制御ノード１からの要求に応じて、フリーのスライスを識別するためのスライス識別子６を制御ノード１に送信する。
割当情報更新手段２ｅは、論理ディスク１ｆの記憶領域へのスライスの割当関係７が制御ノード１から通知されると、通知された割当関係７に基づいてスライス割当情報を更新する。
【００２３】
他のディスクノード３，４もディスクノード２と同様の機能を有する。
このようなシステムにおいて、例えば制御ノード１の起動時に、スライス数収集手段１ｂがフリーのスライス数の収集を行う。スライス数の収集は、スライス数収集手段１ｂから各ディスクノード２，３，４に対してスライス数情報要求を送信することで行うことができる。この場合、ディスクノード２のスライス数計数手段２ｃは、スライス数情報要求に応じてフリーのスライスの数を計数する。そして、スライス数計数手段２ｃから制御ノード１へスライス数情報５が送信される。同様に、ディスクノード３，４から制御ノード１へもスライス数情報が送信される。スライス数収集手段１ｂは、ディスクノード２，３，４から送られたスライス数情報をスライス数記憶手段１ａに格納する。
【００２４】
その後、例えば論理ディスク１ｆの作成処理が制御ノード１で行われたものとする。この場合、ディスクノード選択手段１ｃにより、フリーのスライスを有するディスクノードの中から割当対象となるスライスの提供元となる提供元ディスクノードが選択される。図１の例では、ディスクノード２が選択されている。そして、ディスクノード選択手段１ｃから選択されたディスクノード２に対して、フリーのスライスを識別するためのスライス識別子が要求される。するとディスクノード２のスライス識別子送信手段２ｄにより、フリーのスライスを識別するためのスライス識別子６が制御ノード１に送信される。
【００２５】
制御ノード１では、スライス割当手段１ｄが提供元ディスクノードからスライス識別子６を受け取る。そして、スライス割当手段１ｄにより、受け取ったスライス識別子６で示されるスライスの論理ディスク１ｆの記憶領域への割当が決定される。そして、スライス割当手段１ｄによって、決定した割当関係７がディスクノード２に通知される。ディスクノード２では、割当情報更新手段２ｅにより、通知された割当関係に基づいてスライス割当情報が更新される。
【００２６】
このように、論理ディスクへのスライスの割当は制御ノード１で決定するものの、割り当て関係を示す情報は各ディスクノード２，３，４に保持させておくことができる。そのため、制御ノード１の起動時に、すべてのディスクノード２，３，４からスライス割当情報を収集する必要がなくなり、データ転送量を削減することができる。その結果、制御ノード１の起動などの様々な処理を迅速に行うことが可能となる。
【００２７】
ところで、マルチノードストレージシステムでは、論理ディスクの記憶領域に複数のスライスを割り当てることで、割り当てられた複数のスライスを用いたデータのミラーリングを行うことができる。以下、データのミラーリングによる信頼性を向上させたマルチノードストレージシステムに図１の機能を適用する場合を例に採り、実施の形態を詳細に説明する。
【００２８】
図２は、本実施の形態のマルチノードストレージシステム構成例を示す図である。本実施の形態では、ネットワーク１０を介して、複数のディスクノード１００，２００，３００、制御ノード５００、アクセスノード３０，４０、および管理ノード５０が接続されている。ディスクノード１００，２００，３００それぞれには、ストレージ装置１１０，２１０，３１０が接続されている。
【００２９】
ストレージ装置１１０には、複数のハードディスク装置（ＨＤＤ:Hard Disk Drive）１１１，１１２，１１３，１１４が実装されている。ストレージ装置２１０には、複数のＨＤＤ２１１，２１２，２１３，２１４が実装されている。ストレージ装置３１０には、複数のＨＤＤ３１１，３１２，３１３，３１４が実装されている。各ストレージ装置１１０，２１０，３１０は、内蔵するＨＤＤを用いたＲＡＩＤシステムである。本実施の形態では、各ストレージ装置１１０，２１０，３１０のＲＡＩＤ５のディスク管理サービスを提供する。
【００３０】
ディスクノード１００，２００，３００は、例えば、ＩＡ（Intel Architecture）と呼ばれるアーキテクチャのコンピュータである。ディスクノード１００，２００，３００は、接続されたストレージ装置１１０，２１０，３１０に格納されたデータを管理し、管理しているデータをネットワーク１０経由で端末装置２１，２２，２３に提供する。また、ディスクノード１００，２００，３００は、冗長性を有するデータを管理している。すなわち、同一のデータが、少なくとも２つのディスクノードで管理されている。
【００３１】
制御ノード５００は、ディスクノード１００，２００，３００を管理する。例えば、制御ノード５００は、管理ノード５０から新たなストレージ装置の追加要求を受け取ると、新たな論理ディスクを定義し、その論理ディスクを介して追加されたストレージ装置に格納されていたデータにアクセスできるようにする。
【００３２】
アクセスノード３０，４０には、ネットワーク２０を介して複数の端末装置２１，２２，２３が接続されている。アクセスノード３０，４０には、論理ディスクが定義されている。そして、アクセスノード３０，４０は、端末装置２１，２２，２３からの論理ディスク上でのデータのアクセス要求に応答して、ディスクノード１００，２００，３００内の対応するデータへアクセスする。
【００３３】
管理ノード５０は、管理者がマルチノードストレージシステムの運用を管理するために使用するコンピュータである。例えば、管理ノード５０では、マルチノードストレージシステムにおける論理ディスクの使用量などの情報を収集し、運用状況を画面に表示する。
【００３４】
図３は、制御ノードのハードウェア構成例を示す図である。制御ノード５００は、ＣＰＵ（Central Processing Unit）５０１によって装置全体が制御されている。ＣＰＵ５０１には、バス５０７を介してＲＡＭ（Random Access Memory）５０２、ハードディスクドライブ（ＨＤＤ）５０３、グラフィック処理装置５０４、入力インタフェース５０５、および通信インタフェース５０６が接続されている。
【００３５】
ＲＡＭ５０２は、制御ノード５００の主記憶装置として使用される。ＲＡＭ５０２には、ＣＰＵ５０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ５０２には、ＣＰＵ５０１による処理に必要な各種データが格納される。ＨＤＤ５０３は、制御ノード５００の二次記憶装置として使用される。ＨＤＤ５０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、二次記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
【００３６】
グラフィック処理装置５０４には、モニタ１１が接続されている。グラフィック処理装置５０４は、ＣＰＵ５０１からの命令に従って、画像をモニタ１１の画面に表示させる。モニタ１１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置がある。
【００３７】
入力インタフェース５０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース５０５は、キーボード１２やマウス１３から送られてくる信号を、バス５０７を介してＣＰＵ５０１に送信する。なお、マウス１３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３８】
通信インタフェース５０６は、ネットワーク１０に接続されている。通信インタフェース５０６は、ネットワーク１０を介して、他のコンピュータとの間でデータの送受信を行う。
【００３９】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、図３には、制御ノード５００のハードウェア構成を示しているが、ディスクノード１００，２００，３００、アクセスノード３０，４０、および管理ノード５０も同様のハードウェア構成で実現することができる。
【００４０】
図４は、論理ディスクのデータ構造を示す図である。本実施の形態では、論理ディスク６０には論理ディスク識別子「Ｌ１」が付与されている。ネットワーク経由で接続された４台のディスクノード１００，２００，３００には、個々のノードの識別のためにそれぞれ「ＤＰ１」、「ＤＰ２」、「ＤＰ３」というノード識別子が付与されている。そして、各ディスクノード１００，２００，３００に接続されているストレージ装置１１０，２１０，３１０は、ディスクノード１００，２００，３００のノード識別子によってネットワーク１０内で一意に識別される。
【００４１】
各ストレージ装置１１０，２１０，３１０で提供される記憶機能は、複数のスライス１１５ａ〜１１５ｆ，２１５ａ〜２１５ｆ，３１５ａ〜３１５ｆに分割されて管理されている。
【００４２】
論理ディスク６０は、セグメント６１，６２，６３という単位で構成される。セグメント６１，６２，６３の記憶容量は、ストレージ装置１１０，２１０，３１０における管理単位であるスライスの記憶容量と同じである。例えば、スライスの記憶容量が１ギガバイトとするとセグメントの記憶容量も１ギガバイトである。論理ディスク６０の記憶容量はセグメント１つ当たりの記憶容量の整数倍である。
【００４３】
セグメント６１，６２，６３には、論理ディスク６０内で各セグメントの先頭の位置を示すアドレスが定義されている。例えば、セグメント６１のアドレスは「Ａ１」である。アドレスによって、セグメント６１，６２，６３が一意に識別される。セグメント６１，６２，６３内のデータにアクセスする場合には、アクセス対象のセグメントのアドレスからのオフセットによって、アクセス対象のデータが指定される。
【００４４】
また、セグメント６１，６２，６３は、それぞれプライマリスライス６１ａ，６２ａ，６３ａとセカンダリスライス６１ｂ，６２ｂ，６３ｂとの組（スライスペア）で構成される。同一セグメントに属する２つのスライスは別々のディスクノードに属する。個々のスライスを管理する領域には論理ディスク識別子やセグメント情報や同じセグメントを構成するスライス情報の他にフラグがあり、そのフラグにはプライマリあるいはセカンダリなどを表す値が格納される。
【００４５】
図４の例では、論理ディスク６０のセグメント６１，６２，６３を構成するスライスに対して、そのスライスの割り当て先を示す記号を付与している。記号は、割り当てられたセグメントが属する論理ディスクの論理ディスク識別子、スライス種別、およびセグメントの識別情報で構成される。スライス種別は、「Ｐ」、「Ｓ」、「Ｆ」のアルファベットで示されている。「Ｐ」はプライマリスライスであることを示し、「Ｓ」はセカンダリスライスであることを示し、「Ｆ」はフリースライスであることを示している。アルファベットに続く数字は、割り当て先のセグメントが論理ディスク６０内の何番目のセグメントであるかを示している。例えば、論理ディスク６０の１番目のセグメント６１のプライマリスライスが「Ｌ１−Ｐ１」で示され、セカンダリスライスが「Ｌ１−Ｓ１」で示される。
【００４６】
次に、各装置の機能について詳細に説明する。
図５は、ディスクノードとアクセスノードとの機能を示すブロック図である。アクセスノード３０は、論理ディスクアクセス制御部３１を有している。論理ディスクアクセス制御部３１は、端末装置２１，２２，２３からの論理ディスク６０内のデータを指定したアクセス要求に応じて、指定されたデータを管理するディスクノードに対してデータアクセスを行う。具体的には、論理ディスクアクセス制御部３１は、アクセスノード３０の起動時に、制御ノード５００を介して論理ディスク６０の各セグメントに割り当てられたスライスの所在などに関する情報（メタデータ）を取得する。そして、論理ディスクアクセス制御部３１は、端末装置２１，２２，２３からのアクセス要求があると、アクセス対象のデータが記憶された論理ディスク６０内のセグメントを特定する。さらに、論理ディスクアクセス制御部３１は、特定したセグメントにプライマリスライスとして割り当てられたスライス、およびそのスライスを管理するディスクノードを特定する。そして、論理ディスクアクセス制御部３１は、特定したディスクノードに対して、特定したスライスへのアクセス要求を出力する。
【００４７】
なお、論理ディスクアクセス制御部３１は、ディスクノードにアクセスした際にエラーが応答されると、アクセス対象のセグメントを指定して、制御ノード５００に対してメタデータ照会を行う。すると、制御ノード５００が該当セグメントに関するメタデータをディスクノードから取得し、論理ディスクアクセス制御部３１に応答する。これにより、論理ディスクアクセス制御部３１では、最新のメタデータを取得することができる。
【００４８】
なお、アクセスノード４０もアクセスノード３０と同様の機能を有している。
ディスクノード１００は、スライス情報記憶部１２０、データアクセス制御部１３０、データ管理部１４０、およびハートビート送信部１５０を有している。
【００４９】
スライス情報記憶部１２０は、ストレージ装置１１０のスライスを管理するためのスライス情報を記憶する記憶機能である。例えば、ディスクノード１００のＲＡＭ内の記憶領域の一部がスライス情報記憶部１２０として使用される。なお、スライス情報は、スライス毎に設けられたメタデータを集めたものである。メタデータは、対応するスライスが割り当てられたセグメントや、スライスペアにおいて対となる他のスライスを示す情報である。
【００５０】
データアクセス制御部１３０は、アクセスノード３０からのアクセス要求（リード要求またはライト要求）を受け付けた場合に、スライス情報記憶部１２０を参照して、アクセス対象のスライスを判断する。そして、データアクセス制御部１３０は、ストレージ装置１１０内のアクセス要求に応じたデータにアクセスする。例えば、アクセス要求がリード要求であれば、データアクセス制御部１３０は、ストレージ装置１１０からデータを取得し、アクセスノード３０に送信する。
【００５１】
また、アクセス要求がライト要求であれば、データアクセス制御部１３０は、ストレージ装置１１０にデータを書き込む。この際、データアクセス制御部１３０は、書き込み対象のデータをミラーリング処理部１４３に渡す。そして、データアクセス制御部１３０は、ペアとなるスライスへのデータの書き込みが完了した旨の通知を受け取ると、アクセスノード３０に対してデータの書き込み完了の応答を行う。
【００５２】
データ管理部１４０は、ストレージ装置１１０内のデータを管理する。具体的には、データ管理部１４０は、ストレージ装置１１０とスライス情報記憶部１２０とに格納されたメタデータの管理、およびデータライト時のミラーリング処理を行う。そのために、データ管理部１４０は、メタデータ検索部１４１、メタデータ更新部１４２、およびミラーリング処理部１４３を有する。
【００５３】
メタデータ検索部１４１は、制御ノード５００から要求に応じて、スライス情報記憶部１２０内のメタデータの検索を行う。なお、メタデータの検索には、所定の種別のスライスを示すメタデータを検索し、そのヒット数を取得する処理も含まれる。
【００５４】
メタデータ更新部１４２は、ストレージ装置１１０およびスライス情報記憶部１２０に格納されているメタデータの内容の更新を行う。例えば、メタデータ更新部１４２は、ディスクノード１００の起動時には、ストレージ装置１１０に格納されているメタデータを読み出し、スライス情報記憶部１２０に格納する。また、メタデータ更新部１４２は、制御ノード５００からの更新指示に応じて、スライス情報記憶部１２０とストレージ装置１１０とに格納されているメタデータの内容を更新する。
【００５５】
ミラーリング処理部１４３は、ストレージ装置１１０内の各データのミラーリングを行う。具体的には、ミラーリング処理部１４３は、データアクセス制御部１３０によってストレージ装置１１０内のスライスへのデータの書き込みが行われると、スライス情報記憶部１２０を参照して、データが書き込まれたスライス（プライマリスライス）のペアとなるスライス（セカンダリスライス）を判断する。そして、ミラーリング処理部１４３は、ペアとなるスライスの管理するディスクノードに対して、書き込まれたデータを送信し、ペアとなるスライスへの書き込みを要求する。ミラーリング処理部１４３は、ペアとなるスライスへのデータ書き込みが完了すると、その旨をデータアクセス制御部１３０に通知する。
【００５６】
また、ミラーリング処理部１４３は、他のディスクノード２００，３００から、プライマリスライスに書き込まれたデータのコピーを受け取ると、更新されたプライマリスライスとペアとなるストレージ装置１１０内のセカンダリスライスに対して、受け取ったデータを書き込む。そして、ミラーリング処理部１４３は、データの書き込みが完了した旨の応答を送信する。
【００５７】
ハートビート送信部１５０は、ディスクノード１００およびストレージ装置１１０が正常に動作している場合、定期的に制御ノード５００へ正常に動作していることを示す正常通知（ハートビート）を送信する。制御ノード５００では、ディスクノード１００からのハートビートが一定時間途絶えた場合に、ディスクノード１００で障害が発生したことを認識する。
【００５８】
なお、ディスクノード２００，３００もディスクノード１００と同様の機能を有している。
図６は、ストレージ装置のデータ構造例を示す図である。ストレージ装置１１０には、スライス１１５ａ，１１５ｂ，１１５ｃ，・・・とは別に、複数のメタデータ１１６ａ，１１６ｂ，１１６ｃ，・・・が格納されている。ストレージ装置１１０に格納されたメタデータ１１６ａ，１１６ｂ，１１６ｃ，・・・は、ディスクノード１００の起動時にメタデータ更新部１４２で読み出され、スライス情報記憶部１２０に格納される。
【００５９】
また、ストレージ装置１１０の記憶領域の先頭にはデバイス情報１１７が格納されている。デバイス情報１１７には、メタデータ１１６ａ，１１６ｂ，１１６ｃ，・・・とスライス１１５ａ，１１５ｂ，１１５ｃ，・・・とのレイアウトパターンが定義されている。図６の例では、スライス１１５ａ，１１５ｂ，１１５ｃ，・・・それぞれの記憶領域の直前に、そのスライスに関するメタデータが格納されている。別のレイアウトパターンとしては、すべてのメタデータ１１６ａ，１１６ｂ，１１６ｃ，・・・を、デバイス情報１１７内に含めることもできる。
【００６０】
次に、ストレージ装置１１０内のメタデータ１１６ａ，１１６ｂ，１１６ｃ，・・・を格納したスライス情報記憶部１２０のデータ構造について説明する。
図７は、スライス情報記憶部のデータ構造例を示す図である。スライス情報記憶部１２０には、メタデータテーブル１２１が格納されている。メタデータテーブル１２１には、論理ディスクＩＤ、アドレス、種別、ディスクノードＩＤ、スライスＩＤ、ミラーディスクノードＩＤ、およびミラースライスＩＤの欄が設けられている。メタデータテーブル１２１内の横方向に並べられた情報同士が互いに関連付けられ、メタデータを示す一つのレコードを構成している。
【００６１】
論理ディスクＩＤの欄には、スライスに対応するセグメントが属する論理ディスクを識別するための識別情報（論理ディスクＩＤ）が設定される。
アドレスの欄には、スライスが割り当てられたセグメントの先頭のアドレスが設定される。
【００６２】
種別の欄には、スライスの割り当て種別を示す種別フラグが設定される。スライスが論理ディスクのセグメントに割り当てられていない場合、フリースライスであることを示す種別フラグ「Ｆ」が設定される。
【００６３】
論理ディスクのセグメントに対してプライマリスライスとして割り当てられている場合、種別フラグ「Ｐ」または「ＳＰ］が設定される。種別フラグ「Ｐ」は、ペアとなるセカンダリセグメント（ミラースライス）が存在するプライマリスライスを示している。種別フラグ「ＳＰ」は、ミラースライスが障害などによって存在しなくなったプライマリスライス（シングルプライマリスライス）を示している。なお、種別フラグ「ＳＰ」は、そのスライスが割り当てられているセグメントの２重化状態が損なわれていることを示す縮退フラグでもある。
【００６４】
論理ディスクのセグメントに対してセカンダリスライスとして割り当てられている場合、種別フラグ「Ｓ」が設定される。
なお、シングルプライマリスライスが割り当てられているセグメントは冗長性が確保されていない。このようなセグメントを、縮退セグメントと呼ぶ。縮退セグメントに対しては、セカンダリスライスとして割り当てるべきスライスが予約される。予約されたスライスは、リザーブスライスと呼ばれる。縮退セグメントのリザーブスライスに対してプライマリスライスからデータがコピーされる。これにより、縮退セグメントのデータの２重化が回復される。このような２重化回復処理の中のリザーブスライスのメタデータに対しては、データのコピーが完了するまで種別フラグ「Ｒ」が設定される。リザーブスライスに対するプライマリスライスからのデータのコピーが完了すると、リザーブスライスはセカンダリスライスに変更される。
【００６５】
ディスクノードＩＤの欄は、スライスを管理しているディスクノード１００の識別情報（ディスクノードＩＤ）が設定される。
スライスＩＤの欄には、メタデータに対応するスライスのストレージ装置１１０内での識別子（スライスＩＤ）が設定される。
【００６６】
ミラーディスクノードＩＤの欄には、ミラースライス（同じセグメントに属する別のスライス）を有するストレージ装置の識別子（ストレージＩＤ）が設定される。
ミラースライスＩＤの欄には、ミラースライスを、そのスライスが属するストレージ装置内で識別するための識別子（スライスＩＤ）が設定される。
【００６７】
次に制御ノード５００の機能について説明する。
図８は、制御ノードの機能を示すブロック図である。制御ノード５００は、スライス数記憶部５１０、スライス割当情報記憶部５２０、スライス数情報収集部５３０、スライス割当部５４０、メタデータ照会制御部５５０、ハートビート監視部５６０、および復旧制御部５７０を有している。
【００６８】
スライス数記憶部５１０は、各ディスクノード１００，２００，３００で管理しているスライスの種別毎の数を示す情報（スライス数情報）を記憶する記憶機能である。例えば、制御ノード５００のＲＡＭ５０２の記憶領域の一部がスライス数記憶部５１０として使用される。
【００６９】
スライス割当情報記憶部５２０は、論理ディスクのセグメントに対するスライスの割当に関する情報を記憶する記憶機能である。例えば、制御ノード５００のＲＡＭ５０２内の記憶領域の一部がスライス割当情報記憶部５２０として使用される。
【００７０】
スライス数情報収集部５３０は、制御ノード５００の起動時に、各ディスクノード１００，２００，３００からそのディスクノードで管理しているスライスのスライス数情報を収集する。そしてスライス数情報収集部５３０は、収集したスライス数情報をスライス数記憶部５１０に格納する。
【００７１】
スライス割当部５４０は、論理ディスクのセグメントに対するスライスの割当を行う。例えばスライス割当部５４０は、管理ノード５０から論理ディスクの追加指示を受け取ると、その論理ディスクを構成するセグメントに割り当てるべきスライス数を判断する。スライスを２重化させるのであれば、セグメント数の２倍のスライスが必要となる。次に、スライス割当部５４０はスライス数記憶部５１０を参照し、各ディスクノード１００，２００，３００が管理するスライスのうちのフリースライスの数を取得する。さらに、スライス割当部５４０は、各ディスクノード１００，２００，３００のフリースライスの数に応じて、セグメントへの割り当てに使用するスライス数（提供スライス数）をディスクノード１００，２００，３００ごとに決定する。そして、スライス割当部５４０は、各ディスクノード１００，２００，３００から提供スライス数分のフリースライスのスライスＩＤを取得する。スライス割当部５４０は、取得したスライスＩＤで示されるスライスを、新たに作成する論理ディスクのセグメントに割り当てる。スライス割当部５４０は、セグメントにスライスを割り当てると、その結果をスライス割当情報記憶部５２０に登録する。
【００７２】
メタデータ照会制御部５５０は、アクセスノード３０，４０からのメタデータ照会要求を受け取ると、ディスクノード１００，２００，３００からメタデータを取得する。そして、メタデータ照会制御部５５０は、メタデータ照会要求を出力したアクセスノードに対して取得したメタデータを送信する。
【００７３】
ハートビート監視部５６０は、ディスクノード１００，２００，３００からハートビートが定期的に届いているか否かを監視する。ハートビート監視部５６０は、所定期間以上ハートビートが途切れているディスクノードを検出した場合、そのディスクノードが故障したものと判断する。ハートビート監視部５６０は、故障したディスクノードを検出すると、そのディスクノードのディスクノードＩＤを復旧制御部５７０に通知する。
【００７４】
復旧制御部５７０は、ハートビート監視部５６０から故障したディスクノードのディスクノードＩＤを受け取ると、そのディスクノードの切り離し処理を行う。ここでディスクノードの切り離し処理とは、マルチストレージシステムにおけるデータ格納対象から、ディスクノードを除外する処理である。さらに復旧制御部５７０は、ディスクノードの切り離しを行ったことにより発生した縮退セグメントの２重化回復処理を行う。
【００７５】
以上のような機能を有する各ノードが互いに連携して、メタデータの分散管理が行われる。メタデータの分散管理を行うことで、システム運用のためのメタデータの送受信量を減らすことができる。ここで、メタデータの送受信を伴う処理としては、起動・フェイルオーバ処理、論理ディスク作成処理、論理ディスク削除処理、メタデータ照会処理および２重化回復処理がある。以下、メタデータの送受信を伴う各処理について説明する。
【００７６】
図９は、制御ノードの起動処理の手順を示すシーケンス図である。以下、図９に示す処理をステップ番号に沿って説明する。
［ステップＳ１１］制御ノード５００のスライス数情報収集部５３０は、制御ノード５００が起動されると、各ディスクノード１００，２００，３００に対してスライス数情報要求を送信する。
【００７７】
［ステップＳ１２］スライス数情報取得要求を受信したディスクノード１００では、メタデータ検索部１４１が種別ごとのスライス数を集計する。具体的には、メタデータ検索部１４１は、スライス情報記憶部１２０に対し種別フラグをキーワードとして、種別フラグごとの検索を行う。この検索処理でヒットしたメタデータの数が、検索キーワードとして使用した種別フラグで示される種別のスライスの数である。メタデータ検索部１４１は種別ごとのスライス数を取得すると、その情報をまとめてスライス数情報７１を生成する。
【００７８】
同様に、ディスクノード２００，３００でもスライス数が集計されスライス数情報７２，７３が生成される。
［ステップＳ１３］ディスクノード１００のメタデータ検索部１４１は、生成したスライス数情報７１を制御ノード５００に送信する。同様に、ディスクノード２００，３００からも制御ノード５００にスライス数情報７２，７３が送信される。
【００７９】
［ステップＳ１４］各ディスクノード１００，２００，３００からスライス数情報７１，７２，７３を受信した制御ノード５００では、スライス数情報収集部５３０がスライス数情報７１，７２，７３をスライス数記憶部５１０に格納する。
【００８０】
このように、制御ノード５００の起動時にはスライス数情報の収集が行われる。なお、フェイルオーバが発生した場合にも、処理を引き継ぐノードにおいて、図９と同様のスライス情報の収集処理が行われる。
【００８１】
図１０は、スライス数記憶部のデータ構造例を示す図である。スライス数記憶部５１０には、スライス数情報テーブル５１１が格納されている。スライス数情報テーブル５１１は、ディスクノードＩＤ、プライマリスライス数、セカンダリスライス数、フリースライス数、シングルプライマリスライス数、およびリザーブスライス数の欄が設けられている。テーブル内の横方向に並べられた情報が互いに関連付けられ、各ディスクノード１００，２００，３００から送られたスライス数情報７１，７２，７３を示すレコードを構成している。
【００８２】
ディスクノードＩＤの欄には、スライス数情報を送信したディスクノードのディスクノードＩＤが設定される。プライマリスライス数の欄には、対応するディスクノードで管理されているプライマリスライスの数が設定される。セカンダリスライス数の欄には、対応するディスクノードで管理されているセカンダリスライスの数が設定される。フリースライス数の欄には、対応するディスクノードで管理されているフリースライスの数が設定される。シングルプライマリスライス数の欄には、対応するディスクノードで管理されているシングルプライマリスライスの数が設定される。リザーブスライス数の欄には、対応するディスクノードで管理されているリザーブスライスの数が設定される。
【００８３】
このようなスライス数情報テーブル５１１を参照することで、各ディスクノード１００，２００，３００のフリースライス数が分かる。そして、論理ディスクを作成する際には、フリースライス数の情報に基づいて、各ディスクノード１００，２００，３００に割り振るべき提供スライス数を決定することができる。
【００８４】
図１１は、論理ディスク作成処理の手順を示すシーケンス図である。以下、図１１に示す処理をステップ番号に沿って説明する。なお、論理ディスク作成処理は、例えばシステムの管理者が管理ノード５０に対して論理ディスクの作成指示を入力し、管理ノード５０から制御ノード５００へ論理ディスク追加指示が出力されたときに実行される。追加する論理ディスクを構成するセグメントの数、１セグメント当たりの記憶容量は、論理ディスク追加指示に示されている。
【００８５】
［ステップＳ２１］制御ノード５００のスライス割当部５４０は、論理ディスク追加指示を受け取ると、論理ディスク構成情報を作成する。論理ディスク構成情報は、新たに作成する論理ディスクを構成するセグメントを定義する情報である。スライス割当部５４０は、論理ディスク構成情報を作成後、各ディスクノード１００，２００，３００の提供スライス数を決定する。
【００８６】
この際、スライス割当部５４０は、提供スライス数の合計が、論理ディスクに割り当てるべきスライスの数分（セグメントの数の２倍）となるようにする。また、スライス割当部５４０は、スライス数記憶部５１０内のスライス数情報テーブル５１１を参照し、各ディスクノード１００，２００，３００の提供スライス数が、そのディスクノードのフリースライス数以下となるようにする。
【００８７】
なお、後述するステップＳ２５の処理では、提供スライス数に応じて通知されるスライスＩＤに対応するスライスが、プライマリスライスまたはセカンダリスライスとしてセグメントに割り当てられる。データのミラーリングを行う場合、プライマリスライスとセカンダリスライスとは個別のディスクノードで管理される。そのため提供スライス数が過半数を超えるディスクノードがあると、２重化のできないセグメントが発生してしまう。２重化のできないセグメントの発生を避けるため、スライス割当部５４０は、提供スライス数の総数に対する過半数が１つディスクノードの提供スライス数とはならないように、提供スライス数の均等化を行う。また、１つのディスクノードに負荷が集中しないようにするためにも、スライス割当部５４０は、提供スライス数の均等化を行う。
【００８８】
また、スライス割当部５４０は、論理ディスクの各セグメントに対して、どのディスクノードのスライスを割り当てるのかを決定する。その際、割り当てるときの種別についても決定する。このような割り当て関係の結果が、論理ディスク構成情報としてスライス割当情報記憶部５２０に格納される。
【００８９】
［ステップＳ２２］スライス割当部５４０は、ディスクノード１００，２００，３００それぞれに対して、そのディスクノードの提供スライス数を指定したフリースライスＩＤ要求を送信する。
【００９０】
［ステップＳ２３］ディスクノード１００のメタデータ検索部１４１は、フリースライスＩＤ要求を受け取ると、スライス情報記憶部１２０からフリースライスのメタデータを検索する。すなわち、メタデータ検索部１４１は、種別フラグ「Ｆ」をキーワードとして、スライス情報記憶部１２０を検索する。次に、メタデータ検索部１４１は、検索によってヒットしたメタデータから提供スライス数分のメタデータを選択する。同様に、ディスクノード２００，３００においてもフリースライス検索処理が行われる。
【００９１】
［ステップＳ２４］メタデータ検索部１４１は、選択したメタデータのスライスＩＤを制御ノード５００に送信する。図１１の例では、スライスＩＤ「ＳＬ３，ＳＬ４」が送信されている。同様に、ディスクノード２００，３００からも、提供スライス数分のスライスＩＤが制御ノード５００に送信される。
【００９２】
［ステップＳ２５］制御ノード５００のスライス割当部５４０は、各ディスクノード１００，２００，３００から送られたスライスＩＤに基づいて、スライス割当情報を作成する。スライス割当情報は、ステップＳ２１で作成した論理ディスク構成情報に示されるセグメントに、取得したスライスＩＤで示されるスライスを割り当てることによって作成される。このときスライス割当部５４０は、１つのセグメントに対して２つのスライスを割り当てる。一方のスライスはプライマリスライスであり、他方のスライスはセカンダリスライスである。１つのセグメントに割り当てるプライマリスライスとセカンダリスライスは、常に異なるディスクノードから選択される。
【００９３】
［ステップＳ２６］スライス割当部５４０は、スライス割当情報に基づいて各ディスクノード１００，２００，３００に対してメタデータ変更要求を送信する。メタデータ変更要求には、各ディスクノード１００，２００，３００から通知されたスライスＩＤに対応するスライスの割り当て先となるセグメントの情報やミラースライスを示す情報を示すメタデータが含まれる。
【００９４】
［ステップＳ２７］ディスクノード１００のメタデータ更新部１４２は、制御ノード５００から送られたメタデータ更新要求に基づいて、スライス情報記憶部１２０とストレージ装置１１０とのメタデータを変更する。具体的には、メタデータ更新部１４２は、新たにセグメントに割り当てられたスライスのメタデータを、その割り当て内容に応じて変更する。同様にディスクノード２００，３００においてもメタデータ変更処理が行われる。
【００９５】
［ステップＳ２８］メタデータ更新部１４２は、メタデータの変更が完了すると、完了応答を制御ノード５００に送信する。同様にディスクノード２００，３００から制御ノード５００へも完了応答が送信される。
【００９６】
［ステップＳ２９］制御ノード５００のスライス割当部５４０は、各ディスクノード１００，２００，３００からの完了応答を受け取ると、スライス数記憶部５１０内のスライス数情報を更新する。具体的には、スライス割当部５４０は、各ディスクノード１００，２００，３００のフリースライス数の値から、そのディスクノードの提供スライス数を減算する。またスライス割当部５４０は、各ディスクノード１００，２００，３００のプライマリスライス数の値から、そのディスクノードのスライスのうちプライマリスライスとして新たに割り当てられたスライス数を減算する。さらにスライス割当部５４０は、各ディスクノード１００，２００，３００のセカンダリスライス数の値から、そのディスクノードのスライスのうちセカンダリスライスとして新たに割り当てられたスライス数を減算する。これにより、スライス数記憶部５１０内のスライス数情報に、最新の状態が反映される。
【００９７】
次に、スライス割当情報の生成過程について詳細に説明する。スライス割当情報は、論理ディスク構成情報に基づいて作成される。
図１２は、論理ディスク構成情報のデータ構造例を示す図である。論理ディスク構成情報は、スライス割当情報記憶部５２０内の論理ディスク構成情報テーブル５２１に登録される。論理ディスク構成情報テーブル５２１は、論理ディスクＩＤ、アドレス、種別、ディスクノードＩＤ、仮スライスＩＤ、ミラーディスクノードＩＤ、および仮ミラースライスＩＤの欄が設けられている。各欄に登録される情報は、仮スライスＩＤと仮ミラースライスＩＤとの欄を除き、図７に示したメタデータテーブル１２１の同名の欄と同種の情報である。
【００９８】
仮スライスＩＤの欄には、対応するセグメントに種別フラグで示される種別（プライマリスライスまたはセカンダリスライス）で割り当てるスライスの仮の識別情報（仮スライスＩＤ）が設定される。
【００９９】
仮ミラースライスＩＤの欄には、対応するセグメントの仮スライスＩＤで示されるスライスとのペアの対象となるスライスの仮の識別情報（仮ミラースライスＩＤ）が設定される。
【０１００】
スライス割当部５４０は、このような論理ディスク構成情報テーブル５２１を有している状態で各ディスクノード１００，２００，３００にフリースライスＩＤ要求を送信する。その結果、各ディスクノード１００，２００，３００からスライスＩＤを取得する。
【０１０１】
図１３は、制御ノードが取得したスライスＩＤ群を示す図である。制御ノード５００のスライス割当部５４０は、各ディスクノード１００，２００，３００から取得したフリースライスのスライスＩＤを、送信元のディスクノードのディスクノードＩＤに対応付けてメモリに格納する。そして、スライス割当部５４０は、論理ディスク構成情報テーブル５２１に設定された仮スライスＩＤを、ディスクノードから取得したスライスＩＤに置き換えることで、スライス割当情報を生成する。なお、論理ディスク構成情報テーブル５２１は、スライス割当情報を生成するための中間データであり、スライス割当情報の生成に伴ってスライス割当情報記憶部５２０から消去される。
【０１０２】
図１４は、スライス割当情報のデータ構造例を示す図である。スライス割当情報テーブル５２２には、論理ディスクＩＤ、アドレス、種別、ディスクノードＩＤ、スライスＩＤ、ミラーディスクノードＩＤ、およびミラースライスＩＤの欄が設けられている。各欄に登録される情報は、図７に示したメタデータテーブル１２１の同名の欄と同種の情報である。また、テーブル内の横方向に並べられた情報が互いに関連付けられ、メタデータを示すレコードを構成している。
【０１０３】
スライス割当情報テーブル５２２では、論理ディスク構成情報テーブル５２１に設定されていた仮スライスＩＤおよび仮ミラースライスＩＤに代えて、対応するディスクノードから取得したスライスＩＤが設定されている。これにより、各セグメントに割り当てるスライスが確定する。
【０１０４】
次に、論理ディスク削除処理について説明する。
図１５は、論理ディスク削除処理の手順を示すシーケンス図である。以下、図１５に示す処理をステップ番号に沿って説明する。なお、論理ディスク削除処理は、例えばシステムの管理者が管理ノード５０に対して論理ディスクの削除指示を入力し、管理ノード５０から制御ノード５００へ論理ディスク削除指示が出力されたときに実行される。
【０１０５】
［ステップＳ３１］制御ノード５００のスライス割当部５４０は、各ディスクノード１００，２００，３００に対して、削除すべき論理ディスクの論理ディスクＩＤを含む論理ディスク削除要求を送信する。
【０１０６】
［ステップＳ３２］ディスクノード１００のメタデータ更新部１４２は、制御ノード５００から送られた論理ディスク削除要求に基づいて、スライス情報記憶部１２０とストレージ装置１１０とのメタデータを変更する。具体的には、メタデータ更新部１４２は、削除対象の論理ディスクを構成するセグメントに割り当てられたスライスの種別を、フリースライスに変更する。また、メタデータ更新部１４２は、フリースライスに変更したスライスの、割り当て関係を示す情報を削除する。同様にディスクノード２００，３００においてもメタデータ変更処理が行われる。
【０１０７】
［ステップＳ３３］メタデータ更新部１４２は、メタデータの変更が完了すると、完了応答を制御ノード５００に送信する。同様にディスクノード２００，３００から制御ノード５００へも完了応答が送信される。
【０１０８】
このようにして、論理ディスクを削除することができる。なお、論理ディスクを削除することにより、各ディスクノード１００，２００，３００においてフリースライスが増加し、プライマリスライスやセカンダリスライスが減少する。そのため、制御ノード５００では、スライス数記憶部５１０内の情報を最新の情報に更新する必要がある。
【０１０９】
例えば、制御ノード５００のスライス割当部５４０は、論理ディスクをした後に図９に示した起動処理と同様に各ディスクノード１００，２００，３００に対してスライス数情報要求を送信する。スライス割当部５４０は、その結果各ディスクノード１００，２００，３００からスライス数情報を取得し、スライス数記憶部５１０内の情報を更新する。
【０１１０】
また、図１５のステップＳ３３の処理において、各ディスクノード１００，２００，３００が、スライス数情報を含む削除完了応答を制御ノード５００に送信するようにしてもよい。これにより、制御ノード５００では、論理ディスク削除直後から、スライス数記憶部５１０の内容を最新の状態に維持できる。
【０１１１】
次に、メタデータ照会処理について説明する。メタデータ照会処理は、アクセスノード３０，４０からのメタデータ照会要求に基づいて開始される。アクセスノード３０，４０のメタデータ照会要求は、アクセスノード３０，４０の起動時、およびアクセスノード３０，４０から論理ディスク内のデータのへのアクセスエラー発生時に出力される。以下、それぞれの場合におけるメタデータ照会処理について説明する。
【０１１２】
図１６は、アクセスノード起動時のメタデータ照会処理を示す図である。以下、図１６に示す処理をステップ番号に沿って説明する。
［ステップＳ４１］アクセスノード３０の論理ディスクアクセス制御部３１は、アクセスノード３０起動時に、予め登録されている論理ディスクＩＤを指定してメタデータ照会要求を制御ノード５００に送信する。なお、図１６の例では、論理ディスクＩＤ「Ｌ１」が指定されている。ここで、論理ディスクＩＤ「Ｌ１」の論理ディスク６０を構成するセグメント６１，６２，６３へのスライスの割り当て関係は、図４に示す通りであるものとする。
【０１１３】
［ステップＳ４２］制御ノード５００のメタデータ照会制御部５５０は、アクセスノード３０からのメタデータ照会要求を受け取ると、各ディスクノード１００，２００，３００にメタデータ送信要求を送信する。メタデータ送信要求には、メタデータ照会要求で示された論理ディスクＩＤが含まれる。
【０１１４】
［ステップＳ４３］ディスクノード１００のメタデータ検索部１４１は、メタデータ送信要求に応じてメタデータの検索を行う。具体的には、メタデータ検索部１４１は、メタデータ送信要求に示されている論理ディスクＩＤと種別「Ｐ」（プライリスライス）とをキーワードとして、論理積（ＡＮＤ）条件によりスライス情報記憶部１２０からメタデータを検索する。これにより、論理ディスクＩＤで示された論理ディスクのセグメントにプライマリスライスとして割り当てられたスライスのメタデータが検出される。同様に、ディスクノード２００，３００においてもメタデータ検索処理が行われる。
【０１１５】
［ステップＳ４４］メタデータ検索部１４１は、検索によってヒットしたメタデータをスライス情報記憶部１２０から取得し、制御ノード５００に送信する。同様に、ディスクノード２００，３００から制御ノード５００に、検索処理でヒットしたメタデータが送信される。図１６の例では、ディスクノード１００からは、１番目のセグメント（アドレス「Ａ１」）に割り当てられたプライマリスライスのメタデータが送信されている。ディスクノード２００からは、２番目のセグメント（アドレス「Ａ２」）に割り当てられたプライマリスライスのメタデータが送信されている。ディスクノード３００からは、３番目のセグメント（アドレス「Ａ３」）に割り当てられたプライマリスライスのメタデータが送信されている。
【０１１６】
［ステップＳ４５］制御ノード５００のメタデータ照会制御部５５０は、ディスクノード１００，２００，３００から取得したメタデータをアクセスノード３０に転送する。
このようにして、アクセスノード３０は起動時に最新のメタデータを取得することができる。そして、アクセスノード３０は、論理ディスク６０内のデータを指定したアクセスが発生すると、取得したメタデータに基づいて、アクセス対象のデータが格納されたディスクノードにアクセス要求を送信することができる。
【０１１７】
次に、アクセスエラー発生時のメタデータ照会処理について説明する。
図１７は、アクセスエラー発生時のメタデータ照会処理の手順を示すフローチャートである。以下、図１７に示す処理をステップ番号に沿って説明する。
【０１１８】
［ステップＳ５１］アクセスノード３０の論理ディスクアクセス制御部３１は、論理ディスクのセグメントに割り当てられたスライスへのアクセスがエラーとなると、該当セグメントのアドレスを指定したメタデータ照会要求を制御ノード５００に送信する。
【０１１９】
アクセスがエラーになる場合とは、例えばディスクノードが故障した場合である。この場合、故障したディスクノードはマルチノードストレージシステムから切り離される。すると、切り離されたディスクノードが管理していたプライマリスライスにアクセスできなくなる。そこで、アクセスができないプライマリスライスに対応するセカンダリスライスのプライマリ化（種別をプライマリスライスに変更すること）が行われる。
【０１２０】
切り離されたディスクノードにアクセスノード３０がアクセスするとエラーとなる。このとき、アクセスノード３０では、アクセス対象のセグメントの新たなプライマリスライスのメタデータを取得するために、制御ノード５００に対してメタデータ照会要求を送信することとなる。
【０１２１】
またマルチノードストレージシステムでは、システムの運用効率を向上させるため、論理ディスクへのスライスの割り当て関係を再構成する場合がある。例えば、スライス毎にアクセス頻度が異なる場合、アクセス頻度の高いスライスを複数のディスクノードに分散させることで、１つのディスクノードにアクセスが集中することを防止できる。このような割り当て関係の再構成が行われると、再構成前のメタデータに基づいてアクセスノード３０がアクセスを行うとエラーとなる可能性がある。その場合、アクセスノード３０は、再構成後の割り当て関係に基づくプライマリスライスのメタデータを取得するため、制御ノード５００に対してメタデータ照会要求を送信することとなる。
【０１２２】
［ステップＳ５２］制御ノード５００のメタデータ照会制御部５５０は、アクセスノード３０からのメタデータ照会要求を受け取ると、各ディスクノード１００，２００，３００にメタデータ送信要求を送信する。メタデータ送信要求には、メタデータ照会要求で示された論理ディスクＩＤおよびセグメントのアドレスが含まれる。
【０１２３】
［ステップＳ５３］ディスクノード１００のメタデータ検索部１４１は、メタデータ送信要求に応じてメタデータの検索を行う。具体的には、メタデータ検索部１４１は、メタデータ送信要求に示されている論理ディスクＩＤ、セグメントのアドレス、および種別「Ｐ」（プライリスライス）をキーワードとして、論理積（ＡＮＤ）条件によりスライス情報記憶部１２０からメタデータを検索する。これにより、論理ディスクＩＤで示された論理ディスク内の指定されたアドレスのセグメントにプライマリスライスとして割り当てられたスライスのメタデータが検出される。同様に、ディスクノード２００，３００においてもメタデータ検索処理が行われる。図１７の例では、論理ディスク６０（論理ディスクＩＤ「Ｌ１」）のアドレス「Ａ１」のセグメントに割り当てられたプライマリスライスのメタデータが検索されている。
【０１２４】
［ステップＳ５４］メタデータ検索部１４１は、検索によってヒットしたメタデータをスライス情報記憶部１２０から取得し、制御ノード５００に送信する。同様に、ディスクノード２００，３００から制御ノード５００に、検索処理でヒットしたメタデータが送信される。図１７の例では、ディスクノード１００とディスクノード２００では、ヒットするメタデータが無い。そこで、ディスクノード３００からのみ、３番目のセグメント（アドレス「Ａ３」）に割り当てられたプライマリスライスのメタデータが送信されている。
【０１２５】
［ステップＳ５５］制御ノード５００のメタデータ照会制御部５５０は、ディスクノード１００，２００，３００のいずれかから取得したメタデータをアクセスノード３０に転送する。
【０１２６】
このようにして、アクセスノード３０はエラー発生時に最新のメタデータを取得することができる。そして、アクセスノード３０は、最新のメタデータに基づいてアクセス先のディスクノードを変更し、エラーとなったアクセスのリトライを行うことができる。
【０１２７】
なお、メタデータ照会制御部５５０は、メタデータを取得した場合、取得したメタデータをスライス割当情報記憶部５２０に格納することができる。
図１８は、アクセスノード起動時のメタデータ照会処理後のスライス割当情報を示す図である。スライス割当情報記憶部５２０内のスライス割当情報テーブル５２２には、論理ディスクＩＤ「Ｌ１」のプライマリスライスに関するメタデータが登録されている。このように、メタデータ照会要求に基づいて収集したメタデータをスライス割当情報記憶部５２０に登録しておく。メタデータ照会制御部５５０は、その後別のアクセスノード４０からメタデータ照会要求が出された場合、スライス割当情報記憶部５２０からメタデータを取得し、アクセスノード４０に送信する。これにより、メタデータの収集回数を減らすことができる。
【０１２８】
次に、２重化回復処理におけるメタデータの送受信について説明する。なお、２重化回復処理が開始されるのは、縮退セグメントが発生した場合である。縮退セグメントは、例えば故障したディスクノードが切り離されることよって発生する。そこで、２重化回復処理の説明に先立って、故障したディスクノードの切り離し処理について説明する。
【０１２９】
図１９は、故障したディスクノードの切り離し処理を示す図である。以下、図１９に示す処理をステップ番号に沿って説明する。なお、図１９の例では、ディスクノード３００が故障したものとする。
【０１３０】
［ステップＳ６１］ディスクノード１００のハートビート送信部１５０は、制御ノード５００に対して定期的にハートビートを送信する。同様に、ディスクノード２００からもハートビートが定期的に送信される。一方、故障したディスクノード３００からはハートビートの送信が停止する。
【０１３１】
［ステップＳ６２］制御ノード５００のハートビート監視部５６０は、各ディスクノード１００，２００，３００から定期的にハートビートが届いているか否かを監視する。図１９の例では、ハートビート監視部５６０は、ディスクノード３００からのハートビートの途絶を検出する。すると、ハートビート監視部５６０は、ハートビートが途絶したディスクノードのディスクノードＩＤを復旧制御部５７０に通知する。
【０１３２】
［ステップＳ６３］復旧制御部５７０は、正常に運用中のディスクノード１００，２００に対して故障通知を送信する。故障通知には、故障したディスクノード３００のディスクノードＩＤが含まれる。このとき復旧制御部５７０は、スライス数記憶部５１０に登録されている故障したディスクノードのスライス数情報を削除する。
【０１３３】
［ステップＳ６４］ディスクノード１００のメタデータ更新部１４２は、故障通知で指定されたディスクノードとペアを構成するスライスのシングルプライマリ化を行う。具体的には、メタデータ更新部１４２は、スライス情報記憶部１２０から故障通知で示されたディスクＩＤがミラーディスクノードＩＤの欄に設定されているメタデータを検索する。そしてメタデータ更新部１４２は、該当するメタデータの種別フラグをシングルプライマリ「ＳＰ」に変更する。またメタデータ更新部１４２は、種別をシングルプライマリに変更したメタデータのミラーディスクノードＩＤおよびミラースライスＩＤの欄内のデータを削除する。その後、メタデータ更新部１４２は、シングルプライマリ化の変更処理を行ったスライス情報記憶部１２０内のメタデータを用いて、ストレージ装置１１０内のシングルプライマリ化対象のスライスのメタデータを更新する。同様のシングルプライマリ化処理が、ディスクノード２００においても実行される。
【０１３４】
例えば図４に示したようなセグメントへのスライス割当が行われている状況でディスクノード３００が故障すると、ディスクノード１００では、１番目のセグメント６１にプライマリスライスとして割り当てられていたスライス１１５ａがシングルプライマリ化される。また、ディスクノード２００では、３番目のセグメント６３にセカンダリスライスとして割り当てられていたスライス２１５ｂがシングルプライマリ化される。
【０１３５】
［ステップＳ６５］メタデータ更新部１４２は、シングルプライマリ化処理が完了すると、制御ノード５００に対してシングルプライマリ化完了応答を送信する。同様に、ディスクノード２００からも制御ノード５００に対して、シングルプライマリ化完了応答が送信される。
【０１３６】
図２０は、シングルプライマリ化処理により更新されたメタデータを示す図である。図７を参照すると分かるように、ディスクノード１００の先頭のスライス（スライスＩＤ「ＳＬ１）には、ミラースライスとしてディスクノード３００の２番目のスライスが設定されていた。そこで、スライス情報記憶部１２０内のメタデータテーブル１２１において、シングルプライマリ化されたスライスの種別が「ＳＰ」に変更され、ミラーディスクノードＩＤとミラースライスＩＤとの欄のデータが削除されている。
【０１３７】
以上のように故障したディスクノード３００の切り離し処理が完了すると、制御ノード５００の復旧制御部５７０は、２重化回復処理を実行する。
図２１は、２重化回復処理の手順を示すシーケンス図である。以下、図２１に示す処理をステップ番号に沿って説明する。
【０１３８】
［ステップＳ７１］制御ノード５００の復旧制御部５７０は、ディスクノード１００，２００に対してシングルプライマリ照会要求を送信する。
［ステップＳ７２］ディスクノード１００のメタデータ検索部１４１は、シングルプライマリ照会要求に応じてスライス情報記憶部１２０からシングルプライマリスライスを検索する。具体的には、メタデータ検索部１４１は、種別「ＳＰ」をキーワードとしてスライス情報記憶部１２０に登録されたメタデータを検索する。同様に、ディスクノード２００においてもシングルプライマリスライスの検索が行われる。
【０１３９】
［ステップＳ７３］メタデータ検索部１４１は、検索にヒットしたシングルプライマリスライスのメタデータを制御ノード５００に送信する。同様に、ディスクノード２００から制御ノード５００にも、シングルプライマリスライスのメタデータが送信される。
【０１４０】
図２２は、シングルプライマリ照会結果を示す図である。図２２の例では、ディスクノード１００（ディスクノードＩＤ「ＤＰ１」）の１番目のスライス（スライスＩＤ「ＳＬ１」）と、ディスクノード２００（ディスクノードＩＤ「ＤＰ２」）の２番目のスライス（スライスＩＤ「ＳＬ２」）とのメタデータが、シングルプライマリ照会結果として、制御ノード５００に送られている。制御ノード５００では、シングルプライマリ照会結果により、論理ディスク６０（論理ディスクＩＤ「Ｌ１」）の１番目のセグメント６１（アドレス「Ａ１」）と３番目のセグメント６３とが縮退セグメント（アドレス「Ａ３」）であることを認識できる。
【０１４１】
以下、図２１の説明に戻る。
［ステップＳ７４］制御ノード５００の復旧制御部５７０は、縮退セグメントに対するリザーブ割当処理を行う。具体的には、復旧制御部５７０は、縮退セグメントに割り当てるセカンダリスライスを、どのディスクノードから提供させるのかを決定する。その際、縮退セグメントのシングルプライマリスライスを管理するディスクノードとは別のディスクノードを選択する。また復旧制御部５７０は、スライス数記憶部５１０を参照し、ディスクノードそれぞれから提供を受けるスライスの数が、そのディスクノードのフリースライス数以下となるようにする。
【０１４２】
復旧制御部５７０は、各縮退セグメントに対してスライスを提供するディスクノードが決定すると、リザーブ割当情報テーブルを作成する。リザーブ割当情報テーブルは、スライス割当情報記憶部５２０に格納される。
【０１４３】
図２３は、リザーブ割当情報テーブルのデータ構造例を示す図である。リザーブ割当情報テーブル５２３には、論理ディスクＩＤ、アドレス、種別、ディスクノードＩＤ、スライスＩＤ、ミラーディスクノードＩＤ、およびミラースライスＩＤの欄が設けられている。各欄に登録される情報は、スライスＩＤとミラースライスＩＤとの欄を除き図７に示したメタデータテーブル１２１の同名の欄と同種の情報である。リザーブ割当情報テーブル５２３には、シングルプライマリスライスと、縮退セグメントに対してセカンダリスライスとして割り当てられるスライス（リザーブスライス）とに関するレコードが登録される。
【０１４４】
スライスＩＤの欄には、シングルプライマリスライスのレコードであれば、そのスライスのスライスＩＤが設定される。また、リザーブスライスのレコードであれば、仮のスライスＩＤが設定される。
【０１４５】
ミラースライスＩＤの欄には、シングルプライマリスライスのレコードであれば、そのスライスとペアとなるリザーブスライスの仮のスライスＩＤが設定される。また、リザーブスライスのレコードであれば、そのスライスとペアとなるスライスのスライスＩＤが設定される。
【０１４６】
なお、リザーブ割当情報テーブル５２３は、スライス割当情報を更新するための中間データである。スライス割当情報テーブル５２２が更新されると、リザーブ割当情報テーブル５２３がスライス割当情報記憶部５２０から消去される。
【０１４７】
以下、図２１の説明に戻る。
［ステップＳ７５］復旧制御部５７０は、ディスクノード１００，２００に対して、フリースライスＩＤ要求を送信する。フリースライスＩＤ要求には、ディスクノードそれぞれがリザーブスライスのために提供すべきスライス数が含まれる。
【０１４８】
［ステップＳ７６］ディスクノード１００のメタデータ検索部１４１は、フリースライスＩＤ要求を受け取ると、スライス情報記憶部１２０からフリースライスのメタデータを検索する。すなわち、メタデータ検索部１４１は、種別フラグ「Ｆ」をキーワードとして、スライス情報記憶部１２０を検索する。次に、メタデータ検索部１４１は、検索によってヒットしたメタデータから提供スライス数分のメタデータを選択する。同様に、ディスクノード２００においてもフリースライス検索処理が行われる。
【０１４９】
［ステップＳ７７］メタデータ検索部１４１は、選択したメタデータのスライスＩＤを制御ノード５００に送信する。同様に、ディスクノード２００からも、提供スライス数分のスライスＩＤが制御ノード５００に送信される。
【０１５０】
図２４は、フリースライスＩＤ収集結果を示す図である。図２４の例では、各ディスクノード１００，２００からスライスＩＤ「ＳＬ３」が送信されている。
以下、図２１の説明に戻る。
【０１５１】
［ステップＳ７８］制御ノード５００の復旧制御部５７０は、各ディスクノード１００，２００から送られたスライスＩＤに基づいて、スライス割当情報を更新する。具体的には、復旧制御部５７０は、スライス割当情報記憶部５２０内のスライス割当情報テーブル５２２に対して、リザーブ割当情報テーブル５２３とフリースライスＩＤ収集結果とを統合する。
【０１５２】
図２５は、更新後のスライス割当情報テーブルを示す図である。スライス割当情報テーブル５２２は、シングルプライマリ化されていたスライスのメタデータが更新されていると共に、リザーブスライスのメタデータが追加されている。
【０１５３】
例えばディスクノードＩＤ「ＤＰ１」、スライスＩＤ「ＳＬ１」のスライスは、シングルプライマリ化されていたスライスである。このスライスのメタデータのミラーディスクノードＩＤの欄には、リザーブ割当情報テーブル５２３に基づいてディスクノード２００のディスクノードＩＤ「ＤＰ２」が設定される。また、このメタデータのミラースライスＩＤの欄には、フリースライスＩＤ収集結果に基づいて、ディスクノード２００から取得したスライスＩＤ「ＳＬ３」が設定される。
【０１５４】
また、ディスクノードＩＤ「ＤＰ２」、スライスＩＤ「ＳＬ３」のスライスは、リザーブスライスである。このスライスのメタデータは、リザーブ割当情報テーブル５２３に登録されていたレコードをコピーし、スライスＩＤの欄の内容を更新したものである。スライスＩＤの欄には、フリースライスＩＤ収集結果に基づいて、ディスクノード２００から取得したスライスＩＤ「ＳＬ３」が設定される。
【０１５５】
以下、図２１の説明に戻る。
［ステップＳ７９］制御ノード５００の復旧制御部５７０は、スライス割当情報に基づいて各ディスクノード１００，２００に対してメタデータ変更要求を送信する。メタデータ変更要求には、ステップＳ７８の処理で内容が変更されたメタデータが含まれる。
【０１５６】
［ステップＳ８０］ディスクノード１００のメタデータ更新部１４２は、制御ノード５００から送られたメタデータ更新要求に基づいて、スライス情報記憶部１２０とストレージ装置１１０とのメタデータを変更する。同様にディスクノード２００においてもメタデータ変更処理が行われる。
【０１５７】
［ステップＳ８１］メタデータ更新部１４２は、メタデータの変更が完了すると、完了応答を制御ノード５００に送信する。同様にディスクノード２００から制御ノード５００へも完了応答が送信される。
【０１５８】
［ステップＳ８２］制御ノード５００のスライス割当部５４０は、各ディスクノード１００，２００からの完了応答を受け取ると、スライス数記憶部５１０内のスライス数情報を更新する。具体的には、スライス割当部５４０は、各ディスクノード１００，２００のフリースライス数の値から、そのディスクノードがリザーブスライスとして提供したスライス数を減算する。
【０１５９】
またスライス割当部５４０は、セカンダリスライスからシングルプライマリスライスを経てプライマリスライスとなったスライスがある場合、そのスライスのディスクノードのプライマリスライス数に該当するスライス数を加算する。同時にスライス割当部５４０は、セカンダリスライス数から該当するスライス数を減算する。
【０１６０】
さらにスライス割当部５４０は、各ディスクノード１００，２００にリザーブスライスが生じた場合、リザーブスライス数に該当するスライス数を加算する。これにより、スライス数記憶部５１０内のスライス数情報に、最新の状態が反映される。
【０１６１】
なお、各ディスクノード１００のミラーリング処理部１４３は、メタデータ変更処理により、自己の管理するスライスがリザーブスライスになったことを認識すると、ペアとなるプライマリスライスに対してスライス内のデータを要求する。そして、ミラーリング処理部１４３は、プライマリスライスから取得したデータをリザーブスライスに格納する。これにより、データの２重化状態が回復する。データのコピー処理が完了すると、ミラーリング処理部１４３は、制御ノード５００にその旨を通知する。そして、制御ノード５００の復旧制御部５７０からの指示に基づいて、リザーブスライスはセカンダリスライスに種別が変更される。
【０１６２】
以上のように、メタデータをディスクノード１００，２００，３００で分散管理し、必要に応じて制御ノード５００にメタデータを送信するようにすることで、メタデータの転送量が削減される。このようなメタデータ転送量の削減効果は、ディスクノード数が増加するに従って顕著となる。
【０１６３】
図２６は、メタデータ管理方式の違いによるメタデータ転送量の比較結果を示す図である。この例はディスクノード数が「１００」、ストレージ装置１台当たりの記憶容量が「１０ＴＢ（テラバイト）」、スライスサイズが「１ＧＢ（ギガバイト）」、論理ディスクサイズが「２ＴＢ」の場合である。
【０１６４】
この場合、ディスクノード１台当たり１００００個のスライスが設けられている。また、論理ディスクは２０００個のセグメントで構成される。メタデータ管理方式は、制御ノードでメタデータを集中管理した場合と、本実施の形態に示したようにディスクノードを利用してメタデータを分散管理した場合とを比較している。
【０１６５】
「制御ノードの起動またはフェイルオーバ処理」
集中管理方式では、すべてのディスクノードのメタデータが制御ノードに転送される。他方、分散管理方式では、各ディスクノードから制御ノードへ、スライス数情報が転送されるのみである。この例では、１つのスライス数情報をメタデータ１つ分に換算している。その結果、分散管理を行うことで、メタデータの転送量が１００００分の１に削減される。
【０１６６】
「論理ディスク作成処理」
集中管理方式では、制御ノードから各ディスクノードにメタデータを送信するため、セグメント数分（２重化する場合はその２倍）のメタデータ（２０００個のメタデータ）が送信される。他方、分散管理方式では、制御ノードが各ディスクノードからフリースライスＩＤを収集し（２０００個のメタデータ相当）、その後、制御ノードからディスクノードへメタデータ（２０００個のメタデータ）が送信される。そのため、セグメント数の２倍（２重化する場合は更にその２倍）のメタデータが転送される。この計算では、分散管理方式によりメタデータ転送量が２倍となっている。ただし、この例では計算を分かりやすくするため、スライスＩＤ１つ分を１つのメタデータに換算しており、分散管理方式のデータ転送量が多めに見積もられている。実際には１つのメタデータよりも少ないデータ量で１つのスライスＩＤを送信できる。
【０１６７】
「論理ディスク削除処理」
集中管理方式では、制御ノードから各ディスクノードに削除した論理ディスクに割り当てられていたスライスの更新後のメタデータを送信するため、セグメント数分（２重化する場合はその２倍）のメタデータが送信される。他方、分散管理方式では、削除する論理ディスクの論理ディスクＩＤをディスクノードに通知すればよいため、ディスクノード数分のデータ転送で済む。従って、分散管理方式を採用することで、メタデータ転送量が２０分の１となる。
【０１６８】
「２重化回復処理」
１台のディスクノードのすべてのスライスが論理ディスクのセグメントに割当られている状態で、そのディスクノードが故障した場合を想定している。集中管理方式では、制御ノードが動作しているディスクノード（９９台）からすべてのメタデータを収集し（９９００００個のメタデータ）、縮退セグメントを判断する。その後、制御ノードは、シングルプライマリ化させるスライスのメタデータ（１００００個のメタデータ）とリザーブスライスのメタデータ（１００００個のメタデータ）とを、ディスクノードに送信する。他方、分散管理方式では、故障したディスクノードのディスクノードＩＤを制御ノードから他のディスクノードに送信することで（例えばマルチキャスト送信が可能）、ディスクノードにおいてシングルプライマリ化処理が行われる。その後、制御ノードがディスクノードからシングルプライマリスライスのメタデータを収集する（１００００個のメタデータ）。次に、制御ノードがディスクノードからフリースライスのスライスＩＤを収集する（１００００個のメタデータ相当）。そして、制御ノードからディスクノードへ、プライマリスライスのメタデータ（ペアのスライスの情報を更新するため）とリザーブスライスのメタデータとが送信される（２００００個のメタデータ）。従って、分散管理方式を採用することで、メタデータ転送量が約２５分の１となる。
【０１６９】
このように、論理ディスク作成処理を除き、分散管理方式を採用することでメタデータの転送量が減少する。論理ディスクの作成処理は頻繁に発生するものではなく、しかも増加しているメタデータの数も２０００に過ぎない。このことを考慮すると、メタデータの管理方式を集中管理方式から分散管理方式に移行することで、マルチノードストレージシステムの運用中に転送されるメタデータの量が激減することは明らかである。
【０１７０】
また、メタデータの検索処理がディスクノード１００，２００，３００で行われるため、検索処理の負荷がディスクノード１００，２００，３００に分散される。その結果、システムが大規模になっても、メタデータ照会などにおける検索処理を高速に行うことができる。
【０１７１】
しかも、分散管理方式を採用すればフェイルオーバや２重化回復処理のように、緊急時のメタデータ転送量が削減され、障害からの復旧が迅速に行われる。その結果、システムの信頼性向上（２重化の迅速な回復）や、機能制限期間の短縮（短時間でのフェイルオーバ）が図れる。
【０１７２】
さらに、本実施の形態に示したマルチノードストレージシステムでは制御ノードのフェイルオーバが発生しても、フェイルオーバ処理中にアクセスノードからのメタデータ照会要求が発生しない限り、ユーザへのサービスが滞ることはない。
【０１７３】
また、メタデータがすべてディスクノード１００，２００，３００で管理されていることから、制御ノード５００の負荷が軽減され、常駐の制御ノードを廃止し、必要なときだけ制御ノードの機能を起動するようなシステム運用も可能となる。
【０１７４】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、制御ノード５００やディスクノード１００，２００，３００が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disc）などがある。
【０１７５】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１７６】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１７７】
なお、本発明は、上述の実施の形態にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変更を加えることができる。
以上説明した実施の形態の主な技術的特徴は、以下の付記の通りである。
【０１７８】
（付記１）  仮想的に定義された論理ディスクの記憶領域への、複数のディスクノードそれぞれに接続されたストレージ装置の記憶領域の割当処理をコンピュータに実行させるデータ分散制御プログラムであって、
前記コンピュータを、
前記ストレージ装置の記憶領域をスライス単位に分割し、前記論理ディスクの記憶領域への前記スライスの割当関係を示すスライス割当情報を記憶する複数の前記ディスクノードそれぞれから、前記論理ディスクの記憶領域に割り当てられていないフリーの前記スライスの数を示すスライス数情報を収集し、スライス数記憶手段に格納するスライス数収集手段、
前記論理ディスクの記憶領域への前記スライスの割当を伴う処理が発生すると、前記スライス数記憶手段を参照し、フリーの前記スライスを有する前記ディスクノードの中から割当対象となる前記スライスの提供元となる提供元ディスクノードを選択し、選択された前記提供元ディスクノードに対して、フリーの前記スライスを識別するためのスライス識別子を要求するディスクノード選択手段、
前記提供元ディスクノードから前記スライス識別子を受け取り、受け取った前記スライス識別子で示される前記スライスの、前記論理ディスクの記憶領域への割当を決定し、決定した割当関係を前記ディスクノードに通知するスライス割当手段、
として機能させるデータ分散制御プログラム。
【０１７９】
（付記２）  前記ディスクノード選択手段は、前記論理ディスクの同一記憶領域へ２つの前記スライスを割り当てる場合、同一記憶領域に割り当てる前記スライスそれぞれに対して異なる前記ディスクノードを前記提供元ディスクノードとして選択することを特徴とする付記１記載のデータ分散制御プログラム。
【０１８０】
（付記３）  前記ディスクノード選択手段は、前記論理ディスクの記憶領域へ割り当てる前記スライスが複数必要な場合、割り当てるべき前記スライスごとに前記提供元ディスクノードを選択し、選択された前記提供元ディスクノードに対して、前記提供元ディスクノードが提供すべきフリーの前記スライスの数を指定して前記スライス識別子を要求することを特徴とする付記１記載のデータ分散制御プログラム。
【０１８１】
（付記４）  前記コンピュータを、さらに、
前記提供元ディスクノードから送信された前記スライス識別子の分だけ、前記スライス数記憶手段内の前記提供元ディスクノードのフリーの前記スライスの数を減算するスライス数更新手段として機能させることを特徴とする付記１記載のデータ分散制御プログラム。
【０１８２】
（付記５）  前記ディスクノード選択手段は、前記論理ディスクを新規に作成する際に、前記論理ディスクを構成する単位記憶領域ごとに、割当対象となる前記スライスの提供元となる提供元ディスクノードを選択することを特徴とする付記１記載のデータ分散制御プログラム。
【０１８３】
（付記６）  前記コンピュータを、さらに、
複数の前記ディスクノードそれぞれから出力されるハートビートを監視し、前記ハートビートが所定期間以上途絶している故障ディスクノードを検出すると、前記故障ディスクノード以外の前記ディスクノードに対して、前記故障ディスクノードの故障通知を送信するハートビート監視手段として機能させることを特徴とする付記１記載のデータ分散制御プログラム。
【０１８４】
（付記７）  ストレージ装置の記憶領域をスライス単位に分割して管理する処理をコンピュータに実行させるストレージ管理プログラムであって、
前記コンピュータを、
仮想的に定義された論理ディスクの記憶領域への前記スライスの割当関係を示すスライス割当情報を記憶するスライス割当情報記憶手段、
前記スライス割当情報記憶手段を参照し、前記論理ディスクの記憶領域に割り当てられていないフリーの前記スライスの数を計数し、前記論理ディスクの記憶領域への前記スライスの割当処理を行う制御ノードに対して、フリーの前記スライスの数を示すスライス数情報を送信するスライス数計数手段、
前記制御ノードからの要求に応じて、フリーの前記スライスを識別するためのスライス識別子を前記制御ノードに送信するスライス識別子送信手段、
前記論理ディスクの記憶領域への前記スライスの割当関係が前記制御ノードから通知されると、通知された前記割当関係に基づいて前記スライス割当情報を更新する割当情報更新手段、
として機能させるストレージ管理プログラム。
【０１８５】
（付記８）  前記割当情報更新手段は、前記制御ノードから前記論理ディスクの削除要求を受け取ると、前記スライス割当情報記憶手段内の前記論理ディスクの記憶領域に割り当てられている前記スライスをフリーの状態に変更することを特徴とする付記７記載のストレージ管理プログラム。
【０１８６】
（付記９）  前記コンピュータを、さらに、
前記制御ノードから前記論理ディスクを指定したスライス割当情報送信要求を受け取ると、前記スライス割当情報記憶手段から前記論理ディスクの記憶領域に割り当てられた前記スライスを検索し、該当する前記スライスのスライス識別子を前記制御ノードに送信する検索手段として機能させることを特徴とする付記７記載のストレージ管理プログラム。
【０１８７】
（付記１０）  前記コンピュータを、さらに、
前記制御ノードから前記論理ディスクの記憶領域を指定したスライス割当情報送信要求を受け取ると、前記スライス割当情報記憶手段から前記論理ディスクの指定された記憶領域に割り当てられた前記スライスを検索し、該当する前記スライスのスライス識別子を前記制御ノードに送信する検索手段として機能させることを特徴とする付記７記載のストレージ管理プログラム。
【０１８８】
（付記１１）  前記スライス割当情報記憶手段内の前記スライス割当情報は、前記論理ディスクの記憶領域に割り当てられた前記スライスのミラーリングが行われる場合、ミラーリング相手のディスクノードを示す情報を有しており、
前記割当情報更新手段は、前記制御ノードから前記ディスクノードの故障通知を受け取ると、前記ディスクノードをミラーリングの相手としている前記スライスに対して、ミラーリング環境が損なわれたことを示す縮退フラグを設定することを特徴とする付記７記載のストレージ管理プログラム。
【０１８９】
（付記１２）  前記コンピュータを、さらに、
前記制御ノードから前記ミラーリング環境が損なわれたスライスの照会要求を受け取ると、前記スライス割当情報記憶手段から前記縮退フラグが設定されている前記スライスを検索し、該当する前記スライスのスライス識別子を前記制御ノードに送信する検索手段として機能させることを特徴とする付記１１記載のストレージ管理プログラム。
【０１９０】
（付記１３）  仮想的に定義された論理ディスクの記憶領域への、複数のディスクノードそれぞれに接続されたストレージ装置の記憶領域の割当処理を実行する制御ノードであって、
前記ストレージ装置の記憶領域をスライス単位に分割し、前記論理ディスクの記憶領域への前記スライスの割当関係を示すスライス割当情報を記憶する複数の前記ディスクノードそれぞれから、前記論理ディスクの記憶領域に割り当てられていないフリーの前記スライスの数を示すスライス数情報を収集し、スライス数記憶手段に格納するスライス数収集手段と、
前記論理ディスクの記憶領域への前記スライスの割当を伴う処理が発生すると、前記スライス数記憶手段を参照し、フリーの前記スライスを有する前記ディスクノードの中から割当対象となる前記スライスの提供元となる提供元ディスクノードを選択し、選択された前記提供元ディスクノードに対して、フリーの前記スライスを識別するためのスライス識別子を要求するディスクノード選択手段と、
前記提供元ディスクノードから前記スライス識別子を受け取り、受け取った前記スライス識別子で示される前記スライスの、前記論理ディスクの記憶領域への割当を決定し、決定した割当関係を前記ディスクノードに通知するスライス割当手段と、
を有する制御ノード。
【０１９１】
（付記１４）  ストレージ装置の記憶領域をスライス単位に分割して管理するディスクノードであって、
仮想的に定義された論理ディスクの記憶領域への前記スライスの割当関係を示すスライス割当情報を記憶するスライス割当情報記憶手段と、
前記スライス割当情報記憶手段を参照し、前記論理ディスクの記憶領域に割り当てられていないフリーの前記スライスの数を計数し、前記論理ディスクの記憶領域への前記スライスの割当処理を行う制御ノードに対して、フリーの前記スライスの数を示すスライス数情報を送信するスライス数計数手段と、
前記制御ノードからの要求に応じて、フリーの前記スライスを識別するためのスライス識別子を前記制御ノードに送信するスライス識別子送信手段と、
前記論理ディスクの記憶領域への前記スライスの割当関係が前記制御ノードから通知されると、通知された前記割当関係に基づいて前記スライス割当情報を更新する割当情報更新手段と、
を有するディスクノード。
【図面の簡単な説明】
【０１９２】
【図１】実施の形態の概要を示す図である。
【図２】本実施の形態のマルチノードストレージシステム構成例を示す図である。
【図３】制御ノードのハードウェア構成例を示す図である。
【図４】論理ディスクのデータ構造を示す図である。
【図５】ディスクノードとアクセスノードとの機能を示すブロック図である。
【図６】ストレージ装置のデータ構造例を示す図である。
【図７】スライス情報記憶部のデータ構造例を示す図である。
【図８】制御ノードの機能を示すブロック図である。
【図９】制御ノードの起動処理の手順を示すシーケンス図である。
【図１０】スライス数記憶部のデータ構造例を示す図である。
【図１１】論理ディスク作成処理の手順を示すシーケンス図である。
【図１２】論理ディスク構成情報のデータ構造例を示す図である。
【図１３】制御ノードが取得したスライスＩＤ群を示す図である。
【図１４】スライス割当情報のデータ構造例を示す図である。
【図１５】論理ディスク削除処理の手順を示すシーケンス図である。
【図１６】アクセスノード起動時のメタデータ照会処理を示す図である。
【図１７】アクセスエラー発生時のメタデータ照会処理の手順を示すフローチャートである。
【図１８】アクセスノード起動時のメタデータ照会処理後のスライス割当情報を示す図である。
【図１９】故障したディスクノードの切り離し処理を示す図である。
【図２０】シングルプライマリ化処理により更新されたメタデータを示す図である。
【図２１】２重化回復処理の手順を示すシーケンス図である。
【図２２】シングルプライマリ照会結果を示す図である。
【図２３】リザーブ割当情報テーブルのデータ構造例を示す図である。
【図２４】フリースライスＩＤ収集結果を示す図である。
【図２５】更新後のスライス割当情報テーブルを示す図である。
【図２６】メタデータ管理方式の違いによるメタデータ転送量の比較結果を示す図である。
【符号の説明】
【０１９３】
１  制御ノード
１ａ  スライス数記憶手段
１ｂ  スライス数収集手段
１ｃ  ディスクノード選択手段
１ｄ  スライス割当手段
１ｅ，１ｆ  論理ディスク
２，３，４  ディスクノード
２ａ，３ａ，４ａ  ストレージ装置
２ｂ  スライス割当情報記憶手段
２ｃ  スライス数計数手段
２ｄ  スライス識別子送信手段
２ｅ  割当情報更新手段
５  スライス数情報
６  スライス識別子
７  割当関係
【図１】
2010129024.tif 000003
【図２】
2010129024.tif 000004
【図３】
2010129024.tif 000005
【図４】
2010129024.tif 000006
【図５】
2010129024.tif 000007
【図６】
2010129024.tif 000008
【図７】
2010129024.tif 000009
【図８】
2010129024.tif 000010
【図９】
2010129024.tif 000011
【図１０】
2010129024.tif 000012
【図１１】
2010129024.tif 000013
【図１２】
2010129024.tif 000014
【図１３】
2010129024.tif 000015
【図１４】
2010129024.tif 000016
【図１５】
2010129024.tif 000017
【図１６】
2010129024.tif 000018
【図１７】
2010129024.tif 000019
【図１８】
2010129024.tif 000020
【図１９】
2010129024.tif 000021
【図２０】
2010129024.tif 000022
【図２１】
2010129024.tif 000023
【図２２】
2010129024.tif 000024
【図２３】
2010129024.tif 000025
【図２４】
2010129024.tif 000026
【図２５】
2010129024.tif 000027
【図２６】
2010129024.tif 000028