説明

クラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法

【課題】開発に要するコストを増大させることなくDRC情報を退避させる機能を実現することができるクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法を提供すること。
【解決手段】クライアントから要求を受け付けた場合に、かかる要求の処理結果と、かかる要求に対応するDRC情報とを、ジャーナルファイルシステムにアトミックに記憶させ、フェールオーバ時に、ジャーナルファイルシステムに退避させたDRCをクラスタノード間で引き継ぐ処理を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、クラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法に関する。
【背景技術】
【0002】
近年、膨大な電子データを生産する情報社会において、多種多様なクライアントに対して電子データを共有させるNAS(Network Attached Storage)などのファイルサーバが、重要な技術となっている。クライアントがNASへアクセスするために利用するファイルアクセスプロトコルとしては、UNIX(登録商標)系クライアント用のNFS(Network File System)と、Windows(登録商標)系クライアント用のCIFS(Common Internet File System)の二種類が主流となっている。
【0003】
このようなファイルサーバは、電子データを集中管理しているため、可用性(Availability)の向上が求められている。可用性を向上させる技術の一つとして、複数のノードによってファイルサーバを構築するクラスタがある。ここで、図6を用いて、NASクラスタシステムについて説明する。図6は、従来のNASクラスタシステム9の構成例を示す図である。
【0004】
図6に示すように、NASクラスタシステム9は、クラスタノード90aおよび90bと、共有ディスク91とを有し、クライアント群10と接続されている。クライアント群10は、NASクラスタシステム9に対してデータ書き込み等の要求を送信する情報処理装置であり、例えば、パーソナルコンピュータに相当する。なお、図6において、クライアント群10は、一台以上の情報処理装置であることを示している。また、本明細書において、単に「要求」と表記する場合、クライアント群10から送信されるデータ書き込みや、データ読み出し、データ削除等の要求を示すものとする。共有ディスク91は、ユーザデータや、システムデータ等を記憶する記憶デバイスであり、クラスタノード90aおよび90bと接続されている。
【0005】
図6において、クラスタノード90aは、クライアントへサービスを提供する運用系ノードである。クラスタノード90bは、クラスタノード90aが障害や運用管理等によって停止した場合に、代行してサービスを提供する待機系ノードである。また、クラスタノード90aおよび90bは、クラスタ制御部92を有する。クラスタ制御部92は、クラスタノード90aおよび90bのうち、いずれをアクティブに動作させるかを制御する。例えば、クラスタ制御部92は、クラスタノード90aが動作している場合には、クラスタノード90bを停止させる。一方、クラスタ制御部92は、クラスタノード90aが停止している場合には、クラスタノード90bをアクティブに動作させる。アクティブに動作するように制御されたクラスタノード90aまたは90bは、クライアント群10へサービスを提供する。
【0006】
ところで、上述したクライアント群10からNASクラスタシステム9へ送信される要求は、「idempotentな要求」と、「非idempotent(non-idempotentとも呼ばれる)な要求」との二種類に分けられる。idempotentな要求とは、同一の要求を重複して処理した場合に、処理結果が同一になる要求を示す。例えば、UNIX(登録商標)系コマンドにおけるls(list segments)や、pwd(print working directory)などは、idempotentな要求に該当する。
【0007】
一方、非idempotentな要求とは、同一の要求を重複して処理した場合に、処理結果が同一にならない要求を示す。例えば、UNIX(登録商標)系コマンドにおけるrmdir(remove directory)や、mkdir(make directory)などは、非idempotentな要求に該当する。rmdirを例に挙げて説明すると、クラスタノード90aは、一回目にrmdirを実行してディレクトリの削除処理に成功した場合、二回目以降にrmdirを実行しても、処理結果がENOENT(No such file or directory)といったエラーになる。
【0008】
ここで、クライアント群10は、送信した要求が消失したことを検知した場合、かかる要求を再送する。このとき、NASクラスタシステム9は、かかる再送処理によって要求を重複して受け付ける場合がある。かかる場合、NASクラスタシステム9が、仮に要求を重複して処理したこととする。このことは、NASクラスタシステム9が非idempotentな要求を重複して受け付けた場合に、要求に対する2回目以降の処理結果がエラー(上記例では、ENOENTエラー)になってしまうという問題を招く。
【0009】
そこで、NASクラスタシステム9は、非idempotentな要求を重複して受け付けた場合における対策を取っている。具体的には、NASクラスタシステム9は、クライアントから要求を受け付けた場合に、かかる要求を識別するための識別番号(xid)と、かかる要求の応答データとの組合せを含む情報を、DRC(duplicate reply cache、または、duplicate request cache)と呼ばれるキャッシュに記憶させる。ここで言う「要求の応答データ」とは、NASクラスタシステム9からクライアント群10へ応答されるデータを示す。なお、本明細書では、DRCに記憶される「xid」と「応答データ」との組合せを含む情報を、「DRC情報」と呼ぶこととする。
【0010】
そして、NASクラスタシステム9は、クライアント群10から要求を受け付けた場合に、DRCに記憶されているDRC情報群から、受け付けた要求のxidと同一のxidを含むDRC情報を検索する。そして、NASクラスタシステム9は、同一のxidを含むDRC情報が存在する場合に、検索されたDRC情報に含まれる応答データをクライアントへ送信して処理を終了する。これにより、NASクラスタシステムは、非idempotentな要求を重複して受け付けた場合であっても、重複実行によって発生するエラーを防止している。
【0011】
なお、一般的に、NASクラスタシステム9は、DRCに記憶させたDRC情報を、クラスタノード90aまたは90bの双方がアクセスできるNVRAM(Non Volatile Random Access Memory)に退避させる。これは、フェールオーバが発生した場合に、DRC情報をクラスタノード90aから、クラスタノード90bへ引き継げるようにするためである。
【0012】
【非特許文献1】B.Callaghan、NFS Illustrated、ISBN 0-201-32570-5、Addision-Wesley、2000
【非特許文献2】S.Lawler、Active/Active Controller Configuration Overview and Best Practice Guidelines、TR3450-0107、Network Appliance Inc.、January 2007、[online]、[平成20年10月14日検索]、インターネット<http://www.netapp.com/library/tr/3450.pdf>
【発明の開示】
【発明が解決しようとする課題】
【0013】
しかしながら、上記従来のNASクラスタシステムには、DRC情報を退避させる機能を実装するためには、開発に要するハードコストが増大してしまうという問題があった。具体的には、従来のサーバクラスタシステムは、上述したように、DRC情報をNVRAMに退避させる。一般的なサーバクラスタシステムは、NVRAMを有していないため、DRC情報を退避させる機能を実装するためには、高価なハードであるNVRAMを新たに設けることになる。このことは、サーバクラスタシステムにかかるコストが増大するという問題を招く。
【0014】
開示の技術は、上述した従来技術による問題点を解消するためになされたものであり、開発に要するコストを増大させることなくDRC情報を退避させる機能を実現することができるクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法を提供することを目的とする。
【課題を解決するための手段】
【0015】
上述した課題を解決し、目的を達成するために、本願に開示するクラスタシステム制御プログラムは、ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムを制御するクラスタシステム制御プログラムであって、クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成手順と、前記要求応答情報生成手順によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避手順とをコンピュータに実行させることを要件とする。
【0016】
なお、本願に開示するクラスタシステム制御プログラムの構成要素、表現または構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも、他の態様として有効である。
【発明の効果】
【0017】
本願に開示したクラスタシステム制御プログラムによれば、開発に要するコストを増大させることなくDRC情報を退避させる機能を実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【0018】
以下に、本願に開示するクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例により本願に開示するクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法が限定されるものではない。なお、以下の実施例では、本願に開示するクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法を、NFSを用いたNASクラスタシステムに適用する場合を例に挙げて説明する。しかし、本願に開示するクラスタシステム制御プログラム、クラスタシステム、クラスタシステム制御方法は、CIFSを用いたNASクラスタシステム等にも適用することができる。
【実施例】
【0019】
まず、本実施例に係るNASクラスタシステム1の概要について説明する。本実施例に係るNASクラスタシステム1は、共有ディスクにジャーナルファイルシステムを有する。そして、NASクラスタシステム1は、クライアントから要求を受け付けた場合に、かかる要求の処理結果と、かかる要求に対応するDRC情報とを、ジャーナルファイルシステムに記憶させる。
【0020】
すなわち、NASクラスタシステム1は、従来のNASクラスタシステム9のようにNVRAMにDRC情報を退避させるのではなく、共有ディスク内のジャーナルファイルシステムにDRC情報を退避させる。そして、NASクラスタシステム1は、フェールオーバが発生した場合に、ジャーナルファイルシステムに記憶されているDRC情報を、クラスタノード間で引き継ぐ。
【0021】
このように、本実施例に係るNASクラスタシステム1は、新たなハードが設けられなくても、DRC情報を共有ディスクに退避させるので、開発に要するハードコストを増大させることなく、DRC情報を退避させる機能を実現することができる。なお、一般的に、NASクラスタシステムに接続される共有ディスクは、ジャーナルファイルシステムを有する。したがって、本実施例に係るNASクラスタシステム1は、新たにジャーナルファイルシステムを設けることなく実現することができる。
【0022】
次に、本実施例に係るNASクラスタシステム1の構成について説明する。図1は、本実施例に係るNASクラスタシステム1の構成例を示す図である。図1に示すように、NASクラスタシステム1は、クラスタノード10aおよび10bと、共有ディスク20とを有し、クライアント群10と接続されている。
【0023】
共有ディスク20は、ユーザデータや、システムデータ等を記憶する記憶デバイスであり、クラスタノード10aおよび10bからアクセスされる。ここで、本実施例における共有ディスク20は、少なくともジャーナルファイルシステムを有する。ジャーナルファイルシステムとは、ファイルシステムとして整合性のある更新処理の単位(トランザクション)を、ジャーナルという個別デバイス(または専用ファイル)を用いてアトミック(不可分)に処理する機能を有するファイルシステムである(詳細は、参考文献「S.Tweedie、EXT3 Journaling Filesystem、Ottawa Linux Symposium、Ottawa Congress Centre、Ottawa、Ontario、Canada、2000/7/20.」を参照)。例えば、ext3(third extended file system)と、そのジャーナルデータを制御するjbd(journaling block device)の組み合わせなどが有名である。
【0024】
図1に示した共有ディスク20は、ユーザデータや、システムデータ等を記憶する領域であるext3用パーティション21を有するとともに、そのジャーナルデータを管理する領域としてjbd用パーティション22を有する。
【0025】
図1において、クラスタノード10aは、運用系ノードであり、クラスタノード10bは、待機系ノードである。なお、クラスタノード10aおよび10bの構成要素は、互いに同等の機能を有するため、以下では、クラスタノード10aについてのみ構成要素の説明をする。
【0026】
クラスタノード10aは、RPC(Remote Procedure Call)+TCP/IP(Transmission Control Protocol/Internet Protocol)11aと、nfsd(Network File System Daemon)12aと、VFS(Virtual File System)13aと、ext3/jbd14aとを有する。
【0027】
RPC+TCP/IP11aは、RPCおよびTCP/IPのレイヤにおける処理を担う。具体的には、RPC+TCP/IP11aは、クライアント群10から送信される要求を受け取り、受け取った要求に対して、RPCおよびTCP/IPのレイヤにおける解析を行う。
【0028】
nfsd12aは、クラスタノード10aに常駐するNFSのプログラム(カーネルデーモン)であり、インコアなDRCの制御体であるDRC15aを有する。具体的には、nfsd12aは、後述するVFS13aとext3/jbd14aとを介して、RPC+TCP/IP11aによって解析された要求を実行する。続いて、nfsd12aは、実行済みの要求に対応するDRC情報を生成し、生成したDRC情報をDRC15aに格納する。
【0029】
そして、nfsd12aは、正常終了した非idempotentな要求についてのみDRC情報をext3/jbd14aへ送信する。これは、本実施例に係るNASクラスタシステム1は、要求に対する重複処理によって発生するエラーを回避することを目的として、DRC情報をjbd用パーティション22に退避するからである。
【0030】
具体的には、idempotentな要求は、重複処理された場合であっても処理結果がエラーにならない。したがって、クラスタノード10aは、idempotentな要求に対応するDRC情報をjbd用パーティション22に退避して、クラスタノード10bに引き継げるようにしておく必要がない。また、異常終了した非idempotentな要求は、重複処理に関係なく処理結果がエラーになる。したがって、クラスタノード10aは、異常終了した非idempotentな要求に対応するDRC情報をjbd用パーティション22に退避して、クラスタノード10bに引き継げるようにしておく必要がない。このようなことから、nfsd12aは、正常終了した非idempotentな要求についてのみDRC情報をext3/jbd14aへ送信する。
【0031】
VFS13aは、ファイルシステムの上位に位置する抽象化層であり、クライアント群10が様々なアプリケーションを用いてファイルシステムにアクセスできるようにする。具体的には、VFS13aは、要求を受け付けた場合に、かかる要求に関連するファイルシステムを選択する。図1に示した例では、共有ディスク20のファイルシステムがext3であるため、VFS13aは、nfsd12aから要求を受け付けた場合に、ext3をファイルシステムとして選択する。
【0032】
ext3/jbd14aは、OS(Operating System)が持つコンピュータの資源を操作するためのデータ、デバイス、プロセスやカーネルを備え、データの操作を実施する。なお、ここで言う「ext3/jbd」とは、ファイルシステムであるext3と、jbdとの組合せを示す。ここで、ext3はjbdと連携して動作するジャーナルファイルシステムである。
【0033】
jbdは、元来、ext3ファイルシステムを形成するブロックの更新をジャーナル化するためのデバイスドライバである。しかし、本実施例におけるjbdは、nfsd12aによって生成されたDRC情報をも、jbd用パーティション22に格納する。
【0034】
このとき、jbdは、正常終了した非idempotentな要求の処理結果と、かかる要求に対応するDRC情報とを、1つのトランザクション内において、jbd用パーティション22に格納する。このことを実現するために、nfsd12aは、ext3/jbd14aにおけるジャーナルセッションをオーバラップするように、ジャーナルセッションを開始および終了する。これにより、jbdは、要求の処理結果と、かかる要求のDRC情報とをアトミックにjbd用パーティション22に格納することができる。
【0035】
次に、図2を用いて、図1に示したクラスタノード10aによるDRC退避処理について説明する。図2は、図1に示したクラスタノード10aによるDRC退避処理手順を示すシーケンス図である。図2では、クラスタノード10aは、クライアント群10から要求「rmdir」を受け付けた場合を例に挙げて説明する。なお、図2に示したext3は、図1に示したext3/jbd14aにおけるext3であり、図2に示したjbdは、図1に示したext3/jbd14aにおけるjbdである。
【0036】
図2に示すように、nfsd12aは、クライアント群10から要求「rmdir」を受け付けた場合に(ステップS101)、jbdに対して、トランザクション内における更新セッション(ジャーナルセッション)を開始する旨のコマンド「journal_start」を発行する(ステップS102およびS103)。なお、本明細書において、トランザクションとは、ext3用パーティション21をアトミックに更新する処理単位を示す。
【0037】
ここで、活性のトランザクションが不在であれば、新規にトランザクションを作成する。なお、ステップS102およびS103において開始されたジャーナルセッションは、図2に示したJ1である。
【0038】
続いて、nfsd12aは、図示しないVFS13aを介して、コマンド「ext3_rmdir」をext3に発行する(ステップS104)。かかるコマンドを受け付けたext3は、jbdに対して、ジャーナルセッションを開始する旨のコマンド「journal_start」を発行する(ステップS105およびS106)。なお、ステップS105およびS106において開始されたジャーナルセッションは、図2に示したJ2である。
【0039】
続いて、ext3は、コマンド「ext3_rmdir」を実行した後、jbdに対して、ジャーナルセッションJ2を終了する旨のコマンド「journal_stop」を発行する(ステップS107)。かかるコマンドを受け付けたjbdは、rmdirの処理結果をjbd用パーティション22に格納するためのジャーナルデータを生成する(ステップS108)。
【0040】
続いて、nfsd12aは、ジャーナルセッションJ2が終了したことをjbdおよびext3を介して受け取る(ステップS109およびS110)。続いて、nfsd12aは、DRC情報を生成する(ステップS111)。続いて、nfsd12aは、ext3によって実行された「ext3_rmdir」が正常終了していた場合に、jbdに対して、生成したDRC情報をjbd用パーティション22に格納する旨のコマンド(図2に示した例では、「nfsd_set_drc_to_journal」)を発行する(ステップS112およびS113)。
【0041】
続いて、nfsd12aは、jbdに対して、ジャーナルセッションJ1を終了する旨のコマンド「journal_stop」を発行する(ステップS114)。かかるコマンドを受け付けたjbdは、ステップS111において生成されたDRC情報をjbd用パーティション22に格納するためのジャーナルデータを生成する(ステップS115)。そして、nfsd12aは、ジャーナルセッションJ1が終了したことをjbdおよびext3を介して受け取る(ステップS116)。
【0042】
続いて、nfsd12aは、所定のタイミングになった場合に、ext3に対して、トランザクションを強制フラッシュさせるコマンド「ext3_sync_file」を発行する(ステップS117)。かかるコマンドを受け付けたext3は、jbdに対してコマンド「journal_force_commit」を発行する(ステップS118)。かかるコマンドを受け付けたjbdは、強制フラッシュを実行する(ステップS119)。具体的には、jbdは、ステップS108およびステップS115において生成したジャーナルデータ等を含むトランザクション情報を、jbd用パーティション22へ格納する。ここで言う「トランザクション情報」とは、1個のトランザクション内で生成される全てのジャーナルデータや、その他の制御データを含む情報を示す。
【0043】
なお、NFSプロトコルの仕様上、非idempotent要求に対しては、その成功応答メッセージを送信する前に、必ず処理結果を恒久化するルールとなっている。すなわち、上述の強制フラッシュ処理を行う所定のタイミングとは、ステップS116直後に他ならない。
【0044】
そして、jbd用パーティション22へ格納されたファイルシステムを形成する更新ブロックデータは、図2に示されたシークエンスの後で、非同期にext3用パーティション21へ反映される。jbdは、ext3用パーティション21へ反映が完了しているブロックに対応するジャーナルデータを、適宜jbd用パーティション22から削除する。ここで、jbdは、有効期間が経過していないDRC情報が削除されないようにデータの削除処理を行う。かかるデータ削除処理(後述する「DRC再利用処理」に相当する)については、図4および図5を用いて後に詳述する。
【0045】
このように、クラスタノード10aは、ステップS102およびS103で開始されるジャーナルセッションJ1において生成されたジャーナルデータと、ステップS105およびS106で開始されるジャーナルセッションJ2において生成されたジャーナルデータとを、単一のトランザクション内でjbd用パーティション22に格納する。これにより、クラスタノード10aは、ステップS108における処理(要求実行処理)と、ステップS115における処理(DRC格納処理)とのアトミック性を保証することができる。
【0046】
次に、図1に示したjbd用パーティション22の構成について説明する。図3は、jbd用パーティション22の構成例を示す図である。図3の上段に、jbd用パーティション22に格納されるデータの一部分を示す。なお、ここでは、jbd用パーティション22に格納されるデータを、トランザクション単位で区切って図示している。具体的には、図3の上段に示したjbd用パーティション22は、トランザクションT1と、トランザクションT2とにおいて格納されたデータを記憶している。
【0047】
jbd用パーティション22は、図3に示すように、各トランザクションにおいて、ディスクリプタブロックとブロックデータとの組合せ、および、コミットブロックとが格納される。
【0048】
図3に示した例では、トランザクションT1は、ディスクリプタブロックD1と、ブロックデータB11およびB12との組合せと、ディスクリプタブロックD2と、ブロックデータB21およびB22との組合せ、更にコミットブロックC1およびC2を有する。
【0049】
ディスクリプタブロックD1およびD2は、自身(ディスクリプタブロック)の後に格納されているデータブロックのタイプ等を示す情報が格納される領域である。例えば、ディスクリプタブロックD1は、ブロックデータB11およびB12のタイプ等を示す情報が格納される。また、例えば、ディスクリプタブロックD2は、ブロックデータB21およびB22のタイプ等を示す情報が格納される。
【0050】
ブロックデータB11、B12、B21およびB22は、更新されたデータが格納される領域である。ここで言う「更新されたデータ」とは、図2におけるステップS108において格納される情報に相当する。コミットブロックC1およびC2は、トランザクションの終端を示す情報が格納される領域である。
【0051】
コミットブロックC1は、図3に示すように、コミットブロック情報と、DRCヘッダと、DRC情報とを有する。なお、図3では、コミットブロックC1の構成を示しているが、コミットブロックC2の構成は、コミットブロックC1の構成と同様である。コミットブロック情報は、トランザクションの終端を示す情報が格納される領域である。
【0052】
DRCヘッダは、DRCフラグと、DRC終端オフセットとを有する。DRCフラグは、コミットブロックC1の後に、他のコミットブロックが存在するか否かを示す。本明細書では、DRCフラグ「1」は、コミットブロックの後に、他のコミットブロックが存在することを示し、DRCフラグ「2」は、コミットブロックの後に、他のコミットブロックが存在しないことを示すものとする。
【0053】
図3に示した例では、コミットブロックC1の後に、コミットブロックC2が存在する。したがって、コミットブロックC1のDRCフラグには、「1」が格納される。また、図3に示した例では、コミットブロックC2の後に、他のコミットブロックが存在しない。したがって、コミットブロックC2のDRCフラグには、「2」が格納される。
【0054】
DRC情報は、図3に示すように、sockaddrと、xidと、procと、protと、versと、timevalと、プロシジャ固有データとを有する。sockaddrは、要求を送信したクライアントが保持するソケットアドレスが格納される領域である。xidは、要求のxidが格納される領域である。
【0055】
procは、プロシジャが格納される領域である。図2に示した例の場合、procには、「rmdir」が格納される。protは、プロトコルの種類が格納される領域である。本実施例の場合、protには、「nfs」が格納される。versは、プロトコルのバージョンが格納される領域である。例えば、プロトコルが「nfs2」の場合、versには、「2」が格納される。
【0056】
timevalは、DRC情報の有効期間が格納される領域である。なお、有効期間とは、DRC情報をjbd用パーティション22に退避しておく制限時刻であり、例えば、かかるDRC情報の生成された時刻に120秒を加算した時刻などに設定される。プロシジャ固有データは、要求に対する「応答データ」が格納される領域である。
【0057】
なお、図3では、コミットブロックC1に複数のDRC情報が格納されている例を示したが、コミットブロックには、1個のDRC情報が格納される場合もある。ここで、コミットブロックに複数のDRC情報が格納されるケースについて説明する。nfsd12aは、マルチスレッドに動作するデーモンであるので、複数の要求を並行して処理することがある。しかし、jbdは、シングルスレッドで動作する。したがって、nfsd12aが複数の要求を並行して処理する場合、jbdは、nfsd12aによって作成される1個のトランザクションにおいて、複数の要求を処理することになる。かかる場合に、コミットブロックには、複数のDRC情報が格納されることになる。
【0058】
このように、DRC情報は、従来のジャーナルファイルシステムから存在するコミットブロックに格納される。従来のコミットブロックは、コミットブロック情報のみしか格納されておらず、その他の領域は未使用領域であった。一般的に、各ブロックサイズは512バイトであり、コミットブロック情報のサイズは16バイト程度である。そのため、従来のコミットブロックは、大半が未使用領域であった。本実施例に係るNASクラスタシステム1は、コミットブロックの未使用領域にDRC情報を格納するので、jbd用パーティション22の容量を圧迫することなくDRC情報を退避することができる。
【0059】
次に、図1に示したext3/jbd14aによるDRC再利用処理について説明する。まず、図4を用いて、DRC再利用処理を行う理由について説明する。図4は、DRC再利用処理を行う理由を説明するための図である。
【0060】
図4の左側は、jbd用パーティション22に格納されているデータの一例を示す。なお、図4では、jbd用パーティション22に格納されているデータをトランザクション単位に区切って示している。また、図4の右側は、インコア制御表(「トランザクションの制御表」または「トランザクションリスト」とも呼ばれる)の一例を示す。
【0061】
図4に示すように、jbd用パーティション22は、トランザクションt15において、DRC情報15が格納されている。また、jbd用パーティション22は、トランザクションt19において、DRC情報19が格納されている。一方、インコア制御表は、トランザクションt15においてDRC情報15が格納され、トランザクションt19においてDRC情報19が格納されたことを示す情報を保持する。
【0062】
ところで、従来のext3/jbd14では、jbd用パーティション22に格納されている各更新ブロックデータは、チェックポイントと呼ばれる所定のタイミングが訪れるまでに、ext3用パーティション21へ反映される。そして、全ての更新ブロックデータを反映し終えたトランザクション情報は、チェックポイント時に解放(破棄)される。すなわち、トランザクションt15が開放された場合、トランザクションt15において格納されたDRC情報15も解放されてしまう。同様に、トランザクションt19が解放された場合、トランザクションt19において格納されたDRC情報15も解放されてしまう。このことは、DRC情報15または19の有効期間が経過する前に、DRC情報15または19が解放されてしまうという問題を招く。
【0063】
そこで、本実施例におけるext3/jbd14aは、有効期間が経過するよりも前に解放されるDRC情報が存在する場合、かかるDRC情報を、まだ破棄されないトランザクション情報内のコミットブロックに退避させる処理(DRC再利用処理)を行う。これにより、有効期間が経過するよりも前にDRC情報を解放してしまうことを防止することができる。
【0064】
図5を用いて、DRC再利用処理について具体的に説明する。図5は、ext3/jbd14aによるDRC再利用処理を説明するための図である。図5の上段に、図4に示したjbd用パーティション22に格納されているデータと、インコア制御表とを示す。
【0065】
図5の上段に示した状態において、所定のチェックポイントにより、トランザクションt15およびt16が解放されるものとする。かかる場合、上述したように、DRC情報15は、解放されてしまう。そこで、ext3/jbd14aは、DRC情報15の有効期間がまだ経過していない場合、図5の下段左側に示すように、DRC情報15を、トランザクションt21において生成されたコミットブロックに退避している。
【0066】
このように、ext3/jbd14aは、有効期間が経過していないDRC情報を、適宜解放されないように新しいトランザクション情報として再退避するので、有効期間中、DRC情報をjbd用パーティション22に退避させておくことができる。
【0067】
次に、フェールオーバ発生時におけるNASクラスタシステム1によるリカバリ処理について説明する。ここでは、フェールオーバが発生して、クライアント群10からの要求を処理するノードが、クラスタノード10aからクラスタノード10bへ引き継がれるものとする。かかる場合、クラスタノード10bは、jbd用パーティション22に格納されている各種情報を用いてリカバリ処理を行う。このとき、クラスタノード10bは、リカバリ処理が終了した場合であっても、有効期間が経過していないDRC情報を含むトランザクション情報を破棄しないように制御する。
【0068】
具体的には、クラスタノード10bは、jbd用パーティション22に退避されたトランザクション情報を元に、ext3用パーティション21の更新リカバリ処理を行った後、リカバリ処理に用いたトランザクション情報のうち、有効期間が経過していないDRC情報を破棄しないように制御する。
【0069】
図4に示した例を用いて説明する。例えば、フェールオーバ発生時におけるjbd用パーティション22に格納されている情報が、図4の左側に示した状態であるものとする。また、DRC情報15および19は、有効期間が経過していないものとする。このような状態において、クラスタノード10bは、トランザクションt15〜t20に対応するトランザクション情報を用いて、ext3用パーティションの更新リカバリ処理を行う。なお、以下では、トランザクションt15〜t20に対応するトランザクション情報を、それぞれトランザクション情報ti15〜ti20と表記することとする。
【0070】
ここで、従来のクラスタノードは、ext3用パーティションの更新リカバリ処理が終了した後に、トランザクション情報を削除していた。しかし、本実施例におけるクラスタノード10bは、ext3用パーティション21の更新リカバリ処理が終了した後、リカバリに用いたトランザクション情報ti15〜ti20を破棄せずに、トランザクション情報ti15〜ti20に対応するインコア制御表(図4の右側参照)を再構築する。すなわち、クラスタノード10bは、フェールオーバ発生前におけるクラスタノード10aが有するトランザクション情報およびインコア制御表の状態を再現する。
【0071】
なお、クラスタノード10bは、クライアント群10へのサービスを開始するとともに、jbd用パーティション22に格納されているDRC情報のうち、有効期間が経過していないDRC情報を、nfsd12bが有するDRC15bへ取り込む。すなわち、NASクラスタシステム1は、自装置の都合のよいタイミングでDRC情報を復旧することができる。このため、本実施例に係るNASクラスタシステム1は、NFSサーバや、下位のファイルシステムの起動ロジックを変更することなく、DRC復旧処理を行うことができる。
【0072】
上述してきたように、本実施例に係るNASクラスタシステム1は、DRCに記憶させたDRC情報を、共有ディスク内のジャーナルファイルシステムに退避させる。したがって、本実施例に係るNASクラスタシステム1は、DRC情報を退避させる機能を実装する場合であっても、開発に要するハードコストを抑えることができる。
【0073】
また、本実施例に係るNASクラスタシステム1は、正常終了した非idempotentな要求についてのみDRC情報をjbd用パーティション22に退避する。非idempotentな要求は、NFSのプロトコル仕様によって、正常応答をクライアントへ送信する前に、処理結果の恒久化(処理結果をext3用パーティション21に反映すること)が定められている。したがって、NASクラスタシステム1は、正常終了した非idempotentな要求については、ext3用パーティション21にアクセスすることになる。本実施例に係るNASクラスタシステム1は、従来から行われている処理結果の恒久化処理に、DRC退避処理を荷負わせる(piggy−bag)ので、従来のNASクラスタシステム9のようにNVRAMを用いた場合と比較しても、性能劣化を招くことはない。したがって、本実施例に係るNASクラスタシステム1は、DRC情報を退避させる機能を実装する場合であっても、開発に要するハードコストを抑えることができるとともに、性能劣化を招くことを防止することができる。
【0074】
なお、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0075】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報(例えば、図3など)については、特記する場合を除いて任意に変更することができる。
【0076】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0077】
(付記1)ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムを制御するクラスタシステム制御プログラムであって、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成手順と、
前記要求応答情報生成手順によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避手順と
をコンピュータに実行させることを特徴とするクラスタシステム制御プログラム。
【0078】
(付記2)前記要求応答情報生成手順は、前記クライアントから受け付けた要求が、重複して処理された場合に同一の処理結果にならない要求であり、かつ、該要求の処理結果が正常終了した場合に、前記要求応答情報を生成することを特徴とする付記1に記載のクラスタシステム制御プログラム。
【0079】
(付記3)前記退避手順は、前記ジャーナルファイルシステムにトランザクション単位で格納されている情報であるトランザクション情報が有するコミットブロック内に、前記要求応答情報を退避することを特徴とする付記1または2に記載のクラスタシステム制御プログラム。
【0080】
(付記4)前記要求応答情報生成手順は、前記要求応答情報を前記ジャーナルファイルシステムに退避する期間を示す有効期間情報を該要求応答情報に付与し、
前記退避手順は、前記要求応答情報生成手順によって生成された要求応答情報を含むトランザクション情報が破棄対象になり、かつ、該要求応答情報の有効期間が経過していない場合に、該要求応答情報を他のトランザクション情報に退避することを特徴とする付記3に記載のクラスタシステム制御プログラム。
【0081】
(付記5)フェールオーバが発生して、トランザクション情報を用いて復旧処理を行った後にトランザクション情報を破棄する場合に、前記要求応答情報生成手順によって付与された有効期間が経過していない要求応答情報を含むトランザクション情報以外のトランザクション情報を破棄する復旧手順をさらにコンピュータに実行させることを特徴とする付記4に記載のクラスタシステム制御プログラム。
【0082】
(付記6)前記クライアントから要求を受け付けた場合に、該要求の応答データを該クライアントへ送信する応答手順をさらにコンピュータに実行させ、
前記復旧手順は、フェールオーバが発生した場合に、前記退避手順によって退避された要求応答情報を取得し、
前記応答手順は、前記クライアントから要求を受け付けた場合に、前記復旧手順によって取得された要求応答情報のうち、識別番号が該要求の識別番号と同一の要求応答情報に含まれる応答データを、前記クライアントに送信することを特徴とする付記5に記載のクラスタシステム制御プログラム。
【0083】
(付記7)ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムであって、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成手段と、
前記要求応答情報生成手段によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避手段と
を備えたことを特徴とするクラスタシステム。
【0084】
(付記8)ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムを制御するクラスタシステム制御方法であって、
前記クラスタシステムが、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成工程と、
前記要求応答情報生成工程によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避工程と
を含んだことを特徴とするクラスタシステム制御方法。
【図面の簡単な説明】
【0085】
【図1】NASクラスタシステムの構成例を示す図である。
【図2】図1に示したクラスタノードによるDRC退避処理手順を示すシーケンス図である。
【図3】jbd用パーティションの構成例を示す図である。
【図4】DRC再利用処理を行う理由を説明するための図である。
【図5】ext3/jbdによるDRC再利用処理を説明するための図である。
【図6】従来のNASクラスタシステムの構成例を示す図である。
【符号の説明】
【0086】
1、9 NASクラスタシステム
10 クライアント群
10a、10b、90a、90b クラスタノード
11a、11b RPC+TCP/IP
12a、12b nfsd
13a、13b VFS
14a、14b ext3/jbd
15a、15b DRC
20、91 共有ディスク
21 ext3用パーティション
22 jbd用パーティション
92 クラスタ制御部

【特許請求の範囲】
【請求項1】
ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムを制御するクラスタシステム制御プログラムであって、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成手順と、
前記要求応答情報生成手順によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避手順と
をコンピュータに実行させることを特徴とするクラスタシステム制御プログラム。
【請求項2】
前記要求応答情報生成手順は、前記クライアントから受け付けた要求が、重複して処理された場合に同一の処理結果にならない要求であり、かつ、該要求の処理結果が正常終了した場合に、前記要求応答情報を生成することを特徴とする請求項1に記載のクラスタシステム制御プログラム。
【請求項3】
前記退避手順は、前記ジャーナルファイルシステムにトランザクション単位で格納されている情報であるトランザクション情報が有するコミットブロック内に、前記要求応答情報を退避することを特徴とする請求項1または2に記載のクラスタシステム制御プログラム。
【請求項4】
前記要求応答情報生成手順は、前記要求応答情報を前記ジャーナルファイルシステムに退避する期間を示す有効期間情報を該要求応答情報に付与し、
前記退避手順は、前記要求応答情報生成手順によって生成された要求応答情報を含むトランザクション情報が破棄対象になり、かつ、該要求応答情報の有効期間が経過していない場合に、該要求応答情報を他のトランザクション情報に退避することを特徴とする請求項3に記載のクラスタシステム制御プログラム。
【請求項5】
フェールオーバが発生して、トランザクション情報を用いて復旧処理を行った後にトランザクション情報を破棄する場合に、前記要求応答情報生成手順によって付与された有効期間が経過していない要求応答情報を含むトランザクション情報以外のトランザクション情報を破棄する復旧手順をさらにコンピュータに実行させることを特徴とする請求項4に記載のクラスタシステム制御プログラム。
【請求項6】
ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムであって、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成手段と、
前記要求応答情報生成手段によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避手段と
を備えたことを特徴とするクラスタシステム。
【請求項7】
ジャーナルファイルシステムを有する共有ディスクと接続されるノードがクラスタ化されたクラスタシステムを制御するクラスタシステム制御方法であって、
前記クラスタシステムが、
クライアントから要求を受け付けた場合に、該要求を識別するための識別番号と、該要求に対して前記クライアントへ応答する応答データとを含む情報である要求応答情報を生成する要求応答情報生成工程と、
前記要求応答情報生成工程によって生成された要求応答情報を、前記ジャーナルファイルシステムに退避する退避工程と
を含んだことを特徴とするクラスタシステム制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2010−113617(P2010−113617A)
【公開日】平成22年5月20日(2010.5.20)
【国際特許分類】
【出願番号】特願2008−287083(P2008−287083)
【出願日】平成20年11月7日(2008.11.7)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】