(57)【特許請求の範囲】
【請求項１】
書込待ち行列機構を用いてマルチアレイの整合性グループを実現するための方法であって、
書込入力/出力（I/O）待ち行列間隔を、整合性グループ（CG）の論理ユニット（LU）メンバに適用するステップであって、CGのLUメンバが存在しているストレージアレイは関与ストレージアレイであり、書込I/Oを先入先出順で待ち行列に入れるステップを含む、適用ステップと、
各書込I/Oを、タイムスタンプでマーキングするステップと、
関与ストレージアレイがマスタストレージアレイから、タイムスタンプを有するスナップショット要求を受け取ると、関与ストレージアレイからCGのLUメンバへのI/Oを一時停止するステップと、
CGの少なくとも２つの関与ストレージアレイの間で１対のテストメッセージを交換することにより往復待ち時間を決定するステップと、
往復待ち時間を用いて書込I/O待ち行列間隔の最小時間間隔を決定するステップと、
書込I/O待ち行列間隔の最小時間間隔に少なくとも基づいてスナップショット要求のタイムスタンプが、関与ストレージアレイの書込I/O待ち行列間隔の範囲内にあるかどうかを判定するステップと
を含み、スナップショット要求のタイムスタンプが関与ストレージアレイの書込I/O待ち行列間隔内にあると決定された場合には、関与ストレージアレイは、
(a)スナップショット要求のタイムスタンプより前の各書込I/Oを完了すること、
(b)CGのLUメンバのためのローカルスナップショットを作成すること、
(c)CGのLUメンバへのI/Oを再開すること、の少なくとも1つを実行することを特徴とする方法。
【請求項２】
請求項１記載の方法において、各書込I/Oをタイムスタンプでマーキングするステップは、分散型クロック同期機構によって、CGの各関与ストレージアレイを同期するステップを含んでいることを特徴とする方法。
【請求項３】
請求項２記載の方法において、分散型クロック同期機構は、ネットワークタイムプロトコル（NTP)であることを特徴とする方法。
【請求項４】
請求項１記載の方法において、書込I/O待ち行列間隔をCGのLUメンバに適用するステッ
は、
書込I/O待ち行列間隔を、現在の時間から待ち行列内の最古の書込I/Oのタイムスタンプまでの時間間隔として表すステップ
を含んでいることを特徴とする方法。
【請求項５】
書込待ち行列機構を用いてマルチアレイの整合性グループを実現するための方法であって、
整合性グループ(CG)のストレージアレイのコントローラ上でCGのスナップショットを開始するステップであって、開始されたCGスナップショットと関連するコントローラを有するCGストレージアレイは、マスタと定義され、CGの論理ユニット（LU)メンバが存在しているストレージアレイは、関与ストレージアレイである、開始ステップと、
開始されたCGスナップショットのためのタイムスタンプを記録するステップと、
準備要求をマスタから各関与ストレージアレイの各コントローラへ送信するステップであって、準備要求を受け取る各関与ストレージアレイはスレーブと定義される、ステップと、
少なくとも２つの関与ストレージアレイの間で１対のテストメッセージを交換することにより往復待ち時間を決定するステップと、
特定のスレーブが準備要求を受け取ると、特定のスレーブのLUメンバへのI/Oを一時停止し、タイムスタンプが特定のスレーブの書込入力/出力(I/O)待ち行列間隔の内に入っているかどうかを決定するステップであって、ここで、書込I./O待ち行列間隔は先入先出（FIFO）順で待ち行列に入れられた書込I/Oトランザクションを表す、ステップと、
タイムスタンプが書込I/O待ち行列間隔内に入っている場合、書込I/O待ち行列間隔内にある、タイムスタンプよりも古い各書込I/Oをフラッシュするステップであって、ここで、タイムスタンプが書込I/O待ち行列間隔内に入っていない場合、スレーブはアボートメッセージを特定のスレーブの永続的メモリにログし、特定のスレーブはアボートメッセージをマスタに送信する、ステップと、
特定のスレーブにより、
(a)LUメンバの開始されたスナップショットを作成すること、
(b)一時停止されたI/Oを再開すること、
(c)準備済み状態を特定のスレーブの永続的なメモリにログすること、又は
(d)準備確認メッセージをマスタに送信すること、の少なくとも１つを実行するステップと、
マスタが特定のスレーブからアボートメッセージを受信した場合に、マスタから各スレーブへのロールバックメッセージを発行するステップと、
を含み、  
各スレーブはマスタからロールバックメッセージを受信すると、
(a)新しい状態を各スレーブの永続的なメモリにログすること、
(b)グローバルトランザクションのために保持していたロックを解放すること、
(c)対応するLUメンバのスナップショットを削除すること、又は
(d)ロールバック確認メッセージをマスタに送信すること、の少なくとも１つを実行することを特徴とする方法。
【請求項６】
請求項５記載の方法において、該方法はさらに、マスタが準備確認メッセージを各スレーブから受信した場合、マスタから各スレーブへのコミット要求を発行するステップを含んでいることを特徴とする方法。
【請求項７】
請求項６記載の方法において、各スレーブがマスタからコミット要求を受信した場合に、各スレーブは、
(a)新しい状態を各スレーブの永続的なメモリにログすること、
(b)グローバルトランザクションのために保持していたロックを解放すること、
(c)対応するLUメンバのスナップショットを削除すること、又は
(d)コミット確認メッセージをマスタに送信すること、の少なくとも１つを実行することを特徴とする方法。
【請求項８】
請求項５記載の方法において、該方法はさらに、タイマを開始するステップを含んでおり、タイマは、マスタから各関与ストレージアレイの各コントローラへ準備要求を送信するステップを受けて開始されることを特徴とする方法。
【請求項９】
請求項８記載の方法において、該方法はさらに、マスタが各スレーブから応答を受信する前にタイマが終了した場合に、第１のロールバックメッセージを各スレーブに送信するステップを含んでいることを特徴とする方法。
【請求項１０】
請求項９記載の方法において、該方法はさらに、第１のロールバックメッセージが送信された後に、あるスレーブが準備確認メッセージを送信した場合に、第２のロールバックメッセージを該スレーブに送信するステップを含んでいることを特徴とする方法。
【請求項１１】
書込待ち行列機構を用いてマルチアレイの整合性グループを実現するための方法を実行するためのコンピュータにより実行可能な命令を有する非一時的コンピュータ読取可能記憶媒体であって、該方法は、
書込入力/出力（I/O）待ち行列間隔を、整合性グループ（CG）の論理ユニット（LU）メンバに適用するステップであって、ここでCGのLUメンバが存在しているストレージアレイは関与ストレージアレイであり、書込I/Oを先入先出順で待ち行列に入れるステップを含む、適用ステップと、
各書込I/Oを、タイムスタンプでマーキングするステップと、
関与ストレージアレイがマスタストレージアレイからスナップショット要求を受け取ると、関与ストレージアレイからCGのLUメンバへのI/Oを一時停止するステップであって、ここでスナップショット要求は、スナップショット要求のタイムスタンプを有する、ステップと、
CGの少なくとも２つの関与ストレージアレイの間で１対のテストメッセージを交換することにより往復待ち時間を決定するステップと、
往復待ち時間を用いて書込I/O待ち行列間隔の最小時間間隔を決定するステップと、
書込I/O待ち行列間隔の最小時間間隔に少なくとも基づいてスナップショット要求のタイムスタンプが、関与ストレージアレイの書込I/O待ち行列間隔の内にあるかどうかを決定するステップと
を含み、スナップショット要求のタイムスタンプが、関与ストレージアレイの書込I/O待ち行列間隔の範囲内にあると決定された場合には、関与ストレージアレイは、
(a)スナップショット要求のタイムスタンプより古い各書込I/Oを完了すること、
(b)CGのLUメンバのためのローカルスナップショットを作成すること、又は
(c)CGのLUメンバへのI/Oを再開すること、の少なくとも1つを実行する、コンピュータにより実行可能な命令を記憶している非一時的コンピュータ読取可能記憶媒体。
【請求項１２】
請求項１１記載の非一時的コンピュータ読取可能記憶媒体において、書込I/O待ち行列間隔をCGのUメンバに適用するステップは、
書込I/O待ち行列間隔を、現在の時間から待ち行列内の最古の書込I/Oのタイムスタンプまでの時間間隔として表すステップ
を含んでいることを特徴とする非一時的コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムの分野に関し、特に、データベースのバックアップのための、マルチアレイの整合性グループ(multi-array consistency group)を実現するための方法に関するものである。
【背景技術】
【０００２】
単一のアプリケーションは、複数の論理ユニット（LU）を用いることができる。例えば、データベースシステムは、１つのLU上にログファイルを有し、別のLU上にデータファイルを有してもよい。データベースは、データベースのLUのスナップショットをとるバックアップ技術を用いて、そのスナップショットをテープ等の適切なストレージ媒体にバックアップすることができる。このようなバックアップ技術は、データベースをオフラインにすることなしに実行することができる。つまり、データベースは、I/O（入力／出力）機能を停止させなくてもよい。例えば、スナップショットがデータベースのアクティビティ（活動）と連係していない限り、データベースアプリケーションは、スナップショットがとられる間も動作し続けることができる。スナップショットによるバックアップ技術は、バックアップが実行される前に、データベースアプリケーションによって使用されている全てのLUの一貫したスナップショットを必要とする。この一貫性によって、アプリケーションがバックアップから実際に正確に復元されることを保証している。
【０００３】
整合性グループ（CG)は、データベースシステムが、異なるストレージアレイ上に配置された複数のLUを有する場合に用いられる。CGは1又は複数のLUからなり、単一のアトミック動作として、CG内の全メンバのスナップショットを作成するために使用される。
【発明の概要】
【０００４】
マルチアレイの整合性グループを実現するための方法は、書込入力/出力（I/O）待ち行列間隔を、整合性グループ（CG）の論理ユニット（LU）メンバに適用するステップを含んでいる。CGのLUメンバが存在しているストレージアレイは、関与ストレージアレイ（participating storage array)である。該方法はさらに、各書込I/Oをタイムスタンプでマーキングするステップと、関与ストレージアレイがマスタストレージアレイからスナップショット要求を受け取ると、関与ストレージアレイからCGのLUメンバへのI/Oを一時停止するステップとを含んでいる。スナップショット要求は、スナップショット要求のタイムスタンプを有している。該方法はさらに、スナップショット要求のタイムスタンプが、関与ストレージアレイの書込I/O待ち行列間隔の内にあるかを決定するステップを含んでいる。スナップショット要求のタイムスタンプが関与ストレージアレイの書込I/O待ち行列間隔内にあると決定された場合には、関与ストレージアレイは、(a)スナップショット要求のタイムスタンプより前の各書込I/Oを完了すること、(b)CGのLUメンバのためのローカルスナップショットを作成すること、及び(c)CGのLUメンバへのI/Oを再開すること、の少なくとも1つを実行する。
【０００５】
マルチアレイの整合性グループを実施するための方法は、整合性グループ(CG)のストレージアレイのコントローラ上でCGのスナップショットを開始するステップを含んでいる。コントローラを有するCGストレージアレイは、マスタと定義され、CGの論理ユニット（LU)メンバが存在しているストレージアレイは、関与ストレージアレイである。該方法はまた、開始されたCGスナップショットのためのタイムスタンプを記録し、かつ準備要求をマスタから各ストレージアレイの各コントローラへ送信するステップを含んでいる。準備要求を受け取る各関与ストレージアレイは、スレーブと定義される。該方法はさらに、スレーブが準備要求を受け取ると、LUメンバへのI/Oを一時停止して、タイムスタンプがスレーブの書込入力/出力(I/O)待ち行列間隔の範囲内にあるかを決定するステップと、タイムスタンプが書込I/O待ち行列間隔内に入っている場合は、書込I/O待ち行列間隔内にあってタイムスタンプよりも古い各書込I/Oを、フラッシュするステップと、(a)LUメンバのスナップショットを作成すること（b)I/Oを再開すること、(c)準備済み状態を永続的なメモリにログすること、及び(d)準備確認メッセージをマスタに送信すること、の少なくとも１つを実行するステップと、を含んでいる。
【０００６】
本発明は、方法を実行するためのコンピュータ実行可能命令を有するコンピュータ読取可能媒体を提供し、該方法は、書込入力/出力（I/O）待ち行列間隔を整合性グループ（CG）の論理ユニット（LU)メンバに適用するステップを含んでいる。CGのLUメンバが存在しているストレージアレイは、関与ストレージアレイである。該方法はさらに、各書込I/Oをタイムスタンプでマーキングするステップと、関与ストレージアレイがマスタストレージアレイからスナップショット要求を受け取ると、関与ストレージアレイからCGのLUメンバへのI/Oを一時停止するステップと、を含んでいる。スナップショット要求は、スナップショット要求のタイムスタンプを有している。該方法はさらに、スナップショット要求のタイムスタンプが、関与ストレージアレイの書込I/O待ち行列間隔内にあるかを決定するステップを含んでいる。スナップショット要求のタイムスタンプが関与ストレージアレイの書込I/O待ち行列間隔内にあると決定された場合には、関与ストレージアレイは、(a)スナップショット要求のタイムスタンプよりも古い各書込I/Oを完了すること、(b)CGのLUメンバのためのローカルスナップショットを作成すること、及び(c)CGのLUメンバへのI/Oを再開すること、の少なくとも1つを実行する。
【０００７】
前述した概要及び後述する発明の詳細な説明は、本発明を例示及び説明のためのものであり、本発明を必ずしも限定するものではない。本明細書に援用され且つその一部を構成する添付図面は、本発明の主題を図示している。詳細な説明及び図面は、ともに本発明の原理を説明している。
本発明の数多くの利点は、添付図面を参照することで、当業者はより良好に理解できるであろう。
【図面の簡単な説明】
【０００８】
【図１Ａ】マルチアレイストレージデータベースのブロック図を示す。
【図１Ｂ】ストレージデータベースの複数の整合性グループメンバにわたる複数の書込I/Oのブロック図を示す。
【図２Ａ】マルチアレイストレージデータベース上でのスナップショット要求の実行を示すフロー図である。
【図２Ｂ】マルチアレイストレージデータベース上でのスナップショット要求の実行を示すフロー図である。
【図３】書込待ち行列機構を用いて、マルチアレイの整合性グループを実施するための方法を示すフロー図である。
【図４】書込待ち行列機構を用いて、マルチアレイの整合性グループを実施するための方法のさらなる実施形態を示すフロー図である。
【発明を実施するための形態】
【０００９】
添付図面を参照して、本発明の主題について詳細に説明する。
図１Ａ及び１Ｂには、マルチアレイストレージデータベースのブロック図、及びあるストレージデータベースの複数の整合性グループメンバにわたる複数の書込I/Oのブロック図が示されている。ストレージデータベース１０２は、複数のストレージアレイ１０４を備えており、論理ユニット（LU)が別々のストレージアレイに配置されている。整合性グループ（CG）は、全てのCGメンバのスナップショットを単一のアトミック動作で作成することをサポートするために、複数のストレージアレイにわたって1又は複数のLUを備えている。ストレージアレイ１０４では、例えば、ストレージ仮想化マネジャ（SVM)１０８がストレージアレイ１０４で使用された場合に、ホストが見ることのできる小型コンピュータシステムインターフェース（SCSI)の論理ユニット（LU)が、仮想ボリューム１０６にマッピングされる。仮想ボリューム１０６は、ストレージアレイ１０４内の１又は複数のストレージプール１１０の容量から抽出される。図１Ｂは、３つの仮想ボリュームすなわち、VV1、VV２、VV３と、待機状態にある複数の書込I/Oすなわち、W１１、W１２、W１３、W２１、W２２、W２３、W３１、W３２、W３３を示している。整合性グループは、VV１、VV２及びVV３を含んでいるが、整合性グループに含まれる仮想ボリュームの数は任意であってよい。
【００１０】
ストレージアレイのコントローラのキャッシュ１１２における書込I/O待ち行列機構は、スナップショットが複数のストレージアレイ１０４にわたって作成される間のタイムウィンドウを作成するために用いられる。書込I/O待ち行列機構は、整合性グループのメンバであるLUに適用される。整合性グループのLUメンバを備えるストレージアレイは、関与ストレージアレイ１１４と称される。関与(participating)ストレージアレイ１１４のそれぞれは、分散型クロック同期機構１１６の使用等によって、共通の時間概念を有している。例えば、分散型クロック同期機構１１６は、ネットワークタイムプロトコル（NTP)である。
【００１１】
１又は複数の書込I/Oは、先入れ先出し（FIFO）法でLUの待ち行列に入れられる。FIFO法は、書込I/Oが、ストレージアレイのコントローラ１１８のキャッシュメモリ１１２内にすでに存在する書込の論理ブロックアドレス（LBA）と重なるLBAを有しているかどうかとは関係なく、使用される。各書込I/Oは、関与ストレージアレイ１１４で使用されている分散型クロック同期機構１１６によるタイムスタンプでマーキングされる。整合性グループのLUのための書込I/O待ち行列は、現在の時間から待ち行列内の最古の書込I/Oのタイムスタンプまでの時間間隔を示している。ストレージアレイのコントローラ１１８は、書込I/O待ち行列によって表される時間間隔が、関与ストレージアレイ１１４間で通信されるメッセージのための最長待ち時間よりも長いようにするために、待ち行列内に充分な書込I/Oを保持している。
【００１２】
関与ストレージアレイ１１４は、マスタストレージアレイ１１４aからスナップショット要求を受け取ると、整合性グループのメンバへのI/Oを一時停止する。マスタストレージアレイ１１４aは、少なくともユーザ及びホストのいずれかからスナップショット要求を受け取るストレージアレイ、と定義される。関与ストレージアレイ１１４は、マスタストレージアレイ１１４aからのスナップショット要求のタイムスタンプが、I/O待ち行列間隔の範囲内にあるかを決定する。スナップショット要求のタイムスタンプが書込I/O待ち行列間隔の範囲内にある場合には、関与ストレージアレイ１１４は、整合性グループのスナップショット要求のタイムスタンプよりも古い書込を完成させ、整合性グループのLUメンバのためのローカルスナップショットを作成し、かつ、整合性グループのLUメンバへのI/Oを再開する。
【００１３】
図１Ｂのブロック図では、整合性グループのスナップショットは、書込W１１、W２１、及びW３１を含んでおり、その後の書き込みは含まない。しかし、マルチアレイシステムにおける遅延によって、最後のストレージアレイが整合性グループの最後のLUメンバを一時停止するときまでに、書込W２２、W１２、W３２、及びW２３がすでに待ち行列に入れられている。整合性グループのスナップショットを成功させるためには、関与ストレージアレイ１１４が整合性グループのスナップショット要求を受け取った時に、関与ストレージアレイ１１４内の待ち行列が充分大きく、書込W２２、W１２、W３２及びW２３がそれぞれの関与ストレージアレイの待ち行列上にまだ存在した状態で整合性グループのLUメンバに書き込まれないようにする必要がある。Ｗ１１、W２１及びW３１のいずれかがまだ待ち行列にある場合は、ローカルスナップショットが作成される前に、それぞれがメンバのLUにフラッシュされる。
【００１４】
整合性グループの各関与ストレージアレイ１１４は、往復待ち時間を決定するために、例えば定期的に、テストメッセージを別の関与ストレージアレイと交換する。往復待ち時間は、書込I/O待ち行列間隔の最少時間間隔を決定するために使用される。しかし、往復待ち時間を用いて最少時間間隔を設定することは、常に実行可能とは限らない。例えば、あるLUのための待ち行列のサイズは、整合性グループの各LUが使用できるキャッシュメモリの量についての、ストレージアレイ全体の閾値によって制限される。したがって、新しい書込I/Oの受信によってキャッシュメモリの閾値に到達／超越されると、たとえ待ち行列によって表される時間間隔のサイズが低減されることになっても、古い書込I/OはFIFO待ち行列から物理ドライブへフラッシュされる。
【００１５】
書込待ち行列機構は、電池でバックアップされたキャッシュメモリを備えているストレージアレイのために使用される。さらに、キャッシュメモリは、例えば冗長性のために、ストレージアレイ内の別のコントローラにミラー（反映）される。
【００１６】
図２Ａ及び２Ｂには、マルチアレイストレージデータベース上でスナップショット要求の実施を説明するフロー図が示されている。整合性グループのスナップショット作成の調整（coordination）は、２フェイスコミット（２PC）プロトコルを利用する。コントローラは、整合性グループのスナップショットが関与ストレージアレイのコントローラ上で開始される場合、トランザクション２００のマスタと定義される。スナップショット要求を実行するトランザクション２００は、図２Ａ及び図２Ｂのフロー図に従って進行する。
【００１７】
動作２０２では、トランザクション２００の開始がタイムスタンプされる。例えば、マスタは、分散型クロック同期機構に従って、トランザクション２００の開始をタイムスタンプする。動作２０４では、整合性グループ内の全ての関与ストレージアレイのコントローラに、準備要求が送信される。例えば、マスタは準備要求を整合性グループ内の全ての関与ストレージアレイに送信する。準備要求を受け取る各関与ストレージアレイは、スレーブと定義される。動作２０６では、整合性グループのLUメンバへのI/Oは一時停止される。例えば、スレーブは準備要求を受け取るとI/Oを一時停止する。動作２０８では、マスタによる整合性グループのタイムスタンプが、スレーブの書込I/O待ち行列間隔内に入っているかを含む一致クエリが送信される。例えば、一致クエリはスレーブのコントローラに送信される。動作２０８の結果が、NOであれば（すなわち、タイムスタンプが書込I/O待ち行列間隔内に入っていない場合は）、動作２１０において、アボート（ABORT）がログされ、かつアボート確認（ABORT-ACK）が送信される。例えば、スレーブは永続的なメモリにアボートをログし、かつアボート確認メッセージをマスタに送信する。次にトランザクション２００は、後述する動作２２０に進む。動作２０８の判断結果が、YESであれば（すなわち、タイムスタンプが書込I/O待ち行列間隔内に入っている場合は）、動作２１２において、トランザクション２００のタイムスタンプより前の書込I/Oはフラッシュされる。例えば、スレーブは、トランザクション２００のタイムスタンプよりも古い、待ち行列内の任意の書込I/Oをフラッシュする。動作２１４では、LUのスナップショットが作成される。例えば、スレーブはLUのスナップショットを作成する。動作２１６では、LUへのI/Oが再開される。例えば、スレーブはLUへのI/Oを再開する。動作２１８では、準備済み状態がログされ、準備確認メッセージが送信される。例えば、スレーブは、準備済み状態を永続メモリにログして準備確認メッセージをマスタに送信する。それから、トランザクション２００は動作２２０に進む。
【００１８】
動作２２０では、マスタが準備確認メッセージを全てのスレーブから受け取ったかどうかを含む受信クエリが送信される。例えば、受信クエリは、マスタに送信される。動作２２０の結果がNOであれば、ロールバックメッセージが発行される。例えば、マスタがロールバックメッセージを全てのスレーブに送信する。動作２２４では、ロールバック状態がログされ、任意のロックが解放される。例えば、スレーブはロールバックメッセージを受け取ると、ロールバック状態を永続的なメモリにログし、かつグローバルトランザクション２００のために保持していた任意のロックを解放する。動作２２６では、動作２１４でとられたスナップショットが削除される。例えば、スレーブは動作２１４でとられたスナップショットを削除する。動作２２８では、ロールバック確認メッセージが送信される。例えば、スレーブはロールバック確認メッセージをマスタに送信する。そしてトランザクション２００は２３６で終了するが、その結果は後段に記載する。動作２２０の結果がYESであれば（すなわち、例えば全てのスレーブからの準備確認メッセージがマスタによって受信されると）、トランザクション２００は動作２３０に進む。
【００１９】
動作２３０では、コミット（COMMIT）要求が発行される。例えば、マスタはコミット要求を全てのスレーブに発行する。動作２３２では、コミット状態がログされ、任意のロックが解放される。例えば、あるスレーブがコミット要求を受信すると、スレーブはコミット状態を永続的なメモリにログし、グローバルトランザクション２００のために保持していた任意のロックを解放する。動作２３４では、コミット確認メッセージが送信される。例えば、スレーブはコミット確認メッセージをマスタに送信する。そしてトランザクション２００は２３６で終了する。したがって、終了２３６におけるトランザクション２００の結果は、マスタがスレーブからどのようなメッセージを受信したかに依存する。マスタがコミット確認メッセージを全てのスレーブから受信すれば、結果としてグローバルトランザクション２００は成功し、整合性グループ内の全てのLUについて、一貫したスナップショットが取得される。マスタがロールバック確認メッセージを全てのスレーブから受信すれば、グローバルトランザクション２００の結果として一貫したスナップショットは得られないが、各スレーブはクリーンアップする（例えば、全てのロックを解放し、動作２１４で取得されたスナップショットを削除する）。
【００２０】
２PCプロトコルは、推定アボートを有する２PCの変形である。この例では、準備（PREPARE）要求が送信されると、タイマがスタートする。例えば、マスタは、整合性グループ内の全ての関与ストレージアレイのコントローラに準備要求を送信する時に、タイマをスタートさせる（動作２０４）。マスタが全てのスレーブから応答を受信する前にタイマが切れると、ロールバックメッセージが送信される。例えば、全てのスレーブから応答を受信することなしにタイマが切れた場合は、グローバルトランザクション２００はアボートされる必要があるとマスタは推定して、ロールバックメッセージを全てのスレーブに送信する。このようにして、マスタが全てのスレーブから応答を受信する前にタイマが切れた場合は、トランザクション２００は、あたかも動作２２０の結果がNOであるかのように処理される。
【００２１】
全ての準備メッセージを全てのスレーブに送信した後に、例えば恒久的な機能停止などでマスタが機能しなくなると、各スレーブは手動のロールバック（ROLLBACK）が必要になる。本発明の一実施形態では、手動ロールバックはユーザによって実行される。
【００２２】
コントローラのキャッシュメモリが制限される場合には、別のストレージデバイスが待ち行列に入れられた書込I/Oを実行するために使用される。例えば、ソリッドステートドライブ（SSD）が使用される。別のストレージデバイスが使用される場合は、書込I/Oは、従来のコントローラキャッシュ管理機構を用いて、キャッシュメモリからその別のストレージデバイスにフラッシュされる。そして、書込I/Oの待ち行列は、その別のストレージデバイス上で継続される。
【００２３】
本発明を、フロー図を参照して以下に説明する。フロー図の各ブロック及び／又はブロックの組み合わせの機能は、コンピュータプログラム命令によって実現される。コンピュータプログラム命令は、汎用コンピュータ、専用コンピュータ、又はマシンを構成する他のプログラム可能データ処理装置のプロセッサに提供されて、コンピュータ又は他のプログラム可能データ処理装置を介して実行される命令が、フロー図に記載された機能／動作を実現するための手段を作成する。これらのコンピュータプログラム命令は、コンピュータ又は別のプログラム可能データ処理装置を特定の方法で機能させることができるコンピュータ読取可能な有形媒体にも記憶され（よってコンピュータプログラム製品になる）、コンピュータ読取可能な有形媒体に記憶された命令が、フロー図に記載された機能／動作を実行する命令手段等の製品を生成するようにする。
【００２４】
本発明の一実施形態では、書込I/Oの待ち行列機構は、複数のストレージアレイにわたる整合性グループをサポートしている既存のRAID（リダンダント・アレイ・オブ・インディペンデント・ディスク）エンジンを補完するものとして実装される。さらに本発明は、当該技術分野で既知の、ストレージアレイがサポートしている任意のローカルスナップショット機構を使用する。ローカルスナップショット機構は、マルチストレージアレイの整合性グループ又は書込I/Oの待ち行列を認識しなくても、適切に機能する。加えて、２PCプロトコルを利用することにより、整合性グループのスナップショットが完成しなかった場合は、ストレージアレイを自動的にクリーンナップすることが可能である。
【００２５】
ここで図３を参照すると、本発明の一実施形態による書込待ち行列機構を用いてマルチアレイの整合性グループを実施するための方法３００を説明するフロー図が示されている。この方法３００では、書込入力／出力（I/O）待ち行列間隔を、整合性グループ（CG)の論理ユニット（LU）メンバに適用する（ステップ３０２）。CGのLUメンバが存在しているストレージアレイは、関与ストレージアレイである。方法３００は、各書込I/Oをタイムスタンプでマーキングする（ステップ３０４）。方法３００は、関与ストレージアレイがマスタストレージアレイからスナップショット要求を受け取ると、関与ストレージアレイからCGのLUメンバへのI/Oを一時停止する（ステップ３０６）。このスナップショット要求はスナップショット要求のタイムスタンプを有している。方法３００は、スナップショット要求のタイムスタンプが、関与ストレージアレイの書込I/O待ち行列間隔の範囲内であるかどうかを決定する（ステップ３０８）。スナップショット要求のタイムスタンプが、関与ストレージアレイの書込I/O待ち行列間隔の範囲内であると決定されると、関与ストレージアレイは、(a)スナップショット要求のタイムスタンプよりも前の各書込I/Oを完了すること、(b)CGのLUメンバのためのローカルスナップショットを作成すること、(c)CGのLUメンバへのI/Oを再開すること、の少なくとも1つを実行する。
【００２６】
方法３００における書込I/O待ち行列間隔をCGのLUメンバに適用するステップは、書込I/Oを先入先出（FIFO）法で待ち行列に入れるステップを含んでいる。方法３００における各書込I/Oをタイムスタンプでマーキングするステップは、分散型クロック同期機構によってCGの各関与ストレージアレイを同期化するステップを含んでいる。分散型クロック同期機構は、ネットワークタイムプロトコル（NTP)である。方法３００の書込I/O待ち行列間隔をCGのLUメンバに適用するステップは、書込I/O待ち行列間隔を、現在の時間から待ち行列内の最古の書込I/Oのタイムスタンプまでの時間間隔として表すステップを含んでいる。方法３００はさらに、往復待ち時間を決定するために、CGの各関与ストレージアレイ間でテストメッセージを交換するステップ含んでいる。方法３００はさらに、往復待ち時間を用いて、書込I/O待ち行列間隔の最少時間間隔を決定するステップを含んでいる。
【００２７】
図４を参照すると、書込待ち行列機構を用いてマルチアレイの整合性グループを実現するための方法のさらなる実施形態である方法４００を説明するフロー図が示されている。方法４００は、CGストレージアレイのコントローラ上で整合性グループ(CG)のスナップショットを開始する（ステップ４０２）。コントローラを有するCGストレージアレイは、マスタと定義され、CGの論理ユニット（LU)メンバが存在しているストレージアレイは、関与ストレージアレイと定義される。該方法はまた、開始されたCGスナップショットのためのタイムスタンプを記録する（ステップ４０４）。方法４００は、準備要求をマスタから各ストレージアレイの各コントローラへ送信する（ステップ４０６）。準備要求を受け取る各関与ストレージアレイは、スレーブと定義される。方法４００はさらに、スレーブが準備要求を受け取ると、LUメンバへのI/Oを一時停止し、タイムスタンプがスレーブの書込入力/出力(I/O)待ち行列間隔の範囲内に入っているかを決定する（ステップ４０８）。方法４００は、タイムスタンプが書込I/O待ち行列間隔内に入っている場合は、タイムスタンプよりも古い、書込I/O待ち行列間隔内にある各書込I/Oを、フラッシュする（ステップ４１０）。方法４００は、(a)LUメンバのスナップショットを作成すること、（b)I/Oを再開すること、(c)準備済み状態を永続的なメモリにログすること、又は(d)準備確認メッセージをマスタに送信すること、の少なくとも１つを実行する（ステップ４１２）。
【００２８】
方法４００はさらに、マスタが準備確認メッセージを各スレーブから受信した場合に、マスタから各スレーブへのコミット（COMIT）要求を発行するステップを含んでいる。各スレーブはマスタからコミット要求を受信すると、各スレーブは、(a)新しい状態を永続的なメモリにログすること、(b)グローバルトランザクションのために保持していたロックを解放すること、(c)LUメンバのスナップショットを削除すること、又は(d)コミット確認メッセージをマスタに送信すること、の少なくとも１つを実行する。方法４００のタイムスタンプが書込I/O待ち行列間隔内に入っていない場合は、スレーブはアボートメッセージを永続的なメモリにログし、かつアボートメッセージをマスタに送信する。方法４００はさらに、マスタがアボートメッセージを少なくとも１つのスレーブから受信した場合に、マスタから各スレーブへのロールバックメッセージを発行するステップを含んでいる。各スレーブがマスタからロールバックメッセージを受信すると、各スレーブは、(a)新しい状態を永続的なメモリにログすること、(b)グローバルトランザクションのために保持していたロックを解放すること、(c)LUメンバのスナップショットを削除すること、又は(d)ロールバック確認メッセージをマスタに送信すること、の少なくとも１つを実行する。方法４００はさらに、タイマを開始するステップを含んでおり、タイマは、マスタから方法４００の各関与ストレージアレイの各コントローラへ準備要求を送信するステップを受けて開始される。方法４００はさらに、マスタが各スレーブから応答を受信する前にタイマが終了した場合に、第１のロールバックメッセージを各スレーブに送信するするステップを含んでいる。方法４００はさらに、第１のロールバックメッセージが送信された後に、あるスレーブが準備確認メッセージを送信した場合に、第２のロールバックメッセージを該スレーブに送信するステップを含んでいる。
【００２９】
本発明において開示された方法は、デバイスにより読取可能の一連の命令又はソフトウェアにより実行される。ソフトウェアパッケージは、開示された本発明の機能及びプロセスをコンピュータが実行するようプログラムするために用いられる、記憶されたコンピュータコードを備えたコンピュータ読取可能記憶媒体を使用するコンピュータプログラム製品である。コンピュータ読取可能記憶媒体は、任意のタイプの従来型フロッピディスク、光ディスク、CD-ROM、磁気ディスク、ハードディスクドライブ、光磁気ディスク、ROM、RAM、EPROM、EEPROM、磁気又は光カード、あるいは電子指示を記憶するための任意の別の適宜の記憶媒体であるが、それらに限定するものではない。
【００３０】
開示された方法におけるステップの、具体的な順序又は階層は、アプローチ例の例示である。設計の好みによって、該方法におけるステップの具体的な順序又は階層は、開示された主題の範囲内において再変更が可能である。添付の方法クレームは、見本的な順序でさまざまなステップの要素を提示したものであり、提示された具体的な順序又は階層に限定するものではない。
【００３１】
本発明及びそれに付随する多数の利点は、前述の記載によって理解されるべきである。また、開示された主題の精神および範囲を逸脱しない限りは、又は物質的利点の全てを犠牲にしない限りは、これに関する部品の形態、構造、及び配置において、多くの変更が可能である。前述された形式は、例示にすぎず、以下に記載の特許請求の範囲はこのような変更を包含するものとする。
【図１Ａ】
0005452615.tif 000002
【図１Ｂ】
0005452615.tif 000003
【図２Ａ】
0005452615.tif 000004
【図２Ｂ】
0005452615.tif 000005
【図３】
0005452615.tif 000006
【図４】
0005452615.tif 000007