JP5959733B2 - ストレージシステムおよびストレージシステムの障害管理方法 - Google Patents

ストレージシステムおよびストレージシステムの障害管理方法 Download PDF

Info

Publication number
JP5959733B2
JP5959733B2 JP2015513400A JP2015513400A JP5959733B2 JP 5959733 B2 JP5959733 B2 JP 5959733B2 JP 2015513400 A JP2015513400 A JP 2015513400A JP 2015513400 A JP2015513400 A JP 2015513400A JP 5959733 B2 JP5959733 B2 JP 5959733B2
Authority
JP
Japan
Prior art keywords
failure
control unit
cluster
fos
storage system
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.)
Expired - Fee Related
Application number
JP2015513400A
Other languages
English (en)
Other versions
JPWO2014174594A1 (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
Application granted granted Critical
Publication of JP5959733B2 publication Critical patent/JP5959733B2/ja
Publication of JPWO2014174594A1 publication Critical patent/JPWO2014174594A1/ja
Expired - Fee Related 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/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
    • 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/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/073Error 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 memory management context, e.g. virtual memory or cache management
    • 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/0784Routing of error reports, e.g. with a specific transmission path or data flow
    • 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/2094Redundant storage or storage space
    • 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/1479Generic software techniques for error detection or fault masking
    • G06F11/1482Generic software techniques for error detection or fault masking by means of middleware or OS functionality
    • G06F11/1484Generic software techniques for error detection or fault masking by means of middleware or OS functionality involving virtual machines

Description

本発明は、ストレージシステムおよびストレージシステムの障害管理方法に関する。
一つの物理的計算機の中に複数の仮想マシン(仮想計算機)を設けて、各仮想マシン上でそれぞれ異なるオペレーティングシステム(OS)を実行できる仮想化技術が知られている。仮想マシンを実現するには、仮想化専用のソフトウェアが必要である。
仮想化専用ソフトウェアの中には、NAS(Network Attached Storage)のようなストレージ装置の有するハードウェア資源を論理的に分割して複数の論理区画(仮想的な記憶装置)を形成し、それら論理区画を独立して動作させるものもある(特許文献1)。なお、 仮想マシン環境に関する技術として、特許文献2,3がある。
ファイルシステムでは、例えば、NAS内部の一部のハードウェア(ポート、メモリ等)に障害が発生しただけで、直ちにNAS全体のフェイルオーバを実行する。これに対し、SAN(Storage Area Network)等を用いて記憶装置にブロックアクセスするブロックマイクロ制御は、銀行や証券会社等での基幹系業務に使用されるため、高信頼性を実現している。ブロックマイクロ制御を実行するストレージシステムでは、一部のハードウェアに障害が発生した場合、その障害の生じたハードウェアをシステムから切り離して運転を続行するという縮退運転を実現している。これにより、ブロックマイクロ制御を実行するストレージシステムは、一部の障害によってストレージシステム全体が停止するのをできる限り防止している。
US2005/0091454A1 US7840790 US8166211
近年、FC(Fibre channel)、iSCSI(Internet Small Computer System Interface)、FCoE(Fibre Channel over Ethernet(登録商標))、NAS等の複数のプロトコルに1台で対応することのできる一体型ストレージシステムが注目されている。このような一体型ストレージシステムは、ユニファイドストレージシステムと呼ばれており、省スペース、低コスト、作業性向上等の利点を備える。
可用性を高めるべく、ユニファイドストレージシステムをクラスタ構成で使用することが考えられる。この場合、ユニファイドストレージシステムの外部にQuorumディスクと呼ばれる管理装置を設けて、その管理装置により各クラスタの状況を管理する。管理装置は、いずれかのクラスタ内での障害発生を検知した場合、障害発生元に対してリセット指示を、フェイルオーバ先に対してフェイルオーバ指示を、発行する。
しかし、管理装置とユニファイドストレージシステムとの間の接続線が外れたり、断線したりした場合、いわゆるSplitBrain状態になり、管理装置は監視先の死活を判断することができなくなる。従って、この場合、管理装置は、ユニファイドストレージシステム内のいずれかのクラスタで生じる障害を検知することはできない。
また、ユニファイドストレージシステムにおいては、ファイルシステムで障害の発生する頻度が高いと考えられるが、些細な障害でフェイルオーバ処理をいちいち実行したのでは、ユニファイドストレージシステムの性能低下を招き、ユーザの使い勝手も悪い。
本発明は、上記問題に鑑みてなされたもので、その目的は、ファイルアクセス要求とブロックアクセス要求とを処理可能で、かつ、クラスタ構成を有するストレージシステムにおいて、障害を管理できるようにしたストレージシステムを提供することにある。本発明の他の目的は、ブロックアクセス要求を処理する第1制御部が、ファイルアクセス要求を処理する複数の第2制御部での障害についても集約して管理することで、特別な外部装置を用いずにクラスタ構成を有するストレージシステムの障害を管理できるようにしたストレージシステムおよびストレージシステムの障害管理方法を提供することにある。
上記課題を解決すべく、本発明に従うストレージシステムは、ファイルアクセス要求およびブロックアクセス要求を処理するストレージシステムにおいて、複数のクラスタと、各クラスタに跨がって設けられ、ディスクデバイスへのブロックアクセス要求を制御する第1制御部と、各クラスタにそれぞれ個別に設けられ、仮想化制御部で管理される仮想マシン上で動作してファイルアクセス要求を処理する複数の第2制御部と、各クラスタ内に設けられ、該各クラスタ内での障害を検出する障害検出部と、第1制御部に設けられ、各障害検出部で検出された障害に関する障害情報を集約管理する障害情報管理部と、を備えている。
第1制御部内には障害回復部を設けてもよく、障害回復部は、障害情報管理部で管理される障害に対処するための処理内容を決定し、この決定した処理内容の実行を、第1制御部、第2制御部または仮想化制御部のうち、障害の発生した箇所を担当する制御部に指示してもよい。
本発明の一実施形態の概要を示す説明図。 ストレージシステムのハードウェア構成を示すブロック図。 コントローラのソフトウェア構成を示す説明図。 メモリの記憶内容を示す説明図。 メモリのうち制御情報を記憶する領域を示す説明図。 ブロック制御部の使用するハードウェア資源を管理するテーブルの構成例を示す説明図。 ハイパバイザの使用するハードウェア資源を管理するテーブルの構成例を示す説明図。 ブロック制御部以外の他のFOS(ファイルシステムを使用するOS)が使用するハードウェア資源を管理するテーブルの構成例を示す説明図。 ブロック制御部、ハイパバイザ、FOSがそれぞれ確保しているハードウェア資源の関係を示す説明図。 FOSに割り当てられたハードウェア資源で障害が発生したときの処理を示すフローチャート。 ハイパバイザに割り当てられたハードウェア資源で障害が発生したときの処理を示すフローチャート。 ブロック制御部に割り当てられたハードウェア資源で障害が発生したときの処理を示すフローチャート。 FOSに割り当てられたハードウェア資源で障害が発生したときの処理の他の例を示すフローチャート。 障害を管理するテーブルの構成例を示す説明図。 FOSの停止を検出してフェイルオーバを開始する処理を示すフローチャート。 図15に続くフローチャート。 障害検出からフェイルオーバ処理実行までのブロック制御部の動作を示すフローチャート。 クラスタ間を跨がるブロック制御部同士で障害情報を伝達する方法を示す説明図。 第2実施例に係り、FOSが自分自身の障害を検出してブロック制御部に報告する処理を示すフローチャート。 第3実施例に係り、I/O(Input/Output)処理中に障害が発生した場合の処理方法の例を示すフローチャート。 フェイルオーバ構成情報の例を示す説明図。 I/O要求時に指定されるファイル(ファイルシステム)名またはディレクトリ情報と対象ボリュームとの関係を管理する情報(T33)の構成例と、ユーザの指定するLU情報とFOSで管理するLU番号との関係を管理する情報(T14)の構成例を示す。
以下、図面に基づいて、本発明の実施の形態を説明する。添付図面では、機能的に同じ要素を同じ番号で表示する場合がある。添付図面は、本発明の原理に則った具体的な実施形態と実施例とを示している。それらの実施形態及び実施例は、本発明の理解のためのものであり、本発明を限定的に解釈するために用いてはならない。
本実施形態では、当業者が本発明を実施するのに十分かつ詳細にその説明がなされているが、他の実施例または形態も可能である。本発明の技術的思想の範囲と精神を逸脱することなく、構成または構造の変更、多様な要素の置き換えが可能であることを理解する必要がある。従って、以降の記述を、これに限定して解釈してはならない。
さらに、本発明の実施形態は、後述するように、汎用コンピュータ上で稼動するソフトウェアで実装しても良いし、専用ハードウェアで実装してもよいし、またはソフトウェアとハードウェアの組み合わせで実装しても良い。
以後の説明では、管理用の情報をテーブル形式で説明するが、管理用の情報は必ずしもテーブルによるデータ構造で表現されていなくても良く、リスト、DB、キュー等のデータ構造やそれ以外で表現されていても良い。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「DB」、「キュー」等について単に「情報」と呼ぶことがある。
以下では「プログラム」を主語(動作主体)として本発明の実施形態における各処理について説明を行う場合がある。プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート(通信制御装置)を用いながら行うため、プロセッサを主語とした説明としてもよい。プログラムの一部または全ては専用ハードウェアで実現してもよく、また、モジュール化されていても良い。各種プログラムはプログラム配布サーバや記憶メディアによって各計算機にインストールされてもよい。
本実施形態のストレージシステムは、ファイルアクセス要求とブロックアクセス要求を一つのシステムで処理可能なユニファイドストレージシステムであって、クラスタ構成を備えている。そして、本実施形態のストレージシステムでは、ファイルシステムを使用するOS(以下、FOS)の障害状態を統括して管理するための障害管理機構をブロック制御部に設けている。
FOSはハイパバイザよって形成される仮想マシン上で動作し、ファイルシステムに対してファイルを入出力する。FOSはハイパバイザにより管理されるが、FOSの障害についての情報は、ハイパバイザとは別のブロック制御部に集約される。ブロック制御部とは、ディスクデバイスにブロック単位でデータを読み書きするための機能であり、「ブロックストレージマイクロ制御」と呼ぶこともできる。
このように本実施形態では、FOSの障害に関する情報を、FOSの直接的な管理者であるハイパバイザではなく、ハイパバイザとは別のブロック制御部に集めて管理する。ブロック制御部は、例えば銀行および証券会社等での基幹系業務に使用されることが多く、高い信頼性が求められている。従って、本実施形態では、信頼性の高いブロック制御部にクラスタ内で生じる障害に関する情報を集約する。これにより、ブロック制御部は、ストレージシステム全体の観点から障害に適切に対処することができる。
また本実施形態では、ブロック制御部が必要最低限のハードウェア資源を優先的に確保し、残りのハードウェア資源をハイパバイザおよび複数のFOSに分配する。従って、必要最低限のハードウェア資源を確保しているブロック制御部は、ホスト装置からファイルアクセス要求が多量に発行されている状況下であっても、障害管理を適切に行うことができる。
図1は、本発明の一実施形態の概要を示す説明図である。図1は本実施形態の理解のために用意されたもので、本発明は図1に示す構成例に限定されない。
ストレージシステム30は、ブロックアクセス要求を発行するコマンド発行装置101Aとファイルアクセス要求を発行するコマンド発行装置101Bとに、双方向通信可能に接続されている。コマンド発行装置101A、101Bは、ホスト装置またはホスト計算機と呼んでもよい。
ストレージシステム30は、その可用性を高めるべく、複数の(例えば2個の)クラスタ50A、50Bを備えている。「第1クラスタ」の例であるクラスタ50Aと「第2クラスタ」の例であるクラスタ50Bとは、同一構成であってよい。フェイルオーバと無関係な構成については、各クラスタ50A、50B間で異なっていてもよい。
以下クラスタの構成を、クラスタ50Aを中心に説明する。クラスタ50Aは、例えば、一つ以上の(通常は複数の)FOS311A、312Aと、FOS311A、312Aが動作する仮想マシンを制御するハイパバイザ313Aと、ブロック制御部314Aと、障害監視部43Aを備える。障害監視部43Aは、クラスタ内に複数存在し、監視対象のハードウェアが予め決められている。各ハードウェアは少なくとも一つの障害監視部43Aにより管理される。 一方のクラスタ50Aの障害監視部43Aと他方のクラスタ50Bの障害監視部43Bとはパスで接続されていてもよい。ブロック制御部314は障害監視部43間のパスを通じて情報をやりとりすることもある。
FOS311A、312Aは、ファイルインターフェースを有するOSであり、ハイパバイザ313Aにより作成され管理される仮想マシン上で動作する。FOSとしては、例えばNAS、検索システム、サーバ上で動作する他のOS等を挙げることができる。以下の説明では、例えばNASのように構成されるFOS311Aを中心に説明する。
ハイパバイザ313Aは、複数の仮想マシンを管理することができる。ハイパバイザ313Aは、各仮想マシン上で動作するFOS311Aを管理する。
ブロック制御部314Aは、ディスクデバイス34に対するデータの読み書き等を制御する。ブロック制御部314Aは、ブロックインターフェースを有し、ブロックアクセス要求を発行するコマンド発行装置101Aと双方向通信可能に接続されている。ブロック制御部は、ブロックストレージを制御するためのコンピュータプログラムであり、ブロックストレージマイクロ制御と呼ぶこともできる。
第1クラスタ50Aのブロック制御部314Aと第2クラスタ50Bのブロック制御部314Bとは、接続部42を介して双方向通信可能に接続されている。ブロック制御部は各クラスタにそれぞれ個別に設けられているかのように見えるが、ブロック制御部314Aとブロック制御部314Bとは接続部42で接続されて情報を共有しており、全体としては、クラスタ50A、50B間に跨がる一つのブロック制御部314であると見ることができる。
ストレージシステム30は、そのハードウェア資源として、例えば、マイクロプロセッサ31、メモリ32、ディスクデバイス34、HBA(Host Bus Adapter)の通信ポート35、NIC(Network Interface Card)の通信ポート36を備える。ハードウェア資源は、各クラスタ50A、50Bに分配されている。さらに、ハードウェア資源のうち、予め設定される所定量のハードウェア資源は、ブロック制御部314に優先的に割り当てられており、その他のハードウェア資源はハイパバイザ313A、313Bを介して各FOS311A、311Bに分配されている。
ファイルインターフェースからのリードコマンドおよびライトコマンドも最終的にはアドレス変換されて、ブロックアクセス要求に変換される。全てのデータは、ディスクデバイス34内にブロックデータとして記憶されている。従って、ファイルインターフェースの要求するデータも、ブロック制御部314Aが実行するブロックアクセス要求によってディスクデバイス34に読み書きされる。
このように、リード要求処理およびライト要求処理は、いずれも最終的にはブロック制御部314に集まって処理される。高い信頼性を要求されるブロック制御部314は、各クラスタ50A、50Bに跨がって設けられており、ユニファイドストレージシステムの根幹部分を形成する。そこで、本実施例では、各クラスタ50A、50Bの障害監視も、ブロック制御部314で行う。
ストレージシステム30のブロック制御部314は、前述のとおり高信頼性を実現しており、365日24時間の常時稼働が前提である。従って、もしブロック制御部314が障害になる場合、ストレージシステム30の全体が障害となり、ストレージシステム30は停止する。
ここで本実施形態において障害監視の対象とする「障害」には、命令を全く実行できなくなるハードウェア障害を含まない。命令の実行が不可能となる障害を監視対象から外すことで、本実施形態では、最も信頼性が高く、最後まで動作し続ける可能性の高いブロック制御部314がいわばクォーラムの代わりを務めて、ストレージシステム30の障害を集約して管理する。
このように構成される本実施形態では、障害監視用に特別な外部装置を用いずに、障害を管理することができる。また本実施形態では、障害監視用の外部装置を設けないため、外部装置とストレージシステムとを接続線で接続する必要がない。本実施形態では、第1クラスタ50Aのブロック制御部314Aと第2クラスタ50Bのブロック制御部314Bを内部直結バスとして構成される接続部42で接続するため、接続に要するコストを低減できる。さらに、本実施形態では、断線やケーブルの抜けなどの障害が生じるおそれもなく、信頼性を向上できる。
本実施形態では、内部直結バスを用いた処理により、いわゆるSplitBrain状態の発生を防止し、一方のクラスタ内で或るFOSが障害で停止した場合に、他方のクラスタ内のFOSにフェイルオーバさせることができる。
本実施形態では、ユニファイドストレージシステムの根幹を成すブロック制御部314にハードウェア資源を優先的に割り当てて、ブロック制御部314による必要最低限の動作が常に可能であるようにしている。ブロック制御部314に対するハードウェア資源の優先的な割当てと、ブロック制御部314による障害の集約的な管理とが結合し、ストレージシステム30内の障害を常時監視することができる。
<システム構成の概要>
図2は、ストレージシステムを含む計算機システムのハードウェア構成の例を示す説明図である。
計算機システムは、ストレージシステム30と、ストレージシステム30を利用するコマンド発行装置101A、101Bと、ストレージシステム30およびコマンド発行装置101A、101Bを管理する管理装置20とを含む。ストレージシステム30は複数設けられてもよい。なお、ストレージシステム30は、ストレージ装置、ストレージサブシステム、ユニファイドストレージシステムと呼ぶこともできる。
コマンド発行装置101A、101Bは、ストレージシステム30を利用する計算機である。コマンド発行装置101A、101Bは、例えば、キーボード等の入力デバイス、ディスプレイ等の出力デバイス、CPU(Central Processing Unit)、メモリ、ホストバスアダプタ(HBA)またはネットワークインターフェースアダプタ(NIC)などを備えている。
一方のコマンド発行装置101Aは、ストレージシステム30の有する論理的な記憶資源にアクセスするためのブロックコマンドを発行する計算機である。コマンド発行装置101Aは、ブロックコマンド発行装置と呼ぶこともできる。
他方のコマンド発行装置101Bは、ストレージシステム30に対してファイルコマンドを発行する計算機である。コマンド発行装置101Bは、ファイルコマンド発行装置と呼ぶこともできる。コマンド発行装置101Bは、ファイルコマンドを発行することで、ファイルへのデータ書き込み、ファイルからのデータ読み出し、ファイルの生成または消去を、ストレージシステム30に指示する。
ブロックコマンド発行装置101Aは、ブロックインターフェースであるFC(FibreChannel)またはiSCSI(internet Small Computer System Interface)等を備えている。ブロックコマンド発行装置101Aは、通信ネットワークCN1を介して、ストレージシステム30の有するHBA35A、35Bと通信する。
ファイルコマンド発行装置101Bは、ファイルインターフェースであるNFS(Network File System)またはCIFS(Common Internet File System)等を備えている。ファイルコマンド発行装置101Bは、通信ネットワークCN2を介して、ストレージシステム30の有するNIC36A、36Bと通信する。
コマンド発行装置101A、101Bは、例えば、サーバ、パーソナルコンピュータ、携帯情報端末、携帯電話(いわゆるスマートフォンを含む)、プリンタ、デジタルカメラ、デジタルビデオカメラ等のように構成することも可能である。
管理装置20は、ストレージシステム30の記憶領域の構成を管理する。管理装置20は、例えば、入力デバイス210、出力デバイス220、CPU230、メモリ240、ネットワークアダプタ250、ディスクドライブ260等を備える。
入力デバイス210は、管理装置20を操作する管理者等からの入力を受け付ける手段であり、例えば、キーボード、音声入力装置、タブレット装置等で構成可能である。出力デバイス220は、管理者に管理装置20の状態および設定項目等を表示する手段であり、例えば、ディスプレイ装置、音声出力装置、プリンタ等で構成可能である。
CPU230は、ディスクドライブ260に格納されている管理コンピュータプログラムをメモリ240に読み込み、その管理コンピュータプログラムに基づいて、ストレージシステム30に対する管理処理を実行する。以下、コンピュータプログラムをプログラムと略する場合がある。メモリ240は、例えばRAM等で構成され、プログラム、データ等を格納する。
ネットワークアダプタ250は、コマンド発行装置101A、101B、ストレージシステム30と、管理ネットワークCN3を介して通信する。管理ネットワークCN3は、例えばEthernet(登録商標)等で構成される。ディスクドライブ260は、例えばハードディスク装置、フラッシュメモリデバイス等の記憶装置から構成され、データおよびプログラムを格納する。
ストレージシステム30の構成を説明する。ストレージシステム30は、ブロックコマンドおよびファイルコマンドのいずれも同時に処理可能なユニファイドストレージシステムとして構成されており、複数のクラスタ50A、50Bを備える。各クラスタ50A、50Bは、それぞれコントローラボード41A、41Bを有する。ストレージシステム30の構成において、添え字の「A」または「B」は、所属先のクラスタを示す。所属先のクラスタを特に区別しない場合、添え字を取って説明する。
ストレージシステム30は、ディスクデバイス34に設定された記憶領域にデータを格納する。ストレージシステム30は、その内部に、制御プロセッサであるCPU31、メモリ32、ディスクインターフェース33、FCインターフェースであるHBA35(HBAターゲットであり、ホストアダプタとも言う)、LANインターフェースであるNIC36、管理用インターフェース37等を備えている。
CPU31、メモリ32、HBA35、NIC36およびディスクインターフェース33は、相互にバス38を介して接続されている。バス38は、例えばPCI−EXであるが、スイッチからバス38を構成してもよい。
CPU31は、メモリ32に格納されている各種プログラムおよびプログラムモジュールを実行する演算処理装置である。CPU(制御プロセッサ)31は、ディスクデバイス34を用いて構成される論理的記憶領域へのデータ入出力等を制御する。
メモリ32は、いわゆる内部記憶装置であり、不揮発性メモリおよび揮発性メモリを含んでいる。不揮発性メモリは、CPU31で動作するプログラムおよび構成情報等を格納する。揮発性メモリは、演算処理結果を一時的に格納する。
メモリ32内の不揮発性メモリは、例えば、ハードディスク、フラッシュメモリ等で構成することができる。メモリ32は、さらにキャッシュメモリ領域および共有メモリ領域を備える。キャッシュメモリ領域は、ディスクデバイス34に読み書きされるデータを一時的に格納する。共有メモリ領域は、ストレージシステム30の構成情報およびディスクデバイス34の構成情報等を格納する。
障害監視部45は、クラスタ50内の各コンポーネント(ハードウェア)31〜33、35〜37に接続されており、各ハードウェアでの障害発生を監視するためのユニットである。障害監視部45は、障害の発生を検知すると、プロセッサ31に障害が生じたハードウェアを報告する。
ディスクインターフェース33は、ディスクデバイス34とメモリ32等との間のデータ送受信を担当する。
ディスクデバイス34は、例えば、ハードディスクデバイス、半導体メモリデバイス、光ディスクデバイス、光磁気ディスクデバイス等のデータを読み書き可能な種々の記憶装置を利用可能である。ハードディスクデバイスを用いる場合、例えば、FC(Fibre Channel)ディスク、SCSI(Small Computer System Interface)ディスク、SATAディスク、SAS(Serial Attached SCSI)ディスク等を用いることができる。
また、例えば、ディスクデバイス34として、フラッシュメモリ、FeRAM(Ferroelectric Random Access Memory)、MRAM(MagnetoresistiveRandom Access Memory)、相変化メモリ(Ovonic Unified Memory)、RRAM(登録商標)等の種々の記憶装置を用いることもできる。さらに、例えば、フラッシュメモリデバイスとハードディスクデバイスのように、種類の異なるディスクデバイスをストレージシステム30内に混在させる構成でもよい。
一つまたは複数のディスクデバイス34の有する記憶領域をグループ化し、そのグループ化された記憶領域から固定長または可変長で記憶領域を切り出すことで、論理的記憶領域である論理ボリュームを生成できる。その論理ボリュームには、主としてユーザデータが記憶される。なお、CPU31が実行するプログラムの全部または一部を、ディスクデバイス34内に格納してもよい。
本実施例のストレージシステム30は、いわゆるユニファイドストレージシステムとして構成されているため、ブロックコマンドを処理するためのホスト側インターフェース(HBA)35と、ファイルコマンドを処理するためのホスト側インターフェース(NIC)36の両方を備えている。
HBA35は、ネットワークCN1を介してブロックコマンド発行装置101Aに接続されており、複数の通信ポートを有する。HBA35は、ブロックコマンド発行装置101Aとの間でコマンドおよびデータを授受する。ネットワークCN1は、例えばFC、イーサネット(登録商標)等である。
NIC36は、ネットワークCN2を介してファイルコマンド発行装置101Bに接続されており、複数の通信ポートを有する。NIC35は、例えばNFSまたはCIFS等のプロトコルによって、ファイルコマンド発行装置101Bとの間でコマンドおよびデータを授受する。ネットワークCN2は、例えばLAN等のように構成される。
コマンド発行装置101A、101Bは、管理ネットワークCN3を介して、管理装置20に接続されている。コマンド発行装置101A、101Bは、管理装置20との間で、システム管理上必要なデータ(管理情報)を送受信する。
ストレージシステム30は、例えばLANのように構成される保守管理用インターフェース37を備える。保守管理用インターフェース37は、CPU31と接続される。CPU31は、ストレージシステム30内のCPU31以外の部位において障害が起こった場合、その障害に関する情報を保守管理用インターフェース37を介して、管理装置20へ報告することができる。
<クラスタ構成>
ストレージシステム30の有するクラスタ構成について説明する。ストレージシステム30は、可用性を高めるために、複数のクラスタ50A、50Bを備える。
ストレージシステム30内には、クラスタ50A、50Bを制御するためのコントローラボード41A、41Bが設けられている。一方のコントローラボード41Aは、一方のクラスタ50Aを制御するもので、第1コントローラボードと呼ぶこともできる。他方のコントローラボード41Bは、他方のクラスタ50Bを制御するもので、第2コントローラボードと呼ぶこともできる。
一方のコントローラボード41A内のCPU31Aと他方のコントローラボード41B内のCPU31Bとは、接続部42を介して双方向通信可能に接続されている。接続部42は、例えば、専用線のバス、またはスイッチ等として構成される。ここでは、CPU間を直接通信する専用パスとする。
一方のCPU31Aは、接続部42を介して他方のCPU31Bにアクセスすることができる。同様に、他方のCPU31Aは、接続部42を介して一方のCPU31Aにアクセスすることができる。
各クラスタ50A、50Bは、それぞれコントローラボード41、HBA35、NIC36、ディスクインターフェース33、保守管理用インターフェース37を備える。上述の通り、クラスタ50Aに属する要素には「A」が添えられており、クラスタ50Bに属する要素には「B」が添えられている。
クラスタ50Aとクラスタ50Bは、可用性を高めるためにクラスタ構成を組む。例えば、ファイルシステムを使用するOSであるFOSを例に挙げて、可用性の向上について説明する。クラスタ50Aの或るFOSとクラスタ50Bの他のFOSとで予めクラスタ構成を組んでおく。第1クラスタ50Aが正クラスタであるとする。
正クラスタ50A側のFOSに障害が発生した場合、副クラスタ50BのFOSへのフェイルオーバ処理が実行される。フェイルオーバ処理では、副クラスタ50BのFOSが、正クラスタ50AのFOSの処理を肩代わりして、ファイルコマンド発行装置101にサービスを提供し続ける。本実施例のストレージシステム30は、クラスタ構成を取ることで信頼性を高めている。障害の検知方法等は後述する。
図3は、各CPU31内のソフトウェア構成の概略を示す。CPU31は、所定プログラムを実行することで、FOS311、312、315と、ハイパバイザ313と、ブロック制御部314とを実現する。
ハイパバイザ313Aは、ファイルインターフェースOSである311A、312A、315Aを、クラスタ50A内において仮想化する。ハイパバイザ313Aからはブロック制御部314Aが見える。同様に、ハイパバイザ313Bは、ファイルインターフェースOSである311B、312B、315Bをクラスタ50B内において仮想化する。ハイパバイザ313Bからはブロック制御部314Bが見える。
ブロック制御部314は、クラスタ50Aとクラスタ50Bのそれぞれに搭載されているが、クラスタ50Aとクラスタ50Bに跨がる一つの共通した制御として動作する。各ブロック314A、ブロック制御部314Bは、それぞれが使用するメモリ内の制御情報が常に相手方のブロック制御の使用する制御情報と同一となるように管理している。
従って、一方のクラスタ50Aのブロック制御部314Aは、他方のクラスタ50B内でのファイルインターフェースからの要求およびブロックインターフェースからの要求を処理することができる。同様に、他方のクラスタ50B内のブロック制御部314Bは、一方のクラスタ50A内でのファイルインターフェースからの要求およびブロックインターフェースからの要求を処理することができる。このように各クラスタ50A、50B内のブロック制御部314A、314Bは一つの共通した制御として動作するため、異なるクラスタ内の、ファイルシステムインターフェースからの要求、および、ブロックインターフェースからの要求を処理することができる。
ブロック制御部314A、314Bは全体として一つの制御として振る舞うが、接続部42を経由して処理を行うと、少なからずオーバヘッドが増加する。従って、原則的には、要求を受けたクラスタ内のブロック制御がその要求を処理する。つまり、クラスタ50Aで受けた要求はブロック制御部314Aが処理し、クラスタ50Bで受けた要求はブロック制御部314Bが処理する。
ブロック制御部314は、ブロックインターフェースによってサービスを提供する機能の一例である。ファイルインターフェースによってサービスを提供する機能の例としては、ファイルシステム、検索システム、サーバ上で動作するOS等がある。
各FOS311、312、315及びブロック制御部314は、制御プロセッサであるCPU31のコア上で動作する。実際には、OSはプログラムであるため、メモリ32上に置かれており、CPU31がそのプログラムを読み込んで動作する。図3では、説明の便宜上、CPUコアの上に各OSを記載している。1個のCPUを搭載するパッケージは、通常複数のコアを含む。障害等に対応するための冗長性をもたせるため、パッケージは2枚単位で増減する。つまり、最小構成におけるパッケージ数は2枚である。
プロセッサコアの使い方として、同一パッケージに同種類のOSを集中させてもよいし、それぞれ異なるパッケージに同種類のOSを分散させてもよい。性能と可用性のいずれを優先するかによって、設計は異なる。
<仮想化プログラム(ハイパバイザ)>
ハイパバイザ313もソフトウェアであるため、メモリ32上に格納されている。ハイパバイザ313は各OS311、312、315上でそれぞれ動作するため、コアに対応するものではない。図3では、或る制御プロセッサ31に、すなわちCPUパッケージに複数のコアが設けられており、FOS311、検索システム312、サーバOS315、ブロック制御部314がコア毎に載っている。
ハイパバイザ313は、FOS311A、検索システムOS312およびサーバOS315のそれぞれに組み込まれている。ハイパバイザ313上で、FOS311と検索システム312およびサーバOS315を動作させる。
図3の例では、一方のCPU31Aにおいて、各コアにFOS311A、312A、315A、ハイパバイザ313A、ブロック制御部314Aが搭載されている。他方のCPU31Bにおいて、各コアにFOS311B、312B、315B、ハイパバイザ313B、ブロック制御部314Bが搭載されている。なお、ハイパバイザ313を複数のコアのうち特定のコアで動作させてもよい。
本実施例では、ストレージシステム30の有するハードウェア資源のうち所定のハードウェア資源を優先的にブロック制御部314に割り当てる。そして、余ったハードウェア資源をハイパバイザ313を介して各FOS311、312、315に割り当てる。以下の説明では、便宜上、FOS311、312、315を「FOS311等」と表現する場合がある。
本実施例では、ハードウェア資源を論理分割して、それら分割したハードウェア資源を用いて仮想マシンを生成する。各仮想マシンの生成および消滅はハイパバイザ313で管理している。仮想マシン上でFOS311等が稼働し、FOS311等はファイルコマンド発行装置101Bから発行されるファイルコマンドを処理する。
<メモリ>
メモリ32は、不揮発性メモリ、揮発性メモリ等のように特徴が異なる複数種類のメモリが混在している場合がある。本実施例では、冗長性を保つために、メモリを2重化している。メモリ32には、構成情報、制御情報、キャッシュデータ等が記憶される。構成情報としては、例えばストレージシステム30の構成を管理するための情報がある。制御情報としては、例えば、要求コマンドとアドレスマッピング情報等を管理するための情報がある。キャッシュデータとしては、コマンド発行装置から受領したライトデータ、ディスクデバイス34から読み出したリードデータがある。
制御情報(または構成情報)を格納するメモリと、データを格納するメモリ(キャッシュメモリ等)とは、それぞれの使用する領域が論理的または物理的に分かれていればよく、メモリの種類は問わない。制御情報を格納するメモリとデータを一時的に格納するメモリとは、ブロック制御部314、FOS311等、ハイパバイザ313のそれぞれが使用する領域が物理的または論理的に分かれていればよい。
図4に、メモリ32の割り当て例を示す。以下に示す図面では、関連するクラスタの区別を示す「A」、「B」の添え字を省略する。例えば、図4に示すメモリ32の記憶構成は、クラスタ50Aのメモリ32Aの構成とクラスタ50Bのメモリ32Bの構成の両方を示している。他の図面(図5〜図8)についても同様である。
メモリ32は、物理的に分かれた複数のメモリから構成される。メモリ32は、制御情報を格納するメモリ321と、データを格納するメモリ322とを備える。各クラスタ50A、50Bのメモリ32A、32Bは、それぞれ図4に示す構成を備える。図4では、クラスタを区別せずにメモリの割り当て例を示している。
メモリ321、322のメモリ空間は、それらメモリ321、322を使用するOS毎に分割されている。各OSは自らに割り当てられたメモリ空間のみ認識することができ、他のOSに割り当てられたメモリ空間を認識することができない。以下の説明では、メモリ空間をメモリ領域またはメモリと呼ぶことがある。
例えば、FOS311Aは、制御メモリ321のうちFOS311に割り当てられたメモリ空間3211と、データメモリ322のうちFOS311に割り当てられたメモリ空間3221だけを認識しており、それらメモリ空間3211、3221のみを使用することができる。同様に、FOS312は、制御メモリ321のうちFOS312に割り当てられたメモリ空間3212と、データメモリ322のうちFOS312に割り当てられたメモリ空間3222のみを認識して使用することができる。制御メモリ321のFOS用メモリ空間3211、3212には、FOS311、312を実現するためのコンピュータプログラムが記憶されている。なお、FOS315については記載を省略する。
ハイパバイザ313は、制御メモリ321のうちハイパバイザ313に割り当てられたメモリ空間3213と、データメモリ322のうちハイパバイザ313に割り当てられたメモリ空間3223のみを認識して使用する。
ブロック制御部314は、制御メモリ321のうちブロック制御部314に割り当てられたメモリ空間3214と、データメモリ322のうちブロック制御部314に割り当てられたメモリ空間3224のみを認識して使用する。
メモリ32は、異なるOSが共同で使用する領域も含む。制御メモリ321のうちメモリ空間3215は、ハイパバイザ313とFOS311等とが認識しており、ハイパバイザ313とFOS311等とが共有して使用する。制御メモリ321のうちメモリ空間3216は、ハイパバイザ313とブロック制御部314とが認識しており、ハイパバイザ313とブロック制御部314とで共有して使用する。
制御メモリ321のうちメモリ空間3217は、FOS311等がフェイルオーバする際に参照するための情報を格納する。例えば、フェイルオーバ用の情報には、例えばFOSの担当するLU番号、LUにマウント中であるか否かを示す情報等を含む。
このように、共有メモリ領域を設けることで、FOS311等とハイパバイザ313の間、ハイパバイザ313とブロック制御部314の間で、所定の情報を相手方に伝達することができる。さらに、クラスタ50A、50Bの間でも、情報を伝達できる。伝達方法は後述する。
共有メモリ領域についてさらに説明する。例えば、FOSが使用する領域は、通常の場合、そのFOSしかアクセスできない領域である。しかし、FOSが使用するメモリ領域の一部をハイパバイザ313がアクセスできるように許可することで、FOS311等とハイパバイザ313とが情報を共有するための領域を生成できる。
同様にして、ハイパバイザ313の使用するメモリ領域の一部にブロック制御部314からのアクセスを許可するか、または、ブロック制御部314の使用するメモリ領域の一部にハイパバイザ313からのアクセスを許可することで、ブロック制御部314とハイパバイザ313との間で情報を共有するための領域を設けることができる。
制御メモリ321のうちブロック制御部314に割り当てられたブロック制御用メモリ空間3214は、プロセッサ31に読み込まれて実行される各種プログラム、論理ボリュームの設定に関する構成情報、および、プールの設定に関するプール情報を格納する。データメモリ322のうちブロック制御部314に割り当てられたブロック制御用メモリ空間3224は、転送データ等を格納する。
図5を用いて、制御プロセッサ(CPU)31に読み込まれて実行される各種プログラムの例を説明する。ブロック制御用メモリ空間3214は、例えば、コマンド制御プログラムP10、構成制御プログラム、障害統合管理プログラムP12、障害検出プログラムP13、障害報告プログラムP14、障害復旧プログラムP15を記憶している。
コマンド制御プログラムP10は、コマンド発行装置101A、101B、または、管理装置20からのコマンドを解釈し、そのコマンドに規定された処理を実行するためのプログラムである。
構成制御プログラムP11は、ストレージシステム30の構成を設定したり、構成情報を更新したりするための処理を実行するプログラムである。なお、図5では図示を省略しているが、ディスクI/Oプログラムは、ディスクデバイス34へのデータ入出力を制御するプログラムである。
障害統合管理プログラムP12は、各ハードウェアで発生する障害の情報を統合して管理し、障害処理の方針を決定するためのプログラムである。
障害検出プログラムP13は、障害の発生を検知するためのプログラムである。障害検出プログラムP13を用いることで、ブロック制御部314とハイパバイザ313とは、互いの生死を監視する。ハイパバイザ313とFOS311等も、障害検出プログラムP13を用いて互いの生死を監視する。障害検出プログラムP13は、ハードウェア障害だけでなく、ソフトウェアの障害も検出できる。
障害報告プログラムP14は、障害が発生した場合に、ブロック制御部314とハイパバイザ313とFOS311等とが互いに報告するためのプログラムである。障害復旧プログラムP15は、障害から復旧するための処理を実行するプログラムである。
ブロック制御用メモリ空間3214は、制御のための管理情報も記憶する。制御のための管理情報としては、例えば、LU管理情報T10、アドレス管理テーブルT11、ハードウェア資源管理テーブルT12、障害管理テーブルT13がある。
構成情報は、例えば仮想デバイス、論理デバイス、プール階層、RAID(Redundant Arrays of Inexpensive Disks)グループ等の、ストレージシステム30の環境設定に必要な情報である。構成情報として、例えば論理デバイス(LU:Logical Unit)管理テーブルT10と、アドレス管理テーブルT11がある。
論理デバイス管理テーブルT10は、論理ボリュームである論理デバイスがどのRAIDグループから切り出されており、そのRAIDグループを構成するディスクデバイス34はどれであるか等を管理する。さらに、論理デバイス管理テーブルT10は、論理デバイスのサイズ、使用量、その論理デバイスを使用するコマンド発行装置等に関する情報も管理することができる。
アドレス管理テーブルT11は、例えば、ターゲットデバイスと論理デバイスのマッピング情報、論理デバイスと仮想デバイスのマッピング情報、仮想デバイスと物理デバイスのマッピング情報を格納する。
ストレージシステム30は、アドレス管理テーブルT11を参照することによって、ターゲットデバイスのアドレスがどの論理デバイスのどのアドレスに対応するかを知ることができる。また、ストレージシステム30は、論理デバイスのアドレスがどの仮想デバイスのどのアドレスに対応するかを知ることができる。さらに、ストレージシステム30は、仮想デバイスのアドレスがどのRAIDグループに属しており、どの物理デバイスのどのアドレスに対応するかを知ることができる。
なお、データの実際の格納先は、ブロック制御部314が決定する。ブロック制御部314は、通常通りに、論理アドレスから変換された物理アドレスを有するディスクデバイス34に、データを書き込むことができる。または、ブロック制御部314は、いわゆる容量仮想化を実現している場合、仮想デバイス(仮想論理ボリューム)に割り当てられる実ページを有するディスクデバイス34内にデータを書き込む。
例えば、ブロック制御部314は、複数の論理デバイスを性能別にプールで階層管理し、仮想デバイスへのライト要求に応じて、プールされた論理デバイスの記憶領域(実ページ)を仮想デバイスの書込先アドレスに割り当てる。ブロック制御部314は、仮想デバイスに割り当てた実ページの所定アドレスに、ライトデータを書き込む。さらに、ストレージシステム30が外部の他のストレージシステム(いわゆる外部ストレージシステム)の有するディスクデバイスを利用している場合もある。この場合、ブロック制御部314は、ブロックインターフェースまたはファイルインターフェースから受領したコマンドを外部ストレージシステムにアクセスするためのコマンドに変換し、外部ストレージシステムのディスクデバイスにデータを読み書きする。
ハードウェア資源管理テーブルT12は、ストレージシステム30の有するハードウェアごとに、稼働中であるか障害閉塞中であるかの状態と、そのハードウェアを使用しているFOS311等またはブロック制御部314を特定する。ハードウェア資源管理テーブルT12の詳細は、図6で説明する。
以上のように、ブロック制御部314は、ハイパバイザ313上のFOS311等で使用するハードウェア資源から独立したハードウェア資源を使用する。
図5には、ハイパバイザ313が実行するプログラム等についても示されている。ハイパバイザ313の使用する制御メモリ3213は、障害を検出するプログラムP23と、検出した障害を予め設定された所定の報告先に報告するプログラムP24と、障害復旧プログラムP25と、ハイパバイザ313の使用するハードウェア資源を管理するテーブルT22を記憶する。障害復旧プログラムP25は、ハイパバイザ313が、ブロック制御部314からの指示に従って障害処理を実行するためのプログラムである。
FOS311等の使用する制御メモリ3211(または3212)は、障害を検出するプログラムP33と、検出した障害を予め設定された所定の報告先に報告するプログラムP34と、障害復旧プログラムP35と、FOS311等の使用するハードウェア資源を管理するテーブルT32を記憶する。障害復旧プログラムP35は、ブロック制御部314からの指示に従って障害処理を実行するためのプログラムである。
図6を用いて、ブロック制御部314の使用するハードウェア資源管理テーブルT12の例を示す。ブロック制御部314は、ストレージシステム30の有する全てのハードウェア資源を管理する。ブロック制御部314が、ストレージシステム30の有する全てのハードウェア資源を把握しているため、それらハードウェア資源に生じる障害をブロック制御部314で集約管理することができる。
ハードウェア管理テーブルT12は、例えば、プロセッサ管理テーブルT120、メモリ管理テーブルT121、ディスク管理テーブルT122、ポート管理テーブルT123を含む。
プロセッサ管理テーブルT120は、ストレージシステム30の有するCPU31を管理するテーブルであり、例えばリソース名と、詳細と、定義/未定義とを対応付けて管理する。「リソース名」には、ストレージシステム30内のCPU31を一意に特定できる名称(識別子、番号等も名称に含む。以下同じ)が記憶される。「詳細」は、リソース名で特定したCPUの詳細を記憶する。詳細情報は、例えば、そのCPUに含まれているコアを特定するための情報(例えばコア番号)である。「定義/未定義」とは、ブロック制御部314の使用する資源であるか否かを示す。ブロック制御部314の使用する資源である場合は「定義」が登録され、ブロック制御部314の使用しない資源である場合は「未定義」が登録される。
図6に示す例では、「CPU1」および「CPU2」は、ブロック制御部314に割り当てられているため、「定義/未定義」の欄には「定義」が登録されている。「CPU3」はブロック制御部314に割り当てられていないため、「定義/未定義」の欄には「未定義」が登録されている。
なお、ブロック制御部314に割り当てられていない資源について「未定義」と登録するのではなく、具体的な割当て先を登録する構成でもよい。例えば、「CPU3」がハイパバイザ313で使用されている場合、「定義/未定義」の欄には「ハイパバイザ」と登録する。同様に、「CPU3」がFOS311に割り当てられている場合、「定義/未定義」の欄に「FOS311」と登録する。
ブロック制御部314が、ハイパバイザ313およびFOS311等に割当て済の資源の情報を、ハイパバイザ313およびFOS311等から取得することで、ハードウェア資源管理テーブルT12に具体的な割当て先を登録できる。
メモリ管理テーブルT121は、ストレージシステム30の有するメモリ32を管理するテーブルであり、例えば、リソース名と、アドレスと、定義/未定義とを対応付けて管理する。
「リソース名」には、メモリ32をストレージシステム30内で一意に特定するための名称が設定される。「アドレス」は、リソース名で特定されたメモリのアドレス空間(メモリ空間)を記憶する。「定義/未定義」には、メモリの各アドレス空間ごとに、ブロック制御部314に割り当てられているか否かを登録する。
図6の例では、メモリ「DMM1」のアドレス0−1000の領域は、ブロック制御部314が確保している。「DMM1」のアドレス1001−2000の領域は、例えばFOS311等またはハイパバイザ313と共有しているものとする。
例えばFOS311は、ファイルコマンド発行装置101Bからリードコマンドまたはライトコマンドを受領すると、FOS311は、ディスクデバイス34へのデータ読み書きをブロック制御部314に依頼する。FOS311がブロック制御部314に処理を依頼する場合にコマンドを変換し、FOS311とブロック制御部314が共有するアドレスに、変換したコマンドを格納する。共有するアドレスには、FOS311とブロック制御部314の両方がアクセス可能である。
なお、メモリ管理テーブルT121では、あるアドレス空間を共有しているか否か、誰と共有しているか、は管理していない。ブロック制御部314が使用可能であるかだけを「定義/未定義」の欄で管理する。
ディスク管理テーブルT122は、ストレージシステム30の有するディスクデバイスを管理するテーブルであり、例えば、リソース名と、定義/未定義とを対応付けて管理している。「リソース名」は、ディスクデバイスをストレージシステム30内で一意に特定するための名称を記憶する。「定義/未定義」には、リソース名で特定されたディスクデバイスがブロック制御部314に割り当てられているか否かを登録する。
ポート管理テーブルT123は、ストレージシステム30の有する通信ポートを管理するテーブルである。上述の通り、本実施例のストレージシステム30は、いわゆるユニファイドストレージシステムとして構成されており、ファイルコマンドを受け付けるポート(NIC36の通信ポート)と、ブロックコマンドを受け付けるポート(HBA35の通信ポート)を備えている。
ポート管理テーブルT123は、例えば、リソース名と、定義/未定義を対応付けて管理する。「リソース名」は、通信ポートを一意に特定するための名称を記憶する。「定義/未定義」は、リソース名で特定された通信ポートがブロック制御部314に割り当てられているかを登録する。
なお、図6では、ブロックコマンド用の通信ポートとファイルコマンド用の通信ポートを一つずつ示すが、実際にはブロックコマンド用の通信ポートとファイルコマンド用の通信ポートはそれぞれ複数ずつストレージシステム30に設けられている。
ブロック制御部314は、ハードウェア管理テーブルT120〜T123の情報に基づいて、ブロック制御部314に割り当てられているハードウェア資源だけを管理するテーブルT124、T125を作成する。
例えば、ブロック制御用プロセッサ管理テーブルT124は、ブロック制御部314に割り当てられているプロセッサ資源だけを管理するテーブルであり、リソース名と、使用状態を対応付けて管理する。ブロック制御用プロセッサ管理テーブルT124は、プロセッサ管理テーブルT120に記憶されている情報に基づいて作成されている。
テーブルT124の「リソース名」は、ブロック制御部314に割り当てられているCPUをストレージシステム30内で一意に特定するための名称を記憶している。「使用状態」には、リソース名で特定したCPUの使用状態が登録される。ブロック制御部314が正常に使用している場合は「使用中」と登録され、障害が発生している場合は「障害発生」、「閉塞処理中」等と登録される。
図6に示すブロック制御用プロセッサ管理テーブルT124によれば、ブロック制御部314には「CPU1」と「CPU2」が割り当てられており、ブロック制御部314は「CPU1」および「CPU2」の両方を正常に使用していることがわかる。
ブロック制御用メモリ管理テーブルT125は、ブロック制御部314に割り当てられているメモリだけを管理するテーブルであり、メモリ管理テーブルT121に基づいて作成される。ブロック制御用メモリ管理テーブルT125は、メモリをストレージシステム30内で一意に特定する名称と、アドレスを対応付けて管理する。これにより、ブロック制御部314が使用可能な全てのメモリ領域(アドレス空間)が直ちに判明する。
図5では、ブロック制御部314の使用するハードウェア資源管理テーブルT12をブロック制御用の制御メモリ空間3214に格納するかのように示すが、ハードウェア資源管理テーブルT12のうちメモリ管理テーブルT121は、ブロック制御部314とハイパバイザ313とが共有するメモリ空間3216(図4)に格納するのが好ましい。ブロック制御部314とハイパバイザ313とでメモリ管理テーブルT121を共同使用するためである。なお、メモリ管理テーブルT121のうちハイパバイザ313と共同で使用する情報のコピーを共有メモリ空間3216に置く構成でもよい。
図7に、ハイパバイザ313が持つハードウェア資源管理テーブルT22を示す。ハードウェア資源管理テーブルT22は、例えば、プロセッサ管理テーブルT220、メモリ管理テーブルT221、仮想資源管理テーブルT222を含む。プロセッサ管理テーブルT220およびメモリ管理テーブルT221は、ハイパバイザ313の使用する管理情報であるため、ハイパバイザ用のメモリ領域3211(図5)に格納される。
プロセッサ管理テーブルT220は、ハイパバイザ313に割り当てられたCPU31を管理するテーブルであり、リソース名と使用状態とを対応付けて管理する。「リソース名」には、CPUをストレージシステム30内で一意に特定する名称が登録される。「使用状態」には、リソース名で特定したCPUの使用状態(例えば使用中、閉塞処理中)を登録する。
メモリ管理テーブルT221は、ハイパバイザ313に割り当てられているメモリ32を管理するテーブルであり、例えば、リソース名と、アドレスと、使用状態と、使用者を対応付けて管理する。
「リソース名」には、ストレージシステム30でメモリを一意に特定するための名称を登録する。「アドレス」には、リソース名で特定したメモリのアドレス空間(メモリ空間)を登録する。「使用状態」には、メモリのアドレス空間毎の使用状態(例えば使用中、閉塞処理中)を登録する。「使用者」には、メモリのアドレス空間毎の使用者(ハイパバイザ、FOS)を登録する。
ここで、本実施例では、ブロック制御部314に対して、ストレージシステム30の有するハードウェア資源を優先的に割当て、残ったハードウェア資源をハイパバイザ313およびFOS311等に割り当てる。
上述の通り、ブロック制御部314は、ストレージシステム30内の全てのハードウェア資源(CPU、メモリ、ディスク、ポート)をハードウェア資源管理テーブルT12で管理している。ストレージシステム30の有する全ハードウェア資源のうち、ブロック制御部314に割り当てたハードウェア資源には「定義」を設定する。そこで、ブロック制御部314の持つハードウェア資源管理テーブルT12に登録されているハードウェア資源のうち「未定義」の設定されているハードウェア資源が、ハイパバイザ313の持つハードウェア資源管理テーブルT22に登録される。
図7のハードウェア資源管理テーブルT22では、通信ポートを管理するためのポート管理テーブルの記載を省略している。なお、図7では、ディスクを管理するためのディスク管理テーブルを省略している。
なお、メモリ管理テーブルT221において、アドレス「1001〜2000」のアドレス空間は、ブロック制御部314との共有領域であるが、ここではハイパバイザ313の領域として管理する。
ハイパバイザ313は、FOS311等にハードウェア資源を仮想化して見せる。このため、ハイパバイザ313は、仮想資源管理テーブルT222に示すように、物理的に一つの「CPU3」を、仮想的な複数のCPU(図中「VCPU」)として、ハイパバイザ313上で管理するFOS311等に割り当てる。CPUに物理的障害が発生した場合、仮想資源管理テーブルT222を参照することで、そのCPUの物理的障害の影響が及ぶFOSを特定することができる。図示の例では、「FOS1」に対して仮想的なCPU「VCPU1」、「VCPU3」、「VCPU4」が割り当てられており、「FOS2」に対して「VCPU2」が割り当てられている。
図8は、FOSが持つハードウェア資源管理テーブルT32の例を示す。ハードウェア資源管理テーブルT32は、FOS専用のメモリ領域3212に格納されており、例えばプロセッサ管理テーブルT320と、メモリ管理テーブルT321を含む。
各FOSは、自らが使用できるハードウェア資源のみ管理する。ディスクおよび通信ポートを管理するためのテーブルは省略している。ハイパバイザ313と共有するメモリ領域については、FOSもそのメモリ領域を使用できるため、「使用状態」の欄に「使用中」と設定して管理する。
<ハードウェア構成>
図9に、ブロック制御部314と、ブロック制御部314以外のハイパバイザ313およびFOS311等とが、ストレージシステム30の有するハードウェア資源をそれぞれ確保する様子を示す。
図9では、ブロック制御部314は、クラスタ間を跨がる一つのブロック制御として示している。ハイパバイザ313およびFOS311等は、複数のクラスタ50A、50Bにそれぞれ設けられている。図9では、便宜上、FOSを一つだけ示すので、以下、FOS311と呼ぶ。
上述の通り、本実施例では、ユニファイドストレージシステム30の根幹を成すブロック制御部314に、ブロックコマンドの処理および障害管理に必要な最低限度以上のハードウェア資源を優先的に割当て、残りのハードウェア資源をハイパバイザ313を介してFOS311に分配する。
ハイパバイザ313は、資源を論理的に分割する技術であるLPAR(Logical PARtitioning)を使用して、FOS311にハードウェア資源を割り当てる。ハードウェア資源としては、上述の通り、CPU31、メモリ32、通信ポート35および36、障害監視用のハードウェア回路である障害監視部43がある。
この例では、ブロック制御部314のみがディスク34を使用しており、ハイパバイザ313およびFOS311はディスク34を使用していない。ハイパバイザ313およびFOS311がディスク34を使用する場合、ディスク34も論理的に分割して割り当てられる。また、ディスクインターフェース33は、ブロック制御部314のみが使用するため、ハイパバイザ313およびFOS311には割り当てられない。
図9では、ハードウェア資源に2種類のアルファベット文字を添えて、その属性を示している。第1のアルファベット文字は割当て先のプログラムを特定する。「S」はFOS、「H」はハイパバイザ、「C」はブロック制御を示す。第2のアルファベット文字は、所属先クラスタを示す。「A」はクラスタ50A、「B」はクラスタ50Bに属することを表している。ブロック制御部314はクラスタ間を跨がって設けられるため、クラスタの所属先を示す第2のアルファベット文字は添えられていない。
プログラム(または機能と呼び変えてもよい)間で情報を共有するためのメモリには、第1のアルファベット文字として、共有者をそれぞれ示すアルファベット文字が使用されている。FOS311とハイパバイザ313で共有するメモリ32には、「SH」が添えられる。ハイパバイザ313とブロック制御部314で共有するメモリ32には、「HC」が添えられる。
FOS311とハイパバイザ313で共有するメモリ32SHA、32SHBは、図4のメモリ領域3215、3225に相当する。図4ではクラスタの区別をしていないが、もしも区別するならば、メモリ32SHAはメモリ領域3215Aおよび3225Aに対応し、メモリ32SHBは、メモリ領域3215Bおよび3225Bに対応する。ハイパバイザ313とブロック制御部314で共有するメモリ領域32HCA、32HCBは、図4の3216および3226に相当する。図4においてクラスタを区別するならば、メモリ32HCAはメモリ3216Aおよび3226Aに対応し、メモリ32HCBはメモリ3216Bに対応する。
ブロック制御部314のメモリ32C(図4のメモリ領域3214に相当)には、ストレージシステム30全体の障害処理を行う障害統合管理プログラムP12(図5)が置かれている。ブロック制御部314は、障害統合管理プログラムP12を用いることで、各ハードウェアで発生する障害報告を統合して管理し、障害処理を決定する。障害に対処するための処理内容としては、例えば、閉塞、縮退、フェイルオーバがある。
障害監視部43について説明する。例えば、一つまたは複数の障害監視部43を論理的に分割することで、FOS、ハイパバイザ、ブロック制御部のそれぞれに割り当てることができる。障害監視部43は、メモリ領域の障害情報格納領域を監視する。共有メモリ領域32SH、32HCについては、共有するOSに割り当てられている障害監視部43のうちいずれか一方が監視すればよい。例えば、図9において、FOS311Aとハイパバイザ313Aの共有するメモリ領域32SHAは、障害監視部43SAまたは43HAのいずれか一方が監視すればよい。
<障害処理方式>
ユニファイドストレージシステム30における障害処理を説明する。
<ハードウェアからの障害検出方式の概要>
ハードウェアから障害報告を受けて障害を検出する方法と、障害の報告の方法について説明する。以下、FOS311等、ハイパバイザ313、ブロック制御314をオペレーティングシステム(OS)と呼ぶ場合がある。
障害を全OS(FOS、ハイパバイザ、ブロック制御)に報告する方法と、障害部位を管理するOSのみ報告する方法とが考えられるが、ここでは、図10を参照して、全OSに報告する場合を説明する。
障害監視用のハードウェアである障害監視部43が、CPU31、ポート35〜36、メモリ32、ディスク34等のハードウェアの障害を検出する。障害監視部43は、ハードウェアの状態を定期的に確認することで、または、ハードウェアから障害の発生を知らせる情報を受信することで、障害を監視する。障害の発生を知らせる情報としては、例えば、信号、メッセージ、割り込み、データ等である。
例えば、CPU31、メモリ32、通信ポート36等のハードウェア資源に障害が発生した場合、障害監視部43は、その障害ハードウェアから障害が発生した情報を受け取り、障害が起こったことを認識する(S10)。
図4のメモリ領域内に示す「障害情報」は、ハードウェア毎の障害情報を格納するための障害情報格納領域であり、メモリ32内に予め設定されている。障害監視部43は、障害ハードウェアから受信した障害情報を、FOS311、ハイパバイザ313およびブロック制御314に通知すべく、それぞれのメモリ領域内の障害情報格納領域に格納する(S11〜S13)。
図10では、全てのOS(FOS、ハイパバイザ、ブロック制御)に、ハードウェア障害の発生を報告する。このため、ブロック制御314の使用するメモリ32C(3224)とハイパバイザ313の使用するメモリ32H(3223)とFOSが使用するメモリ32S(3221、3222)内の、障害情報格納領域に障害情報を登録する。他の方法として、複数のOS間で共有するメモリ領域32SH(3225)および32HC(3226)に障害情報を格納してもよい。
各OSは、障害監視部43からの障害情報を受領すると、障害ハードウェアの管理担当が自OSであるか判定する(S14〜S16)。ここでは、FOS311の管理下にあるハードウェアで障害が発生したものとする。
FOS311は、自分の担当しているハードウェアの障害であると判断すると(S14:YES)、障害の詳細を調査して報告を作成する(S17)。FOS311は、ブロック制御314へ報告するために、一旦ハイパバイザ313との共有メモリ領域3225の障害情報格納領域に詳細報告を登録し(S18)、待機する(S19)。ここで、障害の詳細な報告には、CPUでの障害を例に挙げると、障害で停止したコア番号、障害の程度および種類、現象等を含むことができる。
ハイパバイザ313は、FOS311との共有メモリ領域3225を随時モニタリングしており、障害の詳細報告を発見する。ハイパバイザ313は、詳細報告を、ブロック制御314との共有メモリ領域3226内の障害情報格納領域に登録する(S22)。
ブロック制御部314は、ハイパバイザ313との共有メモリ領域3226を随時モニタリングしており、障害の詳細報告を検出する(S23)。このように、FOS311の使用するハードウェアに障害が発生した場合、障害に関する情報は、必ずハイパバイザ313を介してブロック制御部314に報告される。
ブロック制御部314は、障害の詳細報告に基づいて、その障害に対処するための処理方法(障害処理)を決定する(S24)。例えば、ブロック制御部314は、どのハードウェアを閉塞させるか等の具体的指示内容を決定する。
ブロック制御部314は、決定した内容を実行させるための指示を、障害発生元の管理者であるFOS311に伝達すべく、ハイパバイザ313との共有メモリ領域3226の障害情報格納領域に登録する(S25)。
ハイパバイザ313は、ブロック制御部314との共有メモリ領域3226内で、ブロック制御部314からの指示を発見すると、その指示をFOS311との共有メモリ領域3225の障害情報格納領域に登録する(S26)。
FOS311は、ハイパバイザ313との共有メモリ領域3225をモニタリングすることで、ブロック制御部314からの指示を検出する(S27)。FOS311は、ブロック制御部314から指示された通りに、障害処理を実施する(S28)。
なお、障害の発生したハードウェアの担当ではないハイパバイザ313は、待機状態となり(S20)、詳細報告および障害処理の指示を伝達するだけの役割を果たす。障害の発生したハードウェアの担当ではないブロック制御部314も、障害の詳細報告を作成したりする必要はないため、待機する(S21)。但し、ブロック制御部314は、ストレージシステム30内の障害を集約して管理し、障害に対する処理の実行を指示する役割を果たすために、障害の詳細な報告を受領し(S23)、障害に対処するための指示を作成して発行する(S24、S25)。
FOS311の管理下にあるハードウェアで障害が発生する一例を説明する。例えば、FOS311は、自身の接続されたNIC36の状態を監視している。NIC36は、通常2重化されている。一方のNIC36に障害が起きると、交替パス構成を解除して、シングルパス構成となり、他方のNIC36を用いて通信処理が続けられる。
このようなケースでは、NIC36での障害発生として、FOS311からハイパバイザ313を経由してブロック制御部314に障害を報告する。FOS311の障害としてブロック制御部314に報告するわけではない。
NIC36の障害について報告を受けたブロック制御部314は、FOS311で処理可能な障害であると判定した場合、障害処理を指示する必要はないと判断し、障害状況を管理するに留まることもできる。この場合、図10中のステップS25〜S28を省略し、ステップS24の代わりのステップでは、障害情報を記憶して処理を終了する。
このように、障害監視部43はハードウェア毎に障害発生を監視し、障害が発生した場合は、同一クラスタ内の全OS(FOS、ハイパバイザ、ブロック制御部)に対して、障害の発生を報告する。
従って、障害の報告先をハードウェア毎にそれぞれ個別に管理する必要がなく、ストレージシステム30のハードウェアが追加されたり変更されたりした場合でも容易に対応することができる。このため、本実施例では、ストレージシステム30の根幹を成すブロック制御部314でストレージシステム内の障害を集約管理する構成と結合することで、障害管理コストを一層低減することができる。
上記説明では、FOSで処理可能な場合を例示したが、FOSでは対処せずに、障害の生じたNIC36を使用するFOS311から他系のクラスタ内のFOS311に処理を引き継ぐ必要がある場合もある。例えば、一方のNICに障害が発生して、交替パス構成が保てなくなった場合である。この場合には、ステップS24にて、ブロック制御部314はフェイルオーバすることを決定する。ステップS28にて、FOS311はファイルオーバ指示を実行する。具体的には図10のステップS25以降の処理は、後述する図15のステップS69以降の処理となり、他方のクラスタに処理が引き継がれる。
図11は、ハイパバイザ313の管理下にあるハードウェアで障害が生じた場合の動作を示すフローチャートである。ステップS10〜S16までは、図10で述べたと同じである。障害監視部43は、ハードウェア障害を検出すると(S10)、障害発生を所定のメモリに格納させることで、FOS311、ハイパバイザ313、ブロック制御部314にそれぞれ通知する(S11〜S13)。
FOS311は、通知された障害が自身の管理下にあるハードウェアで生じたものではないと判定すると(S14:NO)、待機する(S30)。
ハイパバイザ313は、自身の管理下のハードウェアで生じた障害であると判定し(S15:YES)、障害の詳細報告を作成する(S31)。ハイパバイザ313は、障害の詳細報告をブロック制御部314との共有メモリ領域3226に登録して(S32)、待機する(S33)。
ブロック制御部314は、ハイパバイザ313からの障害の詳細報告を検出すると(S23:YES)、その障害に対する処理内容を決定し(S24)、決定した障害処理を実行させるための指示を、ハイパバイザ313との共有メモリ領域3226に登録する(S25)。
ハイパバイザ313は、ブロック制御部314からの指示を検出すると(S34)、指示された障害処理を実施し(S35)、ハイパバイザ313での障害処理が実行されたことをFOS311に報告する(S36)。FOS311は、ブロック制御部314からの指示に従って、障害処理を実施する(S37)。
本実施例においてもS24にてフェイルオーバを決定することがある。例えば、交替パス構成を有さない場合においてNIC36に障害が発生した場合、図10のフローにかえて図11のフローを採用することも可能である。この場合、正確にはNIC36の障害であるが、ハイパバイザ313は、自身の管理下にあるFOS311で障害が発生したものとして、ブロック制御部314に詳細を報告する(S31、S32)。ハイパバイザ313は、FOS311での障害発生をブロック制御部314に通知する際に、NIC36での障害についても一緒に報告してもよい。
ブロック制御部314は、FOS311での障害発生を知ると(S23:YES)、フェイルオーバ処理の実施を決定し(S24)、フェイルオーバ先等の情報を含む指示を作成して共有メモリ領域3226に登録する(S25)。
ハイパバイザ313は、ブロック制御部314からの指示を検出すると(S34:YES)、その指示に従って障害処理を実行する(S35)。さらに、ハイパバイザ313は、共有メモリ領域3225を介して、障害の生じたNIC36を使用するFOS311に、ブロック制御部314からの指示を報告する(S36)。FOS311は、ブロック制御部314からの指示を検出すると、その指示に従ってフェイルオーバ処理を実行する(S37)。
図12は、ブロック制御部314の管理下にあるハードウェアで障害が生じた場合の動作を示すフローチャートである。
障害監視部43は、ハードウェア障害を検出すると、障害情報を所定のメモリ領域に格納することで、障害が発生した旨をFOS311とハイパバイザ313とブロック制御部314に通知する(S11〜S13)。
FOS311は、自身の管理下にあるハードウェアの障害ではないため(S14:NO)、待機する(S30)。ハイパバイザ313も、自身の管理下にあるハードウェアの障害ではないため(S15:NO)、待機する(S40)。仕掛かり中の処理については後述する。なお、FOS311は待機中に新規のI/O要求も受け付ける。
ブロック制御部314は、障害報告を受けて、自身の管理下にあるハードウェアで障害が発生したと判定すると(S16:YES)、ストレージシステム30で生じている全ての障害を考慮して、障害に対する処理内容を具体的に決定する(S41)。ブロック制御部314は、決定した障害処理のうちブロック制御部314で実行すべき障害処理を実施する(S42)。
ブロック制御部314は、障害の報告と障害処理の指示を、ハイパバイザ313との共有メモリ領域3226の障害情報格納領域に登録する(S43)。ハイパバイザ313は、その共有メモリ領域3226をモニタリングして、障害報告および障害処理の指示を検出する(S34:YES)。ハイパバイザ313は、ブロック制御部314から指示された障害処理のうちハイパバイザ313で実行すべき処理を実施する(S35)。ハイパバイザ313は、障害処理の指示を、FOS311と共有するメモリ領域3225の障害情報格納領域に格納することで、FOS311に報告する(S36)。
FOS311は、共有メモリ領域3225をモニタリングして、ブロック制御部314からの指示を検出し、指示に従って障害処理を実行する(S37)。
なお、障害の状況によっては、ハイパバイザ313およびFOS311で実行する障害処理が無い場合もある。
例えば、障害の発生したメモリ32に、ブロック制御部314の使用する領域が割り当てられている場合を考える。高信頼性を要求されるブロック制御部314は、その必要がある場合、同一の情報を異なる複数のメモリ領域で冗長管理する。2つのメモリ領域のうち一方に障害が発生した場合、ブロック制御部314は、障害処理として、他方のメモリ領域のみを使用して処理を継続するためのプログラムを実行する。障害メモリをハイパバイザ313もFOS311もいずれも使用していない場合、ハイパバイザ313およびFOS311は、その障害メモリに関して実行すべき処理を持たない。
他の例を検討する。例えば、ディスクデバイス34が故障した場合、ブロック制御部314がディスクデバイス34を管理しているため、故障したディスクデバイスについての障害処理(閉塞処理等)は、ブロック制御部314が実行する。
例えば、短時間内に、同一RAIDグループに属する複数のディスクデバイス34のそれぞれに障害が発生したと仮定する。先に障害の発生したディスクデバイスに記憶されているデータの復元が完了する前に、同一RAIDグループ内の他のディスクデバイスに障害が発生し、データを読み出せなくなった場合、いわゆる二重障害となる。RAID5の構成を有するRAIDグループの場合、二重障害が発生すると、障害ディスクデバイスに記憶されているデータを復元することができなくなる。
二重障害の発生したRAIDグループから生成されている論理ボリューム(LU)にファイルシステムが格納されている場合、ブロック制御部314は、障害の生じた論理ボリュームの番号をFOS311に通知する。FOS311は、部分閉塞処理を実行し、障害の生じた論理ボリュームに格納しているファイルシステムだけをオフラインにする。
なお、FOS311からブロック制御部314にI/O処理を受け渡した後、ブロック制御部314が「I/Oエラー」をFOS311へ返信した場合、FOS311はディスクデバイス34の障害を認識できる。
なお、上記例では、ブロック制御部314が障害処理を決定しているが、これに代えて、ハイパバイザ313がFOS311での障害処理を決定してもよい。
図13を用いて、FOSの管理下にあるハードウェアで障害が生じた場合の他の動作例を説明する。
図10では、FOS311の管理下にあるハードウェアで障害が生じた場合に、FOS311、ハイパバイザ313およびブロック制御部314のそれぞれに対応するメモリ領域内の障害情報格納領域内に障害情報を格納することで、障害発生を通知する場合を説明した。
これに代えて、FOS311のメモリ領域3221に障害情報を格納せず、ハイパバイザ313のメモリ領域3223とブロック制御部314のメモリ領域3214に障害情報を格納し、ハイパバイザ313からFOS311に障害発生を通知してもよい。
FOS311の使用するハードウェアで障害が発生した場合、障害発生箇所の特定などの障害の詳細な報告は、FOS311を管理するハイパバイザ313が作成してもよいし、または、FOS311が作成してもよい。
図13は、FOS311の使用するハードウェアで障害が発生した場合に、障害情報が最初にハイパバイザ313およびブロック制御部314のみに通知され、FOS311はハイパバイザ313からの通知によって障害の詳細な報告を作成し、ハイパバイザ313を介してブロック制御部314に送る場合を示す。
障害監視部43は、FOS311の使用するハードウェアに障害が発生したことを検出すると、障害が発生した旨を示す障害情報を、ハイパバイザ313の使用するメモリ領域3223とブロック制御部314の使用するメモリ領域3224とに格納する(S12、S13)。FOS311の使用するメモリ領域3221に障害情報は格納されない。
ハイパバイザ313は、障害情報を検出すると、FOS311と共有するメモリ領域3225に障害情報を格納することで、障害ハードウェアを使用するFOS311に障害の発生を通知する(S50)。ハイパバイザ313は、自身の管理下にあるハードウェアで発生した障害ではないと判定し(S15:NO)、待機する(S20)。
同様に、ブロック制御部314は、障害情報を検出すると、自身の管理下にあるハードウェアで発生した障害ではないと判定し(S16:NO)、待機する(S21)。
FOS311は、障害情報を取得すると(S51)、自身の担当するハードウェアでの障害であると判定し(S14:YES)、図1で述べたように、ステップS17〜S19を実行する。なお、障害処理の内容にフェイルオーバ処理が含まれている場合、後述の方法で実施する。
図13で説明したように、障害監視部43が障害発生を報告する先を、ハードウェア毎に管理してもよい。FOS311、ハイパバイザ313、ブロック制御部314のうち、障害報告を受け取るべきOSにのみ障害発生を報告することで、ストレージシステム30内の通信負荷を軽減できる。
図14で、各ハードウェア資源での障害発生を報告する先を管理するために使用できる障害管理テーブルT13の例を説明する。
障害管理テーブルT13は、例えばメモリ321内に確保する領域に格納する。障害管理テーブルT13は、ハードウェア資源ごとに用意される。図14では、プロセッサ用の障害管理テーブルT130と、メモリ用の障害管理テーブルT131を示す。ポート管理用のテーブルとディスクデバイス管理用のテーブルは図示を省略する。
プロセッサ用の障害管理テーブルT130は、例えば、リソース名と、状態と、使用者を対応付けて管理する。「リソース名」は、CPU31をストレージシステム内で一意に特定する名称を記憶する。「状態」は、リソース名で特定したCPU31の使用状態(正常、使用中、閉塞中等)を記憶する。「使用者」は、リソース名で特定したCPU31を使用するOS(FOS、ハイパバイザ、ブロック制御部)を記憶する。
メモリ用の障害管理テーブルT131は、例えば、リソース名、状態、アドレス、使用者を対応付けて管理する。「リソース名」は、ストレージシステム内でメモリ32を一意に特定する名称を記憶する。「状態」は、リソース名で特定したメモリ32の使用状態(正常、使用中、閉塞中等)を記憶する。「アドレス」は、リソース名で特定したメモリ32のメモリ空間に設定されるメモリ領域である。「使用者」は、メモリ領域毎の使用者(FOS、ハイパバイザ、ブロック制御部、または、FOSとハイパバイザの共有、ハイパバイザとブロック制御部の共有)を記憶する。
障害を検出した場合、障害監視部43は、障害の発生したハードウェアの使用者を管理テーブルT13で確認し、その使用者に障害発生を報告する。
ここで、ブロック制御部314とブロック制御部314以外のOS(ハイパバイザ313、FOS311)の両方からディスクデバイス34が使用される場合、ディスクデバイス34は全てのOSから共有されるハードウェア資源である。ディスクデバイス34に障害が発生した場合、障害ディスクデバイスに格納されたブロックデータが、どのOS(FOS、ハイパバイザ、ブロック制御部)で使用されているデータであるか特定することは難しい。従って、全OSにより共有されるディスクデバイス34に障害が発生した場合、全てのOSに障害発生を報告する。
障害監視部43は、メモリ32の場合、物理的に1枚のメモリごとに、正常であるか障害が発生しているかを判定する。物理的に1枚のメモリ32のメモリ空間が分割されて複数の使用者(FOS、ハイパバイザ、ブロック制御部、共有)に使用されている場合において、そのメモリ32に障害が発生したときは、全使用者に障害発生を報告する。
ここで、CPU31、メモリ32、ディスクデバイス34等で生じる障害は、それらハードウェアに設けるハードウェア回路としての障害監視部43によって、検出することができる。これに対し、HBA35のポートおよびNIC36のポートは、自身の障害を検知することができない。従って、障害検出プログラム等が一定周期で正常に動作しているかを確認することで、ポートの障害を検出する。
ハイパバイザ313上で動作する複数のFOSのうちいずれか一つのFOS311が使用するハードウェア資源に障害が発生し、かつ、そのFOS311がフェイルオーバする必要がある場合は、そのFOS311を管理するハイパバイザ313からブロック制御部314に障害発生を通知する。
このように障害監視部43を複数設けて監視対象をそれぞれに設定することで、障害検出及び部位特定処理を分散させることができる。また、FOS、ハイパバイザ、ブロック制御と階層的に障害を管理することで管理を容易化するとともに、障害情報をブロック制御部に集約することを可能にする。本構成によって、ブロック制御部の障害検出処理や管理コストを低減しつつ、信頼性の高いブロック制御部による障害処理判断を可能とする。
<ソフトウェアによる障害検出>
図15および図16を用いて、ハードウェア回路としての障害監視部43では検出できない障害を検出するための方法を説明する。図15では、FOS311をハイパバイザ313が常時監視して、FOS311の障害を検出する様子を示す。これに限らず、例えばハイパバイザ313とブロック制御部314が相互に監視したり、ブロック制御部314がハイパバイザ313を介してFOS311を監視したりすることで、障害をソフトウェア処理で検出することができる。
FOS311がフェイルオーバ処理を開始するためには、その前提として、FOS311の障害を検出する必要がある。FOS311の障害を検出する方法としては、例えば以下の2つがある。
第1の方法は、ブロック制御部314がハイパバイザ313を介してFOS311の障害を検出する方法である。ブロック制御部314は、ハイパバイザ313とFOS311との間で定期的に実行される死活監視に基づいて、FOS311の障害を検出する。第1の方法については、図15等で説明する。
第2の方法は、FOS311の使用するハードウェアに障害が生じた場合に、そのハードウェアが発する割り込み信号をFOS311が受信し、FOS311がハイパバイザ313を介してブロック制御部314に障害発生を報告する方法である。第2の方法については、図19で後述する。
図15および図16は、ブロック制御部314がハイパバイザ313を介してFOS311の障害を監視する処理を示すフローチャートである。ここでは、理解のために、クラスタ50AのFOS311Aで障害が発生した場合を例に挙げて説明する。
FOS311Aは、ペアを形成する相手方FOS311Bとハートビート通信を行うことで、相手方FOSが正常に稼働しているかを監視している。本実施例では、FOS311Aとハイパバイザ313Aの間でも、死活確認処理を定期的に実行する。さらに、本実施例では、ハイパバイザ313Aとブロック制御部314Aの間でも、死活確認処理を定期的に実行することができるが、そのフローチャートは省略する。
例えば、FOS311Aが使用するメモリ領域3221Aにハイパバイザ313Aがアクセスできる死活確認専用の領域を用意する。ハイパバイザ313Aは、その死活確認用領域に、死活確認用の情報を設定する(S61)。例えば、ハイパバイザ313Aは、死活確認用の領域に記憶される死活確認用の所定ビットに1を設定する。所定ビットを、死活確認用ビットと呼んでもよい。
FOS311Aは、定期的に死活確認用の領域を監視しており、所定ビットが1に設定されている場合、所定ビットをリセットし、0を設定する(S62)。
ハイパバイザ313Aは、上述の通り定期的に所定ビットに1を設定するが、その前に所定ビットの値を確認する(S63)。ハイパバイザ313Aは、所定ビットに1が設定されているか判定する(S64)。所定ビットが0に設定されている場合は(S64:NO)、FOS311Aが正常に動作している場合である。そこで、ハイパバイザ313Aは、所定ビットに1を設定する(S61)。
これに対し、ハイパバイザ313Aが所定ビットの値を確認したときに、所定ビットが1に設定されたままである場合(S64:YES)、FOS311Aに障害が発生しているために、所定ビットをリセットできなくなっていると判定することができる。
そこで、ハイパバイザ313Aは、FOS311Aに障害が発生したことを示す障害情報(FOS障害情報)を、ハイパバイザ313Aとブロック制御部314Aとで共有するメモリ領域3226Aの障害情報格納領域に格納する(S65)。
ブロック制御部314Aは、共有メモリ領域3226Aを定期的にモニタリングして(S66)、障害の発生を検知する(S67:YES)。ブロック制御部314Aは、FOS311Aの障害を認識すると(S68)、ハイパバイザ313Aに障害FOS311Aをリセットさせるためのリセット指示を発行する(S69)。ブロック制御部314Aは、共有メモリ領域3226Aにリセット指示を格納することで、リセット指示が発行されたことをハイパバイザ313Aに伝達する。
ハイパバイザ313Aは、ブロック制御部314Aからのリセット指示を取得すると、障害の生じたFOS311Aに向けてリセット要求を発行する(S70)。
障害FOS311Aは、ハイパバイザ313Aの発行したリセット要求を受領すると(S71)、ハイパバイザ313Aにリセット完了を知らせる応答を返した後(S72)、リセット処理を実行する(S73)。
ハイパバイザ313Aは、障害FOS311Aからのリセット応答を受信すると(S74)、このリセット応答を共有メモリ領域3226Aを介してブロック制御部314Aに伝達する(S75)。
ブロック制御部314Aは、障害FOS311Aからのリセット応答をハイパバイザ313A経由で受信すると、障害FOS311Aがリセットしたことを確認し、フェイルオーバ処理の準備が整ったことを認識する(S75)。
ブロック制御部314Aは、フェイルオーバ先FOS311Bにフェイルオーバ元FOS311Aで障害が生じたことを通知すべく、障害FOS311Aについての障害情報を、ブロック制御部314Bの使用するメモリ領域3224に記憶する(S76)。
ブロック制御部314Aは、メモリ領域3224に代えて、ディスクデバイス34に障害情報を書き込んでもよい。ブロック制御部314Aは、ステップS68でFOS311Aの障害を認識した時点で、ステップS76を実行してもよい。つまり、障害FOS311Aからのリセット応答を確認する前に、他クラスタ50Bのブロック制御部314Bに障害FOS311Aの存在を伝達してもよい。これにより、フェイルオーバ処理を早期に開始することができ、切替時間を短縮できる。
図16に移る。図16はクラスタ50Bでの動作を示す。ブロック制御部314Bは、メモリ領域3224を参照することで(S77)、FOS311Aに障害が生じたことを認識する(S78)。ブロック制御部314Bは、FOS311Bにフェイルオーバ処理の実行を要求するよう、ハイパバイザ313Bに指示する(S79)。フェイルオーバ先のFOS311Bは、予めクラスタ間で決定されている。
ハイパバイザ313Bは、ブロック制御部314Bからの指示に従って、フェイルオーバ先のFOS311Bに対して、フェイルオーバ処理の開始を指示する(S80)。FOS311Bは、ハイパバイザ313Bからの指示を受領すると(S81)、障害FOS311Aでの処理を肩代わりするために、フェイルオーバ処理を開始する(S81)。
FOS311Bは、障害FOS311Aが担当していた論理ボリューム(LU)を認識して(S83)、その論理ボリュームをマウントする(S84)。その後、FOS311Bは、マウントした論理ボリュームに関するファイルコマンドをコマンド発行装置101Bから受け付けて処理する。
障害FOS311Aが担当していた論理ボリュームについてのLU管理情報T10(図5)は、フェイルオーバ処理の実行に際して、フェイルオーバ先のFOS311Bに引き継がれる。
フェイルオーバ先のFOS311Bは、もともと自身が担当している論理ボリュームについてのコマンド処理と、障害FOS311Aから引き継いだ論理ボリュームについてのコマンド処理との両方を実行する。
ここで、フェイルオーバするためのクラスタ間での情報の受け渡しを説明する。通常のI/O要求を発行する際、ユーザは、ファイル(ファイルシステム)名又はディレクトリ情報等を指定する。図22の例に示すように、FOSは、ユーザが指定する情報とFOSが管理するLU番号との対応関係を示す情報T33を管理する。一方ブロック制御側では、FOSが認識するLU番号とブロック制御内部で管理する論理デバイス番号との対応関係を示す情報T14を管理する。対応するLUに対しブロック制御の論理デバイス番号は、1対1でもよいし、1対Nでもよい。
情報T33およびT14は、メモリ32内の3211または3212のいずれかと、3214とにそれぞ格納される。または情報T33およびT14をディスクデバイス34内に格納し、使用する前にメモリ32に格納してもよい。フェイルオーバ処理を開始すると、障害が発生した方のFOS側の情報T33は共用メモリ3216又は3417に格納される。そして、ブロック制御によって、相手FOSへ情報を伝送される。具体的には、ブロック制御が障害が発生した方のFOSのT33を、引き継ぐ方のFOSとブロック制御のクラスタの3216又は3217に格納する。
別の方法として、FOS用の共有LUを設けてもよい。ブロック制御部はディスクデバイス34の記憶領域からLUを生成して外部装置に提供する。あるLUについては同じ識別子のLUとしてフェイルオーバのペアとなる2つのFOSへ同時に提供する。具体的には当該LUを2つのFOSに割り当てて、両FOSに生成されるからの参照を可能とする。共有LU内に、クラスタ50AのFOSとクラスタ50BのFOSがそれぞれT33A、T33Bを格納する。そして、例えば50BのFOSが障害の場合、S82の処理において50AのFOSがフェイルオーバする際に、T33Bを読み出し50BのFOSの処理を引き継げるようにする。
共有LUは、例えば、ファイルシステムではなく、デバイスファイルであり、マウントせずにリードできる領域である。共有LUには、各FOSが担当するLU情報等の構成情報が格納されていて、通常は自分が担当するLU情報しか参照しない。一方で、フェイルオーバ時には相手の担当LU情報を参照することを可能にすることで、相手の処理を肩代わりすることができる。ライト時のみロック管理を行うことで排他制御を行うこともできる。
図15および図16では、障害FOS311Aの属するクラスタ50Aを担当するブロック制御部311Aが、フェイルオーバ先FOS311Bの属するクラスタ50Bを担当するブロック制御部311Bを介して、ハイパバイザ313Bにフェイルオーバ指示を与えている。これに代えて、障害FOS311Aの属するクラスタ50Aを担当するブロック制御部311Aが、フェイルオーバ先FOS311Bの属するクラスタ50Bのハイパバイザ313Bに直接指示を与える構成でもよい。
例えば、ブロック制御部311Aからハイパバイザ313Bに情報を伝達するためのメモリ領域を用意して、そのメモリ領域にフェイルオーバに関する情報を登録することで、ブロック制御部311Aからハイパバイザ313Bに指示する構成でもよい。
死活確認用ビットをセットまたはリセットする方法に代えて、FOS311とハイパバイザ313とがハートビート通信を行う構成でもよい。また、ブロック制御部314が、ハイパバイザ313を介さずにFOS311の死活を監視する構成でもよい。
ハイパバイザ313Aから障害FOS311Aへのリセット指示は、ハイパバイザ313AがFOS311Aの障害を認識した時点(S65)で行ってもよい。つまり、ハイパバイザ313Aは、ブロック制御部314Aからのリセット指示を得る必要はなく、ステップS65に続いて直ちに障害FOS311Aにリセットを指示する。図15において、ステップS69は省略される。
そして、ハイパバイザ313Aは、障害FOS311Aからリセット応答を受け取ると(S74)、ブロック制御部へ報告する。
図17は、図14および図15で述べた動作のうち、クラスタ間を跨がるブロック制御部314の動作の詳細を示す。
クラスタ50AのFOS311Aで障害が発生すると(S100)、FOS311Aは、FOS311Aとハイパバイザ313Aとで共有するメモリ領域3225Aに、FOS311Aで障害が生じたことを示すFOS障害情報を格納する(S101)。
ハイパバイザ313Aは、FOS311Aの障害を検出すると(S102)、ハイパバイザ313Aとブロック制御部314Aで共有するメモリ領域3226Aに、FOS障害情報を格納する(S103)。なお、ハイパバイザ313AがFOS311Aの障害を最初に検出した場合は、ステップS100〜S102は行われず、ステップS103から開始される。
ブロック制御部314Aは、ハイパバイザ313Aとの共有メモリ領域3226Aを参照することで、FOS311Aの障害を検出する(S104)。ブロック制御部314Aは、いわゆる二重書き機能を用いて、ブロック制御部314Aの占有するメモリ領域3224Aと、ブロック制御部314Bの占有するメモリ領域3224Bとに、FOS障害情報を書き込む(S106、S107)。FOS障害情報は、クラスタ50Aとクラスタ50Bとで二重管理されるため、FOS障害情報の損失を防止できる。二重書きについては図18で後述する。
クラスタ50Bでの処理に移る。クラスタ50Bのブロック制御部314Bは、メモリ領域3224Bを参照して、FOS311Aの障害を認識する(S108)。ブロック制御部314Bは、ハイパバイザ313Bと共有するメモリ領域3226Bに、FOS障害情報を格納する(S109)。
ハイパバイザ313Bは、共有メモリ領域3226Bを参照して、FOS311Aの障害を検出すると(S110)、障害FOS311AとフェイルオーバのペアとなっているFOS311Bに対して、フェイルオーバ処理の開始を指示する(S111)。FOS311Bは、ハイパバイザ313Bからの指示に従って、フェイルオーバ処理を実行する(S112)。
ステップS105での二重書きにより、メモリ領域3224BにFOS障害情報を書き込むライト処理(S107)と、メモリ領域3224BからFOS障害情報を読み出すリード処理(S108)とは、セットになって処理されるプログラムである。
一方のクラスタ50Aでライト処理プログラムが動作すると、相手クラスタ50Bでのリード処理プログラムが起動する。ライト処理プログラムとリード処理プログラムとは、各クラスタにおいてそれぞれ複数ずつ動作可能であり、もっとも早いプログラムが処理を行う。例えば、複数のリード処理プログラムのうち、FOS障害情報がメモリ領域3224B格納されたことを最初に見つけたリード処理プログラムが、そのFOS障害情報をメモリ領域3224Bから読み出す。
なお、FOS障害情報を複数のメモリ3224Aおよび3224Bに同時に書き込む二重書き処理に代えて、メモリ間通信機能を用いてFOS障害情報を相手クラスタに伝達する構成でもよい。
即ち、ブロック制御部314Aは、メモリ3224AにのみFOS障害情報を書込む。その後、メモリ間通信を用いて、メモリ3224A内のFOS障害情報をメモリ3224Bに転送し、両方のメモリの記憶内容を同期させる。
前記フェイルオーバを指示する際に、どのFOSへ指示するかの情報は、図21に示すように、共有メモリ3215内にフェイルオーバ構成情報T50として予め格納しておく。フェイルオーバ構成情報T50は、クラスタ毎に当該クラスタに属するFOSを管理する情報である。具体的にはクラスタを識別する識別子と、FOSを少なくとも所属するクラスタ内で一意に識別するための識別子とを対応づける。これにより、何れかのFOSに障害がおきた場合には、同じクラスタに属する別のFOSをフェイルオーバ先として選択することがでいる。なお、フェイルオーバ構成情報T50は、クラスタ識別子およびFOS識別子だけでなく、フェイルオーバ状態を管理してもよい。フェイルオーバ状態には、例えば、フェイルオーバ処理中、フェイルオーバ処理完了、フェイルオーバ処理していない、がある。
図18を参照して、二重書き機能を説明する。図18(a)は、ブロック制御部314の占有するCPU31が、自分の使用するメモリ3224Aと相手方CPUの使用するメモリ3224Bとに障害情報を書き込む場合を示す。一方のクラスタ50A内のブロック制御部314Aが使用するCPUをCPU31CAと、他方のクラスタ50B内のブロック制御部314Bが使用するCPUをCPU31CBとする。
CPU31CAは、自身の使用するメモリ3224Aの障害情報格納領域に障害情報を書き込むと共に、他方のCPU31CBを介して他方のメモリ3224Bにも障害情報を書き込ませる。
図18(b)は、コントローラボード41内のキャッシュメモリ39に専用回路を設ける場合を示す。一方のクラスタ50A内のキャッシュメモリ39Aと他方のクラスタ50B内のキャッシュメモリ39Bとには、それぞれデータ転送回路が設けられている。これらデータ転送回路は、ASIC(Application Specific Integrated Circuit)として構成されており、障害情報をメモリに書き込むための専用回路である。
図18(b)の場合、データ転送回路は、CPU31の処理を肩代わりをしており、キャッシュメモリ上で障害情報をコピーして、コピー元のメモリ3224Aとコピー先のメモリ3224Bとに書き込む。
なお、障害情報を管理装置20に転送して記憶する構成としてもよい。この場合は、各クラスタ50A、50Bと管理装置20との3カ所で障害情報を保持できるため、いずれか一つの障害情報を失った場合でも、障害情報を二重管理することができる。
このように構成される本実施例によれば、各クラスタ50A、50Bに跨がって設けられ、ディスクデバイス34へのデータ読み書きを司るブロック制御部314で、ストレージシステム30内の障害に関する情報を管理することができる。従って、外部に障害監視用の装置を特別に設ける必要がなく、低コストでストレージシステム30内の障害を管理することができる。
本実施例では、両方のクラスタ50A、50Bに跨がって設けられ、両方のクラスタ内のFOS311の状況を認識可能なブロック制御部314に、ストレージシステム30内の障害情報を集約する。従って、例えばFOSがSplitBrain状態か否かを判断でき、確実にフェイルオーバさせることができる。 階層的に障害管理を行うことによる管理の容易性は前述の通りである。更に、特にクラスタ間の情報やりとりは、ブロック制御を介して行われるため、信頼性の最も高いブロック制御部が必ず、早いタイミングで障害情報を検知することができ、システムの信頼性が向上するとともに、障害の検出のタイミングのずれなどの調整が不要である。
本実施例では、ブロック制御部314は、同一のハードウェアで、もしくは、内部バス42によって接続されているハードウェアで動作するため、従来のFOS間を繋ぐハートビート線に比べて、障害管理を高速かつ高信頼性で行うことができる。
図19を用いて第2実施例を説明する。本実施例を含む以下の各実施例は第1実施例の変形例に該当する。以下の実施例では、第1実施例との相違を中心に説明する。本実施例では、FOS311が自身の障害を検知して、ブロック制御部314に報告する。
図19は、障害を管理する方法の一例を示すフローチャートである。説明の便宜上、クラスタ50AのFOS311Aで障害が発生したものとする。
FOS311Aは、障害監視部43Aからの割り込み信号により、FOS311Aの使用するハードウェアに障害が生じたことを検出する(S120)。FOS311Aは、自身の占有するメモリ領域3221A(図4)の障害情報格納領域に、障害情報を格納する(S121)。FOS311Aは、ハイパバイザ313Aと共有するメモリ領域3225Aに、障害情報を書き込むことで、ハイパバイザ313Aに障害の発生を報告する(S122)。
ハイパバイザ313Aは、共有メモリ領域3225Aを参照して(S123)、障害情報を検出すると(S124:YES)、FOS311Aで障害が発生したことを確認する(S125)。ハイパバイザ313Aは、FOS311からの確認依頼に応じて、共有メモリ領域3225Aを参照する構成でもよい。FOS311Aの障害を確認したハイパバイザ313Aは、ブロック制御部314Aと共有するメモリ領域3226Aに、障害情報を格納する。
ブロック制御部314Aは、ハイパバイザ313Aと共有するメモリ領域3226Aを定期的にモニタリングして(S126)、障害情報を検出する(S67:YES)。ブロック制御部314Aは、FOS311Aの障害を検出すると(S68)、ハイパバイザ313Aから障害FOS311Aにリセット要求を出させるためのリセット指示を、ハイパバイザ313Aに与える(S69)。他のステップS70〜S76は、図15で述べたので説明を割愛する。本実施例も第1実施例と同様の効果を奏する。
図20を用いて第3実施例を説明する。本実施例では、フェイルオーバ処理中のI/O要求の処理方法を説明する。
ストレージシステム30は、コマンド発行装置101からI/O要求(リードコマンド、ライトコマンド)を受信すると、コマンド制御プログラムP10を起動して、要求された処理を実行する。これを正常処理と呼ぶ。
障害が発生した場合、コマンド制御処理プログラムP10とは別の障害復旧中コマンド制御処理プログラムP15が起動されて、I/Oコマンドの障害復旧処理が実行される。つまり、障害の有無により、動作するプログラムが異なる。
本実施例では、正常処理中の或るタイミングで障害が発生しているかどうかをチェックするためのプログラムを走らせることにより、障害が発生したことを認識し、図20の右側に示す障害復旧中コマンド制御処理へと切り替える。
チェック用プログラムを走らせるタイミングS132、S134は、一連のI/O処理中の複数個所に設定されている。具体的には、正常処理内の1つの処理ごとにハードウェア障害チェックを行う。
コマンド制御プログラムは、ステップS131にて、例えばアドレス変換をして、そのアドレス変換の結果をメモリへ格納する処理を行った場合、ステップS132にて、障害が発生したかどうかをチェックする。コマンド制御プログラムは、例えばメモリに書き込みができずエラーが返ってきた場合等、障害が有りと判断されると(S132:YES)、S135へ進む。
コマンド制御プログラムは、障害がなければ(S132:NO)、ステップS133へ進み、コマンド制御の次のステップを処理する。コマンド制御プログラムは、S133にてキャッシュへデータを格納する処理を行う。キャッシュへ格納できない等、障害が有りと判断されれば(S134:YES)、ステップS135へ進む。
図示しないが、ステップS132とS133の間で実行されるライト要求処理の各ステップで処理が正常に行われたか確認し、障害があった場合にはS135へ移行する。例えば、構成情報を参照する際、その構成情報が格納された論理デバイスが閉塞しているか確認される。障害のチェックを行うのは、関連処理を行っている主体となるので、FOSであったり、ブロック制御だったりする。
S135では、障害情報を障害監視部へ報告する。障害監視部への報告の仕方とその後の処理については、図10〜12に記載がある。図10〜12で障害処理を行うと、障害復旧中コマンド制御処理が起動され、障害発生時に仕掛かり中のI/Oがあるかどうかを検出するため、構成情報を参照しにいく(S136)。通常のI/O処理開始時には、どの論理デバイスへどのCPUが何の処理(リードやライト等)を実行するかの情報を制御メモリ内や論理デバイス等に構成情報として登録する。
ハードウェア自身からあがってくる割り込みによってハードウェア障害が検出される場合には、図10〜12において先に障害が報告されてから、仕掛かり中のI/Oへ割り込み、つまりコマンド制御プログラムに割り込みが入る。その後、障害有りとの報告がなされ(S135)、障害復旧プログラムに切り替わる。
また、障害によりCPUがリセットされる等が発生すると、処理全体が一旦停止しリブートがかかり、障害復旧プログラムに切り替わる。
障害復旧プログラムP15は、前記追跡情報に基づいて障害復旧方針を決定する。一つの方針は、何もせずに処理を終了することである(S131)。この場合、I/O処理は完了しない。コマンド発行装置101Aまたは101Bは、ストレージシステム30からの応答を所定時間内に受信することができず、タイムアウトが発生する。その後、コマンド発行装置101Aまたは101Bは、改めてI/O要求をストレージシステム30に発行する。I/O要求が再発行される時点で障害処理が実施されており、障害から回復していれば、I/O要求は正常に処理される。
他の一つの方針は、I/O処理を完了させるものである(S133)。即ち、障害箇所を閉塞する等の障害処理を実行した後、I/O要求を継続して処理する。
ストレージシステム30は、I/O要求を継続して受け付けるため、既に障害が発生している場合は、直ちに障害復旧プログラムP15に切り替わり、I/O処理が完了せずに終了する場合もある。なお、正常処理と障害復旧処理のいずれを実行させるかはCPUのコア単位で決定されることにしてもよい。また、I/O要求毎に識別子を付与し、どのI/O要求が一連のI/O処理のどの部分の処理まで完了しているかを示す追跡情報をメモリに登録しておくことができる。
なお、本発明は、上述した実施の形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
例えば、FOSは、ハイパバイザとのハートビート通信により、ハイパバイザの生死を検出できる。図15で説明したFOSの生死を確認するためのビットをセットまたはリセットする方法の場合、ハイパバイザに障害が発生すると、ビットをセットすることができなくなる。そこで、FOSは、ビットがセットされているか確認してからリセットする。これにより、FOSは、ビットがセットされていない場合、ハイパバイザに障害が発生していると判断できる。
上記実施例では、ハイパバイザからの指示でFOSがリセット処理を実行する場合を説明したが、FOSは自身でリセット処理を実行してもよい。例えば、フェイルオーバのペアを形成するFOS同士をリセット線で接続しておき、いずれかのFOSが自主的にリセットした場合は、リセットしたことを相手FOSにリセット線を介して知らせる。相手FOSは、自クラスタのハイパバイザからのフェイルオーバ指示を待ち、予め決めた時間内にハイパバイザからのフェイルオーバ指示を受領できない場合、相手FOSがリセットした信号を受け取ったことをハイパバイザに知らせる。その知らせを受けたハイパバイザはブロック制御部に伝達する。ブロック制御部は、フェイルオーバ処理の実行を決定して、フェイルオーバ指示をハイパバイザを介してFOSに伝達する。
ブロック制御部とハイパバイザの死活監視も、FOSとハイパバイザの間の死活監視と同様に行うことができる。また、本実施形態で述べた種々の特徴や観点は適宜組み合わせることができる。
30:ストレージシステム、31A、31B:CPU(制御プロセッサ)、32A、32B:メモリ、33A、33B:ディスクインターフェース、34:ディスクデバイス、35A、35B:HBA、36A、36B:NIC、41A、41B:コントローラボード、43A、43B:障害監視部、50A、50B:クラスタ、101A、101B:コマンド発行装置

Claims (13)

  1. ファイルアクセス要求およびブロックアクセス要求を処理するストレージシステムにおいて、
    複数のクラスタと、
    前記各クラスタに跨がって設けられ、ディスクデバイスへのブロックアクセス要求を制御する第1制御部と、
    前記各クラスタにそれぞれ個別に設けられ、仮想化制御部で管理される仮想マシン上で動作してファイルアクセス要求を処理する複数の第2制御部と、
    前記各クラスタ内に設けられ、該各クラスタ内での障害を検出する障害検出部と、
    前記第1制御部に設けられ、前記各障害検出部で検出された障害に関する障害情報を集約管理する障害情報管理部と、
    を備えるストレージシステム。
  2. 前記第1制御部内には障害回復部が設けられており、
    前記障害回復部は、前記障害情報管理部で管理される障害に対処するための処理内容を決定し、この決定した処理内容の実行を、前記第1制御部、前記第2制御部または前記仮想化制御部のうち、前記障害の発生した箇所を担当する制御部に指示する、
    請求項1に記載のストレージシステム。
  3. ハードウェア資源を論理的に分割して得られる第1の資源部分と第2の資源部分のうち、前記第2の資源部分に優先して生成される前記第1の資源部分を前記第1制御部に割当て、前記第2資源部分を前記仮想化制御部を介して前記複数の第2制御部に分配する、請求項2に記載のストレージシステム。
  4. 前記各クラスタには第1クラスタと第2クラスタとが含まれており、
    前記第1制御部は、前記第1クラスタ内でのブロックアクセス要求を処理する第1クラスタ内第1制御部と、前記第2クラスタ内でのブロックアクセス要求を処理する第2クラスタ内第1制御部と、前記第1クラスタ内第1制御部と前記第2クラスタ内第1制御部とを双方向通信可能に接続する接続部とを含んで構成される、
    請求項3に記載のストレージシステム。
  5. 前記第1制御部と前記仮想化制御部とにより共有される第1共有メモリと、
    前記仮想化制御部と前記複数の第2制御部とにより共有される第2共有メモリと、
    を備え、
    前記障害情報は前記第1共有メモリを介して、または前記第1共有メモリと前記第2共有メモリとを介して、前記障害情報管理部に送られる、
    請求項4に記載のストレージシステム。
  6. 前記第1クラスタ内第1制御部と前記第2クラスタ内第1制御部とはそれぞれ専用のメモリ領域を有しており、
    前記第1クラスタ内第1制御部は、前記第1クラスタ内で生じた障害に関する第1障害情報を、前記第1クラスタ内第1制御部の使用する第1専用メモリ領域と前記第2クラスタ内第1制御部の使用する第2専用メモリ領域とに二重書きすることで、前記第1障害情報を前記第2クラスタ内第1制御部に通知し、
    前記第2クラスタ内第1制御部は、前記第2クラスタ内で生じた障害に関する第2障害情報を、前記第2専用メモリ領域と前記第1専用メモリ領域とに二重書きすることで、前記第2障害情報を前記第1クラスタ内第1制御部に通知する、
    請求項5に記載のストレージシステム。
  7. 前記障害検出部は、前記第1制御部、前記第2制御部、前記仮想化制御部にそれぞれ割り当てられている前記ハードウェア資源で生じた障害を検出するハードウェア障害検出部と、少なくとも前記複数の第2制御部で生じる障害を検出するソフトウェア障害検出部とを含む、
    請求項6に記載のストレージシステム。
  8. 前記ハードウェア障害検出部は、前記複数の第2制御部に分配されたハードウェア資源に関する障害を検出した場合、その障害について前記仮想化制御部に通知し、
    前記仮想化制御部は、前記ハードウェア障害検出部からの通知を受領すると、前記複数の第2制御部のうち前記障害が発生した第2制御部に対して、前記障害が検出されたことを通知する、
    請求項7に記載のストレージシステム。
  9. 前記第1クラスタ内の前記複数の第2制御部と前記第2クラスタ内の前記複数の第2制御部とが共有する共有ボリュームを設け、
    前記共有ボリュームには、前記各第2制御部がそれぞれ管理する構成情報を記憶させておき、
    通常時には、前記各第2制御部は自身の担当する構成情報のみを参照でき、フェイルオーバ時には、フェイルオーバのペアを形成する相手方の第2制御部の担当する構成情報も参照可能となるように制御する、
    請求項8に記載のストレージシステム。
  10. 前記第1クラスタおよび前記第2クラスタはそれぞれ、
    ブロックアクセス要求を発行するホスト装置と通信可能に接続されるブロックアクセス要求用の通信制御部と、
    ファイルアクセス要求を発行するホスト装置と通信可能に接続されるファイルアクセス要求用の通信制御部と、
    前記ディスクデバイスとの間でデータを読み書きするためのディスクインターフェース部と、
    前記ブロックアクセス要求用の通信制御部と前記ファイルアクセス要求用の通信制御部および前記ディスクインターフェース部と通信可能に接続されるコントローラと、
    前記コントローラ内に設けられるメモリと、
    前記コントローラ内に設けられるプロセッサと、
    前記各通信制御部と前記ディスクインターフェース部と前記メモリおよび前記プロセッサに関する障害を監視する前記障害検出部と、
    を備えており、
    前記第1クラスタの有する前記コントローラと前記第2クラスタの有する前記コントローラとは、前記接続部を構成する内部直結バスにより接続されている、
    請求項9に記載のストレージシステム。
  11. ファイルアクセス要求およびブロックアクセス要求を処理するストレージシステムの障害管理方法であって、
    前記ストレージシステムは、
    複数のクラスタと、
    前記各クラスタに跨がって設けられ、ディスクデバイスへのブロックアクセス要求を制御する第1制御部と、
    前記各クラスタにそれぞれ個別に設けられ、仮想化制御部で管理される仮想マシン上で動作してファイルアクセス要求を処理する複数の第2制御部と、
    を備えており、
    前記各クラスタ内での障害を検出した場合は、検出された前記障害に関する障害情報を前記障害の発生したクラスタ内の前記第1制御部に通知する、
    ストレージシステムの障害管理方法。
  12. 前記第1制御部は、通知された前記障害に対処するための処理内容を決定し、この決定した処理内容の実行を、前記第1制御部、前記第2制御部または前記仮想化制御部のうち、前記障害の発生した箇所を担当する制御部に指示する、
    請求項11に記載のストレージシステムの障害管理方法。
  13. ハードウェア資源を論理的に分割して得られる第1の資源部分と第2の資源部分のうち、前記第2の資源部分に優先して生成される前記第1の資源部分は前記第1制御部に割り当てられており、前記第2資源部分は前記仮想化制御部を介して前記複数の第2制御部に分配されている、
    請求項12に記載のストレージシステムの障害管理方法。
JP2015513400A 2013-04-23 2013-04-23 ストレージシステムおよびストレージシステムの障害管理方法 Expired - Fee Related JP5959733B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2013/061928 WO2014174594A1 (ja) 2013-04-23 2013-04-23 ストレージシステムおよびストレージシステムの障害管理方法

Publications (2)

Publication Number Publication Date
JP5959733B2 true JP5959733B2 (ja) 2016-08-02
JPWO2014174594A1 JPWO2014174594A1 (ja) 2017-02-23

Family

ID=51791204

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015513400A Expired - Fee Related JP5959733B2 (ja) 2013-04-23 2013-04-23 ストレージシステムおよびストレージシステムの障害管理方法

Country Status (3)

Country Link
US (1) US9823955B2 (ja)
JP (1) JP5959733B2 (ja)
WO (1) WO2014174594A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11449394B2 (en) 2010-06-04 2022-09-20 Commvault Systems, Inc. Failover systems and methods for performing backup operations, including heterogeneous indexing and load balancing of backup and indexing resources
JP6231661B2 (ja) * 2014-04-02 2017-11-15 株式会社日立製作所 ストレージ装置
WO2015186220A1 (ja) * 2014-06-05 2015-12-10 株式会社日立製作所 ストレージ装置及びストレージ装置の動作解析方法
US9514010B2 (en) 2014-09-19 2016-12-06 Netapp, Inc Cluster-wide service agents
WO2016068972A1 (en) * 2014-10-31 2016-05-06 Hewlett Packard Enterprise Development Lp Distributed system partition
US10241854B2 (en) 2016-02-26 2019-03-26 Red Hat, Inc. Correlation-based monitoring and events for a unified storage manager
US10417102B2 (en) * 2016-09-30 2019-09-17 Commvault Systems, Inc. Heartbeat monitoring of virtual machines for initiating failover operations in a data storage management system, including virtual machine distribution logic
US20180150331A1 (en) * 2016-11-30 2018-05-31 International Business Machines Corporation Computing resource estimation in response to restarting a set of logical partitions
US11200124B2 (en) 2018-12-06 2021-12-14 Commvault Systems, Inc. Assigning backup resources based on failover of partnered data storage servers in a data storage management system
US10884888B2 (en) * 2019-01-22 2021-01-05 International Business Machines Corporation Facilitating communication among storage controllers
US11099956B1 (en) 2020-03-26 2021-08-24 Commvault Systems, Inc. Snapshot-based disaster recovery orchestration of virtual machine failover and failback operations
JP7144086B1 (ja) * 2021-04-28 2022-09-29 Necプラットフォームズ株式会社 コンピュータ装置、障害検出方法、プログラム
US11321178B1 (en) * 2021-06-29 2022-05-03 Dell Products, L. P. Automated recovery from raid double failure

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003067137A (ja) * 2001-05-10 2003-03-07 Emc Corp 改善されたネットワーク・インタフェースを有するデータ記憶システム
JP2005128733A (ja) * 2003-10-23 2005-05-19 Hitachi Ltd 論理分割可能な記憶装置及び記憶装置システム
JP2008217728A (ja) * 2007-03-08 2008-09-18 Hitachi Ltd 仮想計算機システムの障害情報採取方法
US20090125751A1 (en) * 2007-11-13 2009-05-14 Colin Scott Dawson System and Method for Correlated Analysis of Data Recovery Readiness for Data Assets
WO2012063294A1 (ja) * 2010-11-12 2012-05-18 株式会社日立製作所 計算機システム

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6360331B2 (en) * 1998-04-17 2002-03-19 Microsoft Corporation Method and system for transparently failing over application configuration information in a server cluster
US6438705B1 (en) * 1999-01-29 2002-08-20 International Business Machines Corporation Method and apparatus for building and managing multi-clustered computer systems
JP2004220216A (ja) * 2003-01-14 2004-08-05 Hitachi Ltd San/nas統合型ストレージ装置
US8185776B1 (en) * 2004-09-30 2012-05-22 Symantec Operating Corporation System and method for monitoring an application or service group within a cluster as a resource of another cluster
JP2007249441A (ja) * 2006-03-15 2007-09-27 Hitachi Ltd 仮想化システム及び障害対処方法
US7840790B1 (en) 2007-02-16 2010-11-23 Vmware, Inc. Method and system for providing device drivers in a virtualization system
US7757116B2 (en) * 2007-04-04 2010-07-13 Vision Solutions, Inc. Method and system for coordinated multiple cluster failover
US8166211B2 (en) 2010-06-07 2012-04-24 Vmware, Inc. Safely sharing USB devices
US9600315B2 (en) * 2010-10-22 2017-03-21 Netapp, Inc. Seamless takeover of a stateful protocol session in a virtual machine environment
US9361199B2 (en) * 2012-08-24 2016-06-07 Vmware, Inc. Protecting virtual machines against storage connectivity failures

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003067137A (ja) * 2001-05-10 2003-03-07 Emc Corp 改善されたネットワーク・インタフェースを有するデータ記憶システム
JP2005128733A (ja) * 2003-10-23 2005-05-19 Hitachi Ltd 論理分割可能な記憶装置及び記憶装置システム
JP2008217728A (ja) * 2007-03-08 2008-09-18 Hitachi Ltd 仮想計算機システムの障害情報採取方法
US20090125751A1 (en) * 2007-11-13 2009-05-14 Colin Scott Dawson System and Method for Correlated Analysis of Data Recovery Readiness for Data Assets
WO2012063294A1 (ja) * 2010-11-12 2012-05-18 株式会社日立製作所 計算機システム

Also Published As

Publication number Publication date
US20150363254A1 (en) 2015-12-17
US9823955B2 (en) 2017-11-21
WO2014174594A1 (ja) 2014-10-30
JPWO2014174594A1 (ja) 2017-02-23

Similar Documents

Publication Publication Date Title
JP5959733B2 (ja) ストレージシステムおよびストレージシステムの障害管理方法
EP1760591B1 (en) System and method of managing access path
US10642704B2 (en) Storage controller failover system
US8516294B2 (en) Virtual computer system and control method thereof
US9933946B2 (en) Fibre channel storage array methods for port management
US9098466B2 (en) Switching between mirrored volumes
US9262087B2 (en) Non-disruptive configuration of a virtualization controller in a data storage system
US20150331753A1 (en) Method and apparatus of disaster recovery virtualization
JP2008112399A (ja) ストレージ仮想化スイッチおよびコンピュータシステム
US10901626B1 (en) Storage device
JP2006227856A (ja) アクセス制御装置及びそれに搭載されるインターフェース
US20130132766A1 (en) Method and apparatus for failover and recovery in storage cluster solutions using embedded storage controller
US7886186B2 (en) Storage system and management method for the same
US20170052709A1 (en) Storage system, storage control apparatus, and storage control method
JP6461347B2 (ja) ストレージシステム、及び、記憶制御方法
JP6039818B2 (ja) 情報システム、ホストシステム、及びアクセス制御方法
US11755438B2 (en) Automatic failover of a software-defined storage controller to handle input-output operations to and from an assigned namespace on a non-volatile memory device
JP2010033379A (ja) 仮想化システム及び仮想化の復旧方法

Legal Events

Date Code Title Description
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: 20160531

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160621

R150 Certificate of patent or registration of utility model

Ref document number: 5959733

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees