以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
図1A及び図1Bは本実施形態の概要を示す図である。図1A及び図1Bに開示される構成は、ホスト計算機180A、ホスト計算機180B、ストレージ装置10A及びストレージ装置10Bからなり、ストレージ装置10A及びストレージ装置10Bがホスト計算機180A及びホスト計算機180Bに対して仮想ストレージ装置15を提供している。
ストレージ装置10Aのボリュームであるボリューム161A及び、ストレージ装置10Bのボリュームであるボリューム161Bは同一のデータが格納され、ホストに対して同じIDを示し、仮想ストレージ装置15の一つの仮想ボリューム151として提供されている。なお、以下において「仮想」と明示されない構成要素は、特に言及のない場合、実構成要素である。
ホスト計算機180A及び180Bはひとつの仮想ボリューム151にリード/ライト指示を送信するが、実際にはボリューム161A及びボリューム161Bいずれにも前記指示が送られる可能性がある。このようなボリューム161Aとボリューム161BのペアをActive−Active型のるHigh Availability(HA)ボリュームペアやHAペアと呼び、図1A及び図1BのようにHAペア含む構成をHA構成と呼ぶ。
以下の説明において、HA構成及びHAペアは、Active−Active型のHA構成及びHAペアを意味する。HAペアは、Primary Volume(PVOL)とSecondary Volume(SVOL)とで構成され、ここではボリューム161AをPVOL、ボリューム161BをSVOLとする。また、PVOLを提供するストレージ装置10AをMDKC(Main DisK Contoller)と呼び、SVOLを提供するストレージ装置10BをRDKC(Remote DisK Contoller)と呼ぶ。
なお、一つのストレージ装置が、異なるHAボリュームペアのPVOLとSVOLとを含むこともできる。つまり、1台のストレージ装置は、各HAボリュームペアにおけるボリューム種別に応じて、MDKC及びRDKCとして機能する。以下図1A及び図2Bを用いて、ホストからPVOL及びSVOLにライト指示及びリード指示が発行された際の処理の概要について説明する。なお、ボリュームへのデータの書き込み及び読み出しとは、キャッシュ又は記憶ドライブへの書き込み及び読み出しである。
図1Aはホスト計算機180AからPVOLであるボリューム161Aにライト指示が入った場合の処理の流れの概要である。
I.ホスト計算機180Aからのライト指示に伴うデータ転送を受けたストレージ装置10Aが受信する。II.ストレージ装置10Aはボリューム161Aのライト先アドレスの排他を取得し、ボリューム161Aにライトする。III.ストレージ装置10AはSVOLであるボリューム161Bにデータを格納させるために、ストレージ装置10Bにライト命令及びデータを転送する。
IV.ライト命令及びデータを受信したストレージ装置10Bはボリューム161Bにデータを格納する。V.ストレージ装置10Bは、ライトの完了報告をストレージ装置10Aに送信する。VI.ストレージ装置10AはIIで取得した排他を解除する。VII.ストレージ装置10Aはホスト計算機180Aに対してライト完了報告を送信する。
このように、PVOLにライト指示を受領した場合には、MDKCはライト先アドレス範囲を排他し、PVOLに書き込みした後、SVOLに書き込みさせ、SVOLへの書き込み完了後に排他を解除しホストに応答をする。詳細は後述するが、SVOL側にライト指示を受領した場合でも、MDKC側で排他を取得し、PLOLを先に書き込みした後、SVOLに書き込みし、その後MDKC側で排他を解除するという順序で、ライト処理が実行される。ライト処理におけるJOB排他制御は、当該領域に対する他のライト処理及びリード処理を禁止する。これにより、PVOLとSVOLの同一性を適切に維持する。
図1Bはホスト計算機180A及び180BからPVOLであるボリューム161A及びSVOLであるボリューム161Bにリード要求を発行した場合の処理の流れの概要である。ボリューム161Bへのリード要求を受領したストレージ装置10BはIO要求を受領した場合、ボリューム161Bからデータをリードし、ホスト計算機180Bにデータを返す。この時にストレージ装置10Aに対して通信を行う必要はない。
ボリューム161Aへのリード要求を受領したストレージ装置10Aは、図1Aでリード要求のあったデータの格納領域に対し、図1Aで説明したライト先アドレス排他が取得されていないか確認し、ライト先アドレス排他がない場合には、ボリューム161Aからデータをリードし、ホスト計算機180Aにデータを返す。
ライト先アドレス排他がされている場合に、ストレージ装置10Aは一定時間Waitし、再度ライト先アドレス排他が取得されているか確認する。PVOLであるボリューム161Aにリードがあった場合にも、ストレージ装置10Aとストレージ装置10B間の通信を行う必要はない。
なお、リード処理におけるJOB排他制御の詳細については後述するが、リード処理におけるJOB排他制御は、当該領域に対する他のライト処理は禁止し、他のリード処理を禁止しても禁止しなくともよい。リード処理を許可することで、他のコマンドの処理の遅延を低減できる。
近年、地震などの災害への対策としてディザスタリカバリの重要性は高まっている。HA機能は、ストレージシステムの高可用性を実現する。HA構成は、二重化された系を有し、障害発生時には自動的に故障した系を切り離し、正常な系のみを用いて動作を継続することができる。さらに、ディザスタリカバリやリソースの有効利用の観点等から、ストレージ装置の二重化によるActive−Active型HA構成に対する要求が強くなってきている。
Active−Active型HA構成は、全ての系を稼動系として運用する。Active−Active型HA構成において、情報システムは、ホストからのボリュームペアのいずれへのI/Oアクセスも受け付けることができ、パスの帯域、ストレージコントローラ処理能力、ドライブの処理能力などのリソースを有効活用する事が出来る。
ボリュームペアのいずれへのI/Oアクセスも受け付けるには、PVOLとSVOLのいずれにアクセスされたとしても、新しいデータを読み出された後に、古いデータが読みだされる事を防ぐ必要がある。この順序が逆になってしまうまき戻りが起こることによりホストの誤作動が生じる可能性があるためである。
そこで本実施例では、一例としてPVOLへのI/Oアクセスは、PVOLにおけるJOB排他制御を伴い、SVOLへのI/OアクセスにおいてJOB排他制御は使用されない。PVOLにおけるJOB排他制御により、ホストからのコマンドに対するPVOLとSVOLの同一性を適切に維持でき、さらにSVOLの排他制御を省略することで、処理を効率化できる。
また、本実施例はディザスタリカバリの観点から二重化したストレージは異なるサイトに置かれ、このサイト間は100km程度を想定している。このためサイト間の通信で1ms程度遅延する。このため、ライト及びリードコマンドへの応答の際にIO同期でのサイト間通信を減らす必要がある。本実施例では、ホストからのリード処理において、MDCK及びRDKCは、それぞれストレージ装置間の通なしで、PVOL及びSVOLから読み出したデータをホストに返す。ストレージ装置の通信が不要であり、ホストからのリードコマンドの処理の遅延を防ぐことができる。
さらに、前述の様にデータの増大によりシステムの大規模化が進んでおり、システム構築コスト及びシステム管理コストの低減の観点からも少ない装置点数での機能実現が求められている。本実施例では特別な装置であるアプライアンス等を用いる必要なく、Active−Active型HA構成を実現している。
図2は、本実施形態における情報システムを含む計算機システムの構成例を示している。図2の計算機システムは、ホスト計算機180A、180B、ストレージ装置10A〜10C、及び、管理計算機20を含む。ストレージ装置10A〜10Cが情報システムに含まれ、ホスト計算機180A、180Bは情報システムにアクセスし、管理計算機20は情報システムを管理する。
計算機システムに含まれる各種装置(システム)の数は、設計に依存する。ストレージ装置10A、10Bは、Active−Active型HAストレージペアを構成し、さらに、仮想ストレージ装置を提供する。ストレージ装置10A、10B、それぞれ、ホスト計算機180A、180Bに対して、同一の仮想ストレージ装置として振舞う。以下に説明する例においては、ストレージ装置10A、10Bは、1台の仮想ストレージ装置を構成する。
ストレージ装置10Cは、Quorum Diskを持つ。Quorum Diskは、HA構成におけるストレージ装置10A、10B間で通信不可となった場合に、HA構成のストレージ装置10A、10Bのうち、継続稼動させるものと停止させるものを決定する機能を提供する。
具体的にはストレージ装置10A、10Bはそれぞれストレージ装置の状態や、それぞれのストレージ装置から見た他方のストレージ装置への通信状態をQuorum Diskに書き込む。互いのストレージ装置は、Quorum Diskを定期的又はIO応答に同期して参照し、Quorum Diskに書き込まれた情報に基づいて継続稼動させるものと停止させるものを決定する。
ホスト計算機180A、180B、管理計算機20及びストレージ装置10A〜10Cは、LAN195で構成された管理ネットワークにより、通信可能に接続されている。例えば、管理ネットワーク195は、IPネットワークである。管理ネットワーク195は、管理データ通信用のネットワークであればどのタイプのネットワークでもよい。
ホスト計算機180A、180B、及びストレージ装置10A〜10Cは、SAN(Storage Area Network)190で構成されたデータネットワークにより接続されている。ホスト計算機180A、180Bは、SAN190を介して、ストレージ装置10A、10Bのボリュームにアクセスする。ストレージ装置10A〜10Cは、SAN190を介して、互いに通信する。
データネットワーク190はデータ通信用のネットワークであれば、どのようなタイプのネットワークでもよい。データネットワーク190と管理ネットワーク195は同一のネットワークでもよい。
図3は、ホスト計算機180及びストレージ装置10のハードウェア構成例を模式的に示している。ホスト計算機180及びストレージ装置10は、それぞれ、計算機システム内の任意のホスト計算機及びストレージ装置を示している。
ホスト計算機180は、二次記憶デバイス181、プロセッサであるCPU182、主記憶装置であるメモリ183、入力デバイス184、出力装置である表示デバイス185、I/F186、及びポート187を備える。これらは、内部ネットワークによって相互に接続される。管理計算機20も同様のハードウェア構成を有することができる。
CPU182は、メモリ183に格納されるプログラムを実行することによって、各種処理を行う。例えば、メモリ183は、OS、交替パスプログラム及びアプリケーションプログラムを保持する。アプリケーションプログラムは、ストレージ装置10が提供するボリュームへデータの読み書きを行う。交替パスプログラムは、仮想ボリュームに割当てられているパスから、アクセス先の実ボリュームに対するパスを選択する。
ポート187は、SAN190に接続するネットワークインタフェースである。ポート187は、SAN190を介してストレージ装置10とデータ及び要求を送受信する。インタフェース186は、LAN195に接続するネットワークインタフェースである。インタフェース186は、LAN195を介して管理計算機20及び物理ストレージ装置10と管理データ及び制御命令を送受信する。
ストレージ装置10は、複数の記憶ドライブ170を収容している。記憶ドライブ170は、例えば、不揮発性の磁気ディスクを有するHDD、不揮発半導体メモリ(例えばフラッシュメモリ)を搭載したSSDである。この記憶ドライブ170に基づきボリューム161などが構成される。
記憶ドライブ170は、ホスト又は他のストレージ装置から送られたデータ(ユーザデータ)を格納する。複数の記憶ドライブ170がRAID演算によるデータの冗長化を行うことで、1つの記憶ドライブ170に障害が発生した場合のデータ消失を防ぐことができる。
ストレージ装置10は、SAN190を介して外部装置と接続するためのフロントエンドパッケージ(FEPK)100を含む。本例の計算機システムにおいて、外部装置は、ホスト又はストレージ装置である。
ストレージ装置10は、さらに、記憶ドライブ170と接続するためのバックエンドパッケージ(BEPK)140、キャッシュメモリを搭載するキャッシュメモリパッケージ(CMPK)130、内部処理を行うマイクロプロセッサを搭載するマイクロプロセッサパッケージ(MPPK)120、及びそれらを接続する内部ネットワーク150を有する。
本例のストレージ装置10は、複数のFEPK100、複数のBEPK140、複数のCMPK130、そして複数のMPPK120を含む。ストレージ装置10は、さらに、管理計算機20との通信におけるインタフェースとして機能する管理プロセッサを含んでもよい。
各FEPK100は、外部装置との接続を行うためのインタフェース101、ストレージ装置10内のデータ転送を行うための転送回路112を基板上に有する。インタフェース101は複数のポートを含むことができ、各ポートが外部装置と接続することができる。インタフェース101は、外部装置とストレージ装置10との間のデータ通信に用いられるプロトコル、例えばFibre Channel Over Ethernet(FCoE)を、内部ネットワーク150で用いられるプロトコル、例えばPCI−Expressに変換する。また、バッファ113を備える。バッファはホスト計算機180aから受信したデータ一時的に格納する領域であり、DRAMなどの記憶媒体で構成される。
各BEPK140は、ドライブ170と接続するためにインタフェース141、ストレージ装置10内のデータ転送を行うための転送回路142を基板上に有する。インタフェース141は、記憶ドライブ170との通信に用いられるプロトコル、例えばFCを、内部ネットワーク150で用いられるプロトコルに変換する。
各CMPK130は、ユーザデータを一時的に格納するキャッシュメモリ(CM)131及び1又は複数のMPPK120が扱う制御情報を格納する共有メモリ(SM)132を基板上に有する。
異なるボリュームを担当する複数のMPPK120(のマイクロプロセッサ)が、共有メモリ132にアクセスすることができる。MPPK120が扱うデータやプログラムは、ストレージ装置10内の不揮発性メモリ(不図示)又は記憶ドライブ170からロードされる。
各MPPK120は、1以上のマイクロプロセッサ121、ローカルメモリ(LM)122及びそれらを接続するバス123を有する。本例のMPPK120には、複数のマイクロプロセッサ121が実装されている。マイクロプロセッサ121の数は1つでもよい。ローカルメモリ122は、マイクロプロセッサ121が実行するプログラム及びマイクロプロセッサ121が使用する制御情報を格納する。
上述のように、一つの共有メモリ132は、複数のMPPK120が扱う制御情報を格納する。MPPK120は、共有メモリ132から、自身が必要とする制御情報を自身のローカルメモリ122にロードする。
本構成例において、MPPK120(のマイクロプロセッサ121)には、ストレージ装置10がホスト計算機180A、180Bに提供するボリュームの担当が割り当てられる。MPPK120に割り当てられているローカルメモリ122及び共有メモリ132が、当該MPPK120がI/Oを担当するボリュームの制御情報を格納する。
図4は、ストレージ装置10A、10Bがホスト計算機180に提供する仮想構成例を示している。ストレージ装置10A、10Bは、それぞれ、ターゲットポート102A、102Bを有する。ターゲットポート102Aに対して、ボリューム161A、162A、163が割当てられている。ターゲットポート102Bに対して、ボリューム161B、162B、164が割当てられている。
なお、ボリュームは、ボリューム容量と実際の容量が一致するいわゆるLDEVでも、プールからページを割り当てるシンプロビジョニングボリュームでもよい。また、全てのボリュームは図示しない他のストレージ装置の備える記憶媒体に基づいて構成されてもよい。この場合、当該ボリュームにホスト計算機からアクセスがされた場合には、アクセスをされたストレージ装置は、記憶媒体を備える他のストレージと通信を行い、ホスト計算機に応答を行う。
ストレージ装置10A、10Bは、仮想ストレージ装置15をホスト計算機180に提供する。ホスト計算機180は、仮想ストレージ装置15の製造番号(S/N)は、XXXである。一方、ストレージ装置10A、10B、それぞれ、製造番号AAA、製造番号BBBを有している。ホスト計算機180は、仮想ストレージ装置15を、ターゲットポート102A、102Bを含む、製造番号XXXのストレージ装置と認識する。製造番号は、ストレージ装置及び仮想ストレージ装置の識別子である。
ボリューム161A、161Bは、HAボリュームペアを構成し、一つの仮想ボリューム151を構成する。ボリューム161A、161BのIDは、それぞれ、10:00、30:00である。一方、仮想ボリューム151のIDは、20:00である。
ボリューム162A、162Bは、HAボリュームペアを構成し、一つの仮想ボリューム152を構成する。ボリューム162A、162BのIDは、それぞれ、10:01、30:01である。一方、仮想ボリューム152のIDは、20:01である。
ボリューム163、164は、それぞれ、仮想ボリューム153、154を構成する。ボリューム163、164のIDは、それぞれ、10:02、30:02である。一方、仮想ボリューム153、154のIDは、それぞれ、20:02、20:03である。
ホスト計算機180は、仮想ボリューム151〜154を、仮想ストレージ装置15が提供し、IDが20:00〜20:03のボリュームと認識する。ホスト計算機180は、ターゲットポート102A、102Bのいずれを介しても、仮想ボリューム151、152にアクセスすることができる。ホスト計算機180は、ターゲットポート102Aのみを介して仮想ボリューム153にアクセスし、ターゲットポート102Bのみを介して仮想ボリューム154にアクセスする。
図5は、ストレージ装置10のCMPK130の共有メモリ132内に格納されている情報を示している。共有メモリ132は、VOLマッピング情報管理テーブル210、HAボリュームペア管理テーブル220、LUパス管理テーブル230、VOL管理テーブル240、PG管理テーブル250、及び、キャッシュスロット管理テーブル270を格納している。共有メモリ132は、複数のMPPK120からアクセスされ得る。
図6は、ストレージ装置10のMPPK120のローカルメモリ122内に格納されている情報を示している。ローカルメモリ122は、JOB管理テーブル260を格納している。
以下において、上記テーブルの構成例を説明する。以下の説明で参照される図面は、ストレージ装置10Aのテーブルを例示している。図7は、VOLマッピング情報管理テーブル210の構成例を示している。VOLマッピング情報管理テーブル210は、ストレージ装置10が有するボリュームの実構成情報と仮想構成情報とを関連付ける。具体的には、VOLマッピング情報管理テーブル210は、ボリュームIDのカラム211、仮想ボリュームIDのカラム212、仮想ストレージ装置の製品番号(識別子)のカラム213、HAフラグのカラム214を有する。
各エントリは、ボリュームが対応付けられている仮想ボリュームのID、当該仮想ボリュームを提供する仮想ストレージ装置のID、及び、当該ボリュームがHAボリュームペアを構成するか否かを示している。HAフラグのカラムの値がONのとき、当該ボリュームは、他のボリュームとHAボリュームペアを構成する。
図8は、HAボリュームペア管理テーブル220の構成例を示している。HAボリュームペア管理テーブル220は、HAボリュームペアの管理情報を保持している。具体的には、HAボリュームペア管理テーブル220は、HAボリュームペアのIDのカラム221、HAボリュームペアの状態を示しているカラム222、HAボリュームペアのPVOLのIDのカラム223、PVOLを提供するMDKCの識別子を格納するカラム224を有する。
HAボリュームペア管理テーブル220は、さらに、HAボリュームペアのSVOLのIDのカラム225、SVOLを提供するRDKCの識別子を格納するカラム226を有する。各エントリにおいて、PVOL又はSVOLが、当該ストレージ装置10が提供するボリュームである。
ペア状態の例は、COPY状態、PAIR状態、SUSPEND状態等である。COPY状態は、HAボリュームペアの一方のボリュームから他方のボリュームにデータコピーをしている状態である。PAIR状態は、HAボリュームペアの二つのボリュームが同期している状態である。SUSPEND状態は、HAボリュームペアの二つのボリュームが非同期の状態である。
図9は、LUパス管理テーブル230の構成例を示している。LUパス管理テーブル230は、LUNに関連付けられているポート及びボリュームを管理する。具体的には、LUパス管理テーブル230は、ポートIDのカラム231、LUNのカラム232、ボリュームIDのカラム233を有する。
図10は、VOL管理テーブル240の構成例を示している。VOL管理テーブル240は、ボリュームの特性情報を保持している。具体的には、VOL管理テーブル240は、ボリュームIDのカラム241、ボリュームのサイズを示しているカラム242、ボリュームへ物理記憶領域を提供するパリティグループ(PG)のカラム243を有する。パリティグループは、RAIDグループとも呼ばれる。
図11は、PG管理テーブル250の構成例を示している。PG管理テーブル250は、パリティグループの特性を管理する。具体的には、PG管理テーブル250は、パリティグループのIDのカラム251、パリティグループのタイプを示しているカラム252、パリティグループのサイズを示しているカラム253、パリティグループのRAIDレベルを示しているカラム254を有する。
図12は、キャッシュスロット管理テーブル270の構成例を示している。キャッシュスロット管理テーブル270は、キャッシュされているデータを管理する。具体的には、キャッシュスロット管理テーブル270は、キャッシュの管理単位であるキャッシュスロット(単にスロットとも呼ぶ)に関する情報を保持している。スロットのサイズは、共通であり、スロット番号から当該スロットのキャッシュ内アドレスが特定できる。
ストッロ番号カラム271は、スロットの番号を格納している。PG IDカラム272及びPG内アドレスカラム273は、スロットに格納されているデータを格納するパリティグループのID及び当該パリティグループ内のアドレスを示している。VOL IDカラム274及びVOL内アドレスカラム275は、スロットに格納されているデータを格納するボリュームの識別子及びボリューム内のアドレスを示している。
スロットステータスカラム276は、スロットの状態を示している。フリー状態は、スロットが開放されていることを示している。なお、ここではフリー状態のスロットも管理しているが他の状態でないスロットはフリーとして管理しなくても良い。ダーティ状態は、スロット内のデータがパリティグループに書き込まれる前であることを示している。スロット内のデータとパリティグループのデータが、不一致である。
クリーン状態は、PVOLとSVOLとの間において異なる。PVOLのクリーン状態は、スロット内のデータがパリティグループに書き込まれ、かつ、SVOLにも書き込まれた後(RDKCからの完了応答後)であることを示している。つまり、スロット内のデータがパリティグループ内のデータに一致する。SVOLのクリーン状態は、スロット内のデータがパリティグループに書き込まれた後であることを示している。
二重書き中状態は、PVOL特有の状態であり、スロット内のデータがSVOLに書き込まれる前(RDKCからの完了応答前)であることを示している。つまり、PVOLのデータがSVOLのデータと一致していないことを示している。
図13は、JOB管理テーブル260の構成例を示している。JOB管理テーブル260は、それを保持しているMPPK120が実行するJOBを管理する。ここでのJOBは、ボリュームへのライト処理又はボリュームからのリード処理である。JOB管理テーブル260は、実行中のJOB及び今後実行すべきJOBの情報を保持している。JOB管理テーブル260の最大エントリ数は決まっている。
JOB番号カラム261は、JOBの識別子を示している。処理種別カラム262は、JOBにおいて実行すべき処理の種別を示している。具体的には、ホスト計算機180からのリードコマンドに対応した処理(HOST READ)、ホスト計算機180からのライトコマンドに対応した処理(HOST WRITE)、他のストレージ装置からのリードコマンドに対応した処理(DKC間READ)、他のストレージ装置からのライトコマンドに対応した処理(DKC間WRITE)である。
HA P/Sカラム263は、JOBの対象ボリュームが、HAボリュームペアのボリュームであるか、さらに、HAボリュームペアのボリュームである場合に、PVOLであるかSVOLであるかを示している。
VOL IDカラム264は、JOBの対象ボリュームのIDを示している。START LBAカラム265及びLBA LENGTHカラム266は、JOBの対象データのボリューム内の開始アドレス及びデータサイズ(アドレス長)を示している。
排他種別カラム267は、JOBが排他ロックを確保しているか、さらに、排他ロックを確保している場合にその排他種別を示している。RD共有は、当該アドレス領域へのライトを禁止し、リードを許可する。R/W排他は、当該アドレス領域へのライト及びリードを禁止する。
JOB番号及びMPPK番号カラム268は、ホスト計算機180からSVOLへのライトコマンドに対応した処理を示しているエントリにおいて、データを格納する。JOB番号及びMPPK番号カラム268は、対応PVOLへのMDKCにおけるライト処理のJOBを特定する情報を格納する。JOBは、JOB番号と当該JOBを実行するMPPKの番号(MPPKの識別子)で特定される。後述するように、JOB特定情報は、RDKCからMDKCへ排他ロック解除コマンドに含まれる。
図14のシーケンス図は、ホスト計算機180に対して、仮想ストレージ装置15及び仮想ボリューム151〜154の情報を提供する方法を示している。ホスト計算機180は、ストレージ装置10にログイン要求を送信し、その応答を受信した後、REPORTLUNコマンドを送信する。REPORT LUNコマンドは、当該ポートにおいてアクセス可能なLUN(Logial Unit Number)のリストを要求する。ストレージ装置10Aは、LUパス管理テーブル230を参照し、アクセス可能なLUNのリストを返す(REPORT LUN応答)。
ホスト計算機180は、INQUIRYコマンドを用いて、ストレージ装置10の製造番号及びLUNが対応するボリュームのIDを問い合わせることができる。ストレージ装置10は、ストレージ装置10は、LUパス管理テーブル230及びVOLマッピング情報管理テーブル210を参照し、対応する仮想構成が定義されているか判定する(S101)。
対応する仮想構成(仮想ストレージ装置又は仮想ボリューム)が定義されている場合(S101:Y)、ストレージ装置10は、当該仮想構成の情報をINQUIRY応答に含めて返す(S102)。仮想構成が定義されていない場合(S101:N)、ストレージ装置10は実構成の情報をINQUIRY応答に含めて返す(S103)。
図4の構成において、例えば、ホスト計算機180が、ストレージ装置10A(S/N:AAA)に対して、製造番号の通知を要求した場合、当該要求を受領したストレージ装置10Aは、仮想ストレージ装置15の製造番号XXXを、ホスト計算機180に応答する。ストレージ装置10Bも、仮想ストレージ装置15の製造番号XXXを、ホスト計算機180に応答する。
仮想ストレージ装置15の製造番号は、HAストレージ装置ペアを構成するストレージ装置10A及び10Bで共通である。HAストレージペアを構成するストレージ装置10A、10Bを、単一の仮想ストレージ装置15としてホスト計算機180に認識させる。
同様に、ホスト計算機180が、INQUIRYコマンドを用いて、ストレージ装置10Aに対して、LUNに対応するボリュームID(VOL ID)の通知を要求した場合、ストレージ装置10Aは、仮想ボリューム151〜153のID(20:00〜20:02)をホスト計算機180に応答する。同様に、ストレージ装置10Bは、仮想ボリューム151、152、154のID(20:00、20:01、20:03)をホスト計算機180に応答する。
このようにして、ホスト計算機180は、仮想ボリューム151〜154を認識し、さらに、仮想ボリューム151、152のそれぞれに対する二つのパス(ポート)及び仮想ボリューム153、154それぞれに対する一つのパス(ポート)を認識する。
HAボリュームペアの作成を説明する。管理者は、ボリュームを使用して、HAボリュームペアを作成する。管理者は、管理計算機20を使用して、HAボリュームペアを作成することを、ストレージ装置10A、10Bに指示している。
HAボリュームペアの一方がPVOLとして定義され、他方がSVOLと定義される。管理者は、管理計算機20を使用してPVOLとSVOLを定義してもよい。後述するように、PVOLとSVOLの間では、ホスト計算機180からアクセスに対する処理が異なる。ストレージ装置10A、10Bは、HAボリュームペアを作成するとHAボリュームペア管理テーブル220に新しいエントリを追加する。
さらに、HAボリュームペアに共通の仮想情報が定義される。ストレージ装置10A、10B又は管理者は、HAボリュームペアに共通の仮想ボリュームIDを定義する。ストレージ装置10A、10Bは、定義された仮想情報を有する新しいエントリを、VOLマッピング情報管理テーブル210に追加する。
HAボリュームペアが定義されると、ストレージ装置10A、10Bは、PVOLからSVOLへの初期データコピーを開始する。初期データコピーが完了すると、二つのボリュームは同一のデータを有し、互いに同期する。つまり、ストレージ装置10A、10Bは、それぞれ、ホスト計算機180からのライトコマンドを受信し、互いの間でライトコマンドとライトデータの通信を行って、PVOLとSVOLの双方を更新し、ボリューム間の同一性を維持する。
後述するように、ストレージ装置10A、10Bは、ホスト計算機180からのリードコマンドに対して、ストレージ装置10A、10B間での通信を行うことなく、自装置のボリュームのデータをホスト計算機180に返す。これにより、処理遅延を避ける。
ストレージ装置10A、10Bの一方において障害が発生し、ホスト計算機180からのI/Oアクセスに応答できない場合、それを検知した障害が発生していない他方のストレージ装置が、ホスト計算機180からの全てのI/Oアクセスを処理する。
一方のボリュームにおいて障害が発生し、ストレージ装置10A、10Bがホスト計算機180と通信できる場合、障害発生したボリュームを保持するストレージ装置は、他方のストレージ装置にホスト計算機180からコマンドを転送する。
例えば、ストレージ装置10Bのボリュームにおいて障害が発生したとする。ストレージ装置10Bは、ホスト計算機180からのライトコマンドをストレージ装置10Aに転送し、ストレージ装置10Aは、自装置のボリュームへのライト処理を実行する。ストレージ装置10Bは、ホスト計算機180にライト完了応答を返す。また、ストレージ装置10Bは、ストレージ装置10Aから受信したリードデータをホスト計算機180に返す。ストレージ装置10Aのボリュームにおいて障害が発生した場合も、ストレージ装置10Aとストレージ装置10Bの対応が逆転するだけで同様である。
このように、本情報システムは、高可用性を示し得る。また、PVOLとSVOLとに対して、障害発生時における異なる役割を定義することができる。例えば、ストレージ装置10A、10B間の通信で障害が発生した場合、情報システムは、ホスト計算機180からのPVOLへのI/Oアクセスを受け付け、SVOLへのI/Oアクセスをブロックする。これにより、仮想ボリュームにおけるデータ同一性が維持される。
ストレージ装置10A、10Bは、他装置の障害やストレージ装置10A、10B間の通信障害を、Quorum Disk及びストレージ装置10A、10B間通信の状態により知ることができる。
図15は、ホスト計算機180からPVOLへのライト処理のシーケンスを示している。ホスト計算機180は、MDKC10Mに対して、仮想ボリューム内の領域へのライトコマンド(WR CMD)を発行する。MDKC10Mは、仮想ボリュームに対応するPVOLにおいて、ライトコマンドにより指定された領域に対する排他ロックを確保する(S201)。
MDKC10Mは、データ受信の準備ができると、データ転送のREADY応答(XFR RD)をホスト計算機180に返し、ホスト計算機180からライトデータ(WR DAT)を受信する。MDKC10Mは、受信したライトデータを、PVOL内のアドレス領域に書き込む(S202)。上述のように、PVOLへ書き込みは、ライトキャッシュ機能がONであればキャッシュメモリ131への書き込みであり、ライトキャッシュ機能がOFFであればパリティグループ(物理記憶領域)への書き込みである。
MDKC10Mは、PVOLとHAボリュームペアを構成するSVOL内の領域へのライトコマンド(WR CMD)をRDKC10Rに送信する。SVOLは、ボリュームID又は別途定義されているLUNにより指定できる。RDKC10Rは、データ転送のREADY応答(XFR RD)をMDKC10Mに返し、MDKC10Mからライトデータ(WR DAT)を受信する。RDKC10Rは、受信したライトデータを、SVOL内のアドレス領域に書き込む(S203)。SVOLへの書き込みは、上記PVOLへの書き込みと同様である。
RDKC10Rは、SVOL内のアドレス領域へのデータの書き込みが完了すると、ライト完了応答(WR RSP)をMDKC10Mに返す。MDKC10Mは、RDKC10Rからライト完了応答受信した後、ホスト計算機180にライト完了応答(WR RSP)を返す。さらに、MDKC10Mは、確保していた排他ロックを解除する(S204)。
図16は、ホスト計算機180からSVOLへのライト処理のシーケンスを示している。ホスト計算機180は、RDKC10Rに対して、仮想ボリューム内の領域へのライトコマンド(WR CMD)を発行する。
RDKC10Rは、データ受信の準備ができると、データ転送のREADY応答(XFR RD)をホスト計算機180に返し、ホスト計算機180からライトデータ(WR DAT)を受信する。RDKC10Rは、SVOLとHAボリュームペアを構成するPVOL内の領域へのライトコマンド(WR CMD)をMDKC10Mに送信する。
MDKC10Mは、ライトコマンドで指定されたボリューム内の領域に対する排他ロックを確保する(S251)。その後、MDKC10Mは、データ転送のREADY応答(XFR RD)をRDKC10Rに返し、RDKC10Rからライトデータ(WR DAT)を受信する。
MDKC10Mは、受信したライトデータを、PVOL内の指定された領域に書き込む(S252)。MDKC10Mは、PVOL内の領域へのデータの書き込みが完了すると、ライト完了応答(WR RSP)をRDKC10Rに返す。
RDKC10Rは、MDKC10Mからライト完了応答受信した後、SVOL内の指定された領域にライトデータを書き込む(S253)。RDKC10Rは、ホスト計算機180に、ライト完了応答(WR RSP)を返す。その後、RDKC10Rは、JOBを指定して、排他ロック解除コマンドをMDKC10Mに送信する。MDKC10Mは、確保していた排他ロックを解除し(S254)、指定されたJOBの排他ロックを解除したことを示している応答をRDKC10Rに返す。
図17は、ホスト計算機180からのライトコマンドに対するMDKC10M及びRDKC10Rの処理のフローチャートを示している。図17において、MDKC10Mは、ステップS301〜S311を実行し、RDKC10Rは、ステップS301、S302、S312〜S319を実行する。以下に説明する例では、ボリュームへの書き込みは、キャッシュメモリ130へのライトデータの書き込みが対応する。
まず、MDKC10Mの処理を説明する。MDKC10Mは、ホスト計算機180からライトコマンドを受信する。ライトコマンドは、LUNを使用して対象ボリュームを指定する。MDKC10Mは、ライトコマンドが指定する仮想ボリュームに対応するボリュームIDを、LUパス管理テーブル230を参照して決定する。
MDKC10Mは、JOB管理テーブル260に、新たなエントリを作成することでJOBを確保する(S301)。具体的には、MPPK120は、そのJOB管理テーブル260においてフリーのJOBを選択し、そのエントリに、処理種別(HOST WRITE)、並びに、ライトコマンドが指定するボリューム及びアドレスの情報を書き込む。排他種別カラム267のセルは未記入である。図13のJOB管理テーブル260において、JOB番号が1のエントリが、ホスト計算機180からPVOLへのライト処理を示している。
MPPK120は、HAボリュームペア管理テーブル220を参照し、指定されたボリュームが、HAボリュームペアのPVOL又はSVOLであるか判定する(S302)。ここでは、指定されたボリュームは、PVOLである。
次に、MPPK120は、新たなJOBの排他ロックを確保する(S303)。具体的には、MPPK120は、JOB管理テーブル260を検索し、指定ボリュームかつ指定領域の排他ロックを確保している他のJOBを検索する。排他ロックが確保されている場合、当該排他ロックの解除を待つ。排他ロックを確保する順序は、例えば、不図示のキューにより制御される。なお、排他制御単位は、本例のようにLBA単位でもよいし、ボリューム単位でもよい。ボリューム内の一部領域のみ排他ロックすることで、他のコマンドの処理への影響を小さくすることができる。
指定ボリュームかつ指定領域の排他ロックが他のJOBによって確保されていない場合、MPPK120は、新規JOBの排他種別カラム267のセルに排他ロックを設定する。処理はPVOLへのライト処理であり、その排他種別は、R/W排他である。
排他ロックを確保すると、MPPK120は、ホスト計算機180に対してデータ転送のREADY応答を返し、ホスト計算機180からのライトデータを待つ(S304)。MPPK120は、ライトデータのためのキャッシュスロットを確保する(S305)。具体的には、MPPK120は、キャッシュスロット管理テーブル270において、フリーのスロットに、新たなデータを設定する。MPPK120は、VOL管理テーブル240を参照して、指定ボリュームに対応するパリティグループを特定できる。
MPPK120は、FEPK100を使用して受信したライトデータを確保したキャッシュスロットに書き込む(S306)。MPPK120は、キャッシュスロット管理テーブル270において、当該キャッシュスロットのスロットステータスを、二重書き中に設定する。
MPPK120は、RDKC10Rに対して、PVOLに対応するSVOLへのライトコマンドを発行し、データ転送のREADY応答を待つ(S307)。MPPK120は、HAボリュームペア管理テーブル220から、SVOL及びSVOLを保有するRDKC10RのIDを取得する。MPPK120は、当該RDKC10Rに対して、当該SVOLへのライト処理を指示している。SVOLはボリュームID又は別途定義されているLUNにより指定され得る。
READY応答を受信すると、MPPK120は、FEPK100を使用してRDKC10Rにホスト計算機180から受信したライトデータを転送し、ライト完了の応答を待つ(S308)。
RDKC10Rからライト完了応答を受信すると、MPPK120は、ホスト計算機180にライト完了応答を送信する(S309)。さらに、MPPK120は、キャッシュスロット管理テーブル270において、当該キャッシュスロットのスロットステータスを、ダーティに変更する(S310)。例えば、MPPK120は、JOB管理テーブル260から当該JOBの対象ボリューム及び領域を取得し、それによりキャッシュスロット管理テーブル270において対応キャッシュスロットを特定できる。
MPPK120は、JOB管理テーブル260を更新して、当該JOBの排他ロックを解除する(S311)。例えば、MPPK120は、JOB管理テーブル260において当該JOBを開放することで、排他ロックを解除する。
次に、RDKC10Rの処理を説明する。RDKC10RによるステップS301、S402は、MDKC10MによるS401、S402と実質的に同様である。ただし、ホスト計算機180からのライトコマンドにより指定されたボリュームはSVOLである。図13において、JOB番号が5のエントリが、ホスト計算機180からSVOLへのライト処理を示している。
指定されたボリュームを担当するMPPK120は、ホスト計算機180に対してデータ転送のREADY応答を返し、ホスト計算機180からのライトデータを待つ(S312)。
FEPK100は、ホスト計算機180から受信したライトデータをバッファ113に保持する。MPPK120は、MDKC10Mに対して、SVOLに対応するPVOLへのライトコマンドを発行し、データ転送のREADY応答を待つ(S313)。MPPK120は、HAボリュームペア管理テーブル220から、PVOL及びPVOLを保有するMDKC10MのIDを取得する。MPPK120は、当該MDKC10Mに対して、当該PVOLへのライト処理を指示している。PVOLはボリュームID又は別途定義されているLUNにより指定され得る。
READY応答を受信すると、MPPK120は、FEPK100を使用してMDKC10Mにホスト計算機180から受信したライトデータを転送し、ライト完了の応答を待つ(S314)。
MPPK120は、MDKC10Mから受信したライト完了応答を解析し、JOB特定情報を取得する(S315)。ライト完了応答は、当該ライト処理のJOBを特定する情報を含む。JOB特定情報は、当該JOBの番号、及び、MDKC120において当該JOBを担当しているMPPKの番号を含む。MPPK120は、JOB管理テーブル260において、当該エントリのカラム268にJOB特定情報を格納する。
MPPK120は、ライトデータのためのキャッシュスロットを確保する(S316)。具体的には、MPPK120は、キャッシュスロット管理テーブル270において、フリーのスロットに、新たなデータを設定する。MPPK120は、VOL管理テーブル240を参照して、指定ボリュームに対応するパリティグループを特定できる。
MPPK120は、バッファ113に格納されたライトデータを確保したキャッシュスロットに書き込む(S317)。MPPK120は、キャッシュスロット管理テーブル270において、当該キャッシュスロットのスロットステータスを、ダーティに設定する。
キャッシュライトの後、MPPK120は、ホスト計算機180にライト完了応答を送信する(S318)。さらに、MPPK120は、JOB管理テーブル260からJOB特定情報を取得し、当該JOB特定情報を含む排他ロック解除コマンドを生成する。MPPK120は、生成した排他ロック解除コマンドをMDKC10Mに送信し、MDKC10Mからの応答を待つ(S319)。
図18は、MDKC10MとRDKC10Rとの間のライトコマンドに対する、MDKC10MとRDKC10Rの処理のフローチャートを示している。図18において、MDKC10Mは、ステップS351〜S361を実行し、RDKC10Rは、ステップS351、S352、S362〜S365を実行する。
まず、MDKC10Mの処理を説明する。MDKC10Mは、RDKC10Rからライトコマンドを受信する。ライトコマンドは、ボリュームID又は別途定義されたLUNにより対象ボリュームを指定する。MDKC10Mは、JOB管理テーブル260に、新たなエントリを作成することでJOBを確保する(S351)。
具体的には、指定されたボリュームを担当するMPPK120は、そのJOB管理テーブル260においてフリーのJOBを選択し、そのエントリに、処理種別(DKC間WRITE)、並びに、ライトコマンドが指定するボリューム及びアドレスの情報を書き込む。排他種別カラム267のセルは未記入である。図13において、JOB番号が3のエントリが、RDKC10RからPVOLへのライトコマンドの処理を示している。
MPPK120は、HAボリュームペア管理テーブル220を参照し、指定されたボリュームが、HAボリュームペアのPVOL又はSVOLであるか判定する(S352)。ここでは、指定されたボリュームは、PVOLである。
次に、MPPK120は、新たなJOBの排他ロックを確保する(S353)。具体的には、MPPK120は、JOB管理テーブル260を検索し、指定ボリュームかつ指定領域の排他ロックを確保している他のJOBを検索する。排他ロックが確保されている場合、当該排他ロックの解除を待つ。排他ロックを確保する順序は、例えば、不図示のキューにより制御される。
指定ボリュームかつ指定領域の排他ロックが他のJOBによって確保されていない場合、MPPK120は、新規JOBの排他種別カラム267のセルに排他ロックを設定する。処理はPVOLへのライト処理であり、その排他種別は、R/W排他である。
排他ロックを確保すると、MPPK120は、RDKC10Rに対してデータ転送のREADY応答を返し、RDKC10Rからのライトデータを待つ(S354)。MPPK120は、ライトデータのためのキャッシュスロットを確保する(S355)。具体的には、MPPK120は、キャッシュスロット管理テーブル270において、フリーのスロットに、新たなデータを設定する。MPPK120は、VOL管理テーブル240を参照して、指定ボリュームに対応するパリティグループを特定できる。
MPPK120は、FEPK100を使用して受信したライトデータを確保したキャッシュスロットに書き込む(S356)。MPPK120は、キャッシュスロット管理テーブル270において、当該キャッシュスロットのスロットステータスを、二重化書き中に設定する。
ライトデータをキャッシュメモリ130も書き込んだ後、MPPK120は、RDKC10Rに書きライト完了の応答を返し、排他ロック解除コマンドを待つ(S357)。ライト完了応答は、当該ライト処理のJOB特定情報を含む。JOBは、JOB番号と当該JOBを担当するMPPKの番号で特定され得る。MPPK120は、JOB管理テーブル260から取得したJOB番号と自装置のMPPK番号とを、ライト完了応答に含める。
MPPK120は、排他ロック解除コマンドをRDKC10Rから受信すると、当該排他ロック解除コマンドからJOB特定情報を取得する(S358)。MPPK120は、キャッシュスロット管理テーブル270において、指定されたJOBのキャッシュスロットのスロット状態を、ダーティに変更する(S359)。例えば、MPPK120は、JOB管理テーブル260から当該JOBの対象ボリューム及び領域を取得し、それによりキャッシュスロット管理テーブル270において対応キャッシュスロットを特定できる。
MPPK120は、さらに、JOB特定情報が示しているJOBの排他ロックを解除する(S360)。例えば、MPPK120は、JOB管理テーブル260において当該JOBを開放することで、排他ロックを解除する。その後、MPPK120は、RDKC10Rに、排他ロック解除の応答を返す(S361)。
次に、RDKC10Rの処理を説明する。RDKC10Rは、MDKC10Mからライトコマンドを受信する。ライトコマンドは、ボリュームID又は別途定義されたLUNにより対象ボリュームを指定する。RDKC10Rは、JOB管理テーブル260に、新たなエントリを作成することでJOBを確保する(S351)。具体的な方法は、MDKC10Mによる方法と同様である。
MPPK120は、HAボリュームペア管理テーブル220を参照し、指定されたボリュームが、HAボリュームペアのPVOL又はSVOLであるか判定する(S352)。ここでは、指定されたボリュームは、SVOLである。
MPPK120は、MDKC10Mに対して、データ転送のREADYを返し、データ転送を待つ(S362)。MPPK120は、ライトデータのためのキャッシュスロットを確保する(S363)。具体的には、MPPK120は、キャッシュスロット管理テーブル270において、フリーのスロットに、新たなデータを設定する。MPPK120は、VOL管理テーブル240を参照して、指定ボリュームに対応するパリティグループを特定できる。
MPPK120は、FEPK100を使用してライトデータを確保したキャッシュスロットに書き込む(S364)。MPPK120は、キャッシュスロット管理テーブル270において、当該キャッシュスロットのスロットステータスを、ダーティに設定する。キャッシュライトの後、MPPK120は、MDKC10Mにライト完了応答を送信する(S365)。
図19は、ホスト計算機180からPVOLへのリードコマンドに対する処理のシーケンスを示している。ホスト計算機180は、MDKC10Mに対して、仮想ボリューム内の領域へのリードコマンド(RD CMD)を発行する。MDKC10Mは、仮想ボリュームに対応するPVOLにおいて、リードコマンドにより指定された領域に対する排他ロックを確保する(S401)。MDKC10Mは、PVOLの指定アドレス領域のデータを読み出す(S402)。MDKC10Mは、排他ロックを解除し(S403)、ホスト計算機180にリードデータを含むリード完了応答(RD RSP)を返す。
図20は、ホスト計算機180からSVOLへのリードコマンドに対する処理のシーケンスを示している。ホスト計算機180は、RDKC10Rに対して、仮想ボリューム内の領域へのリードコマンド(RD CMD)を発行する。RDKC10Rは、仮想ボリュームに対応するSVOLの指定アドレス領域のデータを読み出す(S451)。RDKC10Rは、ホスト計算機180にリードデータを含むリード完了応答(RD RSP)を返す。
図21は、ホスト計算機180からのリードコマンドに対応するMDKC10M及びRDKC1Rの処理のフローチャートを示している。図21において、MDKC10Mは、ステップS501〜S508を実行し、RDKC10Rは、ステップS501、S502、S509〜S511を実行する。
まず、MDKC10Mのリード処理を説明する。MDKC10Mは、ホスト計算機180からリードコマンドを受信する。リードコマンドは、LUNを使用して対象ボリュームを指定する。MDKC10Mは、リードコマンドが指定する仮想ボリュームに対応するボリュームIDを、LUパス管理テーブル230を参照して決定する。
MDKC10Mは、JOB管理テーブル260に、新たなエントリを作成することでJOBを確保する(S501)。具体的には、指定されたボリュームを担当するMPPK120は、そのJOB管理テーブル260においてフリーのJOBを選択し、そのエントリに、処理種別(HOST READ)、並びに、リードコマンドが指定するボリューム及びアドレスの情報を書き込む。排他種別カラム267のセルは未記入である。図13において、JOB番号が0のエントリが、ホスト計算機180からのコマンドによるPVOLからリード処理を示している。
MPPK120は、HAボリュームペア管理テーブル220を参照し、指定されたボリュームが、HAボリュームペアのPVOL又はSVOLであるか判定する(S502)。ここでは、指定されたボリュームは、PVOLである。
次に、MPPK120は、キャッシュスロット管理テーブル270を参照して、リードコマンドが指定する記憶領域のデータが、キャッシュされているか判定する(S503)。リードデータがキャッシュされている場合(S503:Y)、MPPK120は、当該JOBの排他ロックを確認する(S512)。
具体的には、MPPK120は、JOB管理テーブル260を検索し、指定ボリュームかつ指定領域のR/W排他ロックを確保している他のJOBを検索する。R/W排他ロックが確保されている場合、当該R/W排他ロックの解除を待つ。指定ボリュームかつ指定領域のR/W排他ロックが他のJOBによって確保されていない場合、キャッシュされているリードデータをホスト計算機180に送信する(S508)。
リードデータがキャッシュされていない場合(S503:N)、MPPK120は、当該JOBの排他ロックを確保する(S503)。具体的には、MPPK120は、JOB管理テーブル260を検索し、指定ボリュームかつ指定領域のR/W排他ロックを確保している他のJOBを検索する。R/W排他ロックが確保されている場合、当該R/W排他ロックの解除を待つ。
指定ボリュームかつ指定領域のR/W排他ロックが他のJOBによって確保されていない場合、MPPK120は、新規JOBの排他種別カラム267のセルに排他ロックを設定する。処理はリード処理であり、その排他種別は、RD共有である。
排他ロックを確保すると、MPPK120は、リードデータのためのキャッシュスロットを確保する(S505)。具体的には、MPPK120は、キャッシュスロット管理テーブル270において、フリーのスロットに、新たなデータを設定する。MPPK120は、VOL管理テーブル240を参照して、指定ボリュームに対応するパリティグループを特定できる。
MPPK120は、パリティグループから読み出したライトデータを、確保したキャッシュスロットに書き込む(S506)。MPPK120は、キャッシュスロット管理テーブル270において、当該キャッシュスロットのスロットステータスを、クリーンに設定する。MPPK120は、JOB管理テーブル260を更新して、当該JOBの排他ロックを解除する(S507)。その後、MPPK120は、ホスト計算機180に、リードデータを含むリード完了応答を送信する(S508)。
次に、RDKC10Rのリード処理を説明する。JOBの排他ロックを実行しない点を除き、RDKC10Rの処理はMDKC10Mの処理と同様である。ステップS509〜S511は、それぞれ、ステップS503、S505、S506に対応する。RDKC10Rは、SVOLのリードデータをホスト計算機180に送信する。
上記例において、HAボリュームペアは、PAIR状態であって、同期している。図22は、HAボリュームペアのペア状態と、PVOL及びSVOLへのI/Oアクセスにおける排他種別との関係を示している。ペア状態として、PAIR状態とPSUS(Pair SUSpend)状態とが示されている。PAIR状態において、PVOLとSVOLは同期しており、一方の更新は他方に反映される。
PAIR状態において、上述のように、PVOLに対しては、ホスト計算機180からのライトアクセス及びリードアクセス、並びに、RDKC10Rからのライトアクセスが存在する。これらのアクセスに対しては、RD共有及びR/W排他の排他ロックが実行される。同様に、SVOLに対しては、ホスト計算機180からのライトアクセス及びリードアクセス、並びに、MDKC10Mからのライトアクセスが存在する。SVOLへのアクセスに対しては、排他ロックは実行されない。
PSUS状態において、SVOLの更新は禁止されており、PVOLとSVOLとは同期していない。MDKC10Mは、ホスト計算機180からのアクセスを処理する。MDKC10Mは、PVOLに対して、ホスト計算機180からのライトアクセス及びリードアクセスを受け付ける。
MDKC10Mは、ホスト計算機180からのライトコマンドの処理において、RDKC10Rにライトコマンドを送信しない。MDKC10Mは、ホスト計算機180からのライトアクセス及びリードアクセスに対しては、それぞれ、R/W排他及びRD共有の排他ロックを実行する。
一方、PSUS状態において、RDKC10Rは、ホスト計算機180からライトコマンド又はリードを受信すると、MDKC10Rに転送する。この時にRDKCはキャッシュメモリ131にデータを格納する必要はなく、バッファ113に格納した後、MDKC10Rに転送する。ライト処理において、RDKC10Rは、MDKC10Rからライト完了応答を受信すると、ホスト計算機180にライト完了応答を返す。リード処理において、RDKC10Rは、MDKC10Mからリードデータを受信し、ホスト計算機180に送信する。
MPPK120において発生した障害に対応する処理の例を説明する。ホスト計算機180からのライトコマンドを処理中にMPPK120において障害が発生した場合、PVOLとSVOLとが同期していない可能性がある。本例において、障害による性能低下を防ぐと共に、他のMPPK120が、RDKC10RのSVOLにライトコマンドを送信することによって、HAボリュームペアの同一性を確実に維持する。
SVOLへのライトコマンドの送信は、例えば、障害を起こしたMPPK120(障害MPPK120)を検知した他のMPPK120(障害検知MPPK120)、及び/又は、障害MPPK120からPVOLの担当を承継した他のMPPK120(承継MPPK120)が行うことができる。
上述のように、キャッシュスロット管理テーブル270のスロットステータスが二重書き中の場合、SVOLへライトデータが書き込まれているか否かは、MDKC10Mにとって不明である。したがって、MPPK120は、キャッシュスロット管理テーブル270を参照して、ライトコマンドを送信すべきJOBを特定できる。
障害検知MPPK120は、キャッシュスロット管理テーブル270において、障害MPPK120が担当していたPVOLのエントリであって、スロットステータスが二重書き中であるエントリを検索する。これらは、ライトコマンドをSVOLに送信すべきエントリである。障害検知MPPK120は、見つけたエントリにおいて、スロットステータスを、「ライトコマンド送信要」に変更する。
例えば、各承継MPPK120が、キャッシュスロット管理テーブル270における上記変更を行っても良い。各承継MPPK120は、担当を承継したPVOLのエントリのみ更新する。
図23は、承継MPPK120が、SVOLへのライトコマンドを送信する処理のフローチャートである。図23は、承継MPPK120による、承継したPVOLへのライト処理又リード処理内の一部のステップを示している。
本例において、承継MPPK120は、障害MPPK120から承継したPVOLのリード/ライト処理において、必要なライトコマンドをSVOLに送信する。ライト処理は、ホストライト処理又はDKC間ライト処理である。
図23に示しているように、承継MPPK120は、今回コマンドに対応するJOBの排他ロックを確保し(S551)、さらに、キャッシュスロットを確保する(S552)。承継MPPK120は、キャッシュスロット管理テーブル270において、ライトコマンドをSVOLに送信すべきエントリが存在するか検索する(S553)。
例えば、承継MPPK120は、当該PVOLのエントリであって、スロットステータスが「ライトコマンド送信要」であるエントリを検索する。または、MPPK120は、今回のコマンドで指定されている領域の一部又は全部を含み、スロットステータスが「ライトコマンド送信要」であるエントリを検索してもよい。
検索したエントリが存在する場合(S553:Y)、承継MPPK120は、ライトコマンドをRDKC10Rに発行し、データ転送のREADY応答を待つ(S554)。READY応答を受信すると、承継MPPK120は、RDKC10Rに、キャッシュスロットに格納されているライトデータを転送し、ライト完了の応答を待つ(S555)。
RDKC10Rからライト完了応答を受信すると、承継MPPK120は、キャッシュスロット管理テーブル270において、当該キャッシュスロットのスロットステータスを、ダーティに変更する(S556)。その後、承継MPPK120は、ホスト計算機180から今回受信したコマンドに対応する処理を再開する。
承継MPPK120とは異なるMPPK120、例えば、障害検知MPPK120が、キャッシュスロット管理テーブル270を参照して、必要なライトコマンドをRDKC10Rに送信してもよい。MPPK120は、キャッシュスロット管理テーブル270において、「ライトコマンド送信要」のエントリを順次選択してSVOLへのライト処理を実行する。障害検知MPPK120と承継MPPK120の双方又は一方のみが、SVOLへのライト処理を実行してよい。
SVOLへのライト処理において、RDKC10RからMDKC10Mに対するJOB排他ロック解除コマンドの他の送信方法を説明する。上記構成例において、RDKC10Rは、排他ロック解除コマンドをライトデータと別にMDKC10Mに送信する。以下に説明する例において、RDKC10Rは、ライトデータと共に排他ロック解除コマンドをMDKC10Mに送信する。これにより、トラヒックを低減する。
図24は、ライトデータと共に排他ロック解除コマンドを送信するシーケンスを示している。以下においては、図16に示しているシーケンス図との相違点を主に説明する。図24において、MDKC10Mが排他ロックを確保し(S251)、データ転送のREADY応答(XFR RD)をRDKC10Rに返す。
RDKC10Rは、ライトデータ(WR DAT)と共に、排他ロック解除コマンドをMDKC10Mに送信する。具体的には、RDKC10Rは、複数の部分に分けてライトデータを送信する場合、最後の部分の送信において排他ロック解除コマンドを共に送信する。
MDKC10Mは、RDKC10Rからライトデータ(WR DAT)と共に排他ロック解除コマンドを受信する。MDKC10Mは、受信したライトデータを、PVOL内の指定された領域に書き込む(S252)。MDKC10Mは、PVOL内の領域へのデータの書き込みが完了すると、確保していた排他ロックを解除し(S257)する。その後、MDKC10Mは、RDKC10Rに、ライト完了応答(WR RSP)を返す。
本シーケンスは、FEPK100がライトコマンドとライトデータとを自動転送する機能を有していない構成において有効である。本シーケンスにより、MDKC10MとRDKC10Rとの間の通信回数を低減できる。
上記構成例において、RDKC10Rは、JOBの排他ロックを実行しない。以下に説明するように、RDKC10Rも、MDKC10Mのように、JOB排他ロックを実行してもよい。これにより、強固な順序保証によるより高い信頼性が得られる。
図25は、RDKC10RによるJOB排他ロックを含む、ホスト計算機180からPVOLへのライト処理のシーケンスを示している。以下においては、図15が示しているシーケンスとの相違点を主に説明する。
RDKC10Rは、MDKC10Mからライトコマンド(WR CMD)を受信すると、ライトコマンドにより指定された領域に対する排他ロックを確保する(S207)。RDKC10Rは、データ転送のREADY応答(XFR RD)をMDKC10Mに返し、MDKC10Mからライトデータ(WR DAT)を受信する。RDKC10Rは、受信したライトデータを、SVOL内のアドレス領域に書き込む(S203)。
RDKC10Rは、SVOL内のアドレス領域へのデータの書き込みが完了すると、ライト完了応答(WR RSP)をMDKC10Mに返す。さらに、RDKC10Rは、確保していた排他ロックを解除する(S209)。
図26は、RDKC10RによるJOB排他ロックを含む、ホスト計算機180からSVOLへのライト処理のシーケンスを示している。以下においては、図16が示しているシーケンスとの相違点を主に説明する。
ホスト計算機180は、RDKC10Rに対して、仮想ボリューム内の領域へのライトコマンド(WR CMD)を発行する。RDKC10Rは、仮想ボリュームに対応するSVOLにおいて、ライトコマンドにより指定された領域に対する排他ロックを確保する(S257)。
その後のRDKC10Rの実行ステップは、SVOL内の指定された領域にライトデータを書き込むステップ(S253)まで、図16が示しているシーケンス図と同様である。RDKC10Rは、ライト完了応答(WR RSP)をホスト計算機180に返した後、確保していた排他ロックを解除する(S258)。次に、RDKC10Rは、JOBを指定して、排他ロック解除コマンドをMDKC10Mに送信する。
図27は、図25及び図26のシーケンスに対応する、ホスト計算機180からのライトコマンドに対するMDKC10M及びRDKC10Rの処理のフローチャートを示している。以下においては、図17に示しているフローチャートとの相違点を主に説明する。図17のフローチャートとの相違点は、RDKC10Rによる排他ロックの確保(S321)と、排他ロックの解除(S322)である。
RDKC10Rは、ホスト計算機180にREADY応答を返す前に、ステップS321において、新たなJOBの排他ロックを確保する。排他ロックを確保する方法は、ステップS303におけるMDKC10Mの方法と同様である。排他種別は、R/W排他である。
RDKC10Rは、ホスト計算機180へライト完了応答を返した後、ステップS322において、排他ロックを解除する。排他ロックを解除する方法は、ステップS311におけるMDKC10Mの方法と同様である。
図28は、図25及び図26のシーケンスに対応する、MDKC10M、RDKC10R間のライトコマンドに対するMDKC10M及びRDKC10Rの処理のフローチャートを示している。以下においては、図18に示しているフローチャートとの相違点を主に説明する。図18のフローチャートとの相違点は、RDKC10Rによる排他ロックの確保(S371)と、排他ロックの解除(S372)である。
RDKC10Rは、MDKC10MにREADY応答を返す前に、ステップS371において、新たなJOBの排他ロックを確保する。排他ロックを確保する方法は、ステップS353におけるMDKC10Mの方法と同様である。排他種別は、R/W排他である。
RDKC10Rは、MDKC10Mへライト完了応答を返した後、ステップS372において、排他ロックを解除する。排他ロックを解除する方法は、ステップS360におけるMDKC10Mの方法と同様である。RDKC10Rは、ホスト計算機180からのリードコマンドに対する処理においても、排他ロックを実行してもよい。その場合、RDKC10Rのリード処理は、MDKC10Mによる排他ロックを伴うリード処理と同様である。
RDKCでこのようにSVOLへのI/OアクセスにおいてJOB排他制御を行う事により信頼性を高めることができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード等の記録媒体に置くことができる。
なお、本実施例ではストレージ装置がストレージ装置及びボリュームを仮想化しているが、仮想化専用装置やホストのパスマネージャ側の機能により、ストレージ装置及びボリュームを仮想化してもよい。本実施例は冗長化(HA)構成しているActive−Active型の複数のボリュームを備える複数のストレージ装置に対して適用可能である。