(57)【要約】【課題】開発に要するコストを増大させることなくＤＲＣ情報を退避させる機能を実現することができるクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法を提供すること。【解決手段】クライアントから要求を受け付けた場合に、かかる要求の処理結果と、かかる要求に対応するＤＲＣ情報とを、ジャーナルファイルシステムにアトミックに記憶させ、フェールオーバ時に、ジャーナルファイルシステムに退避させたＤＲＣをクラスタノード間で引き継ぐ処理を行う。【選択図】        図１
2010113617.tif 000002
【特許請求の範囲】
【請求項１】
ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムを制御するクラスタシステム制御プログラムであって、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成手順と、
前記要求応答情報生成手順によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避手順と
をコンピュータに実行させることを特徴とするクラスタシステム制御プログラム。
【請求項２】
前記要求応答情報生成手順は、前記クライアントから受け付けた要求が、重複して処理された場合に同一の処理結果にならない要求であり、かつ、該要求の処理結果が正常終了した場合に、前記要求応答情報を生成することを特徴とする請求項１に記載のクラスタシステム制御プログラム。
【請求項３】
前記退避手順は、前記ジャーナルファイルシステムにトランザクション単位で格納されている情報であるトランザクション情報が有するコミットブロック内に、前記要求応答情報を退避することを特徴とする請求項１または２に記載のクラスタシステム制御プログラム。
【請求項４】
前記要求応答情報生成手順は、前記要求応答情報を前記ジャーナルファイルシステムに退避する期間を示す有効期間情報を該要求応答情報に付与し、
前記退避手順は、前記要求応答情報生成手順によって生成された要求応答情報を含むトランザクション情報が破棄対象になり、かつ、該要求応答情報の有効期間が経過していない場合に、該要求応答情報を他のトランザクション情報に退避することを特徴とする請求項３に記載のクラスタシステム制御プログラム。
【請求項５】
フェールオーバが発生して、トランザクション情報を用いて復旧処理を行った後にトランザクション情報を破棄する場合に、前記要求応答情報生成手順によって付与された有効期間が経過していない要求応答情報を含むトランザクション情報以外のトランザクション情報を破棄する復旧手順をさらにコンピュータに実行させることを特徴とする請求項４に記載のクラスタシステム制御プログラム。
【請求項６】
ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムであって、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成手段と、
前記要求応答情報生成手段によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避手段と
を備えたことを特徴とするクラスタシステム。
【請求項７】
ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムを制御するクラスタシステム制御方法であって、
前記クラスタシステムが、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成工程と、
前記要求応答情報生成工程によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避工程と
を含んだことを特徴とするクラスタシステム制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法に関する。
【背景技術】
【０００２】
近年、膨大な電子データを生産する情報社会において、多種多様なクライアントに対して電子データを共有させるＮＡＳ（Network  Attached  Storage）などのファイルサーバが、重要な技術となっている。クライアントがＮＡＳへアクセスするために利用するファイルアクセスプロトコルとしては、ＵＮＩＸ（登録商標）系クライアント用のＮＦＳ（Network  File  System）と、Ｗｉｎｄｏｗｓ（登録商標）系クライアント用のＣＩＦＳ（Common  Internet  File  System）の二種類が主流となっている。
【０００３】
このようなファイルサーバは、電子データを集中管理しているため、可用性（Availability）の向上が求められている。可用性を向上させる技術の一つとして、複数のノードによってファイルサーバを構築するクラスタがある。ここで、図６を用いて、ＮＡＳクラスタシステムについて説明する。図６は、従来のＮＡＳクラスタシステム９の構成例を示す図である。
【０００４】
図６に示すように、ＮＡＳクラスタシステム９は、クラスタノード９０ａおよび９０ｂと、共有ディスク９１とを有し、クライアント群１０と接続されている。クライアント群１０は、ＮＡＳクラスタシステム９に対してデータ書き込み等の要求を送信する情報処理装置であり、例えば、パーソナルコンピュータに相当する。なお、図６において、クライアント群１０は、一台以上の情報処理装置であることを示している。また、本明細書において、単に「要求」と表記する場合、クライアント群１０から送信されるデータ書き込みや、データ読み出し、データ削除等の要求を示すものとする。共有ディスク９１は、ユーザデータや、システムデータ等を記憶する記憶デバイスであり、クラスタノード９０ａおよび９０ｂと接続されている。
【０００５】
図６において、クラスタノード９０ａは、クライアントへサービスを提供する運用系ノードである。クラスタノード９０ｂは、クラスタノード９０ａが障害や運用管理等によって停止した場合に、代行してサービスを提供する待機系ノードである。また、クラスタノード９０ａおよび９０ｂは、クラスタ制御部９２を有する。クラスタ制御部９２は、クラスタノード９０ａおよび９０ｂのうち、いずれをアクティブに動作させるかを制御する。例えば、クラスタ制御部９２は、クラスタノード９０ａが動作している場合には、クラスタノード９０ｂを停止させる。一方、クラスタ制御部９２は、クラスタノード９０ａが停止している場合には、クラスタノード９０ｂをアクティブに動作させる。アクティブに動作するように制御されたクラスタノード９０ａまたは９０ｂは、クライアント群１０へサービスを提供する。
【０００６】
ところで、上述したクライアント群１０からＮＡＳクラスタシステム９へ送信される要求は、「idempotentな要求」と、「非idempotent（non-idempotentとも呼ばれる）な要求」との二種類に分けられる。idempotentな要求とは、同一の要求を重複して処理した場合に、処理結果が同一になる要求を示す。例えば、ＵＮＩＸ（登録商標）系コマンドにおけるｌｓ（list  segments）や、ｐｗｄ（print  working  directory）などは、idempotentな要求に該当する。
【０００７】
一方、非idempotentな要求とは、同一の要求を重複して処理した場合に、処理結果が同一にならない要求を示す。例えば、ＵＮＩＸ（登録商標）系コマンドにおけるｒｍｄｉｒ（remove  directory）や、ｍｋｄｉｒ（make  directory）などは、非idempotentな要求に該当する。ｒｍｄｉｒを例に挙げて説明すると、クラスタノード９０ａは、一回目にｒｍｄｉｒを実行してディレクトリの削除処理に成功した場合、二回目以降にｒｍｄｉｒを実行しても、処理結果がＥＮＯＥＮＴ（No  such  file  or  directory）といったエラーになる。
【０００８】
ここで、クライアント群１０は、送信した要求が消失したことを検知した場合、かかる要求を再送する。このとき、ＮＡＳクラスタシステム９は、かかる再送処理によって要求を重複して受け付ける場合がある。かかる場合、ＮＡＳクラスタシステム９が、仮に要求を重複して処理したこととする。このことは、ＮＡＳクラスタシステム９が非idempotentな要求を重複して受け付けた場合に、要求に対する２回目以降の処理結果がエラー（上記例では、ＥＮＯＥＮＴエラー）になってしまうという問題を招く。
【０００９】
そこで、ＮＡＳクラスタシステム９は、非idempotentな要求を重複して受け付けた場合における対策を取っている。具体的には、ＮＡＳクラスタシステム９は、クライアントから要求を受け付けた場合に、かかる要求を識別するための識別番号（ｘｉｄ）と、かかる要求の応答データとの組合せを含む情報を、ＤＲＣ（duplicate  reply  cache、または、duplicate  request  cache）と呼ばれるキャッシュに記憶させる。ここで言う「要求の応答データ」とは、ＮＡＳクラスタシステム９からクライアント群１０へ応答されるデータを示す。なお、本明細書では、ＤＲＣに記憶される「ｘｉｄ」と「応答データ」との組合せを含む情報を、「ＤＲＣ情報」と呼ぶこととする。
【００１０】
そして、ＮＡＳクラスタシステム９は、クライアント群１０から要求を受け付けた場合に、ＤＲＣに記憶されているＤＲＣ情報群から、受け付けた要求のｘｉｄと同一のｘｉｄを含むＤＲＣ情報を検索する。そして、ＮＡＳクラスタシステム９は、同一のｘｉｄを含むＤＲＣ情報が存在する場合に、検索されたＤＲＣ情報に含まれる応答データをクライアントへ送信して処理を終了する。これにより、ＮＡＳクラスタシステムは、非idempotentな要求を重複して受け付けた場合であっても、重複実行によって発生するエラーを防止している。
【００１１】
なお、一般的に、ＮＡＳクラスタシステム９は、ＤＲＣに記憶させたＤＲＣ情報を、クラスタノード９０ａまたは９０ｂの双方がアクセスできるＮＶＲＡＭ（Non  Volatile  Random  Access  Memory）に退避させる。これは、フェールオーバが発生した場合に、ＤＲＣ情報をクラスタノード９０ａから、クラスタノード９０ｂへ引き継げるようにするためである。
【００１２】
【非特許文献１】B．Callaghan、NFS  Illustrated、ISBN  0-201-32570-5、Addision-Wesley、2000
【非特許文献２】S．Lawler、Active/Active  Controller  Configuration  Overview  and  Best  Practice  Guidelines、TR3450-0107、Network  Appliance  Inc．、January  2007、［online］、［平成２０年１０月１４日検索］、インターネット＜http://www.netapp.com/library/tr/3450.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【００１３】
しかしながら、上記従来のＮＡＳクラスタシステムには、ＤＲＣ情報を退避させる機能を実装するためには、開発に要するハードコストが増大してしまうという問題があった。具体的には、従来のサーバクラスタシステムは、上述したように、ＤＲＣ情報をＮＶＲＡＭに退避させる。一般的なサーバクラスタシステムは、ＮＶＲＡＭを有していないため、ＤＲＣ情報を退避させる機能を実装するためには、高価なハードであるＮＶＲＡＭを新たに設けることになる。このことは、サーバクラスタシステムにかかるコストが増大するという問題を招く。
【００１４】
開示の技術は、上述した従来技術による問題点を解消するためになされたものであり、開発に要するコストを増大させることなくＤＲＣ情報を退避させる機能を実現することができるクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上述した課題を解決し、目的を達成するために、本願に開示するクラスタシステム制御プログラムは、ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムを制御するクラスタシステム制御プログラムであって、クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成手順と、前記要求応答情報生成手順によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避手順とをコンピュータに実行させることを要件とする。
【００１６】
なお、本願に開示するクラスタシステム制御プログラムの構成要素、表現または構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも、他の態様として有効である。
【発明の効果】
【００１７】
本願に開示したクラスタシステム制御プログラムによれば、開発に要するコストを増大させることなくＤＲＣ情報を退避させる機能を実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１８】
以下に、本願に開示するクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例により本願に開示するクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法が限定されるものではない。なお、以下の実施例では、本願に開示するクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法を、ＮＦＳを用いたＮＡＳクラスタシステムに適用する場合を例に挙げて説明する。しかし、本願に開示するクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法は、ＣＩＦＳを用いたＮＡＳクラスタシステム等にも適用することができる。
【実施例】
【００１９】
まず、本実施例に係るＮＡＳクラスタシステム１の概要について説明する。本実施例に係るＮＡＳクラスタシステム１は、共有ディスクにジャーナルファイルシステムを有する。そして、ＮＡＳクラスタシステム１は、クライアントから要求を受け付けた場合に、かかる要求の処理結果と、かかる要求に対応するＤＲＣ情報とを、ジャーナルファイルシステムに記憶させる。
【００２０】
すなわち、ＮＡＳクラスタシステム１は、従来のＮＡＳクラスタシステム９のようにＮＶＲＡＭにＤＲＣ情報を退避させるのではなく、共有ディスク内のジャーナルファイルシステムにＤＲＣ情報を退避させる。そして、ＮＡＳクラスタシステム１は、フェールオーバが発生した場合に、ジャーナルファイルシステムに記憶されているＤＲＣ情報を、クラスタノード間で引き継ぐ。
【００２１】
このように、本実施例に係るＮＡＳクラスタシステム１は、新たなハードが設けられなくても、ＤＲＣ情報を共有ディスクに退避させるので、開発に要するハードコストを増大させることなく、ＤＲＣ情報を退避させる機能を実現することができる。なお、一般的に、ＮＡＳクラスタシステムに接続される共有ディスクは、ジャーナルファイルシステムを有する。したがって、本実施例に係るＮＡＳクラスタシステム１は、新たにジャーナルファイルシステムを設けることなく実現することができる。
【００２２】
次に、本実施例に係るＮＡＳクラスタシステム１の構成について説明する。図１は、本実施例に係るＮＡＳクラスタシステム１の構成例を示す図である。図１に示すように、ＮＡＳクラスタシステム１は、クラスタノード１０ａおよび１０ｂと、共有ディスク２０とを有し、クライアント群１０と接続されている。
【００２３】
共有ディスク２０は、ユーザデータや、システムデータ等を記憶する記憶デバイスであり、クラスタノード１０ａおよび１０ｂからアクセスされる。ここで、本実施例における共有ディスク２０は、少なくともジャーナルファイルシステムを有する。ジャーナルファイルシステムとは、ファイルシステムとして整合性のある更新処理の単位（トランザクション）を、ジャーナルという個別デバイス（または専用ファイル）を用いてアトミック（不可分）に処理する機能を有するファイルシステムである（詳細は、参考文献「S．Tweedie、EXT3  Journaling  Filesystem、Ottawa  Linux  Symposium、Ottawa  Congress  Centre、Ottawa、Ontario、Canada、2000/7/20.」を参照）。例えば、ｅｘｔ３（third  extended  file  system）と、そのジャーナルデータを制御するｊｂｄ（journaling  block  device）の組み合わせなどが有名である。
【００２４】
図１に示した共有ディスク２０は、ユーザデータや、システムデータ等を記憶する領域であるｅｘｔ３用パーティション２１を有するとともに、そのジャーナルデータを管理する領域としてｊｂｄ用パーティション２２を有する。
【００２５】
図１において、クラスタノード１０ａは、運用系ノードであり、クラスタノード１０ｂは、待機系ノードである。なお、クラスタノード１０ａおよび１０ｂの構成要素は、互いに同等の機能を有するため、以下では、クラスタノード１０ａについてのみ構成要素の説明をする。
【００２６】
クラスタノード１０ａは、ＲＰＣ（Remote  Procedure  Call）＋ＴＣＰ／ＩＰ（Transmission  Control  Protocol／Internet  Protocol）１１ａと、ｎｆｓｄ（Network  File  System  Daemon）１２ａと、ＶＦＳ（Virtual  File  System）１３ａと、ｅｘｔ３／ｊｂｄ１４ａとを有する。
【００２７】
ＲＰＣ＋ＴＣＰ／ＩＰ１１ａは、ＲＰＣおよびＴＣＰ／ＩＰのレイヤにおける処理を担う。具体的には、ＲＰＣ＋ＴＣＰ／ＩＰ１１ａは、クライアント群１０から送信される要求を受け取り、受け取った要求に対して、ＲＰＣおよびＴＣＰ／ＩＰのレイヤにおける解析を行う。
【００２８】
ｎｆｓｄ１２ａは、クラスタノード１０ａに常駐するＮＦＳのプログラム（カーネルデーモン）であり、インコアなＤＲＣの制御体であるＤＲＣ１５ａを有する。具体的には、ｎｆｓｄ１２ａは、後述するＶＦＳ１３ａとｅｘｔ３／ｊｂｄ１４ａとを介して、ＲＰＣ＋ＴＣＰ／ＩＰ１１ａによって解析された要求を実行する。続いて、ｎｆｓｄ１２ａは、実行済みの要求に対応するＤＲＣ情報を生成し、生成したＤＲＣ情報をＤＲＣ１５ａに格納する。
【００２９】
そして、ｎｆｓｄ１２ａは、正常終了した非idempotentな要求についてのみＤＲＣ情報をｅｘｔ３／ｊｂｄ１４ａへ送信する。これは、本実施例に係るＮＡＳクラスタシステム１は、要求に対する重複処理によって発生するエラーを回避することを目的として、ＤＲＣ情報をｊｂｄ用パーティション２２に退避するからである。
【００３０】
具体的には、idempotentな要求は、重複処理された場合であっても処理結果がエラーにならない。したがって、クラスタノード１０ａは、idempotentな要求に対応するＤＲＣ情報をｊｂｄ用パーティション２２に退避して、クラスタノード１０ｂに引き継げるようにしておく必要がない。また、異常終了した非idempotentな要求は、重複処理に関係なく処理結果がエラーになる。したがって、クラスタノード１０ａは、異常終了した非idempotentな要求に対応するＤＲＣ情報をｊｂｄ用パーティション２２に退避して、クラスタノード１０ｂに引き継げるようにしておく必要がない。このようなことから、ｎｆｓｄ１２ａは、正常終了した非idempotentな要求についてのみＤＲＣ情報をｅｘｔ３／ｊｂｄ１４ａへ送信する。
【００３１】
ＶＦＳ１３ａは、ファイルシステムの上位に位置する抽象化層であり、クライアント群１０が様々なアプリケーションを用いてファイルシステムにアクセスできるようにする。具体的には、ＶＦＳ１３ａは、要求を受け付けた場合に、かかる要求に関連するファイルシステムを選択する。図１に示した例では、共有ディスク２０のファイルシステムがｅｘｔ３であるため、ＶＦＳ１３ａは、ｎｆｓｄ１２ａから要求を受け付けた場合に、ｅｘｔ３をファイルシステムとして選択する。
【００３２】
ｅｘｔ３／ｊｂｄ１４ａは、ＯＳ（Operating  System）が持つコンピュータの資源を操作するためのデータ、デバイス、プロセスやカーネルを備え、データの操作を実施する。なお、ここで言う「ｅｘｔ３／ｊｂｄ」とは、ファイルシステムであるｅｘｔ３と、ｊｂｄとの組合せを示す。ここで、ｅｘｔ３はｊｂｄと連携して動作するジャーナルファイルシステムである。
【００３３】
ｊｂｄは、元来、ｅｘｔ３ファイルシステムを形成するブロックの更新をジャーナル化するためのデバイスドライバである。しかし、本実施例におけるｊｂｄは、ｎｆｓｄ１２ａによって生成されたＤＲＣ情報をも、ｊｂｄ用パーティション２２に格納する。
【００３４】
このとき、ｊｂｄは、正常終了した非idempotentな要求の処理結果と、かかる要求に対応するＤＲＣ情報とを、１つのトランザクション内において、ｊｂｄ用パーティション２２に格納する。このことを実現するために、ｎｆｓｄ１２ａは、ｅｘｔ３／ｊｂｄ１４ａにおけるジャーナルセッションをオーバラップするように、ジャーナルセッションを開始および終了する。これにより、ｊｂｄは、要求の処理結果と、かかる要求のＤＲＣ情報とをアトミックにｊｂｄ用パーティション２２に格納することができる。
【００３５】
次に、図２を用いて、図１に示したクラスタノード１０ａによるＤＲＣ退避処理について説明する。図２は、図１に示したクラスタノード１０ａによるＤＲＣ退避処理手順を示すシーケンス図である。図２では、クラスタノード１０ａは、クライアント群１０から要求「ｒｍｄｉｒ」を受け付けた場合を例に挙げて説明する。なお、図２に示したｅｘｔ３は、図１に示したｅｘｔ３／ｊｂｄ１４ａにおけるｅｘｔ３であり、図２に示したｊｂｄは、図１に示したｅｘｔ３／ｊｂｄ１４ａにおけるｊｂｄである。
【００３６】
図２に示すように、ｎｆｓｄ１２ａは、クライアント群１０から要求「ｒｍｄｉｒ」を受け付けた場合に（ステップＳ１０１）、ｊｂｄに対して、トランザクション内における更新セッション（ジャーナルセッション）を開始する旨のコマンド「ｊｏｕｒｎａｌ＿ｓｔａｒｔ」を発行する（ステップＳ１０２およびＳ１０３）。なお、本明細書において、トランザクションとは、ｅｘｔ３用パーティション２１をアトミックに更新する処理単位を示す。
【００３７】
ここで、活性のトランザクションが不在であれば、新規にトランザクションを作成する。なお、ステップＳ１０２およびＳ１０３において開始されたジャーナルセッションは、図２に示したＪ１である。
【００３８】
続いて、ｎｆｓｄ１２ａは、図示しないＶＦＳ１３ａを介して、コマンド「ｅｘｔ３＿ｒｍｄｉｒ」をｅｘｔ３に発行する（ステップＳ１０４）。かかるコマンドを受け付けたｅｘｔ３は、ｊｂｄに対して、ジャーナルセッションを開始する旨のコマンド「ｊｏｕｒｎａｌ＿ｓｔａｒｔ」を発行する（ステップＳ１０５およびＳ１０６）。なお、ステップＳ１０５およびＳ１０６において開始されたジャーナルセッションは、図２に示したＪ２である。
【００３９】
続いて、ｅｘｔ３は、コマンド「ｅｘｔ３＿ｒｍｄｉｒ」を実行した後、ｊｂｄに対して、ジャーナルセッションＪ２を終了する旨のコマンド「ｊｏｕｒｎａｌ＿ｓｔｏｐ」を発行する（ステップＳ１０７）。かかるコマンドを受け付けたｊｂｄは、ｒｍｄｉｒの処理結果をｊｂｄ用パーティション２２に格納するためのジャーナルデータを生成する（ステップＳ１０８）。
【００４０】
続いて、ｎｆｓｄ１２ａは、ジャーナルセッションＪ２が終了したことをｊｂｄおよびｅｘｔ３を介して受け取る（ステップＳ１０９およびＳ１１０）。続いて、ｎｆｓｄ１２ａは、ＤＲＣ情報を生成する（ステップＳ１１１）。続いて、ｎｆｓｄ１２ａは、ｅｘｔ３によって実行された「ｅｘｔ３＿ｒｍｄｉｒ」が正常終了していた場合に、ｊｂｄに対して、生成したＤＲＣ情報をｊｂｄ用パーティション２２に格納する旨のコマンド（図２に示した例では、「ｎｆｓｄ＿ｓｅｔ＿ｄｒｃ＿ｔｏ＿ｊｏｕｒｎａｌ」）を発行する（ステップＳ１１２およびＳ１１３）。
【００４１】
続いて、ｎｆｓｄ１２ａは、ｊｂｄに対して、ジャーナルセッションＪ１を終了する旨のコマンド「ｊｏｕｒｎａｌ＿ｓｔｏｐ」を発行する（ステップＳ１１４）。かかるコマンドを受け付けたｊｂｄは、ステップＳ１１１において生成されたＤＲＣ情報をｊｂｄ用パーティション２２に格納するためのジャーナルデータを生成する（ステップＳ１１５）。そして、ｎｆｓｄ１２ａは、ジャーナルセッションＪ１が終了したことをｊｂｄおよびｅｘｔ３を介して受け取る（ステップＳ１１６）。
【００４２】
続いて、ｎｆｓｄ１２ａは、所定のタイミングになった場合に、ｅｘｔ３に対して、トランザクションを強制フラッシュさせるコマンド「ｅｘｔ３＿ｓｙｎｃ＿ｆｉｌｅ」を発行する（ステップＳ１１７）。かかるコマンドを受け付けたｅｘｔ３は、ｊｂｄに対してコマンド「ｊｏｕｒｎａｌ＿ｆｏｒｃｅ＿ｃｏｍｍｉｔ」を発行する（ステップＳ１１８）。かかるコマンドを受け付けたｊｂｄは、強制フラッシュを実行する（ステップＳ１１９）。具体的には、ｊｂｄは、ステップＳ１０８およびステップＳ１１５において生成したジャーナルデータ等を含むトランザクション情報を、ｊｂｄ用パーティション２２へ格納する。ここで言う「トランザクション情報」とは、１個のトランザクション内で生成される全てのジャーナルデータや、その他の制御データを含む情報を示す。
【００４３】
なお、ＮＦＳプロトコルの仕様上、非idempotent要求に対しては、その成功応答メッセージを送信する前に、必ず処理結果を恒久化するルールとなっている。すなわち、上述の強制フラッシュ処理を行う所定のタイミングとは、ステップＳ１１６直後に他ならない。
【００４４】
そして、ｊｂｄ用パーティション２２へ格納されたファイルシステムを形成する更新ブロックデータは、図２に示されたシークエンスの後で、非同期にｅｘｔ３用パーティション２１へ反映される。ｊｂｄは、ｅｘｔ３用パーティション２１へ反映が完了しているブロックに対応するジャーナルデータを、適宜ｊｂｄ用パーティション２２から削除する。ここで、ｊｂｄは、有効期間が経過していないＤＲＣ情報が削除されないようにデータの削除処理を行う。かかるデータ削除処理（後述する「ＤＲＣ再利用処理」に相当する）については、図４および図５を用いて後に詳述する。
【００４５】
このように、クラスタノード１０ａは、ステップＳ１０２およびＳ１０３で開始されるジャーナルセッションＪ１において生成されたジャーナルデータと、ステップＳ１０５およびＳ１０６で開始されるジャーナルセッションＪ２において生成されたジャーナルデータとを、単一のトランザクション内でｊｂｄ用パーティション２２に格納する。これにより、クラスタノード１０ａは、ステップＳ１０８における処理（要求実行処理）と、ステップＳ１１５における処理（ＤＲＣ格納処理）とのアトミック性を保証することができる。
【００４６】
次に、図１に示したｊｂｄ用パーティション２２の構成について説明する。図３は、ｊｂｄ用パーティション２２の構成例を示す図である。図３の上段に、ｊｂｄ用パーティション２２に格納されるデータの一部分を示す。なお、ここでは、ｊｂｄ用パーティション２２に格納されるデータを、トランザクション単位で区切って図示している。具体的には、図３の上段に示したｊｂｄ用パーティション２２は、トランザクションＴ１と、トランザクションＴ２とにおいて格納されたデータを記憶している。
【００４７】
ｊｂｄ用パーティション２２は、図３に示すように、各トランザクションにおいて、ディスクリプタブロックとブロックデータとの組合せ、および、コミットブロックとが格納される。
【００４８】
図３に示した例では、トランザクションＴ１は、ディスクリプタブロックＤ１と、ブロックデータＢ１１およびＢ１２との組合せと、ディスクリプタブロックＤ２と、ブロックデータＢ２１およびＢ２２との組合せ、更にコミットブロックＣ１およびＣ２を有する。
【００４９】
ディスクリプタブロックＤ１およびＤ２は、自身（ディスクリプタブロック）の後に格納されているデータブロックのタイプ等を示す情報が格納される領域である。例えば、ディスクリプタブロックＤ１は、ブロックデータＢ１１およびＢ１２のタイプ等を示す情報が格納される。また、例えば、ディスクリプタブロックＤ２は、ブロックデータＢ２１およびＢ２２のタイプ等を示す情報が格納される。
【００５０】
ブロックデータＢ１１、Ｂ１２、Ｂ２１およびＢ２２は、更新されたデータが格納される領域である。ここで言う「更新されたデータ」とは、図２におけるステップＳ１０８において格納される情報に相当する。コミットブロックＣ１およびＣ２は、トランザクションの終端を示す情報が格納される領域である。
【００５１】
コミットブロックＣ１は、図３に示すように、コミットブロック情報と、ＤＲＣヘッダと、ＤＲＣ情報とを有する。なお、図３では、コミットブロックＣ１の構成を示しているが、コミットブロックＣ２の構成は、コミットブロックＣ１の構成と同様である。コミットブロック情報は、トランザクションの終端を示す情報が格納される領域である。
【００５２】
ＤＲＣヘッダは、ＤＲＣフラグと、ＤＲＣ終端オフセットとを有する。ＤＲＣフラグは、コミットブロックＣ１の後に、他のコミットブロックが存在するか否かを示す。本明細書では、ＤＲＣフラグ「１」は、コミットブロックの後に、他のコミットブロックが存在することを示し、ＤＲＣフラグ「２」は、コミットブロックの後に、他のコミットブロックが存在しないことを示すものとする。
【００５３】
図３に示した例では、コミットブロックＣ１の後に、コミットブロックＣ２が存在する。したがって、コミットブロックＣ１のＤＲＣフラグには、「１」が格納される。また、図３に示した例では、コミットブロックＣ２の後に、他のコミットブロックが存在しない。したがって、コミットブロックＣ２のＤＲＣフラグには、「２」が格納される。
【００５４】
ＤＲＣ情報は、図３に示すように、ｓｏｃｋａｄｄｒと、ｘｉｄと、ｐｒｏｃと、ｐｒｏｔと、ｖｅｒｓと、ｔｉｍｅｖａｌと、プロシジャ固有データとを有する。ｓｏｃｋａｄｄｒは、要求を送信したクライアントが保持するソケットアドレスが格納される領域である。ｘｉｄは、要求のｘｉｄが格納される領域である。
【００５５】
ｐｒｏｃは、プロシジャが格納される領域である。図２に示した例の場合、ｐｒｏｃには、「ｒｍｄｉｒ」が格納される。ｐｒｏｔは、プロトコルの種類が格納される領域である。本実施例の場合、ｐｒｏｔには、「ｎｆｓ」が格納される。ｖｅｒｓは、プロトコルのバージョンが格納される領域である。例えば、プロトコルが「ｎｆｓ２」の場合、ｖｅｒｓには、「２」が格納される。
【００５６】
ｔｉｍｅｖａｌは、ＤＲＣ情報の有効期間が格納される領域である。なお、有効期間とは、ＤＲＣ情報をｊｂｄ用パーティション２２に退避しておく制限時刻であり、例えば、かかるＤＲＣ情報の生成された時刻に１２０秒を加算した時刻などに設定される。プロシジャ固有データは、要求に対する「応答データ」が格納される領域である。
【００５７】
なお、図３では、コミットブロックＣ１に複数のＤＲＣ情報が格納されている例を示したが、コミットブロックには、１個のＤＲＣ情報が格納される場合もある。ここで、コミットブロックに複数のＤＲＣ情報が格納されるケースについて説明する。ｎｆｓｄ１２ａは、マルチスレッドに動作するデーモンであるので、複数の要求を並行して処理することがある。しかし、ｊｂｄは、シングルスレッドで動作する。したがって、ｎｆｓｄ１２ａが複数の要求を並行して処理する場合、ｊｂｄは、ｎｆｓｄ１２ａによって作成される１個のトランザクションにおいて、複数の要求を処理することになる。かかる場合に、コミットブロックには、複数のＤＲＣ情報が格納されることになる。
【００５８】
このように、ＤＲＣ情報は、従来のジャーナルファイルシステムから存在するコミットブロックに格納される。従来のコミットブロックは、コミットブロック情報のみしか格納されておらず、その他の領域は未使用領域であった。一般的に、各ブロックサイズは５１２バイトであり、コミットブロック情報のサイズは１６バイト程度である。そのため、従来のコミットブロックは、大半が未使用領域であった。本実施例に係るＮＡＳクラスタシステム１は、コミットブロックの未使用領域にＤＲＣ情報を格納するので、ｊｂｄ用パーティション２２の容量を圧迫することなくＤＲＣ情報を退避することができる。
【００５９】
次に、図１に示したｅｘｔ３／ｊｂｄ１４ａによるＤＲＣ再利用処理について説明する。まず、図４を用いて、ＤＲＣ再利用処理を行う理由について説明する。図４は、ＤＲＣ再利用処理を行う理由を説明するための図である。
【００６０】
図４の左側は、ｊｂｄ用パーティション２２に格納されているデータの一例を示す。なお、図４では、ｊｂｄ用パーティション２２に格納されているデータをトランザクション単位に区切って示している。また、図４の右側は、インコア制御表（「トランザクションの制御表」または「トランザクションリスト」とも呼ばれる）の一例を示す。
【００６１】
図４に示すように、ｊｂｄ用パーティション２２は、トランザクションｔ１５において、ＤＲＣ情報１５が格納されている。また、ｊｂｄ用パーティション２２は、トランザクションｔ１９において、ＤＲＣ情報１９が格納されている。一方、インコア制御表は、トランザクションｔ１５においてＤＲＣ情報１５が格納され、トランザクションｔ１９においてＤＲＣ情報１９が格納されたことを示す情報を保持する。
【００６２】
ところで、従来のｅｘｔ３／ｊｂｄ１４では、ｊｂｄ用パーティション２２に格納されている各更新ブロックデータは、チェックポイントと呼ばれる所定のタイミングが訪れるまでに、ｅｘｔ３用パーティション２１へ反映される。そして、全ての更新ブロックデータを反映し終えたトランザクション情報は、チェックポイント時に解放（破棄）される。すなわち、トランザクションｔ１５が開放された場合、トランザクションｔ１５において格納されたＤＲＣ情報１５も解放されてしまう。同様に、トランザクションｔ１９が解放された場合、トランザクションｔ１９において格納されたＤＲＣ情報１５も解放されてしまう。このことは、ＤＲＣ情報１５または１９の有効期間が経過する前に、ＤＲＣ情報１５または１９が解放されてしまうという問題を招く。
【００６３】
そこで、本実施例におけるｅｘｔ３／ｊｂｄ１４ａは、有効期間が経過するよりも前に解放されるＤＲＣ情報が存在する場合、かかるＤＲＣ情報を、まだ破棄されないトランザクション情報内のコミットブロックに退避させる処理（ＤＲＣ再利用処理）を行う。これにより、有効期間が経過するよりも前にＤＲＣ情報を解放してしまうことを防止することができる。
【００６４】
図５を用いて、ＤＲＣ再利用処理について具体的に説明する。図５は、ｅｘｔ３／ｊｂｄ１４ａによるＤＲＣ再利用処理を説明するための図である。図５の上段に、図４に示したｊｂｄ用パーティション２２に格納されているデータと、インコア制御表とを示す。
【００６５】
図５の上段に示した状態において、所定のチェックポイントにより、トランザクションｔ１５およびｔ１６が解放されるものとする。かかる場合、上述したように、ＤＲＣ情報１５は、解放されてしまう。そこで、ｅｘｔ３／ｊｂｄ１４ａは、ＤＲＣ情報１５の有効期間がまだ経過していない場合、図５の下段左側に示すように、ＤＲＣ情報１５を、トランザクションｔ２１において生成されたコミットブロックに退避している。
【００６６】
このように、ｅｘｔ３／ｊｂｄ１４ａは、有効期間が経過していないＤＲＣ情報を、適宜解放されないように新しいトランザクション情報として再退避するので、有効期間中、ＤＲＣ情報をｊｂｄ用パーティション２２に退避させておくことができる。
【００６７】
次に、フェールオーバ発生時におけるＮＡＳクラスタシステム１によるリカバリ処理について説明する。ここでは、フェールオーバが発生して、クライアント群１０からの要求を処理するノードが、クラスタノード１０ａからクラスタノード１０ｂへ引き継がれるものとする。かかる場合、クラスタノード１０ｂは、ｊｂｄ用パーティション２２に格納されている各種情報を用いてリカバリ処理を行う。このとき、クラスタノード１０ｂは、リカバリ処理が終了した場合であっても、有効期間が経過していないＤＲＣ情報を含むトランザクション情報を破棄しないように制御する。
【００６８】
具体的には、クラスタノード１０ｂは、ｊｂｄ用パーティション２２に退避されたトランザクション情報を元に、ｅｘｔ３用パーティション２１の更新リカバリ処理を行った後、リカバリ処理に用いたトランザクション情報のうち、有効期間が経過していないＤＲＣ情報を破棄しないように制御する。
【００６９】
図４に示した例を用いて説明する。例えば、フェールオーバ発生時におけるｊｂｄ用パーティション２２に格納されている情報が、図４の左側に示した状態であるものとする。また、ＤＲＣ情報１５および１９は、有効期間が経過していないものとする。このような状態において、クラスタノード１０ｂは、トランザクションｔ１５〜ｔ２０に対応するトランザクション情報を用いて、ｅｘｔ３用パーティションの更新リカバリ処理を行う。なお、以下では、トランザクションｔ１５〜ｔ２０に対応するトランザクション情報を、それぞれトランザクション情報ｔｉ１５〜ｔｉ２０と表記することとする。
【００７０】
ここで、従来のクラスタノードは、ｅｘｔ３用パーティションの更新リカバリ処理が終了した後に、トランザクション情報を削除していた。しかし、本実施例におけるクラスタノード１０ｂは、ｅｘｔ３用パーティション２１の更新リカバリ処理が終了した後、リカバリに用いたトランザクション情報ｔｉ１５〜ｔｉ２０を破棄せずに、トランザクション情報ｔｉ１５〜ｔｉ２０に対応するインコア制御表（図４の右側参照）を再構築する。すなわち、クラスタノード１０ｂは、フェールオーバ発生前におけるクラスタノード１０ａが有するトランザクション情報およびインコア制御表の状態を再現する。
【００７１】
なお、クラスタノード１０ｂは、クライアント群１０へのサービスを開始するとともに、ｊｂｄ用パーティション２２に格納されているＤＲＣ情報のうち、有効期間が経過していないＤＲＣ情報を、ｎｆｓｄ１２ｂが有するＤＲＣ１５ｂへ取り込む。すなわち、ＮＡＳクラスタシステム１は、自装置の都合のよいタイミングでＤＲＣ情報を復旧することができる。このため、本実施例に係るＮＡＳクラスタシステム１は、ＮＦＳサーバや、下位のファイルシステムの起動ロジックを変更することなく、ＤＲＣ復旧処理を行うことができる。
【００７２】
上述してきたように、本実施例に係るＮＡＳクラスタシステム１は、ＤＲＣに記憶させたＤＲＣ情報を、共有ディスク内のジャーナルファイルシステムに退避させる。したがって、本実施例に係るＮＡＳクラスタシステム１は、ＤＲＣ情報を退避させる機能を実装する場合であっても、開発に要するハードコストを抑えることができる。
【００７３】
また、本実施例に係るＮＡＳクラスタシステム１は、正常終了した非idempotentな要求についてのみＤＲＣ情報をｊｂｄ用パーティション２２に退避する。非idempotentな要求は、ＮＦＳのプロトコル仕様によって、正常応答をクライアントへ送信する前に、処理結果の恒久化（処理結果をｅｘｔ３用パーティション２１に反映すること）が定められている。したがって、ＮＡＳクラスタシステム１は、正常終了した非idempotentな要求については、ｅｘｔ３用パーティション２１にアクセスすることになる。本実施例に係るＮＡＳクラスタシステム１は、従来から行われている処理結果の恒久化処理に、ＤＲＣ退避処理を荷負わせる（ｐｉｇｇｙ−ｂａｇ）ので、従来のＮＡＳクラスタシステム９のようにＮＶＲＡＭを用いた場合と比較しても、性能劣化を招くことはない。したがって、本実施例に係るＮＡＳクラスタシステム１は、ＤＲＣ情報を退避させる機能を実装する場合であっても、開発に要するハードコストを抑えることができるとともに、性能劣化を招くことを防止することができる。
【００７４】
なお、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００７５】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報（例えば、図３など）については、特記する場合を除いて任意に変更することができる。
【００７６】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７７】
（付記１）ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムを制御するクラスタシステム制御プログラムであって、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成手順と、
前記要求応答情報生成手順によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避手順と
をコンピュータに実行させることを特徴とするクラスタシステム制御プログラム。
【００７８】
（付記２）前記要求応答情報生成手順は、前記クライアントから受け付けた要求が、重複して処理された場合に同一の処理結果にならない要求であり、かつ、該要求の処理結果が正常終了した場合に、前記要求応答情報を生成することを特徴とする付記１に記載のクラスタシステム制御プログラム。
【００７９】
（付記３）前記退避手順は、前記ジャーナルファイルシステムにトランザクション単位で格納されている情報であるトランザクション情報が有するコミットブロック内に、前記要求応答情報を退避することを特徴とする付記１または２に記載のクラスタシステム制御プログラム。
【００８０】
（付記４）前記要求応答情報生成手順は、前記要求応答情報を前記ジャーナルファイルシステムに退避する期間を示す有効期間情報を該要求応答情報に付与し、
前記退避手順は、前記要求応答情報生成手順によって生成された要求応答情報を含むトランザクション情報が破棄対象になり、かつ、該要求応答情報の有効期間が経過していない場合に、該要求応答情報を他のトランザクション情報に退避することを特徴とする付記３に記載のクラスタシステム制御プログラム。
【００８１】
（付記５）フェールオーバが発生して、トランザクション情報を用いて復旧処理を行った後にトランザクション情報を破棄する場合に、前記要求応答情報生成手順によって付与された有効期間が経過していない要求応答情報を含むトランザクション情報以外のトランザクション情報を破棄する復旧手順をさらにコンピュータに実行させることを特徴とする付記４に記載のクラスタシステム制御プログラム。
【００８２】
（付記６）前記クライアントから要求を受け付けた場合に、該要求の応答データを該クライアントへ送信する応答手順をさらにコンピュータに実行させ、
前記復旧手順は、フェールオーバが発生した場合に、前記退避手順によって退避された要求応答情報を取得し、
前記応答手順は、前記クライアントから要求を受け付けた場合に、前記復旧手順によって取得された要求応答情報のうち、識別番号が該要求の識別番号と同一の要求応答情報に含まれる応答データを、前記クライアントに送信することを特徴とする付記５に記載のクラスタシステム制御プログラム。
【００８３】
（付記７）ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムであって、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成手段と、
前記要求応答情報生成手段によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避手段と
を備えたことを特徴とするクラスタシステム。
【００８４】
（付記８）ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムを制御するクラスタシステム制御方法であって、
前記クラスタシステムが、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成工程と、
前記要求応答情報生成工程によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避工程と
を含んだことを特徴とするクラスタシステム制御方法。
【図面の簡単な説明】
【００８５】
【図１】ＮＡＳクラスタシステムの構成例を示す図である。
【図２】図１に示したクラスタノードによるＤＲＣ退避処理手順を示すシーケンス図である。
【図３】ｊｂｄ用パーティションの構成例を示す図である。
【図４】ＤＲＣ再利用処理を行う理由を説明するための図である。
【図５】ｅｘｔ３／ｊｂｄによるＤＲＣ再利用処理を説明するための図である。
【図６】従来のＮＡＳクラスタシステムの構成例を示す図である。
【符号の説明】
【００８６】
１、９  ＮＡＳクラスタシステム
１０  クライアント群
１０ａ、１０ｂ、９０ａ、９０ｂ  クラスタノード
１１ａ、１１ｂ  ＲＰＣ＋ＴＣＰ／ＩＰ
１２ａ、１２ｂ  ｎｆｓｄ
１３ａ、１３ｂ  ＶＦＳ
１４ａ、１４ｂ  ｅｘｔ３／ｊｂｄ
１５ａ、１５ｂ  ＤＲＣ
２０、９１  共有ディスク
２１  ｅｘｔ３用パーティション
２２  ｊｂｄ用パーティション
９２  クラスタ制御部
【図１】
2010113617.tif 000003
【図２】
2010113617.tif 000004
【図３】
2010113617.tif 000005
【図４】
2010113617.tif 000006
【図５】
2010113617.tif 000007
【図６】
2010113617.tif 000008