(57)【要約】【課題】ストレージクラスタシステムを構築するのに必要な制御データをストレージノードが本来持つブロックデバイス用インタフェースを用いて共有できるようにする。【解決手段】仮想ブロックデバイス提供部４０１は、外部のブロックデバイス制御装置との間で制御データを共有するために、確保されたストレージリソースから構成される制御データ共有用の仮想ブロックデバイスをブロックデバイス用Ｉ／Ｆ１１７経由で当該外部のブロックデバイス制御装置に提供する。第１のアクセス部４０３は、仮想ブロックデバイス提供部４０１によって外部のブロックデバイス制御装置に提供される仮想ブロックデバイスを構成するストレージリソースに対してアクセスする。第２のアクセス部４０４は、外部のブロックデバイス制御装置によって提供される制御データ共有用の仮想ブロックデバイスに対して、ブロックデバイス用Ｉ／Ｆ１１７経由でアクセスする。【選択図】      図４
2008129854.tif 000002
【特許請求の範囲】
【請求項１】
ストレージノードに含まれるストレージリソースへのアクセスを制御する、当該ストレージノードに設けられたブロックデバイス制御装置において、
外部の装置からのアクセスに使用されるブロックデバイス用インタフェースと、
ストレージクラスタシステムを構築するのに必要な制御データを外部のブロックデバイス制御装置との間で共有するために、確保されたストレージリソースから構成される制御データ共有用の仮想ブロックデバイスを前記ブロックデバイス用インタフェース経由で前記外部のブロックデバイス制御装置に提供する仮想ブロックデバイス提供手段と、
前記仮想ブロックデバイス提供手段によって前記外部のブロックデバイス制御装置に提供される前記仮想ブロックデバイスを構成する前記ストレージリソースに対してアクセスする第１のアクセス手段と、
前記外部のブロックデバイス制御装置によって提供される制御データ共有用の仮想ブロックデバイスに対して、前記ブロックデバイス用インタフェース経由でアクセスする第２のアクセス手段と
を具備することを特徴とするブロックデバイス制御装置。
【請求項２】
前記ストレージノードは、前記ストレージクラスタシステムを構成する、相互に接続された複数のストレージノードの１つであり、前記ブロックデバイス制御装置を含む前記ストレージノードの装置構成を示す装置構成情報を格納する装置構成情報格納手段を含み、
前記仮想ブロックデバイス提供手段は、
前記ブロックデバイス制御装置の起動時に、前記装置構成情報格納手段に格納されている前記装置構成情報に基づき、前記ブロックデバイス制御装置を含む前記ストレージノード内のストレージリソースを確保して、前記制御データ共有用の仮想ブロックデバイスを予め生成する仮想ブロックデバイス生成手段と、
外部のブロックデバイス制御装置から送られる仮想ブロックデバイス情報通知リクエストに基づき、前記予め生成されている制御データ共有用の仮想ブロックデバイスに関する情報を前記ブロックデバイス用インタフェース経由で当該外部のブロックデバイス制御装置に通知する仮想ブロックデバイス情報通知手段と、
前記仮想ブロックデバイス情報通知手段によって通知された情報に応じて前記外部のブロックデバイス制御装置から前記ブロックデバイス用インタフェース経由で送られる仮想ブロックデバイス使用権取得リクエストに基づき、当該リクエストで指定される制御データ共有用の仮想ブロックデバイスの使用権を当該外部のブロックデバイス制御装置に設定する使用権設定手段とを含む
ことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項３】
前記ストレージノードは、前記ストレージクラスタシステムを構成する、相互に接続された複数のストレージノードの１つであり、
前記仮想ブロックデバイス提供手段は、
外部のブロックデバイス制御装置から前記ブロックデバイス用インタフェース経由で送られる仮想ブロックデバイス生成リクエストを受けて、当該リクエストで指定される容量のリソースを前記ブロックデバイス制御装置を含む前記ストレージノード内で確保して、前記制御データ共有用の仮想ブロックデバイスを生成する仮想ブロックデバイス生成手段と、
前記生成された制御データ共有用の仮想ブロックデバイスにアクセスするためのアドレス情報を生成するアドレス生成手段と、
前記生成されたアドレス情報を前記ブロックデバイス用インタフェース経由で前記外部のブロックデバイス制御装置に通知するアドレス通知手段と、
前記生成された制御データ共有用の仮想ブロックデバイスの使用権を前記外部のブロックデバイス制御装置に設定する使用権設定手段とを含む
ことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項４】
前記ストレージノードは、前記ストレージクラスタシステムを構成する、相互に接続された複数のストレージノードの１つであり、
前記仮想ブロックデバイス提供手段は、
外部のブロックデバイス制御装置から前記ブロックデバイス用インタフェース経由で送られる仮想ブロックデバイス生成リクエストに基づき、当該リクエストで指定される容量のリソースを前記ブロックデバイス制御装置を含む前記ストレージノード内で確保して、前記制御データ共有用の仮想ブロックデバイスを生成する仮想ブロックデバイス生成手段と、
前記仮想ブロックデバイス生成リクエストに基づいて生成された前記制御データ共有用の仮想ブロックデバイスにアクセスするためのアドレス情報として当該リクエストで指定されるアドレス情報を設定するアドレス設定手段と、
前記仮想ブロックデバイス生成リクエストで指定されるアドレス情報に設定された前記制御データ共有用の仮想ブロックデバイスの使用権を前記外部のブロックデバイス制御装置に設定する使用権設定手段とを含む
ことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項５】
前記第１のアクセス手段は、アクセスされるべき前記ストレージリソースの領域の排他的使用権を取得してから当該領域にアクセスし、当該排他的使用権を取得できなかった場合には当該排他的使用権を取得できるまで待機することを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項６】
前記ストレージノードは、前記ストレージクラスタシステムを構成する、相互に接続された複数のストレージノードの１つであり、
前記ブロックデバイス制御装置は、外部のブロックデバイス制御装置から制御データ共有用の仮想ブロックデバイスを提供させて当該仮想ブロックデバイスを利用する仮想ブロックデバイス提供要求手段を含み、
前記仮想ブロックデバイス提供要求手段は、
前記外部のブロックデバイス制御装置で起動時に予め生成された制御データ共有用の仮想ブロックデバイスに関する情報の通知を要求するための仮想ブロックデバイス情報通知リクエストを前記ブロックデバイス用インタフェース経由で当該外部のブロックデバイス制御装置に送信する仮想ブロックデバイス情報通知リクエスト送信手段と、
前記仮想ブロックデバイス情報通知リクエストに応じて前記外部のブロックデバイス制御装置から前記ブロックデバイス用インタフェース経由で通知された仮想ブロックデバイスに関する情報に基づき、所望の仮想ブロックデバイスを選択する選択手段と、
前記選択された仮想ブロックデバイスの使用権を要求するための仮想ブロックデバイス使用権取得リクエストを前記ブロックデバイス用インタフェース経由で前記外部のブロックデバイス制御装置に送信する仮想ブロックデバイス使用権取得リクエスト送信手段とを含み、
前記第２のアクセス手段は、前記仮想ブロックデバイス使用権取得リクエストに応じて前記外部のブロックデバイス制御装置から前記選択された仮想ブロックデバイスの使用権が設定された場合に、当該選択された仮想ブロックデバイスのアドレス情報に基づき当該選択された仮想ブロックデバイスにアクセスする
ことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項７】
前記ストレージノードは、前記ストレージクラスタシステムを構成する、相互に接続された複数のストレージノードの１つであり、
前記ブロックデバイス制御装置は、外部のブロックデバイス制御装置から制御データ共有用の仮想ブロックデバイスを提供させて当該仮想ブロックデバイスを利用する仮想ブロックデバイス提供要求手段を含み、
前記仮想ブロックデバイス提供要求手段は、所望の容量の制御データ共有用の仮想ブロックデバイスの生成を外部のブロックデバイス制御装置に要求するための仮想ブロックデバイス生成リクエストを前記ブロックデバイス用インタフェース経由で当該外部のブロックデバイス制御装置に送信する仮想ブロックデバイス生成リクエスト送信手段を含み、
前記第２のアクセス手段は、前記仮想ブロックデバイス生成リクエストに応じて前記外部のブロックデバイス制御装置から前記ブロックデバイス用インタフェース経由で通知される、当該外部のブロックデバイス制御装置で生成された仮想ブロックデバイスにアクセスするためのアドレス情報に基づき、当該仮想ブロックデバイスにアクセスする
ことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項８】
前記ストレージノードは、前記ストレージクラスタシステムを構成する、相互に接続された複数のストレージノードの１つであり、
前記ブロックデバイス制御装置は、外部のブロックデバイス制御装置から制御データ共有用の仮想ブロックデバイスを提供させて当該仮想ブロックデバイスを利用する仮想ブロックデバイス提供要求手段を含み、
前記仮想ブロックデバイス提供要求手段は、所望の容量及びアドレス情報の制御データ共有用の仮想ブロックデバイスの生成を外部のブロックデバイス制御装置に要求するための仮想ブロックデバイス生成リクエストを前記ブロックデバイス用インタフェース経由で当該外部のブロックデバイス制御装置に送信する仮想ブロックデバイス生成リクエスト送信手段を含み、
前記第２のアクセス手段は、前記仮想ブロックデバイス生成リクエストに応じて前記外部のブロックデバイス制御装置により提供される、当該外部のブロックデバイス制御装置で生成された仮想ブロックデバイスに、前記仮想ブロックデバイス生成リクエストの指定するアドレス情報に基づきアクセスする
ことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項９】
キャッシュ領域が確保されるメモリと、
前記制御データ共有用の仮想ブロックデバイスの全領域を前記キャッシュ領域上の特定の連続領域に割り当てるキャッシュ管理手段と
を更に具備することを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項１０】
前記制御データ共有用の仮想ブロックデバイスに格納される制御データは、当該制御データのタイプを表すタイプ情報を含むヘッダ情報が設定された所定の形式のヘッダ部を含むことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項１１】
前記第２のアクセス手段は、前記ブロックデバイス制御装置の起動時に、前記制御データ共有用の仮想ブロックデバイスに格納されている制御データをロードし、
前記ブロックデバイス制御装置は、前記ロードされた制御データの前記ヘッダ情報に基づいて当該制御データを処理する制御データ処理手段であって、当該制御データを当該ヘッダ情報に含まれているタイプ情報の示すタイプの制御データとして処理する制御データ処理手段を更に具備する
ことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項１２】
ストレージノードに含まれるストレージリソースへのアクセスを制御する、当該ストレージノードに設けられたブロックデバイス制御装置であって、外部の装置からのアクセスに使用されるブロックデバイス用インタフェースを備えたブロックデバイス制御装置を、
ストレージクラスタシステムを構築するのに必要な制御データを外部のブロックデバイス制御装置との間で共有するために、確保されたストレージリソースから構成される制御データ共有用の仮想ブロックデバイスを前記ブロックデバイス用インタフェース経由で前記外部のブロックデバイス制御装置に提供する仮想ブロックデバイス提供手段と、
前記仮想ブロックデバイス提供手段によって前記外部のブロックデバイス制御装置に提供される前記仮想ブロックデバイスを構成する前記ストレージリソースに対してアクセスする第１のアクセス手段と、
前記外部のブロックデバイス制御装置によって提供される制御データ共有用の仮想ブロックデバイスに対して、前記ブロックデバイス用インタフェース経由でアクセスする第２のアクセス手段と
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ（ストレージノード）内部のブロックデバイスを外部のブロックデバイス制御装置との間で制御データを共有するのに用いられる仮想的なデバイスとしてブロックデバイス用インタフェースを介してストレージ外部に提供するのに好適なブロックデバイス制御装置及びプログラムに関する。
【背景技術】
【０００２】
近年、ユーザの使用するシステムデータ及びユーザデータの増大に伴い、ストレージクラスタシステム（クラスタストレージシステム）のニーズが高まっている。ストレージクラスタシステムは、複数のストレージ（ストレージノード）を統合してディスクアレイのような仮想的な大容量ストレージとして運用する。各ストレージは、例えば複数の、ハードディスクドライブ（ＨＤＤ）のようなブロックデバイスと、当該複数のブロックデバイスを統合してディスクアレイとして管理するブロックデバイス制御装置とを含む。
【０００３】
ストレージクラスタシステムは、仮想的な大容量ストレージとしての運用により、システム構築及び運用に関するコストの削減を可能とする。このようなストレージクラスタシステムは、例えば非特許文献１または２に記載されているように、製品化されている。
【０００４】
ストレージクラスタシステムの特徴は、複数のストレージ（ストレージノード）がインタコネクト（相互接続）用インタフェースを介して相互接続され、その相互接続された複数のストレージノードが、当該システムを利用するホストからは１つの仮想的なストレージとして認識されることにある。ストレージクラスタシステムでは、このような仮想的なストレージを実現するため、上記インタコネクト用インタフェースを介して、ストレージノード間で制御データ及びユーザデータを送受信する。従来のストレージクラスタシステムでは、上記インタコネクト用インタフェースに、例えば、インフィニバンド等のクラスタシステムのインタコネクト用として標準化されたインタフェース、或いは特定用途向け集積回路（ＡＳＩＣ）で構成されたクロスバスイッチが使用されるのが一般的である。
【特許文献１】＜ＵＲＬ；http://isilon.jp/products/＞（平成１８年１０月１２日検索）
【非特許文献１】＜ＵＲＬ；http://www.nissho-ele.co.jp/product/3par/architecture.html＞（平成１８年１０月１２日検索）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述したような従来のストレージクラスタシステムでは、各ストレージノードは、当該ストレージノードが本来持つブロックデバイス用インタフェースだけでなく、インタコネクト用インタフェースも実装する必要がある。このため従来のストレージクラスタシステムでは、ストレージノードのコストが高くなるという問題がある。
【０００６】
本発明は上記事情を考慮してなされたものでその目的は、ストレージクラスタシステムを構築するのに必要な制御データをストレージノードが本来持つブロックデバイス用インタフェースを用いて共有することができるブロックデバイス制御装置、及びブロックデバイス制御装置間で制御データを共有する方法を提供することにある。
【課題を解決するための手段】
【０００７】
本発明の１つの観点によれば、ストレージノードに含まれるストレージリソースへのアクセスを制御する、当該ストレージノードに設けられたブロックデバイス制御装置が提供される。このブロックデバイス制御装置は、外部の装置からのアクセスに使用されるブロックデバイス用インタフェースと、ストレージクラスタシステムを構築するのに必要な制御データを外部のブロックデバイス制御装置との間で共有するために、確保されたストレージリソースから構成される制御データ共有用の仮想ブロックデバイスを前記ブロックデバイス用インタフェース経由で前記外部のブロックデバイス制御装置に提供する仮想ブロックデバイス提供手段と、前記仮想ブロックデバイス提供手段によって前記外部のブロックデバイス制御装置に提供される前記仮想ブロックデバイスを構成する前記ストレージリソースに対してアクセスする第１のアクセス手段と、前記外部のブロックデバイス制御装置によって提供される制御データ共有用の仮想ブロックデバイスに対して、前記ブロックデバイス用インタフェース経由でアクセスする第２のアクセス手段とを具備する。
【発明の効果】
【０００８】
本発明によれば、ブロックデバイス用インタフェースを介して制御データの通信が行われるため、例えば、ブロックデバイス制御装置が本来持つ、信頼性の高い通信を実現する機能やキャッシュによるアクセス性能を改善する機能をそのまま適用することができる。これにより、低コストでストレージクラスタシステムを構築することができる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の実施の形態につき図面を参照して説明する。  
図１は本発明の一実施形態に係るストレージクラスタシステムの構成を示すブロック図である。図１に示すストレージクラスタシステムは、Ｍ台のストレージノード（ストレージ）１０-1，１０-2，…，１０-Mから構成される。ストレージノード１０-1，１０-2，…，１０-Mは、それぞれ、ブロックデバイス制御装置１１-1，１１-2，…，１１-M及び複数のブロックデバイスを含む。ブロックデバイスは、ハードディスクドライブ（ＨＤＤ）１２のようなストレージリソースである。ブロックデバイス制御装置１１-1〜１１-Mの各々は、複数のブロックデバイス（ＨＤＤ１２）と接続されている。複数のＨＤＤ１２は、一般に少なくとも１つのディスクアレイを構成する。
【００１０】
ブロックデバイス制御装置１１-1，１１-2，…，１１-Mは、スイッチ２０を介して相互接続されている。ブロックデバイス制御装置１１-1，１１-2，…，１１-Mには、ストレージノード１０-1，１０-2，…，１０-Mを利用するＮ台のホストコンピュータ３０-1，３０-2，…，３０-Nがスイッチ２０を介して接続されている。
【００１１】
本実施形態では、ホストコンピュータ３０-1〜３０-Nとブロックデバイス制御装置１１-1〜１１-Mとの間を接続するインタコネクト用インタフェース（Ｉ／Ｆ）として、ＳＣＳＩ（Small Computer System Interface）プロトコルを適用するブロックデバイス用Ｉ／Ｆであるファイバチャネル（Fibre Channel：ＦＣ)、或いはｉＳＣＳＩを想定している。インタコネクト用インタフェースがＦＣの場合、スイッチ２０には例えばファブリックスイッチが用いられる。インタコネクト用インタフェースがｉＳＣＳＩの場合、スイッチ２０には例えばイーサネット（登録商標）のスイッチングハブが用いられる。
【００１２】
ホストコンピュータ３０-1〜３０-Nの各々は、Ｍ台のストレージノード（ストレージ）１０-1〜１０-Mを、仮想的な１つの大容量ストレージとして認識する。ホストコンピュータ３０-1〜３０-Nは、この大容量ストレージに対するリード／ライト要求を、Ｍ台のストレージノード１０-1〜１０-Mのうちの、予め設定された１台のストレージノードに対して発行する。この予め設定されたストレージノードを代表ノードと呼ぶ。
【００１３】
一方、ストレージクラスタシステム内部では、ストレージノード１０-1〜１０-Mのブロックデバイス制御装置１１-1〜１１-Mは、当該ストレージノード１０-1〜１０-Mが有するストレージリソースを、それぞれ仮想的なブロックデバイス（仮想ブロックデバイス）として管理する。ここでは、ストレージノード１０-1〜１０-Mにそれぞれ含まれている複数のＨＤＤ１２で構成されるディスクアレイの幾つかの領域が、仮想ブロックデバイスとして管理される。
【００１４】
図１のストレージクラスタシステムでは、当該システムの構成情報（ストレージクラスタ構成情報）が制御データの１つとして管理される。制御データとは、ストレージクラスタシステムを構成するストレージノード１０-1〜１０-Mのブロックデバイス制御装置１１-1〜１１-Mの間でホストコンピュータ３０-1〜３０-Nから独立に制御するのに用いられるデータを指す。本実施形態では、ブロックデバイス制御装置１１-1〜１１-Mの制御のために当該ブロックデバイス制御装置１１-1〜１１-Mの間で送受信されるメッセージも制御データの１つとして管理される。
【００１５】
図２は、ストレージクラスタ構成情報のデータ構造例を示す。ストレージクラスタ構成情報は、マスタノードアドレス、ルーティングテーブル及びノード構成情報を含む。マスタノードアドレスは、ストレージクラスタシステムにおいてマスタとなるストレージノードのアドレスを示す。
【００１６】
ルーティングテーブルは、図１のサーバクラスタシステムによってホストコンピュータ３０-1〜３０-Nに対して提供される仮想ブロックデバイス（つまりホストコンピュータ３０-1〜３０-Nから認識可能な仮想ブロックデバイス）毎に、論理ユニット番号（Logical Unit Number）ＬＵＮｘ及び識別情報ＩＤｘの対と、論理ユニット番号ＬＵＮｙ及び識別情報ＩＤｘの対とを対応付けて保持する。ＬＵＮｘ及びＩＤｘは、それぞれ、ホストコンピュータが認識している仮想ブロックデバイスの論理ユニット番号及び当該ホストコンピュータのＩＤ（ＳＣＳＩ−ＩＤ）を示すアドレス情報である。ＬＵＮｙ及びＩＤｙは、対応する仮想ブロックデバイスが実際にマッピングされているブロックデバイスの論理ユニット番号及び当該ブロックデバイスを有するストレージノードのブロックデバイス制御装置のＩＤ（ＳＣＳＩ−ＩＤ）を示すアドレス情報である。
【００１７】
ノード構成情報は、図１のストレージクラスタシステムを構成する各ストレージノード１０-i（ｉ＝１，２，…，Ｍ）について、当該ノード１０-iのノード番号Ｎz、当該ノード１０-iのブロックデバイス制御装置１１-iの識別情報ＩＤz及び当該ノード１０-iが有する全てのブロックデバイスの論理ユニット番号ＬＵＮｚを含む。
【００１８】
ホストコンピュータ３０-1〜３０-Nから代表ノードに対して発行されるリード／ライト要求には、当該代表ノードのＩＤ及び当該ホストコンピュータ３０-1〜３０-Nから認識可能な仮想ブロックデバイスの論理ユニット番号ＬＵＮが含まれている。代表ノードは、ホストコンピュータ３０-j（ｊ＝１，２，…，Ｎ）からリード／ライト要求が送られた場合、自身が有するルーティングテーブルを参照する。これにより代表ノードは、ホストコンピュータ３０-jからのリード／ライト要求を、当該リード／ライト要求に含まれているＩＤ及びＬＵＮに一致するＩＤｘ及びＬＵＮｘと対応付けられている識別情報ＩＤｙ及び論理ブロック番号ＬＵＮｙへのリード／ライト要求に変換する。ＩＤｙ及びＬＵＮｙは、ホストコンピュータ３０-jからのリード／ライト要求に含まれるＬＵＮ（＝ＬＵＮｘ）によって指定される仮想ブロックデバイスが実際にマッピングされているストレージノード内のブロックデバイス制御装置の、それぞれ識別情報（ＳＣＳＩ−ＩＤ）及び論理ユニット番号を示す。このブロックデバイス制御装置をデータノードと呼ぶならば、変換されたリード／ライト要求をデータノードへのリード／ライト要求と呼ぶことができる。
【００１９】
代表ノードは、データノードへのリード／ライト要求を当該データノードに転送し、当該要求で指定されたリード／ライトデータをホストコンピュータ３０-jとデータノードとの間で中継する。なお、ホストコンピュータ３０-1〜３０-Nに、それぞれ異なる代表ノードを割り当てることも可能である。
【００２０】
図３は、図１に示される各ブロックデバイス制御装置１１-i（ｉ＝1〜Ｍ）の構成を示すブロック図である。  
各ブロックデバイス制御装置１１-iは、ホストインタフェースコントローラ（ホストＩ／Ｆコントローラ）１１１、ディスクインタフェースコントローラ（ディスクＩ／Ｆコントローラ）１１２、入出力プロセッサ（Ｉ／Ｏプロセッサ）１１３、ＲＯＭ１１４、メモリ１１５及びバッテリ１１６から構成される。
【００２１】
ホストＩ／Ｆコントローラ１１１は、Ｉ／Ｏプロセッサ１１３とホストコンピュータ３０-jとをホストＩ／Ｆ（ホストインタフェース）４１を介して接続する。ディスクＩ／Ｆコントローラ１１２は、Ｉ／Ｏプロセッサ１１３とＨＤＤ１２とをディスクＩ／Ｆ（ディスクインタフェース）４２を介して接続する。本実施形態では、ホストＩ／Ｆ４１としてＦＣ或いはｉＳＣＳＩを想定し、ディスクＩ／Ｆ４２としてＦＣ、パラレルＳＣＳＩ、ＳＡＳ（Serial Attached SCSI）、或いはＳＡＴＡ（Serial ATA）Ｉ／Ｆを想定している。ホストＩ／Ｆコントローラ１１１（及びホストＩ／Ｆ４１）と、ディスクＩ／Ｆコントローラ１１２（及びディスクＩ／Ｆ４２）は、それぞれ、ブロックデバイス用Ｉ／Ｆ１１７及びブロックデバイス用Ｉ／Ｆ１１８として機能する。
【００２２】
Ｉ／Ｏプロセッサ１１３及びホストＩ／Ｆコントローラ１１１（ブロックデバイス用Ｉ／Ｆ１１７）の間、並びにＩ／Ｏプロセッサ１１３及びディスクＩ／Ｆコントローラ１１２（ブロックデバイス用Ｉ／Ｆ１１８）の間は、ＰＣＩ（Peripheral Component Interconnect）バスのようなインタコネクト用インタフェースで接続される。
【００２３】
各ブロックデバイス制御装置１１-iは、所定の制御プログラム１１４ａに従って制御される。この制御プログラム１１４ａはＲＯＭ１１４に予め格納されており、ブロックデバイス制御装置１１-iの起動時に当該ＲＯＭ１１４からメモリ１１５にロードされる。
【００２４】
Ｉ／Ｏプロセッサ１１３は、メモリ１１５にロードされた制御プログラム１１４ａを実行する。Ｉ／Ｏプロセッサ１１３は、割り込みコントローラ、パリティ計算モジュール及びＤＭＡコントローラのようなハードウェア（内部Ｈ／Ｗ）を内蔵する。パリティ計算モジュールは、複数のＨＤＤ１２から構成されるディスクアレイ、例えばＲＡＩＤ５の冗長構成を適用するＲＡＩＤ（Redundant Array of Inexpensive DisksまたはRedundant Array of Independent Disks）のためのパリティを計算する。Ｉ／Ｏプロセッサ１１３は、制御プログラム１１４ａの実行により、内部Ｈ／Ｗと、ホストＩ／Ｆコントローラ１１１及びディスクＩ／Ｆコントローラ１１２のような外部のハードウェア（外部Ｈ／Ｗ）とを制御する。このような制御により、Ｉ／Ｏプロセッサ１１３は複数のＨＤＤ１２から構成されるディスクアレイを仮想的なブロックデバイスとしてホストコンピュータ３０-jに提供する。
【００２５】
メモリ１１５は、バッテリ１１６によってバックアップされている。これにより、ブロックデバイス制御装置１１-iの電源断時にメモリ１１５に格納されているデータが消失するのが防止される。メモリ１１５内の一部の区画は、ホストコンピュータ３０-jに提供する仮想ブロックデバイスのデータを保持するディスクキャッシュ１１５ａとして使用される。
【００２６】
図４は、ブロックデバイス制御装置１１-i内のＩ／Ｏプロセッサ１１３が制御プログラム１１４ａを実行することにより実現される、当該ブロックデバイス制御装置１１-iの機能構成を主として示すブロック図である。
【００２７】
ブロックデバイス制御装置１１-iは、図２に示される、ディスクキャッシュ１１５ａ、ブロックデバイス用Ｉ／Ｆ１１７及びブロックデバイス用Ｉ／Ｆ１１８に加えて、仮想ブロックデバイス提供部４０１、仮想ブロックデバイス提供要求部４０２、第１のアクセス部４０３、第２のアクセス部４０４及びキャッシュ管理部４０５を含む。
【００２８】
仮想ブロックデバイス提供部４０１は、外部のブロックデバイス制御装置１１-j（ｉ＝１，２，…，Ｍ、但しｊ≠ｉ）との間で制御データを共有するために、確保されたストレージリソースから構成される制御データ共有用の仮想ブロックデバイスをブロックデバイス用Ｉ／Ｆ１１７経由で当該ブロックデバイス制御装置１１-jに提供する。本実施形態において、ストレージリソースは、図１に示されるストレージノード１０-i内の複数のＨＤＤ１２から構成されるディスクアレイ１２０の一部領域である。
【００２９】
仮想ブロックデバイス提供要求部４０２は、外部のブロックデバイス制御装置１１-jからブロックデバイス制御装置１１-iに対して制御データ共有用の仮想ブロックデバイスを提供させて当該仮想ブロックデバイスを利用する。
【００３０】
第１のアクセス部４０３は、仮想ブロックデバイス提供部４０１によって外部のブロックデバイス制御装置１１-jに提供される仮想ブロックデバイスを構成するストレージリソースに対してアクセスする。第２のアクセス部４０４は、外部のブロックデバイス制御装置１１-jによって提供される制御データ共有用の仮想ブロックデバイスに対して、ブロックデバイス用Ｉ／Ｆ１１７経由でアクセスする。
【００３１】
キャッシュ管理部４０５は、ディスクアレイ１２０の領域のディスクキャッシュ１１５ａへのマッピングを管理する。キャッシュ管理部４０５は、例えば、制御データ共有用の仮想ブロックデバイスの全領域をディスクキャッシュ１１５ａ上の特定の連続領域に割り当てる。
【００３２】
本実施形態では、ブロックデバイス制御装置間の通信が、送信側（イニシエータ）と受信側（ターゲット）との間のＳＣＳＩプロトコルによるデータ転送で実現される。図５は、本実施形態においてイニシエータが使用するＳＣＳＩコマンドの一覧（ＳＣＳＩコマンド一覧）を、当該イニシエータの動作と対応付けて示す。図５に示されるコマンドは全て、「SCSI Primary Commands-3」或いは「SCSI Block Commands-2」のようなＳＣＳＩプロトコルの規格書で規定されている。
【００３３】
本実施形態では、イニシエータ（イニシエータとなるストレージノード）とターゲット（ターゲットとなるストレージノード）との間で制御データが共有される。この制御データの共有は、イニシエータが作成した制御データ（共有データ）をターゲットにライトする第１の手法、またはターゲットが作成した制御データをイニシエータが当該ターゲットからリードする第２の手法によって実現される。
【００３４】
また本実施形態では、イニシエータ及びターゲットの間でＳＣＳＩプロトコルに従って（制御データとしての）メッセージがブロックデバイス用Ｉ／Ｆ１１７経由で送受信される。このメッセージの送受信という通信形態は、イニシエータが作成したメッセージ（メッセージ形式の制御データ）をターゲットにライトして、当該イニシエータ及びターゲットの間で当該メッセージ（メッセージ形式の制御データ）を共有することにより実現される。このようにブロックデバイス用Ｉ／Ｆ１１７を介して制御データの通信を行うことで、例えば、ブロックデバイス制御装置が本来持つ、信頼性の高い通信を実現する機能やディスクキャッシュによるアクセス性能を改善する機能をそのまま適用することができる。
【００３５】
ターゲットとなるストレージノード１０-pのブロックデバイス制御装置１１-p（ｐは１〜Ｍのいずれか）に含まれている仮想ブロックデバイス提供部４０１は、ストレージノード１０-qのブロックデバイス制御装置１１-q（ｑは１〜Ｍのいずれか）に提供されるべき仮想ブロックデバイスを構成する内部のリソース（つまり仮想ブロックデバイスのための領域）を当該ブロックデバイス制御装置１１-p（を含むストレージノード１０-p）の起動時に確保する。仮想ブロックデバイスの容量と数は、ストレージノード１０-p（内の例えばディスクアレイ１２０）に格納されている当該ストレージノード１０-pに固有の装置構成情報によって示される。つまりブロックデバイス制御装置１１-pの仮想ブロックデバイス提供部４０１は、当該ブロックデバイス制御装置１１-pの起動時に仮想ブロックデバイス生成手段として機能して、ディスクアレイ１２０に格納されている装置構成情報に基づき制御データ共有用の仮想ブロックデバイスを予め生成する。
【００３６】
装置構成情報は、ストレージノード１０-pが単体で起動するのに必要な情報であり、当該ストレージノード１０-p内のＨＤＤ１２の数及び各ＨＤＤ１２の容量と、ディスクアレイの数及び各ディスクアレイの論理ユニット番号ＬＵＮと、仮想ブロックデバイスの数、各仮想ブロックデバイスの論理ユニット番号（ＬＵＮ）及び容量（サイズ）の情報を含む。各仮想ブロックデバイスの容量と仮想ブロックデバイスの数とは、ストレージクラスタシステム全体の要求仕様に基づき予め算定される。
【００３７】
このように本実施形態においては、ブロックデバイス制御装置１１-pの起動時に、装置構成情報に基づき、ストレージノード１０-p内部のリソースを確保して、指定された容量／個数で制御データ共有用の仮想ブロックデバイスが生成される。この仮想ブロックデバイスに格納される制御データをブロックデバイス制御装置１１-1〜１１-Mが共有することにより、ストレージクラスタシステム全体として必要な処理を実現することができる。
【００３８】
ここで、イニシエータとターゲットとの間で制御データを永続化して共有するための制御データ共有処理について、当該イニシエータの動作を中心に、図６のフローチャートを参照して説明する。ここでは、イニシエータがストレージノード１０-2（のブロックデバイス制御装置１１-2）、ターゲットがストレージノード１０-1（のブロックデバイス制御装置１１-1）であるものとする。なお、制御データの永続化とは、メモリ１１５（内に確保されたディスクキャッシュ１１５ａ）上の制御データを、ＨＤＤ１２（の群から構成されるディスクアレイ１２０）に書き込むことである。
【００３９】
（１）制御データ共有用の仮想ブロックデバイスのリストの取得
ブロックデバイス制御装置１１-2（イニシエータ）の仮想ブロックデバイス提供要求部４０２は、ストレージノード１０-1のブロックデバイス制御装置１１-1（ターゲット）が提供する制御データ共有用の仮想ブロックデバイスに関する情報のリスト（制御データ共有用の仮想ブロックデバイスのリスト）を、当該ブロックデバイス制御装置１１-1（ターゲット）から取得する（ステップＳ１）。このリストの取得は、図５に示すＳＣＳＩコマンド一覧中の「ＲＥＰＯＲＴ  ＬＵＮＳコマンド」を用いて、次のようにして実現される。
【００４０】
まず、ブロックデバイス制御装置１１-2（イニシエータ）の仮想ブロックデバイス提供要求部４０２は仮想ブロックデバイス情報通知リクエスト送信手段として機能して、予め定められた、ブロックデバイス制御装置１１-1（ターゲット）の論理ユニット番号ＬＵＮ０に対し、制御データ共有用の仮想ブロックデバイスに関する情報の通知を要求するための仮想ブロックデバイス情報通知リクエストとしての「ＲＥＰＯＲＴ  ＬＵＮＳコマンド」をブロックデバイス用Ｉ／Ｆ１１７経由で発行する。ＬＵＮ０は、ブロックデバイス制御装置１１-1〜１１-Mに共通の特定の論理ユニット番号（代表論理ユニット番号）である。
【００４１】
「ＲＥＰＯＲＴ  ＬＵＮＳコマンド」は、例えば１バイトの「ＳＥＬＥＣＴ  ＲＥＰＯＲＴフィールド」を含む。ブロックデバイス制御装置１１-2（イニシエータ）は、この「ＳＥＬＥＣＴ  ＲＥＰＯＲＴフィールド」の値を使用して、共有される制御データのサイズ及び当該制御データの永続化が必要であるか否か（不要であるか）を指定する。図７は、「ＳＥＬＥＣＴ  ＲＥＰＯＲＴフィールド」の値（０ｘＦ０〜０ｘＦ７）と、制御データのサイズ及び当該制御データの永続化の必要／不要との関係の一例を示す。
【００４２】
永続化が必要な制御データ共有用の仮想ブロックデバイスの領域は、複数のＨＤＤ１２から構成されるディスクアレイ１２０の一部の領域にマッピングされている。このため、仮想ブロックデバイスへライトされた制御データ（共有データ）をディスクアレイ１２０の該当する領域にもライトすることで、当該制御データを永続化することができる。
【００４３】
ブロックデバイス制御装置１１-1（ターゲット）の仮想ブロックデバイス提供部４０１はブロックデバイス制御装置１１-2（イニシエータ）からの「ＲＥＰＯＲＴ  ＬＵＮＳコマンド」を受け取ると、当該コマンドの「ＳＥＬＥＣＴ  ＲＥＰＯＲＴフィールド」の指定に適合し、且つ他のイニシエータが排他的な使用権を設定していない仮想ブロックデバイス（つまり使用可能な仮想ブロックデバイス）を検索する。そしてブロックデバイス制御装置１１-1（ターゲット）の仮想ブロックデバイス提供部４０１は仮想ブロックデバイス情報通知手段として機能して、使用可能な仮想ブロックデバイスのリストを「ＲＥＰＯＲＴ  ＬＵＮＳパラメータ」として生成し、当該リストをブロックデバイス制御装置１１-2（イニシエータ）へ送信する。使用可能な仮想ブロックデバイスのリストは、当該仮想ブロックデバイスにアクセスするためのアドレス情報としての論理ユニット番号ＬＵＮ（つまり当該仮想ブロックデバイスのＬＵＮ）、並びに当該仮想ブロックデバイスの容量及び使用権の情報を含む。
【００４４】
ブロックデバイス制御装置１１-2（イニシエータ）の仮想ブロックデバイス提供要求部４０２は、ブロックデバイス制御装置１１-1（ターゲット）から送られる「ＲＥＰＯＲＴ  ＬＵＮＳパラメータ」を受信することにより、当該パラメータで示される仮想ブロックデバイスのリストを取得する。
【００４５】
（２）仮想ブロックデバイスの使用権の取得
ブロックデバイス制御装置１１-2（イニシエータ）の仮想ブロックデバイス提供要求部４０２は選択手段として機能し、上記取得されたリストから、制御データを共有するために使用可能な制御データ共有用の仮想ブロックデバイスを選択する。以後、ブロックデバイス制御装置１１-2（イニシエータ）は、論理ユニット番号ＬＵＮ０ではなくて、選択された制御データ共有用の仮想ブロックデバイスのＬＵＮに対して、ＳＣＳＩコマンドを発行する。ここでは、選択された仮想ブロックデバイスが、ストレージノード１０-1内の複数のＨＤＤ１２から構成されるディスクアレイ１２０（の例えば一部の領域）であるものとする。
【００４６】
次に、ブロックデバイス制御装置１１-2（イニシエータ）の仮想ブロックデバイス提供要求部４０２は、選択された制御データ共有用の仮想ブロックデバイスの排他的な使用権または共有可能な使用権を取得する（ステップＳ２）。この使用権の取得は、図５に示すＳＣＳＩコマンド一覧中の「ＰＥＲＳＩＳＴＥＮＴ  ＲＥＳＥＲＶＥ  ＯＵＴコマンド」を用いて次のように実現される。
【００４７】
「ＰＥＲＳＩＳＴＥＮＴ  ＲＥＳＥＲＶＥ  ＯＵＴコマンド」は「ＴＹＰＥフィールド」を含む。「ＴＹＰＥフィールド」は、排他的な使用権または共有可能な使用権のいずれを取得したいのか、つまり取得されるべき使用権の種類を指定する。ブロックデバイス制御装置１１-2（イニシエータ）の仮想ブロックデバイス提供要求部４０２は仮想ブロックデバイス使用権取得リクエスト送信手段として機能して、この「ＴＹＰＥフィールド」を含む「ＰＥＲＳＩＳＴＥＮＴ  ＲＥＳＥＲＶＥ  ＯＵＴコマンド」を、選択された制御データ共有用の仮想ブロックデバイスの使用権を要求するための仮想ブロックデバイス使用権取得リクエストとしてブロックデバイス用Ｉ／Ｆ１１７経由でブロックデバイス制御装置１１-1（ターゲット）に発行する。
【００４８】
するとブロックデバイス制御装置１１-1（ターゲット）の仮想ブロックデバイス提供部４０１は使用権設定手段として機能して、「ＰＥＲＳＩＳＴＥＮＴ  ＲＥＳＥＲＶＥ  ＯＵＴコマンド」の「ＴＹＰＥフィールド」で指定された使用権が設定可能であれば、当該使用権をブロックデバイス制御装置１１-2（イニシエータ）に設定（付与）する。これによりブロックデバイス制御装置１１-2（イニシエータ）の仮想ブロックデバイス提供要求部４０２は、選択された仮想ブロックデバイスの使用権（排他的な使用権または共有可能な使用権）をブロックデバイス制御装置１１-1（ターゲット）の仮想ブロックデバイス提供部４０１から取得する。
【００４９】
（３）仮想ブロックデバイスの領域のディスクキャッシュ上へのマッピングの指示
次にブロックデバイス制御装置１１-2（イニシエータ）の仮想ブロックデバイス提供要求部４０２は、選択された制御データ共有用の仮想ブロックデバイスの領域をディスクキャッシュ１１５ａの連続領域にマッピングすることをブロックデバイス制御装置１１-1（ターゲット）に指示する（ステップＳ３）。この指示は、図５に示すＳＣＳＩコマンド一覧中の「ＳＴＡＲＴ  ＳＴＯＰ  ＵＮＩＴコマンド」を用いて、次のようにして実現される。
【００５０】
「ＳＴＡＲＴ  ＳＴＯＰ  ＵＮＩＴコマンド」は「ＰＯＷＥＲ  ＣＯＮＤＩＴＩＯＮフィールド」を含む。ブロックデバイス制御装置１１-2（イニシエータ）は、この「ＰＯＷＥＲ  ＣＯＮＤＩＴＩＯＮフィールド」が「ＡＣＴＩＶＥ（０ｘ１）」に設定された「ＳＴＡＲＴ  ＳＴＯＰ  ＵＮＩＴコマンド」をブロックデバイス用Ｉ／Ｆ１１７経由でブロックデバイス制御装置１１-1（ターゲット）に発行する。これによりブロックデバイス制御装置１１-2（イニシエータ）は、選択された仮想ブロックデバイスの領域をディスクキャッシュ１１５ａの連続領域にマッピングすることを、ブロックデバイス制御装置１１-1（ターゲット）に対して指示することができる。この「ＳＴＡＲＴ  ＳＴＯＰ  ＵＮＩＴコマンド」に基づき、ブロックデバイス制御装置１１-1（ターゲット）のキャッシュ管理部４０５は、当該コマンドで指定された仮想ブロックデバイスの全領域をディスクキャッシュ１１５ａ上の特定の連続領域に割り当てる。
【００５１】
（４）仮想ブロックデバイスに対する制御データのライト
ブロックデバイス制御装置１１-2（イニシエータ）が上述の「ＳＴＡＲＴ  ＳＴＯＰ  ＵＮＩＴコマンド」を発行すると、以後、当該ブロックデバイス制御装置１１-2（イニシエータ）の第２のアクセス部４０４による、制御データ共有用の仮想ブロックデバイスに対するライト／リードが可能になる。この仮想ブロックデバイスに対する制御データ（共有データ）のライトは、通常のＷＲＩＴＥコマンドを使用して実行することができる。
【００５２】
（５）仮想ブロックデバイスからの制御データのリード
制御データ共有用の仮想ブロックデバイスからの制御データ（共有データ）のリードは、通常のＲＥＡＤコマンドを使用して実行することができる。
【００５３】
（６）制御データの使用開始の指示
実際に、ブロックデバイス制御装置１１-1（ターゲット）が、ディスクキャッシュ１１５ａ上にマッピングされた仮想ブロックデバイスの領域に格納されている制御データ（共有データ）の利用を開始するのは、次に述べるタイミングからである。このタイミングとは、上述の制御データの使用開始が指示されたことを、ブロックデバイス制御装置１１-1（ターゲット）が確認した時点である。そのため、ブロックデバイス制御装置１１-2（イニシエータ）の仮想ブロックデバイス提供要求部４０２は、ブロックデバイス制御装置１１-1（ターゲット）に対して制御データの使用開始を指示する（ステップＳ４）。
【００５４】
制御データの使用開始の指示は、図５に示すＳＣＳＩコマンド一覧中の「ＭＯＤＥ  ＳＥＬＥＣＴコマンド」を用いて実現される。更に具体的に述べるならば、制御データの使用開始の指示は、キャッシングモードページのＷＣＥビット（ディスクキャッシュ上のページの設定変更を指示するビット）が１に設定された「ＭＯＤＥ  ＳＥＬＥＣＴコマンド」を、ブロックデバイス制御装置１１-2（イニシエータ）の仮想ブロックデバイス提供部４０１がブロックデバイス制御装置１１-1（ターゲット）に対してブロックデバイス用Ｉ／Ｆ１１７経由で発行することにより実現される。ブロックデバイス制御装置１１-1（ターゲット）は、このＷＣＥビットが１に設定された「ＭＯＤＥ  ＳＥＬＥＣＴコマンド」を受信すると、制御データ（共有データ）の使用を開始できる。
【００５５】
（７）制御データ共有用の仮想ブロックデバイスがマッピングされているディスクアレイ１２０への制御データ書き出し指示
永続データを共有する場合、データを更新した際に当該更新されたデータを確実に永続化する必要がある。このため、ブロックデバイス制御装置１１-2（イニシエータ）は、ブロックデバイス制御装置１１-1（ターゲット）側の制御データ共有用の仮想ブロックデバイスの領域がマッピングされているディスクキャッシュ１１５ａ上の制御データを更新をした際には、当該仮想ブロックデバイスがマッピングされているストレージノード１０-1のディスクアレイ１２０に当該ディスクキャッシュ１１５ａ上の制御データを書き出すことを、当該ブロックデバイス制御装置１１-1（ターゲット）に対してブロックデバイス用Ｉ／Ｆ１１７経由で指示する（ステップＳ５）。この指示には、図５に示すＳＣＳＩコマンド一覧中の「ＳＹＮＣＨＲＯＮＩＺＥ  ＣＡＣＨＥコマンド」が用いられる。
【００５６】
（８）制御データの使用開始の指示
以上に述べたイニシエータとターゲットとの間の一連の通信処理が終了して、制御データ共有用の仮想ブロックデバイスが不要になったものとする。このような場合、イニシエータであるブロックデバイス制御装置１１-2の仮想ブロックデバイス提供要求部４０２は、ブロックデバイス制御装置１１-1（ターゲット）に対して、制御データの使用終了を指示する（ステップＳ６）。この制御データの使用終了の指示は、「ＰＯＷＥＲ  ＣＯＮＤＩＴＩＯＮフィールド」が「ＩＤＬＥ（０ｘ２）」に設定された「ＳＴＡＲＴ  ＳＴＯＰ  ＵＮＩＴコマンド」を、ブロックデバイス制御装置１１-2（イニシエータ）がブロックデバイス用Ｉ／Ｆ１１７経由でブロックデバイス制御装置１１-1（ターゲット）に対して発行することにより実現される。
【００５７】
ブロックデバイス制御装置１１-1（ターゲット）の仮想ブロックデバイス提供部４０１は、ブロックデバイス制御装置１１-2（イニシエータ）から「ＰＯＷＥＲ  ＣＯＮＤＩＴＩＯＮフィールド」が「ＩＤＬＥ（０ｘ２）」に設定された「ＳＴＡＲＴ  ＳＴＯＰ  ＵＮＩＴコマンド」を受信すると、当該ブロックデバイス制御装置１１-1（ターゲット）のディスクキャッシュ１１５ａ上にマッピングされた仮想ブロックデバイスの使用権を持ったイニシエータが存在しないことを確認する。この確認の後、ブロックデバイス制御装置１１-1（ターゲット）の仮想ブロックデバイス提供部４０１は、ディスクキャッシュ１１５ａ上にマッピングされた仮想ブロックデバイスの領域をキャッシュ管理部４０５により解放させて、制御データ（共有データ）の使用を終了させる。
【００５８】
図８は、全ての制御データ（共有データ）に共通のデータフォーマットの一例を示す。本実施形態では、制御データは８バイトのヘッダ情報が設定される所定の形式のヘッダ部（共通ヘッダ部）８１を持つ。ヘッダ部８１（ヘッダ情報）の形式は、全ての制御データに共通である。ヘッダ部８１の最初の４バイトは制御データのタイプ（制御データタイプ）を表すタイプ情報であり、後続の４バイトは当該制御データのバージョン（制御データバージョン）を表すバージョン情報である。実際の制御データ（実制御データ）は、ヘッダ部８１に後続する領域（実制御データ領域）８２に格納される。
【００５９】
さてブロックデバイス制御装置１１-1（ターゲット）の仮想ブロックデバイス提供要求部４０２を実現するＩ／Ｏプロセッサ１１３は、ＷＣＥビットが１に設定された「ＭＯＤＥ  ＳＥＬＥＣＴコマンド」をブロックデバイス制御装置１１-2（イニシエータ）から受信すると、制御プログラム１１４ａに従って、制御データ（共有データ）のタイプとバージョンとをチェックする。そしてＩ／Ｏプロセッサ１１３は、このチェックにより、制御データがサポート可能なデータであるかを判定する。
【００６０】
サポート可能なデータである場合、キャッシュ管理部４０５を実現するＩ／Ｏプロセッサ１１３は、該当するデータへのポインタに、制御データ共有用の仮想ブロックデバイスをマッピングしたディスクキャッシュ１１５ａ上の連続領域の先頭アドレスを代入する。本実施形態では、このポインタは、予めグローバル変数として定義されている。Ｉ／Ｏプロセッサ１１３は、以後、このポインタを用いた制御データ（共有データ）への間接参照によりストレージクラスタシステムとしての各種の処理を行う。これに対し、サポート可能でない場合、Ｉ／Ｏプロセッサ１１３（ターゲットのＩ／Ｏプロセッサ１１３）は、ブロックデバイス制御装置１１-2（イニシエータ）からの「ＭＯＤＥ  ＳＥＬＥＣＴコマンド」に対する応答として、その旨を示す「ＣＨＥＣＫ  ＣＯＮＤＩＴＩＯＮステータス」を当該ブロックデバイス制御装置１１-2（イニシエータ）に通知する。
【００６１】
本実施形態において、イニシエータとターゲットとの間の一連の通信処理で送受信される全てのＳＣＳＩコマンドは、前述したように「SCSI Primary Commands-3」或いは「SCSI Block Commands-2」のようなＳＣＳＩプロトコルの規格書で規定されている。これらのＳＣＳＩコマンドの送受信処理は、イニシエータ及びターゲットの各ブロックデバイス制御装置内のＩ／Ｏプロセッサ１１３が制御プログラム１１４ａを実行することによって制御される。このため本実施形態においては、ＳＣＳＩコマンドの送受信処理に専用のＨ／Ｗは不要である。
【００６２】
また本実施形態では、ストレージノードの機能として本来持つディスクアレイ１２０の機構を利用し、制御データ共有用の仮想ブロックデバイスが当該ストレージノード内のディスクアレイ１２０にマッピングされる。これにより、制御データ（共有データ）を、冗長構成により信頼性を高めた永続データとして扱うことが可能である。
【００６３】
また本実施形態では、ストレージノードにおけるディスクキャッシュ１１５ａの機能として本来持つホストコンピュータ間でのアクセスの排他を制御する機構を利用し、当該ストレージノード外部のブロックデバイス制御装置からのアクセスと当該ストレージノード内部のブロックデバイス制御装置からのアクセスとの排他が制御される。これにより、ストレージノードの外部と内部とで同時に制御データ（共有データ）へのアクセスが発生した際も、当該制御データ（共有データ）の一貫性を保持することが可能となる。
【００６４】
更に本実施形態においては、仮想ブロックデバイスがマッピングされたディスクキャッシュ１１５ａ上の連続領域の先頭アドレスをポインタに設定した以降、Ｉ／Ｏプロセッサ１１３（によって実現される第１のアクセス部４０３）は、当該ポインタに基づき直接に制御データ（共有データ）アクセスを行うことが可能となる。その理由は、仮想ブロックデバイスのデータがディスクキャッシュ１１５ａ上で分散して記憶されていないことによる。そのため、制御データをディスクアレイ１２０から一旦ディスクキャッシュ１１５ａ上にロードし、そのロードした制御データを予め確保したバッファにコピーするという処理が不要となり、制御データへの高速アクセスが可能となる。ここで、ディスクキャッシュ１１５ａ上の上記連続領域を固定し、当該連続領域の制御データがディスクアレイ１２０に追い出されないようにするならば、当該制御データへの一層の高速アクセスが可能となる。
【００６５】
なお、図５においてイニシエータの動作と対応付けて示されるＳＣＳＩコマンドは一例である。この図５に示されるＳＣＳＩコマンド以外のＳＣＳＩコマンドを、図５に示されるイニシエータの動作と対応付けて定義する（マッピングする）ことも可能である。つまり、本実施形態で適用されるブロックデバイス制御装置間の通信では、図５に示されるイニシエータの動作（８つの動作）を実現する機能をブロックデバイス制御装置に持たせた点が重要である。また本実施形態では、ターゲットとなる（ストレージノードの）ブロックデバイス制御装置で制御データ（共有データ）の内容を解釈して処理を実行するために必要な、当該制御データのデータフォーマット（図８参照）、特にヘッダ部８１が重要である。
【００６６】
上記実施形態では、イニシエータ（となるブロックデバイス制御装置）とターゲット（となるブロックデバイス制御装置）とが異なる場合を想定している。しかし、イニシエータとターゲットとが同一であっても構わない、以下、イニシエータとターゲットとが同一である場合に、制御データの共有を実現するための制御データ共有処理について、図９のフローチャートを参照して説明する。ここでは、イニシエータとターゲットとが共にブロックデバイス制御装置１１-1であるものとする。
【００６７】
まず、ブロックデバイス制御装置１１-1は、自身の提供する制御データ共有用の仮想ブロックデバイスを検索する（ステップＳ１１）。次にブロックデバイス制御装置１１-1は、検索された仮想ブロックデバイスのうちの使用可能な仮想ブロックデバイスの使用権を取得する（ステップＳ１２）。
【００６８】
ブロックデバイス制御装置１１-1は、使用権が取得された仮想ブロックデバイスの領域を、当該ブロックデバイス制御装置１１-1内部のディスクキャッシュ１１５ａの連続領域にマッピングする（ステップＳ１３）。次にブロックデバイス制御装置１１-1は、上記マッピングされたディスクキャッシュ１１５ａ上の領域に制御データ（共有データ）を作成する（ステップＳ１４）。
【００６９】
このディスクキャッシュ１１５ａ上に作成された制御データを、イニシエータとターゲットとが異なる場合と同様に、制御データ共有用の仮想ブロックデバイスがマッピングされているディスクアレイ１２０に書き込むならば、つまり制御データ共有用の仮想ブロックデバイスを内部のディスクアレイ１２０にマッピングするならば、制御データを永続化することが可能となる。
【００７０】
ブロックデバイス制御装置１１-1の仮想ブロックデバイス提供部４０１はアドレス通知手段として機能して、図５に示すＳＣＳＩコマンド一覧中の「ＲＥＰＯＲＴ  ＬＵＮＳコマンド」を用いた通信により、外部のブロックデバイス制御装置１１-2〜１１-Mに制御データ共有用の仮想ブロックデバイスの論理ユニット番号ＬＵＮ（アドレス情報）を通知する（ステップＳ１５）。外部のブロックデバイス制御装置１１-2〜１１-Mは、通知された論理ユニット番号ＬＵＮで指定される仮想ブロックデバイスへのリードアクセスを行って、そのリードデータ（つまり制御データ）を当該制御装置１１-2〜１１-Mのメモリ１１５内に保持することで、ブロックデバイス制御装置１１-1との間で制御データを共有する（ステップＳ１６）。
【００７１】
本実施形態において、制御データ共有用の仮想ブロックデバイスは、前記したようにターゲットの起動時に、当該ターゲットの仮想ブロックデバイス提供部４０１が仮想ブロックデバイス生成手段として機能することにより生成される。しかし以下に述べるように、仮想ブロックデバイスが、イニシエータからの要求に基づいてシステム稼動中に動的に生成されても構わない。
【００７２】
まず、イニシエータの仮想ブロックデバイス提供要求部４０２は仮想ブロックデバイス生成リクエスト送信手段として機能して、ターゲットの論理ユニット番号ＬＵＮ０に対し、「ＭＯＤＥフィールド」が「Ｖｅｎｄｏｒ  ｓｐｅｃｉｆｉｃ（０１ｈ）」に設定された第１の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」を発行する。この第１の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」は、所望の容量の制御データ共有用の仮想ブロックデバイスの生成をターゲットに要求するための仮想ブロックデバイス生成リクエストとして用いられる。ここでは第１の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」の発行により、ベンダ固有のモードで必要な制御データ共有用の仮想ブロックデバイスの容量を示す情報が設定されたバッファ情報がターゲットに通知される。
【００７３】
ターゲットの仮想ブロックデバイス提供部４０１は、イニシエータの仮想ブロックデバイス提供要求部４０２からの第１の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」を受けて仮想ブロックデバイス生成手段として機能して、当該コマンドで指定される容量の内部のリソースを確保することにより、制御データ共有用の仮想ブロックデバイスを生成する。すると、ターゲットの仮想ブロックデバイス提供部４０１はアドレス生成手段として機能して、生成された制御データ共有用の仮想ブロックデバイスにアクセスするための論理ユニット番号ＬＵＮ（アドレス情報）を生成する。更に、ターゲットの仮想ブロックデバイス提供部４０１は使用権設定手段として機能して、第１の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」を発行したイニシエータに、上記生成された制御データ共有用の仮想ブロックデバイスの使用権を設定する。そしてターゲットの仮想ブロックデバイス提供部４０１は、「ＧＯＯＤステータス」をイニシエータに送信する。
【００７４】
イニシエータの仮想ブロックデバイス提供要求部４０２は、このＧＯＯＤステータスを受信することにより、制御データ共有用の仮想ブロックデバイスの生成が成功したことを認識する。するとイニシエータの仮想ブロックデバイス提供要求部４０２は、生成された制御データ共有用の仮想ブロックデバイスに関する情報の通知を要求するための「ＲＥＰＯＲＴ  ＬＵＮＳコマンド」（仮想ブロックデバイス情報通知リクエスト）をブロックデバイス用Ｉ／Ｆ１１７経由でターゲットに発行する。
【００７５】
ターゲットの仮想ブロックデバイス提供部４０１は、イニシエータの仮想ブロックデバイス提供要求部４０２から「ＲＥＰＯＲＴ  ＬＵＮＳコマンド」を受けてアドレス通知手段として機能して、先の第１の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」に基づいて生成された制御データ共有用の仮想ブロックデバイスに関する、当該仮想ブロックデバイスにアクセスするための当該仮想ブロックデバイスの論理ユニット番号ＬＵＮ（アドレス情報）を含む情報を当該イニシエータに通知する。イニシエータの第２のアクセス部４０４は、ターゲットの仮想ブロックデバイス提供要求部４０２から通知された論理ユニット番号ＬＵＮに基づき、第１の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」に応じて生成された制御データ共有用の仮想ブロックデバイスにアクセスする。
【００７６】
このように、ストレージクラスタシステムの稼動中に制御データを共有する必要が生じたイニシエータが、ターゲットに対して仮想ブロックデバイス生成を要求することにより、動的に制御データ共有用の仮想ブロックデバイスが生成される構成とすることにより、ストレージクラスタシステムで必要となった処理に対応することができる。
【００７７】
なお、イニシエータの仮想ブロックデバイス提供要求部４０２が、上記第１の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」とは異なる第２の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」により、所望の容量及び論理ユニット番号ＬＵＮ（アドレス情報）の制御データ共有用の仮想ブロックデバイスの生成をターゲットに要求することも可能である。つまり、ベンダ固有のモードで必要な制御データ共有用の仮想ブロックデバイスの容量を示す情報及び以降のアクセスで使用される論理ユニット番号ＬＵＮが設定されたバッファ情報をイニシエータからターゲットに通知するための第２の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」を用いることも可能である。
【００７８】
イニシエータの仮想ブロックデバイス提供要求部４０２がターゲットに「ＭＯＤＥフィールド」が「Ｖｅｎｄｏｒ  ｓｐｅｃｉｆｉｃ（０１ｈ）」に設定された第２の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」（仮想ブロックデバイス生成リクエスト）を発行した場合、当該ターゲットの仮想ブロックデバイス提供部４０１は仮想ブロックデバイス生成手段として機能して、当該コマンドで指定される容量の内部のリソースを確保することにより、制御データ共有用の仮想ブロックデバイスを生成する。またターゲットの仮想ブロックデバイス提供部４０１はアドレス設定手段として機能して、第２の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」に基づいて生成された制御データ共有用の仮想ブロックデバイスにアクセスするための論理ユニット番号ＬＵＮ（アドレス情報）として当該コマンドで指定された論理ユニット番号ＬＵＮ（アドレス情報）を設定する。更に、ターゲットの仮想ブロックデバイス提供部４０１は使用権設定手段として機能して、第２の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」を発行したイニシエータに、上記生成された制御データ共有用の仮想ブロックデバイスの使用権を設定する。そしてターゲットの仮想ブロックデバイス提供部４０１は、「ＧＯＯＤステータス」をイニシエータに送信する。
【００７９】
イニシエータの仮想ブロックデバイス提供要求部４０２は、このＧＯＯＤステータスを受信することにより、制御データ共有用の仮想ブロックデバイスの生成が成功したことを認識する。するとイニシエータの第２のアクセス部４０４は、生成された制御データ共有用の仮想ブロックデバイスに、第２の「ＷＲＩＴＥ  ＢＵＦＦＥＲコマンド」の指定する論理ユニット番号ＬＵＮに基づきアクセスする。
【００８０】
次に、イニシエータとターゲットとの間で制御データを永続化して共有する仕組みの詳細について、ストレージクラスタシステムに新しいストレージノードを追加する場合を例に説明する。ここでは、図１に示されるストレージノード１０-1が追加ノードであるものとする。また、ストレージノード１０-2がストレージクラスタシステムのマスタノードであるものとする。
【００８１】
マスタノードのブロックデバイス制御装置１１-2は、ストレージノード１０-1がストレージクラスタシステムに追加されると、その旨を検出する。するとブロックデバイス制御装置１１-2（マスタノード）は、制御データの１つであるストレージクラスタ構成情報をブロックデバイス制御装置１１-1（追加ノード）に設定する。図１０は、ブロックデバイス制御装置１１-2（マスタノード）がストレージクラスタ構成情報を設定する際のアクセス方向を矢印１００で示す。図１０の例では、マスタノードのブロックデバイス制御装置１１-2がイニシエータ、追加ノードのブロックデバイス制御装置１１-1がターゲットとして動作する。ブロックデバイス制御装置１１-2（イニシエータ）は、追加ノードのブロックデバイス制御装置１１-1（ターゲット）に対して、ストレージクラスタシステムの新たな構成情報を永続化が必要な制御データとしてライトする動作を行う。
【００８２】
以下、追加ノード検出時の、ブロックデバイス制御装置１１-2（イニシエータ）の動作について、図１１のフローチャートを参照して説明する。
【００８３】
まずブロックデバイス制御装置１１-2（イニシエータ）は、追加ノードのブロックデバイス制御装置１１-1（ターゲット）が外部に提供する永続化可能な制御データ共有用の仮想ブロックデバイスの排他的使用権（独占使用権）を取得するための排他的使用権取得ルーチン（ステップＳ２１，Ｓ２２）を実行する。この排他的使用権取得ルーチン（ステップＳ２１，Ｓ２２）の詳細については後述する。
【００８４】
ブロックデバイス制御装置１１-2（イニシエータ）は、排他的使用権の取得に失敗した場合（ステップＳ２２）、ストレージクラスタシステムへのノード追加の失敗を判定する（ステップＳ２３）。これに対し、排他的使用権の取得に成功した場合（ステップＳ２２）、ブロックデバイス制御装置１１-2（イニシエータ）は、追加ノード（ストレージノード１０-1）が追加された最新のストレージクラスタシステムの構成情報（ストレージクラスタ構成情報）を、使用権が取得された制御データ共有用の仮想ブロックデバイスに制御データ（共有データ）としてライトする（ステップＳ２４）。このライト処理（ステップＳ２４）は、次のように実行される。
【００８５】
まず、ブロックデバイス制御装置１１-2（イニシエータ）からブロックデバイス制御装置１１-1（ターゲット）に対して、「ＰＯＷＥＲ  ＣＯＮＤＩＴＩＯＮフィールド」が「ＡＣＴＩＶＥ（０ｘ１）」に設定された「ＳＴＡＲＴ  ＳＴＯＰ  ＵＮＩＴコマンド」がブロックデバイス用Ｉ／Ｆ１１７経由で発行される。これにより、使用権が取得された制御データ共有用の仮想ブロックデバイスの領域を追加ノード（ストレージノード１０-1）のブロックデバイス制御装置１１-1が有するディスクキャッシュ１１５ａ上へマッピングすることが指示される。次にブロックデバイス制御装置１１-2（イニシエータ）は、「ＷＲＩＴＥコマンド」により、制御データ共有用の仮想ブロックデバイスに対する制御データ（共有データ）としての最新のストレージクラスタシステムの構成情報（ストレージクラスタ構成情報）を、ブロックデバイス制御装置１１-1が有するディスクキャッシュ１１５ａ上にライトする。最後にブロックデバイス制御装置１１-2（イニシエータ）は「ＳＹＮＣＨＲＯＮＩＺＥ  ＣＡＣＨＥコマンド」を使用して、制御データ共有用の仮想ブロックデバイスがマッピングされた追加ノード（ストレージノード１０-1）内部のディスクアレイ１２０にディスクキャッシュ１１５ａ上の制御データ（ストレージクラスタ構成情報）を書き込み永続化する。
【００８６】
ブロックデバイス制御装置１１-2（イニシエータ）はステップＳ２４のライト処理に成功すると、ノード追加後のストレージクラスタシステムを構成するストレージノードの数（ストレージクラスタシステムのメンバ数）が３以上であるかを判定する（ステップＳ２５）。ここでは、ストレージクラスタシステムのメンバ数（メンバノード数）が３以上、つまり自ノード（ストレージノード１０-2）と追加ノード（ストレージノード１０-1）以外に、ストレージクラスタシステムを構成するストレージノード（メンバノード）が存在するものとする。この場合、ブロックデバイス制御装置１１-2（イニシエータ）は、自ノードと追加ノード以外のメンバノード（他のメンバノード）のストレージクラスタ構成情報を最新の情報に更新するためのストレージクラスタ構成情報更新ルーチンを実行する（ステップＳ２６）。
【００８７】
ここで、ストレージクラスタ構成情報更新ルーチン（ステップＳ２６）の詳細を、図１２のフローチャートを参照して説明する。まずブロックデバイス制御装置１１-2（イニシエータ）は、自ノードと追加ノード以外のメンバノード（他のメンバノード）各々の仮想ブロックデバイス（の領域がマッピングされたディスクキャッシュ１１５ａ上）に最新のストレージクラスタ構成情報をライトする（ステップＳ３１）。次にブロックデバイス制御装置１１-2（イニシエータ）は、「ＳＹＮＣＨＲＯＮＩＺＥ  ＣＡＣＨＥコマンド」を使用して、仮想ブロックデバイスがマッピングされた他のメンバノード各々の内部のディスクアレイ１２０にディスクキャッシュ１１５ａ上の制御データ（ストレージクラスタ構成情報）を書き込み永続化する（ステップＳ３２）。
【００８８】
ブロックデバイス制御装置１１-2（イニシエータ）は、ストレージクラスタ構成情報更新処理（ステップＳ２６）に成功すると、使用権が取得された制御データ共有用の仮想ブロックデバイスの領域の使用開始を、追加ノード（ストレージノード１０-1）のブロックデバイス制御装置１１-1（ターゲット）に対して指示する（ステップＳ２７）。また、ストレージクラスタシステムのメンバ数が３未満の場合、ブロックデバイス制御装置１１-2（イニシエータ）はステップＳ２６をスキップしてステップＳ２７を実行する。するとブロックデバイス制御装置１１-1は、最新のストレージクラスタ構成情報に基づき、ストレージクラスタのメンバノードとしての処理を実行する。
【００８９】
次に、排他的使用権取得ルーチン（ステップＳ２１）の詳細について、図１３のフローチャートを参照して説明する。まずブロックデバイス制御装置１１-2（イニシエータ）は、「ＲＥＰＯＲＴ  ＬＵＮＳコマンド」を用いて、追加ノードのブロックデバイス制御装置１１-1（ターゲット）が外部に提供する永続化可能な制御データ共有用の仮想ブロックデバイスのリストを取得する（ステップＳ４１）。ブロックデバイス制御装置１１-2（イニシエータ）は、取得されたリスト中に利用可能な仮想ブロックデバイスが存在するかを判定する（ステップＳ４２）。もし、利用可能な仮想ブロックデバイスが存在しないならば、ブロックデバイス制御装置１１-2（イニシエータ）は、排他的使用権の取得失敗を排他的使用権取得ルーチンに通知する（ステップＳ４３）。
【００９０】
これに対し、利用可能な仮想ブロックデバイスが存在するならば、ブロックデバイス制御装置１１-2（イニシエータ）は、その仮想ブロックデバイスを選択して、当該選択された仮想ブロックデバイスの排他的使用権を取得する（ステップＳ４４）。もし、選択された仮想ブロックデバイスの排他的使用権の取得に失敗したならば（ステップＳ４５）、ブロックデバイス制御装置１１-2（イニシエータ）は再度ステップＳ４２を実行する。これに対し、選択された仮想ブロックデバイスの排他的使用権の取得に成功したならば（ステップＳ４５）、ブロックデバイス制御装置１１-2（イニシエータ）は当該仮想ブロックデバイス（制御データ共有用の仮想ブロックデバイス）の情報を排他的使用権取得ルーチンに通知する（ステップＳ４６）。
【００９１】
次に、永続化された制御データ（共有データ）に基づいてブロックデバイス制御装置の構成を初期化する処理（初期化ルーチン）を、ストレージクラスタシステム内の通常ノードの起動時の動作を例に、図１４のフローチャートを参照して説明する。なお本実施形態では、マスタノードを除くストレージクラスタシステム内のストレージノードを通常ノードと呼ぶ。
【００９２】
まず、ストレージノード１０-1が起動されたものとする。またストレージノード１０-1が通常ノードであるものとする。ストレージノード１０-1のブロックデバイス制御装置１１-1に含まれている第２のアクセス部４０４は、使用中の永続化されている制御データ共有用の仮想ブロックデバイスの領域（の情報）を、ストレージノード１０-1内部のディスクアレイ１２０からロードする（ステップＳ５１）。このステップＳ５１において、第２のアクセス部４０４はキャッシュ管理部４０５を制御することにより、上記ロードされた仮想ブロックデバイスの領域をブロックデバイス制御装置１１-1のディスクキャッシュ１１５ａ上の連続領域にマッピングする。
【００９３】
するとブロックデバイス制御装置１１-1は制御データ処理手段として機能して、ディスクキャッシュ１１５ａ上にマッピングされた制御データ共有用の仮想ブロックデバイスの領域の情報（つまり制御データ）のヘッダ部８１を解析することにより、タイプ情報によってストレージクラスタ構成情報が示される制御データをサーチする（ステップＳ５２）。ここでは、ストレージクラスタ構成情報であることが示されている制御データ（共有データ）が存在するものとする（ステップＳ５３）。
【００９４】
この場合、ブロックデバイス制御装置１１-1は、制御データをストレージクラスタ構成情報として処理することにより、当該ストレージクラスタ構成情報内に記録されているメンバノードの１つから、マスタノード（例えばストレージノード１０-2）のアドレス情報（ターゲットアドレスと論理ユニット番号ＬＵＮ）を取得するためのアドレス取得ルーチン（ステップＳ５４，Ｓ５５）を実行する。このアドレス取得ルーチン（ステップＳ５４，Ｓ５５）の詳細は後述する。このようにブロックデバイス制御装置１１-1は、形式が統一されたヘッダ部８１を解釈することにより、制御データ共有用の仮想ブロックデバイスに書きこまれた制御データのタイプと処理方法を正しく認識することができる。
【００９５】
ブロックデバイス制御装置１１-1は、マスタノードのアドレス情報取得に成功した場合（ステップＳ５５）、当該アドレス情報で指定されるマスタノードに対してストレージクラスタ構成情報の更新要求を送信するための構成情報更新要求送信ルーチンを実行する（ステップＳ５６）。ブロックデバイス制御装置１１-1は、マスタノードに対する更新要求で指定された、当該マスタノードでのストレージクラスタ構成情報の更新に失敗した場合（ステップＳ５７）、ストレージクラスタの初期化に失敗したと判定する（ステップＳ５８）。これに対し、マスタノードでのストレージクラスタ構成情報の更新に成功した場合（ステップＳ５７）、ブロックデバイス制御装置１１-1は、ストレージクラスタシステムにおける通常ノード（のブロックデバイス制御装置）としての処理を開始する（ステップＳ５９）。
【００９６】
このように本実施形態においては、永続化された制御データ共有用の仮想ブロックデバイスの領域の情報（つまり永続化された制御データ）を、ブロックデバイス制御装置１１-1の起動時にディスクアレイ１２０から当該ブロックデバイス制御装置１１-1内にロードして、当該永続化された制御データに基づいて当該制御データを処理することにより、ストレージクラスタシステムとしての動作設定等の予め定義された処理を実施することができる。
【００９７】
次に、上記アドレス取得ルーチン（ステップＳ５４，Ｓ５５）の詳細について、図１５のフローチャートを参照して説明する。まずブロックデバイス制御装置１１-1は、ステップＳ５２でサーチされた制御データ（ストレージクラスタ構成情報）内に記録されたメンバノードの１つを指定メンバノードとして選択して、当該指定メンバノードが提供している制御データ共有用の仮想ブロックデバイスの排他的使用権（独占使用権）を取得するための排他的使用権取得ルーチンを実行する（ステップＳ６１）。この排他的使用権取得ルーチン（ステップＳ６１）は、図１３のフローチャートで示される前記排他的使用権取得ルーチン（ステップＳ２１）と同様の手順で実行される。排他的使用権取得ルーチン（ステップＳ６１）が前記排他的使用権取得ルーチン（ステップＳ２１）と異なるのは、図１３のフローチャートのステップＳ４１に相当する処理で、永続可能な制御データ共有用の仮想ブロックデバイスのリストだけでなく永続化できない制御データ共有用の仮想ブロックデバイスのリストも取得される点である。
【００９８】
さて、排他的使用権取得ルーチン（ステップＳ６１）の実行で、利用可能な制御データ共有用の仮想ブロックデバイスの排他的使用権が取得できなかった場合（ステップＳ６２）、アドレス取得ルーチン（ステップＳ５４，Ｓ５５）に取得失敗が通知される（ステップＳ６３）。
【００９９】
一方、排他的使用権取得ルーチン（ステップＳ６１）の実行で、指定メンバノードが提供している利用可能な制御データ共有用の仮想ブロックデバイスの排他的使用権が取得できた場合（ステップＳ６２）、ブロックデバイス制御装置１１-1は、当該使用権が取得された仮想ブロックデバイスに対して、マスタノードのアドレス情報を要求するためのマスタノードアドレス要求メッセージを（含む制御データを）ライトする（ステップＳ６４）。このライト処理（ステップＳ６４）は次のように実行される。
【０１００】
まずブロックデバイス制御装置１１-1は、指定メンバノードが提供している使用権が取得された仮想ブロックデバイスの領域を当該指定メンバノードのディスクキャッシュ１１５ａ上にマッピングするように、「ＰＯＷＥＲ  ＣＯＮＤＩＴＩＯＮフィールド」が「ＡＣＴＩＶＥ（０ｘ１）」に設定された「ＳＴＡＲＴ  ＳＴＯＰ  ＵＮＩＴコマンド」により指示する。ここでは、指定メンバノードがストレージノード１０-Mであるものとする。
【０１０１】
次にブロックデバイス制御装置１１-1は、指定メンバノード、つまりストレージノード１０-Mのディスクキャッシュ１１５ａに対し、「ＷＲＩＴＥコマンド」によりマスタノードアドレス要求メッセージを（実制御データとして）含む制御データのライトを行う。この制御データのヘッダ部８１に含まれている制御データタイプは、当該制御データがマスタノードアドレス要求メッセージであることを示す。このマスタノードアドレス要求メッセージ内には、メンバノードが応答メッセージをライトするための仮想ブロックデバイスの論理ユニット番号ＬＵＮが記録されている。ブロックデバイス制御装置１１-1、つまり起動中のストレージノード１０-1のブロックデバイス制御装置１１-1は、予め、当該ブロックデバイス制御装置１１-1が外部のストレージノードに提供する制御データ共有用の仮想ブロックデバイスの中から応答メッセージ用の仮想ブロックデバイスを１つを選び、メンバノードの使用権を確保しておく。
【０１０２】
ブロックデバイス制御装置１１-1は、ストレージノード１０-M（指定メンバノード）のブロックデバイス制御装置１１-Mに対して、ＷＣＥビットが１に設定された「ＭＯＤＥ  ＳＥＬＥＣＴコマンド」により、マスタノードアドレス要求メッセージがライトされた仮想ブロックデバイスの領域の使用開始を指示する（ステップＳ６５）。そしてブロックデバイス制御装置１１-1は、マスタノードアドレス要求メッセージの指定する仮想ブロックデバイス（マスタノードのアドレス情報がライトされる仮想ブロックデバイス）の領域の使用終了がストレージノード１０-M（指定メンバノード）のブロックデバイス制御装置１１-Mから通知されるまで待機する（ステップＳ６６）。
【０１０３】
さて、ストレージノード１０-M（指定メンバノード）のブロックデバイス制御装置１１-Mは、マスタノードアドレス要求メッセージがライトされた（指定メンバノードが提供している）仮想ブロックデバイスの使用開始がブロックデバイス制御装置１１-1（起動中のストレージノード１０-1のブロックデバイス制御装置１１-1）によって指示されると、アドレス要求メッセージ受信時処理を実行する。このアドレス要求メッセージ受信時処理について、図１６のフローチャートを参照して説明する。
【０１０４】
まず、ブロックデバイス制御装置１１-Mは制御データ処理手段として機能して、使用開始が指示された仮想ブロックデバイスに格納されている制御データ（共有データ）のヘッダ部８１（に含まれている制御データタイプ）をチェックし、その制御データがマスタノードアドレス要求メッセージであることを認識する（ステップＳ７１）。この場合、ブロックデバイス制御装置１１-Mは、制御データをマスタノードアドレス要求メッセージとして処理する。したがってステップＳ７１の処理は、ブロックデバイス制御装置１１-Mがマスタノードアドレス要求メッセージを受信したことと等価である。
【０１０５】
このようにブロックデバイス制御装置１１-Mは、形式が統一されたヘッダ部８１を解釈することにより、制御データ共有用の仮想ブロックデバイスに書きこまれた制御データのタイプと処理方法を正しく認識することができる。
【０１０６】
次にブロックデバイス制御装置１１-Mは、「ＷＲＩＴＥコマンド」により、アドレス要求メッセージ内で指定された起動中のノード（ストレージノード１０-1）の論理ユニット番号ＬＵＮで指定される（ブロックデバイス制御装置１１-1が提供している）応答メッセージ用の仮想ブロックデバイスに対してマスタノードのアドレス情報を応答メッセージとしてライトする（ステップＳ７２）。最後にブロックデバイス制御装置１１-Mは、「ＰＯＷＥＲ  ＣＯＮＤＩＴＩＯＮフィールド」が「ＩＤＬＥ（０ｘ２）」に設定された「ＳＴＡＲＴ  ＳＴＯＰ  ＵＮＩＴコマンド」をブロックデバイス制御装置１１-1に対して発行することにより、マスタノードのアドレス情報がライトされた仮想ブロックデバイス（マスタノードアドレス要求メッセージによって指定された仮想ブロックデバイス）の使用終了を通知する（ステップＳ７３）。
【０１０７】
起動中のストレージノード１０-1のブロックデバイス制御装置１１-1は、指定メンバノード（ストレージノード１０-M）からの仮想ブロックデバイスの領域の使用終了通知の待ち状態にある（ステップＳ６６）。この状態で、指定メンバノード（ストレージノード１０-M）のブロックデバイス制御装置１１-Mからマスタノードのアドレス情報がライトされた仮想ブロックデバイス（マスタノードアドレス要求メッセージの指定する仮想ブロックデバイス）の使用終了が通知されると、ブロックデバイス制御装置１１-1は処理を再開する。
【０１０８】
まずブロックデバイス制御装置１１-1は、使用終了が通知された仮想ブロックデバイスの領域からマスタノードのアドレス情報を取得する（ステップＳ６７）。次にブロックデバイス制御装置１１-1は、ＰＯＷＥＲ  ＣＯＮＤＩＴＩＯＮフィールド」が「ＩＤＬＥ（０ｘ２）」に設定された「ＳＴＡＲＴ  ＳＴＯＰ  ＵＮＩＴコマンド」により、マスタノードアドレス要求メッセージがライトされた指定メンバノードの仮想ブロックデバイスの使用終了を当該指定メンバノードに通知する（ステップＳ６８）。最後にブロックデバイス制御装置１１-1は、取得されたマスタノードのアドレス情報を、アドレス取得ルーチン（ステップＳ５４，Ｓ５５）を呼び出した初期化ルーチンに通知する（ステップＳ６９）。
【０１０９】
ブロックデバイス制御装置１１-1は、アドレス取得ルーチン（ステップＳ５４，Ｓ５５）の実行によりマスタノードのアドレス情報の取得に成功したならば、前述したように、当該マスタノードに対してストレージクラスタ構成情報の更新要求を送信するための構成情報更新要求送信ルーチンを実行する（ステップＳ５６）。この構成情報更新要求送信ルーチンは、図１５のフローチャートに示すアドレス取得ルーチンにおいて、マスタノードアドレス要求メッセージを、構成情報更新要求メッセージに置き換えたものと同様である。この構成情報更新要求送信ルーチンでは、構成情報更新要求メッセージ内に、構成情報を格納する永続化可能な制御データ共有用の仮想ブロックデバイスの論理ユニット番号ＬＵＮが予め記録される。
【０１１０】
最後に、制御データ共有用の仮想ブロックデバイスを複数のブロックデバイス制御装置で共有する処理について、ルーティングテーブルの初期化処理を例に説明する。  
本実施形態では、ストレージクラスタシステムの制御データの１つであるルーティングテーブルの情報が、図９のフローチャートにおけるステップＳ１１乃至Ｓ１４の手順により、マスタノードの永続化可能な制御データ共有用の仮想ブロックデバイスに格納される。
【０１１１】
さて、図１のストレージクラスタシステムにおいて、ストレージノード１０-2がマスタノードであり、ストレージノード１０-1及び１０-Mのようなストレージノード１０-2以外のノードが通常ノードであるものとする。ストレージノード１０-1及び１０-Mを含む通常ノードは、ルーティングテーブルの情報を格納する、マスタノード（ストレージノード１０-2）の永続化可能な仮想ブロックデバイスを共有する。このときの、図１のストレージクラスタシステムの状態を図１７に示す。
【０１１２】
ストレージノード１０-1及び１０-Mを含む通常ノードの各々は、マスタノードであるストレージノード１０-1の仮想ブロックデバイスからルーティングテーブルの情報をリードすることにより、自身のルーティングテーブルを初期化する。例えば、ストレージノード１０-1及び１０-Mは、図１７において、それぞれ矢印１７０-1及び１７０-Mで示されるように、ストレージノード１０-1の仮想ブロックデバイスからルーティングテーブルの情報をリードすることにより、自身のルーティングテーブルを初期化する。
【０１１３】
以下、通常ノードにおけるルーティングテーブルの初期化処理について、ストレージノード１０-1におけるルーティングテーブルの初期化処理を例に、図１８のフローチャートを参照して説明する。
【０１１４】
ます、ルーティングテーブルを格納するマスタノード（ストレージノード１０-2）の仮想ブロックデバイス（ルーティングテーブル用仮想ブロックデバイス）の論理ユニット番号ＬＵＮは、ストレージクラスタ構成情報内に記録されている。そこでストレージノード１０-1のブロックデバイス制御装置１１-1の仮想ブロックデバイス提供要求部４０２は仮想ブロックデバイス使用権取得リクエスト送信手段として機能して、ストレージクラスタ構成情報によって指定されるルーティングテーブル用仮想ブロックデバイスに対する共有可能な使用権を、「ＰＥＲＳＩＳＴＥＮＴ  ＲＥＳＥＲＶＥ  ＯＵＴコマンド」を用いて取得する（ステップＳ８１）。ここでは、リードによる初期化しか行わないため、排他的な使用権は不要である。
【０１１５】
ルーティングテーブル用仮想ブロックデバイスに対する使用権の取得に失敗した場合（ステップＳ８２）、ブロックデバイス制御装置１１-1はルーティングテーブル初期化処理の失敗を認識する（ステップＳ８３）。
【０１１６】
これに対し、ルーティングテーブル用仮想ブロックデバイスに対する使用権の取得に成功した場合（ステップＳ８２）、ブロックデバイス制御装置１１-1の第２のアクセス部４０４は、「ＲＥＡＤコマンド」を使用して当該仮想ブロックデバイスからルーティングテーブルの情報をリードして自身のルーティングテーブルにロードすることにより、当該自身のルーティングテーブルを初期化する（ステップＳ８４）。
【０１１７】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
【図面の簡単な説明】
【０１１８】
【図１】本発明の一実施形態に係るストレージクラスタシステムの構成を示すブロック図。
【図２】同実施形態で適用されるストレージクラスタ構成情報のデータ構造例を示す図。
【図３】図１に示される各ブロックデバイス制御装置１１-i（ｉ＝1〜Ｍ）の構成を示すブロック図。
【図４】ブロックデバイス制御装置１１-iの機能構成を示すブロック図。
【図５】同実施形態においてイニシエータが使用するＳＣＳＩコマンドの一覧を、当該イニシエータの動作と対応付けて示す図。
【図６】イニシエータとターゲットとの間で制御データを永続化して共有するための当該イニシエータの処理手順を示すフローチャート。
【図７】ＳＥＬＥＣＴ  ＲＥＰＯＲＴフィールドの値（０ｘＦ０〜０ｘＦ７）と、制御データのサイズ及び当該制御データの永続化の必要／不要との関係の一例を示す図。
【図８】全ての制御データに共通のデータフォーマットの一例を示す図。
【図９】イニシエータとターゲットとが同一である場合に、制御データの共有を実現するための当該イニシエータの処理手順を示すフローチャート。
【図１０】ブロックデバイス制御装置１１-2（マスタノード）が追加ノードにストレージクラスタ構成情報を設定する際のアクセス方向を示す図。
【図１１】追加ノード検出時の、ブロックデバイス制御装置１１-2（イニシエータ）の動作を説明するためのフローチャート。
【図１２】図１１のフローチャートに含まれているストレージクラスタ構成情報更新ルーチンの詳細な手順を示すフローチャート。
【図１３】図１１のフローチャートに含まれている排他的使用権取得ルーチンの詳細な手順を示すフローチャート。
【図１４】永続化された制御データに基づいてブロックデバイス制御装置の構成を初期化する処理の手順を示すフローチャート。
【図１５】図１４のフローチャートに含まれているアドレス取得ルーチン（ステップＳ５４）の詳細な手順を示すフローチャート。
【図１６】アドレス要求メッセージ受信時処理の手順を示すフローチャート。
【図１７】ストレージノード１０-1及び１０-Mを含む通常ノードが、ルーティングテーブルの情報を格納する、マスタノード（ストレージノード１０-2）の永続化可能な仮想ブロックデバイスを共有する場合のストレージクラスタシステムの状態を示す図。
【図１８】通常ノードにおけるルーティングテーブルの初期化処理の手順を示すフローチャート。
【符号の説明】
【０１１９】
１０-1〜１０-M，１０-i…ストレージノード、１１-1〜１１-M，１１-i…ブロックデバイス制御装置、１２…ハードディスクドライブ（ＨＤＤ）、２０…スイッチ、３０-1〜３０-N…ホストコンピュータ、４１…ホストインタフェース（ホストＩ／Ｆ）、４２…ディスクインタフェース（ディスクＩ／Ｆ）、１１１…ホストインタフェースコントローラ（ホストＩ／Ｆコントローラ）、１１２…ディスクインタフェースコントローラ（ディスクＩ／Ｆコントローラ）、１１３…入出力プロセッサ（Ｉ／Ｏプロセッサ）、１１４…ＲＯＭ、１１４ａ…制御プログラム、１１５…メモリ、１１５ａ…ディスクキャッシュ、１１６…バッテリ、１１７…ブロックデバイス用インタフェース（ブロックデバイス用Ｉ／Ｆ）、１１８…ブロックデバイス用インタフェース（ブロックデバイス用Ｉ／Ｆ）、１２０…ディスクアレイ、４０１…仮想ブロックデバイス提供部、４０２…仮想ブロックデバイス提供要求部、４０３…第１のアクセス部、４０４…第２のアクセス部、４０５…キャッシュ管理部。
【図１】
2008129854.tif 000003
【図２】
2008129854.tif 000004
【図３】
2008129854.tif 000005
【図４】
2008129854.tif 000006
【図５】
2008129854.tif 000007
【図６】
2008129854.tif 000008
【図７】
2008129854.tif 000009
【図８】
2008129854.tif 000010
【図９】
2008129854.tif 000011
【図１０】
2008129854.tif 000012
【図１１】
2008129854.tif 000013
【図１２】
2008129854.tif 000014
【図１３】
2008129854.tif 000015
【図１４】
2008129854.tif 000016
【図１５】
2008129854.tif 000017
【図１６】
2008129854.tif 000018
【図１７】
2008129854.tif 000019
【図１８】
2008129854.tif 000020