以下、本発明の実施の形態につき図面を参照して説明する。
図1は本発明の一実施形態に係るストレージクラスタシステムの構成を示すブロック図である。図1に示すストレージクラスタシステムは、M台のストレージノード(ストレージ)10-1,10-2,…,10-Mから構成される。ストレージノード10-1,10-2,…,10-Mは、それぞれ、ブロックデバイス制御装置11-1,11-2,…,11-M及び複数のブロックデバイスを含む。ブロックデバイスは、ハードディスクドライブ(HDD)12のようなストレージリソースである。ブロックデバイス制御装置11-1〜11-Mの各々は、複数のブロックデバイス(HDD12)と接続されている。複数のHDD12は、一般に少なくとも1つのディスクアレイを構成する。
ブロックデバイス制御装置11-1,11-2,…,11-Mは、スイッチ20を介して相互接続されている。ブロックデバイス制御装置11-1,11-2,…,11-Mには、ストレージノード10-1,10-2,…,10-Mを利用するN台のホストコンピュータ30-1,30-2,…,30-Nがスイッチ20を介して接続されている。
本実施形態では、ホストコンピュータ30-1〜30-Nとブロックデバイス制御装置11-1〜11-Mとの間を接続するインタコネクト用インタフェース(I/F)として、SCSI(Small Computer System Interface)プロトコルを適用するブロックデバイス用I/Fであるファイバチャネル(Fibre Channel:FC)、或いはiSCSIを想定している。インタコネクト用インタフェースがFCの場合、スイッチ20には例えばファブリックスイッチが用いられる。インタコネクト用インタフェースがiSCSIの場合、スイッチ20には例えばイーサネット(登録商標)のスイッチングハブが用いられる。
ホストコンピュータ30-1〜30-Nの各々は、M台のストレージノード(ストレージ)10-1〜10-Mを、仮想的な1つの大容量ストレージとして認識する。ホストコンピュータ30-1〜30-Nは、この大容量ストレージに対するリード/ライト要求を、M台のストレージノード10-1〜10-Mのうちの、予め設定された1台のストレージノードに対して発行する。この予め設定されたストレージノードを代表ノードと呼ぶ。
一方、ストレージクラスタシステム内部では、ストレージノード10-1〜10-Mのブロックデバイス制御装置11-1〜11-Mは、当該ストレージノード10-1〜10-Mが有するストレージリソースを、それぞれ仮想的なブロックデバイス(仮想ブロックデバイス)として管理する。ここでは、ストレージノード10-1〜10-Mにそれぞれ含まれている複数のHDD12で構成されるディスクアレイの幾つかの領域が、仮想ブロックデバイスとして管理される。
図1のストレージクラスタシステムでは、当該システムの構成情報(ストレージクラスタ構成情報)が制御データの1つとして管理される。制御データとは、ストレージクラスタシステムを構成するストレージノード10-1〜10-Mのブロックデバイス制御装置11-1〜11-Mの間でホストコンピュータ30-1〜30-Nから独立に制御するのに用いられるデータを指す。本実施形態では、ブロックデバイス制御装置11-1〜11-Mの制御のために当該ブロックデバイス制御装置11-1〜11-Mの間で送受信されるメッセージも制御データの1つとして管理される。
図2は、ストレージクラスタ構成情報のデータ構造例を示す。ストレージクラスタ構成情報は、マスタノードアドレス、ルーティングテーブル及びノード構成情報を含む。マスタノードアドレスは、ストレージクラスタシステムにおいてマスタとなるストレージノードのアドレスを示す。
ルーティングテーブルは、図1のサーバクラスタシステムによってホストコンピュータ30-1〜30-Nに対して提供される仮想ブロックデバイス(つまりホストコンピュータ30-1〜30-Nから認識可能な仮想ブロックデバイス)毎に、論理ユニット番号(Logical Unit Number)LUNx及び識別情報IDxの対と、論理ユニット番号LUNy及び識別情報IDxの対とを対応付けて保持する。LUNx及びIDxは、それぞれ、ホストコンピュータが認識している仮想ブロックデバイスの論理ユニット番号及び当該ホストコンピュータのID(SCSI−ID)を示すアドレス情報である。LUNy及びIDyは、対応する仮想ブロックデバイスが実際にマッピングされているブロックデバイスの論理ユニット番号及び当該ブロックデバイスを有するストレージノードのブロックデバイス制御装置のID(SCSI−ID)を示すアドレス情報である。
ノード構成情報は、図1のストレージクラスタシステムを構成する各ストレージノード10-i(i=1,2,…,M)について、当該ノード10-iのノード番号Nz、当該ノード10-iのブロックデバイス制御装置11-iの識別情報IDz及び当該ノード10-iが有する全てのブロックデバイスの論理ユニット番号LUNzを含む。
ホストコンピュータ30-1〜30-Nから代表ノードに対して発行されるリード/ライト要求には、当該代表ノードのID及び当該ホストコンピュータ30-1〜30-Nから認識可能な仮想ブロックデバイスの論理ユニット番号LUNが含まれている。代表ノードは、ホストコンピュータ30-j(j=1,2,…,N)からリード/ライト要求が送られた場合、自身が有するルーティングテーブルを参照する。これにより代表ノードは、ホストコンピュータ30-jからのリード/ライト要求を、当該リード/ライト要求に含まれているID及びLUNに一致するIDx及びLUNxと対応付けられている識別情報IDy及び論理ブロック番号LUNyへのリード/ライト要求に変換する。IDy及びLUNyは、ホストコンピュータ30-jからのリード/ライト要求に含まれるLUN(=LUNx)によって指定される仮想ブロックデバイスが実際にマッピングされているストレージノード内のブロックデバイス制御装置の、それぞれ識別情報(SCSI−ID)及び論理ユニット番号を示す。このブロックデバイス制御装置をデータノードと呼ぶならば、変換されたリード/ライト要求をデータノードへのリード/ライト要求と呼ぶことができる。
代表ノードは、データノードへのリード/ライト要求を当該データノードに転送し、当該要求で指定されたリード/ライトデータをホストコンピュータ30-jとデータノードとの間で中継する。なお、ホストコンピュータ30-1〜30-Nに、それぞれ異なる代表ノードを割り当てることも可能である。
図3は、図1に示される各ブロックデバイス制御装置11-i(i=1〜M)の構成を示すブロック図である。
各ブロックデバイス制御装置11-iは、ホストインタフェースコントローラ(ホストI/Fコントローラ)111、ディスクインタフェースコントローラ(ディスクI/Fコントローラ)112、入出力プロセッサ(I/Oプロセッサ)113、ROM114、メモリ115及びバッテリ116から構成される。
ホストI/Fコントローラ111は、I/Oプロセッサ113とホストコンピュータ30-jとをホストI/F(ホストインタフェース)41を介して接続する。ディスクI/Fコントローラ112は、I/Oプロセッサ113とHDD12とをディスクI/F(ディスクインタフェース)42を介して接続する。本実施形態では、ホストI/F41としてFC或いはiSCSIを想定し、ディスクI/F42としてFC、パラレルSCSI、SAS(Serial Attached SCSI)、或いはSATA(Serial ATA)I/Fを想定している。ホストI/Fコントローラ111(及びホストI/F41)と、ディスクI/Fコントローラ112(及びディスクI/F42)は、それぞれ、ブロックデバイス用I/F117及びブロックデバイス用I/F118として機能する。
I/Oプロセッサ113及びホストI/Fコントローラ111(ブロックデバイス用I/F117)の間、並びにI/Oプロセッサ113及びディスクI/Fコントローラ112(ブロックデバイス用I/F118)の間は、PCI(Peripheral Component Interconnect)バスのようなインタコネクト用インタフェースで接続される。
各ブロックデバイス制御装置11-iは、所定の制御プログラム114aに従って制御される。この制御プログラム114aはROM114に予め格納されており、ブロックデバイス制御装置11-iの起動時に当該ROM114からメモリ115にロードされる。
I/Oプロセッサ113は、メモリ115にロードされた制御プログラム114aを実行する。I/Oプロセッサ113は、割り込みコントローラ、パリティ計算モジュール及びDMAコントローラのようなハードウェア(内部H/W)を内蔵する。パリティ計算モジュールは、複数のHDD12から構成されるディスクアレイ、例えばRAID5の冗長構成を適用するRAID(Redundant Array of Inexpensive DisksまたはRedundant Array of Independent Disks)のためのパリティを計算する。I/Oプロセッサ113は、制御プログラム114aの実行により、内部H/Wと、ホストI/Fコントローラ111及びディスクI/Fコントローラ112のような外部のハードウェア(外部H/W)とを制御する。このような制御により、I/Oプロセッサ113は複数のHDD12から構成されるディスクアレイを仮想的なブロックデバイスとしてホストコンピュータ30-jに提供する。
メモリ115は、バッテリ116によってバックアップされている。これにより、ブロックデバイス制御装置11-iの電源断時にメモリ115に格納されているデータが消失するのが防止される。メモリ115内の一部の区画は、ホストコンピュータ30-jに提供する仮想ブロックデバイスのデータを保持するディスクキャッシュ115aとして使用される。
図4は、ブロックデバイス制御装置11-i内のI/Oプロセッサ113が制御プログラム114aを実行することにより実現される、当該ブロックデバイス制御装置11-iの機能構成を主として示すブロック図である。
ブロックデバイス制御装置11-iは、図2に示される、ディスクキャッシュ115a、ブロックデバイス用I/F117及びブロックデバイス用I/F118に加えて、仮想ブロックデバイス提供部401、仮想ブロックデバイス提供要求部402、第1のアクセス部403、第2のアクセス部404及びキャッシュ管理部405を含む。
仮想ブロックデバイス提供部401は、外部のブロックデバイス制御装置11-j(i=1,2,…,M、但しj≠i)との間で制御データを共有するために、確保されたストレージリソースから構成される制御データ共有用の仮想ブロックデバイスをブロックデバイス用I/F117経由で当該ブロックデバイス制御装置11-jに提供する。本実施形態において、ストレージリソースは、図1に示されるストレージノード10-i内の複数のHDD12から構成されるディスクアレイ120の一部領域である。
仮想ブロックデバイス提供要求部402は、外部のブロックデバイス制御装置11-jからブロックデバイス制御装置11-iに対して制御データ共有用の仮想ブロックデバイスを提供させて当該仮想ブロックデバイスを利用する。
第1のアクセス部403は、仮想ブロックデバイス提供部401によって外部のブロックデバイス制御装置11-jに提供される仮想ブロックデバイスを構成するストレージリソースに対してアクセスする。第2のアクセス部404は、外部のブロックデバイス制御装置11-jによって提供される制御データ共有用の仮想ブロックデバイスに対して、ブロックデバイス用I/F117経由でアクセスする。
キャッシュ管理部405は、ディスクアレイ120の領域のディスクキャッシュ115aへのマッピングを管理する。キャッシュ管理部405は、例えば、制御データ共有用の仮想ブロックデバイスの全領域をディスクキャッシュ115a上の特定の連続領域に割り当てる。
本実施形態では、ブロックデバイス制御装置間の通信が、送信側(イニシエータ)と受信側(ターゲット)との間のSCSIプロトコルによるデータ転送で実現される。図5は、本実施形態においてイニシエータが使用するSCSIコマンドの一覧(SCSIコマンド一覧)を、当該イニシエータの動作と対応付けて示す。図5に示されるコマンドは全て、「SCSI Primary Commands-3」或いは「SCSI Block Commands-2」のようなSCSIプロトコルの規格書で規定されている。
本実施形態では、イニシエータ(イニシエータとなるストレージノード)とターゲット(ターゲットとなるストレージノード)との間で制御データが共有される。この制御データの共有は、イニシエータが作成した制御データ(共有データ)をターゲットにライトする第1の手法、またはターゲットが作成した制御データをイニシエータが当該ターゲットからリードする第2の手法によって実現される。
また本実施形態では、イニシエータ及びターゲットの間でSCSIプロトコルに従って(制御データとしての)メッセージがブロックデバイス用I/F117経由で送受信される。このメッセージの送受信という通信形態は、イニシエータが作成したメッセージ(メッセージ形式の制御データ)をターゲットにライトして、当該イニシエータ及びターゲットの間で当該メッセージ(メッセージ形式の制御データ)を共有することにより実現される。このようにブロックデバイス用I/F117を介して制御データの通信を行うことで、例えば、ブロックデバイス制御装置が本来持つ、信頼性の高い通信を実現する機能やディスクキャッシュによるアクセス性能を改善する機能をそのまま適用することができる。
ターゲットとなるストレージノード10-pのブロックデバイス制御装置11-p(pは1〜Mのいずれか)に含まれている仮想ブロックデバイス提供部401は、ストレージノード10-qのブロックデバイス制御装置11-q(qは1〜Mのいずれか)に提供されるべき仮想ブロックデバイスを構成する内部のリソース(つまり仮想ブロックデバイスのための領域)を当該ブロックデバイス制御装置11-p(を含むストレージノード10-p)の起動時に確保する。仮想ブロックデバイスの容量と数は、ストレージノード10-p(内の例えばディスクアレイ120)に格納されている当該ストレージノード10-pに固有の装置構成情報によって示される。つまりブロックデバイス制御装置11-pの仮想ブロックデバイス提供部401は、当該ブロックデバイス制御装置11-pの起動時に仮想ブロックデバイス生成手段として機能して、ディスクアレイ120に格納されている装置構成情報に基づき制御データ共有用の仮想ブロックデバイスを予め生成する。
装置構成情報は、ストレージノード10-pが単体で起動するのに必要な情報であり、当該ストレージノード10-p内のHDD12の数及び各HDD12の容量と、ディスクアレイの数及び各ディスクアレイの論理ユニット番号LUNと、仮想ブロックデバイスの数、各仮想ブロックデバイスの論理ユニット番号(LUN)及び容量(サイズ)の情報を含む。各仮想ブロックデバイスの容量と仮想ブロックデバイスの数とは、ストレージクラスタシステム全体の要求仕様に基づき予め算定される。
このように本実施形態においては、ブロックデバイス制御装置11-pの起動時に、装置構成情報に基づき、ストレージノード10-p内部のリソースを確保して、指定された容量/個数で制御データ共有用の仮想ブロックデバイスが生成される。この仮想ブロックデバイスに格納される制御データをブロックデバイス制御装置11-1〜11-Mが共有することにより、ストレージクラスタシステム全体として必要な処理を実現することができる。
ここで、イニシエータとターゲットとの間で制御データを永続化して共有するための制御データ共有処理について、当該イニシエータの動作を中心に、図6のフローチャートを参照して説明する。ここでは、イニシエータがストレージノード10-2(のブロックデバイス制御装置11-2)、ターゲットがストレージノード10-1(のブロックデバイス制御装置11-1)であるものとする。なお、制御データの永続化とは、メモリ115(内に確保されたディスクキャッシュ115a)上の制御データを、HDD12(の群から構成されるディスクアレイ120)に書き込むことである。
(1)制御データ共有用の仮想ブロックデバイスのリストの取得
ブロックデバイス制御装置11-2(イニシエータ)の仮想ブロックデバイス提供要求部402は、ストレージノード10-1のブロックデバイス制御装置11-1(ターゲット)が提供する制御データ共有用の仮想ブロックデバイスに関する情報のリスト(制御データ共有用の仮想ブロックデバイスのリスト)を、当該ブロックデバイス制御装置11-1(ターゲット)から取得する(ステップS1)。このリストの取得は、図5に示すSCSIコマンド一覧中の「REPORT LUNSコマンド」を用いて、次のようにして実現される。
まず、ブロックデバイス制御装置11-2(イニシエータ)の仮想ブロックデバイス提供要求部402は仮想ブロックデバイス情報通知リクエスト送信手段として機能して、予め定められた、ブロックデバイス制御装置11-1(ターゲット)の論理ユニット番号LUN0に対し、制御データ共有用の仮想ブロックデバイスに関する情報の通知を要求するための仮想ブロックデバイス情報通知リクエストとしての「REPORT LUNSコマンド」をブロックデバイス用I/F117経由で発行する。LUN0は、ブロックデバイス制御装置11-1〜11-Mに共通の特定の論理ユニット番号(代表論理ユニット番号)である。
「REPORT LUNSコマンド」は、例えば1バイトの「SELECT REPORTフィールド」を含む。ブロックデバイス制御装置11-2(イニシエータ)は、この「SELECT REPORTフィールド」の値を使用して、共有される制御データのサイズ及び当該制御データの永続化が必要であるか否か(不要であるか)を指定する。図7は、「SELECT REPORTフィールド」の値(0xF0〜0xF7)と、制御データのサイズ及び当該制御データの永続化の必要/不要との関係の一例を示す。
永続化が必要な制御データ共有用の仮想ブロックデバイスの領域は、複数のHDD12から構成されるディスクアレイ120の一部の領域にマッピングされている。このため、仮想ブロックデバイスへライトされた制御データ(共有データ)をディスクアレイ120の該当する領域にもライトすることで、当該制御データを永続化することができる。
ブロックデバイス制御装置11-1(ターゲット)の仮想ブロックデバイス提供部401はブロックデバイス制御装置11-2(イニシエータ)からの「REPORT LUNSコマンド」を受け取ると、当該コマンドの「SELECT REPORTフィールド」の指定に適合し、且つ他のイニシエータが排他的な使用権を設定していない仮想ブロックデバイス(つまり使用可能な仮想ブロックデバイス)を検索する。そしてブロックデバイス制御装置11-1(ターゲット)の仮想ブロックデバイス提供部401は仮想ブロックデバイス情報通知手段として機能して、使用可能な仮想ブロックデバイスのリストを「REPORT LUNSパラメータ」として生成し、当該リストをブロックデバイス制御装置11-2(イニシエータ)へ送信する。使用可能な仮想ブロックデバイスのリストは、当該仮想ブロックデバイスにアクセスするためのアドレス情報としての論理ユニット番号LUN(つまり当該仮想ブロックデバイスのLUN)、並びに当該仮想ブロックデバイスの容量及び使用権の情報を含む。
ブロックデバイス制御装置11-2(イニシエータ)の仮想ブロックデバイス提供要求部402は、ブロックデバイス制御装置11-1(ターゲット)から送られる「REPORT LUNSパラメータ」を受信することにより、当該パラメータで示される仮想ブロックデバイスのリストを取得する。
(2)仮想ブロックデバイスの使用権の取得
ブロックデバイス制御装置11-2(イニシエータ)の仮想ブロックデバイス提供要求部402は選択手段として機能し、上記取得されたリストから、制御データを共有するために使用可能な制御データ共有用の仮想ブロックデバイスを選択する。以後、ブロックデバイス制御装置11-2(イニシエータ)は、論理ユニット番号LUN0ではなくて、選択された制御データ共有用の仮想ブロックデバイスのLUNに対して、SCSIコマンドを発行する。ここでは、選択された仮想ブロックデバイスが、ストレージノード10-1内の複数のHDD12から構成されるディスクアレイ120(の例えば一部の領域)であるものとする。
次に、ブロックデバイス制御装置11-2(イニシエータ)の仮想ブロックデバイス提供要求部402は、選択された制御データ共有用の仮想ブロックデバイスの排他的な使用権または共有可能な使用権を取得する(ステップS2)。この使用権の取得は、図5に示すSCSIコマンド一覧中の「PERSISTENT RESERVE OUTコマンド」を用いて次のように実現される。
「PERSISTENT RESERVE OUTコマンド」は「TYPEフィールド」を含む。「TYPEフィールド」は、排他的な使用権または共有可能な使用権のいずれを取得したいのか、つまり取得されるべき使用権の種類を指定する。ブロックデバイス制御装置11-2(イニシエータ)の仮想ブロックデバイス提供要求部402は仮想ブロックデバイス使用権取得リクエスト送信手段として機能して、この「TYPEフィールド」を含む「PERSISTENT RESERVE OUTコマンド」を、選択された制御データ共有用の仮想ブロックデバイスの使用権を要求するための仮想ブロックデバイス使用権取得リクエストとしてブロックデバイス用I/F117経由でブロックデバイス制御装置11-1(ターゲット)に発行する。
するとブロックデバイス制御装置11-1(ターゲット)の仮想ブロックデバイス提供部401は使用権設定手段として機能して、「PERSISTENT RESERVE OUTコマンド」の「TYPEフィールド」で指定された使用権が設定可能であれば、当該使用権をブロックデバイス制御装置11-2(イニシエータ)に設定(付与)する。これによりブロックデバイス制御装置11-2(イニシエータ)の仮想ブロックデバイス提供要求部402は、選択された仮想ブロックデバイスの使用権(排他的な使用権または共有可能な使用権)をブロックデバイス制御装置11-1(ターゲット)の仮想ブロックデバイス提供部401から取得する。
(3)仮想ブロックデバイスの領域のディスクキャッシュ上へのマッピングの指示
次にブロックデバイス制御装置11-2(イニシエータ)の仮想ブロックデバイス提供要求部402は、選択された制御データ共有用の仮想ブロックデバイスの領域をディスクキャッシュ115aの連続領域にマッピングすることをブロックデバイス制御装置11-1(ターゲット)に指示する(ステップS3)。この指示は、図5に示すSCSIコマンド一覧中の「START STOP UNITコマンド」を用いて、次のようにして実現される。
「START STOP UNITコマンド」は「POWER CONDITIONフィールド」を含む。ブロックデバイス制御装置11-2(イニシエータ)は、この「POWER CONDITIONフィールド」が「ACTIVE(0x1)」に設定された「START STOP UNITコマンド」をブロックデバイス用I/F117経由でブロックデバイス制御装置11-1(ターゲット)に発行する。これによりブロックデバイス制御装置11-2(イニシエータ)は、選択された仮想ブロックデバイスの領域をディスクキャッシュ115aの連続領域にマッピングすることを、ブロックデバイス制御装置11-1(ターゲット)に対して指示することができる。この「START STOP UNITコマンド」に基づき、ブロックデバイス制御装置11-1(ターゲット)のキャッシュ管理部405は、当該コマンドで指定された仮想ブロックデバイスの全領域をディスクキャッシュ115a上の特定の連続領域に割り当てる。
(4)仮想ブロックデバイスに対する制御データのライト
ブロックデバイス制御装置11-2(イニシエータ)が上述の「START STOP UNITコマンド」を発行すると、以後、当該ブロックデバイス制御装置11-2(イニシエータ)の第2のアクセス部404による、制御データ共有用の仮想ブロックデバイスに対するライト/リードが可能になる。この仮想ブロックデバイスに対する制御データ(共有データ)のライトは、通常のWRITEコマンドを使用して実行することができる。
(5)仮想ブロックデバイスからの制御データのリード
制御データ共有用の仮想ブロックデバイスからの制御データ(共有データ)のリードは、通常のREADコマンドを使用して実行することができる。
(6)制御データの使用開始の指示
実際に、ブロックデバイス制御装置11-1(ターゲット)が、ディスクキャッシュ115a上にマッピングされた仮想ブロックデバイスの領域に格納されている制御データ(共有データ)の利用を開始するのは、次に述べるタイミングからである。このタイミングとは、上述の制御データの使用開始が指示されたことを、ブロックデバイス制御装置11-1(ターゲット)が確認した時点である。そのため、ブロックデバイス制御装置11-2(イニシエータ)の仮想ブロックデバイス提供要求部402は、ブロックデバイス制御装置11-1(ターゲット)に対して制御データの使用開始を指示する(ステップS4)。
制御データの使用開始の指示は、図5に示すSCSIコマンド一覧中の「MODE SELECTコマンド」を用いて実現される。更に具体的に述べるならば、制御データの使用開始の指示は、キャッシングモードページのWCEビット(ディスクキャッシュ上のページの設定変更を指示するビット)が1に設定された「MODE SELECTコマンド」を、ブロックデバイス制御装置11-2(イニシエータ)の仮想ブロックデバイス提供部401がブロックデバイス制御装置11-1(ターゲット)に対してブロックデバイス用I/F117経由で発行することにより実現される。ブロックデバイス制御装置11-1(ターゲット)は、このWCEビットが1に設定された「MODE SELECTコマンド」を受信すると、制御データ(共有データ)の使用を開始できる。
(7)制御データ共有用の仮想ブロックデバイスがマッピングされているディスクアレイ120への制御データ書き出し指示
永続データを共有する場合、データを更新した際に当該更新されたデータを確実に永続化する必要がある。このため、ブロックデバイス制御装置11-2(イニシエータ)は、ブロックデバイス制御装置11-1(ターゲット)側の制御データ共有用の仮想ブロックデバイスの領域がマッピングされているディスクキャッシュ115a上の制御データを更新をした際には、当該仮想ブロックデバイスがマッピングされているストレージノード10-1のディスクアレイ120に当該ディスクキャッシュ115a上の制御データを書き出すことを、当該ブロックデバイス制御装置11-1(ターゲット)に対してブロックデバイス用I/F117経由で指示する(ステップS5)。この指示には、図5に示すSCSIコマンド一覧中の「SYNCHRONIZE CACHEコマンド」が用いられる。
(8)制御データの使用開始の指示
以上に述べたイニシエータとターゲットとの間の一連の通信処理が終了して、制御データ共有用の仮想ブロックデバイスが不要になったものとする。このような場合、イニシエータであるブロックデバイス制御装置11-2の仮想ブロックデバイス提供要求部402は、ブロックデバイス制御装置11-1(ターゲット)に対して、制御データの使用終了を指示する(ステップS6)。この制御データの使用終了の指示は、「POWER CONDITIONフィールド」が「IDLE(0x2)」に設定された「START STOP UNITコマンド」を、ブロックデバイス制御装置11-2(イニシエータ)がブロックデバイス用I/F117経由でブロックデバイス制御装置11-1(ターゲット)に対して発行することにより実現される。
ブロックデバイス制御装置11-1(ターゲット)の仮想ブロックデバイス提供部401は、ブロックデバイス制御装置11-2(イニシエータ)から「POWER CONDITIONフィールド」が「IDLE(0x2)」に設定された「START STOP UNITコマンド」を受信すると、当該ブロックデバイス制御装置11-1(ターゲット)のディスクキャッシュ115a上にマッピングされた仮想ブロックデバイスの使用権を持ったイニシエータが存在しないことを確認する。この確認の後、ブロックデバイス制御装置11-1(ターゲット)の仮想ブロックデバイス提供部401は、ディスクキャッシュ115a上にマッピングされた仮想ブロックデバイスの領域をキャッシュ管理部405により解放させて、制御データ(共有データ)の使用を終了させる。
図8は、全ての制御データ(共有データ)に共通のデータフォーマットの一例を示す。本実施形態では、制御データは8バイトのヘッダ情報が設定される所定の形式のヘッダ部(共通ヘッダ部)81を持つ。ヘッダ部81(ヘッダ情報)の形式は、全ての制御データに共通である。ヘッダ部81の最初の4バイトは制御データのタイプ(制御データタイプ)を表すタイプ情報であり、後続の4バイトは当該制御データのバージョン(制御データバージョン)を表すバージョン情報である。実際の制御データ(実制御データ)は、ヘッダ部81に後続する領域(実制御データ領域)82に格納される。
さてブロックデバイス制御装置11-1(ターゲット)の仮想ブロックデバイス提供要求部402を実現するI/Oプロセッサ113は、WCEビットが1に設定された「MODE SELECTコマンド」をブロックデバイス制御装置11-2(イニシエータ)から受信すると、制御プログラム114aに従って、制御データ(共有データ)のタイプとバージョンとをチェックする。そしてI/Oプロセッサ113は、このチェックにより、制御データがサポート可能なデータであるかを判定する。
サポート可能なデータである場合、キャッシュ管理部405を実現するI/Oプロセッサ113は、該当するデータへのポインタに、制御データ共有用の仮想ブロックデバイスをマッピングしたディスクキャッシュ115a上の連続領域の先頭アドレスを代入する。本実施形態では、このポインタは、予めグローバル変数として定義されている。I/Oプロセッサ113は、以後、このポインタを用いた制御データ(共有データ)への間接参照によりストレージクラスタシステムとしての各種の処理を行う。これに対し、サポート可能でない場合、I/Oプロセッサ113(ターゲットのI/Oプロセッサ113)は、ブロックデバイス制御装置11-2(イニシエータ)からの「MODE SELECTコマンド」に対する応答として、その旨を示す「CHECK CONDITIONステータス」を当該ブロックデバイス制御装置11-2(イニシエータ)に通知する。
本実施形態において、イニシエータとターゲットとの間の一連の通信処理で送受信される全てのSCSIコマンドは、前述したように「SCSI Primary Commands-3」或いは「SCSI Block Commands-2」のようなSCSIプロトコルの規格書で規定されている。これらのSCSIコマンドの送受信処理は、イニシエータ及びターゲットの各ブロックデバイス制御装置内のI/Oプロセッサ113が制御プログラム114aを実行することによって制御される。このため本実施形態においては、SCSIコマンドの送受信処理に専用のH/Wは不要である。
また本実施形態では、ストレージノードの機能として本来持つディスクアレイ120の機構を利用し、制御データ共有用の仮想ブロックデバイスが当該ストレージノード内のディスクアレイ120にマッピングされる。これにより、制御データ(共有データ)を、冗長構成により信頼性を高めた永続データとして扱うことが可能である。
また本実施形態では、ストレージノードにおけるディスクキャッシュ115aの機能として本来持つホストコンピュータ間でのアクセスの排他を制御する機構を利用し、当該ストレージノード外部のブロックデバイス制御装置からのアクセスと当該ストレージノード内部のブロックデバイス制御装置からのアクセスとの排他が制御される。これにより、ストレージノードの外部と内部とで同時に制御データ(共有データ)へのアクセスが発生した際も、当該制御データ(共有データ)の一貫性を保持することが可能となる。
更に本実施形態においては、仮想ブロックデバイスがマッピングされたディスクキャッシュ115a上の連続領域の先頭アドレスをポインタに設定した以降、I/Oプロセッサ113(によって実現される第1のアクセス部403)は、当該ポインタに基づき直接に制御データ(共有データ)アクセスを行うことが可能となる。その理由は、仮想ブロックデバイスのデータがディスクキャッシュ115a上で分散して記憶されていないことによる。そのため、制御データをディスクアレイ120から一旦ディスクキャッシュ115a上にロードし、そのロードした制御データを予め確保したバッファにコピーするという処理が不要となり、制御データへの高速アクセスが可能となる。ここで、ディスクキャッシュ115a上の上記連続領域を固定し、当該連続領域の制御データがディスクアレイ120に追い出されないようにするならば、当該制御データへの一層の高速アクセスが可能となる。
なお、図5においてイニシエータの動作と対応付けて示されるSCSIコマンドは一例である。この図5に示されるSCSIコマンド以外のSCSIコマンドを、図5に示されるイニシエータの動作と対応付けて定義する(マッピングする)ことも可能である。つまり、本実施形態で適用されるブロックデバイス制御装置間の通信では、図5に示されるイニシエータの動作(8つの動作)を実現する機能をブロックデバイス制御装置に持たせた点が重要である。また本実施形態では、ターゲットとなる(ストレージノードの)ブロックデバイス制御装置で制御データ(共有データ)の内容を解釈して処理を実行するために必要な、当該制御データのデータフォーマット(図8参照)、特にヘッダ部81が重要である。
上記実施形態では、イニシエータ(となるブロックデバイス制御装置)とターゲット(となるブロックデバイス制御装置)とが異なる場合を想定している。しかし、イニシエータとターゲットとが同一であっても構わない、以下、イニシエータとターゲットとが同一である場合に、制御データの共有を実現するための制御データ共有処理について、図9のフローチャートを参照して説明する。ここでは、イニシエータとターゲットとが共にブロックデバイス制御装置11-1であるものとする。
まず、ブロックデバイス制御装置11-1は、自身の提供する制御データ共有用の仮想ブロックデバイスを検索する(ステップS11)。次にブロックデバイス制御装置11-1は、検索された仮想ブロックデバイスのうちの使用可能な仮想ブロックデバイスの使用権を取得する(ステップS12)。
ブロックデバイス制御装置11-1は、使用権が取得された仮想ブロックデバイスの領域を、当該ブロックデバイス制御装置11-1内部のディスクキャッシュ115aの連続領域にマッピングする(ステップS13)。次にブロックデバイス制御装置11-1は、上記マッピングされたディスクキャッシュ115a上の領域に制御データ(共有データ)を作成する(ステップS14)。
このディスクキャッシュ115a上に作成された制御データを、イニシエータとターゲットとが異なる場合と同様に、制御データ共有用の仮想ブロックデバイスがマッピングされているディスクアレイ120に書き込むならば、つまり制御データ共有用の仮想ブロックデバイスを内部のディスクアレイ120にマッピングするならば、制御データを永続化することが可能となる。
ブロックデバイス制御装置11-1の仮想ブロックデバイス提供部401はアドレス通知手段として機能して、図5に示すSCSIコマンド一覧中の「REPORT LUNSコマンド」を用いた通信により、外部のブロックデバイス制御装置11-2〜11-Mに制御データ共有用の仮想ブロックデバイスの論理ユニット番号LUN(アドレス情報)を通知する(ステップS15)。外部のブロックデバイス制御装置11-2〜11-Mは、通知された論理ユニット番号LUNで指定される仮想ブロックデバイスへのリードアクセスを行って、そのリードデータ(つまり制御データ)を当該制御装置11-2〜11-Mのメモリ115内に保持することで、ブロックデバイス制御装置11-1との間で制御データを共有する(ステップS16)。
本実施形態において、制御データ共有用の仮想ブロックデバイスは、前記したようにターゲットの起動時に、当該ターゲットの仮想ブロックデバイス提供部401が仮想ブロックデバイス生成手段として機能することにより生成される。しかし以下に述べるように、仮想ブロックデバイスが、イニシエータからの要求に基づいてシステム稼動中に動的に生成されても構わない。
まず、イニシエータの仮想ブロックデバイス提供要求部402は仮想ブロックデバイス生成リクエスト送信手段として機能して、ターゲットの論理ユニット番号LUN0に対し、「MODEフィールド」が「Vendor specific(01h)」に設定された第1の「WRITE BUFFERコマンド」を発行する。この第1の「WRITE BUFFERコマンド」は、所望の容量の制御データ共有用の仮想ブロックデバイスの生成をターゲットに要求するための仮想ブロックデバイス生成リクエストとして用いられる。ここでは第1の「WRITE BUFFERコマンド」の発行により、ベンダ固有のモードで必要な制御データ共有用の仮想ブロックデバイスの容量を示す情報が設定されたバッファ情報がターゲットに通知される。
ターゲットの仮想ブロックデバイス提供部401は、イニシエータの仮想ブロックデバイス提供要求部402からの第1の「WRITE BUFFERコマンド」を受けて仮想ブロックデバイス生成手段として機能して、当該コマンドで指定される容量の内部のリソースを確保することにより、制御データ共有用の仮想ブロックデバイスを生成する。すると、ターゲットの仮想ブロックデバイス提供部401はアドレス生成手段として機能して、生成された制御データ共有用の仮想ブロックデバイスにアクセスするための論理ユニット番号LUN(アドレス情報)を生成する。更に、ターゲットの仮想ブロックデバイス提供部401は使用権設定手段として機能して、第1の「WRITE BUFFERコマンド」を発行したイニシエータに、上記生成された制御データ共有用の仮想ブロックデバイスの使用権を設定する。そしてターゲットの仮想ブロックデバイス提供部401は、「GOODステータス」をイニシエータに送信する。
イニシエータの仮想ブロックデバイス提供要求部402は、このGOODステータスを受信することにより、制御データ共有用の仮想ブロックデバイスの生成が成功したことを認識する。するとイニシエータの仮想ブロックデバイス提供要求部402は、生成された制御データ共有用の仮想ブロックデバイスに関する情報の通知を要求するための「REPORT LUNSコマンド」(仮想ブロックデバイス情報通知リクエスト)をブロックデバイス用I/F117経由でターゲットに発行する。
ターゲットの仮想ブロックデバイス提供部401は、イニシエータの仮想ブロックデバイス提供要求部402から「REPORT LUNSコマンド」を受けてアドレス通知手段として機能して、先の第1の「WRITE BUFFERコマンド」に基づいて生成された制御データ共有用の仮想ブロックデバイスに関する、当該仮想ブロックデバイスにアクセスするための当該仮想ブロックデバイスの論理ユニット番号LUN(アドレス情報)を含む情報を当該イニシエータに通知する。イニシエータの第2のアクセス部404は、ターゲットの仮想ブロックデバイス提供要求部402から通知された論理ユニット番号LUNに基づき、第1の「WRITE BUFFERコマンド」に応じて生成された制御データ共有用の仮想ブロックデバイスにアクセスする。
このように、ストレージクラスタシステムの稼動中に制御データを共有する必要が生じたイニシエータが、ターゲットに対して仮想ブロックデバイス生成を要求することにより、動的に制御データ共有用の仮想ブロックデバイスが生成される構成とすることにより、ストレージクラスタシステムで必要となった処理に対応することができる。
なお、イニシエータの仮想ブロックデバイス提供要求部402が、上記第1の「WRITE BUFFERコマンド」とは異なる第2の「WRITE BUFFERコマンド」により、所望の容量及び論理ユニット番号LUN(アドレス情報)の制御データ共有用の仮想ブロックデバイスの生成をターゲットに要求することも可能である。つまり、ベンダ固有のモードで必要な制御データ共有用の仮想ブロックデバイスの容量を示す情報及び以降のアクセスで使用される論理ユニット番号LUNが設定されたバッファ情報をイニシエータからターゲットに通知するための第2の「WRITE BUFFERコマンド」を用いることも可能である。
イニシエータの仮想ブロックデバイス提供要求部402がターゲットに「MODEフィールド」が「Vendor specific(01h)」に設定された第2の「WRITE BUFFERコマンド」(仮想ブロックデバイス生成リクエスト)を発行した場合、当該ターゲットの仮想ブロックデバイス提供部401は仮想ブロックデバイス生成手段として機能して、当該コマンドで指定される容量の内部のリソースを確保することにより、制御データ共有用の仮想ブロックデバイスを生成する。またターゲットの仮想ブロックデバイス提供部401はアドレス設定手段として機能して、第2の「WRITE BUFFERコマンド」に基づいて生成された制御データ共有用の仮想ブロックデバイスにアクセスするための論理ユニット番号LUN(アドレス情報)として当該コマンドで指定された論理ユニット番号LUN(アドレス情報)を設定する。更に、ターゲットの仮想ブロックデバイス提供部401は使用権設定手段として機能して、第2の「WRITE BUFFERコマンド」を発行したイニシエータに、上記生成された制御データ共有用の仮想ブロックデバイスの使用権を設定する。そしてターゲットの仮想ブロックデバイス提供部401は、「GOODステータス」をイニシエータに送信する。
イニシエータの仮想ブロックデバイス提供要求部402は、このGOODステータスを受信することにより、制御データ共有用の仮想ブロックデバイスの生成が成功したことを認識する。するとイニシエータの第2のアクセス部404は、生成された制御データ共有用の仮想ブロックデバイスに、第2の「WRITE BUFFERコマンド」の指定する論理ユニット番号LUNに基づきアクセスする。
次に、イニシエータとターゲットとの間で制御データを永続化して共有する仕組みの詳細について、ストレージクラスタシステムに新しいストレージノードを追加する場合を例に説明する。ここでは、図1に示されるストレージノード10-1が追加ノードであるものとする。また、ストレージノード10-2がストレージクラスタシステムのマスタノードであるものとする。
マスタノードのブロックデバイス制御装置11-2は、ストレージノード10-1がストレージクラスタシステムに追加されると、その旨を検出する。するとブロックデバイス制御装置11-2(マスタノード)は、制御データの1つであるストレージクラスタ構成情報をブロックデバイス制御装置11-1(追加ノード)に設定する。図10は、ブロックデバイス制御装置11-2(マスタノード)がストレージクラスタ構成情報を設定する際のアクセス方向を矢印100で示す。図10の例では、マスタノードのブロックデバイス制御装置11-2がイニシエータ、追加ノードのブロックデバイス制御装置11-1がターゲットとして動作する。ブロックデバイス制御装置11-2(イニシエータ)は、追加ノードのブロックデバイス制御装置11-1(ターゲット)に対して、ストレージクラスタシステムの新たな構成情報を永続化が必要な制御データとしてライトする動作を行う。
以下、追加ノード検出時の、ブロックデバイス制御装置11-2(イニシエータ)の動作について、図11のフローチャートを参照して説明する。
まずブロックデバイス制御装置11-2(イニシエータ)は、追加ノードのブロックデバイス制御装置11-1(ターゲット)が外部に提供する永続化可能な制御データ共有用の仮想ブロックデバイスの排他的使用権(独占使用権)を取得するための排他的使用権取得ルーチン(ステップS21,S22)を実行する。この排他的使用権取得ルーチン(ステップS21,S22)の詳細については後述する。
ブロックデバイス制御装置11-2(イニシエータ)は、排他的使用権の取得に失敗した場合(ステップS22)、ストレージクラスタシステムへのノード追加の失敗を判定する(ステップS23)。これに対し、排他的使用権の取得に成功した場合(ステップS22)、ブロックデバイス制御装置11-2(イニシエータ)は、追加ノード(ストレージノード10-1)が追加された最新のストレージクラスタシステムの構成情報(ストレージクラスタ構成情報)を、使用権が取得された制御データ共有用の仮想ブロックデバイスに制御データ(共有データ)としてライトする(ステップS24)。このライト処理(ステップS24)は、次のように実行される。
まず、ブロックデバイス制御装置11-2(イニシエータ)からブロックデバイス制御装置11-1(ターゲット)に対して、「POWER CONDITIONフィールド」が「ACTIVE(0x1)」に設定された「START STOP UNITコマンド」がブロックデバイス用I/F117経由で発行される。これにより、使用権が取得された制御データ共有用の仮想ブロックデバイスの領域を追加ノード(ストレージノード10-1)のブロックデバイス制御装置11-1が有するディスクキャッシュ115a上へマッピングすることが指示される。次にブロックデバイス制御装置11-2(イニシエータ)は、「WRITEコマンド」により、制御データ共有用の仮想ブロックデバイスに対する制御データ(共有データ)としての最新のストレージクラスタシステムの構成情報(ストレージクラスタ構成情報)を、ブロックデバイス制御装置11-1が有するディスクキャッシュ115a上にライトする。最後にブロックデバイス制御装置11-2(イニシエータ)は「SYNCHRONIZE CACHEコマンド」を使用して、制御データ共有用の仮想ブロックデバイスがマッピングされた追加ノード(ストレージノード10-1)内部のディスクアレイ120にディスクキャッシュ115a上の制御データ(ストレージクラスタ構成情報)を書き込み永続化する。
ブロックデバイス制御装置11-2(イニシエータ)はステップS24のライト処理に成功すると、ノード追加後のストレージクラスタシステムを構成するストレージノードの数(ストレージクラスタシステムのメンバ数)が3以上であるかを判定する(ステップS25)。ここでは、ストレージクラスタシステムのメンバ数(メンバノード数)が3以上、つまり自ノード(ストレージノード10-2)と追加ノード(ストレージノード10-1)以外に、ストレージクラスタシステムを構成するストレージノード(メンバノード)が存在するものとする。この場合、ブロックデバイス制御装置11-2(イニシエータ)は、自ノードと追加ノード以外のメンバノード(他のメンバノード)のストレージクラスタ構成情報を最新の情報に更新するためのストレージクラスタ構成情報更新ルーチンを実行する(ステップS26)。
ここで、ストレージクラスタ構成情報更新ルーチン(ステップS26)の詳細を、図12のフローチャートを参照して説明する。まずブロックデバイス制御装置11-2(イニシエータ)は、自ノードと追加ノード以外のメンバノード(他のメンバノード)各々の仮想ブロックデバイス(の領域がマッピングされたディスクキャッシュ115a上)に最新のストレージクラスタ構成情報をライトする(ステップS31)。次にブロックデバイス制御装置11-2(イニシエータ)は、「SYNCHRONIZE CACHEコマンド」を使用して、仮想ブロックデバイスがマッピングされた他のメンバノード各々の内部のディスクアレイ120にディスクキャッシュ115a上の制御データ(ストレージクラスタ構成情報)を書き込み永続化する(ステップS32)。
ブロックデバイス制御装置11-2(イニシエータ)は、ストレージクラスタ構成情報更新処理(ステップS26)に成功すると、使用権が取得された制御データ共有用の仮想ブロックデバイスの領域の使用開始を、追加ノード(ストレージノード10-1)のブロックデバイス制御装置11-1(ターゲット)に対して指示する(ステップS27)。また、ストレージクラスタシステムのメンバ数が3未満の場合、ブロックデバイス制御装置11-2(イニシエータ)はステップS26をスキップしてステップS27を実行する。するとブロックデバイス制御装置11-1は、最新のストレージクラスタ構成情報に基づき、ストレージクラスタのメンバノードとしての処理を実行する。
次に、排他的使用権取得ルーチン(ステップS21)の詳細について、図13のフローチャートを参照して説明する。まずブロックデバイス制御装置11-2(イニシエータ)は、「REPORT LUNSコマンド」を用いて、追加ノードのブロックデバイス制御装置11-1(ターゲット)が外部に提供する永続化可能な制御データ共有用の仮想ブロックデバイスのリストを取得する(ステップS41)。ブロックデバイス制御装置11-2(イニシエータ)は、取得されたリスト中に利用可能な仮想ブロックデバイスが存在するかを判定する(ステップS42)。もし、利用可能な仮想ブロックデバイスが存在しないならば、ブロックデバイス制御装置11-2(イニシエータ)は、排他的使用権の取得失敗を排他的使用権取得ルーチンに通知する(ステップS43)。
これに対し、利用可能な仮想ブロックデバイスが存在するならば、ブロックデバイス制御装置11-2(イニシエータ)は、その仮想ブロックデバイスを選択して、当該選択された仮想ブロックデバイスの排他的使用権を取得する(ステップS44)。もし、選択された仮想ブロックデバイスの排他的使用権の取得に失敗したならば(ステップS45)、ブロックデバイス制御装置11-2(イニシエータ)は再度ステップS42を実行する。これに対し、選択された仮想ブロックデバイスの排他的使用権の取得に成功したならば(ステップS45)、ブロックデバイス制御装置11-2(イニシエータ)は当該仮想ブロックデバイス(制御データ共有用の仮想ブロックデバイス)の情報を排他的使用権取得ルーチンに通知する(ステップS46)。
次に、永続化された制御データ(共有データ)に基づいてブロックデバイス制御装置の構成を初期化する処理(初期化ルーチン)を、ストレージクラスタシステム内の通常ノードの起動時の動作を例に、図14のフローチャートを参照して説明する。なお本実施形態では、マスタノードを除くストレージクラスタシステム内のストレージノードを通常ノードと呼ぶ。
まず、ストレージノード10-1が起動されたものとする。またストレージノード10-1が通常ノードであるものとする。ストレージノード10-1のブロックデバイス制御装置11-1に含まれている第2のアクセス部404は、使用中の永続化されている制御データ共有用の仮想ブロックデバイスの領域(の情報)を、ストレージノード10-1内部のディスクアレイ120からロードする(ステップS51)。このステップS51において、第2のアクセス部404はキャッシュ管理部405を制御することにより、上記ロードされた仮想ブロックデバイスの領域をブロックデバイス制御装置11-1のディスクキャッシュ115a上の連続領域にマッピングする。
するとブロックデバイス制御装置11-1は制御データ処理手段として機能して、ディスクキャッシュ115a上にマッピングされた制御データ共有用の仮想ブロックデバイスの領域の情報(つまり制御データ)のヘッダ部81を解析することにより、タイプ情報によってストレージクラスタ構成情報が示される制御データをサーチする(ステップS52)。ここでは、ストレージクラスタ構成情報であることが示されている制御データ(共有データ)が存在するものとする(ステップS53)。
この場合、ブロックデバイス制御装置11-1は、制御データをストレージクラスタ構成情報として処理することにより、当該ストレージクラスタ構成情報内に記録されているメンバノードの1つから、マスタノード(例えばストレージノード10-2)のアドレス情報(ターゲットアドレスと論理ユニット番号LUN)を取得するためのアドレス取得ルーチン(ステップS54,S55)を実行する。このアドレス取得ルーチン(ステップS54,S55)の詳細は後述する。このようにブロックデバイス制御装置11-1は、形式が統一されたヘッダ部81を解釈することにより、制御データ共有用の仮想ブロックデバイスに書きこまれた制御データのタイプと処理方法を正しく認識することができる。
ブロックデバイス制御装置11-1は、マスタノードのアドレス情報取得に成功した場合(ステップS55)、当該アドレス情報で指定されるマスタノードに対してストレージクラスタ構成情報の更新要求を送信するための構成情報更新要求送信ルーチンを実行する(ステップS56)。ブロックデバイス制御装置11-1は、マスタノードに対する更新要求で指定された、当該マスタノードでのストレージクラスタ構成情報の更新に失敗した場合(ステップS57)、ストレージクラスタの初期化に失敗したと判定する(ステップS58)。これに対し、マスタノードでのストレージクラスタ構成情報の更新に成功した場合(ステップS57)、ブロックデバイス制御装置11-1は、ストレージクラスタシステムにおける通常ノード(のブロックデバイス制御装置)としての処理を開始する(ステップS59)。
このように本実施形態においては、永続化された制御データ共有用の仮想ブロックデバイスの領域の情報(つまり永続化された制御データ)を、ブロックデバイス制御装置11-1の起動時にディスクアレイ120から当該ブロックデバイス制御装置11-1内にロードして、当該永続化された制御データに基づいて当該制御データを処理することにより、ストレージクラスタシステムとしての動作設定等の予め定義された処理を実施することができる。
次に、上記アドレス取得ルーチン(ステップS54,S55)の詳細について、図15のフローチャートを参照して説明する。まずブロックデバイス制御装置11-1は、ステップS52でサーチされた制御データ(ストレージクラスタ構成情報)内に記録されたメンバノードの1つを指定メンバノードとして選択して、当該指定メンバノードが提供している制御データ共有用の仮想ブロックデバイスの排他的使用権(独占使用権)を取得するための排他的使用権取得ルーチンを実行する(ステップS61)。この排他的使用権取得ルーチン(ステップS61)は、図13のフローチャートで示される前記排他的使用権取得ルーチン(ステップS21)と同様の手順で実行される。排他的使用権取得ルーチン(ステップS61)が前記排他的使用権取得ルーチン(ステップS21)と異なるのは、図13のフローチャートのステップS41に相当する処理で、永続可能な制御データ共有用の仮想ブロックデバイスのリストだけでなく永続化できない制御データ共有用の仮想ブロックデバイスのリストも取得される点である。
さて、排他的使用権取得ルーチン(ステップS61)の実行で、利用可能な制御データ共有用の仮想ブロックデバイスの排他的使用権が取得できなかった場合(ステップS62)、アドレス取得ルーチン(ステップS54,S55)に取得失敗が通知される(ステップS63)。
一方、排他的使用権取得ルーチン(ステップS61)の実行で、指定メンバノードが提供している利用可能な制御データ共有用の仮想ブロックデバイスの排他的使用権が取得できた場合(ステップS62)、ブロックデバイス制御装置11-1は、当該使用権が取得された仮想ブロックデバイスに対して、マスタノードのアドレス情報を要求するためのマスタノードアドレス要求メッセージを(含む制御データを)ライトする(ステップS64)。このライト処理(ステップS64)は次のように実行される。
まずブロックデバイス制御装置11-1は、指定メンバノードが提供している使用権が取得された仮想ブロックデバイスの領域を当該指定メンバノードのディスクキャッシュ115a上にマッピングするように、「POWER CONDITIONフィールド」が「ACTIVE(0x1)」に設定された「START STOP UNITコマンド」により指示する。ここでは、指定メンバノードがストレージノード10-Mであるものとする。
次にブロックデバイス制御装置11-1は、指定メンバノード、つまりストレージノード10-Mのディスクキャッシュ115aに対し、「WRITEコマンド」によりマスタノードアドレス要求メッセージを(実制御データとして)含む制御データのライトを行う。この制御データのヘッダ部81に含まれている制御データタイプは、当該制御データがマスタノードアドレス要求メッセージであることを示す。このマスタノードアドレス要求メッセージ内には、メンバノードが応答メッセージをライトするための仮想ブロックデバイスの論理ユニット番号LUNが記録されている。ブロックデバイス制御装置11-1、つまり起動中のストレージノード10-1のブロックデバイス制御装置11-1は、予め、当該ブロックデバイス制御装置11-1が外部のストレージノードに提供する制御データ共有用の仮想ブロックデバイスの中から応答メッセージ用の仮想ブロックデバイスを1つを選び、メンバノードの使用権を確保しておく。
ブロックデバイス制御装置11-1は、ストレージノード10-M(指定メンバノード)のブロックデバイス制御装置11-Mに対して、WCEビットが1に設定された「MODE SELECTコマンド」により、マスタノードアドレス要求メッセージがライトされた仮想ブロックデバイスの領域の使用開始を指示する(ステップS65)。そしてブロックデバイス制御装置11-1は、マスタノードアドレス要求メッセージの指定する仮想ブロックデバイス(マスタノードのアドレス情報がライトされる仮想ブロックデバイス)の領域の使用終了がストレージノード10-M(指定メンバノード)のブロックデバイス制御装置11-Mから通知されるまで待機する(ステップS66)。
さて、ストレージノード10-M(指定メンバノード)のブロックデバイス制御装置11-Mは、マスタノードアドレス要求メッセージがライトされた(指定メンバノードが提供している)仮想ブロックデバイスの使用開始がブロックデバイス制御装置11-1(起動中のストレージノード10-1のブロックデバイス制御装置11-1)によって指示されると、アドレス要求メッセージ受信時処理を実行する。このアドレス要求メッセージ受信時処理について、図16のフローチャートを参照して説明する。
まず、ブロックデバイス制御装置11-Mは制御データ処理手段として機能して、使用開始が指示された仮想ブロックデバイスに格納されている制御データ(共有データ)のヘッダ部81(に含まれている制御データタイプ)をチェックし、その制御データがマスタノードアドレス要求メッセージであることを認識する(ステップS71)。この場合、ブロックデバイス制御装置11-Mは、制御データをマスタノードアドレス要求メッセージとして処理する。したがってステップS71の処理は、ブロックデバイス制御装置11-Mがマスタノードアドレス要求メッセージを受信したことと等価である。
このようにブロックデバイス制御装置11-Mは、形式が統一されたヘッダ部81を解釈することにより、制御データ共有用の仮想ブロックデバイスに書きこまれた制御データのタイプと処理方法を正しく認識することができる。
次にブロックデバイス制御装置11-Mは、「WRITEコマンド」により、アドレス要求メッセージ内で指定された起動中のノード(ストレージノード10-1)の論理ユニット番号LUNで指定される(ブロックデバイス制御装置11-1が提供している)応答メッセージ用の仮想ブロックデバイスに対してマスタノードのアドレス情報を応答メッセージとしてライトする(ステップS72)。最後にブロックデバイス制御装置11-Mは、「POWER CONDITIONフィールド」が「IDLE(0x2)」に設定された「START STOP UNITコマンド」をブロックデバイス制御装置11-1に対して発行することにより、マスタノードのアドレス情報がライトされた仮想ブロックデバイス(マスタノードアドレス要求メッセージによって指定された仮想ブロックデバイス)の使用終了を通知する(ステップS73)。
起動中のストレージノード10-1のブロックデバイス制御装置11-1は、指定メンバノード(ストレージノード10-M)からの仮想ブロックデバイスの領域の使用終了通知の待ち状態にある(ステップS66)。この状態で、指定メンバノード(ストレージノード10-M)のブロックデバイス制御装置11-Mからマスタノードのアドレス情報がライトされた仮想ブロックデバイス(マスタノードアドレス要求メッセージの指定する仮想ブロックデバイス)の使用終了が通知されると、ブロックデバイス制御装置11-1は処理を再開する。
まずブロックデバイス制御装置11-1は、使用終了が通知された仮想ブロックデバイスの領域からマスタノードのアドレス情報を取得する(ステップS67)。次にブロックデバイス制御装置11-1は、POWER CONDITIONフィールド」が「IDLE(0x2)」に設定された「START STOP UNITコマンド」により、マスタノードアドレス要求メッセージがライトされた指定メンバノードの仮想ブロックデバイスの使用終了を当該指定メンバノードに通知する(ステップS68)。最後にブロックデバイス制御装置11-1は、取得されたマスタノードのアドレス情報を、アドレス取得ルーチン(ステップS54,S55)を呼び出した初期化ルーチンに通知する(ステップS69)。
ブロックデバイス制御装置11-1は、アドレス取得ルーチン(ステップS54,S55)の実行によりマスタノードのアドレス情報の取得に成功したならば、前述したように、当該マスタノードに対してストレージクラスタ構成情報の更新要求を送信するための構成情報更新要求送信ルーチンを実行する(ステップS56)。この構成情報更新要求送信ルーチンは、図15のフローチャートに示すアドレス取得ルーチンにおいて、マスタノードアドレス要求メッセージを、構成情報更新要求メッセージに置き換えたものと同様である。この構成情報更新要求送信ルーチンでは、構成情報更新要求メッセージ内に、構成情報を格納する永続化可能な制御データ共有用の仮想ブロックデバイスの論理ユニット番号LUNが予め記録される。
最後に、制御データ共有用の仮想ブロックデバイスを複数のブロックデバイス制御装置で共有する処理について、ルーティングテーブルの初期化処理を例に説明する。
本実施形態では、ストレージクラスタシステムの制御データの1つであるルーティングテーブルの情報が、図9のフローチャートにおけるステップS11乃至S14の手順により、マスタノードの永続化可能な制御データ共有用の仮想ブロックデバイスに格納される。
さて、図1のストレージクラスタシステムにおいて、ストレージノード10-2がマスタノードであり、ストレージノード10-1及び10-Mのようなストレージノード10-2以外のノードが通常ノードであるものとする。ストレージノード10-1及び10-Mを含む通常ノードは、ルーティングテーブルの情報を格納する、マスタノード(ストレージノード10-2)の永続化可能な仮想ブロックデバイスを共有する。このときの、図1のストレージクラスタシステムの状態を図17に示す。
ストレージノード10-1及び10-Mを含む通常ノードの各々は、マスタノードであるストレージノード10-1の仮想ブロックデバイスからルーティングテーブルの情報をリードすることにより、自身のルーティングテーブルを初期化する。例えば、ストレージノード10-1及び10-Mは、図17において、それぞれ矢印170-1及び170-Mで示されるように、ストレージノード10-1の仮想ブロックデバイスからルーティングテーブルの情報をリードすることにより、自身のルーティングテーブルを初期化する。
以下、通常ノードにおけるルーティングテーブルの初期化処理について、ストレージノード10-1におけるルーティングテーブルの初期化処理を例に、図18のフローチャートを参照して説明する。
ます、ルーティングテーブルを格納するマスタノード(ストレージノード10-2)の仮想ブロックデバイス(ルーティングテーブル用仮想ブロックデバイス)の論理ユニット番号LUNは、ストレージクラスタ構成情報内に記録されている。そこでストレージノード10-1のブロックデバイス制御装置11-1の仮想ブロックデバイス提供要求部402は仮想ブロックデバイス使用権取得リクエスト送信手段として機能して、ストレージクラスタ構成情報によって指定されるルーティングテーブル用仮想ブロックデバイスに対する共有可能な使用権を、「PERSISTENT RESERVE OUTコマンド」を用いて取得する(ステップS81)。ここでは、リードによる初期化しか行わないため、排他的な使用権は不要である。
ルーティングテーブル用仮想ブロックデバイスに対する使用権の取得に失敗した場合(ステップS82)、ブロックデバイス制御装置11-1はルーティングテーブル初期化処理の失敗を認識する(ステップS83)。
これに対し、ルーティングテーブル用仮想ブロックデバイスに対する使用権の取得に成功した場合(ステップS82)、ブロックデバイス制御装置11-1の第2のアクセス部404は、「READコマンド」を使用して当該仮想ブロックデバイスからルーティングテーブルの情報をリードして自身のルーティングテーブルにロードすることにより、当該自身のルーティングテーブルを初期化する(ステップS84)。
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
10-1〜10-M,10-i…ストレージノード、11-1〜11-M,11-i…ブロックデバイス制御装置、12…ハードディスクドライブ(HDD)、20…スイッチ、30-1〜30-N…ホストコンピュータ、41…ホストインタフェース(ホストI/F)、42…ディスクインタフェース(ディスクI/F)、111…ホストインタフェースコントローラ(ホストI/Fコントローラ)、112…ディスクインタフェースコントローラ(ディスクI/Fコントローラ)、113…入出力プロセッサ(I/Oプロセッサ)、114…ROM、114a…制御プログラム、115…メモリ、115a…ディスクキャッシュ、116…バッテリ、117…ブロックデバイス用インタフェース(ブロックデバイス用I/F)、118…ブロックデバイス用インタフェース(ブロックデバイス用I/F)、120…ディスクアレイ、401…仮想ブロックデバイス提供部、402…仮想ブロックデバイス提供要求部、403…第1のアクセス部、404…第2のアクセス部、405…キャッシュ管理部。