JPWO2015198449A1 - ストレージシステム - Google Patents

ストレージシステム Download PDF

Info

Publication number
JPWO2015198449A1
JPWO2015198449A1 JP2016528943A JP2016528943A JPWO2015198449A1 JP WO2015198449 A1 JPWO2015198449 A1 JP WO2015198449A1 JP 2016528943 A JP2016528943 A JP 2016528943A JP 2016528943 A JP2016528943 A JP 2016528943A JP WO2015198449 A1 JPWO2015198449 A1 JP WO2015198449A1
Authority
JP
Japan
Prior art keywords
storage device
dkc
volume
storage
health check
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016528943A
Other languages
English (en)
Other versions
JP6230707B2 (ja
Inventor
貴仁 佐藤
貴仁 佐藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Publication of JPWO2015198449A1 publication Critical patent/JPWO2015198449A1/ja
Application granted granted Critical
Publication of JP6230707B2 publication Critical patent/JP6230707B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0727Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a storage system, e.g. in a DASD or network based storage system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0787Storage of error reports, e.g. persistent data storage, storage using memory protection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2023Failover techniques
    • G06F11/2028Failover techniques eliminating a faulty processor or activating a spare
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2058Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring using more than 2 mirrored copies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2069Management of state, configuration or failover
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2082Data synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2097Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/0757Error or fault detection not based on redundancy by exceeding limits by exceeding a time limit, i.e. time-out, e.g. watchdogs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2071Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring using a plurality of controllers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本発明のストレージシステムは、それぞれが1以上のボリュームを有する第1ストレージ装置と第2ストレージ装置と、第1ストレージ装置と第2ストレージ装置がアクセス可能な第3ストレージ装置とから構成される。ストレージシステムは、ホストから第1または第2ストレージ装置内のボリュームに対して書き込まれたデータを、第2または第1ストレージ装置のボリュームに複製するよう動作する。また第1ストレージ装置と第2ストレージ装置は、定期的に第3ストレージ装置に対してヘルスチェック情報を書き込む。第1ストレージ装置がホストからライト要求を受信したが、ライトデータを第2ストレージ装置へ複製できなかった場合、第3ストレージ装置に書き込まれているヘルスチェック情報を読み出し、第2ストレージ装置のボリュームがI/O不可になっていることを確認した後、ホストからのライト要求に係る処理を再開する。

Description

本発明は、ストレージシステムの高可用化技術に関する。
現在、多くのストレージ装置では、たとえばRAID(Redundant Arrays of Independent (or Inexpensive) Disks)技術等の高信頼化技術を採用することで、HDD単体の信頼性を超えた信頼性を提供している。しかし、近年の情報化社会の進化によって上記RAID技術による提供可能な信頼性では不足する場面も現れてきている。
このような状況に対応する高可用化技術として、たとえば特許文献1に開示されているように、複数(たとえば2台)のストレージ装置(以下、装置A、装置Bと呼ぶ)を用いた情報システムを構築し、装置Aと装置Bとの間でデータを二重化する技術がある。特許文献1に開示の情報システムでは、装置Aと装置Bでボリュームを二重書きし、ホストは通常、装置Aのボリュームにアクセスする構成をとる。そしてホストが装置Aのボリュームへのアクセス(I/O処理)に失敗した場合、装置Bのボリュームにアクセスするよう、アクセス先を切り替えることで、業務継続を可能にしている。
このような二重化構成のシステムで求められる要件の1つに、ホストが誤ったデータにアクセスすることを防止できることが挙げられる。特許文献1では、装置Aと装置Bの間のリンクが切断された結果、装置Aと装置Bの間のボリューム二重化(コピー)が失敗した場合の例について開示されている。この場合、ホストが装置Aのボリュームを用いた運用をしばらく行った後、装置Aに障害が発生したために、ホストAが装置Bへのアクセスに切り替えることが考えられる。ただしその時点では装置Bのボリュームには、装置Aのボリュームよりも古いデータしか格納されていないため、ホストからのアクセスを受け付けないように制御することが望ましい。
特許文献1に開示の情報システムでは、装置Aと装置Bが共通にアクセスできる障害検出用ボリュームを設け、それを用いることでこの問題を解決している。装置Aがボリューム二重化の処理に失敗すると、装置Aは障害検出用ボリュームの内容を読み出し、装置Bによって障害情報フラグが書き込まれているかチェックする。障害情報フラグが書き込まれていない場合には、装置Aが障害検出フラグを書き込み、その後ホストからのアクセス要求に係る処理を再開する。
さらに装置Aに障害が発生した場合、ホストは装置Aから装置Bへとアクセス先を切り替える。そうすると装置Bは障害検出用ボリュームの内容を読み出し、装置Aによって障害情報フラグが書き込まれているかチェックする。この場合、障害情報フラグが書き込まれているので、装置BはホストにI/O失敗を返却する。これにより、ホストが古いデータを読み出すことを防止している。
米国特許第8595549号明細書
特許文献1に開示されているようなシステム構成は、いわゆるActive/Standby構成と呼ばれる。Active/Standby構成のシステムでは、一方の装置(たとえば装置B)は待機系の装置である。ホストは通常、装置Aのボリュームにアクセスする構成をとる。
一方、ボリュームを二重化するシステムの用途として、上で挙げたような障害時の業務継続の他に、負荷分散等の用途もあり得る。上で説明したものと同じように、装置Aと装置Bでボリュームが二重書きされる構成のシステムにおいて、ホストが装置Aと装置Bに交互にアクセス要求を発行するように運用できると、負荷が装置Aと装置Bに分散され、アクセス性能が向上する。このようなオペレーションが可能な構成は、Active/Active構成と呼ばれる。
この場合、ホストが装置Bのボリュームにアクセスしても、装置A内のボリュームと装置B内のボリュームが二重化された状態が、継続されることが求められる。特許文献1に開示されているようなActive/Standby構成のシステムでは、ホストが装置Aにアクセスできなくなるまで、装置Bはホストからアクセスされないことを前提として構成されている。そのため、ホストが装置B内のボリュームにアクセスすると、たとえシステムのどこにも異常がない場合であっても、装置A内のボリュームと装置B内のボリュームが二重化された状態が維持されない(データ二重化処理が停止する)ので、特許文献1に開示の技術では、負荷分散用途には利用できない。
本発明の一実施形態に係るストレージシステムは、それぞれが1以上のボリュームを有する第1ストレージ装置と第2ストレージ装置と、第1ストレージ装置と第2ストレージ装置がアクセス可能な第3ストレージ装置とから構成される。ストレージシステムは、ホストから第1または第2ストレージ装置内のボリュームに対して書き込まれたデータを、第2または第1ストレージ装置のボリュームに複製するよう動作する。
また第1ストレージ装置と第2ストレージ装置は、定期的に第3ストレージ装置に対してヘルスチェック情報を書き込む。第1ストレージ装置がホストからライト要求を受信したが、ライトデータを第2ストレージ装置へ複製できなかった場合、第3ストレージ装置に書き込まれているヘルスチェック情報の内容に基づいて、第2ストレージ装置のボリュームがI/O不可状態にあるか否かを判断し、I/O不可状態にあると判断した後、ライト要求に係る処理を再開する。
本発明のストレージシステムでは、Active/Active構成の運用を可能にするとともに、障害時に適切な対応を取ることが可能である。
実施例に係る計算機システムの構成図である。 ストレージ装置が、ホストからのデータ書き込み要求を受け付けた時の処理の概要を説明する図である。 ストレージシステムの別の構成例である。 ストレージ装置のメモリに格納されているプログラムと管理情報を示す図である。 ペア管理テーブルの内容を示す図である。 LDEVステータス情報の内容を示す図である。 Quorum Diskに格納される情報を説明する図である。 DKC管理情報に格納される情報の内容を示す図である。 ライト処理のフローチャートである。 ライト処理のフローチャートである。 リシンク処理のフローチャートである。 ヘルスチェック処理のフローチャートである。 Quorum使用のヘルスチェック/ペア状態変更処理プログラムのフローチャートである。 無応答判定処理のフローチャート(1)である。 無応答判定処理のフローチャート(2)である。 M−R間通信障害通知受領処理のフローチャート(1)である。 M−R間通信障害通知受領処理のフローチャート(2)である。 M−R間通信障害通知受領処理のフローチャート(3)である。 M−R間通信障害通知受領処理のフローチャート(4)である。 通信不能ビットマップ編集処理のフローチャート(1)である。 通信不能ビットマップ編集処理のフローチャート(2)である。 更新世代番号設定処理のフローチャートである。 自DKCペア状態変更処理のフローチャートである。 リード処理のフローチャートである。
以下、図面を参照して、本発明の一実施形態に係るストレージシステムを説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
(1) システムの構成
図1は、本発明の一実施形態に係る計算機システムの構成例を示す。計算機システムは、ストレージシステム1とホスト2から構成される。ストレージシステム1は、ストレージ装置10a、ストレージ装置10b、Quorum Storage15からなる。
ストレージ装置10aは、SAN6を介してホスト2やストレージ装置10bと接続される。SAN6は、たとえばファイバチャネル規格に従う伝送線(ケーブル)やスイッチ等を用いて構成されるネットワークである。同様にストレージ装置10bも、SAN6を介してホスト2やストレージ装置10aと接続される。なお、ホスト2とストレージ装置10間を接続する経路(パス)と、ストレージ装置10同士(ストレージ装置10aとストレージ装置10b)を接続する経路とを区別するため、以下ではストレージ装置10同士を接続する経路のことを、「ストレージ装置間パス」または「DKC間パス」と呼ぶ。
ストレージ装置10aは、ストレージコントローラ(以下、「コントローラ」と略記することもある)11と複数のドライブ121を備えるディスクユニット12から構成される。ストレージコントローラ11は、ストレージ装置10aで行われるI/O処理などの制御を実行するプロセッサボードであるMPB111、ホスト2やストレージ装置10bとのデータ転送インタフェースであるフロントエンドパッケージ(FEPK)112、ディスクユニット12とのデータ転送インタフェースであるバックエンドパッケージ(BEPK)113、キャッシュデータや制御情報などを格納するメモリを備えたメモリパッケージ(CMPK)114が、スイッチ(SW)115で相互接続された構成をとる。各構成要素(MPB111、FEPK112、BEPK113、CMPK114)の数は、図1に示された数に限定されるものではないが、高可用性の確保のため、通常各構成要素は複数存在する。また、これら構成要素を後で増設することも可能である。
各MPB111は、プロセッサ(MPとも呼ばれる)141と、当該プロセッサ141が使用するデータを格納するローカルメモリ(LM)142を有する、パッケージボードである。図1ではMPB111に1つのMP141だけが搭載されている例が示されているが、MP141の数は1に限定されない。またストレージ装置10aは時計(非図示)を有し、MP141は時計から現在時刻情報を取得することができる。なお、時計はMP141に内蔵されている構成でもよい。
CMPK114は、SM143とCM144を有する。CM144は、ホスト2からのライトデータやドライブ121から読み出されたデータを一時格納する、いわゆるディスクキャッシュとして用いられる領域である。SM143は、MPB111が使用する制御情報等を格納する領域である。SM143に格納される情報は、全MPB111の全MP141からアクセス可能である。CMPK114は、停電等の障害が発生した場合のデータ消失を防ぐために、バッテリバックアップ等の手段を備えていることが好ましい。
FEPK112は、他の機器(ホスト2やストレージ装置10b)に対するデータ送受信を行うためのパッケージボードであり、SAN6に接続するためのインタフェースを1以上有する。インタフェースには、一例としてファイバチャネルインタフェースが用いられる。図1では、ストレージ装置10aとストレージ装置10bが1本の伝送線を介して接続されているが、実際にはストレージ装置10aとストレージ装置10bは複数の伝送線で接続される。また、ホスト2とストレージ装置10間の伝送線の数も、図1に示されている構成に限定されない。複数の伝送線がホスト2とストレージ装置10間に設けられてよい。
BEPK113は、ドライブ121とのデータ送受信を行うためのパッケージボードであり、ディスクユニット12に接続するためのインタフェースを1以上有する。インタフェースには、一例としてSAS(Serial Attached SCSI)が用いられる。
ディスクユニット12には複数のドライブ121を備え、各ドライブ121には主にホスト2からのライトデータが格納される。ドライブ121には、一例としてHDDなどの磁気ディスクが用いられるが、SSD(Solid State Drive)等、HDD以外の記憶媒体を用いてもよい。
ストレージ装置10bは、ストレージ装置10aと同様の構成要素を有する装置である(図1では内部構成の記載を省略している)。ただし、各構成要素(MPB111、FEPK112、ドライブ121等)の数はストレージ装置10aと同じである必要はない。以下、ストレージ装置10a、ストレージ装置10bが共通に備えている機能等を説明する場合、ストレージ装置10a、ストレージ装置10bを区別せず、「ストレージ装置10」と表記する。
Quorum Storage15は、ストレージ装置10aとストレージ10bとに接続される。Quorum Storage15の詳細は後述する。
ホスト2は少なくとも、プロセッサ、メモリ、そしてSAN6に接続するためのインタフェースであるHBA(Host Bus Adapter)を備えた計算機である。プロセッサは、メモリ302に格納されたプログラムを実行する。ホスト2上では、一例としてデータベース管理システム(DBMS)等のアプリケーションプログラムが実行され、ストレージ装置10に格納されたデータにアクセスする。
(2) 動作概要
続いて、ストレージシステム1で行われる、ホスト2からのI/O要求に係る処理の概要を説明する。まずストレージ装置10がホスト2に提供するボリュームについて説明する。ストレージ装置10は、自身のディスクユニット12に存在する複数のドライブ121の記憶領域を用いて1以上の論理ボリューム(ボリューム、またはLDEVとも呼ばれる)を形成する。またストレージ装置10は、各論理ボリュームに一意な識別番号(論理ボリューム番号またはLDEV#)を付して管理している。そしてホスト2には、この論理ボリュームを提供する。論理ボリュームの形成方法、及び形成された論理ボリュームをホスト2に提供する方法は、公知のストレージ装置で行われているものと同じである。
また実施例に係るストレージシステム1では原則として、ホスト2からのライトデータは、ストレージ装置10aの論理ボリュームとストレージ装置10bの論理ボリュームの両方に書き込まれる(いわゆるデータ二重化が行われる)。図2を用いて、ストレージシステム1で行われるデータ二重化の概要を説明する。
データ二重化は、ストレージ装置10によって実施される。図2の実線は、ストレージ装置10aがホスト2からライト要求及びライトデータを受信した時のライトデータの流れを表している。たとえばストレージ装置10aがホスト2から、論理ボリューム125aに対するライト要求及びライトデータを受信すると、ストレージ装置10aは自身が有する論理ボリューム125aにライトデータを格納する。同時にストレージ装置10aはストレージ装置10bに対して、当該ライトデータの複製、及び当該ライトデータの複製を論理ボリューム125bに書き込む旨の指示(ライト要求)を送信することで、ストレージ装置10bに、当該ライトデータの複製を論理ボリューム125bに格納させる。
また本発明の実施例に係る計算機システムでは、ホスト2がストレージ装置10bに対してライト要求を発行した場合にも、データ二重化が行われる。図2の点線は、ストレージ装置10bがホスト2からライト要求及びライトデータを受信した時のライトデータの流れを表している。つまり、ストレージ装置10bがホスト2からライト要求及びライトデータを受信すると、論理ボリューム125bと論理ボリューム125aの両方にライトデータが格納される。
このように、本発明の実施例に係る計算機システムでは、論理ボリューム125bと論理ボリューム125aには、ストレージシステム1に障害が発生した等の理由でデータ二重化ができない場合を除き、両方に同じデータが格納された状態(同期状態と呼ばれる)にある。そのためホスト2は、論理ボリューム125aと論理ボリューム125bのいずれにアクセス(リードまたはライト)してもよい。
なお、2つの論理ボリューム(論理ボリューム125aと論理ボリューム125b)に対するデータの書き込み順は、論理ボリュームに設定された一種の属性情報によって決められている。最初にデータが書き込まれる論理ボリュームのことはプライマリボリューム(P−VOLと表記されることもある)と呼ばれ、2番目にデータが書き込まれる論理ボリュームのことはセカンダリボリューム(S−VOLと表記されることもある)と呼ばれる。図2は、論理ボリューム125aがP−VOL、そして論理ボリューム125bがS−VOLと定められている場合の例を示している。
また、論理ボリューム125aと論理ボリューム125bがそれぞれ、異なるストレージ装置10にある論理ボリュームであることは、少なくともホスト2のアプリケーション502には認識されない。本発明の実施例に係る計算機システムでは、論理ボリューム125aと論理ボリューム125bのボリューム識別子を同じにすることで、論理ボリューム125aと論理ボリューム125bが同一のボリュームであると、ホスト2の交替パスソフト501に認識させるようにしている。
図2の構成において、ホスト2では交替パスソフト501が稼働している。交替パスソフト501は、ホスト2から論理ボリュームへのアクセス経路(パスと呼ばれる)が複数存在する場合にそれを認識し、論理ボリュームにアクセスする際に、複数のパスのうち、使用するパスを選択する機能を持つ。パスの認識のために、交替パスソフト501は、ホスト2から認識できている論理ボリュームに対して、SCSI規格で規定されているINQUIRYコマンド等、ボリュームの識別情報を取得するコマンドを発行することによって、ボリューム識別子を取得する。
ストレージ装置10aが論理ボリューム125aに対するINQUIRYコマンドを受信した時、またストレージ装置10bが論理ボリューム125bに対するINQUIRYコマンドを受信した時は、いずれも同一のボリューム識別子をコマンドの送信元(ホスト2)に返却するように構成されている。そのため交替パスソフト501は論理ボリューム125aと論理ボリューム125bが同一のボリュームと認識する。結果として、ホスト2から論理ボリューム125aへのパス(図中の、ホスト2から論理ボリューム125aに至る実線矢印。以下このパスを「パス1」と呼ぶ)の交替パスが、ホスト2から論理ボリューム125bへのパス(図中の、ホスト2から論理ボリューム125bに至る点線矢印。以下このパスを「パス2」と呼ぶ)であると判断する。そしてパス1が障害により遮断された場合、あるいはパス1が混雑している場合などには、交替パスソフト501がアプリケーションプログラム502などから論理ボリューム125へのアクセス要求を受け付けると、交替パスソフト501はパス2を介してアクセス要求を発行する(つまり論理ボリューム125bにアクセス要求を発行する)。そして交替パスソフト501が論理ボリューム125bにアクセス要求を発行しても、論理ボリューム125bには論理ボリューム125aと同一データが格納されているため、問題なく動作する。
(3) Quorum Disk
続いて、ストレージ装置10とQuorum Storage15との関係について説明する。Quorum Storage15は、少なくとも1つのボリュームを有するストレージデバイスである。またストレージ装置10は、FEPK112のインタフェースにQuorum Storage15等のストレージデバイスが接続された場合、当該ストレージデバイスが有するボリュームにアクセス(リードやライト)できる機能を有している。以下、本実施例では、Quorum Storage15は1つのボリュームを有しているとする。そしてこのボリュームのことを、「Quorum Disk」と呼ぶ。
ストレージ装置10aは定期的にQuorum Diskに情報を書き込む。情報の詳細な内容については後述するが、ここで書き込まれる情報は一種のヘルスチェック情報であり、ストレージ装置10aが動作中である(障害等の要因で停止していない)ことを示す情報が含まれる。また他のストレージ装置10(ストレージ装置10b等)との通信の結果、通信が失敗した等の情報も含まれる。そしてストレージ装置10bは、ストレージ装置10aの状態を判断するために、定期的にQuorum Diskから情報を読み出す。同様にストレージ装置10bも、定期的にQuorum Diskに情報を書き込む。そしてストレージ装置10aは、ストレージ装置10bの状態を判断するために、定期的にこの書き込まれた情報を読み出す。
なお、上では、Quorum Storage15がストレージ装置10のFEPK112のインタフェースに接続される構成について説明したが、ストレージシステム1の構成はこの構成に限定されるものではない。要は、ストレージ装置10a、10bがいずれも、Quorum Diskにアクセス可能になるように、接続されればよい。たとえば上で説明したものとは別の実施形態として、ストレージ装置10のBEPK113を介してQuorum Storage15が接続されるように構成されてもよい。
また、Quorum Storage15のハードウェア構成は、ストレージ装置10と同じハードウェア構成であってもよいし、異なるハードウェア構成であってもよい。また、図1では、ストレージ装置10a(またはストレージ装置10b)とQuorum Storage15が1本の伝送線を介して接続された構成が示されているが、ストレージ装置10a(またはストレージ装置10b)とQuorum Storage15との間の伝送線が複数存在する構成でも良い。
また、以下では、2つのストレージ装置10(ストレージ装置10aと10b)がQuorum Storage15に接続された構成について中心に説明がなされるが、2台より多くのストレージ装置10がQuorum Storage15に接続される構成であってもよい。たとえば図3に示されているように、ストレージ装置10a、10b、10cがQuorum Storage15に接続された構成をとることもできる。
(4) 管理情報の構成
続いて、図4〜図6を用いて、ストレージ装置10が有する管理情報の内容について説明する。本実施例のストレージ装置10は少なくとも、ペア管理情報T300とLDEVステータス情報T400という管理情報をSM143に格納している。また、SM143には、DKC管理情報ステージングエリア200’、Quorum格納時刻領域250という領域が設けられている。DKC管理情報ステージングエリア200’には、Quorum Disk上に格納されているDKC管理情報(後述)が一時格納(ステージング)される。そして、Quorum格納時刻領域250には、MP141がQuorum Disk上のDKC管理情報を更新した時の時刻が格納される。なお、本実施例では、これらの情報がSM143に格納されていて、MP141はSM143にアクセスすることで上記情報の参照更新を行う例について説明するが、アクセス性能向上のために、SM143に格納されている情報の一部をLM142に複製(キャッシング)しておき、MP141はLM142上にキャッシングされた情報にアクセスするようにしてもよい。
ペア管理情報T300について説明する。先に述べたとおり、ストレージシステム1では原則として、ホスト2からのライトデータを2つの論理ボリュームに格納する。たとえばストレージ装置10aが、ホスト2から論理ボリューム125aに対するライト要求及びライトデータを受信すると、ストレージ装置10aの論理ボリューム125aとストレージ装置10bの論理ボリューム125bとにライトデータが格納される。
図5にペア管理テーブルT300の構成を示す。ペア管理テーブルT300の各行には、1つのボリュームペアの情報が格納される。本明細書では、P−VOLと、当該P−VOLの複製が書き込まれるS−VOLのペアのことを、「ボリュームペア」と呼ぶ。また、あるP−VOLの複製が格納されるS−VOLは、「P−VOLとペア関係にあるボリューム」あるいは「P−VOLのペアボリューム」と呼ばれる。逆に、あるS−VOLの複製元データが格納されている論理ボリュームであるP−VOLのことも、「S−VOLとペア関係にあるボリューム」、「S−VOLのペアボリューム」と呼ばれる。ストレージ装置10では各ペアに、ペア番号(Pair#)と呼ばれる識別子を付して管理しており、Pair#(T301)にはペア番号が格納される。そして、PDKC#(T303)、P−VOL#(T304)には、ボリュームペアに属するP−VOLの情報(P−VOLの属するストレージ装置の製番(シリアル番号)であるPDKC#、P−VOLのLDEV#)が格納される。またSDKC#(T305)、S−VOL#(T306)には、ボリュームペアに属するS−VOLの情報(S−VOLの属するストレージ装置を特定可能な識別番号であるSDKC#、S−VOLのLDEV#)が格納される。
Pair Status(T302)には、ボリュームペアの状態(ペアステータス)が格納される。ペアステータスについては後述する。また変更中フラグ(T307)はペアステータスを変更する必要がある際、1(ON)が設定され、それ以外の場合には0(OFF)が設定される。具体的な使われ方は後述する。
ペアステータスについて説明する。各ボリュームペアは、以下に説明するいずれかの状態を有する。これらの状態のことを本明細書では「ペアステータス」と呼ぶ。
(a)Initial−Copy状態:
ストレージシステム1は、ボリュームペアを形成する際、最初にP−VOLの内容をすべてS−VOLへとコピーする処理(初期コピー処理と呼ばれる)を行う。この処理中の状態のことを「Initial−Copy状態」と呼ぶ。
(b)Duplex状態:
初期コピー処理または後述する再同期処理により、P−VOLの内容とS−VOLの内容が同一になったボリュームペアの状態を「Duplex状態」と呼ぶ。
(c)Suspend状態:
P−VOLの内容がS−VOLに反映されない状態のことを「Suspend状態」と呼ぶ。たとえばストレージ装置10aとストレージ装置10bを接続する伝送線が遮断されて、コピーが不可能になった場合に、ボリュームペアは「Suspend状態」になる。あるいはユーザからの指示によって、ボリュームペアが「Suspend状態」になることもある。なお、ボリュームペアを「Suspend状態」にする処理のことを、サスペンド(Suspend)処理と呼ぶ。
(d)Duplex−Pending状態:
ボリュームペアが、Suspend状態からDuplex状態に遷移するまでの過渡状態にある場合、そのボリュームペアの状態は「Duplex−Pending状態」と呼ばれる。この状態の時、Suspend状態にあったボリュームペアについて、P−VOLとS−VOLの内容を一致(同期)させるため、P−VOL(またはS−VOL)のデータがS−VOL(またはP−VOL)へとコピーされる。コピーが完了した時点で、そのボリュームペアの状態は「Duplex状態」になる。なお、「Suspend状態」のボリュームペアをDuplex状態に遷移させる処理のことを、再同期処理(リシンク処理)と呼ぶ。
ペア管理テーブルT300のPair Status(T302)には、上で説明した4つの状態のいずれかが格納される。Pair Status(T302)に0が格納されている場合、ボリュームペアの状態が「Initial−Copy状態」であることを表し、1が格納されている場合、ボリュームペアの状態が「Duplex状態」であることを表す。またPair Status(T302)に2が格納されている場合、ボリュームペアの状態が「Suspend状態」であることを表し、3が格納されている場合、ボリュームペアの状態が「Duplex−Pending状態」であることを表す。
なお、上では「Initial−Copy状態」と「Duplex−Pending状態」がそれぞれ別な状態であるとして説明した。ただしボリュームペアが「Initial−Copy状態」または「Duplex−Pending状態」である時、いずれもP−VOLとS−VOLの内容が同期中であるという点で一致している。そのため、必ずしも2つの状態を分けて管理する必要はなく、1つの状態として管理するようにしてもよい。
続いて、Suspend状態にあるボリュームペアについて、やや詳細に説明する。ボリュームペアがSuspend状態に変更される理由は1つではない。たとえば上で説明したように、ストレージ装置10aとストレージ装置10bを接続する伝送線が遮断された場合もあり得るが、それ以外に、ストレージ装置10aまたは論理ボリューム125aに障害が発生して、論理ボリューム125aにアクセスできなくなった場合、またはストレージ装置10bまたは論理ボリューム125bに障害が発生して、論理ボリューム125bにアクセスできなくなった場合があり得る。
たとえばストレージ装置10aに障害が発生したが、ストレージ装置10bは正常な状態にある場合には、論理ボリューム125bはホスト2からアクセス可能であるべきである。逆にストレージ装置10bに障害が発生したが、ストレージ装置10aは正常な状態にある場合には、論理ボリューム125aはホスト2からアクセス可能であるべきである。そのためストレージ装置10は、各論理ボリュームのアクセス可否についての情報を管理しておくことが必要である。LDEVステータス情報T400は各論理ボリュームのアクセス可否状態を管理するために用いられる。
図6にLDEVステータス情報T400の一例を示す。Status(T402)には、LDEV#(T401)で特定される論理ボリュームの状態が格納される。本明細書では、論理ボリュームがホスト2からアクセス可能な状態にある場合、当該論理ボリュームの状態は「Valid状態」と呼ばれる。逆に論理ボリュームがホスト2からアクセス可能でない状態の場合(たとえば論理ボリュームに障害が発生した場合)、当該論理ボリュームの状態は「Invalid状態」または「閉塞状態」と呼ばれる。
Status(T402)には、0または1のいずれかの状態をとり得る。0の場合、論理ボリュームの状態が「Valid状態」であることを表し、1の場合、論理ボリュームの状態が「Invalid状態」であることを表す。なお、ボリュームペアのペアステータスが“Duplex状態”の場合には、当該ボリュームペアに属するP−VOL及びS−VOLの状態はいずれも「Valid状態」である。
LDEVステータス情報T400は、各ストレージ装置10が有している情報である。そして1つのLDEVステータス情報T400には、当該LDEVステータス情報T400が格納されているストレージ装置10の有する論理ボリュームについての情報のみが格納される(たとえばストレージ装置10bの有するLDEVステータス情報T400には、ストレージ装置10bの有する論理ボリュームのステータスだけが格納される)。
次に、図7、8を用いて、Quorum Diskに格納される情報の内容について説明する。先に述べたとおり、ストレージ装置10は定期的にQuorum Diskに情報を格納する。またストレージ装置10は定期的に、Quorum Diskに格納された情報の参照を行う。
Quorum Storage15には、最大でn台(nはあらかじめ定められている固定値で、2以上の整数値である。一例としてn=16である)のストレージ装置10が接続される。Quorum Storage15に接続されたストレージ装置10はそれぞれ、Quorum Disk内の所定の領域に情報を書き込むように制御される。そのため、Quorum Disk内には、Quorum Storage15に接続されるストレージ装置10の最大数(n台)と同数の管理情報格納領域が設けられている。
図7を用いて管理情報格納領域について説明する。Quorum Diskには、DKC配列割当表201という領域と、DKC管理情報格納領域202という領域が設けられている。この領域が設けられる位置は、あらかじめ定められている(たとえば領域の先頭は、ボリュームの先頭(0番地)に位置するなど)。初期状態ではいずれの領域にもデータが書き込まれていない(全領域に、たとえば0が書き込まれている)。このうち、DKC管理情報格納領域202内が、各ストレージ装置10が定期的に情報を格納する領域である。
図7に示されているように、DKC管理情報格納領域202は、DKC管理情報[0](202−0)、DKC管理情報[1](202−0)、...、DKC管理情報[n−1](202−(n−1))の、n個の部分領域に区分されている。各ストレージ装置10が定期的に情報を書き込む場合、DKC管理情報[0](202−0)〜DKC管理情報[n−1](202−(n−1))のいずれか1つの領域に情報を書き込む。
各ストレージ装置10が情報を書き込む領域は、「Quorum Diskへの登録処理」と呼ばれる処理が行われることによって決定される。この処理はたとえば、ストレージシステム1に1または複数台のストレージ装置10を導入した場合に、ユーザが管理端末などを用いて、Quorum Diskへの登録処理を行うことを、導入したストレージ装置10に対して指示することで実行される。そして指示を受けたストレージ装置10のMP141は、LM142に格納されているDKC登録プログラム1002を実行する。DKC登録プログラム1002が実行されると、MP141はQuorum DiskのDKC配列割当表201に格納されている情報の内容に基づいて、ストレージ装置10が情報を書き込む領域を決定する。
以下、決定方法の具体的内容を説明する。DKC配列割当表201には、図4に示されているように、製番[0](201−0)〜製番[n−1](201−(n−1))の領域が設けられている。Quorum Storage15に接続されたストレージ装置10によって、Quorum Diskへの登録処理が行われるたびに、ストレージ装置10は、製番[0](201−0)〜製番[n−1](201−(n−1))のうち、内容が0である領域の中で最も先頭に近い領域に、製番を格納する。たとえば製番[0]〜製番[(k−1)](kは、1≦k<nを満たす整数値)に、すでに非0の値が格納されていた場合には、Quorum Diskへの登録処理を実行するストレージ装置10は、製番[k](201−k)に、製番を格納する。そしてこのストレージ装置10は、情報を書き込む際には、DKC管理情報[k](202−k)を使用する(DKC管理情報[k](202−k)の内容を更新する)と決定される。
Quorum Diskへの登録処理は、上のような方法で行われるため、(k+1)番目にQuorum Diskへの登録処理を実行したストレージ装置10は、DKC管理情報[k]に情報の書き込みを行うと決定される。以下、DKC管理情報[k](202−k)に情報書き込みを行うストレージ装置10(製番[k](201−k)に、製番を格納したストレージ装置10である、ともいえる)のことを、「DKC#k」と表記する。また、この値kは、「配列番号」(または「配列#」)と呼ばれることもある。
またDKC#kは、DKC管理情報[0](202−0)〜DKC管理情報[n−1](202−[n−1])の全ての情報を参照する。ただしDKC#kは、Quorum Diskに情報を格納する際、DKC管理情報[k](202−k)のみしか更新しない。つまり各ストレージ装置10が同一領域にデータを書き込むことはないため、各ストレージ装置10がQuorum Diskを読み書きする際、必ずしも排他制御を行う必要はない。
なお、図7では、各DKC管理情報[k]は、Quorum Disk上に連続して配置されているが、必ずしも各DKC管理情報[k]が連続して配置されている必要はない。ストレージ装置10がDKC管理情報[k]をQuorum Diskから読み出す、またはQuorum Diskに書き出す際に、各DKC管理情報[k]の読み出し/書き出し対象のアドレスが一意に特定できるような配置方法であればよい。たとえば各DKC管理情報[k]の先頭が、ボリュームの最小アクセス単位であるブロック(たとえば512バイト)の先頭に位置するように配置してもよい。
続いて、DKC管理情報[k]に格納される情報の内容について、図8を用いて説明する。DKC管理情報[k]には少なくとも、図8に示されているように、製番(2020)、更新世代番号(2021)、通信不能ビットマップA(2022)、通信不能ビットマップB(2023)、閉塞了承ビットマップ(2024)、応答不能ビットマップA(2025)、応答不能ビットマップB(2026)、回復中ビットマップ(2027)、前回世代[0](2028−0)〜前回世代[n−1](2028−[n−1])、前回時刻[0](2029−0)〜前回時刻[n−1](2029−[n−1])の情報が格納される。
製番(2020)には、DKC#kの製番が格納される。そのため製番(2020)には、DKC配列割当表201の製番[k](201−k)に格納されている値と同じ値が格納される。
更新世代番号(2021)には、DKC#kがDKC管理情報[k]に情報を格納した回数に相当する値が格納される。詳細は後述するが、ストレージ装置10の運用中、DKC#kはDKC管理情報[k]への情報格納を繰り返し実行する。そして、DKC#kはDKC管理情報[k]へ情報を格納するたびに、更新世代番号(2021)に格納する値を1ずつ加算する(たとえば今回の格納処理で、更新世代番号(2021)にmを格納した場合、次回の格納処理の際には、(m+1)が更新世代番号(2021)に格納される)。
通信不能ビットマップA(2022)は、nビットの情報で、各ビットが、DKC#kとその他のストレージ装置10との間のパス(DKC間パス)を介した通信が可能か否かを表す。DKC#kが、DKC#kとDKC#j(jは、0≦j≦(n−1)を満たす整数値で、かつj≠kの関係にある)間のパスを介して、DKC#jと通信できない状態にあることを検知した時(これはたとえば、DKC#kからDKC#jへのデータ転送が失敗した場合等である)、DKC#kは通信不能ビットマップA(2022)のjビット目の情報に1を格納する(逆にDKC#jとDKC#j間のパスを介した通信が不可能な状態にあることを検知していない場合には、当該ビットには0が格納される)。詳細は後述する。
以下では、ビットマップのあるビットに「1」が格納された状態を、ビットが「ONである」と呼び、あるビットに「0」が格納された状態を、ビットが「OFFである」と呼ぶ。また上で述べたとおり、j≠kの関係にあるので、DKC管理情報[k]の通信不能ビットマップA(2022)の各ビットのうち、k番目のビットは使用されない。
通信不能ビットマップB(2023)も通信不能ビットマップA(2022)と同様に、nビットの情報で、DKC#kとその他のストレージ装置10との間のパスの状態に関係する情報である。DKC#kが、「DKC#jが、DKC#jとDKC#k間のパスを介した通信が不可能な状態にあることを検知した」という事実を検知した時、DKC#kは通信不能ビットマップB(2023)のjビット目の情報に1を格納する。詳細は後述する。
閉塞了承ビットマップ(2024)もnビットの情報である。DKC#kが、「DKC#jが、DKC#jとDKC#k間のパスを介した通信が不可能な状態にあることを検知した」という事実を検知し、且つその時のDKC#jとDKC#kとでペア関係にあるボリュームについて、DKC#kのボリュームをInvalid状態にすることが決定された場合、DKC#kは通信不能ビットマップB(2023)のjビット目の情報に1を格納する。なお、本実施例では、ボリュームの状態をInvalid状態にすることを、「閉塞する」と呼ぶこともある。
応答不能ビットマップA(2025)も、nビットの情報で、各ビットは、ストレージ装置10が障害等の要因で停止したため、Quorum Diskへの情報書き込みを行うヘルスチェック処理が行えない状態になっているか否か、を表す。DKC#jが所定時間以上の間、Quorum Diskへの情報書き込みを行っていないことを、DKC#kが検知した時、かつ、DKC#kの通信不能ビットマップA(2022)のjビット目の情報に1が格納されている時、DKC#kは応答不能ビットマップA(2025)のjビット目の情報に1を格納する。この状態の場合、ストレージ装置10が停止状態であるため、ホスト2から論理ボリュームに対するI/O要求も受け付けられない状態にある。
応答不能ビットマップB(2026)も応答不能ビットマップA(2025)と同様のnビットの情報であり、DKC#k以外のストレージ装置10がDKC#kの状態を検知した時の情報が格納される。「DKC#kが所定時間以上の間、Quorum Diskへの情報書き込みを行っていないことを、DKC#jが検知した」という事実を、DKC#kが検知した時、DKC#kは応答不能ビットマップB(2026)のjビット目の情報に1を格納する。詳細は後述する。
回復中ビットマップ(2027)は、リシンク処理中であることを表す情報である。DKC#kがDKC#jとの間でリシンク処理を実行中の状態である場合、DKC#kは回復中ビットマップ(2027)のjビット目の情報に1を格納する。
前回世代[0](2028−0)〜前回世代[n−1](2028−[n−1])、前回時刻[0](2029−0)〜前回時刻[n−1](2029−[n−1])は、DKC#kが、DKC管理情報[j](ただしj≠k)に格納されている更新世代番号(2021)の情報を参照した時に用いられる。DKC#kはDKC管理情報格納領域202の内容を更新する際、DKC管理情報[k](202−k)のみしか更新しないことになっている。ただしDKC#kは、DKC管理情報[0](202−0)〜DKC管理情報[n−1](202−[n−1])の全ての情報を参照することは可能である。そしてDKC#kは、DKC管理情報[0](202−0)〜DKC管理情報[n−1](202−[n−1])を参照することで、他のストレージ装置10が正常に動作しているか否かを判定する。DKC#kが、DKC管理情報[j](ただしj≠k)の更新世代番号(2021)を参照した時、その情報を、DKC管理情報[k]の前回世代[j]に格納する。
DKC管理情報[k]の前回時刻[j]には、DKC#kが、DKC管理情報[j]の更新世代番号(2021)を参照した時の時刻を格納する。詳細は後述する。
(5) 処理の流れ
続いて、ストレージシステム1で実行される処理の流れを説明していく。以下で説明する処理は、ストレージ装置10のMP141が、LM142上に格納されているプログラムを実行することによって行われる。ストレージ装置10のMP141で実行されるプログラムについて、図4を用いて説明する。
図4では、LM142上に格納されているプログラムが示されている。LM142上には、I/Oプログラム1001、DKC登録プログラム1002、ミラーリングプログラム1003、リシンクプログラム1004、ヘルスチェックプログラム1005、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006が存在する。
I/Oプログラム1001は、ストレージ装置10がホスト2から論理ボリュームへのアクセス要求を受信した時に実行されるプログラムである。DKC登録プログラム1002は、先に説明したとおり、Quorum Diskへの登録処理の際に実行されるプログラムである。Quorum Diskへの登録処理は上で説明済みであるので、以下では説明を省略する。
ミラーリングプログラム1003は、データ二重化(P−VOLとS―VOLにデータを書き込む)を行う時に実行されるプログラムである。たとえばP−VOLに書き込まれたデータをS−VOLにも書き込むときに、I/Oプログラム1001から呼び出されて実行される。
リシンクプログラム1004は、Suspend状態のボリュームペアをDuplex状態に変更する際に実行されるプログラムである。またリシンクプログラム1004は、ユーザからの指示を受けて、開始される。
ヘルスチェックプログラム1005は、後述するヘルスチェック処理を行うためのプログラムである。ヘルスチェックプログラム1005は、Quorum Diskに格納された情報を参照することで、各ストレージ装置10の状態を判定し、判定結果をQuorum Diskに書き込む処理を行う。
Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006は、上で説明した各プログラムから呼び出される形で実行される。以下、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006が実行されることで行われる処理のことを、「Quorum使用のヘルスチェック/ペア状態変更処理」と呼ぶ。
各プログラムがQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006を呼び出す時(以下、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006を呼び出すプログラムのことを、「呼び出し元プログラム」と呼ぶ)、呼び出し元プログラムは少なくとも、以下の2つのパラメータをQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006に渡す。
1つ目のパラメータは、「処理種別」と呼ばれる。処理種別には、「障害サスペンド」、「リシンク」、「ヘルスチェック」の3種類があり、呼び出し元プログラムは、このいずれか1つを1つめのパラメータとして指定する。
2つ目のパラメータは、処理対象ストレージ装置の製番である。ただし、2つ目のパラメータは指定されないこともある。その場合呼び出し元プログラムは、2つ目のパラメータとして「0」を、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006に渡す。Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006が実行する処理の詳細は後述する。
続いて、ストレージ装置10がホスト2からP−VOLに対するライト要求を受け付けた時に、MP141がI/Oプログラムを実行することに行われる処理の流れを、図9、図10を用いて説明する。
ストレージ装置10がホスト2から論理ボリュームに対するライト要求を受け付けると、ホスト2がストレージ装置10に対して発行するライト要求(ライトコマンド)には、論理ユニット番号(LUN)等の、アクセス対象の論理ボリュームを特定する情報が含まれている。MP141がホスト2からのライト要求を受信すると、このライト要求に含まれているアクセス対象論理ボリュームを特定する情報をもとに、アクセス対象論理ボリュームを特定する。続いてペア管理情報T300を参照し、アクセス対象論理ボリュームがP−VOLであるかS−VOLであるかを判定する。
アクセス対象論理ボリュームがP−VOLであると判定された場合の処理の流れについて、図9を用いて説明する。MP141は、ペア管理情報T300を参照することで、アクセス対象論理ボリュームのペアステータスを確認する(S1)。ペアステータスがDuplexまたはInitial CopyまたはDuplex Pending状態でない場合(S1:N)には、データを二重化しない(P−VOLのみに書き込む)。そのため、MP141はP−VOLにデータを書き込む処理のみを実行し(S9)、処理を終了する。なお、S9でMP141は、LDEVステータス情報T400を参照することで、論理ボリュームの状態を確認する。論理ボリュームの状態がInvalid状態である場合、ホスト2にエラーを返却して処理を終了する。
S1の判定でペアステータスがDuplexまたはInitial CopyまたはDuplex Pending状態であった場合(S1:Y)、S2以降の処理が行われる。S2ではMP141はP−VOLへのデータ書き込み処理を実行する。
S3でMP141は、P−VOLとペア関係にあるS−VOLが存在するストレージ装置10(以下、これを相手側ストレージ装置と呼ぶ)に対して、ライト要求を発行し、相手側ストレージ装置から、処理結果の応答情報を受信する。相手側ストレージ装置では、受信したライト要求に基づいて、S−VOLへのライト処理を実行し、ライト処理が完了した時点で、ライト要求発行元のストレージ装置(P−VOLの存在するストレージ装置)に処理が完了した応答を(処理が成功した場合には「成功」を)返却する。
相手側ストレージ装置における処理結果が「成功」であった場合(S4:Y)、ホスト2に対し、ライト処理が終了した旨を応答し(S5)、処理を終了する。相手側ストレージ装置における処理結果が「成功」でなかった場合(S4:N。これにはたとえば、相手側ストレージ装置が停止しており、所定時間内に相手側ストレージ装置から処理結果が返却されなかった場合、あるいはDKC間パスが遮断されて、相手側ストレージ装置にライト要求を送信できなかった場合が含まれる)、S10以降の処理が行われる。
S10では、MP141はペア管理テーブルT300の中で、相手側ストレージ装置との間でペア関係にある全てのボリュームペアについて、変更中フラグ(T307)を1にする。
S11ではMP141は、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006を呼び出すことによって、障害サスペンド処理を実行する。この時MP141は、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006に対して、処理種別と対象ストレージ装置の製番という2つの情報を、パラメータとして渡す。S11ではMP141は、処理種別として「障害サスペンド」を、対象ストレージ装置の製番には、相手側ストレージ装置の製番を指定する。処理の詳細は後述する。
S12ではMP141は、ストレージ装置10内のボリュームペアの状態を参照する。S12でボリュームペアの状態を参照した結果、全ボリュームペアの状態変更が完了したか判定する(S13)。具体的には、ペア管理テーブルT300を参照し、変更中フラグ(T307)が全て0であれば、全ボリュームペアの状態変更が完了したと判定する。
S13の判定の結果、全ボリュームペアの状態変更が完了している場合(S13:終わり)、ホストに応答を返却して(S5)、処理を終了する。全ボリュームペアの状態が変更されていない場合(S13:処理中)、所定時間待機し(S14)、再びS11の処理を実行する。
なお、上で説明した処理の流れは、原則としてボリュームペアの状態がDuplex状態またはSuspend状態という、一種の定常状態にある場合の例である。ペアステータスがInitial CopyまたはDuplex Pending状態のように、過渡状態にある場合には若干異なる処理になる。
S3において、ペアステータスがInitial CopyまたはDuplex Pending状態の場合、P−VOL、S−VOL間のデータコピー(以下、バックグラウンドコピーと呼ぶ)が並行して実施されている。ライト要求でライト対象となっている領域が、バックグラウンドコピー処理でコピー済みの場合には、上で説明した処理(S3)と同じこと(相手側ストレージ装置にライト要求を発行)を行うが、ライト対象の領域がバックグラウンドコピー処理でコピー済みでない場合には、S3の処理は行わず、ホストに処理成功を返答して、図9の処理を終了する。これは、バックグラウンドコピー処理でライト対象の領域がいずれS−VOLにコピーされるからである。
また、ペアステータスがInitial CopyまたはDuplex Pending状態の場合に、S3で相手側ストレージ装置にライト要求を発行した結果、相手側ストレージ装置における処理結果が「成功」でなかった時(S4:N)は、アクセス対象のボリューム(ボリュームペア)のペアステータス(Pair Status(T302))を「Suspend」状態に、またP−VOLのステータス(Status(T402))は「Valid」状態にして、処理を終了する。これは、Initial CopyまたはDuplex Pending状態では、P−VOLの内容がS−VOLにすべて反映されていない状態で、S−VOLのデータが有効なデータではないからである。
一方、アクセス対象論理ボリュームがS−VOLであると判定された場合の処理の流れについて、図9を用いて説明する。MP141は、ペア管理情報T300を参照することで、アクセス対象論理ボリュームのペアステータスを確認する(S1)。ペアステータスがDuplex状態でない場合(S1:N)には、データを二重化しない(S−VOLのみに書き込む)ため、S−VOLにデータを書き込む処理のみを実行し(S9’)、処理を終了する。またS9’でMP141は、LDEVステータス情報T400を参照することで、論理ボリュームの状態を確認する。論理ボリュームの状態がInvalid状態である場合、ホスト2にエラーを返却して処理を終了する。なお、ペアステータスがInitial CopyまたはDuplex Pending状態の場合、S−VOLの状態(Status(T402))はInvalid状態に設定されている(P−VOLと同一のデータが格納されてない、つまり有効なデータが格納されていない)ため、ホスト2にエラーを返却して処理を終了する。
S1の判定でペアステータスがDuplex状態であった場合(S1:Y)、S3’以降の処理が行われる。S3’ではMP141はS−VOLとペア関係にあるP−VOLが存在するストレージ装置10(以下、これを相手側ストレージ装置と呼ぶ)に対して、ライト要求を発行し、相手側ストレージ装置から、処理結果の応答情報を受信する。
相手側ストレージ装置における処理結果が「成功」であった場合(S4:Y)、MP141はS−VOLへのデータ書き込み処理を実行し(S2’)、ホスト2に対し、ライト処理が終了した旨を応答し(S5)、処理を終了する。相手側ストレージ装置における処理結果が「成功」でなかった場合(S4:N)、S11以降の処理が行われる。S11〜S14は、図9で説明したものと同様である。
なお、図9、10を用いて説明したように、ボリュームペアを構成するいずれのボリューム(P−VOLまたはS−VOL)に対して書き込みが行われた場合でも、P−VOLとS−VOLの両方にデータが書き込まれる(二重書きされる)ため、ホスト2はデータを読み出す場合には、ストレージ装置10a(P−VOL)、ストレージ装置10b(S−VOL)のいずれにアクセスしても良い。
一方、ストレージ装置10a(P−VOL)がホスト2からリード要求を受け付けた場合には、ストレージ装置10aはP−VOLから読み出したデータをホスト2に返送し、ストレージ装置10b(S−VOL)がホスト2からリード要求を受け付けた場合には、ストレージ装置10bはS−VOLから読み出したデータをホスト2に返送する。この時、リード要求でリード対象となっているボリュームがS−VOLであった場合であっても、S−VOLからのデータリードのみが行われ、P−VOLに対するアクセスは行われない。
続いて図11を用いて、ストレージ装置10がユーザから再同期(リシンク)の指示を受信した時に行われる処理の流れを説明する。この時MP141ではリシンクプログラム1004が実行され、以下で説明する処理が行われる。
S31でMP141は、ユーザからリシンク指示を受信する。ユーザはホスト2(または管理端末)から、ストレージ装置10に対してリシンク指示を発行することができる。またリシンク指示には、再同期させたいボリュームペアの情報(P−VOLまたはS−VOLの識別子)が含まれている。MP141はペア管理情報T300を参照し、リシンク指示に含まれているボリュームペアのペアステータスを確認する。
S31で確認したペアステータスが、「Suspend状態」でなかった場合には(S32:OK)、ボリュームペアの再同期ができないため、ホスト2(または管理端末)にエラーを返却し(S34)、処理を終了する。S31で確認したペアステータスが、「Suspend状態」であった場合には(S32:OK)、MP141はQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006を呼び出す(S33)。
ここでQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006に渡されるパラメータのうち、処理種別としては「リシンク」が渡される。また対象ストレージ装置の製番には、ペア関係にあるボリュームが存在するストレージ装置10の製番が渡される。たとえばストレージシステム1の構成として、ストレージ装置10aにP−VOLが、ストレージ装置10bにS−VOLが存在しており、ストレージ装置10aがリシンク指示を受け付けた場合、ストレージ装置10bの製番を、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006の引数として渡す。
S33の処理が完了すると、リシンク処理は終了する。
続いて図12を用いて、ヘルスチェック処理について説明する。ヘルスチェック処理は、MP141がヘルスチェックプログラム1005を実行することで行われる。ヘルスチェックプログラム1005が開始されると、MP141はQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006を呼び出す(S41)。S41でQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006に渡されるパラメータのうち、処理種別としては「ヘルスチェック」が指定され、対象ストレージ装置の製番には、0が指定される。その後、所定時間(一例として500ms)待機し(S42)、再びMP141はS41を実行することを繰り返す。これにより、定期的にQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006が実行される。
以上のように、I/O(ライト)処理が行われる時、ボリュームペアの再同期処理が行われる時、及びヘルスチェック処理が行われる時に、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006が呼び出される(実行される)。以下では、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006によって実行される処理の流れについて、図13以降の図面を用いて説明していく。
図13は、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006によって実行される処理の全体の流れを示している。なお、図13の処理は、全てのストレージ装置10で実行されるが、以下では、DKC#k(DKC管理情報[k](202−k)に情報書き込みを行うストレージ装置10)のMP141で、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006が実行されている場合について説明する。またDKC#kのことを、「自DKC」または「自装置」と表記することもある。
Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006が呼び出し元プログラムから呼び出されると、MP141はまず、Quorum Disk上の、DKC配列割当表201、DKC管理情報格納領域202に格納されている情報を読み出して、DKC管理情報ステージングエリア200’に格納する(S101)。
続いてMP141は、DKC管理情報ステージングエリア200’に格納された情報に基づいて、S102(無応答判定処理)、S103(M−R間通信障害通知受領処理)、S104(通信不能ビットマップ編集処理)、S105(更新世代番号設定処理)を実行する。S102〜S105の処理において、DKC管理情報ステージングエリア200’に格納された各種情報の参照、更新が行われる。これらの処理の詳細は後述する。
S105までの処理が終了すると、MP141は、DKC管理情報ステージングエリア200’に格納されている情報を、Quorum Diskに書き戻す(S106)。なお、S101で読み出される情報は、Quorum Disk上の、DKC配列割当表201、DKC管理情報格納領域202に格納されている情報の全てであるが、S106でQuorum Diskに書き戻される情報は、自装置(DKC#k)が書き込みを行うことに決められている情報、つまりDKC管理情報[k](202−k)のみである。またS106でQuorum Diskに書き戻す処理が完了した直後に、MP141は時計から現在時刻情報を取得し、取得した時刻情報をQuorum格納時刻領域250に書き込む。
最後にS107でMP141は、自DKCペア状態変更処理を行う。自DKCペア状態変更処理では、自装置のボリュームのペアステータスを変更する。S106までの処理を行った結果、ボリュームペアのペアステータスを「Suspend状態」に遷移させる必要がある場合には、ペアステータスをSuspend状態に変更する(ペア管理情報T300に格納されている、ボリュームペアのPair Status(T302)を「2」に変更する等)。逆に、Suspend状態であったボリュームペアをDuplex状態に遷移させる必要がある場合には、ボリュームペアの再同期処理を行い、再同期が完了した時点で、ペアステータスを「Duplex」に変更する(ペア管理情報T300に格納されている、ボリュームペアのPair Status(T302)を「1」に変更する)。
以下、S102(無応答判定処理)、S103(M−R間通信障害通知受領処理)、S104(通信不能ビットマップ編集処理)、S105(更新世代番号設定処理)で行われる処理の流れを説明する。これらのステップでは先に述べたとおり、DKC管理情報ステージングエリア200’に格納された情報を用いた処理が行われる。なお、説明が冗長になることを避けるため、DKC管理情報ステージングエリア200’に格納された各情報の表記方法を以下のように定める。
DKC管理情報ステージングエリア200’に格納された情報のうち、DKC配列割当表201の製番[0](201−0)〜製番[n−1](201−(n−1))のうち、たとえばDKC#mの製番は「DKC配列割当表.製番[m]」と表記する。
また、DKC管理情報ステージングエリア200’に格納されたDKC管理情報[0](202−0)〜DKC管理情報[n−1](202−(n−1))内の各情報を明確に特定するため、以下の表記方法が採用される。
まず、先にも述べたが、ここではDKC#kのMP141で、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006が実行されている場合について説明しており、このDKC#k(のMP141)のことを、「自DKC」または「自装置」と呼ぶ。そしてDKC管理情報[0](202−0)〜DKC管理情報[n−1](202−(n−1))のうち、自DKCが情報書き込みを行うDKC管理情報(DKC#kが自DKCであれば、DKC管理情報[k])のことを、「自DKC管理情報」と呼ぶ。
また、自DKC管理情報の中の、製番(2020)、更新世代番号(2021)等の各情報を特定する際、「自DKC管理情報」と各情報の名称とを、「.」(ピリオド)で連結して表記する。たとえば自DKC管理情報中の製番や更新世代番号はそれぞれ、「自DKC管理情報.製番」、「自DKC管理情報.更新世代番号」と表記される。また、前回世代[i](2028−i)、前回時刻[i](2029−i)も、「自DKC管理情報.前回世代[i]」、「自DKC管理情報.前回時刻[i]」と表記される(iは0≦i≦(n−1)の整数である)。
さらに、S102〜S105の処理の過程で、通信不能ビットマップA(2022)、通信不能ビットマップB(2023)、閉塞了承ビットマップ(2024)、応答不能ビットマップA(2025)、応答不能ビットマップB(2026)、回復中ビットマップ(2027)については、1ビットごとの参照、更新が行われる。そのため、これらの各ビットマップの特定のビット(たとえばj番目のビット)を特定するために、以下の表記方法が用いられる(jは0≦j≦(n−1)の整数である)。
(a) 通信不能ビットマップAのj番目のビットは、通信不能BM_A{j}と表記される。
(b) 通信不能ビットマップBのj番目のビットは、通信不能BM_B{j}と表記される。
(c) 閉塞了承ビットマップのj番目のビットは、閉塞了承BM{j}と表記される。
(d) 応答不能ビットマップAのj番目のビットは、応答不能BM_A{j}と表記される。
(e) 応答不能ビットマップBのj番目のビットは、応答不能BM_B{j}と表記される。
(f) 回復中ビットマップのj番目のビットは、回復中BM{j}と表記される。
そのため、たとえば自DKC管理情報に含まれている通信不能ビットマップAの、j番目のビットは、「自DKC管理情報.通信不能BM_A{j}」、と表記される。その他のビットマップについても、各ビットを特定する際には同様の表記がなされる。
また、自DKC管理情報以外のDKC管理情報についても、上で説明したものと同様の表記方法を用いて表記される。つまり、DKC管理情報[m](mは、0≦m≦(n−1)を満たす整数値)内の各情報を表現する際、「DKC管理情報[m]」と各情報の名称が、「.」を用いて連結された表記形式が用いられる。
S102〜S105の処理の説明に戻る。図14及び図15は、S102の処理、つまり無応答判定処理の流れを示している。無応答判定処理では主に、DKC管理情報[m](0≦m≦(n−1))が、(DKC#mによって)更新されているかを確認することで、DKC#mが(障害などの要因によって)停止していないか判定する処理を行う。
なお、以降の図に記載の式で、左辺と右辺が「=」で結合されている式は、右辺の値を左辺に代入する処理であることを意味する。また左辺と右辺が「==」で結合されている式は、左辺の値と右辺の値が等しいか否かを判定する処理であることを意味する。
S201でMP141は、自装置の配列番号を特定する。具体的には、DKC配列割当表.製番[0]〜DKC配列割当表.製番[n−1]の中で、自装置の製番と等しい値が格納されているものを特定する。たとえば、DKC配列割当表.製番[k](0≦k≦(n−1))が自装置の製番と等しい場合、kが自装置の配列番号であると特定される。以下、自装置の配列番号がkであった場合を例にとって説明する。S201でMP141は、変数selfblを用意し、変数selfblに値kを代入する。またS201の処理により、MP141は、DKC管理情報ステージングエリア200’に格納された情報(DKC管理情報[0](202−0)〜DKC管理情報[n−1](202−(n−1)))のうち、DKC管理情報[selfbl]が自DKC管理情報であると特定することができる。
次にMP141はDKC管理情報[0]〜DKC管理情報[n−1]について、S203〜S217のループ処理を実行する。S203でMP141は変数ctcを用意し、初期値に0を代入する。そしてMP141はS204〜S216の処理を1回実行した時点で、変数ctcの値に1を加算し、再びS204〜S216の処理を実行する。そして変数ctcの値がn(たとえば16)に到達した時点で、MP141はループ処理を終了する。
また、図14以降の各図面において「continue」と記載されている箇所(たとえば以下で説明するS204の判定処理で、判定結果が肯定的だった場合(S204:Yes)に進む処理)は、それ以降(S206以降)の処理は実行せず、ループ終了(S217)に進むことを意味する。S217(ループ終了)では、MP141は変数ctcの値に1を加算し、ctcの値がn未満であれば再びS204〜S216の処理を実行する。ただし変数ctcの値に1を加算した結果、ctcの値がn以上になった場合には処理を終了する。以下、S204〜S216の処理について説明していく。
S204でMP141は、DKC配列割当表.製番[ctc]またはDKC管理情報[ctc].製番の値が、NULL(0)であるか判定する。DKC配列割当表.製番[ctc]またはDKC管理情報[ctc].製番の値がNULLである場合(S204:Yes)、配列番号ctcのストレージ装置は、Quorum Diskへの登録処理が行われていない(ストレージシステム1内に、配列番号ctcのストレージ装置は存在しない)ことを意味する。そのためこの場合には、S205以降の処理は行わず、S217(ループ終了)に進む。一方DKC配列割当表.製番[ctc]及びDKC管理情報[ctc].製番の値がいずれもNULLではない場合(S204:No)、S206以降の処理が行われる。
S206ではMP141は、変数selfblと変数ctcの値が等しいか判定し、等しい場合(S206:Yes)には、S209以降の処理は行わず、S203に戻る。なぜならS209以降では、自DKC以外のストレージ装置(以下、これを「相手側DKC」と呼ぶ)のDKC管理情報[ctc]の内容を参照することで、相手側DKC(DKC#ctc)が停止しているか否かを判定する。変数selfblと変数ctcの値が等しい場合、DKC管理情報[ctc]は自DKC管理情報と同じものであり、参照する意味がないため、S209以降の処理は行われない(S217に進む)。変数selfblと変数ctcの値が等しくない場合(S206:No)には、S207以降の処理を行う。
S209ではMP141は、DKC管理情報[ctc].更新世代が、自DKC管理情報.前回世代[ctc]と等しいか判定する。DKC管理情報[ctc].更新世代が、自DKC管理情報.前回世代[ctc]と等しい場合(S209:Yes)、自DKCが前回無応答判定処理を実行した時から、DKC管理情報[ctc].更新世代の値が変更されていないことを意味する。この場合には、DKC#ctcが障害等の要因で停止している可能性があるので、S211以降で更なる確認が行われる。
一方S209の判定がNoの場合、自DKCが前回無応答判定処理を実行した後に、DKC管理情報[ctc].更新世代の値が変更されていることを意味する(DKC#ctcは動作していると判断できる)。その場合にはMP141は、自DKC管理情報.前回世代[ctc]に、DKC管理情報[ctc].更新世代の値を代入し、また自DKC管理情報.前回時刻[ctc]に0を代入し(S210)、S217に進む。S210で更新された、自DKC管理情報.前回世代[ctc]、自DKC管理情報.前回時刻[ctc]の情報は、次回無応答判定処理が実行された時に用いられる。
S211では、MP141は自DKC管理情報.前回時刻が0であるか判定し、0でない場合には(S211:No)、S213の処理を実行し、0である場合には(S211:Yes)、S212の処理を実行する。自DKC管理情報.前回時刻が0である場合とは、自DKCが前回無応答判定処理を実行した際、S210が実行されたことを意味する。つまり、前回無応答判定処理を実行した時まではDKC#ctcは正常で、今回初めて更新世代が更新されていないことを検出した場合に該当する。この場合にはS212で、MP141は、自DKC管理情報.前回世代[ctc]に、DKC管理情報[ctc].更新世代の値を代入し、また自DKC管理情報.前回時刻[ctc]には、時計から取得した現在時刻(S212を実施している時点の時刻)を代入する。そしてS217に進む。
S213では、現在の時刻と自DKC管理情報.前回時刻[ctc]を比較し、DKC#ctcが所定時間以上無応答の状態が続いているか(タイムアウトであるか)判定する。具体的には、
(現在の時刻−自DKC管理情報.前回時刻[ctc])≧閾値
であるか比較する(閾値はたとえば5秒等の値である)。この閾値のことを、以下では「タイムアウト時間」と呼ぶこともある。自DKC管理情報.前回時刻[ctc]にはS212を実行した時刻(更新世代が更新されていないことを初めて検出した時刻)が格納されている。つまりここでは、更新世代が更新されていないことを初めて検出した時刻から、タイムアウト時間に相当する時間が経過したかを判定しているといえる。タイムアウトでない(更新世代が更新されていないことを初めて検出した時刻から、まだタイムアウト時間に相当する時間は経過していない)場合には(S213:No)、S217に進む。
タイムアウトと判定された場合(S213:Yes)、MP141は自DKC管理情報に、DKC#ctcが所定時間以上Quorum Diskへの書き込みを行っていないと判断した(つまりDKC#ctcが停止しており、応答できない状態にあると判断した)ことを表す情報を格納する。具体的には、自DKC管理情報.応答不能BM_A{ctc}の値が「1」に設定される(S215)。
ただしS215の前に、MP141は、自DKC管理情報.通信不能BM_A{ctc}が「1」で、かつ、DKC管理情報[ctc].応答不能BM_A{selfbl}が0であるか判定し(S214)、この判定が肯定的である場合にS215を実行する。S214の判定が行われる理由は、DKC管理情報[ctc].応答不能BM_A{selfbl}をONにする条件として、タイムアウトになった(所定時間以上Quorum Diskへの書き込みが行われていない)という条件に加え、ストレージ装置10aからストレージ装置10bへのデータ転送(あるいはストレージ装置10bからストレージ装置10aへのデータ転送)が失敗した場合(図9または図10 S4の判定がNの場合)であることも、条件の1つにしているからである。
ストレージ装置10aからストレージ装置10b(あるいはストレージ装置10bからストレージ装置10aへのデータ転送)へのデータ転送が失敗した場合は、ストレージ装置10b(または10a)が障害で停止している可能性が高い。逆に単にタイムアウトになった場合には、ストレージ装置10の負荷が高いなどの要因で、Quorum Diskへの書き込みが遅れているだけで、ストレージ装置10が正常に稼働している可能性もある。そのため、本実施例の無応答判定処理では、ストレージ装置10が停止していることをより確実に判定するため、S214の判定を行っている。
S214の判定がNoである場合には、S215の処理は行わない。代わりに自DKC管理情報.前回時刻[ctc]に、タイムアウト時刻より所定時間だけ前の時刻(たとえばタイムアウト時刻より0.5秒前の時刻)を代入し(S216)、S217に進む。なお、タイムアウト時刻とはタイムアウトと判定される時刻のことで、
(更新世代が更新されていないことを検知した時刻した時刻(S212が行われた時刻))+タイムアウト時間=タイムアウト時刻
の関係にある。
続いて、M−R間通信障害通知受領処理の流れを、図16〜図19を用いて説明する。S301〜S306は、図14のS201〜S206と同じ処理である。
S307でMP141は、自DKC管理情報.回復中BM{ctc}が「1」であるか判定する。自DKC管理情報.回復中BM{ctc}が「1」の場合(S307:Yes)、S308、S309の処理が行われる。
S308でMP141は、DKC管理情報[ctc].通信不能BM_A{selfbl}、DKC管理情報[ctc].通信不能BM_B{selfbl}、DKC管理情報[ctc].閉塞了承BM{selfbl}、DKC管理情報[ctc].応答不能BM_A{selfbl}、DKC管理情報[ctc].応答不能BM_B{selfbl}のいずれか1つ以上が「1」であるか判定する。これらのビットのいずれかが「1」である場合とは、DKC#ctcが回復処理中であることを意味する。そのため、これらのビットのいずれかが「1」である場合(S308:Yes)、S322(ループ終了)に進む。これらのビットの全てが[0]である場合(S308:No)、MP141は自DKC管理情報.回復中BM{ctc}を「0」にする(S309)。
S309の処理の後、あるいはS307の判定で自DKC管理情報.回復中BM{ctc}が「0」の場合(S307:No)、MP141はDKC管理情報[ctc].通信不能BM_A{selfbl}が「1」であるか判定する(S310)。DKC管理情報[ctc].通信不能BM_A{selfbl}が「1」である場合(S310:Yes)とは、相手側のDKC(DKC#ctc)が、自DKCとDKC#ctc間のパスによるデータ通信が不可能であると判断していることを意味する。この場合MP141は、S313以降の処理を実行して、自装置の論理ボリュームを閉塞状態にすべきか判定する。一方DKC管理情報[ctc].通信不能BM_A{selfbl}が「0」である場合(S310:No)には、MP131は自DKC管理情報.閉塞了承BM{ctc}と、自DKC管理情報.通信不能BM_B{ctc}を「0」にして(S311,S312)、S318以降の処理に進む。
S313では、MP141は、以下の(a)〜(c)の3条件のいずれかに該当するかを判定する。
(a) 自装置が、自装置とDKC#ctcとの間のパスが遮断されていることをまだ検知していない(自DKC管理情報.通信不能BM_A{ctc}が0)
(b) 自装置が、自装置とDKC#ctcとの間のパスが遮断されていることを検知し(自DKC管理情報.通信不能BM_A{ctc}が1)、かつ自装置の製番がDKC#ctcの製番よりも大きい(自DKC管理情報.製番>DKC管理情報[ctc].製番)
(c) DKC#ctcは、自装置が応答不能の状態にあると判断している(実DKC管理情報[ctc].応答不能BM_A{selfbl}が1である)
本実施例に係るストレージシステムでは、ストレージ装置10間のパスが遮断された場合、1台のストレージ装置10について、当該ストレージ装置10のボリュームをI/O不可(Invalid状態。ホスト2からのI/O要求の受け付けを禁止)にする。この時、原則としてホスト2からのI/O要求を受け付け中のストレージ装置10のボリュームについてはI/O不可にしないように制御される。そのため、たとえばストレージ装置10aからストレージ装置10bへのデータ転送が失敗した場合(図9 S4の判定がNの場合)には、原則として、ストレージ装置10aのボリューム(P−VOL)はI/O不可にしないように制御される。
詳細は後述するが、自DKCから相手側ストレージ装置へのデータ転送が失敗した場合には、自DKC管理情報.通信不能BM_A{ctc}が1になる。そのため自DKCから相手側ストレージ装置へのデータ転送が失敗した場合には、上の条件(a)に該当しないため、S314以降の処理が行われない。逆に相手側DKCでは自DKC管理情報.通信不能BM_A{ctc}が0になるため、上の条件(a)に該当することになり、S314以降の処理が行われる。
ただし、ストレージ装置10a、ストレージ装置10bの両方が、ほぼ同時期に相手側ストレージ装置へのデータ転送を行っている場合もあり得る(ストレージ装置10a、10bの両方で、図9または図10の処理を行っている場合)。その場合、両方のストレージ装置10で、通信不能BM_Aが1になっている。その場合には、自DKCと相手側ストレージ装置の製番を比較し、製番が大きいストレージ装置10のボリュームをI/O不可にするように制御される。そのために、条件(b)が設けられている。
また、相手側ストレージ装置で、すでに自DKCが応答不能状態と判断している場合には、相手側ストレージ装置のボリュームをI/O不可にしないように制御される。そのために条件(c)が設けられている。
上の3条件のいずれかに該当する場合(S313:Yes)、S314の処理が実行される。上の3条件のいずれにも該当しない場合(S313:No)、S314〜S316の処理は実行されず、MP141はS317の処理を実行する。S317ではMP141は、自DKC管理情報.通信不能BM_B{ctc}を「1」にする(つまり、「相手DKC(DKC#ctc)が自装置との間のパスが遮断されたことを検知した」という事実を、自装置が検知した旨を記録する)。
S314ではさらに、MP141は以下の(d)〜(f)の3条件すべてに該当するか判定する。
(d) DKC#ctcのボリュームがInvalid状態でない(DKC管理情報[ctc].閉塞了承BM{selfbl}が0)
(e) 自装置は、DKC#ctcが応答不能と判定していない(自DKC管理情報.応答不能BM_A{ctc}が0)
(f) 自装置のボリュームがInvalid状態でない(自DKC管理情報.閉塞了承BM{ctc}が0)
条件(d)〜(f)の意味について概説する。相手側DKC(DKC#ctc)が閉塞している場合(あるいは相手側DKCでボリュームがI/O不可(Invalid状態)にされている場合)、自装置のボリュームをI/O不可にするべきではない。そのために条件(d)、(e)が設けられている。
また、すでに自装置のボリュームがI/O不可(Invalid状態)である場合には、これ以上自装置のボリュームをI/O不可にする処理は不要である。これを判定するために条件(f)が設けられている。
上の3条件のすべてに該当する場合(S314:Yes)、MP141は自装置の論理ボリュームをI/O不可(Invalid)状態にする(S315)。具体的には、論理ボリュームのステータス(LDEVステータス情報T400のStatus(T402))を「Invalid」にし、また自装置の論理ボリュームが属するボリュームペアのペアステータス(ペア管理テーブルT300のPair Status(T302))を「Suspend状態」にする。
S315の後、MP141は、自DKC管理情報.閉塞了承BM{ctc}を「1」にし(S316)、S317以降の処理を実行する。S317の処理は先に述べたとおりである。
S318以降は、相手側DKC(DKC#ctc)が自装置を応答不能状態と判定している場合の処理である。この場合、自装置の論理ボリュームを閉塞状態にする。
S318でMP141は、DKC管理情報[ctc].応答不能BM_A{selfbl}が1か確認することにより、DKC#ctcが自装置を応答不能と判断しているか判定する。DKC管理情報[ctc].応答不能BM_A{selfbl}が1でない場合(S318:No)、MP141は自DKC管理情報.応答不能BM_B{ctc}を0に設定し(S325)、S322に進む。S325の処理は、リシンク処理の場合に実行される処理である。
DKC管理情報[ctc].応答不能BM_A{selfbl}が1である場合(S318:Yes)、MP141は自DKC管理情報.応答不能BM_B{ctc}が0か判定する(S319)。自DKC管理情報.応答不能BM_B{ctc}が0の場合には(S319:Yes)、S320の処理を実行する。この処理はS315と同じである。そして自DKC管理情報.応答不能BM_B{ctc}を1にして(S321)、S322に進む。
自DKC管理情報.応答不能BM_B{ctc}が1の場合(S319:No)とは、すでに、過去に行われたM−R間通信障害通知受領処理によって、MP141は自装置の論理ボリュームがInvalid状態にされている(過去にS320、S321が実行された)場合である。そのため、S320、S321の処理は実行せずにS322に進む。
続いて、通信不能ビットマップ編集処理の流れを、図20、図21を用いて説明する。通信不能ビットマップ編集処理は、自DKC管理情報.通信不能BM_Aをセットまたはリセットする処理である。自DKC管理情報.通信不能BM_Aは、自DKCが相手DKCとの通信が不可能である状態を表す情報であるから、ヘルスチェック処理(図12)の場合には、セットされない。逆に、ホスト2からのライト要求に係る処理の過程で、相手側DKCへのデータ書き込みが失敗した場合(たとえば図9 S4:Nの場合)に、自DKC管理情報.通信不能BM_Aがセットされる。またリシンク処理(図11)の場合には、自DKCが相手DKCとの通信が可能になるので、自DKC管理情報.通信不能BM_Aがリセットされる。
S401は、図14のS201と同じ処理である。
S403ではMP141は、呼び出し元プログラムから渡された処理種別を参照し、処理種別が「ヘルスチェック」であるか判定する。処理種別が「ヘルスチェック」である場合(S403:Yes)、処理を終了する。処理種別が「ヘルスチェック」でない場合(S403:No)、S404以降の処理が実行される。
S404でMP141は、相手側DKCの配列番号を特定する。具体的には、DKC配列割当表.製番[0]〜DKC配列割当表.製番[n−1]の中で、呼び出し元プログラムから渡された相手側装置の製番と等しい値が格納されているものを特定する。たとえば、DKC配列割当表.製番[j](0≦j≦(n−1))が相手側装置の製番と等しい場合、jが相手側DKCの配列番号であると特定される。以下、相手側DKCの配列番号がjであった場合を例にとって説明する。
MP141は、変数mateblを用意し、変数mateblに値jを代入する。これによりDKC管理情報[matebl]が、相手側DKCのDKC管理情報と特定できる。以下、DKC管理情報[matebl]のことを、「相手DKC管理情報」と表記する。
S406ではMP141は、呼び出し元プログラムから渡された処理種別を参照し、処理種別が「障害サスペンド」であるか判定する。処理種別が「障害サスペンド」である場合(S406:Yes)、S407の処理が実行される。一方、処理種別が「障害サスペンド」でない場合(S406:No)とは、処理種別に「リシンク」が指定されている。この場合にはS409以降の処理(図21)に進む。
S407ではMP141は、自DKC管理情報.閉塞了承BM{matebl}が0であるか判定する。つまり相手側DKCのボリュームとペア関係にある自DKCのボリュームを閉塞したか否かを判定する。自DKC管理情報.閉塞了承BM{matebl}が0である場合(S407:Yes。つまり相手側DKCのボリュームとペア関係にある自DKCのボリュームを閉塞していない場合)、MP141は、自DKC管理情報.通信不能BM_A{matebl}を1にする(S408)。
S409以降は、処理種別として「リシンク」が指定された場合に行われる処理である。MP141は、自DKC管理情報.通信不能BM_A{matebl}、自DKC管理情報.通信不能BM_B{matebl}、自DKC管理情報.閉塞了承BM{matebl}、自DKC管理情報.応答不能BM_A{matebl}、自DKC管理情報.応答不能BM_B{matebl}をすべて0にする(S409〜S413)。
S414でMP141は、相手DKC管理情報.通信不能BM_A{matebl}、相手DKC管理情報.通信不能BM_B{matebl}、相手DKC管理情報.閉塞了承BM{matebl}、相手DKC管理情報.応答不能BM_A{matebl}、相手DKC管理情報.応答不能BM_B{matebl}のいずれか1つ以上のビットが1であるか判定する。これらのいずれかのビットが1である場合には、まだ相手側DKCの状態は正常な状態ではないため、MP141は自DKC管理情報.回復中BM_A{matebl}を1にして(S415)、処理を終了する。すべてのビットが0である場合には(S414:No)、S415を実行せずに処理を終了する。
リシンク時の通信不能ビットマップ編集処理は、自DKC、相手側DKCの両方で並行して実行される。自DKC、相手側DKCの両方で同期してリシンク処理を完了させたいため、自DKCでは、相手側DKCの通信不能BM_A{matebl}、通信不能BM_B{matebl}、閉塞了承BM{matebl}、応答不能BM_A{matebl}、応答不能BM_B{matebl}がすべてOFF(0)になるまでは、回復中BM_A{matebl}を1にしておき、リシンク処理中の状態を維持する。また相手側DKCでも同様の処理が行われる。
図22は、更新世代番号設定処理のフローチャートである。更新世代番号設定処理は、自DKCのDKC管理情報(前に設定した処理と同様、これを「自DKC管理情報」と呼ぶ)。の更新世代番号に1を加算する処理である。S501でMP141は自DKCの配列番号を特定する。これはS201と同様の処理である。以下、自DKCの配列番号がkで、自DKC管理情報=DKC管理情報[k]の関係にあるとする。
S502でMP141は、自DKC管理情報.更新世代番号(つまりDKC管理情報[k].更新世代番号)に1を加算し、処理を終了する。
図23は、自DKCペア状態変更処理のフローチャートである。
S601は、自DKCの配列番号を特定する処理である。これはS201等と同様である。またS603は、相手側DKCの配列番号を特定する処理である。これはS404と同様の処理である。
S604で、MP141は呼び出し元プログラムから渡された処理種別がリシンクであるか判定し、リシンクである場合にはS607、S608の処理を実行する。リシンク以外の場合には、S605、S606の処理が実行される。
S605で、MP141は相手側DKCでボリュームがInvalid状態にされているか(DKC管理情報[matebl].閉塞了承BM{selfbl}が1であるか)、相手側DKCが応答不能の状態にあるか(自DKC管理情報.応答不能BM_A{matebl}が1か)を判定する。いずれかの条件に該当する場合には(S605:Yes)、MP141はペア管理テーブルT300内の、相手側DKCのボリュームとペア関係にあるボリュームのペアステータス(T302)を変更し、併せて変更中フラグ(T307)をOFFにし(S606)、処理を終了する。S605の判定でいずれの条件にも該当しない場合には(S605:No)、MP141はS606を実行せずに処理を終了する。
相手側DKCでボリュームがInvalid状態にされている場合、あるいは相手側DKCが応答不能の状態にある場合とは、いずれもボリュームペアは同期不可能な状態であるので、自DKC側のボリュームペアのうち、相手側DKC(DKC#matebl)のボリュームとペア関係にあるボリュームについては、ペアステータス(ペア管理テーブルT300のPair Status(T302))を2(Suspend)に変更する。またボリュームのステータス(Status(T402))は「Valid」とする。
S607で、MP141は自DKC管理情報.回復中BM{matebl}がON(1)であるか判定する。OFF(0)の場合には(S607:No)、相手側DKCも回復されていることを意味する。そのため、MP141はペア管理テーブルT300内の、相手側DKCのボリュームとペア関係にあるボリュームのペアステータス(T302)を3(Duplex−Pending)に変更し、併せて変更中フラグ(T307)をOFFにし(S608)、処理を終了する。
(6) 具体例
以下では、ストレージ装置10に障害が発生した時、またはストレージ装置10aとストレージ装置10b間のパス(DKC間パス)に障害が発生した場合を例にとって、ストレージシステム1で行われる処理の流れを説明する。また最後に、Quorum Diskへの書き込みが遅延した場合の、ストレージシステム1の動作について説明する。
(6−1) ストレージ装置10に障害が発生した場合
以下では一例として、ストレージ装置10bに障害が発生し、ストレージ装置10bが停止した場合について説明する。なお、上で述べたとおり、ストレージシステム1には、2台より多くのストレージ装置10が含まれる構成もあり得るが、以下では説明の簡単化のため、ストレージシステム1にはホスト2とQuorum Storage15の他には、2台のストレージ装置10(ストレージ装置10a及び10b)のみが存在する構成を例にとって説明する。ストレージ装置10aにはP−VOLが存在し、当該P−VOLとペア関係にあるS−VOLがストレージ装置10bに存在しているものとする。また、Quorum Diskへの登録処理が行われた結果、ストレージ装置10aの配列番号が0、ストレージ装置10bの配列番号が1に決定されているものとする。
ホスト2からストレージ装置10aが、P−VOLに対するライト要求を受信すると、ストレージ装置10aではI/Oプログラム1001が実行される、つまり図9の処理が実行される。図9の処理の実行過程で、S−VOL(S−VOLのあるストレージ装置10b)に対してライト要求を発行するが(図9 S3)、ストレージ装置10bは障害が発生して停止しているため、S−VOLに対するライト処理は失敗する。そのためI/Oプログラム1001はQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006を呼び出す(S11)。
Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006が実行されると、上で説明したとおり、MP141はDKC管理情報ステージングエリア200’にDKC配列割当表201、DKC管理情報格納領域202の情報を読み出し、S102以降の処理を実施する。なお、ストレージ装置10aのMP141でQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006が実行される場合、DKC管理情報[0]が、自DKC管理情報であり、DKC管理情報[1]が相手側DKC管理情報である(ストレージ装置10a、10bの配列番号がそれぞれ0、1だからである)。
ストレージ装置10aでS102(無応答判定処理)が行われる時の処理の流れを説明する。なお、ストレージシステム1に2台のストレージ装置10a、10bのみが存在する構成の場合、無応答判定処理では、自DKC管理情報(DKC管理情報[0]である)をDKC管理情報[1]と比較する処理のみが行われる。
ストレージ装置10bが停止している場合、DKC管理情報[1]の更新世代番号の更新も停止する。そのためストレージ装置10aがS209の判定を行うと、判定結果はYesになり、S211が実行される。ストレージ装置10bが停止してからはじめてS211が実行される場合には、自DKC管理情報.前回時刻には0が格納されている。そのため、S212でMP141は、自DKC管理情報.前回世代[1]に、DKC管理情報[1].更新世代の値を代入し、また自DKC管理情報.前回時刻[1]には、現在の時刻を代入し、無応答判定処理(S102)が終了する。
続いてストレージ装置10aのMP141は、S103(M−R間通信障害通知受領処理)を実行する。ただしストレージ装置10bが停止してからはじめてS103が実行される場合には、以下に説明する通り、目立った処理(特定のビットマップをONにする等)は行われない。
S307の判定が実行される際、自DKC管理情報.回復中BM[1]は0であるから、S308,S309の処理は行われず、S310の判定が行われる。またS310の判定では、DKC管理情報[1].通信不能BM_A{0}はOFF(0)である(ストレージ装置10bは障害で停止したため、DKC管理情報[1].通信不能BM_A{0}をONにすることなく停止しているからである)ので、S311,S312で、自DKC管理情報.閉塞了承BM{1}、自DKC管理情報.通信不能BM{1}がOFFにされる。その後、S318以降の処理が実行される。
S318の判定において、DKC管理情報[1].応答不能BM_A{0}はOFF(0)である(上で述べた理由と同様である。ストレージ装置10bは障害で停止したため、DKC管理情報[1].応答不能BM_A{0}をONにすることなく停止している)ので、自DKC管理情報.応答不能BM_B{1}をOFFにして(S325)、M−R間通信障害通知受領処理は終了する。
続いてストレージ装置10aのMP141は、S104(通信不能ビットマップ編集処理)を実行する。この時呼び出し元プログラムから処理種別として「障害サスペンド」が指定されているので、S407、S408の処理が実行される。S407、S408の処理の結果、MP141は、自DKC管理情報.通信不能BM_A{1}をONにして、処理を終了する(なお、自DKC(ストレージ装置10a)ではボリュームをInvalid状態にする処理は行っていないため、S407の判定(自DKC管理情報.閉塞了承BM{1}がOFFか?)はYesとなる)。
続いてストレージ装置10aのMP141は、S105(更新世代番号設定処理)を実行する。ここでは自DKC管理情報.更新世代番号が1加算される。その後S106で、自DKC管理情報がQuorum Diskに書き戻される。
また、S106の後、S107が実行されるが、この段階では、自DKC管理情報.応答不能BM_A{1}は0であるので、S107ではペア状態変更は行われないまま、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006は終了する。
全ボリュームペアの状態が変更されるまでは、所定時間の後(S14)、繰り返しQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006が実行される(S11)。以下、ストレージ装置10bが無応答になって(Quorum Diskへの書き込みを行わなくなり)、タイムアウト時間が経過した後に、ストレージ装置10aでS11が実行された場合について、以下で説明する。
この場合、S102(無応答判定処理)の中で、タイムアウトの判定(S213)が行われることにより、S214の判定が行われる。この処理が行われるよりも前に、自DKC管理情報.通信不能BM_A{1}はONにされている(通信不能ビットマップ編集処理 S408が実行されることによって)。またDKC管理情報[1].応答不能BM_A{0}はOFFであるので、自DKC管理情報.応答不能BM_A{1}がONにされる(S215)。
自DKC管理情報.応答不能BM_A{1}がONにされたので、この後に行われるS107(自装置のボリュームペアのペア状態変更)で、ストレージ装置10aは、ストレージ装置10bとペア関係にあるボリュームのペアステータスをSuspendに変更し(なお、上でも述べたとおりこの場合、ボリュームのステータス(Status(T402))は「Valid」とし、ホスト2からのI/O要求は受付可能としている)、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006の実行(S11)を終了する。その後ストレージ装置10aは、ホスト2から受け付けたI/O処理を再開する(S12、S13、S5)。
このように、ストレージ装置10aは、ストレージ装置10bが定期的にQuorum Diskに書き込むヘルスチェック情報(DKC管理情報)を参照することで、ストレージ装置10bが停止している(つまりそのためにS−VOLがアクセス不可能になっている)ことを確認し、ストレージ装置10bが停止していることを確認した後I/O処理を再開するようにしている。これにより、ホスト2が誤ったデータ(S−VOL)にアクセスすることがないようにしている。
一方ストレージ装置10bは、ストレージ装置10bで発生した障害が修復された後、再起動される。再起動後、ストレージ装置10bでは、ヘルスチェックプログラム1005が実行されることにより、Quorum Diskの読み出し、及びQuorum Diskから読み出したDKC管理情報の内容の参照が行われる。本例の場合、Quorum Diskを読み出した結果、ストレージ装置10bはDKC管理情報[0].応答不能BM_A{1}がONになっていることを確認する。これによりストレージ装置10bは、ストレージ装置10aはストレージ装置10bが無応答(障害などの要因で停止)になったために、ボリュームペアをSuspend状態にしていると理解する。
そのためストレージ装置10bは、ペア管理テーブルT300の各ボリュームペアのペアステータス(T302)を2(Suspend)にする。またLDEVステータス情報T400に格納されている各論理ボリュームの中で、ストレージ装置10aのボリュームとペア関係にある論理ボリュームのStatus(T402)を1(Invalid)にする。これによりストレージ装置10bは、ホスト2から、ストレージ装置10aのボリュームとペア関係にあるボリュームに対するI/O要求を受け付けず、ホスト2が誤ったデータにアクセスすることを抑止する。その後ユーザがリシンク指示をストレージ装置10に発行すると、ストレージ装置10でリシンク(再同期)が行われ、ストレージ装置10a、10b内のボリュームペアの状態はDuplex状態になる。リシンクの完了の後、ストレージシステム1は従来通り、正常に稼働を始める。
上で説明した処理の流れでは、DKC管理情報[0].応答不能BM_A{1}がONになっていなければ、ストレージ装置10bは再起動時に、ボリュームのStatus(T402)をInvalidにしない。再起動時にDKC管理情報[0].応答不能BM_A{1}がONになっていない場合とは、たとえばストレージ装置10bは障害で停止したが、その間ホスト2からライト要求が到来しなかった場合が挙げられる。この場合、ストレージ装置10aと10bでボリュームの内容は一致(同期)しているため、再同期の必要がない(Duplex状態を維持していてもよい)。そのため、本実施例のストレージシステム1では、DKC管理情報[0].応答不能BM_A{1}がONになっていなければ、ストレージ装置10bは再起動時に、ボリュームのStatus(T402)をInvalidにしない。ただし別の実施形態として、ストレージ装置10の再起動時は、各論理ボリュームのStatus(T402)を一律Invalidにするようにしてもよい。
(6−2) DKC間パスに障害が発生した場合
以下では一例として、ストレージ装置10a、10b間のパスに障害が発生した場合(ただしストレージ装置10は正常に稼動している)について説明する。なお、(6−1)と同様、ストレージシステム1にはホスト2とQuorum Storage15の他には、2台のストレージ装置10(ストレージ装置10a及び10b)のみが存在する構成を例にとって説明する。ストレージ装置10aにはP−VOLが存在し、当該P−VOLとペア関係にあるS−VOLがストレージ装置10bに存在しているものとする。また、Quorum Diskへの登録処理が行われた結果、ストレージ装置10aの配列番号が0、ストレージ装置10bの配列番号が1に決定されているものとする。
(6−1)のケースと同様、ストレージ装置10aがホスト2から、P−VOLに対するライト要求を受信すると、図9の処理が実行される。図9の処理の実行過程で、S−VOL(S−VOLのあるストレージ装置10b)に対してライト要求を発行するが(図9 S3)、DKC間パスに障害が発生しているためにS−VOLに対するライト処理は失敗する(なお、DKC間パスが複数設けられている場合、全てのDKC間パスに障害が発生している場合に、S−VOLに対するライト処理が失敗する)。そのためI/Oプログラム1001はQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006を呼び出す(S11)。
(6−1)のケースと同様、この場合Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006が(ペア状態の変更が完了するまで)何回か実行される。1回目のQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006の実行の際には、(6−1)で説明したものと同様の処理が実行され、自DKC管理情報.通信不能BM_A{1}がONに設定される。
(6−1)のケースでは、ストレージ装置10bが無応答になって、タイムアウト時間が経過した後で、ストレージ装置10aでQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006が実行されると、自DKC管理情報.応答不能BM_A{1}がONにされた(S215)。一方(6−2)のケースでは、ストレージ装置10bは停止していないため、ストレージ装置10bからQuorum Diskに対する書き込みは継続的に実施される。そのためストレージ装置10aにおいて、自DKC管理情報.応答不能BM_A{1}がONにされることはない。
ただし(6−2)のケースでは、ストレージ装置10bは、ストレージ装置10bで定期的に実行されるヘルスチェック処理(S41)により、ストレージ装置10aがQuorum Diskに書き込んだ自DKC管理情報(DKC管理情報[0])の内容を参照する。そしてそれにより、自DKC管理情報.通信不能BM_A{1}の内容が変化したことを検知する。以下、ストレージ装置10bでヘルスチェック処理が実行されることで生じる、各種管理情報の状態遷移について説明する。なお、以下では、ストレージ装置10aが、自DKC管理情報.通信不能BM_A{1}をONにした後の、ストレージ装置10bでの状態推移を説明する。
ストレージ装置10bでヘルスチェック処理が実行されると、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006が呼び出され、S101〜S107の処理が実行される。このうち、無応答判定処理(S102)では、特に何も行われない。これはストレージ装置10a、10bともに停止していないため、定期的に更新世代番号をQuorum Diskに書き込んでいるからである。
S103(M−R間通信障害通知受領処理)では、DKC管理情報[0].通信不能BM_A{1}がONになっているため、S313〜S317の処理が実行される。その結果、ストレージ装置10bでは、S−VOLを閉塞(Invalid)状態にし(S315)、自DKC管理情報.閉塞了承BM{0}(DKC管理情報[1].閉塞了承BM{0})をONにする(S316)。これによりストレージ装置10bは、ストレージ装置10aのボリュームとペア関係にあるボリュームに対するホスト2からのI/O要求を受け付けなくなるので、ホスト2が誤ったデータにアクセスすることを抑止できる。
そしてストレージ装置10bはS317で、自DKC管理情報.通信不能BM_B{0}(DKC管理情報[1].通信不能BM_B{0})を「1」にする(つまり、相手DKC(DKC#0)が自装置(DKC#1)との間のパスが遮断されたことを検知したという事実を、自装置が検知した旨を記録する)。ここで更新された情報(DKC管理情報[1].閉塞了承BM{0}、DKC管理情報[1].通信不能BM_B{0})は、S106でQuorum Diskに書き込まれる。
ストレージ装置10bのヘルスチェック処理(S41)によってQuorum Diskに書き込まれた情報は、ストレージ装置10aで実行されるQuorum使用のヘルスチェック/ペア状態変更処理プログラム1006によって読み取られる。ストレージ装置10aで実行される、Quorum使用のヘルスチェック/ペア状態変更処理プログラム1006では、DKC管理情報[1].閉塞了承BM{0}がONであることを検知する(S605)。
DKC管理情報[1].閉塞了承BM{0}がONである場合、DKC#1(つまりストレージ装置10b)では、DKC#0(ストレージ装置10a)とペア関係にあるボリュームがInvalid状態になっている(また同時にペアステータスはSuspend状態になっている)。
そのためストレージ装置10aでは、ストレージ装置10bのS−VOLはホスト2からのI/O要求を受け付けられない状態にあると理解することができるので、ストレージ装置10aは、ストレージ装置10bとペア関係にあるボリュームペアについて、ペアステータスをSuspendに変更する(ただしボリュームの状態(LDEVステータス情報T400のStatus(T402)は、0(Valid)として、ホスト2からのI/Oを受け付け可能な状態にしておく)。その後、ストレージ装置10aは、ホスト2から受け付けているライト要求に係る処理を再開し、ホストに応答を返却する(S5)。
なお、上の説明では、ホスト2が(ストレージ装置10aの)P−VOLに対してライト要求を発行した時の、ストレージシステム1の状態の遷移を説明したが、ホスト2がS−VOL(ストレージ装置10b)にライト要求を発行した場合も、上で説明したものと同様の処理が行われる。ストレージ装置10bは(ストレージ装置10aの)P−VOLが閉塞(Invalid)状態になったことを確認して、ライト要求に係る処理を再開する。
(6−3) Quorum Diskへの書き込みが遅延した場合
上で説明した(6−2)のケースでは、ストレージ装置10bは、ストレージ装置10bで定期的にヘルスチェック処理(S41)を実行していることが前提のケースである。ただし、ストレージ装置10bで定期的にヘルスチェック処理が行われず、Quorum Diskへの書き込みが遅延する場合もある。これはたとえば、ストレージ装置10bのMP141の負荷が高くなりすぎた場合に発生し得る。このような場合でも、ホスト2が誤ったデータにアクセスすることを防ぐ必要がある。
以下では(6−2)と同様に、ストレージ装置10a、10b間のパスに障害が発生した場合(ただしストレージ装置10は正常に稼動している)について説明する。なお、ストレージシステム1の構成は、(6−1)または(6−2)で説明したものと同じとする。また(6−3)では、ストレージ装置10bは正常に稼動しているが、ストレージ装置10bのMP141が過負荷状態にあるなどの理由で、ヘルスチェック処理を定期的に行うことが出来ない状態にあり、結果として、一定時間以上(たとえば上で述べたタイムアウト時間以上)ヘルスチェック処理が実施されなかった場合を想定する。
この場合、ストレージ装置10bは正常に稼動しているものの、Quorum Diskへのヘルスチェック情報の書き込みが行われないため、ストレージ装置10aは(6−1)で説明した場合と同様に、自DKC管理情報.応答不能BM_A{1}をONにし(S215)、ストレージ装置10bとペア関係にあるボリューム(P−VOL)のペアステータスをSuspendに変更する(S107(自DKCペア状態変更処理)が実行されることにより、ボリュームのペア状態が変更される)。ただしこの時、ストレージ装置10aのボリュームのステータスはInvalid状態にはされない(Valid状態のままである)。そのため、この後でホスト2からストレージ装置10aのボリューム(P−VOL)に対してライト要求が到来した場合には、P−VOLへのデータ書き込みが行われる。
一方で、ストレージ装置10bは正常に稼動しているが、ヘルスチェック処理を定期的に行うことが出来ない状態である。そのため、ストレージ装置10bでは、ボリュームのペアステータス(T302)、ボリュームのStatus(T402)は変更されない。つまりストレージ装置10bにおいて、ストレージ装置10aのボリュームとペア関係にあるボリュームはいずれも、ペアステータス(T302)は「Pair」、ボリュームのステータス(T402)は「Valid」状態にある。
ここで、ストレージ装置10aにおいてP−VOLのペア状態が(Suspendに)変更された後で、ホスト2がP−VOLのある領域(仮にこの領域のアドレス(LBA)がAであったとする)にデータを書き込んだとすると、そのデータはストレージ装置10bのボリューム(S−VOL)には反映されない。その後ホスト2がS−VOLの同領域(アドレスA)のデータをリードする要求をストレージ装置10bに発行した場合、ストレージ装置10bがS−VOLに格納されているデータを返送すると、ホスト2がP−VOLに書き込んだデータは返送されず、誤ったデータが返送されることになる。
本実施例のストレージシステム1では、このような場合にホスト2に誤ったデータが返送されないように、リード要求を受信したときには、以下に説明するような処理が行われる。
図24は、ストレージ装置10が論理ボリューム(P−VOLまたはS−VOL)に対するリード要求を受け付けた時に行われる処理の流れを示している。ストレージ装置10が論理ボリュームに対するリード要求を受け付けると、まずMP141は、ペア管理情報T300を参照することで、アクセス対象論理ボリュームの状態がDuplex状態か否か確認する(S51)。論理ボリュームの状態がDuplex状態でない場合(S51:No)、S54以降の処理が行われる。
S54では、MP141はLDEVステータス情報T400を参照し、アクセス対象論理ボリュームのStatus(T402)が「Invalid」状態か否か判定する。Invalid状態である場合(S54:Yes)には、リード要求の要求元(ホスト2など)にエラーを応答し(S56)、処理を終了する。Valid状態である場合(S54:No)には、アクセス対象ボリュームからデータをリードし、リード要求の要求元(ホスト2など)にリードデータ及び処理が成功した旨の応答を返却し(S55)、処理を終了する。
一方、S51で論理ボリュームの状態がDuplex状態である場合(S51:Yes)、MP141はQuorum格納時刻領域250に格納されている時刻情報(以下、これを「格納時刻」と呼ぶ)を読み出す(S52)。S53では、MP141は現在時刻と格納時刻の差が、所定の上限値を超過しているか否か判定し、所定の上限値を超過していない場合には(S53:No)、先に説明したS54以降の処理を行う。所定の上限値を超過している場合には(S53:Yes)、所定時間待機し(S58)、その後再びS51の処理を実行する。S53での上限値とは、一例として、(先に説明したタイムアウト時間−0.5秒)などの時間である。
ストレージ装置10がヘルスチェック処理等を実行したことによりQuorum Diskに対するヘルスチェック情報の書き込みを行った場合、Quorum格納時刻領域250に、そのときの時刻情報を格納する(S106)。そのためS52、S53の判定が行われることによって、MP141は、ストレージ装置10が最後にQuorum Diskに対する書き込みを行ってからの経過時間を知ることが出来る。
ストレージ装置10が最後にQuorum Diskに対する書き込みを行ってからの経過時間が、一定時間(上限値)を超過している場合、ストレージ装置10でのヘルスチェック処理(Quorum Diskへの書き込み)が遅延している可能性がある。ヘルスチェック処理が遅延している場合、本来はボリュームの状態が(Invalid状態等に)変更される必要があるにもかかわらず、ヘルスチェック処理が遅延しているために、ボリューム状態の適切な変更が行われていない可能性がある。そのためストレージ装置10では、Quorum Diskへの書き込みが行われるのを待って(S58)から、リード処理を行うようにしている。
なお、上で説明した処理の順序は、上で説明した順序に限定されるものではない。ボリュームからのデータリードを行う前に、現在時刻よりも所定時間以内にQuorum Diskへの書き込みが行われていることが確認できれば良い。そのためたとえばS52、S53、S58の処理を、S51の処理(ペアステータスを確認する処理)の前に実行するようにしてもよい。
(6−3)のケースの説明に戻る。ストレージ装置10bで一定時間以上(たとえば上で述べたタイムアウト時間以上)ヘルスチェック処理が実施されなかった場合に、ストレージ装置10bのS−VOLに対してホスト2からリード要求を受信すると、上で説明した処理(図24)が行われる。この場合、S53で現在時刻と格納時刻が、
(現在時刻―格納時刻)>上限値
の関係にあると判定されるため、所定時間待機し(S58)、ふたたびS51からの処理が行われる。
ここで、リード要求に係る処理が所定時間待機(S58)している間に、ストレージ装置10bでヘルスチェック処理(Quorum Diskへの書き込み)が実行された場合を想定する。その場合、ストレージ装置10bは(6−2)で説明した処理を行うため、ストレージ装置10bのボリューム(ストレージ装置10aのP−VOLとペア関係にあるボリューム)のステータス(Status(T402))は「Invalid」に変更される(またペアステータスは「Suspend」にされる)。
リード要求に係る処理では、所定時間待機(S58)の後、再びS51からの処理を再開する。そうすると、S51の後、MP141はS54の処理を行うが、アクセス対象ボリュームのステータスは「Invalid」に変更されているため、MP141はホスト2にエラーを応答して処理を終了する(つまりホスト2に誤ったデータを返却しない)。
以上が、本発明の実施例に係るストレージシステムの説明である。本発明の実施例に係るストレージシステムは、それぞれが1以上のボリュームを有する第1ストレージ装置と第2ストレージ装置と、第1ストレージ装置と第2ストレージ装置がアクセス可能なQuorum Diskとで構成され、第1ストレージ装置の第1ボリュームと第2ストレージ装置の第2ボリュームとの間でデータが二重化される。第1ストレージ装置と第2ストレージ装置はまた、Quorum Diskに対して定期的にヘルスチェック情報を書き込むとともに、定期的にQuorum Diskに書き込まれているヘルスチェック情報を読み出すことによって各ストレージ装置のステータスを確認している。
各ストレージ装置がQuorum Diskに対して、定期的にヘルスチェック情報を書き込んでいるため、第1ストレージ装置から第2ストレージ装置へのデータ転送が失敗した場合、第1ストレージ装置は第2ストレージ装置の書き込んだヘルスチェック情報を確認することで、第2ストレージ装置が停止した状態にあるのか否か、あるいは第2ボリュームがI/O不可の状態にあるのか否かを判断することができる。
特に、第1ストレージ装置と第2ストレージ装置との間でのデータ二重化ができない状態だが、第2ストレージ装置が停止していない場合(たとえばDKC間パスが遮断された場合が該当する)、第2ストレージ装置を停止させないままにしておくと、ホストが誤ったデータにアクセスする事態を招くことがある。たとえばホストから第1ストレージ装置へのアクセスが継続され、その後ホストが第2ストレージ装置へのアクセスへとアクセスパスを切り替えた時、第2ボリュームには第1ボリュームよりも古いデータしか格納されていないからである。そのため、このような場合には、第1ストレージ装置は第2ストレージ装置を停止させてから、ホストからのアクセスを継続する必要がある。
本発明の実施例に係るストレージシステムでは、DKC間パスを介した第1ストレージ装置から第2ストレージ装置へのデータ転送が失敗した際、第1ストレージ装置はQuorum Disk上の通信不能ビットマップに、DKC間パスを介した第2ストレージ装置との通信が不可能な状態にある旨の情報を書き込む。一方第2ストレージ装置では、定期的なQuorum Diskの読み出しを行うことによって、第1ストレージ装置がDKC間パスを介した第2ストレージ装置との通信が不可能な状態にある旨を検知する。これに応じて第2ストレージ装置では、第2ボリュームを閉塞させて、ホストからのI/Oを受け付け不可能な状態にする。そしてQuorum Diskには、「第1ストレージ装置が第2ストレージ装置との通信が不可能な状態にある旨を検知した」ことを第2ストレージ装置が確認した旨の情報、及び第2ボリュームを閉塞させた(I/O不可の状態にした)旨の情報を格納する。
第1ストレージ装置は定期的にQuorum Disk上の情報をチェックし、第2ボリュームが閉塞された旨の情報を検知した時点で、I/O処理を再開させる。これにより、第1ストレージ装置は、第2ストレージ装置の第2ボリュームが閉塞になったことを確認してから、ホストからのI/O処理を再開するため、ホストが誤ったデータにアクセスすることを防ぐことができる。
以上、本発明の実施例を説明してきたが、これは本発明の説明のための例示であって、本発明を上で説明した実施例に限定する趣旨ではない。本発明は、他の種々の形態でも実施可能である。実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置いてもよい。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。
1: ストレージシステム
2: ホスト
6: SAN
10a: ストレージ装置
10b: ストレージ装置
11: ストレージコントローラ
12: ディスクユニット
15: Quorum Storage
111: MPB
112: FEPK
113: BEPK
114: CMPK
115: スイッチ(SW)
121: ドライブ
141: MP
142: LM
143: SM
144: CM

Claims (12)

  1. 第1ストレージ装置と、装置間パスを介して前記第1ストレージ装置に接続された第2ストレージ装置と、前記第1ストレージ装置及び前記第2ストレージ装置に接続された第3ストレージ装置とから構成されるストレージシステムであって、
    前記第1ストレージ装置と前記第2ストレージ装置はそれぞれ、ボリュームと、1以上の記憶デバイスを有し、定期的に前記第3ストレージ装置にヘルスチェック情報を書き込むように構成されており、
    前記第1ストレージ装置は、ホスト計算機から前記第1ストレージ装置内の第1ボリュームに対するライトデータ及び該ライトデータのライト要求を受け付けると、前記第1ボリュームに前記ライトデータを書き込むとともに、前記装置間パスを介して前記第2ストレージ装置に、前記第2ストレージ装置内の第2ボリュームに前記ライトデータを書き込む指示を発行するよう構成され、
    前記第2ストレージ装置は、前記ホスト計算機から前記第2ボリュームに対するライトデータ及び該ライトデータのライト要求を受け付けると、前記装置間パスを介して前記第1ストレージ装置に、前記第1ボリュームに前記ライトデータを書き込む指示を発行するとともに、前記第2ボリュームに前記ライトデータを書き込むように構成されており、
    前記第1ストレージ装置は、前記ホスト計算機から受け付けた前記ライト要求の処理中に、前記第2ボリュームへのライトデータの書き込みに失敗した場合、
    前記第3ストレージ装置に書き込まれた前記ヘルスチェック情報を読み出し、
    前記読み出したヘルスチェック情報に基づいて、前記第2ボリュームがI/O不可状態にあるか否かを判断し、
    前記第2ボリュームがI/O不可状態にあると判断した後、前記ライト要求に係る処理を再開する、
    ことを特徴とする、ストレージシステム。
  2. 前記第2ストレージ装置は、前記ホスト計算機から受け付けた前記ライト要求の処理中に、前記第1ボリュームへのライトデータの書き込みに失敗した場合、
    前記第3ストレージ装置に書き込まれた前記ヘルスチェック情報を読み出し、
    前記読み出したヘルスチェック情報に基づいて、前記第1ボリュームがI/O不可状態にあるか否かを判断し、
    前記第1ボリュームがI/O不可状態にあると判断した後、前記ライト要求に係る処理を再開する、
    ことを特徴とする、請求項1に記載のストレージシステム。
  3. 前記第1ストレージ装置は、前記ホスト計算機から受け付けたライト要求の処理中に、前記第2ボリュームへのライトデータの書き込みに失敗した場合、
    前記装置間パスを介した通信ができない状態である旨を表す情報を、前記ヘルスチェック情報に含めて前記第3ストレージ装置に格納し、
    前記第2ストレージ装置は、前記第1ストレージ装置が格納した前記ヘルスチェック情報の中に、前記装置間パスを介した通信ができない状態である旨を表す情報が含まれていることを確認すると、前記第2ボリュームをI/O不可状態にする、
    ことを特徴とする、請求項1に記載のストレージシステム。
  4. 前記第2ストレージ装置は、前記第2ボリュームをI/O不可状態にした後、前記第2ボリュームがI/O不可状態にある旨を表す情報を前記ヘルスチェック情報に含めて前記第3ストレージ装置に格納し、
    前記第1ストレージ装置は、前記第2ストレージ装置が格納した前記ヘルスチェック情報の中に、前記第2ボリュームがI/O不可状態にある旨を表す情報が含まれていることを確認すると、前記ライト要求に係る処理を再開する、
    ことを特徴とする、請求項3に記載のストレージシステム。
  5. 前記第1ストレージ装置は、前記第3ストレージ装置に書き込まれた前記ヘルスチェック情報を読み出した時、前記第2ストレージ装置が前記ヘルスチェック情報を所定時間以上の間、前記第3ストレージ装置に書き込んでいないか否かを判断し、
    前記第2ストレージ装置が前記ヘルスチェック情報を所定時間以上、前記第3ストレージ装置に書き込んでいない場合、前記第1ストレージ装置は前記第2ストレージ装置が停止状態にあると判断する、
    ことを特徴とする、請求項1に記載のストレージシステム。
  6. 前記第1ストレージ装置及び前記第2ストレージ装置は、前記ヘルスチェック情報の更新回数に相当する値である更新世代番号を、前記ヘルスチェック情報に含めて前記第3ストレージ装置に格納するよう構成されており、
    前記第1ストレージ装置は、前記第2ストレージ装置の書き込んだ更新世代番号が、所定時間以上の間変更されていない場合、前記第2ストレージ装置が停止状態にあると判断することを特徴とする、
    請求項5に記載のストレージシステム。
  7. 前記第1ストレージ装置は、前記第3ストレージ装置に書き込まれた前記ヘルスチェック情報を読み出すたびに、前記ヘルスチェック情報に含まれる、前記第2ストレージ装置の書き込んだ更新世代番号を記録しており、
    前記第1ストレージ装置はまた、前記第3ストレージ装置に書き込まれた前記ヘルスチェック情報を読み出すと、前記読み出されたヘルスチェック情報に含まれる前記第2ストレージ装置の書き込んだ更新世代番号が、前記記録されている更新世代番号と同じか否かを判定することによって、前記第2ストレージ装置の書き込んだ更新世代番号が変更されていないことを判定することを特徴とする、
    請求項6に記載のストレージシステム。
  8. 前記第1ストレージ装置は、前記ヘルスチェック情報に含まれる、前記第2ストレージ装置の書き込んだ更新世代番号が、前記記録されている更新世代番号と同じであることを、初めて検知した時点の時刻を記録しておき、
    前記第1ストレージ装置が、前記記録された時刻から所定時間以上経過した後に前記第3ストレージ装置に書き込まれた前記ヘルスチェック情報を読み出した時、
    前記読み出されたヘルスチェック情報に含まれる前記第2ストレージ装置の書き込んだ更新世代番号と、前記記録されている更新世代番号が同じである場合、前記第2ストレージ装置の書き込んだ更新世代番号が所定時間以上の間更新されていないと判断することを特徴とする、
    請求項7に記載のストレージシステム。
  9. 前記第1ストレージ装置は前記第2ストレージ装置が停止状態にあると判断すると、前記第2ストレージ装置が停止状態にある旨を表す情報を前記ヘルスチェック情報に含めて前記第3ストレージ装置に書き込み、
    前記第2ストレージ装置は起動時に、第3ストレージ装置から前記ヘルスチェック情報を読み出し、
    前記ヘルスチェック情報に、前記第2ストレージ装置が停止状態にある旨を表す情報が前記第1ストレージ装置によって書き込まれていることを検出すると、
    前記第2ボリュームをI/O不可状態にすることを特徴とする、
    請求項5に記載のストレージシステム。
  10. 前記第2ストレージ装置は、前記第1ボリュームがI/O不可状態にあることを確認した後、前記第2ボリュームに前記ライトデータを書き込むことを特徴とする、
    請求項2に記載のストレージシステム。
  11. 前記第1ストレージ装置及び前記第2ストレージ装置は、前記第3ストレージ装置に前記ヘルスチェック情報を書き込むたびに、前記ヘルスチェック情報を書き込んだ時刻を記憶しており、
    前記第2ストレージ装置は、前記ホスト計算機から前記第2ボリュームに対するリード要求を受け付けると、
    前記記憶された時刻に基づいて、前記第2ストレージ装置が前記ヘルスチェック情報を一定時間以内に更新したか判定し、
    前記ヘルスチェック情報が一定時間以内に更新されていない場合、前記ヘルスチェック情報が更新されるまで、前記リード要求に係る処理を所定時間待機する、
    ことを特徴とする、請求項1に記載のストレージシステム。
  12. 前記ヘルスチェック情報が一定時間以内に更新されている場合、前記第2ボリュームからデータをリードして、前記ホスト計算機に返送する、
    ことを特徴とする、請求項11に記載のストレージシステム。
JP2016528943A 2014-06-26 2014-06-26 ストレージシステム Active JP6230707B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2014/066989 WO2015198449A1 (ja) 2014-06-26 2014-06-26 ストレージシステム

Publications (2)

Publication Number Publication Date
JPWO2015198449A1 true JPWO2015198449A1 (ja) 2017-04-20
JP6230707B2 JP6230707B2 (ja) 2017-11-15

Family

ID=54937579

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016528943A Active JP6230707B2 (ja) 2014-06-26 2014-06-26 ストレージシステム

Country Status (3)

Country Link
US (1) US10025655B2 (ja)
JP (1) JP6230707B2 (ja)
WO (1) WO2015198449A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107329698B (zh) * 2017-06-29 2020-08-11 杭州宏杉科技股份有限公司 一种数据保护方法及存储设备
CN107480014B (zh) * 2017-07-24 2021-01-01 奇安信科技集团股份有限公司 一种高可用设备切换方法及装置
JP7363413B2 (ja) 2019-11-27 2023-10-18 富士通株式会社 情報処理装置、情報処理システム及びプログラム
JP7315222B2 (ja) * 2020-04-28 2023-07-26 Necプラットフォームズ株式会社 ストレージ装置、ストレージ装置の処理方法、及びプログラム

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009266120A (ja) * 2008-04-28 2009-11-12 Hitachi Ltd 情報システム及びi/o処理方法
JP2009282776A (ja) * 2008-05-22 2009-12-03 Toshiba Corp 計算機システム

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003076592A (ja) * 2001-09-04 2003-03-14 Hitachi Ltd データ格納システム
US7191298B2 (en) * 2002-08-02 2007-03-13 International Business Machines Corporation Flexible system and method for mirroring data
US7412576B2 (en) * 2004-12-08 2008-08-12 Hitachi, Ltd. Remote copy system having multiple data centers
US20060259815A1 (en) * 2005-05-10 2006-11-16 Stratus Technologies Bermuda Ltd. Systems and methods for ensuring high availability
JP5244332B2 (ja) * 2006-10-30 2013-07-24 株式会社日立製作所 情報システム、データ転送方法及びデータ保護方法
US7610510B2 (en) * 2007-02-16 2009-10-27 Symantec Corporation Method and apparatus for transactional fault tolerance in a client-server system
JP5090022B2 (ja) * 2007-03-12 2012-12-05 株式会社日立製作所 計算機システム、アクセス制御方法及び管理計算機
US7805632B1 (en) * 2007-09-24 2010-09-28 Net App, Inc. Storage system and method for rapidly recovering from a system failure
WO2009141752A2 (en) * 2008-05-19 2009-11-26 Axxana (Israel) Ltd. Resilient data storage in the presence of replication faults and rolling disasters
JP5486793B2 (ja) * 2008-11-07 2014-05-07 株式会社日立製作所 リモートコピー管理システム、方法及び装置
US8166136B2 (en) * 2008-12-24 2012-04-24 National Institute Of Advanced Industrial Science And Technology Performance reservation storage management system, storage management method, and storage medium
JP5199464B2 (ja) * 2009-01-20 2013-05-15 株式会社日立製作所 ストレージシステム及びストレージシステムの制御方法
WO2010106579A1 (en) * 2009-03-19 2010-09-23 Hitachi, Ltd. Storage system and method for controlling storage system
US8484510B2 (en) * 2009-12-15 2013-07-09 Symantec Corporation Enhanced cluster failover management
US8417899B2 (en) 2010-01-21 2013-04-09 Oracle America, Inc. System and method for controlling access to shared storage device
JP5699852B2 (ja) * 2011-08-12 2015-04-15 富士通株式会社 情報処理装置、ストレージ制御方法およびプログラム
US8645649B2 (en) * 2011-09-29 2014-02-04 Hitachi, Ltd. Computer system with reservation control
CN104424048A (zh) * 2013-08-29 2015-03-18 国际商业机器公司 用于数据存储的方法和装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009266120A (ja) * 2008-04-28 2009-11-12 Hitachi Ltd 情報システム及びi/o処理方法
JP2009282776A (ja) * 2008-05-22 2009-12-03 Toshiba Corp 計算機システム

Also Published As

Publication number Publication date
US20160371136A1 (en) 2016-12-22
WO2015198449A1 (ja) 2015-12-30
JP6230707B2 (ja) 2017-11-15
US10025655B2 (en) 2018-07-17

Similar Documents

Publication Publication Date Title
US6510500B2 (en) System and method for minimizing message transactions for fault-tolerant snapshots in a dual-controller environment
US7827367B2 (en) Backup control method for acquiring plurality of backups in one or more secondary storage systems
RU2596585C2 (ru) Способ отправки данных, способ приема данных и устройство хранения данных
KR101091225B1 (ko) 메타데이터를 이용한 연속 원격 복사에서 부정합의 검출을 위한 장치, 시스템, 및 방법
US6330642B1 (en) Three interconnected raid disk controller data processing system architecture
US7464236B2 (en) Storage system and storage management method
US7421550B2 (en) Storage system and storage system management method
US6732231B1 (en) System and method for management of mirrored storage devices storing device serial numbers
JP5286212B2 (ja) ストレージクラスタ環境でのリモートコピー制御方法及びシステム
US20100036896A1 (en) Computer System and Method of Managing Backup of Data
US7146526B2 (en) Data I/O system using a plurality of mirror volumes
JPH07239799A (ja) 遠隔データ・シャドーイングを提供する方法および遠隔データ二重化システム
JP6230707B2 (ja) ストレージシステム
US20110196825A1 (en) Storage system and data duplication method in the same
US11126514B2 (en) Information processing apparatus, information processing system, and recording medium recording program
JP6039818B2 (ja) 情報システム、ホストシステム、及びアクセス制御方法
JP4898609B2 (ja) ストレージ装置、データ回復方法及び計算機システム
US10248511B2 (en) Storage system having multiple local and remote volumes and multiple journal volumes using dummy journals for sequence control
JP2021033782A (ja) リモートコピーシステム
US11256586B2 (en) Remote copy system and remote copy management method
US7130931B2 (en) Method, system, and article of manufacture for selecting replication volumes
US11487459B2 (en) Information processing apparatus, information processing system, and recording medium storing program

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170725

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170913

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170926

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171017

R150 Certificate of patent or registration of utility model

Ref document number: 6230707

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150