(57)【要約】【課題】制御ノードによらず故障ノードを切り離す。【解決手段】故障ノード検出手段１４は、他のストレージノード２０，３０が正常時に所定の周期で送信するハートビートを監視し、一定期間ハートビートが検出されなかったストレージノードを故障ノードとしている。故障ノードが検出されたときは、故障ノード切り離し手段１６が、管理対象のスライスに対応付けられた他のストレージノードが管理するスライスに、故障ノードのスライスが含まれているかどうかを判定する。故障ノードのスライスが含まれていたときは、この管理対象のスライスをシングルプライマリスライスに設定する。シングルプライマリスライスは、アクセスノードのアクセス先であって、セカンダリスライスへのミラーリングが行われない。【選択図】図１
2010128886.tif 000002
【特許請求の範囲】
【請求項１】
データを複数のストレージ装置に分散して格納するストレージシステムにて、前記ストレージ装置の実データ記憶領域を管理するコンピュータが故障したとき、前記コンピュータを切り離す故障ノード切り離し処理プログラムにおいて、
前記コンピュータを、
仮想的な論理ボリュームを分割したセグメントに対し、前記ストレージ装置の実データ記憶領域を前記セグメントの単位で分割したスライスを、アクセスノードからのアクセス先として前記セグメントのデータを格納するプライマリスライス、または、前記プライマリスライスのデータをミラーリングして格納するセカンダリスライスとして割り当て、前記セグメントと、前記セグメントに割り当てられた前記プライマリスライス及び前記セカンダリスライスと、を対応付けた管理情報を記憶手段に格納し、前記管理情報に基づいて前記アクセスノードからのアクセス要求を処理するアクセス処理手段、
他の前記ストレージ装置の実記憶領域を管理する他のコンピュータが正常動作中に所定の周期で送信する生存信号を監視し、一定期間前記生存信号が検出されなかった前記他のコンピュータを故障ノードとして検出する故障ノード検出手段、
前記故障ノードと前記管理情報を照合し、管理対象の前記スライスが前記故障ノードの管理する前記スライスに対応付けられていたときは、管理対象の前記スライスを前記アクセスノードのアクセス先であって前記ミラーリングが停止されるシングルプライマリスライスに設定し、前記故障ノードを切り離す故障ノード切り離し手段、
として機能させることを特徴とする故障ノード切り離し処理プログラム。
【請求項２】
前記コンピュータを、
前記故障ノード検出手段によって検出された前記故障ノードを故障ノード候補とし、前記故障ノード候補の通知を前記他のコンピュータに向けて送信するとともに、前記他のコンピュータから前記故障ノード候補の通知を受信し、前記通知より抽出された故障ノード候補と、自身が検出した前記故障ノード候補とを照合し、一致しているときのみ前記故障ノード候補を前記故障ノードとして確定させる故障ノード確定手段、
として機能させることを特徴とする請求項１記載の故障ノード切り離し処理プログラム。
【請求項３】
前記アクセス処理手段は、前記アクセスノードから前記セグメントを指定して要求される指定セグメントに対応する管理情報の読み出し要求を受けたときは、前記記憶手段に格納される前記管理情報から前記指定セグメントに対応する管理情報を検索し、検索されたときは該指定セグメントに対応する管理情報を前記アクセスノードに送信し、検索されなかったときは前記指定セグメントに対応する管理情報の読み出し要求を前記他のコンピュータに向けて送信し、該指定セグメントに対応する管理情報を有する前記他のコンピュータから取得された前記指定セグメントに対応する管理情報を前記アクセスノードに送信する、ことを特徴とする請求項１記載の故障ノード切り離し処理プログラム。
【請求項４】
データを複数のストレージ装置に分散して格納するストレージシステムにて、前記ストレージ装置の実データ記憶領域を管理するコンピュータが故障したとき、前記コンピュータを切り離す故障ノード切り離し方法において、
アクセス処理手段が、仮想的な論理ボリュームを分割したセグメントに対し、前記ストレージ装置の実データ記憶領域を前記セグメントの単位で分割したスライスを、アクセスノードからのアクセス先として前記セグメントのデータを格納するプライマリスライス、または、前記プライマリスライスのデータをミラーリングして格納するセカンダリスライスとして割り当て、前記セグメントと、前記セグメントに割り当てられた前記プライマリスライス及び前記セカンダリスライスと、を対応付けた管理情報を記憶手段に格納し、前記管理情報に基づいて前記アクセスノードからのアクセス要求を処理する手順と、
故障ノード検出手段が、他の前記ストレージ装置の実記憶領域を管理する他のコンピュータが正常動作中に所定の周期で送信する生存信号を監視し、一定期間前記生存信号が検出されなかった前記他のコンピュータを故障ノードとして検出する手順と、
故障ノード切り離し手段が、前記故障ノードと前記管理情報を照合し、管理対象の前記スライスが前記故障ノードの管理する前記スライスに対応付けられていたときは、管理対象の前記スライスを前記アクセスノードのアクセス先であって前記ミラーリングが停止されるシングルプライマリスライスに設定し、前記故障ノードを切り離す手順と、
を有することを特徴とする故障ノード切り離し方法。
【請求項５】
データを複数のストレージ装置に分散して格納するストレージシステムにおいて、
仮想的な論理ボリュームを分割したセグメントに対し、前記ストレージ装置の実データ記憶領域を前記セグメントの単位で分割したスライスを、アクセスノードからのアクセス先として前記セグメントのデータを格納するプライマリスライス、または、前記プライマリスライスのデータをミラーリングして格納するセカンダリスライスとして割り当て、前記セグメントと、前記セグメントに割り当てられた前記プライマリスライス及び前記セカンダリスライスと、を対応付けた管理情報が格納される記憶手段と、前記管理情報に基づいて前記アクセスノードからのアクセス要求を処理するアクセス処理手段と、他の前記ストレージ装置の実記憶領域を管理する他のコンピュータが正常動作中に所定の周期で送信する生存信号を監視し、一定期間前記生存信号が検出されなかった前記他のコンピュータを故障ノードとして検出する故障ノード検出手段と、前記故障ノードと前記管理情報を照合し、管理対象の前記スライスが前記故障ノードの管理する前記スライスに対応付けられていたときは、管理対象の前記スライスを前記アクセスノードのアクセス先であって前記ミラーリングが停止されるシングルプライマリスライスに設定し、前記故障ノードを切り離す故障ノード切り離し手段と、を備えた複数のストレージノードと、
前記ストレージノードから前記管理情報を取得し、前記管理情報に基づいてアクセス先の前記ストレージノードを特定し、特定された前記ストレージノードに対しアクセス要求を行う前記アクセスノードと、
を有することを特徴とするストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は故障ノード切り離し処理プログラム、故障ノード切り離し方法及びストレージシステムに関し、特にデータを複数のストレージ装置に分散して格納するストレージシステムにて、ストレージ装置の実データ記憶領域を管理するコンピュータが故障したとき、このコンピュータの切り離す故障ノード切り離し処理プログラム、故障ノード切り離し方法及びストレージシステムに関する。
【背景技術】
【０００２】
従来、ストレージシステムとして、複数のストレージノードをネットワーク上に分散配置して協働させることによって、性能及び信頼性を向上させる分散型のマルチノードストレージシステムがある。マルチノードストレージシステムでは、仮想的な論理ボリュームをセグメント単位に分割して複数のストレージノードに分散して格納する。ストレージノードは、実記憶領域である物理ディスクをスライス単位に分割して管理している。通常、データは二重化されており、１つのセグメントに対し、プライマリスライスと、セカンダリスライスとが用意される。すなわち、通常状態でのセグメントは、プライマリスライスとセカンダリスライスから構成される。プライマリスライスは、外部の端末装置などからのアクセス要求を処理するアクセスノードが直接読み書きするスライスである。セカンダリスライスは、プライマリスライスへの書き込みがあったときに、ストレージノードがミラーリングしてデータを書き込むスライスである。また、セグメントが割り当てられていないスライスは、フリースライスとして管理される。
【０００３】
ストレージノードの管理を行う制御ノードは、ストレージノードの故障を検出すると、リカバリ処理を行って、故障したセグメントを回復する（例えば、特許文献１参照）。
リカバリ処理では、以下の処理が実行される。
【０００４】
（１）ストレージノードの故障の検出
（２）故障ノードの切り離し
（３）欠損したセカンダリスライスの再割り当てとミラーライトの再開
（４）再割り当てしたスライスへのデータコピー
なお、故障ノードの切り離しでは、故障ノードにセカンダリスライスがある場合、セカンダリスライスを欠損したセグメントのプライマリスライスを有するストレージノードからのミラーライトを停止する。また、故障ノードにプライマリスライスがある場合、プライマリを欠損したセグメントのセカンダリスライスをプライマリスライスに変更し、ミラーライトを停止する。
【０００５】
リカバリ処理では、（２）の故障ノードの切り離しが終了した時点でマルチノードストレージのアクセスが再開する。その後、再割り当てしたスライスへのコピーが完了した時点で二重化が回復する。
【特許文献１】再表２００４／１０４８４５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、従来のマルチノードストレージでは、制御ノードが故障ノードの切り離しを行うまでアクセスが再開できないという問題点がある。
ここで、セグメントに対するアクセス処理について説明する。図１２は、アクセス処理の動作シーケンスを示した図である。
【０００７】
外部の端末装置などからデータの読み出し要求があると、アクセスノードは、プライマリスライスを有するディスクノード（Ｐ）に対し、リード要求９０１を発行する。要求を受けたディスクノード（Ｐ）は、物理ディスク読み込み処理９０２を行ってプライマリスライスからデータを読み出す。そして、読み出したデータ９０３をアクセスノード経由で要求元に送る。このように、リード処理は、アクセスノードと、ディスクノード（Ｐ）間の処理で終了する。
【０００８】
一方、データの書き込み要求があると、アクセスノードは、ディスクノード（Ｐ）に対し、ライト要求９１１を発行する。要求を受けたディスクノード（Ｐ）は、セカンダリスライスを有するディスクノード（Ｓ）にミラーライト９１２を行う。ディスクノード（Ｓ）は、物理ディスク書き込み処理９１３を行って、セカンダリスライスを更新し、正常完了（ＯＫ）９１４をディスクノード（Ｐ）に返す。これを受けたディスクノード（Ｐ）は、物理ディスク書き込み処理９１５を行って、プライマリスライスを更新する。その後、正常完了（ＯＫ）９１６がアクセスノードを介して要求元に送られる。このように、ライト処理は、アクセスノードとディスクノード（Ｐ）に加え、セカンダリスライスを有するディスクノード（Ｓ）の処理が完了しなければ、正常終了しない。
【０００９】
このため、例えば、ディスクノード（Ｓ）が故障すると、ディスクノード（Ｓ）からの正常完了（ＯＫ）９１４が得られなくなるため、ディスクノード（Ｐ）が正常であるにもかかわらず、ライト要求９１１は正常に終了しない。この状態は、故障したディスクノード（Ｓ）が切り離されるまで続く。
【００１０】
しかし、故障ノードの検出から切り離しまでの処理は、すべて制御ノードが行っているため、制御ノードが停止していると故障ノードの切り離しができない。したがって、ストレージノードが正常であるのに、アクセスの再開ができない、もしくはアクセス再開までの時間がかかることがあり、サービスの継続性の観点から問題であった。
【００１１】
本発明はこのような点に鑑みてなされたものであり、制御ノードによらず故障ノードの切り離しが可能な故障ノード切り離し処理プログラム、故障ノード切り離し方法及びストレージシステムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、データを複数のストレージ装置に分散して格納するストレージシステムにて、ストレージ装置の実データ記憶領域を管理するコンピュータが故障したときに、このコンピュータを切り離す故障ノード切り離し処理プログラムが提供される。この故障ノード切り離し処理プログラムは、コンピュータを、アクセス処理手段、故障ノード検出手段及び故障ノード切り離し手段として機能させる。アクセス処理手段は、記憶手段に格納される管理情報に基づいて、アクセスノードからのアクセス要求を処理する。管理情報は、仮想的な論理ボリュームを分割したセグメントに対し、ストレージ装置の実データ記憶領域をセグメントの単位で分割したスライスを、アクセスノードからのアクセス先としてセグメントのデータを格納するプライマリスライス、または、プライマリスライスのデータをミラーリングして格納するセカンダリスライスとして割り当て、セグメントと、セグメントに割り当てられたプライマリスライス及びセカンダリスライスと、を対応付けた情報である。故障ノード検出手段は、他のストレージ装置の実記憶領域を管理する他のコンピュータが正常動作中に所定の周期で送信する生存信号を監視し、一定期間前記生存信号が検出されなかった他のコンピュータを故障ノードとして検出する。故障ノード切り離し手段は、故障ノードと管理情報を照合する。そして、管理対象のスライスが故障ノードの管理するスライスに対応付けられていたときは、管理対象のスライスをアクセスノードのアクセス先であってミラーリングが停止されるシングルプライマリスライスに設定し、故障ノードを切り離す。
【００１３】
このような故障ノード切り離し処理プログラムを実行するコンピュータは、管理情報に基づいて、ストレージ装置の実記憶領域をセグメントの単位で分割したスライスごとに管理している。アクセスノードからのアクセス要求を受けた時は、アクセス処理手段が、管理情報に基づいてアクセス要求を処理する。また、故障ノード検出手段は、他のストレージ装置の実記憶領域を管理するコンピュータが正常時に所定の周期で送信する生存信号を監視し、一定期間生存信号が検出されなかったコンピュータを故障ノードとしている。故障ノードが検出されたときは、故障ノード切り離し手段が、管理対象のスライスに対応付けられた他のコンピュータが管理するスライスに、故障ノードのスライスが含まれているかどうかを判定する。故障ノードのスライスが含まれていたときは、この管理対象のスライスをシングルプライマリスライスに設定する。シングルプライマリスライスは、アクセスノードのアクセス先であって、セカンダリスライスへのミラーリングが行われない。これにより、このスライスに対応する故障ノードのスライスは、切り離された状態になる。
【００１４】
また、上記課題を解決するために、上記の故障ノード切り離し処理プログラムと同様の処理手順を実行させる故障ノード切り離し方法、及び同様の機能を備えた装置を有するストレージシステムが提供される。
【発明の効果】
【００１５】
開示の故障ノード切り離し処理プログラム、故障ノード切り離し方法及びストレージシステムによれば、実データ記憶領域を管理するコンピュータ間で互いの状態を監視し、故障ノードが検出されたときは自律的に故障ノードを切り離すことができる。これにより、制御ノードによらず、故障ノードの切り離しができることとなり、故障ノードが停止していてもアクセスが再開される。この結果、サービスの継続性を向上させることができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態について図面を参照して説明する。まず、発明の概要について説明し、その後、詳細な内容を説明する。
図１は、発明の概要を示した図である。ストレージノード１０は、ネットワークを介して接続する他のストレージノード２０，３０と、アクセスノード６０と、制御ノード７０と、を有するストレージシステムに組み込まれる。
【００１７】
ストレージノード２０，３０は、ストレージノード１０と同様の構成を有し、互いに協働してストレージシステムの論理ボリュームに対応する実データ記憶領域を管理する。
アクセスノード６０は、仮想的な論理ボリュームと、実データ記憶領域とを対応付けた管理情報に基づいて、ストレージノード１０，２０，３０が管理する実データ記憶領域にアクセス要求を行う。
【００１８】
制御ノード７０は、論理ボリュームを所定のサイズに分割したセグメントと、ストレージノード１０，２０，３０が管理する実データ記憶領域をこの所定のサイズで分割したスライスとの対応付けを動的に制御する。
【００１９】
ストレージノード１０，２０，３０について、ストレージノード１０を例にして説明する。ストレージノード１０は、ストレージ１１に接続し、通信手段１２、ハートビート送出手段１３、故障ノード検出手段１４、故障ノード確定手段１５、故障ノード切り離し手段１６及びアクセス処理手段１７を有する。ストレージ２０，３０の構成も同様である。
【００２０】
ストレージ１１は、実データが格納される実データ記憶領域である。この実データ記憶領域は、デバイスに関する情報を格納するデバイス情報１１ａと、スライスに関する情報を格納するｎ個（ｎは任意の整数）のメタデータ１１ｂと、セグメントに対応付けられるｎ個のスライス１１ｃとに分割される。スライス１１ｃは、１つのセグメントに対し、プライマリスライスと、セカンダリスライスの２つが割り当てられ、二重化を構成する。プライマリスライスは、アクセスノード６０のアクセス先に指定され、セグメントのデータを格納する。セカンダリスライスは、プライマリスライスのデータがミラーリングされる。図１２で説明したように、リード要求に対してはプライマリスライスのデータを読み出して応答する。ライト要求に対しては、ミラーリングを行ってセカンダリスライスにデータを書き込んだ後、プライマリスライスにデータが書き込まれる。スライスをどのセグメントと対応付けるか、プライマリスライスまたはセカンダリスライスのどちらにするか、などは、制御ノード７０が動的に決定することができる。なお、詳しくは後述するが、ストレージノード１０では、他のストレージノード２０，３０が故障したことを検出し、自律的にスライスの状態を変更することができる。メタデータ１１ｂは、スライスを管理するための管理情報である。スライスがどのセグメントに割り当てられているか、スライスの状態は、プライマリスライスであるかセカンダリスライスであるか、ミラーリングされているスライスはどこか、などの情報が登録されている。
【００２１】
通信手段１２は、図示しないネットワークを介してストレージノード１０と、他のストレージノード２０，３０、アクセスノード６０、制御ノード７０などとの間で行われる通信を制御する。
【００２２】
ハートビート送出手段１３は、生存信号であるハートビート（ＨＢ）を所定の周期で送出する。ハートビートは、不特定多数の相手に向けてデータを送信することができるブロードキャストで送信される。送出されたハートビートは、他のストレージノード２０，３０と、制御ノード７０が利用する。
【００２３】
故障ノード検出手段１４は、他のストレージノード２０，３０が、送出するハートビートを監視し、一定期間ハートビートが検出されないストレージノードがあったときは、このストレージノードを故障ノードとする。また、必要に応じて、検出された故障ノードを故障ノード候補とし、故障ノード確定手段１５によって確定処理を行ってもよい。
【００２４】
故障ノード確定手段１５は、故障ノード検出手段１４によって検出された故障ノード候補を、ブロードキャストにより、他のストレージノード２０，３０へ通知する。他のストレージノード２０，３０でも同様に故障ノードの候補が検出されたときは、ブロードキャストで通知が送られてくる。そこで、他のストレージノード２０，３０から送信された故障ノード候補の通知から故障ノード候補を抽出し、自身が検出した故障ノード候補と照合する。一致しているときは、故障ノード候補を故障ノードとして確定する。
【００２５】
故障ノード切り離し手段１６は、故障ノード検出手段１４が検出した故障ノード、または、故障ノード検出手段１４が故障ノード候補として検出し、故障ノード確定手段１５によって故障ノードと確定された故障ノードの切り離しを行う。メタデータには、ミラー先のスライス、すなわち、スライスがプライマリスライスの場合は対応付けられるセカンダリスライス、スライスがセカンダリスライスの場合は対応付けられるプライマリスライスのストレージノードが登録されている。ここでは、検出された故障ノードと、自身のスライスのミラー先のストレージノードとが一致していないかを照合する。一致しているときは、このスライスをシングルプライマリスライスに設定する。シングルプライマリスライスは、ミラーのスライスのないプライマリスライスをいう。アクセスノード６０からのアクセス先にはなるが、ミラーのスライス（対応付けられたセカンダリスライス）へのミラーリングは行われない。これにより、故障ノードが切り離されるので、アクセスノード６０からのアクセスが可能となる。
【００２６】
アクセス処理手段１７は、アクセスノード６０からの要求を処理する。リード要求であれば、アクセス要求のあったプライマリスライスからデータを読み出し、応答する。ライト要求であり、対象スライスがプライマリスライスであったときは、このプライマリスライスのミラーのスライスにライト要求し、正常応答が得られたとき、プライマリスライスへデータ書き込みを行って応答を返す。ライト要求であり、対象スライスがシングルプライマリスライスであったときは、シングルプライマリスライスへのデータ書き込みのみを行って応答を返す。また、アクセスノード６０は、アクセス要求先のストレージノードへアクセス要求ができないとき、他のストレージノードへセグメントを指定してメタデータの読み出し要求を行う。これを受けたときは、指定セグメントに対応するメタデータを持っていれば、これをアクセスノード６０へ送る。持っていないときは、指定セグメントのメタデータ読み出し要求をブロードキャストで送信する。これにより、該当するメタデータを持っているストレージノードからブロードキャストでメタデータが送られてくる。こうして送られてきたメタデータをアクセスノード６０へ送る。故障ノード切り離し手段１６によってメタデータが変更されている場合は、変更後のメタデータがアクセスノード６０に送られる。以降、アクセスノード６０は、取得したメタデータに基づいてアクセスを行うことができる。このように、ストレージノード１０，２０，３０が自律的に変更したメタデータは、制御ノード７０によらずアクセスノード６０へ伝えることができる。
【００２７】
このようなストレージノードを有するマルチノードストレージシステムの故障ノード切り離し処理及び故障ノード切り離し方法について説明する。
ストレージノード１０，２０，３０は、互いに定期的にハートビートを送出している。ここで、ストレージノード２０が故障したとする。ストレージノード２０が故障すると、ハートビートが途絶え、故障ノード検出手段１４によって故障ノードとして検出される。このとき、ストレージノード１０，３０は、ともにストレージノード２０を故障ノード候補として検出し、ブロードキャストで通知する。ストレージノード１０は、ストレージノード３０から、故障ノード候補としてストレージノード２０を検出したことが通知される。故障ノード確定手段１５は、ストレージノード３０からの通知と、故障ノード検出手段１４の検出した故障ノード候補とが一致するので、ストレージノード２０を故障ノードとして確定する。故障ノード切り離し手段１６は、メタデータを調べ、故障ノードとして確定されたストレージノード２０がミラー先のスライスとなっているスライスを抽出する。抽出されたときは、このスライスをシングルプライマリスライスに変更し、メタデータを更新する。これにより、故障ノードが管理するスライスが切り離され、アクセスノード６０からのアクセスが可能となる。変更前はプライマリスライスであれば、故障発生時リード要求は可であるがライト要求は不可となる。シングルプライマリスライスとしたことで、欠損したセカンダリスライスへのミラーリングが停止される。このため、アクセスノード６０からのライト要求を正常に完了することができる。変更前はセカンダリスライスであれば、故障発生時、リード要求もライト要求も不可になる。シングルプライマリスライスとしたことで、欠損したプライマリスライスの代わりにプライマリスライスとなり、ミラーリングを停止される。このため、アクセスノード６０からのリード要求及びライト要求を正常に完了することができる。
【００２８】
このように、スライスノードのみで故障ノードを検出し、自律的に故障ノードを切り離すことが可能となる。また、常駐の制御ノードがなくても、アクセスノードでメタデータを参照することもできる。この結果、アクセス不可となる事態を抑制し、サービスの継続性を向上させることができる。
【００２９】
以下、発明の実施の形態を詳細に説明する。図２は、本実施の形態のマルチノードストレージの構成例を示す図である。
マルチノードストレージは、ネットワーク５００を介して、複数のディスクノード１００，２００，３００，４００と、アクセスノード６００、制御ノード７００及び管理ノード８００が接続されている。
【００３０】
ディスクノード１００にはディスク１１０、ディスクノード２００にはディスク２１０、ディスクノード３００にはディスク３１０、ディスクノード４００にはディスク４１０が、それぞれ接続されている。ディスク１１０には、複数のハードディスク装置（ＨＤＤ）が実装されている。ディスク２１０，３１０，４１０の構成も同様である。ディスクノード１００，２００，３００，４００は、例えば、ＩＡ（Intel Architecture）と呼ばれるアーキテクチャのコンピュータである。そして、接続されたディスク１１０，２１０，３１０，４１０に格納されたデータを管理し、管理しているデータをアクセスノード６００経由で端末装置６２１，６２２，６２３に提供する。また、ディスクノード１００，２００，３００，４００は、冗長性を有するデータを管理するため、同一のデータが、少なくとも２つのディスクノードで管理される。本実施の形態では、ディスクノード１００，２００，３００，４００として、図１に示した故障ノード切り離し処理を行うストレージノードを提供する。
【００３１】
アクセスノード６００には、ネットワーク６１０を介して複数の端末装置６２１，６２２，６２３が接続されている。アクセスノード６００は、ディスクノード１００，２００，３００，４００のそれぞれが管理しているデータの格納場所を認識しており、端末装置６２１，６２２，６２３からの要求に応答して、ディスクノード１００，２００，３００，４００へデータアクセスを行う。
【００３２】
制御ノード７００は、ディスクノード１００，２００，３００，４００を管理する。例えば、制御ノード７００は、ディスクノード１００，２００，３００，４００から送出されるハートビートを監視し、故障を検出したときはリカバリ処理を行う。
【００３３】
管理ノード８００は、マルチノードストレージのシステム全体を管理する。
図３は、ディスクノードのハードウェア構成例を示す図である。ディスクノード１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０６を介してＲＡＭ（Random Access Memory）１０２、ＨＤＤ１０３、通信インタフェース１０４及びＨＤＤインタフェース１０５が接続されている。
【００３４】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションのプログラムが格納される。通信インタフェース１０４は、ネットワーク５００に接続されている。通信インタフェース１０４は、ネットワーク５００を介して、他のディスクノード、アクセスノード６００、制御ノード７００及び管理ノード８００など、マルチノードストレージシステムを構成する他のコンピュータとの間でデータの送受信を行う。ＨＤＤインタフェース１０５は、ディスク１１０を構成するＨＤＤへのアクセス処理を行う。
【００３５】
ここで、論理ディスクとディスク１１０，２１０，３１０，４１０の関係について説明する。
図４は、論理ディスクとディスクとの関係の一例を示した図である。
【００３６】
仮想的な論理ディスク１０００は、セグメント１００１，１００２，１００３，１００４，１００５に分割されて管理される。各セグメントは、セグメントを識別する識別情報が付与される。ここでは、論理ディスク名と、アドレスとから構成される識別情報が付与されるとする。例えば、セグメント１００１は、論理ディスク名Ｌ１と、アドレスＡ１とから、Ｌ１−Ａ１という識別情報が設定される。同様に、セグメント１００２はＬ１−Ａ２、セグメント１００３はＬ１−Ａ３、セグメント１００４はＬ１−Ａ４、セグメント１００５はＬ１−Ａ５と設定される。
【００３７】
実データ記憶領域であるディスク１１０，２１０，３１０，４１０は、記憶領域がスライスに分割されて管理される。図４の例では、ディスク１１０は、スライス１１０１，１１０２，１１０３，１１０４を有している。ディスク２１０は、スライス２１０１，２１０２，２１０３，２１０４を有している。ディスク３１０は、スライス３１０１，３１０２，３１０３，３１０４を有している。そして、ディスク４１０は、スライス４１０１，４１０２，４１０３，４１０４を有している。各スライスには、制御ノード７００によって、セグメントが割り当てられている。図の例では、セグメント［Ｌ１−Ａ１］１００１に対し、ディスク１１０のスライス１１０１と、ディスク３１０のスライス３１０２とが割り当てられている。図では、プライマリスライスをＰ、セカンダリスライスをＳとしている。ディスク１１０のスライス１１０１の［Ｌ１−Ｐ１］は、セグメント［Ｌ１−Ａ１］に対応付けられたプライマリスライスであることを表している。同様に、ディスク３１０のスライス３１０２の［Ｌ１−Ｓ１］は、セグメント［Ｌ１−Ａ１］に対応付けられたセカンダリスライスであることを表している。また、［Ｆ］は、セグメントが割り当てられていないフリーの状態であることを表す。なお、図からわかるように、１つのセグメントに対応するプライマリスライスとセカンダリスライスとは、別のディスクに配置される。
【００３８】
例えば、セグメント［Ｌ１−Ａ１］１００１のプライマリスライスは、ディスク１１０のスライス［Ｌ１−Ｐ１］１１０１、セカンダリスライスは、ディスク３１０のスライス［Ｌ１−Ｓ１］３１０２である。セグメント［Ｌ１−Ａ２］１００２のプライマリスライスは、ディスク２１０のスライス［Ｌ１−Ｐ２］２１０１、セカンダリスライスは、ディスク１１０のスライス［Ｌ１−Ｓ２］１１０２である。同様に、セグメント［Ｌ１−Ａ３］１００３のプライマリスライスは、ディスク３１０のスライス［Ｌ１−Ｐ３］３１０１、セカンダリスライスは、ディスク２１０のスライス［Ｌ１−Ｓ３］２１０２である。
【００３９】
このようなセグメントと、プライマリスライス及びセカンダリスライスとの関係は、メタデータに記述される。
図５は、メタデータの一例を示した図である。（Ａ）は、ディスクノードＤＰ１のメタデータ、（Ｂ）は、ディスクノードＤＰ２のメタデータの例である。なお、図５は、ディスクノードＤＰ１及びディスクノードＤＰ２のスライスには、図４に示したセグメントが割り当てられている。
【００４０】
（Ａ）ディスクノードＤＰ１のメタデータ１２００は、ノードＩＤ１２０１、スライスＩＤ１２０２、状態１２０３、論理ディスク１２０４、アドレス１２０５、ミラーのノードＩＤ１２０６及びミラーのスライスＩＤ１２０７の情報項目を有する。
【００４１】
ノードＩＤ１２０１には、スライスを格納するディスクノードのＩＤが登録される。メタデータ１２００のスライスは、すべてのディスクノードＤＰ１に格納されるので、「ＤＰ１」が登録されている。スライスＩＤ１２０２には、ノードＩＤ１２０１のディスクノードにおけるスライスのＩＤが登録される。ここでは、スライス「ＳＬ１」「ＳＬ２」「ＳＬ３」「ＳＬ４」が登録されている。なお、ＳＬ１は、図４に示したディスクノード１１０のスライス１１０１に相当する。同様に、ＳＬ２はスライス１１０２、ＳＬ３はスライス１１０３、ＳＬ４はスライス１１０４に対応する。
【００４２】
状態１２０３には、スライスの割り当て状態が登録される。「Ｐ」は、プライマリスライスに割り当てられている状態を表している。プライマリスライスは、セグメントを構成するスライスで、対応する「Ｓ」がミラー先になる。「Ｓ」は、セカンダリスライスに割り当てられている状態を表している。セカンダリスライスは、プライマリスライスとともにセグメントを構成するスライスで、対応する「Ｐ」がミラー元になる。「Ｆ」は、セグメントに割り当てていないスライスを表している。他に、「ＳＰ」と「Ｒ」がある。「ＳＰ」は、シングルプライマリスライスを表している。シングルプライマリスライスは、縮退セグメントを構成するスライスで、対応するミラーのスライスがない。「Ｒ」は、リザーブスライスを表している。リザーブスライスは、二重化回復中のセグメントを構成するスライスで、他のディスクノードの「Ｐ」がミラー元となる。
【００４３】
論理ディスク１２０４には、スライスに割り当てられたセグメントの論理ディスクのＩＤが登録される。ここでは、図４の論理ディスク１０００のＩＤである「Ｌ１」が登録されている。
【００４４】
アドレス１２０５には、論理ディスク上でスライスが割り当てられている先頭アドレスが登録される。なお、アドレスの代わりにセグメントのＩＤが登録されてもよい。ここでは、図４の論理ディスク１０００のアドレス「Ａ１」「Ａ２」が登録されている。
【００４５】
ミラーのノードＩＤ１２０６には、ミラー先（元）のスライスを持つディスクノードのＩＤが登録される。スライスが「Ｐ」のときは、ミラー先（Ｐからミラーリングする）になる。スライスが「Ｓ」のときは、ミラー元（Ｓにミラーリングされる）になる。ここでは、図４の他のディスクノード「ＤＰ３」「ＤＰ２」が登録されている。
【００４６】
ミラーのスライスＩＤ１２０７には、ミラー先（元）のスライスのＩＤが登録される。
例えば、１行目のノードＩＤ「ＤＰ１」、スライスＩＤ「ＳＬ１」によって識別されるスライス［Ｌ１−Ｐ１］１１０１は、状態が「Ｐ（プライマリスライス）」であり、論理ディスク「Ｌ１」、アドレス「Ａ１」によって識別されるセグメント［Ｌ１−Ａ１］１００１が割り当てられていることを表している。また、ミラー先には、ディスクノード「ＤＰ３」とスライスＩＤ「ＳＬ２」によって識別されるディスク３１０のスライス［Ｌ１−Ｓ１］３１０２が割り当てられていることを表している。２行目も同様である。
【００４７】
（Ｂ）ディスクノードＤＰ２のメタデータも同様の項目が登録される。例えば、１行目のノードＩＤ「ＤＰ２」、スライスＩＤ「ＳＬ１」によって識別されるスライス［Ｌ１−Ｐ２］２１０１は、状態が「Ｐ（プライマリスライス）」であり、論理ディスク「Ｌ１」、アドレス「Ａ２」によって識別されるセグメント［Ｌ１−Ａ２］１００２が割り当てられていることを表している。また、ミラー先には、ディスクノード「ＤＰ１」とスライスＩＤ「ＳＬ２」によって識別されるディスク１１０のスライス［Ｌ１−Ｓ２］１１０２が割り当てられていることを表している。２行目も同様である。
【００４８】
このように、メタデータには、スライスごとに、状態、割り当てられたセグメント、ミラー先（元）のスライスに関する情報が登録される。これらの情報は、状況の変化に応じて動的に更新される。
【００４９】
ブロードキャストについて説明する。図６は、ブロードキャストのフォーマットの一例と、具体例を示した図である。（ａ）は、ブロードキャストのフォーマットの一例、（ｂ）は具体的なブロードキャストの例を示している。
【００５０】
ブロードキャストは、ハートビート送出手段１３によるハートビート送出時と、故障ノード確定手段１５による故障ノード候補通知時に用いられる。不特定多数に向けて送信する方式であり、送信されたブロードキャストデータは、ネットワークに接続する他の装置すべてで受信することができる。
【００５１】
（ａ）ブロードキャスト・フォーマットに示したブロードキャスト５０００は、発信元ＩＤ５００１と、故障ノードＩＤ５００２とが設定されるようになっている。発信元ＩＤ５００１には、ブロードキャストを送信した発信元のＩＤが設定される。ここでは、ディスクノード１００，２００，３００，４００のすべてでブロードキャストを発信することができる。故障ノードＩＤ５００２には、検出された故障ノード候補のＩＤが設定される。
【００５２】
（ｂ）は、ブロードキャストの具体例を示している。
通常時のブロードキャスト５０１０は、ハートビート送出に発行される。「発信元ＩＤ」には、ハートビートを送出したディスクノードのＩＤが設定される。また、ハートビート送出時、「故障ノードＩＤ」は、「なし（ＮＵＬＬ）」になる。ブロードキャスト５０１０を受信したときは、故障ノード検出手段１４において、「発信元ＩＤ」に設定されるディスクノードは故障していないと判定される。
【００５３】
故障検出時のブロードキャスト５０２０は、故障ノード確定手段１５が、故障ノード候補を通知する際に発行される。「発信元ＩＤ」には、故障ノード候補を検出したディスクノードのＩＤが設定される。また、「故障ノードＩＤ」には、故障ノード候補としたディスクノードのＩＤが設定される。ブロードキャスト５０２０を受信したときは、故障ノード確定手段１５において、「故障ノードＩＤ」が、自身が検出した故障ノード候補と一致するかどうかを判定するために用いられる。
【００５４】
次に、上記の構成のマルチノードストレージシステムの故障ノード切り離し処理動作及び故障ノード切り離し方法について詳しく説明する。
図７は、故障ノード切り離し処理の動作シーケンスを示した図である。
【００５５】
通常動作時には、各ディスクノードは所定の周期でハートビート（ＨＢ）をブロードキャストで送信する。ディスクノードＤＰ１（１００）が、ハートビート（ＨＢ）６００１を送信すると、ディスクノードＤＰ２（２００）、ディスクノードＤＰ３（３００）及びディスクノードＤＰ４（４００）でこれを受信することができる。同様に、ディスクノードＤＰ２（２００）が、ハートビート（ＨＢ）６００２を送信すると、ディスクノードＤＰ１（１００）、ディスクノードＤＰ３（３００）及びディスクノードＤＰ４（４００）でこれを受信することができる。ディスクノードＤＰ３（３００）のハートビート（ＨＢ）６００３、ディスクノードＤＰ４（４００）のハートビート（ＨＢ）６００４についても同様である。各ディスクノード１００，２００，３００，４００は、ハートビート（ＨＢ）が受信できたディスクノードは正常であると判定する。
【００５６】
ここで、ディスクノードＤＰ３（３００）に故障が発生し、ハートビート（ＨＢ）が途絶えたとする。一定期間ディスクノードＤＰ３（３００）からのハートビート（ＨＢ）が検出されなかった他のディスクノード１００，２００，４００は、それぞれにディスクノードＤＰ３（３００）の故障を検出する（６００５，６００６，６００７）。
【００５７】
ディスクノードＤＰ３（３００）の故障を検出した各ディスクノード１００，２００，４００は、ディスクノードＤＰ３（３００）を故障ノード候補として通知する。ディスクノードＤＰ１（１００）は、ブロードキャスト５０２０を用いて故障通知６００８を送信する。同様に、ディスクノードＤＰ２（２００）は故障通知６００９、ディスクノードＤＰ４（４００）は故障通知６０１０を送信する。こうして、ディスクノード１００，２００，４００は、他のディスクノードから、自身が検出した故障ノード候補「ディスクノードＤＰ３」の故障が他でも検出されたことを通知する故障通知を受け取る。
【００５８】
ディスクノードＤＰ１（１００）は、ディスクノードＤＰ３（３００）の故障を確定し（６０１１）、ディスクノードＤＰ３（３００）のスライスをミラー先あるいはミラー元に持つスライスをシングルプライマリスライス（ＳＰ）に設定する（６０１２）。ディスクノードＤＰ１（１００）が保有するスライス［Ｌ１−Ｐ１］１１０１は、ミラー先にディスクノードＤＰ３（３００）が指定されているので、このスライスの状態が「ＳＰ」に変更される。これにより、スライス［Ｌ１−Ｐ１］１１０１へのライト要求時に、故障したディスクノードＤＰ３（３００）へのミラーリングが停止され、ライトが正常に実行できるようになる。
【００５９】
ディスクノードＤＰ２（２００）も、故障通知を受け取ると、ディスクノードＤＰ３（３００）の故障を確定し（６０１３）、ディスクノードＤＰ３（３００）のスライスをミラー先あるいはミラー元に持つスライスをシングルプライマリスライス（ＳＰ）に設定する（６０１４）。ディスクノードＤＰ２（２００）の保有するスライス［Ｌ１−Ｓ３］２１０２のミラー元にディスクノードＤＰ３（３００）が指定されているので、このスライス状態が「Ｓ」から「ＳＰ」に変更される。これにより、アクセス先をスライス［Ｌ１−Ｓ３］２１０２とすれば、リード要求もライト要求も正常に実行できるようになる。
【００６０】
そして、ディスクノードＤＰ４（４００）も、ディスクノードＤＰ３（３００）の故障を確定し（６０１５）、ディスクノードＤＰ３（３００）のスライスをミラー先あるいはミラー元に持つスライスをシングルプライマリスライス（ＳＰ）に設定する（６０１６）。ディスクノードＤＰ４（４１０）のスライスの状態は、すべて「Ｆ」であるので変更はない。
【００６１】
こうして、ディスクノード１００，２００，４００でディスクノードＤＰ３（３００）の切り離し処理が自律的に行われ、それぞれが管理するメタデータが更新される。
ここで、各ディスクノードが更新する前のメタデータを有するアクセスノード６００が、ディスクノードＤＰ３（３００）のプライマリスライスに指定されるスライス［Ｌ１−Ｐ３］３１０１に格納されるデータへアクセス要求を行ったとする。このアクセス要求は、ディスクノードＤＰ３（３００）が故障しているためエラーとなり、アクセスノード６００は、メタデータをディスクノードに要求する。例えば、ディスクノードＤＰ４（４００）に対して、［Ｌ１−Ｐ３］に関するメタデータ照会６０１７を行う。ディスクノードＤＰ４（４００）は、このメタデータを持っていないので、ブロードキャストでメタデータ照会６０１８を行う。これは、ディスクノードＤＰ１（１００）及びディスクノードＤＰ２（２００）で受け取ることができる。このうち、［Ｌ１−Ｐ３］に関するメタデータを持っているディスクノードＤＰ２（２００）が更新されたメタデータ６０１９をブロードキャストで返す。これを受け取ったディスクノードＤＰ４（４００）が更新されたメタデータ６０２０をアクセスノード６００に返し、アクセスノード６００のメタデータが更新される。以降、アクセスノード６００は、取得されたメタデータに基づいて、ディスクノードＤＰ２（２００）へアクセス要求を行う。
【００６２】
このように、各ディスクノード内で更新されたメタデータは、制御ノードを介さずアクセスノードへ伝えることができる。これにより、常駐の制御ノードが存在しなくても、アクセスが継続される。
【００６３】
なお、図７では、メタデータ照会６０１８のブロードキャストをディスクノードが行うとしたが、アクセスノード６００が直接ブロードキャストでメタデータ照会を行うとしてもよい。
【００６４】
ディスクノードＤＰ１（１００）における切り離し処理についてさらに説明する。図８は、ディスクノードＤＰ１の切り離し処理時のメタデータ更新を示した図である。
ディスクノードＤＰ１のメタデータ１２００は、ディスクノードＤＰ３（３００）の切り離し処理が行われる前のメタデータを示している。ここでは、スライス「ＳＬ１」はプライマリスライス（Ｐ）であり、ミラー先にはディスクノードＤＰ３が指定されている。また、スライス「ＳＬ２」は、セカンダリスライス（Ｓ）であり、ミラー元にはディスクノードＤＰ２が指定されている。
【００６５】
ここで、ディスクノードＤＰ３（３００）が故障ノードと確定されるとセグメント状態１２０８は、スライス「ＳＬ１」が「ミラー先故障」となる。スライス「ＳＬ２」は「正常」のままである。そこで、欠損したミラー先のスライスの切り離し処理を行い、メタデータを更新する。切り離し後のディスクノードＤＰ１のメタデータ１２１０では、スライス「ＳＬ１」の状態が、シングルプライマリスライス（ＳＰ）１２１３に変更される。また、シングルプライマリスライス（ＳＰ）としたので、ミラーのノードＩＤ１２１６と、ミラーのスライスＩＤ１２１７とは削除される。
【００６６】
次に、ディスクノードＤＰ２（２００）について同様に説明する。図９は、ディスクノードＤＰ２の切り離し処理時のメタデータ更新を示した図である。
ディスクノードＤＰ２のメタデータ２２００は、ディスクノードＤＰ３（３００）の切り離し処理が行われる前のメタデータを示している。ここでは、スライス「ＳＬ１」はプライマリスライス（Ｐ）であり、ミラー先にはディスクノードＤＰ１が指定されている。また、スライス「ＳＬ２」は、セカンダリスライス（Ｓ）であり、ミラー元にはディスクノードＤＰ３が指定されている。
【００６７】
ここで、ディスクノードＤＰ３（３００）が故障ノードと確定されるとセグメント状態２２０８は、スライス「ＳＬ１」は「正常」が継続されるが、スライス「ＳＬ２」は「プライマリ故障」となる。そこで、欠損したプライマリスライスの代わりにプライマリになり、欠損したミラー元のスライスの切り離し処理を行って、メタデータを更新する。切り離し後のディスクノードＤＰ２のメタデータ２２１０では、スライス「ＳＬ２」の状態が、シングルプライマリスライス（ＳＰ）２２１３に変更される。また、シングルプライマリスライス（ＳＰ）としたので、ミラーのノードＩＤ２２１６と、ミラーのスライスＩＤ２２１７とは削除される。
【００６８】
以下、ディスクノードによる故障ノードの検出と切り離し処理の手順について、フローチャートを用いて説明する。
図１０は、故障ノードの検出と切り離し処理の手順を示したフローチャートである。
【００６９】
［ステップＳ０１］  ディスクノードは、他のディスクノードに向けて一定周期ごとに、ハートビート（ＨＢ）をブロードキャストで送出する。また、他のディスクノードが送出したハートビートを受信し、他のディスクノードのハートビートが一定期間途絶していないかどうかを監視する。
【００７０】
［ステップＳ０２］  ステップＳ０１のハートビート監視によって、一定期間ハートビートが途絶している故障ノードが検出されたかどうかを判定する。故障ノードが検出されたときは、処理をステップＳ０３に進める。故障ノードが検出されなかったときは、ステップＳ０１に戻って、ハートビートの監視を継続する。
【００７１】
［ステップＳ０３］  故障ノードが検出されたときは、検出された故障ノードを他のディスクノードに通知するため、故障ノードのＩＤをブロードキャストで送信する。
［ステップＳ０４］  他のディスクノードが送信した故障ノードのＩＤを通知するブロードキャストを受信する。所定の数のディスクノードから故障ノードのＩＤを通知するブロードキャストを受信するまで待つ。所定の数は、任意の数であり、故障ノードと自ノードを除く、他のディスクノードすべてとすることもできる。
【００７２】
［ステップＳ０５］  他のディスクノードがブロードキャストで通知した故障ＩＤと、自ノードが検出した故障ノードとが一致しているかどうかを判定する。一致していれば、処理をステップＳ０６に進める。一致していなければ、ステップＳ０１に戻って、ハートビート監視からの処理を行う。
【００７３】
［ステップＳ０６］  自ノードが検出した故障ノードと、他のディスクノードが検出した故障ノードとが一致したときは、このディスクノードを故障ノードに確定し、故障ノード切り離し処理を行う。故障ノード切り離し処理終了後、ステップＳ０１に戻って、ハートビート監視からの処理を繰り返す。
【００７４】
以上の処理手順が行われることにより、一定周期で送出されるハートビートを用いて、ディスクノード間で互いの故障を検出するとともに、検出された故障ノードをそれぞれのディスクノードで切り離すことができる。これにより、ディスクノードのみで自律的に故障ノードが切り離されるため、常駐の制御ノードが存在しなくてもアクセスノードからのアクセスを継続することができる。
【００７５】
次に、故障ノード切り離し処理について説明する。図１１は、故障ノード切り離し処理の手順を示したフローチャートである。
検出された故障ノードのＩＤを取得し、処理が開始される。
【００７６】
［ステップＳ６１］  メタデータから、未処理のスライスＩＤの情報を１行読み出す。そして、このスライスに割り当てられた「状態」、「ミラーのノードＩＤ」を抽出する。
［ステップＳ６２］  このスライスの「状態」をチェックし、セグメントが割り当てられているかどうかを判定する。割り当てられている（状態＝ＰまたはＳ）ときは、処理をステップＳ６３に進める。割り当てられていない（状態＝Ｆ）ときは、処理をステップＳ６８に進める。
【００７７】
［ステップＳ６３］  このスライスにセグメントが割り当てられているときは、「ミラーのノードＩＤ」を、検出された故障ノードのＩＤと照合する。
［ステップＳ６４］  ステップＳ６３における照合の結果、ミラーのノードＩＤが故障ノードのＩＤと一致していれば、処理をステップＳ６５に進め、ミラーのノードの切り離し処理を行う。一致していないときは、処理をステップＳ６８に進める。
【００７８】
［ステップＳ６５］  ミラーのノードＩＤと故障ノードのＩＤとが一致しているときは、このスライスの「状態」がプライマリスライス（Ｐ）であるか、セカンダリスライス（Ｓ）であるかどうかを判定する。プライマリスライス（Ｐ）であれば、処理をステップＳ６６に進める。セカンダリスライス（Ｓ）であれば、処理をステップＳ６７に進める。
【００７９】
［ステップＳ６６］  スライスがプライマリスライス（Ｐ）であれば、故障しているミラーのノードを切り離し、このミラーのノードに割り当てられたセカンダリスライス（Ｓ）へのミラーライトを停止する。具体的には、メタデータのこのスライスに対応する「状態」をシングルプライマリスライス（ＳＰ）に変更し、ミラーのノードＩＤとミラーのスライスＩＤの登録を削除する。そして、処理をステップＳ６８に進める。
【００８０】
［ステップＳ６７］  このスライスがセカンダリスライス（Ｓ）であれば、自スライスをプライマリスライス（Ｐ）に変更するとともに、故障しているミラーのノードを切り離し、このミラーのノードに割り当てられた前のプライマリスライス（Ｐ）へのミラーライトを停止する。具体的には、メタデータのこのスライスに対応する「状態」をシングルプライマリスライス（ＳＰ）に変更し、ミラーのノードＩＤとミラーのスライスＩＤの登録を削除する。
【００８１】
［ステップＳ６８］  メタデータに未処理のスライスがあるかどうかを判定する。あれば、ステップＳ６１に戻って、次のスライスの処理を行う。なければ、処理を終了する。
以上の処理手順が実行されることにより、ディスクノードが故障したことにより欠損したセグメントのプライマリスライスまたはセカンダリスライスを切り離し、正常なスライスをシングルプライマリスライスにすることができる。これにより、シングルプライマリをアクセス先として、アクセスノードからのアクセスを継続させることができる。
【００８２】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、ストレージシステムを構成するストレージノードが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【００８３】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ（Digital Versatile Disc）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【００８４】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【００８５】
以上の実施の形態に関し、更に以下の付記を開示する。
（付記１）  データを複数のストレージ装置に分散して格納するストレージシステムにて、前記ストレージ装置の実データ記憶領域を管理するコンピュータが故障したとき、前記コンピュータを切り離す故障ノード切り離し処理プログラムにおいて、
前記コンピュータを、
仮想的な論理ボリュームを分割したセグメントに対し、前記ストレージ装置の実データ記憶領域を前記セグメントの単位で分割したスライスを、アクセスノードからのアクセス先として前記セグメントのデータを格納するプライマリスライス、または、前記プライマリスライスのデータをミラーリングして格納するセカンダリスライスとして割り当て、前記セグメントと、前記セグメントに割り当てられた前記プライマリスライス及び前記セカンダリスライスと、を対応付けた管理情報を記憶手段に格納し、前記管理情報に基づいて前記アクセスノードからのアクセス要求を処理するアクセス処理手段、
他の前記ストレージ装置の実記憶領域を管理する他のコンピュータが正常動作中に所定の周期で送信する生存信号を監視し、一定期間前記生存信号が検出されなかった前記他のコンピュータを故障ノードとして検出する故障ノード検出手段、
前記故障ノードと前記管理情報を照合し、管理対象の前記スライスが前記故障ノードの管理する前記スライスに対応付けられていたときは、管理対象の前記スライスを前記アクセスノードのアクセス先であって前記ミラーリングが停止されるシングルプライマリスライスに設定し、前記故障ノードを切り離す故障ノード切り離し手段、
として機能させることを特徴とする故障ノード切り離し処理プログラム。
【００８６】
（付記２）  前記故障ノード切り離し手段は、前記情報を検索して前記故障ノードの管理する前記スライスに対応付けられている管理対象の前記スライスを抽出し、管理対象の前記スライスが前記プライマリスライスであれば、該スライスを前記シングルプライマリスライスに変更してミラーリングを停止させ、前記スライスが前記セカンダリスライスであるときは、該スライスを前記シングルプライマリスライスに変更して前記アクセスノードのアクセス先に変更するとともにミラーリングを停止させる、ことを特徴とする付記１記載の故障ノード切り離し処理プログラム。
【００８７】
（付記３）  前記コンピュータを、
前記アクセス処理手段による前記アクセス処理が実行可能状態にあるときは、前記所定の周期で、前記生存信号を前記他のコンピュータに向けてブロードキャストで送信する生存信号送出手段、
として機能させることを特徴とする付記１記載の故障ノード切り離し処理プログラム。
【００８８】
（付記４）  前記コンピュータを、
前記故障ノード検出手段によって検出された前記故障ノードを故障ノード候補とし、前記故障ノード候補の通知を前記他のコンピュータに向けて送信するとともに、前記他のコンピュータから前記故障ノード候補の通知を受信し、前記通知より抽出された故障ノード候補と、自身が検出した前記故障ノード候補とを照合し、一致しているときのみ前記故障ノード候補を前記故障ノードとして確定させる故障ノード確定手段、
として機能させることを特徴とする付記１記載の故障ノード切り離し処理プログラム。
【００８９】
（付記５）  前記故障ノード確定手段は、前記故障ノードを除くすべての前記他のコンピュータから前記故障ノード候補の通知を受け取り、すべての前記通知から抽出された前記故障ノード候補と、自身が検出した前記故障ノード候補とが一致するときのみ、前記故障ノード候補を前記故障ノードとして確定させる、ことを特徴とする付記４記載の故障ノード切り離し処理プログラム。
【００９０】
（付記６）  前記故障ノード候補の通知は、前記他のコンピュータに向けて前記ブロードキャストで送信される、ことを特徴とする付記４記載の故障ノード切り離し処理プログラム。
【００９１】
（付記７）  前記アクセス処理手段は、前記アクセスノードから前記セグメントを指定して要求される指定セグメントに対応する管理情報の読み出し要求を受けたときは、前記記憶手段に格納される前記管理情報から前記指定セグメントに対応する管理情報を検索し、検索されたときは該指定セグメントに対応する管理情報を前記アクセスノードに送信し、検索されなかったときは前記指定セグメントに対応する管理情報の読み出し要求を前記他のコンピュータに向けて送信し、該指定セグメントに対応する管理情報を有する前記他のコンピュータから取得された前記指定セグメントに対応する管理情報を前記アクセスノードに送信する、ことを特徴とする付記１記載の故障ノード切り離し処理プログラム。
【００９２】
（付記８）  前記アクセス処理手段は、前記他のコンピュータへ送信する前記指定セグメントに対応する管理情報の読み出し要求をブロードキャストで送信するとともに、前記指定セグメントに対応する管理情報の読み出し要求をブロードキャストで取得し、該管理情報を保有している場合には、該管理情報をブロードキャストで送信する、ことを特徴とする付記７記載の故障ノード切り離し処理プログラム。
【００９３】
（付記９）  データを複数のストレージ装置に分散して格納するストレージシステムにて、前記ストレージ装置の実データ記憶領域を管理するコンピュータが故障したとき、前記コンピュータを切り離す故障ノード切り離し方法において、
アクセス処理手段が、仮想的な論理ボリュームを分割したセグメントに対し、前記ストレージ装置の実データ記憶領域を前記セグメントの単位で分割したスライスを、アクセスノードからのアクセス先として前記セグメントのデータを格納するプライマリスライス、または、前記プライマリスライスのデータをミラーリングして格納するセカンダリスライスとして割り当て、前記セグメントと、前記セグメントに割り当てられた前記プライマリスライス及び前記セカンダリスライスと、を対応付けた管理情報を記憶手段に格納し、前記管理情報に基づいて前記アクセスノードからのアクセス要求を処理する手順と、
故障ノード検出手段が、他の前記ストレージ装置の実記憶領域を管理する他のコンピュータが正常動作中に所定の周期で送信する生存信号を監視し、一定期間前記生存信号が検出されなかった前記他のコンピュータを故障ノードとして検出する手順と、
故障ノード切り離し手段が、前記故障ノードと前記管理情報を照合し、管理対象の前記スライスが前記故障ノードの管理する前記スライスに対応付けられていたときは、管理対象の前記スライスを前記アクセスノードのアクセス先であって前記ミラーリングが停止されるシングルプライマリスライスに設定し、前記故障ノードを切り離す手順と、
を有することを特徴とする故障ノード切り離し方法。
【００９４】
（付記１０）  データを複数のストレージ装置に分散して格納するストレージシステムにおいて、
仮想的な論理ボリュームを分割したセグメントに対し、前記ストレージ装置の実データ記憶領域を前記セグメントの単位で分割したスライスを、アクセスノードからのアクセス先として前記セグメントのデータを格納するプライマリスライス、または、前記プライマリスライスのデータをミラーリングして格納するセカンダリスライスとして割り当て、前記セグメントと、前記セグメントに割り当てられた前記プライマリスライス及び前記セカンダリスライスと、を対応付けた管理情報が格納される記憶手段と、前記管理情報に基づいて前記アクセスノードからのアクセス要求を処理するアクセス処理手段と、他の前記ストレージ装置の実記憶領域を管理する他のコンピュータが正常動作中に所定の周期で送信する生存信号を監視し、一定期間前記生存信号が検出されなかった前記他のコンピュータを故障ノードとして検出する故障ノード検出手段と、前記故障ノードと前記管理情報を照合し、管理対象の前記スライスが前記故障ノードの管理する前記スライスに対応付けられていたときは、管理対象の前記スライスを前記アクセスノードのアクセス先であって前記ミラーリングが停止されるシングルプライマリスライスに設定し、前記故障ノードを切り離す故障ノード切り離し手段と、を備えた複数のストレージノードと、
前記ストレージノードから前記管理情報を取得し、前記管理情報に基づいてアクセス先の前記ストレージノードを特定し、特定された前記ストレージノードに対しアクセス要求を行う前記アクセスノードと、
を有することを特徴とするストレージシステム。
【図面の簡単な説明】
【００９５】
【図１】発明の概要を示した図である。
【図２】本実施の形態のマルチノードストレージの構成例を示す図である。
【図３】ディスクノードのハードウェア構成例を示す図である。
【図４】論理ディスクとディスクとの関係の一例を示した図である。
【図５】メタデータの一例を示した図である。
【図６】ブロードキャストのフォーマットの一例と、具体例を示した図である。
【図７】故障ノード切り離し処理の動作シーケンスを示した図である。
【図８】ディスクノードＤＰ１の切り離し処理時のメタデータ更新を示した図である。
【図９】ディスクノードＤＰ２の切り離し処理時のメタデータ更新を示した図である。
【図１０】故障ノードの検出と切り離し処理の手順を示したフローチャートである。
【図１１】故障ノード切り離し処理の手順を示したフローチャートである。
【図１２】アクセス処理の動作シーケンスを示した図である。
【符号の説明】
【００９６】
１０  ストレージノード
１１  ストレージ
１１ａ  デバイス情報
１１ｂ  メタデータ
１１ｃ  スライス
１２  通信手段
１３  ハートビート送出手段
１４  故障ノード検出手段
１５  故障ノード確定手段
１６  故障ノード切り離し手段
１７  アクセス処理手段
【図１】
2010128886.tif 000003
【図２】
2010128886.tif 000004
【図３】
2010128886.tif 000005
【図４】
2010128886.tif 000006
【図５】
2010128886.tif 000007
【図６】
2010128886.tif 000008
【図７】
2010128886.tif 000009
【図８】
2010128886.tif 000010
【図９】
2010128886.tif 000011
【図１０】
2010128886.tif 000012
【図１１】
2010128886.tif 000013
【図１２】
2010128886.tif 000014