(57)【要約】  提供される情報記憶システムは、第１の論理ボリュームを提供する第１のストレージ装置と、第２の論理ボリュームを提供する第２のストレージ装置と、前記第１のストレージ装置及び前記第２のストレージ装置からアクセスされ、前記第１のストレージ装置及び前記第２のストレージ装置の状態の情報を含む、クオラムと、を含む。前記第２のストレージ装置は、前記クオラムとの通信障害を検出した後、クオラムの使用を停止し、前記ホストから送信されたリードコマンド及びライトコマンドのそれぞれに対して前記ホストに応答する前に、前記第１のストレージ装置との通信障害についてチェックする。【選択図】図１
2017514233.tif 000002
【特許請求の範囲】
【請求項１】
第１の論理ボリュームを提供する第１のストレージ装置と、
第２の論理ボリュームを提供する第２のストレージ装置と、
前記第１のストレージ装置及び前記第２のストレージ装置からアクセスされ、前記第１のストレージ装置及び前記第２のストレージ装置の状態の情報を含む、クオラムと、を含み、
前記第１のストレージ装置と前記第２のストレージ装置とは、前記第１の論理ボリュームと前記第２の論理ボリュームとを、ホストに対して単一ボリュームと認識させ、
前記第１のストレージ装置は、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第１の論理ボリュームからデータを読み出して前記ホストに送信し、
前記第２のストレージ装置は、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第２の論理ボリュームからデータを読み出して前記ホストに送信し、
前記第１のストレージ装置は、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとに対するデータの書き込みの完了後に、前記ホストにライト完了応答を送信し、
前記第２のストレージ装置は、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとに対するデータの書き込みの完了後に、前記ホストにライト完了応答を送信し、
前記第２のストレージ装置は、前記クオラムとの通信障害を検出した後、クオラムの使用を停止し、前記ホストから送信されたリードコマンド及びライトコマンドのそれぞれに対して前記ホストに応答する前に、前記第１のストレージ装置との通信障害についてチェックする、情報記憶システム。
【請求項２】
請求項１に記載の情報記憶システムであって、
前記第２のストレージ装置は、前記ホストからリードコマンドを受信した場合に前記第１の論理ボリュームから前記リードコマンドに対するデータを読み出すことによって、前記ホストから送信されたリードコマンドに対して前記ホストに応答する前に、前記第１のストレージ装置との通信障害についてチェックし、
前記第２のストレージ装置は、前記ホストからリードコマンドを受信した場合に、前記リードコマンドに対するリードデータを取得するために前記リードコマンドを前記第１のストレージ装置に転送してことによって、前記ホストから送信されたリードコマンドに対して前記ホストに応答する前に、前記第１のストレージ装置との通信障害についてチェックする、情報記憶システム。
【請求項３】
請求項１に記載の情報記憶システムであって、
前記第２のストレージ装置は、前記第１のストレージ装置との間でハートビート信号を送受信することによって、前記第１のストレージ装置との通信障害についてチェックする、情報記憶システム。
【請求項４】
請求項１に記載の情報記憶システムであって、
前記第２のストレージ装置は、前記クオラムとの通信障害を検出した後に、前記第１のストレージ装置との通信障害を検出した後、前記第２の論理ボリュームを前記ホストからブロックし、
前記第１のストレージ装置は、前記クオラムとの通信障害を検出した後に、前記第２のストレージ装置との通信障害を検出した後、前記ホストから送信されたリードコマンドに対して前記第１の論理ボリュームから読み出したデータを送信し、前記ホストから送信されたライトコマンドに対して前記第１の論理ボリュームにデータを書き込む、情報記憶システム。
【請求項５】
請求項１に記載の情報記憶システムであって、
前記第２のストレージ装置は、前記第１のストレージ装置の状態を前記クオラムから取得した情報に基づいて判定し、リードコマンド及びライトコマンドの処理方法を、前記第１のストレージ装置との通信障害を検出した後に前記第１のストレージ装置及び前記第２のストレージ装置が前記クオラムと通常通信可能である場合に、前記状態に基づいて決定する、情報記憶システム。
【請求項６】
請求項５に記載の情報記憶システムであって、
前記クオラムから取得された前記情報が、前記第１のストレージ装置が通常状態であることを示す場合、前記第２のストレージ装置は、前記第２の論理ボリュームを前記ホストからブロックし、
前記第１のストレージ装置は、前記ホストから送信されたリードコマンドに対して前記第１の論理ボリュームから読み出したデータを送信し、前記ホストから受信したライトコマンドに対して前記第１の論理ボリュームにデータを書き込み、前記第２のストレージ装置と通信することなくライト完了応答を前記ホストに返す、情報記憶システム。
【請求項７】
請求項５に記載の情報記憶システムであって、
前記クオラムから取得された前記情報が、前記第１のストレージ装置の障害状態を示す場合、前記第２のストレージ装置は、前記ホストから送信されたリードコマンドに対して前記第１の論理ボリュームから読み出したデータを送信し、前記ホストから受信したライトコマンドに対して前記第１の論理ボリュームにデータを書き込み、前記第１のストレージ装置と通信することなくライト完了応答を前記ホストに返す、情報記憶システム。
【請求項８】
情報記憶システムの制御方法であって、
前記情報記憶システムは、第１の論理ボリュームを提供する第１のストレージ装置と、第２の論理ボリュームを提供する第２のストレージ装置と、前記第１のストレージ装置及び前記第２のストレージ装置からアクセスされ、前記第１のストレージ装置及び前記第２のストレージ装置の状態の情報を含む、クオラムと、を含み、前記第１のストレージ装置と前記第２のストレージ装置とは、前記第１の論理ボリュームと前記第２の論理ボリュームとを、ホストに対して単一ボリュームと認識させ、
前記制御方法は、
前記第１のストレージ装置が、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第１の論理ボリュームからデータを読み出して前記ホストに送信し、
前記第２のストレージ装置が、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第２の論理ボリュームからデータを読み出して前記ホストに送信し、
前記第１のストレージ装置が、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとに対するデータの書き込みの完了後に、前記ホストにライト完了応答を送信し、
前記第２のストレージ装置が、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとに対するデータの書き込みの完了後に、前記ホストにライト完了応答を送信し、
前記第２のストレージ装置が、前記クオラムとの通信障害を検出した後、クオラムの使用を停止し、前記ホストから送信されたリードコマンド及びライトコマンドのそれぞれに対して前記ホストに応答する前に、前記第１のストレージ装置との通信障害についてチェックする、制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報記憶システムに関する。
【背景技術】
【０００２】
本技術分野の背景技術として、例えば、欧州特許出願公開第１３４４１３３号、米国特許第５８１２７４８号、米国特許第７４７８２６３号が知られている。
【０００３】
欧州特許出願公開第１３４４１３３号は、第２サーバで障害が発生した場合に、計算機クラスタに含まれる第１サーバの可用性を高める技術を開示する。計算機クラスタにおける各サーバは、関連付けられた大容量ストレージデバイスを有し、計算機クラスタにおけるネットワークデバイスからの要求を処理することができる。データは、サーバの大容量ストレージデバイス間でミラーリングされ、各サーバの大容量ストレージデバイスは、すべての計算機クラスタデータの完全なコピーを保持する。データミラーリングは、専用回線を介して実行される。第１サーバが第２サーバとの通信の喪失を検出すると、第１サーバは、通信の喪失が、専用回線の不具合の結果であるか判定する。専用回線で障害が発生している場合、第１サーバは処理を中断し、通信の喪失のためにミラーリングできないデータを、その大容量ストレージデバイスに書き込まないようにする。専用回線が使用できる場合には、第１サーバは処理を続行する。
【０００４】
米国特許第５８１２７４８号は、フォールトトレラント計算機システムにおいて、ハードウェア又はソフトウェアエラーからの回復性能を改善する方法を開示する。バックアップ計算機システムは、ネットワークファイルサーバ上の大容量ストレージエミュレータプログラムと通信する特別な大容量ストレージアクセスプログラムを実行し、バックアップ計算機システムのディスクを、ファイルサーバ計算機のディスクのように見せる。ファイルサーバと、大容量ストレージエミュレータ及び大容量ストレージアクセスプログラムを介してバックアップ計算機のディスクと、の双方にデータを書き込むことによって、データをミラーリングすることにより、ファイルサーバ計算機上のデータコピーが形成される。
【０００５】
米国特許第７４７８２６３号は、クオラムベースのデータ複製を利用することで、２ノードクラスタにおける双方向のフェイルオーバを可能とするシステムと方法とを開示する。パートナ装置のエラーを検出すると、存続ノードがクラスタのプライマリとして動作し、第１永続状態をローカルユニットに設定する。クオラム投票のための一時的ε値が、存続ノードに割り当てられ、クオラム状態になる。第２永続状態がローカルユニットに格納され、存続ノードが、クオラム状態であることの結果として、オンラインになる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】欧州特許出願公開第１３４４１３３号
【特許文献２】米国特許第５８１２７４８号
【特許文献３】米国特許第７４７８２６３号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記引用文献に開示されているストレージシステムは、ミラーリングされているボリュームを有し、二つのストレージ装置間の通信が失われると、第３のストレージ装置（クオラム）を使用して投票を行い、いずれのストレージ装置が動作を続け、いずれのストレージ装置が動作を停止するか決定する。
【０００８】
クオラム欠陥の場合（又はストレージ装置とクオラムディスクとの間の通信の喪失の場合）、上記のストレージシステムは、スプリットブレイン問題を避けるため、二つのアプローチのうちの一つを採る。
【０００９】
第１のアプローチにおいて、クオラムとの通信の喪失を検出すると、ストレージシステムは、ボリュームペアのデータミラーリングを中断して、ボリュームペアの一方のボリュームへの処理を完全に停止する。このアプローチは、ボリュームの可用性を低下させるのみならず、ストレージシステムの信頼性を低下させる。それは、一つのボリュームが他方のバックアップとして機能しなくなるからである。
【００１０】
第２のアプローチにおいて、クオラムとの通信の喪失の後、ストレージシステムは、クオラム障害の前と同様に動作する。つまり、ボリュームペアのデータがミラーリングされる。クオラムとの通信喪失の後に、ストレージ装置の一方又はストレージシステム間の通信において二つ目の障害が発生すると、ボリュームの双方がブロックされ、ストレージシステムは完全にダウンする。従って、このアプローチは、ストレージシステムの可用性が大きく低下させ、ミラーリングを行わない単一ボリュームの可用性よりも低くなる。
【課題を解決するための手段】
【００１１】
本発明の一態様は、情報記憶システムである。情報記憶システムは、第１の論理ボリュームを提供する第１のストレージ装置と、第２の論理ボリュームを提供する第２のストレージ装置と、前記第１のストレージ装置及び前記第２のストレージ装置からアクセスされ、前記第１のストレージ装置及び前記第２のストレージ装置の状態の情報を含む、クオラムと、を含む。前記第１のストレージ装置と前記第２のストレージ装置とは、前記第１の論理ボリュームと前記第２の論理ボリュームとを、ホストに対して単一ボリュームと認識させる。前記第１のストレージ装置は、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第１の論理ボリュームからデータを読み出して前記ホストに送信する。前記第２のストレージ装置は、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第２の論理ボリュームからデータを読み出して前記ホストに送信する。前記第１のストレージ装置は、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとに対するデータの書き込みの完了後に、前記ホストにライト完了応答を送信する。前記第２のストレージ装置は、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとに対するデータの書き込みの完了後に、前記ホストにライト完了応答を送信する。前記第２のストレージ装置は、前記クオラムとの通信障害を検出した後、クオラムの使用を停止し、前記ホストから送信されたリードコマンド及びライトコマンドのそれぞれに対して前記ホストに応答する前に、前記第１のストレージ装置との通信障害についてチェックする。
【発明の効果】
【００１２】
本発明の一態様によれば、情報記憶システムの可能性と信頼性を高めることができる。
【図面の簡単な説明】
【００１３】
【図１】実施形態に係るクオラムストレージ装置とストレージ装置との間の通信喪失の検出及びその後のクオラムモード変更を示す図を模式的に示す。
【図２】実施形態に係る情報システムのハードウェア構成例を示す図である。
【図３】実施形態に係るストレージ装置のキャッシュメモリパッケージに格納されている内容の例を示す。
【図４】実施形態に係る、情報システムの全ての構成要素が良好に動作しているときにホストから受信したリード／ライトコマンドの処理を示す図を模式的に示す。
【図５Ａ】実施形態に係る、二つのストレージ装置の間で通信装置が起きた場合の、利用可能モードにおけるホストライトコマンドの処理を示す図を模式的に示す。
【図５Ｂ】実施形態に係る、ＨＡペアの双方のストレージ装置がそれぞれ少なくとも一つのＰＶＯＬとＳＶＯＬとを格納しており、二つのストレージ装置の間で通信装置が起きた場合の、利用可能モードにおけるホストライトコマンドの処理を示す図を模式的に示す。
【図６】実施形態に係る、ストレージ装置の一つが故障した場合の、利用可能モードにおけるホストライトコマンドの処理を示す図を模式的に示す。
【図７】実施形態に係る、クオラムストレージ装置とストレージ装置との間の通信の喪失の検出と、その後のクオラムモードの変更を示す図を模式的に示す。
【図８】「ＣＯＰＹ」状態の状態マシンの例を示す。
【図９】「ＲＥＶ−ＣＯＰＹ」状態の状態マシンの例を示す。
【図１０】「ＰＡＩＲ」状態の状態マシンの例を示す。
【図１１】「ＲＣ−Ｐａｉｒ」状態の状態マシンの例を示す。
【図１２】「ＳＷＩＴＣＨ」状態の状態マシンの例を示す。
【図１３】「ＲＥＶ−ＳＷＩＴＣＨ」状態の状態マシンの例を示す。
【図１４】「ＳＵＳＰＥＮＤ」状態の状態マシンの例を示す。
【図１５】「ＲＥＶ−ＳＵＳＰＥＮＤ」状態の状態マシンの例を示す。
【図１６】「ＢＬＯＣＫ」状態の状態マシンの例を示す。
【図１７】クオラムロック管理のためのテーブルの例を示す。
【図１８】ペア管理のためのテーブルの例を示す。
【図１９】共通構成要素の現在状態のためのテーブルの例を示す。
【図２０】各ペア状態におけるＩ／Ｏ処理パターンのためのテーブルの例を示す。
【図２１】一構成要素障害に対するペア状態遷移のためのテーブルの例を示す。
【図２２Ａ】ホストライト処理（ＰＶＯＬに向けられたホストライト）のためのプログラムのフローチャートの一部を示す。
【図２２Ｂ】ホストライト処理（ＳＶＯＬに向けられたホストライト）のためのプログラムのフローチャートの一部を示す。
【図２３】ホストリード処理のためのプログラムのフローチャートを示す。
【図２４】リモートボリュームアクセス障害を処理するプログラムのフローチャートを示す。
【図２５】所定構成要素障害に対してペア状態を変更するプログラムのフローチャートを示す。
【図２６】クオラムを使用して障害タイプを特定する（優先ＤＫＣのため）プログラムのフローチャートの一部を示す。
【図２７】クオラムを使用して障害タイプを特定する（非優先ＤＫＣのため）プログラムのフローチャートの一部を示す。
【図２８】、クオラムヘルスチェックのためのプログラムのフローチャートを示す。
【図２９】クオラム状態の変更に対してクオラムモードを変更するプログラムのフローチャートを示す。
【図３０】クオラム状態の変更の情報の受信に対してクオラムモードを変更するプログラムのフローチャートを示す。
【図３１】実施形態に係る、クオラムストレージ装置とストレージ装置との間の通信の喪失の検出及びその後のクオラムモード変更を示す図を模式的に示す。
【図３２】ハートビート信号を受信し障害を処理するプログラムのフローチャートを示す。
【発明を実施するための形態】
【００１４】
本発明の実施形態が、以下において、図面を参照して説明される。しかし、以下に説明される実施形態は、請求範囲に記載される本発明を限定するものではない。実施形態において記述される特徴の全ての組み合わせが、本発明の解決手段として、必ずしも必須ではない。
【００１５】
本実施形態は、情報記憶システムの可用性と信頼性を向上する情報記憶システム及び方法に関する。より具体的には、本実施形態は、例えば、クオラムディスクを含む第３のストレージ装置との通信によって、そして、第３のストレージ装置が使用できない場合にはハートビート信号又はリモートアクセスを使用して、スプリットブレイン問題を回避する技術に関連する。本実施形態において、クオラムは、クオラム情報、クオラム情報を格納するクオラムディスク、そしてクオラムディスクを有するストレージ装置を含む。
【００１６】
図１を参照して、本実施形態の概要を説明する。図１は、本実施形態に係る情報システムを示す。情報システムは、第１のストレージ装置２００ａ、第２のストレージ装置２００ｂ、第３のストレージ装置６００を含む。第１のストレージ装置２００ａはホスト計算機１００ａに接続され、第１のボリューム２５２ａを含む。第２のストレージ装置２００ｂはホスト計算機１００ａ及び第１のストレージ装置２００ａに接続され、第２のボリューム２５２ｂを含む。第３のストレージ装置６００は、第１のストレージ装置２００ａ及び第２のストレージ装置２００ｂに接続され、第３のボリューム６５２を含む。
【００１７】
第１のストレージ装置２００ａ及び第２のストレージ装置２００ｂは、それぞれ、ホスト計算機１００ａに対して、第１のボリューム２５２ａ及び第２のボリューム２５２ｂのための同一の識別情報を返す。ホスト計算機１００ａは、第１のボリューム２５２ａ及び第２のボリューム２５２ｂを、一つのボリューム２５２と認識する。ボリューム２５２は、本実施形態において仮想ボリュームと呼ぶことがある。
【００１８】
図１において、長破線は、ホストライトのフローを表す。短破線は、ホストリードのフローを表す。長線と短線の繰り返しは、クオラム障害の検出と処理のフローを示す。
【００１９】
ホスト計算機は、アプリケーションプログラム１５１及びＯＳ１５２に加え、マルチパスソフトウェアを含む。一つのパスが第１のボリューム２５２ａにつながり、他の一つのパスが第２のボリューム２５２ｂにつながる、二つのパスによって、仮想ボリューム２５２を発見すると、マルチパスソフトウェアは、ＯＳ１５２からのリード／ライトコマンドに対して、状況と設定に応じて一つのパスを選択する。
【００２０】
通常の場合、第１及び第２のボリューム２５２ａ、２５２ｂは、互いのミラーとなるように結合されている。つまり、一方のボリュームに対する全てのホストライト動作は、ボリューム２５２ａ、２５２ｂの双方に、ユーザデータを書き込む。各ホストリードは、局所的に実行される。つまり、ホスト計算機１００ａからリードコマンドを受信したストレージ装置は、自装置のボリュームからユーザデータを読み出し（キャッシュメモリからの読み出しを含む）、そのユーザデータをホスト計算機に返す。
【００２１】
第３のボリューム６５２は、クオラム情報を格納するために使用され、第１及び第２のストレージ２００ａ、２００ｂの間での通信の喪失におけるスプリットブレイン問題を避ける。
【００２２】
第１（又は第２）のストレージ装置２００ａ（又は２００ｂ）が第３のストレージ装置６００との通信障害を検出すると、第１（又は第２）のストレージ装置２００ａ（又は２００ｂ）は、その動作モードを「利用可能」モードから「利用不可能」モードに変更する。第１（又は第２）のストレージ装置２００ａ（又は２００ｂ）は、第２（又は第１）のストレージ装置２００ｂ（又は２００ａ）に対して、第３のストレージ装置６００との通信障害が検出されたことを知らせ、その動作モードを「利用不可能」モードに変更することを指示する。
【００２３】
「利用不可能」モードにおいて、第１及び第２のストレージ装置２００ａ、２００ｂの間において通信障害が発生すると、第１及び第２のストレージ装置２００ａ、２００ｂは、他のストレージ装置の状態を判定するために第３のストレージ装置６００を使用せず、代わりに、存続ボリュームと非存続ボリュームについて決定するための規定のルールを使用する。
【００２４】
「利用不可能」モードにおいて、第１及び第２のボリュームに対するホストライトコマンドの二重化は継続するが、ホストリードコマンドは、二つのストレージ装置２００ａ、２００ｂの間の通信喪失がすぐに検出でき、スプリットブレイン問題が起きないように、処理される。
【００２５】
一つの方法は、ストレージ装置２００ａ、２００ｂの間の適時なハートビート信号を使用して、通信パス及び互い（互いのストレージ装置）の状態をチェックする。なんらかの通信喪失が起きている場合、既定の時間内にハードビート信号を受信しないことで検出される。
【００２６】
他の方法において、二つのストレージ装置２００ａ、２００ｂにおいて受信された全てのホストリードコマンドは、ユーザデータを、「利用不可能」モードに切り替わったときに存続ボリュームと決定されたボリュームのみから読み出すように処理される。この方法によって、非存続ボリュームを有するストレージ装置は、ホストリードそり又はホストライト処理を行う時に、通信喪失を検出し、スプリットブレイン問題を避ける。
【００２７】
これらのアプローチによって、第３のストレージ装置６００との通信の喪失の後、１）ユーザデータが第１及び第２のストレージ装置２００ａ、２００ｂにおいて二重化され、２）予め決められている非存続ボリュームの障害又は第１及び第２のストレージ装置の通信回線の障害において、存続ボリュームを有するストレージ装置がリードコマンド及びライトコマンドを存続ボリュームにおいて処理し続ける。
【００２８】
第３のストレージ装置６００との通信の喪失の場合、１）ホストライトデータは、第１及び第２のストレージ装置２００ａ、２００ｂにおいて二重化され続け、ストレージシステムの信頼性の低下が防がれ、２）予め決められている非存続ボリュームの障害又は第１及び第２のストレージ装置の通信回線の障害において、存続ボリューム（存続ボリュームを有するストレージ装置）はＩ／Ｏ処理を続行し、それにより、ストレージシステムの可用性が、単一ボリューム（存続ボリューム）の場合と同様のままであり、障害時に完全にダウンするストレージシステムよりも高い可用性が実現される。
【００２９】
＜第１の実施形態＞
＜情報システムの構成＞
図２は、第１の実施形態に係る情報システムのハードウェア構成例を示す図である。
【００３０】
情報システムは、ホスト計算機（以下においてホストと略す）１００ａ、１００ｂ、ストレージシステム２００を含む。ストレージシステム２００は、二つのストレージ装置２００ａ、２００ｂ、第３のストレージ装置６００、及び管理計算機３００を含む。
【００３１】
ストレージ装置２００ａ、２００ｂ、ホスト１００ａ、１００ｂは、互いにネットワーク５００（５００ａ、５００ｂ、５００ｃ、５００ｄ）を介して、接続されている。データ通信を行うことができる任意のネットワークを使用でき、例えば、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、リース回線、公衆回線のいずれでもよい。データがホスト１００ａ、１００ｂ及びストレージ装置２００ａ、２００ｂの間で通信できれば、ネットワークにおいて任意のプロトコルを使用することができ、例えば、ファイバチャネルプロトコルやＴＣＰ／ＩＰプロトコルを使用できる。管理計算機３００とストレージ装置２００ａ、２００ｂは、専用管理ネットワーク４００（４００ａ、４００ｂ）を介して接続されている。それと異なり、管理計算機３００は、Ｉ／Ｏネットワーク５００を使用して、ストレージ装置２００ａ、２００ｂと通信してもよい。
【００３２】
ホスト１００ａは、ホスト内部ネットワーク１０４を有し、少なくとも、プロセッサ（図においてＣＰＵ）１０２、メモリ１０３、Ｉ／Ｏポート１０１（１０１ａ、１０１ｂ）が接続されている。この例において、ホスト１００ａ、１００ｂは同一の構成を有する。管理計算機３００は、ホスト１００ａと同様のハードウェア構成を有することができる。Ｉ／Ｏポートをホストに追加するための拡張カードは、ＨＢＡ（Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ）とも呼ばれる。
【００３３】
ストレージ装置２００ａは、複数のＩ／Ｏポート２１１（２１１ａ〜２１１ｅ）、複数のマイクロプロセッサパッケージ（ＭＰ−ＰＫ）２２０、複数のキャッシュメモリパッケージ（ＣＭ−ＰＫ）２４０、複数のバックエンドポート（ＢＥポート）２３０、ネットワークインタフェース２６０、そして、内部ネットワーク２７０を含む。パッケージは、内部ネットワーク（例えばクロスバースイッチ）２７０によって接続されている。さらに、Ｉ／Ｏポート２１１、ＭＰ−ＰＫ２２０、ＣＭ−ＰＫ２３０、そしてＢＥポート２３０の少なくとも一つの数は、一つであってもよい。Ｉ／Ｏポート２１１ａ、２１１ｂは、Ｉ／Ｏコマンド（ライトコマンド／リードコマンド）をホスト１００ａ、１００ｂから、それぞれ受信する。
【００３４】
ＭＰ−ＰＫ２２０は、１又は複数のプロセッサ２２１、ローカルメモリ２２２を有する。ＭＰ−ＰＫ２２０のマイクロプロセッサは、演算プログラムを実行することで様々な処理を実行する。例えば、ホスト１００ａ、１００ｂからのＩ／Ｏコマンドの処理である。ローカルメモリ２２２は、様々なデータを格納することができ、例えば、プロセッサ２２１に実行されるプログラムや、そのプログラムによって使用される制御情報を格納する。ＭＰ−ＰＫ２２０は、管理計算機３００と、ネットワークインタフェース２６０を介して通信する。ネットワークインタフェース２６０は、通信インタフェースデバイスであって、例えば、ＬＡＮコントローラである。
【００３５】
ＣＭ−ＰＫ２４０は、１又は複数のメモリを有する。例えば、ＣＭ−ＰＫ２４０は、プログラムメモリ２４１、共有メモリ２４２、キャッシュメモリ２３４（図３参照）を有する。キャッシュメモリ２４３は、ホスト１００からＶＯＬに書き込まれるホストデータと、ホスト１００によってＶＯＬから読み出されるホストデータと、を一時的に格納する。共有メモリ２４２は、ＭＰ−ＰＫ２２０の間の通信のための制御情報を格納する。制御情報は、ストレージ装置２００ａ、２００ｂの構成に関する構成データを含む。プログラムメモリ２４１は、異なるＭＰ−ＰＫ２２０に実行されるプログラムを格納する。これらプログラムは、ＭＰ−ＰＫ２２０のローカルメモリ２２２にキャッシュすることができる。
【００３６】
メモリデバイス２５１（２５１ａ、２５１ｂ）は、不揮発性メモリで、例えば、ハードディスクドライブ（ＨＤＤ）である。メモリデバイス２５１は、ストレージ装置２００ａと一体に又はストレージ装置２００ａから独立のデバイスとして分離して、与えられる。メモリデバイス２５１は、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ Ａｒｒａｙ ｏｆ Ｉｎｄｅｐｅｎｄｅｎｔ Ｄｉｓｋ）技術を実装し、メモリデバイス２５１により提供される記憶領域が論理ボリューム２５２の単位で管理されてもよい。論理ボリュームは、記憶領域上に論理的構築されるボリュームである。データは、ＬＵＮ（Ｌｏｇｉｃａｌ Ｕｎｉｔ Ｎｕｍｂｅｒｓ）を指定することで、メモリデバイス２５１に書き込まれ又は読み出される。ＬＵＮは、対応する論理ボリューム２５２に与えられる識別子である。
【００３７】
ストレージ装置２００ｂの構造は、本実施形態において、ストレージ装置２００ａと同一である。二つのストレージ装置２００ａ、２００ｂは、同一構造でなくてもよいが、二つのストレージ装置２００ａ、２００ｂは、論理ボリュームの書き込み／読み出しと共に本実施形態で説明されるプログラムを実行することができるように構成される。ストレージ装置２００ａ、２００ｂは、データ転送ネットワーク５０１（５０１ａ、５０１ｂ）によって接続され、例えば、ファイバチャネルＳＡＮで接続される。
【００３８】
ストレージ装置６００は、例えば、ストレージ装置２００ａ（２００ｂ）と同じ構造を有する、又は、ＨＤＤ６５１上で管理されている論理ボリューム６５２の読み出し及び書き込みを行うことができる、比較的シンプルな構造を有する。例えば、ストレージ装置６００は、ＳＣＳＩ対応ＨＤＤを使用することができる。ストレージ装置６００は、ストレージ装置２００ａ、２００ｂに、データ転送ネットワーク５０２（５０２ａ、５０２ｂ）によって接続され、例えば、ファイバチャネルＳＡＮで接続される。
【００３９】
本実施形態において、例えば、データセンタを完全に破壊してしまうような自然災害等における全てのデータの喪失を避けるために、二つのストレージ装置２００ａ、２００ｂは、例えば、互いに遠く離れた二つの異なるサイト（障害ドメイン）に配置される。二つのサイト間の距離は、ＲＴＴ（Ｒｏｕｎｄ−Ｔｒｉｐ  ｄｅｌａｙ  Ｔｉｍｅ）により規定され、ＲＴＴは、いずれのストレージ装置における論理ボリュームにアクセスする場合にも、ホストにとって耐えられる程度に低く維持される。また、例えば、第３のストレージ装置６００は、第３障害ドメインにおいて、二つのストレージ装置２００ａ、２００ｂ双方から遠くに配置される。この構成は、ストレージ装置の一つにおけるデータを消失させるなんらかのアクシデントや自然災害の場合に、図２に示す情報システムにおけるデータの可能性を高めることに寄与する。必要であれば、全ての三つのストレージ装置２００ａ、２００ｂ、６００は、単一のデータセンタ又は他の構成内に配置することができる。
【００４０】
＜ＣＭ−ＰＫの構成＞
図３は、キャッシュメモリパッケージ（ＣＭ−ＰＫ）２４０の構成例を示す。ＣＭ−ＰＫ２４０は、プログラムメモリ２４１、共有メモリ２４２、そしてキャッシュメモリ（図３に不図示）を含む。
【００４１】
プログラムメモリ２４１は、ホストライト処理のためのプログラム２４１１、ホストリード処理のためのプログラム２４１２、リモートボリュームアクセス障害を処理するプログラム２４１３、所定構成要素障害に対してペア状態を変更するプログラム２４１４、クオラムを使用して障害タイプを特定するプログラム２４１５、クオラムヘルスチェックのためのプログラム２４１６、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７、クオラム状態の変更の情報の受信に対してクオラムモードを変更するプログラム２４１８、ハートビート信号を受信し障害を処理するプログラム２４１９を保持する。プログラム２４１９は、本実施形態の説明では実行されない。
【００４２】
共有メモリ２４２は、ペア管理のためのテーブル２４２１、共有構成要素の現在状態のためのテーブル２４２２、各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３、一構成要素障害に対するペア状態遷移のためのテーブル２４２４、構成要素修復に対するペア状態遷移のためのテーブル２４２５を保持する。キャッシュメモリ２４３は、データを一時的に格納するために使用される。
【００４３】
プログラムメモリ２４１におけるプログラム２４１１から２４１９の動作例は、図２２Ａから図３０、図３２を参照して後述する。共有メモリ２４２におけるテーブル２４２１〜２４２５の例は、図１７から図２１を参照して後述する。
【００４４】
＜実施形態の概要＞
本実施形態において、ストレージ装置（以下においてＤＫＣ）２００ａ、２００ｂを含むストレージシステム２００の可用性を改善するために、図４に示すように、二重構成が使用される。
【００４５】
図４は、理解の容易のため、図２の単純化された論理図である。図４において、ホスト１００ａのみが示されており、本実施形態におけるＩ／Ｏのフロー等を説明するために使用される。ホスト１００ｂとの間のフローも同様である。
【００４６】
図４において、長破線は、ホストライトフローを示表す。短破線はホストリードフローを表す。長線と短線の繰り返しは、クオラムヘルスチェックを表す。
【００４７】
本実施形態において、ストレージ管理者は、まず、ボリューム２５２ａ、２５２ｂを使用してＨＡボリュームペア２５２を生成する。そのため、ストレージ管理者は、管理計算機３００（図４において不図示）を使用して、コマンド（例えば「ＨＡペア生成」）を、プライマリボリューム（以後ＰＶＯＬ）及びセカンダリボリューム（以後ＳＶＯＬ）を示す情報と共に、ストレージ装置２００ａ、２００ｂに送信する。本実施形態において、ボリュームペア２５２は、仮想ボリューム２５２としても言及される。なぜなら、ボリュームペア２５２は、ホスト１００ａによって、単一ボリュームとして認識されるからである。
【００４８】
ＰＶＯＬは、ストレージ装置２００ａ、２００ｂ間での通信喪失の際に、存続する（Ｉ／Ｏ処理を継続する）権利を与えられたボリュームである。ＳＶＯＬは、ストレージ装置２００ａ、２００ｂ間での通信喪失の際に、データ整合性を維持するために、ブロックされる（Ｉ／Ｏ処理を中心する）ボリュームである。本実施形態において、ストレージ管理者は、ボリューム２５２ａをＰＶＯＬと定義し、ボリューム２５２ｂをＳＶＯＬと定義している。
【００４９】
ＨＡペアに対して、ＰＶＯＬを有するストレージ装置を、メインＤＫＣ（ＭＤＫＣ）と呼び、ＳＶＯＬを有するストレージ装置をリモートＤＫＣ（ＲＤＫＣ）と呼ぶ。ＨＡボリュームペア２５２に対して、ストレージ装置２００ａは、ＭＤＫＣであり、ストレージ装置２００ｂはＲＤＫＣである。なお、図４においては一つのＨＡペア２５２のみが示されているが、複数のＨＡペアがストレージ装置２００ａ、２００ｂに存在することができる。一例において、もう一つのＨＡペアが存在し、ＰＶＯＬがストレージ装置２００ｂに形成され、ＳＶＯＬがストレージ装置２００ａに形成され、ＨＡペアのＭＤＫＣがストレージ装置２００ｂであり、ＲＤＫＣがストレージ装置２００ａである。
【００５０】
「ＨＡペア生成」コマンドを受信すると、ストレージ装置２００ａは、ペア管理テーブル２４２１ａに対してエントリを追加し、当該エントリは、指定されたＰＶＯＬとＳＶＯＬをＨＡペアとして示し、さらに、ペア状態として「ＣＯＰＹ」を示す。ストレージ装置２００ｂは、同様のエントリを、ペア管理テーブル２４２１ｂに追加する。 
【００５１】
ストレージシステム２００は、ホスト１００ａに、ネットワーク５００ａ、５００ｂそれぞれを使用してアクセスされるボリューム２５２ａ、２５２ｂを、二つの異なるネットワークパスに接続された、単一ボリューム（仮想ボリューム２５２）と信じ込ませる。その結果、一つのボリュームが故障しても、ホスト１００ａは、仮想ボリューム２５２への一つのパスが故障したと認識して、Ｉ／Ｏをもう一方のパスを使用して続ける。もう一方のパスは、実際は、もう一方のボリュームである。
【００５２】
この状況を実現するため、ホスト１００ａから要求されると、例えば、ホスト１００ａによって発行されたＳＣＳＩ照会コマンドに応答して、ストレージ装置２００ａ、２００ｂは、ボリューム２５２ａ、２５２それぞれについて、同一の識別情報を返す。共通の識別情報は、例えば、管理計算機３００によって与えることができ、又は、二つのストレージ装置２００ａ、２００ｂが、互いに通信してＨＡボリュームペア２５２のための共通識別情報を決定することができる。
【００５３】
ホスト１００ａが一つのボリューム２５２を、ストレージシステム２００の二つの異なるポート上で検出すると、ホスト１００ａは、二つのネットワークパス５００ａ、５００ｂの一方又は双方を使用して、ボリューム２５２にアクセスする。ホスト１００ａは、例えば、この目的のためマルチパスソフトウェアを使用することができる。
【００５４】
ＨＡペア２５２のための構成が完成すると、ストレージ装置２００ａは、ＰＶＯＬ２５２ａからＳＶＯＬ２５２ｂにデータのコピーを開始する（初期コピー）。コピーが終了すると、テーブル２４２１ａ、２４２１ｂにおけるＨＡペア２５２のペア状態が、各ストレージ装置によって「ＰＡＩＲ」状態に変更される。「ＰＡＩＲ」状態において、双方のボリュームは、同一のデータを有し、互いに同期している。
【００５５】
アプリケーション１５１が、データのボリュームからのリード／ボリュームへのライトを要求する場合、リード／ライトコマンドを、ＯＳ１５２を介して送信し、マルチパスソフトウェアが、一つのパスを選択して、リード／ライトコマンドを選択されたストレージ装置に転送する。マルチパスソフトウェアは、いずれのパスを選択して、リード／ライトコマンドを送信することもできる。
【００５６】
図４は、さらに、ストレージ装置による、データリード／ライトのフローも模式的に示す。通常の場合、つまり、ストレージ装置２００ａ、２００ｂの全ての構成要素が、（故障なく）良好な状態で動作しているとき、ライトコマンドが、ホスト１００ａからストレージシステム２００（２００ａ又は２００ｂ）に発行されると、ＰＶＯＬ２５２ａとＳＶＯＬ２５２ｂに対して二重化される。ストレージ装置２００ａ、２００ｂのそれぞれは、独立にライトコマンドを受信できるので、データ整合性が公知の方法により維持される。
【００５７】
例えば、本実施形態において、全てのライトコマンドのライトデータは、最初にＰＶＯＬ２５２ａに書き込まれ、その後、ＳＶＯＬ２５２ｂに書き込まれる。ストレージ装置２００ａは、ライトコマンドを受信すると、そのコマンドのターゲットボリュームが、ＰＶＯＬ２５２ａであるかＳＶＯＬ２５２ｂであるかチェックする。例えば、図５に示すように、ＰＶＯＬ２５２ａがターゲットボリュームである場合、ストレージ装置２００ａは、ライトデータをＰＶＯＬ２５２ａに書き込み、その後、ライトデータをストレージ装置２００ｂにおけるＳＶＯＬ２５２ｂに送信する。ＳＶＯＬ２５２ｂへの書き込みが完了すると、ストレージ装置２００ｂは、ストレージ装置２００ａに対して応答を返し、ストレージ装置２００ａは、ライト完了応答をホスト１００ａに送信する。
【００５８】
一方、ストレージ装置２００ｂがライトコマンドを受信し、ターゲットボリュームがＳＶＯＬ２５２ｂである場合、ライトデータをストレージ装置２００ａにおけるＰＶＯＬ２５２ａに転送し、ライト完了応答をストレージ装置２００ａから受信した後に、ライトデータをＳＶＯＬ２５２ｂに書き込み、その後、ライト完了応答をホスト１００ａに返す。
【００５９】
データがＨＡボリュームペア２５２において、リアルタイムに二重化されるので、ボリューム２５２ａ又はボリューム２５２ｂのいずれからの読み出しであっても、同一のデータが与えられる。ボリューム２５２ａに発行されたリードコマンドは、ストレージ装置２００ａにおいて、ボリューム２５２ａを使用して内部処理される。同様に、ボリューム２５２ｂに発行されたリードコマンドは、ストレージ装置２００ｂにおいて、ボリューム２５２ｂを使用して内部処理される。ストレージ装置によるリード／ライトコマンドの処理のフロー例は、図２２Ａ、２２Ｂ及び２３を使用して、本実施形態において後述される。
【００６０】
１）故障の場合に二つのボリュームの一方（ＰＶＯＬ又はＳＶＯＬ）がＩ／Ｏを継続でき、２）スプリットブレイン問題を回避し、３）クオラムが良好に機能しているかチェックできるように、ストレージ装置２００ａは、クオラムストレージ装置（第３のストレージ装置）６００と適時通信を行い、クオラムストレージ装置６００におけるクオラムテーブル６５２１（ボリューム６５２）の一時ロックエントリを読み出すことで、ストレージ装置２００ｂがストレージ装置２００ａとの通信の喪失を検知したかチェックする。この処理は、クオラムヘルスチェックと呼ばれ、クオラムヘルスチェックのためのプログラム２４１６により実行される。ストレージ装置２００ｂも、適時クオラムヘルスチェックを実行し、ヘルスチェックの間の期間は、ストレージ装置２００ａと同様である。クオラムヘルスチェックの処理例は、図２８を使用して後述される。
【００６１】
＜ＤＫＣ間ネットワーク障害に対する処理＞
図５Ａは、ネットワーク５０１ｂにおける障害の場合、及び、ホストライトのフローを、ホストライト処理の間の障害検出と共に示す。図５Ａにおいて、長破線は、パス障害を検出した場合の、ホストライトフローを表す。
【００６２】
この場合において、ＨＡペア２５２は、ネットワーク５０１ｂにおいて障害が発生した時に、「ＰＡＩＲ」状態で動作している。ホスト１００ａがライトコマンドをＭＤＫＣ２００ａに発行し、ＭＤＫＣ２００ａが、まず、データをＰＶＯＬ２５２ａへ書き込み、その後、ＳＶＯＬ２５２ｂにおいて複製を試みる。なぜなら、ペア管理のためのテーブル２４２１ａにおけるＨＡペア状態は、障害が検出されるまで「ＰＡＩＲ」状態のままであるからである。
【００６３】
ＭＤＫＣ２００ａは、このライトコマンドを、ＲＤＫＣ２００ｂにおけるＳＶＯＬ２５２ｂに送信する。しかし、ネットワーク５０１ｂが障害を有するので、コマンドに対する応答は得られないままである。ＭＤＫＣ２００ａは、この状況が、ＲＤＫＣ２００ｂの障害に起因して発生しているか、又は、ネットワーク５０１ｂにおける障害に起因して発生しているか、知る必要がある。ＭＤＫＣ２００ａは、クオラムストレージ装置６００と通信を行い、ＲＤＫＣ２００ｂが良好に機能しているか否かを確かめるため、クオラムストレージ装置６００におけるクオラムテーブル６５２１において一時ロックを設定する。この処理は、リモードボリュームアクセス障害を処理するためのプログラム２４１３及びクオラムを使用して障害タイプを特定するプログラム２４１５により実行される。これらプログラムのフロー例は、図２４、２６それぞれにおいて示され、後述される。
【００６４】
クオラムヘルスチェック（図２８を使用して説明される）の実行により、ＲＤＫＣ２００ｂは、ＰＶＯＬ２５２ａがクオラムをロックしようとしていることを知る、つまり、ＭＤＫＣ２００ａが、ＲＤＫＣ２００ｂとの通信喪失を検出したことを知る。このような場合、ＲＤＫＣ２００ｂは、クオラムテーブル６５２１において一時ロックを設定することによって、自装置が動作していることを、ＭＤＫＣ２００ａに対して通知する。この処理は、ＲＤＫＣ２００ｂのためのプログラム２４１５により実行される。このようなプログラムのフロー例は、図２７に示されている。
【００６５】
クオラムストレージ装置６００との通信の後、ＭＤＫＣ２００ａは、ＲＤＫＣ２００ｂが良好に機能していることを確かめ、ＭＤＫＣ２００ａは、クオラムテーブル６５２１において固定ロックを設定して、ＲＤＫＣ２００ｂに対して、ＰＶＯＬ２００ａが存続し、ＲＤＫＣ２００ｂはＳＶＯＬ２５２ｂをブロックすべきことを通知する。ＭＤＫＣ２００ａ及びＲＤＫＣ２００ｂは、それぞれのペア管理テーブル２４２１ａ、２４２１ｂにおいて、ペア状態を「ＳＵＳＰＥＮＤ」状態に変更する。ライトデータはすでにＰＶＯＬ２５２ａに書き込み済みであるため、ＭＤＫＣ２００ａは、ライト完了応答をホスト１００ａに返す。
【００６６】
＜ＤＫＣがＰＶＯＬ及びＳＶＯＬを含む場合のＤＫＣ間ネットワーク障害に対する処理＞
図５Ｂは、ストレージシステム２００が二つのＨＡペア２５２、２５３を含む例を示す。ストレージ装置２００ａがＨＡペア２５２のＰＶＯＬ２５２ａとＨＡペア２５３のＳＶＯＬ２５３ｂとを含み、ストレージ装置２００ｂがＨＡペア２５２のＳＶＯＬ２５２ｂとＨＡペア２５３のＰＶＯＬ２５３ａとを含む。この構成において、ＤＫＣ間ネットワーク障害が発生する。ＨＡペア２５２については、図５Ａを参照した説明と同様である。
【００６７】
ＨＡペア２５３について、ＭＤＫＣはストレージ装置２００ｂであり、ＲＤＫＣはストレージ装置２００ａである。ＨＡペア２５３のケースは、図５Ａにおいて、ＭＤＫＣとＲＤＫＣが交換された場合と同様である。クオラムロック管理のためのテーブル６５２１は、二つのエントリ行を有し、それぞれ、ＭＤＫＣとして動作する各ストレージ装置のためのものである。ストレージ装置２００ｂがＭＤＫＣとして使用されている場合、２番目のエントリ行がＨＡペア２５３において使用され、ＨＡペア２５２、２５３双方のＰＶＬＯＬ２５２ａ、２５３ａが存続し、ＨＡペア２５２、２５３双方のＳＶＯＬ２５２ｂ、２５３ｂがブロックされる。
【００６８】
＜ＭＤＫＣ障害に対する処理＞
図６は、ＭＤＫＣにおける障害の場合、及び、ホストライトのフローを、ホストライ処理の間の障害検出と共に示す。図６において、長破線はホストライトにおけるパス障害検出のフローとその後処理を表す。
【００６９】
この場合、ＨＡペア２５２は、ＭＤＫＣ２５２ａにおける障害の発生時、「ＰＡＩＲ」状態において機能している。ホスト１００ａがライトコマンドをＲＤＫＣ２００ｂに発行すると、ＲＤＫＣ２００ｂは、まず、データをＰＶＯＬ２５２ａにおいて二重化しようと試みる。なぜなら、ＨＡペア状態は、障害が検出されるまで、「ＰＡＩＲ」状態のままであるからである。ＲＤＫＣ２００ｂは、ライトコマンドをＭＤＫＣ２００ａにおけるＰＶＯＬ２５２ａに送信する。しかし、ＭＤＫＣ２００ａは故障しているので、コマンドに対する応答を得ることができない。
【００７０】
ＲＤＫＣ２００ｂは、この状況がＭＤＫＣ２００ａの障害に起因して発生しているのか、又は、ネットワーク５０１ａにおける障害に起因して発しているのか、を知る必要がある。ＲＫＤＣ２００ｂは、クオラムストレージ装置６００と通信を行い、ＭＤＫＣ２００ａが良好に機能しているか否かを、一時ロックをクオラムボリューム６５２におけるクオラムテーブル６５２１において設定することによって、確認することを試みる。この処理は、ＲＤＫＣ２００ｂのために、リモートボリュームアクセス障害を処理するプログラム２４１３及びクオラムを使用して障害タイプを特定するプログラム２４１５により実行される。これらプログラムのフロー例は、図２４、２６それぞれにおいて示され、後述される。
【００７１】
クオラムストレージ装置６００との通信の後、ＲＤＫＣ２００ｂは、ＭＤＫＣ２００ａが、ＲＤＫＣ２００ｂが行った一時ロックに対して応答を示さなかったことを確認し、ＲＤＫＣ２００ｂは、ＭＤＫＣ２００ａが故障したと推定する。ＲＤＫＣ２００ｂは、固定ロックをクオラムテーブル６５２１に設定して、ＳＶＯＬ２５２ｂが存続し、ＭＤＫＣ２００ａが復帰した時、ＰＶＯＬ２５２ａをブロックすべきであることを示す。ＲＤＫＣ２００ｂは、そのペア状態を「ＲＥＶ−ＳＵＳＰＥＮＤ」に変更する。ＲＤＫＣ２００ｂは、データをＳＶＯＬ２５２ｂに書き込み、ライト完了応答をホスト１００ａに返す。
【００７２】
＜クオラム障害に対する処理＞
図７は、クオラム関連障害が検出された場合に実行される、ストレージシステム２００による処理を示す。図１に示す場合において、クオラムストレージ装置６００とストレージ装置２００ａとの間のネットワーク５０２ａが、故障している。双方のストレージ装置２００ａ、２００ｂが、クオラムヘルスチェック（図２８を使用して説明される）を適時実行するので、ストレージ装置２００ａは、障害発生後の次のクオラムヘルスチェックにおいて、クオラムストレージ装置６００との通信の喪失を検出する。
【００７３】
ストレージ装置２００ａは、ストレージ装置２００ｂに、障害の検出を通知する。双方のストレージ装置２００ａ、２００ｂが、その動作を「利用不可能」モードに変更し、ペア状態をペア状態遷移テーブル２４２４に応じて変更する。
【００７４】
本実施形態において、クオラムストレージ装置６００との通信の喪失が起きる前に、ペア状態は「ＰＡＩＲ」であり、ＭＤＫＣ２００ａ及びＲＤＫＣ２００ｂは、ＨＡペアボリューム２５２ａ、２５２ｂのペア状態を、それぞれ、ペア管理テーブル２４２１ａ、２４２１ｂにおいて、「ＲＣ−ＰＡＩＲ」状態に変更する。
【００７５】
「ＲＣ−ＰＡＩＲ」状態において、リードコマンドがＳＶＯＬ２５２ｂに対して発行されると、各ペア状態のためのＩ／Ｏ処理パターンのためのテーブル２４２３（図２０）に従って、「ＲＣ−ＰＡＩＲ」状態のために、ＳＶＯＬ２５２ｂへのリードコマンドは、「リモート」により処理される、つまり、データはＭＤＫＣ２００ａにおけるＰＶＯＬ２５２ａから読み出され、ＲＤＫＣ２００ｂによってホスト１００ａに返される。
【００７６】
リードコマンドがＰＶＯＬ２５２ａに発行されると、各ペア状態のためのＩ／Ｏ処理パターンのためのテーブル２４２３に従って、ＰＶＯＬ２５２ａに対するリードコマンドは、「ローカル」によって処理される、つまり、データはＭＤＫＣ２００ａにおけるＰＶＯＬ２５２ａから読み出され、ＭＤＫＣ２００ａによってホスト１００ａに返される。ＰＶＯＬ２５２ａ及びＳＶＯＬ２５２ｂへの全てのライトコマンドは、ボリューム２５２ａ、２５２ｂ双方に対して二重化され続ける。
【００７７】
「利用不可能」モードにおいて、第１及び第２のストレージ装置２００ａ、２００ｂの間で通信障害が発生すると、第１及び第２のストレージ装置２００ａ、２００ｂは、第３のストレージ装置６００を使用して他方のストレージ装置の状態を確認することなく、予め定められたルールに従って、存続ボリュームと非存続ボリュームとを決定する。「利用不可能」モードにおいて、ライトデータの二重化は、第１及び第２のボリューム２５２ａ、２５２ｂにおいて継続するが、ホストリードコマンドは、二つのストレージ装置２００ａ、２００ｂ間の通信装置がすぐに検出でき、スプリットブレイン問題が発生しないように、処理される。
【００７８】
一つの方法は、第１及び第２のストレージ装置２００ａ、２００ｂの間の適時ハードビート信号を使用して、通信ネットワーク及び互い（ストレージ装置）の状態をチェックする。何らかの通信喪失が起きている場合、ハートビート信号が規定時間内に受信されないことで、検出される。
【００７９】
他の方法において、二つのストレージ装置２００ａ、２００ｂで受信された全てのホストリードは、「利用不可能」モードに切り替わった時に存続ボリュームと決定された一つのボリュームのみから、データを読み出すことで処理される。この方法において、通信喪失は、非存続ボリュームを有するストレージ装置によって、ホストリード及びホストライト動作のいずれが実行されるときにも、検出される。これにより、スプリットブレイン問題が回避される。
【００８０】
このアプローチによって、第３のストレージ装置との通信が喪失した後であっても（「利用不可能」モードにおいて）、１）データは、第１及び第２のストレージ装置におい二重化され続け、２）予め決められている非存続ボリュームの障害又は第１及び第２のストレージ装置間の通信回線の障害の場合に、存続ボリュームがＩ／Ｏを処理し続ける。
【００８１】
アプリケーション１５１が、データを、ボリュームから読み出す／ボリュームへ書き込む、ことを望む場合、リード／ライトコマンドをＯＳ１５２を介して送信し、マルチパスソフトウェアが、一つのパスを選択して、そのリード／ライトコマンドをストレージ装置に転送する。マルチパスソフトウェアは、リード／ライトコマンドを送信するいずれのパスを選択することもできる。
【００８２】
ライトコマンドの場合、データ冗長化のために、ライトコマンドを受信したストレージ装置は、ライトデータをプライマリボリュームとセカンダリボリュームに二重化する。双方のストレージ装置が、独立に、ライトコマンドを受信できるので、データ同一性が、公知の方法により維持される。
【００８３】
例えば、本実施形態において、ホスト１００ａからの全てのライトデータは、最初にＰＶＯＬ２５２ａに書き込まれ、その後、ＳＶＯＬ２５２ｂに書き込まれる。従って、ストレージ装置は、ライトコマンドを受信すると、そのボリュームがプライマリボリュームであるかセカンダリボリュームであるか判定し、プライマリボリュームである場合には、そのボリュームにデータを書き込み、その後、他方のストレージ装置における他方のボリュームにライトデータを送信する。セカンダリボリュームへの書き込みが完了し、応答がプライマリボリュームを有するストレージ装置になされると、ライト完了応答がホストに送信される。
【００８４】
一方、ライトコマンドを受信したストレージ装置が、そのボリュームがセカンダリであると確認すると、当該データを他方のストレージ装置におけるプライマリボリュームに送信し、他方のストレージ装置からの応答を受信した後、データをそれ自体のボリュームに書き込み、その後、ライト完了応答をホストに返す。なお、プライマリボリュームとセカンダリボリュームのストレージ装置へのライトデータは、一時的に、ストレージ装置２００ａ、２００ｂそれぞれの、キャッシュメモリ２４３に格納されてもよい。
【００８５】
本実施形態において、ストレージ装置２００ａ、２００ｂは、ホストＩ／Ｏ処理パターンを、状態マシンを使用して管理する。これは図８から図１６を使用して後述する。ストレージ装置２００ａ、２００ｂは、ＨＡボリュームペア２５２におけるそのボリュームの状態を記録し続ける。ストレージ装置２００ａ、２００ｂは、様々なイベントに対して、例えば、情報システムの構成要素の状態が変化する（故障する又は修復される）又はストレージ管理者がコマンドを与えると、ボリュームのペア状態を変更する。ＨＡボリュームペア２５２の二つのボリューム２５２ａ、２５２ｂは、必ずしも同一のペア状態でなくてもよい。
【００８６】
＜状態マシン＞
図８から図１６は、ＨＡ動作にペア状態に関する、状態マシンの図（状態遷移図）を示す。各ペア状態を、以下に説明する。
【００８７】
＜Ｓ１：「ＳＭＰＬ」状態＞
「ＳＭＰＬ」状態Ｓ１（「Ｓｉｍｐｌｅｘ」状態とも呼ぶ）は、ペアを構成するＰＶＯＬとＳＶＯＬと間のコピーはまだ開始していない、状態である。
【００８８】
図８に示すように、ストレージ管理者がＨＡペアを生成するコマンドを発行すると（Ｅ１）、ＨＡペアボリュームのペア状態は、「ＣＯＰＹ」状態Ｓ２に変化し、ＰＶＯＬからＳＶＯＬへの初期データコピーが開始する。
【００８９】
図９に示すように、ストレージ管理者がＲｅｖ−ＨＡペアを生成するコマンドを発行すると（Ｅ１）、ＨＡペアボリュームのペア状態は「ＲＥＶ−ＣＯＰＹ」状態Ｓ３に変化し、ＳＶＯＬからＰＶＯＬへの初期データコピーが開始する。
【００９０】
＜Ｓ２：「ＣＯＰＹ」状態＞
「ＣＯＰＹ」状態Ｓ２は、ＰＶＯＬからＳＶＯＬへの初期データコピーが開始しているが、終了していない状態である。図８は、「ＣＯＰＹ」状態Ｓ２のペア状態遷移図を示す。
【００９１】
「ＣＯＰＹ」状態Ｓ２において、ＰＶＯＬ障害（Ｅ１０）又はＭＤＫＣ障害（Ｅ１２）が発生すると、ペア状態は「ＢＬＯＣＫ」状態Ｓ１０に変化する。なぜなら、唯一動作しているボリューム（ＰＶＯＬ）が、利用不可能であるからである。ＲＤＫＣ障害（Ｅ１３）又はＤＫＣ間データパス障害（Ｅ１４）が発生すると、ペア状態は「ＳＵＳＰＥＮＤ」状態Ｓ８に変化する。なぜなら、これ以上コピーを続けることができないからである。ＰＶＯＬからＳＶＯＬへの初期データコピーが完了している場合（Ｅ９）、ペア状態は「ＰＡＩＲ」状態Ｓ４に変化する。
【００９２】
ＳＶＯＬ障害（Ｅ１１）が発生すると、ペア状態は「ＳＷＩＴＣＨ」状態Ｓ６に変化する。なぜなら、ＳＶＯＬへのコピーを続けることはできないが、ＳＶＯＬに対するＩ／Ｏコマンドは、それをＰＶＯＬに転送することで、処理することができるからである。クオラム状態が変化しても（クオラム障害（Ｅ１５）又はクオラム修復（Ｅ２５）が発生しても）、ペア状態は変化しない。
【００９３】
＜Ｓ３：「ＲＥＶ−ＣＯＰＹ」状態＞
「ＲＥＶ−ＣＯＰＹ」状態Ｓ３は、ＳＶＯＬからＰＶＯＬへの初期コピーが開始しているが、まだ終了していない状態である。図９は、「ＲＥＶ−ＣＯＰＹ」状態Ｓ３のペア状態遷移図を示す。
【００９４】
「ＲＥＶ−ＣＯＰＹ」状態Ｓ３において、ＳＶＯＬ障害（Ｅ１１）又はＲＤＫＣ障害（Ｅ１３）が発生すると、ＰＶＯＬのペア状態は「ＲＥＶ−ＳＵＳＰＥＮＤ」状態Ｓ９に変化し、ＳＶＯＬのペア状態は「ＢＬＯＣＫ」状態Ｓ１０に変化する。ＭＤＫＣ障害（Ｅ１２）又はＤＫＣ間パス障害（Ｅ１４）が発生している場合、ペア状態は「ＲＥＶ−ＳＵＳＰＥＮＤ」状態Ｓ９に変化する。なぜなら、コピーはこれ以上続けることができないからである。
【００９５】
ＳＶＯＬからＰＶＯＬへの初期データコピーが完了している（Ｅ９）場合、ペア状態は、利用可能モードにおいて「ＰＡＩＲ」状態Ｓ４に変化する、又は、ペア状態は利用不可能モードおいて「ＲＣ−ＰＡＩＲ」状態Ｓ５に変化する。ＰＶＯＬ障害（Ｅ１０）が発生すると、ペア状態は「ＲＥＶ−ＳＷＩＴＣＨ」状態Ｓ６に変化する。なぜなら、ＰＶＯＬへのコピーを続けることができないが、ＰＶＯＬへのＩ／Ｏコマンドは、それをＳＶＯＬに転送することで処理できるからである。クオラム状態が変化しても（クオラム障害（Ｅ１５）又はクオラム修復（Ｅ２５）が発生しても）、ペア状態は変化しない。
【００９６】
＜Ｓ４：「ＰＡＩＲ」状態＞
「ＰＡＩＲ」状態Ｓ４は、初期コピーが完了し、ＰＶＯＬとＳＶＯＬが同期し、ＨＡストレージペアの二つのストレージ装置間での通信喪失の場合にクオラムが利用可能である、状態である。図１０は、「ＰＡＩＲ」状態のペア状態遷移図を示す。
【００９７】
「ＰＡＩＲ」状態Ｓ４において、ＰＶＯＬ障害（Ｅ１０）が発生すると、ペア状態は「ＲＥＶ−ＳＷＩＴＣＨ」状態Ｓ７に変化する。なぜなら、ＰＶＯＬへのＩ／ＯコマンドはＳＶＯＬを使用して処理できるからである。ＭＤＫＣ障害（Ｅ１２）が発生すると、ペア状態は「ＲＥＶ−ＳＵＳＰＥＮＤ」Ｓ９に変化する。なぜなら、ＰＶＯＬにアクセスすることができず、さらに、ＰＶＯＬに向けられたＩ／ＯコマンドはＳＶＯＬに転送することもできないからである。
【００９８】
ＤＫＣ間パス障害（Ｅ１４）又はＲＤＫＣ障害（Ｅ１３）が発生すると、ペア状態は「ＳＵＳＰＥＮＤ」状態Ｓ８に変化する。なぜなら、ＳＶＯＬはもうＰＶＯＬと同期することができないからである。ＳＶＯＬ障害（Ｅ１１）が発生すると、ペア状態は「ＳＷＩＴＣＨ」状態Ｓ６に変化する。なぜなら、ＳＶＯＬへのコピーを続けることができないが、ＳＶＯＬへのＩ／ＯコマンドはＰＶＯＬを使用して処理できるからである。クオラム障害が発生した場合（Ｅ１５）、ペア状態は「ＲＣ−ＰＡＩＲ」状態Ｓ５に変化する。なぜなら、ボリュームペアの可用性は、クオラムが存在するときのレベルに維持することはできないが、ＳＶＯＬはＰＶＯＬのリモートコピーとして動作できるからである。
【００９９】
＜Ｓ５：「ＲＣ−ＰＡＩＲ」状態＞
「ＲＣ−ＰＡＩＲ」状態Ｓ５は、初期コピーが完了し、ＰＶＯＬとＳＯＶＬが同期しているが、ＨＡストレージペアの二つのストレージ装置間での通信喪失の場合にクオラムが利用できない（「利用不可能」モード）、状態である。図１１は、「ＲＣ−ＰＡＩＲ」状態Ｓ５のペア状態遷移図を示す。
【０１００】
この状態において、ＰＶＯＬ障害が起きると（Ｅ１０）、ペア状態は「ＲＥＶ−ＳＷＩＴＣＨ」状態Ｓ７に変化する。なぜなら、ＰＶＯＬに送信されたＩ／Ｏコマンドは、ＳＶＯＬを使用して処理することができるからである。ＲＤＫＣがＭＤＫＣとの通信を喪失すると（ＭＤＫＣ障害又はパス障害にために）（Ｅ１２／Ｅ１４）、ＳＶＯＬのペア状態を「ＢＬＯＣＫ」状態Ｓ１０に変化させる。なぜなら、クオラム不在の場合、ＲＤＫＣは通信喪失がＤＫＣ間ネットワーク障害によるものか、ＭＤＫＣ障害によるものかを、確認できないからである。ＭＤＫＣがＲＤＫＣとの通信を喪失すると（ＲＤＫＣ障害又はパス障害にために）（Ｅ１３／Ｅ１４）、ＰＶＯＬのペア状態を「ＳＵＳＰＥＮＤ」状態Ｓ８に変化させる。
【０１０１】
ＳＶＯＬ障害が起きると（Ｅ１１）、ペア状態は「ＳＷＩＴＣＨ」状態Ｓ６に変化する。なぜなら、ＳＶＯＬに対するコピーを続けることができないが、ＳＶＯＬに送信されたＩ／ＯコマンドはＰＶＯＬを使用して処理できるからである。クオラムが修復されると（Ｅ２５）、ペア状態は「ＰＡＩＲ」状態Ｓ４に変化する。
【０１０２】
＜Ｓ６：「ＳＷＩＴＣＨ」状態＞
「ＳＷＩＴＣＨ」状態Ｓ６は、ＳＶＯＬが何らの障害のために利用不可能であり、ＰＶＯＬ、ＭＤＫＣ、及びＲＤＫＣが良好に機能している、状態である。この状態において、ＳＶＯＬへのＩ／Ｏコマンドは、ＰＶＯＬに転送され、処理される。ホスト処理は、影響を受けず、双方のパス（一つはＰＶＯＬへのパスであり、もう一つはＳＶＯＬへのパスである）を使用し続けることができる。図１２は、「ＳＷＩＴＣＨ」状態Ｓ６のペア状態遷移図を示す。
【０１０３】
この状態において、ＰＶＯＬ障害又はＭＤＫＣ障害が発生すると（Ｅ１０／Ｅ１２）、ペア状態は「ＢＬＯＣＫ」状態Ｓ１０に変化する。なぜなら、唯一機能しているコピーデータ（ＰＶＯＬ）が、もう利用できないからである。ＭＤＫＣがＲＤＫＣとの通信を喪失すると（Ｅ１３／Ｅ１４）、ＭＤＫＣはＰＶＯＬのペア状態を「ＳＵＳＰＥＮＤ」状態Ｓ８に変化させる。ＳＶＯＬ障害が修復され、ストレージ管理者が「Ｒｅｓｙｎｃ」コマンドを発行すると（Ｅ７）、ペア状態は「ＣＯＰＹ」状態Ｓ２に変化する。「ＳＷＩＴＣＨ」状態Ｓ６は、クオラム状態の変化（クオラム障害の発生又はクオラムの修復）（Ｅ１５／Ｅ２５）によっては、変化しない。
【０１０４】
＜Ｓ７：「ＲＥＶ−ＳＷＩＴＣＨ」状態＞
「ＲＥＶ−ＳＷＩＴＣＨ」状態Ｓ７は、「ＳＷＩＴＣＨ」状態Ｓ６の逆である。「ＲＥＶ−ＳＷＩＴＣＨ」状態Ｓ７において、ＰＶＯＬは何らかの理由で利用不可能であるが、ＳＶＯＬ、ＭＤＫＣ、及びＲＤＫＣが良好に機能している、状態である。この状態において、ＰＶＯＬへのＩ／Ｏコマンドは、ＳＶＯＬに転送され、処理される。ホスト処理は、影響を受けず、双方のパス（一つはＰＶＯＬへのパスであり、もう一つはＳＶＯＬへのパスである）を使用し続けることができる。図１３は、「ＲＥＶ−ＳＷＩＴＣＨ」状態Ｓ７のペア状態遷移図を示す。
【０１０５】
この状態において、ＳＶＯＬ障害又はＲＤＫＣ障害が発生すると（Ｅ１１／Ｅ１３）、ペア状態は「ＢＬＯＣＫ」状態Ｓ１０に変化する。なぜなら、唯一機能しているコピーデータ（ＳＶＯＬ）が、もう利用できないからである。ＲＤＫＣがＭＤＫＣとの通信を喪失すると（Ｅ１２／Ｅ１４）、ＲＤＫＣはＳＶＯＬのペア状態を「ＲＥＶ−ＳＵＳＰＥＮＤ」状態Ｓ９に変化させる。ＰＶＯＬ障害が修復され、ストレージ管理者が「Ｒｅｖ−Ｒｅｓｙｎｃ」コマンドを発行すると（Ｅ７）、ペア状態は「ＲＥＶ−ＣＯＰＹ」状態Ｓ３に変化する。「ＲＥＶ−ＳＷＩＴＣＨ」状態Ｓ７は、クオラム状態の変化（クオラム障害の発生又はクオラムの修復）（Ｅ１５／Ｅ２５）によっては、変化しない。
【０１０６】
＜Ｓ８：「ＳＵＳＰＥＮＤ」状態＞
「ＳＵＳＰＥＮＤ」状態Ｓ８は、ＭＤＫＣとＲＤＫＣがネットワーク５０１の障害又はＲＤＫＣの障害により通信することができない、状態である。障害とは別に、ストレージ管理者は、「ペア」状態にあるボリュームペアを、「ＳＵＳＰＥＮＤ」コマンドを与えることで、意図的にサスペンド状態にすることができる。この状態において、ＰＶＯＬはＩ／Ｏ処理を継続し、ＳＶＯＬは継続しない。図１４は、「ＳＵＳＰＥＮＤ」状態Ｓ８のペア状態遷移図を示す。
【０１０７】
この状態において、ＰＶＯＬ障害又はＭＤＫＣ障害が発生すると（Ｅ１０／Ｅ１２）、ＰＶＯＬとＳＶＯＬのペア状態は、「ＢＬＯＣＫ」Ｓ１０に変化される。なぜなら、唯一機能しているコピーデータ（ＰＶＯＬ）が、これ以上利用できないからである。「ＳＵＳＰＥＮＤ」状態Ｓ８において、ネットワークパス５０１（又はＲＤＫＣ）が修復され、ＳＶＯＬがＭＤＫＣによってアクセス可能である場合、ストレージ管理者は、「Ｒｅｓｙｎｃ」コマンドを与え（Ｅ７）、ＰＶＯＬとＳＶＯＬとを、ミラー状態のボリュームペアにする。これにより、ペア状態が、「ＣＯＰＹ」状態Ｓ２に変化する。
【０１０８】
「ＳＵＳＰＥＮＤ」状態Ｓ８において、ネットワークパス５０１が修復されているが、ＳＶＯＬが障害状態のままである（Ｅ２４）場合、ペア状態は「ＳＷＩＴＣＨ」状態Ｓ６に変化する。「ＳＵＳＰＥＮＤ」状態は、クオラム状態の変化（クオラム障害の発生又はクオラムの修復）（Ｅ１５／Ｅ２５）によっては、変化しない。
【０１０９】
＜Ｓ９：「ＲＥＶ−ＳＵＳＰＥＮＤ」状態＞
「ＲＥＶ−ＳＵＳＰＥＮＤ」状態Ｓ９は、ＳＶＯＬがＩ／Ｏ処理を続行する一方、ＰＶＯＬはＩ／Ｏ処理を続行しない、ペア状態である。この状態は、例えば、ＰＤＫＣ障害が発生した、又は、ストレージ管理者が、「ＲＥＶ−ＳＵＳＰＥＮＤ」コマンドを与えることで、意図的に「ＰＡＩＲ」状態Ｓ４におけるボリュームペアをリバースサスペンド状態にした場合に、起きる。図１５は、「ＲＥＶ−ＳＵＳＰＥＮＤ」状態Ｓ９のペア状態遷移図を示す。
【０１１０】
この状態において、ＳＶＯＬ障害又はＲＤＫＣ障害が発生すると（Ｅ１１／Ｅ１３）、ＳＶＯＬのペア状態は、「ＢＬＯＣＫ」Ｓ１０に変更される。なぜなら、唯一機能しているコピーデータ（ＳＶＯＬ）が、これ以上利用できないからである。「ＲＥＶ−ＳＵＳＰＥＮＤ」状態Ｓ９において、ネットワークパス５０１（又はＭＤＫＣ）が修復され、ＰＶＯＬがアクセス可能である場合、ストレージ管理者は、「Ｒｅｖ−Ｒｅｓｙｎｃ」コマンドを与え（Ｅ７）、ＰＶＯＬ／ＳＶＯＬのペア状態は、「ＲＥＶ−ＣＯＰＹ」状態Ｓ３に変化し、ＳＶＯＬからのデータが、ＰＶＯＬにコピーされる。
【０１１１】
「ＲＥＶ−ＳＵＳＰＥＮＤ」状態は、クオラム状態の変化（Ｅ１５／Ｅ２５）によっては、変化しない。
【０１１２】
＜Ｓ１０：「ＢＬＯＣＫ」状態＞
「ＢＬＯＣＫ」状態Ｓ１０は、ボリュームを提供しているストレージ装置が、ボリュームに対するＩ／Ｏ処理を停止している、ＨＡペアのボリュームのペア状態である。図１６は、異なる事象に対する、「ＢＬＯＣＫ」状態Ｓ１０から／への、ペア状態遷移図を示す。
【０１１３】
＜クオラムロック管理のためのテーブル＞
図１７は、実施形態に係る、クオラムロック管理のためのテーブル６５２１の例を示す。クオラムロック管理のためのテーブル６５２１は、第３のストレージ装置６００の論理ボリューム６５２内に存在する。
【０１１４】
クオラムロック管理のためのテーブル６５２１は、二つのＤＫＣ（ストレージ装置２００ａ、２００ｂ）それぞれのための二つの行を有する。一つ目の行はＤＫＣＤ２のための行であり、二つ目の行はＤＫＣＤ５のための行である。例えば、ＤＫＣＤ２は、ストレージ装置２００ａであり、ＤＫＣＤ５は、ストレージ装置２００ｂである。
【０１１５】
二つの行は、二つのＤＫＣをＨＡボリュームペアのための優先ＤＫＣとして示す。本実施形態において、ＤＫＣ２００ａにおける全てのＨＡＰＶＯＬに対して、優先ＤＫＣはＤＫＣ２００ａであり、ＤＫＣ２００ｂにおける全てのＨＡＰＶＯＬに対して、優先ＤＫＣはＤＫＣ２００ｂである。
【０１１６】
各行は、ＨＡＤＫＣペアのＤＫＣのための「一時ロック」と、「固定ロック（勝者ＤＫＣ）」のエントリを含む。ＤＫＣは、一時ロックを、対応する「一時ロック」セルに「Ｔｒｕｅ」を書き込むことで、設定できる。ＤＫＣは、固定ロックを、そのＤＫＣＩＤを「固定ロック（勝者ＤＫＣ）」セルに書き込むことで設定できる。
【０１１７】
ＤＫＣの一つが故障すると、ＨＡＤＫＣペアの内の存続しているＤＫＣは、双方の行において一時ロックを設定し、最後に固定ロックを設定することで、他のＤＫＣがロックを設定していないことを知る。存続ＤＫＣの全てのボリューム（ＰＶＯＬ又はＳＶＯＬに係らわらず）が存続し、Ｉ／Ｏを継続する。
【０１１８】
例えば、ＤＫＣ間ネットワークが故障すると、二つのＤＫＣの双方が、一時ロックを設定し、各ＤＫＣは、それが優先ＤＫＣである行において固定ロックを設定できる。従って、双方のＤＫＣが存続するが、双方のＤＫＣのＰＶＯＬだけが存続してＩＯを継続し、双方のＤＫＣの全てのＳＶＯＬがブロックされる。
【０１１９】
＜ペア管理のためのテーブル＞
図１８は、実施形態に係る、ペア管理のためのテーブル２４２１の例を示す。ペア管理のためのテーブル２４２１は、各ＨＡボリュームペアに対して一つのエントリを有し、そのエントリは、ＨＡペアの自装置のボリューム（テーブルが存在するＤＫＣのボリューム）のボリュームＩＤを示す「自装置ＶＯＬＩＤ」、ボリュームペアにおける自装置のボリュームの役割を示す「自装置ＶＯＬタイプ」、「ペアＤＫＣＩＤ」、「ペアＶＯＬＩＤ」、「ペアＶＯＬ状態」、そして「ペア状態」のエントリを含む。
【０１２０】
＜共通構成要素の現在状態のためのテーブル＞
図１９は、本発明の実施形態に係る、共通構成要素の現在状態のためのテーブル２４２２の例を示す。共通構成要素の現在状態のためのテーブル２４２２は、ＨＡボリュームペアのグループで共通の構成要素の状態についての一エントリのみを有する。
【０１２１】
つまり、共通構成要素の現在状態のためのテーブル２４２２は、「自装置ＤＫＣ」、「ペアのＤＫＣ」、ストレージ装置２００ａ、２００ｂ間のネットワークである「ＤＫＣ間パス」、「自装置クオラム」、「ペアのＤＫＣのクオラム」を管理する。共通構成要素の現在状態のためのテーブル２４２２は、さらに、クオラムモードのためのエントリを含む。クオラムモードは、ストレージ装置２００ａ、２００ｂのＨＡペアボリュームに対して、共通であるからである。
【０１２２】
＜各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル＞
図２０は、実施形態に係る、各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３の例を示す。各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３は、読み出し専用テーブルであり、ホストライト処理のためのプログラム２４１１及びホストリード処理のためのプログラム２４１２が、参照し、ボリュームに対するライト／リードコマンドを、ボリュームの現在のペア状態においてどのように処理するか決定する。
【０１２３】
各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３は、各可能なペア状態に対して、ＰＶＯＬ及びＳＶＯＬに対する、「ホストリード」コマンド及び「ホストライト」コマンドの処理パターンのエントリを有する。エントリは、「ローカル」、「リモート」、「二重化」、又は「ＮＯ」である。
【０１２４】
エントリ「ローカル」は、Ｉ／Ｏ処理が、そのＩ／Ｏコマンドが発行されたストレージ装置に存在するボリュームを使用して実行されなければならないことを意味する。エントリ「リモート」は、Ｉ／Ｏ処理が、ペアのストレージ装置に存在するリモートボリュームを使用して処理されなければならないことを意味する。エントリ「ＮＯ」は、Ｉ／Ｏコマンドが処理できないことを意味する。エントリ「二重化」は、ライトコマンドに対してのみ定義され、データが、ＨＡペアの二つのボリューム（ＰＶＯＬ及びＳＶＯＬ）に書き込まれなければならないことを意味する。
【０１２５】
＜一構成要素障害に対するペア状態遷移のためのテーブル＞
図２１は、一構成要素障害に対するペア状態遷移のためのテーブル２４２４の例を示す。一構成要素障害に対するペア状態遷移のためのテーブル２４２４は、読み出し専用テーブルであり、情報システムの構成要素の故障においてボリュームペアの状態を変更するプログラムは、このテーブルを参照し、ＨＡボリュームペアの新しい状態を決定する。
【０１２６】
一構成要素障害に対するペア状態遷移のためのテーブル２４２４は、各ペア状態における単一構成要素障害のための新しいペア状態のエントリを有する。一構成要素障害に対するペア状態遷移のためのテーブル２４２４は、主に、ボリュームペア状態を変更するプログラムに使用される。例えば、所定構成要素障害に対してペア状態を変更するプログラム２４１４、クオラム状態の変化によりクオラムモードとペア状態を変更するプログラム２４１７である。
【０１２７】
一構成要素障害に対するペア状態遷移のためのテーブル２４２４を読む方法を、状況例を使用して説明する。この例において、ボリュームペア２５２に対して、現在ペア状態は「ＰＡＩＲ」であり、ストレージ装置２００ａは、図１に示すようにネットワーク５０２における障害（又はクオラムストレージ装置６００の障害）に起因する、クオラムストレージ装置６００との通信喪失を検出する。ストレージ装置２００ａは、行「ＰＡＩＲ」及び欄「ＱＵＯＲＵＭ  ＦＡＵＬＴ」におけるセルを読み出し、その値は「ＲＣ−ＰＡＩＲ」である。従って、ストレージ装置２００ａは、ボリューム２５２ａのペア状態を「ＲＣ−ＰＡＩＲ」状態に変更する。
【０１２８】
＜ホストライト処理のためのプログラム（ＰＶＯＬ）＞
図２２Ａは、ホストライト処理のためのプログラム２４１１の動作を示すフローチャートであり、ストレージ装置がライトコマンドをホスト１００ａから受信した時の動作を示す。ホストライト処理のためのプログラム２４１１は、ストレージ装置２００ａ、２００ｂの双方に実行される。説明の容易のため、本例において、ストレージ装置２００ａが、ホストライトコマンドを受信するとする。
【０１２９】
ステップＳ１００において、ストレージ装置２００ａは、ライトコマンドをホスト１００ａから受信し、コマンドからボリュームＩＤを取得する。
【０１３０】
ステップＳ１０１において、ストレージ装置２００ａは、コマンドからのボリュームＩＤを参照し、さらに、ペア管理のためのテーブル２４２１を参照して、ライトターゲットボリュームが、ＰＶＯＬ又はＳＶＯＬであるか判定する。ＰＶＯＬである場合、ステップＳ１０２を実行する。
【０１３１】
ステップＳ１０２において、ストレージ装置２００ａは、ボリュームＩＤを使用して、ペア管理のためのテーブル２４２１を参照することで、ボリュームペアの状態を特定する。ストレージ装置２００ａは、各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３を参照し、特定した状態におけるＰＶＯＬに対するホストライトパターンを確認する。
【０１３２】
ストレージ装置２００ａは、ＰＶＯＬに対する「ホストライト」が「リモート」である場合にステップＳ１０６を実行し、ＰＶＯＬに対する「ホストライト」が「ローカル」又は「二重化」である場合にステップＳ１０３を実行し、ＰＶＯＬに対する「ＮＯ」である場合にステップＳ１１３を実行する。
【０１３３】
ステップＳ１０３において、ストレージ装置２００ａは、ライトデータをＰＶＯＬに書き込む。
【０１３４】
ステップＳ１０４において、ストレージ装置２００ａは、各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３を参照し、現在状態におけるＰＶＯＬに対する「ホストライト」が「二重化」であるか確認する。ストレージ装置２００ａは、現在状態におけるＰＶＯＬに対する「ホストライト」が「二重化」である場合にステップＳ１０６を実行し、ＰＶＯＬに対する「ホストライト」が他のパターンである場合にステップＳ１０５を実行する。
【０１３５】
ステップＳ１０５において、ストレージ装置２００ａは、ライト完了応答をホスト１００ａに返し、ホストライト処理のためのプログラム２４１１は、終了する。
【０１３６】
ステップＳ１０６において、ストレージ装置２００ａは、ペア管理テーブルを参照し、ＨＡペアのＳＶＯＬが存在するストレージ装置ＩＤを取得し、ライトコマンドをそのストレージ装置（この例において、ストレージ装置２００ｂ）におけるＳＶＯＬに送信する。
【０１３７】
ステップ１０７において、ストレージ装置２００ａは、ステップＳ１０６で送信されたライトコマンドに対するストレージ装置２００ｂからの応答を待ち、ライト完了応答が受信されるとステップＳ１１０を実行し、特定のタイムアウト時間内に応答が受信されない場合にはステップＳ１０８を実行し、ライトエラーメッセージを受信した場合にはステップＳ１１１を実行する。
【０１３８】
ステップＳ１０８において、ストレージ装置２００ｂからの応答が受信されない場合、ストレージ装置２００ａは、リモートボリュームアクセス障害を処理するプログラム２４１３を実行して、可能であれば障害を解析し、必要であればペア状態を変更する。
【０１３９】
ステップＳ１０９において、ストレージ装置２００ａは、ライト完了応答をホスト１００ａに返し、ホストライト処理のためのプログラム２４１１は終了する。
【０１４０】
ステップＳ１１０において、ストレージ装置２００ａは、ライト完了応答をホスト１００ａに返す。ステップＳ１１１において、ストレージ装置２００ａは、ＳＶＯＬのパラメータを使用して、所定構成要素障害に対してペア状態を変更するプログラム２４１４を実行する。
【０１４１】
ステップ１１２において、ストレージ装置２００ａは、ライト完了応答をホスト１００ａに返し、ホストライト処理のためのプログラム２４１１は終了する。
【０１４２】
ステップＳ１１３において、ストレージ装置２００ａは、エラーメッセージをホスト１００ａに返し、ホストライト処理のためのプログラム２４１１は終了する。
【０１４３】
＜ホストライト処理のためのプログラム（ＳＶＯＬに対する）＞
図２２Ｂを参照して、ステップＳ１２０において、ストレージ装置２００ａは、ペア管理のためのテーブル２４２１を参照することによって、ボリュームＩＤを使用してボリュームペアの状態を判定し、各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３を参照して、判定した状態におけるＳＶＯＬに対するライトパターンを確認する。ストレージ装置２００ａは、ＳＶＯＬに対する「ホストライト」が「ローカル」である場合にはステップＳ１２１を実行し、ＳＶＯＬに対する「ホストライト」が「リモート」又は「二重化」である場合にはステップＳ１２３を実行し、ＳＶＯＬに対する「ホストライト」が「ＮＯ」である場合にはステップＳ１３２を実行する。
【０１４４】
ステップＳ１２１において、ストレージ装置２００ａは、ライトデータをＳＶＯＬに書き込む。
【０１４５】
ステップＳ１２２において、ストレージ装置２００ａは、ライト完了応答をホスト１００ａに返す。
【０１４６】
ステップＳ１２３において、ストレージ装置２００ａは、ペア管理のためのテーブル２４２１を参照して、ＨＡペアのＰＶＯＬが存在するストレージ装置ＩＤを取得し、ホストライトコマンドを当該ストレージ装置（この例においてストレージ装置２００ｂ）におけるＰＶＯＬに送信する。
【０１４７】
ステップＳ１２４において、ストレージ装置２００ａは、ストレージ装置２００ｂからの、ステップＳ１２３において送信したライトコマンドに対する応答を待つ。ストレージ装置２００ａは、ライト完了応答を受信するとステップＳ１２５を実行する。ストレージ装置２００ａは、特定のタイムアウト期間内に応答が受信できない場合にはステップＳ１２８を実行する。ストレージ装置２００ａは、ライトエラーメッセージを受信した場合にはステップＳ１３０を実行する。
【０１４８】
ステップＳ１２５において、ストレージ装置２００ａは、各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３を参照して、ＳＶＯＬに対する「ホストライト」が「二重化」であるか判定する。ストレージ装置２００ａは、ＳＶＯＬに対する「ホストライト」が「二重化」である場合にステップＳ１２６を実行する。ストレージ装置２００ａは、ＳＶＯＬに対する「ホストライト」が他のパターンである場合にはステップＳ１２７を実行する。
【０１４９】
ステップＳ１２６において、ストレージ装置２００ａは、ライトデータをＳＶＯＬに書き込む。
【０１５０】
ステップＳ１２７において、ストレージ装置２００ａは、ライト完了応答をホスト１００ａに返し、ホストライト処理のためのプログラム２４１１は終了する。
【０１５１】
ステップＳ１２８において、ストレージ装置２００ａは、リモートボリュームアクセス障害を処理するプログラム２４１３を実行して、可能であれば障害を解析し、必要であればペア状態を変更する。
【０１５２】
ステップＳ１２９において、ストレージ装置２００ａは、ライト完了応答をホスト１００ａに返し、ホストライト処理のためのプログラム２４１１は終了する。ステップ１３０において、ライトエラーメッセージをストレージ装置２００ｂから受信すると、ストレージ２００ａは、ＰＶＯＬのパラメータを使用して、所定構成要素障害に対してペア状態を変更するプログラム２４１４を実行する。
【０１５３】
ステップＳ１３１において、ストレージ装置２００ａは、ライト完了応答をホスト１００ａに返し、ホストライト処理のためのプログラム２４１１は終了する。ステップＳ１３２において、ストレージ装置２００ａは、ライトエラーメッセージをホスト１００ａに返し、ホストライト処理のためのプログラム２４１１は終了する。
【０１５４】
＜ホストリード処理のためのプログラム（ＰＶＯＬに対する）＞
図２３は、ストレージ装置がリードコマンドをホスト１００ａから受信した場合の、ホストリード処理のためのプログラム２４１２の動作を示すフローチャートである。ホストリード処理のためのプログラム２４１２は、ストレージ装置２００ａ、２００ｂの双方に実行される。説明の容易化のために、ホストリードコマンドがストレージ装置２００ａにおいて受信される例を説明する。
【０１５５】
ステップ２００において、ストレージ装置２００ａは、ホスト１００ａからリードコマンドを受信して、そのコマンドからボリュームＩＤを抽出する。
【０１５６】
ステップＳ２０１において、ストレージ装置２００ａは、ボリュームＩＤを使用して、ペア管理のためのテーブル２４２１を参照することで、ボリュームがＰＶＯＬであるかＳＶＯＬであるか判定し、さらに、ボリュームペアの状態を特定する。ストレージ装置２００ａは、各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３を参照して、特定された状態における所与のボリュームに対するホストリードパターンを確認する。ストレージ装置２００ａは、「ホストリード」が「ローカル」の場合にステップＳ２０２を実行し、「ホストリード」が「リモード」の場合にステップＳ２０４を実行し、「ホストリード」が「ＮＯ」の場合にステップＳ２０２を実行する。
【０１５７】
ステップＳ２０２において、ストレージ装置２００ａは、データを自装置のボリュームから読み出す。
【０１５８】
ステップＳ２０３において、ストレージ装置２００ａは、ホスト１００ａに対してリードデータを返し、ホストリード処理のためのプログラム２４１２は終了する。
【０１５９】
ステップＳ２０４において、ストレージ装置２００ａは、ペア管理のためのテーブル２４２１を参照し、ＨＡペアの他方のボリュームが存在するストレージ装置ＩＤを取得し、リードコマンドを当該ストレージ装置（この例においてストレージ装置２００ｂ）の他方のボリュームに対して送信する。
【０１６０】
ステップＳ２０５において、ストレージ装置２００ａは、ステップＳ２０４において送信されたリードコマンドに対するストレージ装置２００ｂからの応答を待つ。ストレージ装置２００ａは、リードデータが成功裏に受信できた場合にステップＳ２０８を実行する。ストレージ装置２００ａは、応答を特定のタイムアウト期間内に受信できない場合に、ステップＳ２０６を実行する。ストレージ装置２００ａは、リードエラーメッセージを受信した場合にステップＳ２０９を実行する。
【０１６１】
ステップＳ２０６において、ストレージ装置２００ｂから応答が得られない場合、ストレージ装置２００ａは、リモートボリュームアクセス障害を処理するプログラム２４１３を実行して、可能であれば障害を解析し、必要であればペア状態を変更する。
【０１６２】
ステップＳ２０７において、ストレージ装置２００ａは、ホスト１００ａにリードエラーメッセージを返し、ホストリード処理のためのプログラム２４１２は終了する。
【０１６３】
ステップＳ２０８において、ストレージ装置２００ａは、リードデータをホスト１００ａに返し、ホストリード処理のためのプログラム２４１２は終了する。
【０１６４】
ステップＳ２０９において、ストレージ装置２００ａは、リモートボリュームのパラメータを使用して、所定構成要素障害に対してペア状態を変更するプログラム２４１４を実行する。
【０１６５】
ステップＳ２１０において、ストレージ装置２００ａは、リードエラーメッセージをホスト１００ａに返し、ホストリード処理のためのプログラム２４１２は終了する。
【０１６６】
ステップＳ２１１において、ストレージ装置２００ａは、リードエラーメッセージをホスト１００ａに返し、ホストリード処理のためのプログラム２４１２は終了する。
【０１６７】
＜リモートボリュームアクセス障害を処理するプログラム＞
図２４は、リモートボリュームアクセス障害を処理するプログラム２４１３の動作を示すフローチャートである。リモートボリュームアクセス障害を処理するプログラム２４１３は、ストレージ装置２００ａ、２００ｂの双方に実行される。以下に説明する例において、リモートボリュームアクセス障害を処理するプログラム２４１３は、ストレージ装置２００ａに実行されるものとする。
【０１６８】
ステップＳ３００において、ストレージ装置２００ａは、共通構成要素の現在状態のためのテーブル２４２２を参照して、モードが「利用可能」であるか否かチェックする。ストレージ装置２００ａは、モードが「利用可能」である場合にステップＳ３０３を実行する。ストレージ装置２００ａは、モードが「利用可能」ではない場合にステップＳ３０１を実行する。
【０１６９】
ステップＳ３０１において、ストレージ装置２００ａは、特定の期間待ち、可能であれば、ペアＤＫＣ２００ｂも当該ストレージ装置との通信の喪失を検出できるようにする。
【０１７０】
ステップＳ３０２において、クオラムストレージ装置６００が利用可能でないため、障害がＤＫＣ間パス接続又は対向ＤＫＣ障害に起因することを確認するために役に立たない場合、ストレージ装置２００ａは、障害を「パス障害」と認識し、「パス」を引数として、所定構成要素障害に対してペア状態を変更するプログラム２４１４を呼び出す。
【０１７１】
ステップＳ３０３において、ストレージ装置２００ａは、例えば、ＳＣＳＩ照会コマンドによって、クオラムストレージ装置６００が現在オンラインであるか（良好に動作しているか）チェックする。ストレージ装置２００ａは、クオラムストレージ装置６００がオンラインの場合にステップＳ３０６を実行する。ストレージ装置２００ａは、クオラムストレージ装置６００がオンラインではない又はクオラムストレージ装置６００との通信が喪失している場合に、ステップＳ３０４を実行する。
【０１７２】
ステップＳ３０４において、クオラムストレージ装置６００との通信が喪失している場合、ストレージ装置２００ａは、ペアとなるストレージ装置２００ｂとの通信を喪失すると、通信が、ＤＫＣ間パス障害に起因するのか又は他方のストレージ装置２００ｂにおける障害に起因するのか、知ることができない。
【０１７３】
通信喪失が起きた時にクオラムモードは「利用可能」であるので、ペアのストレージ装置２００ｂは（良好に動作している場合には）、クオラムストレージ装置６００との通信を喪失していない可能性があり、ボリュームはクオラムストレージ装置６００上で固定ロックを取得することによって存続している可能性がある。
【０１７４】
従って、スプリットブレイン問題を回避するため、ストレージ装置２００ａは、共通構成要素の現在状態のためのテーブル２４２２において、「自装置クオラム」及び「ＤＫＣ間パス」において「障害」を設定し、そして、ステップＳ３０５において、ストレージ装置２００ａは、ペア管理のためのテーブル２４２１において、全ての影響を受けるボリュームペアのペア状態を「ＢＬＯＣＫ」状態に変更する。
【０１７５】
ステップＳ３０６において、ストレージ装置２００ａは、クオラムを使用して障害タイプを特定するプログラム２４１５を呼び出してクオラムストレージ装置６００と通信することによって障害のタイプを確認し、それに従って、ペア管理のためのテーブル２４２１において、ペア状態を変更する。
【０１７６】
＜構成要素障害におけるペア状態を変更するプログラム＞
図２５は、所定構成要素障害に対してペア状態を変更するプログラム２４１４の動作を示すフローチャートである。所定構成要素障害に対してペア状態を変更するプログラム２４１４は、情報システムの構成要素において障害が発生すると、ペア状態を変更する。障害は、他のプログラムによって検出される。所定構成要素障害に対してペア状態を変更するプログラム２４１４は、他のプログラムから障害タイプをパラメータとして得て、ペア状態を変更する。
【０１７７】
ステップＳ４０１において、所定構成要素障害に対してペア状態を変更するプログラム２４１４は、呼び出し元プログラムから、障害が発生した構成要素の情報を受信する。障害が発生した構成要素は「ＶＯＬ」、「ＤＫＣ」、又は「ＤＫＣ間パス」のいずれかであり得る。
【０１７８】
ステップＳ４０２において、所定構成要素障害に対してペア状態を変更するプログラム２４１４は、受信した情報を解析して、障害構成要素が「ＶＯＬ」であるか又は他の構成要素であるかチェックする。所定構成要素障害に対してペア状態を変更するプログラム２４１４は、障害構成要素が「ＶＯＬ」である場合にステップＳ４０５を実行する。所定構成要素障害に対してペア状態を変更するプログラム２４１４は、障害構成要素が「ＶＯＬ」以外である場合にステップＳ４０３を実行する。
【０１７９】
ステップＳ４０３において、所定構成要素障害に対してペア状態を変更するプログラム２４１４は、障害構成要素のＩＤを使用して、共通構成要素の現在状態のためのテーブル２４２２において障害構成要素の状態を確認し、「障害」に変更する。
【０１８０】
ステップＳ４０４において、所定構成要素障害に対してペア状態を変更するプログラム２４１４は、ペア管理のためのテーブル２４２１から各ペアの現在の状態を取得し、一構成要素障害に対するペア状態遷移のためのテーブル２４２４を参照して、ステップＳ４０１において受信した構成要素障害における、現在の状態に対する新しい状態を、確認する。
【０１８１】
ステップＳ４０５において、所定構成要素障害に対してペア状態を変更するプログラム２４１４は、ペア管理のためのテーブル２４２１を、「障害」である「ＰＶＯＬ」又は「ＳＶＯＬ」状態によって、ＶＯＬＩＤに応じて更新する。
【０１８２】
ステップＳ４０６において、所定構成要素障害に対してペア状態を変更するプログラム２４１４は、一構成要素障害に対するペア状態遷移のためのテーブル２４２４を参照し、ペア管理のためのテーブル２４２１において、影響を受けるボリュームのペア状態を変更する。
【０１８３】
＜二点での障害（クオラム障害を含む）においてペア状態を変更する処理＞
図２６は、二点で同時に障害が発生した場合の所定構成要素障害に対してペア状態を変更するプログラム２４１４の動作を示すフローチャートである。障害の一つはクオラム障害であり、他方はＤＫＣ間パス障害又はＤＫＣ障害である。障害は他のプログラムによって検出される。
【０１８４】
所定構成要素障害に対してペア状態を変更するプログラム２４１４は、ペア状態を「ＢＬＯＣＫ」状態に変更する。なぜなら、他方のストレージ装置との通信を喪失したストレージ装置は、通信が、ＤＫＣ間パス障害に起因して喪失したか、他方ストレージ装置における障害に起因して喪失したか、わからないからである。
【０１８５】
通信喪失が起きたとき、共通構成要素の現在状態のためのテーブル２４２２におけるクオラムモードは「利用可能」モードであるので、他方ストレージ装置は良好に動作している。他方ストレージ装置はクオラムストレージ装置６００との通信を喪失していない可能性があり、クオラム情報を取得することによって存続している可能性がある。従って、スプリットブレイン問題を回避するため、所定構成要素障害に対してペア状態を変更するプログラム２４１４は、ボリュームのペア状態を「ＢＬＯＣＫ」状態に設定することによって、ボリュームをブロックする。
【０１８６】
ステップＳ５０１において、所定構成要素障害に対してペア状態を変更するプログラム２４１４は、共通構成要素の現在状態のためのテーブル２４２２において、「自装置クオラム」及び「ＤＫＣ間パス」を、「障害」に設定する。
【０１８７】
ステップＳ５０２において、所定構成要素障害に対してペア状態を変更するプログラム２４１４は、ペア管理のためのテーブル２４２１において、影響を受ける全てのボリュームペアのペア状態を「ＢＬＯＣＫ」状態に変更する。
【０１８８】
＜クオラムを使用して障害タイプを特定するプログラム（優先ＤＫＣのため）＞
図２６は、クオラムを使用して障害タイプを特定するプログラム２４１５の動作を示すフローチャートであり、二つのストレージ装置２００ａ、２００ｂの間での通信装置の場合に、障害がＤＫＣ間通信パスにあるのか又はストレージ装置にあるのか判定し、ストレージシステムにおけるＨＡペアの状態を障害に応じて変更する。
【０１８９】
ステップＳ６０１において、クオラムを使用して障害タイプを特定するプログラム２４１５は、プログラム２４１５を実行しているストレージ装置が、優先ＤＫＣであるか、又は、非優先ＤＫＣであるかを、「優先ＤＫＣＩＤ」欄をクオラムロック管理のためのテーブル６５２１において参照することによって、確認する。クオラムを使用して障害タイプを特定するプログラム２４１５は、ストレージ装置が優先ＤＫＣである場合にステップＳ６０２を実行し、ストレージ装置が非優先ＤＫＣである場合にステップＳ６２１を実行する。
【０１９０】
ステップＳ６０２において、クオラムを使用して障害タイプを特定するプログラム２４１５は、非優先ＤＫＣが既に何らかのロックをクオラムロック管理のためのテーブル６５２１で設定しているか確認する。
【０１９１】
クオラムを使用して障害タイプを特定するプログラム２４１５は、非優先ＤＫＣが、クオラムロック管理のためのテーブル６５２１において、固定ロックを設定済みである場合に、ステップＳ６０３を実行する。クオラムを使用して障害タイプを特定するプログラム２４１５は、非優先ＤＫＣが、クオラムロック管理のためのテーブル６５２１において、一時ロックを設定済みである場合に、ステップＳ６０４を実行する。クオラムを使用して障害タイプを特定するプログラム２４１５は、非優先ＤＫＣが、クオラムロック管理のためのテーブル６５２１において、いずれのロックも設定してない場合に、ステップＳ６０７を実行する。
【０１９２】
ステップＳ６０３において、非優先ＤＫＣが固定ロックを設定していることは、なんらかの不明な理由（又は何らかの障害）によって、非優先ＤＫＣが、優先ＤＫＣが機能不全であり、非優先ＤＫＣは存続すべきであると見なしていることを、意味する。そのため、優先ＤＫＣ（プログラム２４１５）は、この状況が維持され、スプリットブレイン問題に帰結し得る混乱が起きないように動作する。クオラムを使用して障害タイプを特定するプログラム２４１５は、所定構成要素障害に対してペア状態を変更するプログラム２４１４を呼び出し、「優先ＤＫＣ」の情報をパラメータとして与える。
【０１９３】
ステップＳ６０４において、非優先ＤＫＣが一時ロックをクオラムにおいて設定することは、非優先ＤＫＣが通信喪失を検出し、優先ＤＫＣの状態を知ることを望んでいることを意味する。優先ＤＫＣ（プログラム２４１５）は、一時ロックをクオラムロック管理のためのテーブル６５２１において設定し、非優先ＤＫＣに、優先ＤＫＣが機能していることを知らせる。
【０１９４】
ステップＳ６０５において、クオラムを使用して障害タイプを特定するプログラム２４１５は、クオラムヘルスチェックタイムアウト期間を待って、非優先ＤＫＣが優先ＤＫＣの一時ロックを読み出せるようにする。
【０１９５】
ステップＳ６０６において、クオラムを使用して障害タイプを特定するプログラム２４１５は、固定ロックをクオラムロック管理のためのテーブル６５２１において設定し、優先ＤＫＣが存続することを示す。
【０１９６】
ステップＳ６０７において、非優先ＤＫＣはまだ一時ロックをクオラムロック管理のためのテーブル６５２１において設定していないので、クオラムを使用して障害タイプを特定するプログラム２４１５は、非優先ＤＫＣが良好に動作しており、通信喪失になっている障害がＤＫＣ間パスの障害によるものであると決定する。そのため、クオラムを使用して障害タイプを特定するプログラム２４１５は、所定構成要素障害に対してペア状態を変更するプログラム２４１４を呼び出し、「パス」の情報をパラメータとして与える。
【０１９７】
ステップＳ６０８において、クオラムを使用して障害タイプを特定するプログラム２４１５は、一時ロックをクオラムロック管理のためのテーブル６５２１において設定し、非優先ＤＫＣに、優先ＤＫＣが機能していることを知らせる。
【０１９８】
ステップＳ６０９において、クオラムを使用して障害タイプを特定するプログラム２４１５は、クオラムヘルスチェックタイムアウト期間待って、非優先ＤＫＣが優先ＤＫＣの一時ロックを読み出せるようにする。
【０１９９】
ステップＳ６１０において、クオラムを使用して障害タイプを特定するプログラム２４１５は、クオラムストレージ装置６００と通信し、非優先ＤＫＣが一時ロックをクオラムロック管理のためのテーブル６５２１において設定しているか確認する。クオラムを使用して障害タイプを特定するプログラム２４１５は、非優先ＤＫＣが一時ロックをクオラムロック管理のためのテーブル６５２１において設定している場合に、ステップＳ６０６を実行し、非優先ＤＫＣがロックをクオラムロック管理のためのテーブル６５２１において設定してない場合に、ステップＳ６１１を実行する。
【０２００】
ステップＳ６１１において、クオラムを使用して障害タイプを特定するプログラム２４１５は、固定ロックを、クオラムロック管理のためのテーブル６５２１に設定し、優先ＤＫＣが存続することを示す。
【０２０１】
ステップＳ６１２において、非優先ＤＫＣは一時ロックをクオラムにおいて設定していないので、クオラムを使用して障害タイプを特定するプログラム２４１５は、非優先ＤＫＣが機能しておらず、その結果非優先ＤＫＣとの通信が喪失していると決定する。そのため、クオラムを使用して障害タイプを特定するプログラム２４１５は、所定構成要素障害に対してペア状態を変更するプログラム２４１４を呼び出し、「非優先ＤＫＣ」の情報をパラメータとして与える。
【０２０２】
＜クオラムを使用して障害タイプを特定するプログラム（非優先ＤＫＣのため）＞
図２７を参照して、非優先ＤＫＣにより実行されるクオラムを使用して障害タイプを特定するプログラム２４１５を説明する。ステップＳ６２１において、クオラムを使用して障害タイプを特定するプログラム２４１５は、クオラムストレージ装置６００と通信し、優先ＤＫＣが固定ロックを、クオラムロック管理のためのテーブル６５２１に設定しているかチェックする。クオラムを使用して障害タイプを特定するプログラム２４１５は、優先ＤＫＣが固定ロックを設定していない場合にステップＳ６２２を実行し、優先ＤＫＣが固定ロックを設定している場合にステップＳ６２９を実行する。
【０２０３】
ステップＳ６２２において、クオラムを使用して障害タイプを特定するプログラム２４１５は、一時ロックをクオラムロック管理のためのテーブル６５２１に設定し、優先ＤＫＣに、非優先ＤＫＣが機能していることを知らせる。
【０２０４】
ステップＳ６２３において、クオラムを使用して障害タイプを特定するプログラム２４１５は、クオラムヘルスチェックタイムアウト期間待ち、優先ＤＫＣが非優先ＤＫＣの一時ロックを読み出せるようにする。
【０２０５】
ステップＳ６２４において、クオラムを使用して障害タイプを特定するプログラム２４１５は、クオラムストレージ装置６００と通信し、優先ＤＫＣが、何らかのロックを、クオラムロック管理のためのテーブル６５２１に設定しているかチェックする。クオラムを使用して障害タイプを特定するプログラム２４１５は、優先ＤＫＣが何らロックを設定していない場合にステップＳ６２５を実行し、優先ＤＫＣがロックを設定している場合にステップＳ６２７を実行する。
【０２０６】
ステップＳ６２５において、クオラムを使用して障害タイプを特定するプログラム２４１５は、固定ロックを、クオラムロック管理のためのテーブル６５２１に設定し、非優先ＤＫＣが存続していることを示す。
【０２０７】
ステップＳ６２６において、優先ＤＫＣがロックをクオラムロック管理のためのテーブル６５２１に設定していないので、クオラムを使用して障害タイプを特定するプログラム２４１５は、優先ＤＫＣが機能しておらず、その結果優先ＤＫＣとの通信喪失が起きていると決定する。そのため、クオラムを使用して障害タイプを特定するプログラム２４１５は、所定構成要素障害に対してペア状態を変更するプログラム２４１４を呼び出し、「優先ＤＫＣ」の情報をパラメータとして与える。
【０２０８】
ステップＳ６２７において、優先ＤＫＣがロックを設定していることを確認すると、クオラムを使用して障害タイプを特定するプログラム２４１５は、優先ＤＫＣが機能しており、通信装置はＤＫＣ間パス障害にあったと決定する。クオラムを使用して障害タイプを特定するプログラム２４１５は、ロックをクオラムロック管理のためのテーブル６５２１から削除し、優先ＤＫＣを存続させる。
【０２０９】
ステップＳ６２８において、クオラムを使用して障害タイプを特定するプログラム２４１５は、所定構成要素障害に対してペア状態を変更するプログラム２４１４を呼び出し、「パス」の情報をパラメータとして与える。
【０２１０】
ステップＳ６２９において、優先ＤＫＣは固定ロックを設定しているので、クオラムを使用して障害タイプを特定するプログラム２４１５は、優先ＤＫＣが機能しており、通信喪失はＤＫＣ間パスに起因したものと決定する。しかし、非優先ＤＫＣはロックを設定していないので、優先ＤＫＣは、非優先ＤＫＣが機能していないかのように、動作している可能性がある。そのため、混乱を回避するため、クオラムを使用して障害タイプを特定するプログラム２４１５は、そのペア状態を維持することを決定し、所定構成要素障害に対してペア状態を変更するプログラム２４１４を呼び出し、「非優先ＤＫＣ」の情報をパラメータとして与える。
【０２１１】
＜クオラムヘルスチェックのためのプログラム＞
図２８は、クオラムヘルスチェックのためのプログラム２４１６の動作を示すフローチャートである。クオラムヘルスチェックのためのプログラム２４１６は、各「ヘルスチェックタイムアウト」期間の後に、各ストレージ装置２００ａ、２００ｂに実行される。
【０２１２】
ステップ７００において、クオラムヘルスチェックのためのプログラム２４１６は、クオラムストレージ装置６００と通信し、クオラムストレージ装置６００がオンラインであるか否かチェックする。クオラムヘルスチェックのためのプログラム２４１６は、クオラムストレージ装置６００がオンラインではない場合にステップＳ７０１を実行し、クオラムストレージ装置６００がオンラインである場合にステップＳ７０２を実行する。
【０２１３】
ステップＳ７０１において、クオラムヘルスチェックのためのプログラム２４１６は、共通構成要素の現在状態のためのテーブル２４２２を参照し、「自装置クオラム」欄における状態をチェックする。現在の自装置クオラム状態（現在の「自装置クオラム」欄における状態）が「障害」である場合、クオラムヘルスチェックのためのプログラム２４１６は、終了する。なぜなら、クオラム障害が既に検出されており、適切な処理が既になされ、クオラム障害はまだ修復されていないからである。現在の自装置クオラム状態が「良好」である場合、クオラムヘルスチェックのためのプログラム２４１６は、ステップＳ７０２を実行する。なぜなら、クオラムストレージ装置６００との通信における障害があり、適切な対応がなされなければならないからである。
【０２１４】
ステップＳ７０２において、クオラムヘルスチェックのためのプログラム２４１６は、共通構成要素の現在状態のためのテーブル２４２２において、「自装置クオラム」カラムの状態を「障害」に変更する。
【０２１５】
ステップＳ７０３において、クオラムヘルスチェックのためのプログラム２４１６は、ペアのＤＫＣに対して、起こったクオラム障害について知らせる。これにより、ペアのＤＫＣは、そのクオラムモードを（必要であれば）変更することができ、双方のＤＫＣが同一のクオラムモードを有する。ペアのＤＫＣの処理は、図３０を参照して後述する。
【０２１６】
ステップＳ７０４において、クオラムヘルスチェックのためのプログラム２４１６は、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７を呼び出す。なぜなら、クオラム通信における障害の検出により、クオラムモードとボリュームペアの状態を変更する必要がある可能性があるからである。
【０２１７】
ステップＳ７０５において、クオラムヘルスチェックのためのプログラム２４１６は、共通構成要素の現在状態のためのテーブル２４２２を参照し、「自装置クオラム」欄の現在状態をチェックする。現在の自装置クオラム状態が「良好」である場合、クオラムヘルスチェックのためのプログラム２４１６は、ステップＳ７０６からＳ７０８を省略する。なぜなら、クオラムが良好に機能しており、クオラム（クオラムストレージ装置６００）の状態に変化がないからである。現在の自装置クオラム状態が「障害」である場合、クオラムヘルスチェックのためのプログラム２４１６は、ステップＳ７０６を実行する。なぜなら、クオラムストレージ装置６００との通信において以前存在した障害が修復され、適切な対応がなされる必要があるからである。
【０２１８】
ステップＳ７０６において、クオラムヘルスチェックのためのプログラム２４１６は、共通構成要素の現在状態のためのテーブル２４２２において、「自装置クオラム」カラムの状態を「良好」に変更する。
【０２１９】
ステップＳ７０７において、クオラムヘルスチェックのためのプログラム２４１６は、そのペアのＤＫＣに対して、クオラムが修復されたことを知らせる。その結果、ペアのＤＫＣは、そのクオラムモードを（必要であれば）変更することができ、双方のＤＫＣが同一のクオラムモードを有する。ペアのＤＫＣの処理は、図３０を参照して後述する。
【０２２０】
ステップＳ７０８において、クオラムヘルスチェックのためのプログラム２４１６は、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７を呼び出す。なぜなら、クオラムの修復の検出により、クオラムモードとボリュームペアの状態を変更する必要がある可能性があるからである。
【０２２１】
ステップＳ７０９において、クオラムヘルスチェックのためのプログラム２４１６は、ペアのＤＫＣが検出したかもしれない、発生した可能性があるＤＫＣ間パス障害を、チェックするために、クオラムがペアのＤＫＣによってロックされているかチェックする。クオラムがペアのＤＫＣによってロックされている場合、クオラムヘルスチェックのためのプログラム２４１６は、ステップＳ７１０を実行する。ペアのＤＫＣがクオラムをロックしていない場合、クオラムヘルスチェックのためのプログラム２４１６は終了する。
【０２２２】
ステップＳ７１０において、ペアのＤＫＣによってロックされたクオラムを検出することは、ペアのＤＫＣが通信喪失を検出し、本ＤＫＣが機能しているか否かを知ることを望んでいることを意味する。そのため、クオラムヘルスチェックのためのプログラム２４１６は、クオラムを使用して障害タイプを特定するプログラム２４１５を呼び出して、障害のタイプを確認し、ペア状態をそれに応じて変更する。
【０２２３】
＜クオラム状態変化に対してクオラムモードとペア状態を変更するプログラム＞
図２９は、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７の動作を示すフローチャートである。
【０２２４】
ステップＳ８００において、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は、共通構成要素の現在状態のためのテーブル２４２２を参照し、現在のクオラムモードを確認する。クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は、「クオラムモード」欄における現在のクオラムモードが「利用不可能」である場合にステップＳ８０１を実行し、「クオラムモード」欄における現在のクオラムモードが「利用可能」である場合にステップＳ８０４を実行する。
【０２２５】
ステップＳ８０１において、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は、共通構成要素の現在状態のためのテーブル２４２２を参照し、自装置クオラムの状態とペアのＤＫＣのクオラムの状態とが「良好」であるか否かチェックする。双方の情報が「良好」である場合、「利用不可能」であったクオラムモードが、もう有効ではないことを意味する。なぜなら、双方のＤＫＣがクオラムストレージ装置と通信できるからである。そのため、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は、ステップＳ８０２を実行する。いずれか一方（又は双方）のクオラム状態が「障害」である場合、クオラムモードは「利用可能」に変更することはできない。クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は終了する。
【０２２６】
ステップＳ８０２において、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は、共通構成要素の現在状態のためのテーブル２４２２において、「クオラムモード」欄の現在のモードを「利用可能」に変更する。
【０２２７】
ステップＳ８０３において、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は、一構成要素障害に対するペア状態遷移のためのテーブル２４２４を参照し、ペア管理のためのテーブル２４２１において、クオラム修復により影響を受ける全てのボリュームペアのペア状態を変更する。
【０２２８】
ステップＳ８０４において、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は、共通構成要素の現在状態のためのテーブル２４２２を参照し、その自装置クオラムの状態とペアのＤＫＣのクオラムの状態の双方が、「良好」であるか否かチェックする。いずれか（又は双方）のクオラム状態が「良好」ではない場合、「利用可能」であったクオラムモードが、もう有効ではないことを意味する。なぜなら、いずれか（又は双方）のＤＫＣがクオラムストレージ装置と、障害のために、通信することができないからである。従って、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は、ステップＳ８０５を実行する。双方のクオラム状態が「良好」である場合、クオラムモードは「利用可能」であり続けることができる。クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は、終了する。
【０２２９】
ステップＳ８０５において、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は、共通構成要素の現在状態のためのテーブル２４２２において、「クオラムモード」欄の現在クオラムモードを「利用可能」に変更する。
【０２３０】
ステップＳ８０６において、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７は、一構成要素障害に対するペア状態遷移のためのテーブル２４２４を参照し、ペア管理のためのテーブル２４２１において、クオラム修復により影響を受ける全てのボリュームペアのペア状態を変更する。
【０２３１】
＜クオラム状態の変更情報の受信に対してクオラムモードを変更するプログラム＞
図３０は、クオラム状態の変更の情報の受信に対してクオラムモードを変更するプログラム２４１８が、ペアのＤＣＫからの情報に基づいてクオラムモードを変更する動作を示す、フローチャートである。情報は、受信側ＤＫＣに、ペアのＤＣＫのクオラムの情報について知らせ、受信側ＤＫＣはその情報を、必要であれば、クオラムモードの変更と共に更新する。一例として、ストレージ装置２００ｂがストレージ装置２００ａから情報を受信する場合を説明する。
【０２３２】
ステップＳ９００において、ストレージ装置２００ｂは、ストレージ装置２００ａによって観測されたクオラム状態についての情報を、受信する。
【０２３３】
ステップＳ９０１において、ストレージ装置２００ｂは、共通構成要素の現在状態のためのテーブルにおいて、ペアのＤＫＣのクオラムの状態を、受信した情報に従って変更する。
【０２３４】
ステップＳ９０２において、ストレージ装置２００ｂは、クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７を呼び出し、クオラムモードの変更に対して、クオラムモード及びボリュームペアの状態を変更する。
【０２３５】
＜他の実施形態＞
＜情報システムの構成＞
図３１は、本実施形態で使用される情報システムの論理構成図を示す。構成要素の物理構成は、図３を使用して上述した、第１実施形態と同様でよい。
【０２３６】
ＣＭ−ＰＫ２４０の構成は、第１実施形態と同様でよい。本実施形態は、図４が示す第１の実施形態で使用されるプログラム２４１１から２４１８と共に、ハートビート信号を受信し障害を処理するプログラム２４１９を使用する。プログラム２４１１から２４１８の説明は、図２２Ａから図３０を使用した説明と同様である。ハートビート信号を受信し障害を処理するプログラム２４１９のフローチャート例は、図３３に示されており、後述する。
【０２３７】
本実施形態は、図４が示し、図１７から２１を使用して説明されたテーブル２４２１から２４２４を使用するが、下で説明するように、各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３がやや異なる。
【０２３８】
＜本実施形態の概要＞
本実施形態では、ＲＣ−ＰＡＩＲ状態において、ストレージ装置２００ｂにおけるＳＶＯＬ２５２ｂへのホストリードコマンドは、ローカルＳＶＯＬ２５２ｂを使用して処理される。従って、本実施形態では、各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３において、ＳＶＯＬに対する「ホストリード」のためのＲＣ−ＰＡＩＲ状態のセルの値は「ローカル」であり、「リモート」ではない。
【０２３９】
本実施形態において、ハートビート信号は、一定間隔で、双方のストレージ装置２００ａ、２００ｂに生成され送信される。二つのストレージ装置２００ａ、２００ｂ間でデータのリード及びライトのために使用される通信ネットワーク５０１も、ハートビート信号のために使用される。二つの構成要素装置間のハートビート信号の実装は、周知である。
【０２４０】
例えば、ハートビート信号は、規定のデータセット又は信号パターンであって、適時、双方のストレージ装置２００ａ、２００ｂに生成され、所定期間経過後に互いに対して送信される。例えば、ストレージ装置２００ｂに生成されたハートビート信号は、ストレージ装置２００ａに受信され、ストレージ装置２００ａは、通信ネットワーク５０１ａが、ストレージ装置２００ｂと共に良好に機能していると認識する。同様に、ストレージ装置２００ｂも、通信ネットワーク５０１ｂとストレージ装置２００ａの状態を、ストレージ装置２００ａにより送信されるハートビート信号を受信することで、確認する。
【０２４１】
ハートビート信号は、通常の場合、クオラムヘルスチェックと共に使用する、又は、クオラムストレージ装置６００と、ストレージ装置２００ａ、２００ｂの少なくとも一つとの間の通信の喪失の後に使用する、ことができる。本実施形態において、ハートビート信号は、クオラムヘルスチェックと共に使用される。
【０２４２】
ハートビート信号と共に、ネットワーク５０１で障害が発生すると、ハートビート信号がいずれかのＤＫＣに受信されないことで、この障害が、特定の時間内にストレージ装置２００ａ、２００ｂの双方に検出される。双方のＤＫＣは、適切なステップを踏んで、ＨＡペアの二つのボリュームの内の一つのボリュームのみが存続し、他方がブロックされるようにする。これにより、スプリットブレイン問題が起きないようにされる。
【０２４３】
ハートビート信号は、図２に示すようなクオラムストレージ装置６００とストレージ装置２００ａとの間の通信喪失の場合に特に有用である。クオラムストレージ装置６００との通信喪失は、ストレージ装置２００ａ（クオラムヘルスチェックのためのプログラム２４１６）によって、その次のクオラムヘルスチェックにおいて検出される。障害の検出に対して、ストレージ装置２００ａ、２００ｂは、現在のクオラムモードを「利用不可能」に変更する（クオラム状態の変更に対してクオラムモードとペア状態を変更するプログラム２４１７及びクオラム状態の変更の情報の受信に対してクオラムモードを変更するプログラム２４１８）。ストレージ装置２００ａ、２００ｂは、クオラム障害に対して、ペアボリュームのペア状態を変更する（所定構成要素障害に対してペア状態を変更するプログラム２４１４）。
【０２４４】
「利用不可能」モードにおいて、ネットワーク５０１で障害が発生すると、ストレージ装置２００ａが、ボリューム２５２ａに対するホストライトコマンドの処理（プログラム２４１１）の間に、この障害をまず検出するが、ストレージ装置２００ａには、ペアのストレージ装置２００ｂがこのネットワーク障害に気づいているかわからない。しかし、二つのストレージ装置２００ａ、２００ｂの間で送信及び受信されているハートビート信号を使用して、ストレージ装置２００ａは、ネットワーク５０１における障害と共に、ストレージ装置２００ｂがハートビート信号を受信せず、ネットワーク５０１における障害に気づくようにすることができる。
【０２４５】
第１の実施形態と同様に、本実施形態において、ホストライトデータは、「利用不可能」モードにおいて二重化される。また、「利用不可能」モードにおいて、ハートビート信号を使用してスプリットブレイン問題が回避されるので、リードコマンドを、ストレージ装置２００ａ、２００ｂにとってローカルであるボリュームを使用して、処理することができる。本実施形態では、各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３（図２０に示す）において、ＳＶＯＬに対する「ホストリード」の「ＲＣ−ＰＡＩＲ」状態のセルは、第１の実施形態のように「リモート」ではなく、「ローカル」を示す。
【０２４６】
本実施形態は、第１の実施形態と同様のペア状態を有し、同様の方法で状態を遷移させる。
【０２４７】
＜ハートビート信号を受信し障害検出に対してペア状態を変化させるプログラム＞
図３２は、ハートビート信号を受信し障害を処理するプログラム２４１９の動作を示すフローチャート例である。ハートビート信号を受信し障害を処理するプログラム２４１９は、適時、ペアのＤＫＣからの新しいハートビート信号が受信されているか否かをチェックする。信号が受信されていない場合、ハートビート信号を受信し障害を処理するプログラム２４１９は、リモートボリュームアクセス障害を処理するプログラム２４１３を呼び出す。
【０２４８】
ステップＳ１０００において、ハートビート信号を受信し障害を処理するプログラム２４１９は、規定のハートビート信号を生成し、ペアのＤＫＣに送信する。
【０２４９】
ステップＳ１００１において、ハートビート信号を受信し障害を処理するプログラム２４１９は、規定の時間だけ待ってから、ステップＳ１００２に移る。この時間は、ペアのＤＫＣによって生成される二つのハートビート信号の間隔と同一又はそれより長く定義されている。
【０２５０】
ステップＳ１００２において、ハートビート信号を受信し障害を処理するプログラム２４１９は、当該プログラムがハートビート信号の受信をチェックしてから、当該ＤＫＣが、ペアのＤＫＣにより送信された少なくとも一つの新しいハートビート信号を受信したかチェックする。そうである場合、ハートビート信号を受信し障害を処理するプログラム２４１９は、通信ネットワーク５０１が、ペアのＤＫＣと共に良好に機能していると判定し、ステップＳ１０００に戻る。そうではない場合、ハートビート信号を受信し障害を処理するプログラム２４１９は、ステップＳ１００３を実行する。
【０２５１】
ステップＳ１００３において、ハートビート信号を受信し障害を処理するプログラム２４１９は、リモートボリュームアクセス障害を処理するプログラム２４１３を呼び出す。リモートボリュームアクセス障害を処理するプログラム２４１３は、クオラムモードに応じて、クオラムを使用して障害のタイプを特定する、又は、通信障害が置きていると判定し、それに応じてＨＡボリュームペアの状態を変更する。
【０２５２】
本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０２５３】
上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。
【０２５４】
制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１】
2017514233.tif 000003
【図２】
2017514233.tif 000004
【図３】
2017514233.tif 000005
【図４】
2017514233.tif 000006
【図５Ａ】
2017514233.tif 000007
【図５Ｂ】
2017514233.tif 000008
【図６】
2017514233.tif 000009
【図７】
2017514233.tif 000010
【図８】
2017514233.tif 000011
【図９】
2017514233.tif 000012
【図１０】
2017514233.tif 000013
【図１１】
2017514233.tif 000014
【図１２】
2017514233.tif 000015
【図１３】
2017514233.tif 000016
【図１４】
2017514233.tif 000017
【図１５】
2017514233.tif 000018
【図１６】
2017514233.tif 000019
【図１７】
2017514233.tif 000020
【図１８】
2017514233.tif 000021
【図１９】
2017514233.tif 000022
【図２０】
2017514233.tif 000023
【図２１】
2017514233.tif 000024
【図２２Ａ】
2017514233.tif 000025
【図２２Ｂ】
2017514233.tif 000026
【図２３】
2017514233.tif 000027
【図２４】
2017514233.tif 000028
【図２５】
2017514233.tif 000029
【図２６】
2017514233.tif 000030
【図２７】
2017514233.tif 000031
【図２８】
2017514233.tif 000032
【図２９】
2017514233.tif 000033
【図３０】
2017514233.tif 000034
【図３１】
2017514233.tif 000035
【図３２】
2017514233.tif 000036
【手続補正書】
【提出日】平成28年10月20日(2016.10.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１の論理ボリュームを提供する第１のストレージ装置と、
第２の論理ボリュームを提供する第２のストレージ装置と、
前記第１のストレージ装置及び前記第２のストレージ装置からアクセスされ、前記第１のストレージ装置及び前記第２のストレージ装置の状態の情報を含む、クオラムと、を含み、
前記第１のストレージ装置と前記第２のストレージ装置とは、前記第１の論理ボリュームと前記第２の論理ボリュームとを、ホストに対して単一ボリュームと認識させ、
前記第１のストレージ装置は、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第１の論理ボリュームからデータを読み出して前記ホストに送信し、
前記第２のストレージ装置は、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第２の論理ボリュームからデータを読み出して前記ホストに送信し、
前記第１のストレージ装置は、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとに対するデータを書き込み、
前記第２のストレージ装置は、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとに対するデータを書き込み、
前記第１のストレージ装置と前記第２のストレージ装置とは、前記クオラムとの通信障害を検出した後、クオラムの使用を停止し、状態をＰＡＩＲ状態からＲＣ−ＰＡＩＲ状態へと変更し、
前記ＲＣ−ＰＡＩＲ状態において、前記第１のストレージ装置は、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとにデータを書き込み、
前記ＰＡＩＲ状態において、前記第１のストレージ装置と前記第２のストレージ装置との間の通信障害を検出すると、前記第１のストレージ装置または前記第２のストレージ装置は、前記クオラムの前記情報に基づいて、Ｉ／Ｏ処理を継続し、
前記ＲＣ−ＰＡＩＲ状態において、前記第１のストレージ装置と前記第２のストレージ装置との間の通信障害を検出すると、可能であれば前記第１のストレージ装置はＩ／Ｏ処理を継続し、前記第２のストレージ装置はＩ／Ｏ処理を停止する、情報記憶システム。
【請求項２】
請求項１に記載の情報記憶システムであって、
前記第２のストレージ装置は、前記ホストからリードコマンドを受信した場合に、前記リードコマンドに対するリードデータを取得するために前記リードコマンドを前記第１のストレージ装置に転送することによって、前記ホストから送信されたリードコマンドに対して前記ホストに応答する前に、前記第１のストレージ装置との通信障害についてチェックする、情報記憶システム。
【請求項３】
請求項１に記載の情報記憶システムであって、
前記第２のストレージ装置は、前記第１のストレージ装置との間でハートビート信号を送受信することによって、前記第１のストレージ装置との通信障害についてチェックする、情報記憶システム。
【請求項４】
請求項１に記載の情報記憶システムであって、
前記ＲＣ−ＰＡＩＲ状態において、前記第２のストレージ装置は、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第１の論理ボリュームからデータを読出し、前記ホストにデータを送信する、情報記憶システム。
【請求項５】
請求項１に記載の情報記憶システムであって、
前記クオラムから取得された前記情報が、前記第１のストレージ装置が通常状態であることを示す場合、前記第２のストレージ装置は、前記第２の論理ボリュームを前記ホストからブロックし、
前記第１のストレージ装置は、前記ホストから送信されたリードコマンドに対して前記第１の論理ボリュームから読み出したデータを送信し、前記ホストから受信したライトコマンドに対して前記第１の論理ボリュームにデータを書き込む、情報記憶システム。
【請求項６】
請求項１に記載の情報記憶システムであって、
前記クオラムから取得された前記情報が、前記第１のストレージ装置の障害状態を示す場合、前記第２のストレージ装置は、前記ホストから送信されたリードコマンドに対して前記第２の論理ボリュームから読み出したデータを送信し、前記ホストから受信したライトコマンドに対して前記第２の論理ボリュームにデータを書き込む、情報記憶システム。
【請求項７】
情報記憶システムの制御方法であって、
前記情報記憶システムは、第１の論理ボリュームを提供する第１のストレージ装置と、第２の論理ボリュームを提供する第２のストレージ装置と、前記第１のストレージ装置及び前記第２のストレージ装置からアクセスされ、前記第１のストレージ装置及び前記第２のストレージ装置の状態の情報を含む、クオラムと、を含み、前記第１のストレージ装置と前記第２のストレージ装置とは、前記第１の論理ボリュームと前記第２の論理ボリュームとを、ホストに対して単一ボリュームと認識させ、
前記制御方法は、
前記第１のストレージ装置が、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第１の論理ボリュームからデータを読み出して前記ホストに送信し、
前記第２のストレージ装置が、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第２の論理ボリュームからデータを読み出して前記ホストに送信し、
前記第１のストレージ装置が、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとにデータを書き込み、
前記第２のストレージ装置が、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとデータを書き込み、
前記第１のストレージ装置と前記第２のストレージ装置とが、前記クオラムとの通信障害を検出した後、クオラムの使用を停止し、状態をＰＡＩＲ状態からＲＣ−ＰＡＩＲ状態へと変更し、
前記ＲＣ−ＰＡＩＲ状態において、前記第１のストレージ装置は、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとにデータを書き込み、
前記ＰＡＩＲ状態において、前記第１のストレージ装置と前記第２のストレージ装置との間の通信障害を検出すると、前記第１のストレージ装置または前記第２のストレージ装置は、前記クオラムの前記情報に基づいて、Ｉ／Ｏ処理を継続し、
前記ＲＣ−ＰＡＩＲ状態において、前記第１のストレージ装置と前記第２のストレージ装置との間の通信障害を検出すると、可能であれば前記第１のストレージ装置はＩ／Ｏ処理を継続し、前記第２のストレージ装置はＩ／Ｏ処理を停止する、制御方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
本発明の一態様は、情報記憶システムである。情報記憶システムは、第１の論理ボリュームを提供する第１のストレージ装置と、第２の論理ボリュームを提供する第２のストレージ装置と、前記第１のストレージ装置及び前記第２のストレージ装置からアクセスされ、前記第１のストレージ装置及び前記第２のストレージ装置の状態の情報を含む、クオラムと、を含む。前記第１のストレージ装置と前記第２のストレージ装置とは、前記第１の論理ボリュームと前記第２の論理ボリュームとを、ホストに対して単一ボリュームと認識させる。前記第１のストレージ装置は、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第１の論理ボリュームからデータを読み出して前記ホストに送信する。前記第２のストレージ装置は、前記ホストから前記単一ボリュームに対するリードコマンドを受信すると、前記第２の論理ボリュームからデータを読み出して前記ホストに送信する。前記第１のストレージ装置は、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとに対するデータを書き込む。前記第２のストレージ装置は、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとに対するデータを書き込む。前記第１のストレージ装置と前記第２のストレージ装置とは、前記クオラムとの通信障害を検出した後、クオラムの使用を停止し、状態をＰＡＩＲ状態からＲＣ−ＰＡＩＲ状態へと変更する。前記ＲＣ−ＰＡＩＲ状態において、前記第１のストレージ装置は、前記ホストから前記単一ボリュームに対するライトコマンドを受信すると、前記第１の論理ボリュームと前記第２の論理ボリュームとにデータを書き込む。前記ＰＡＩＲ状態において、前記第１のストレージ装置と前記第２のストレージ装置との間の通信障害を検出すると、前記第１のストレージ装置または前記第２のストレージ装置は、前記クオラムの前記情報に基づいて、Ｉ／Ｏ処理を継続する。前記ＲＣ−ＰＡＩＲ状態において、前記第１のストレージ装置と前記第２のストレージ装置との間の通信障害を検出すると、可能であれば前記第１のストレージ装置はＩ／Ｏ処理を継続し、前記第２のストレージ装置はＩ／Ｏ処理を停止する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００４２
【補正方法】変更
【補正の内容】
【００４２】
共有メモリ２４２は、ペア管理のためのテーブル２４２１、共有構成要素の現在状態のためのテーブル２４２２、各ペア状態におけるＩ／Ｏ処理パターンのためのテーブル２４２３、一構成要素障害に対するペア状態遷移のためのテーブル２４２４を保持する。キャッシュメモリ２４３は、データを一時的に格納するために使用される。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００４３
【補正方法】変更
【補正の内容】
【００４３】
プログラムメモリ２４１におけるプログラム２４１１から２４１９の動作例は、図２２Ａから図３０、図３２を参照して後述する。共有メモリ２４２におけるテーブル２４２１〜２４２４の例は、図１８から図２１を参照して後述する。
【国際調査報告】
2017514233.tif 000037
2017514233.tif 000038