(57)【特許請求の範囲】
【請求項１】
クラスタを構成する複数のファイルサーバの一つとしてコンピュータを機能させるためのファイルサーバプログラムにおいて、
前記ファイルサーバプログラムには、前記クラスタにおいて実行する処理のうち自身の担当する処理を判断するための判断条件として、共通の親ディレクトリの配下へディレクトリを作成するファイルサーバの処理担当順が予め定義されており、
前記ファイルサーバプログラムによって作成されたディレクトリに関するディレクトリ情報がストレージデバイス内に記憶されており、当該ディレクトリ情報には、当該ディレクトリ配下に子ディレクトリを前回作成したファイルサーバの識別情報が含まれており、
前記ファイルサーバプログラムは、前記コンピュータに、
作成すべきディレクトリの親ディレクトリを作成したファイルサーバの識別情報を含むディレクトリ作成要求を受け取ると、前記ファイルサーバプログラムが有する自ファイルサーバの識別情報と前記親ディレクトリを作成したファイルサーバの識別情報を比較し、
前記ファイルサーバプログラムが有する自ファイルサーバの識別情報と前記親ディレクトリを作成したファイルサーバの識別情報が一致しない場合、前記親ディレクトリを作成したファイルサーバに、親ディレクトリ配下に前回ディレクトリを作成したファイルサーバの識別情報の取得要求を送信し、親ディレクトリ配下に前回ディレクトリを作成したファイルサーバから前回子ディレクトリを作成したファイルサーバの識別情報を取得し、
前記ファイルサーバプログラムが有する自ファイルサーバの識別情報と前記親ディレクトリを作成したファイルサーバの識別情報が一致する場合、親ディレクトリ配下に前回ディレクトリを作成したファイルサーバの識別情報の取得要求を受け付け、前記ストレージデバイス内の親ディレクトリのディレクトリ管理情報を参照し、当該ディレクトリ配下に前回ディレクトリを作成したファイルサーバの識別情報を取得し、取得した識別情報を、当該取得要求を出力したファイルサーバに送信し、
前記ディレクトリを作成するファイルサーバの処理担当順において、前記ファイルサーバプログラムが有する自ファイルサーバの識別情報が、前回子ファイルを作成したファイルサーバの識別情報の次に該当するか否かを判断し、
前記ファイルサーバプログラムが有する自ファイルサーバの識別情報と前記親ディレクトリを作成したファイルサーバの識別情報が一致せず、かつ前記ファイルサーバプログラムが有する自ファイルサーバの識別情報が前記取得した前回子ファイルを作成したファイルサーバの識別情報の次に該当する場合、新規のディレクトリを作成し、親ディレクトリを有するファイルサーバにディレクトリ作成結果を送信し、ディレクトリを作成した旨の応答内容を作成して、前記ディレクトリ作成要求に対する応答として当該応答内容を送信し、
前記ファイルサーバプログラムが有する自ファイルサーバの識別情報と前記親ディレクトリを作成したファイルサーバの識別情報が一致し、かつ前記ファイルサーバプログラムが有する自ファイルサーバの識別情報が前記取得した前回子ファイルを作成したファイルサーバの識別情報の次に該当しない場合、ディレクトリの作成結果を受け取ると、親ディレクトリのディレクトリ管理情報を更新し、
前記ファイルサーバプログラムが有する自ファイルサーバの識別情報と前記親ディレクトリを作成したファイルサーバの識別情報が一致し、かつ前記ファイルサーバプログラムが有する自ファイルサーバの識別情報が前記取得した前回子ファイルを作成したファイルサーバの識別情報の次に該当する場合、新規のディレクトリを作成し、前記ディレクトリ作成要求に対する応答として当該応答内容を送信し、親ディレクトリのディレクトリ管理情報を更新する、
処理を実行させることを特徴とするファイルサーバプログラム。
【請求項２】
ファイル書き込み要求を受け取ったときの前記判断条件として、ファイルを分割したファイルデータのうち、書き込み処理を担当すべき処理担当データの選択規則が定義されており、
前記ファイル書き込み要求に応じた処理を実行する際には、前記処理担当データを、自己の管理するストレージデバイスに格納することを特徴とする請求項１記載のファイルサーバプログラム。
【請求項３】
ファイル読み取り要求を受け取ったときの前記判断条件として、ファイルを自己の管理するストレージデバイス内に格納している場合に処理を実行することが定義されており、
前記ファイル読み取り要求に応じた処理を実行する際には、前記ストレージデバイスから前記ファイルを読み出し、読み出した前記ファイルを、前記ファイル読み取り要求を出力した装置へ送信することを特徴とする請求項１記載のファイルサーバプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は他の装置からの要求に応じてファイル操作を行うためのファイルサーバプログラムに関し、特にクラスタの一部を構成するコンピュータで使用されるファイルサーバプログラムに関する。
【０００２】
【従来の技術】
従来、複数のコンピュータでファイルを共有するために、ファイルサーバが用いられる。ファイルサーバを利用するクライアントコンピュータ（以下、単にクライアントという）は、ネットワークを介してファイルサーバにアクセスし、必要なファイルを取得することができる。
【０００３】
ところで、大規模なネットワークでは、ファイルサーバで管理されるファイルの量が膨大になる。さらには、ファイルを利用するクライアントの数も大量となる。そのため、複数のファイルサーバによってクラスタを構成し、ファイル操作（ファイルの書き込みや読み取りなど）に関する処理を、複数のファイルサーバに分散させることが行われている。これにより、ファイルサーバ１台当たりの負荷が軽減される。
【０００４】
このように、大量のファイルの管理を複数のファイルサーバで分散して処理させた場合、各クライアントは、各ファイルがどのファイルサーバで管理されているのかを、常に把握しておく必要がある。
【０００５】
任意のファイルが管理されているファイルサーバをクライアントに認識させる方法として、たとえば、複数のファイルサーバの１つに、システム全体のファイル管理情報を持たせる方法がある。この方法によれば、各クライアントは、ファイル管理情報を有しているファイルサーバに問い合わせることで、任意のファイルが管理されているファイルサーバを認識することができる。
【０００６】
また、任意のファイルが管理されているファイルサーバをクライアントに認識させる別の方法として、ファイルを格納するディレクトリを作成するファイルサーバの決定に関して、一定のルールを定義しておく方法がある。この方法では、ディレクトリを管理しているファイルサーバにおいて、そのディレクトリ配下のファイルが管理される。このような方法の一例として、たとえば、特開平５−２３３４１７号公報に記載された発明がある。この発明では、ディレクトリの識別名を用いたルールによって、そのディレクトリを作成するファイルサーバを決定する。そして、クライアントは、そのルールに従って、そのディレクトリを作成したファイルサーバを特定する。
【０００７】
【発明が解決しようとする課題】
しかし、従来の方法では、適切に負荷を分散させるのが困難だった。
すなわち、１つのファイルサーバにシステム全体のファイル管理情報を持たせる方法では、ファイルアクセスが増えるにつれて、ファイル管理情報を有するファイルサーバへの処理負荷が増大してしまう。
【０００８】
また、ディレクトリの識別名によって管理するファイルサーバを決定する方法では、ディレクトリの識別名の偏りに伴って、ディレクトリを作成するファイルサーバにも偏りが生じてしまう。たとえば、識別名の先頭の文字に応じてファイルサーバを決定すると、使用頻度の多い文字に対応するファイルサーバの処理負荷が、他のサーバよりも高くなる。
【０００９】
このように、負荷分散が適切に行われなければ、ファイル操作処理の遅延が発生し、クラスタ全体の処理能力の低下を招く。
しかも、近年のネットワークの通信速度の高速化に伴い、ネットワーク上のデータ転送速度に、ファイルサーバでのファイル書き込みや読み出しが追いつかない事態が発生している。そのため、ファイルサーバにおけるファイル書き込み速度やファイル読み取り速度の高速化が強く望まれている。
【００１０】
本発明はこのような点に鑑みてなされたものであり、複数のファイルサーバにおいて適切な負荷分散を行うことができるファイルサーバプログラムを提供することを目的とする。
【００１１】
【課題を解決するための手段】
本発明では上記課題を解決するために、図１に示すような処理をコンピュータに実行させるファイルサーバプログラムが提供される。本発明に係るファイルサーバプログラムは、クラスタ２を構成する複数のファイルサーバ３，４，５の一つとしてコンピュータを機能させるためのプログラムである。本発明に係るファイルサーバプログラムを実行するコンピュータは、クラスタ２において実行する処理のうち自身の担当する処理を判断するための判断条件が予め定義されており、クラスタ２を構成する複数のファイルサーバ３，４，５に対して送信されたファイル操作要求１ａ，１ｂ，１ｃを受け取ると、判断条件に基づいてファイル操作要求１ａ，１ｂ，１ｃに応じた処理の実行の要否を判断する（ステップＳ１，Ｓ３，Ｓ５）。そして、ファイル操作要求１ａ，１ｂ，１ｃに応じた処理の実行が必要と判断された場合、自己の管理するストレージデバイス３ａ，４ａ，５ａに対してファイル操作要求１ａ，１ｂ，１ｃに応じた処理を行う（ステップＳ２，Ｓ４，Ｓ６）。
【００１２】
このようなファイルサーバプログラムによれば、クライアント１が全てのファイルサーバ３，４，５に対してファイル操作要求１ａ，１ｂ，１ｃを出力すると、処理の実行が必要と判断したファイルサーバにおいて、ファイル操作要求１ａ，１ｂ，１ｃに応じた処理が実行される。
【００１３】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
まず、本発明の実施の形態に適用される発明の概要について説明し、その後、本発明の実施の形態の具体的な内容を説明する。
【００１４】
図１は、本発明の実施の形態に適用される発明の概念図である。本発明に係るファイルサーバプログラムは、クラスタ２を構成する複数のファイルサーバ３，４，５の一つとしてコンピュータを機能させることができる。クラスタ２は、クライアント１からのファイル操作要求１ａ，１ｂ，１ｃに応じて、ファイル操作（ディレクトリの作成、ファイルの書き込み、ファイルの読み取りなど）を行う。
【００１５】
本発明に係るファイルサーバプログラムを実行するコンピュータ（ファイルサーバ３，４，５）には、クラスタ２において実行する処理のうち自身の担当する処理を判断するための判断条件が予め定義されている。ファイルサーバ３，４，５は、クラスタ２を構成する複数のファイルサーバ３，４，５に対して送信されたファイル操作要求１ａ，１ｂ，１ｃを受け取ると、判断条件に基づいてファイル操作要求１ａ，１ｂ，１ｃに応じた処理の実行の要否を判断する（ステップＳ１，Ｓ３，Ｓ５）。そして、ファイル操作要求１ａ，１ｂ，１ｃに応じた処理の実行が必要と判断された場合、自己の管理するストレージデバイス３ａ，４ａ，５ａに対してファイル操作要求１ａ，１ｂ，１ｃに応じた処理を行う（ステップＳ２，Ｓ４，Ｓ６）。
【００１６】
このようなファイルサーバプログラムによれば、クライアント１が全てのファイルサーバ３，４，５に対してファイル操作要求１ａ，１ｂ，１ｃを出力すると、処理の実行が必要と判断したファイルサーバにおいて、ファイル操作要求１ａ，１ｂ，１ｃに応じた処理が実行される。
【００１７】
これにより、クライアント１がクラスタ２に対してファイル操作を依頼する際には、全てのファイルサーバ３，４，５に対してファイル操作要求１ａ，１ｂ，１ｃを出力すればよくなる。すなわち、どのファイルサーバ３，４，５で処理が実行されるかを、クライアント１において認識する必要がない。その結果、ファイル操作を実行するファイルサーバをクライアント１に認識させるための処理が不要となり、処理の効率化を図ることができる。
【００１８】
しかも、本発明では、従来、ファイルサーバ間での処理の偏りの原因となっていた処理（ファイル操作処理の依頼先をクライアント１に認識させる処理）が不要となり、処理負荷の偏りの発生を抑制することができる。適切な負荷分散が行われることで、クラスタ２全体としての処理の高速化が図られる。
【００１９】
以下、本発明をファイルサーバシステムに適用した場合の例を用いて、実施の形態を詳しく説明する。
［第１の実施の形態］
図２は、第１の実施の形態のシステム構成例を示す図である。第１の実施の形態では、ネットワーク１０を介して、複数のＷｅｂクライアント２１，２２，２３、Ｗｅｂサーバ３０、アプリケーションサーバ４１，４２，４３、および複数のファイルサーバ１００，２００，３００が接続されている。
【００２０】
Ｗｅｂクライアント２１，２２，２３は、ＷＷＷ(World Wide Web)の閲覧機能（ブラウザ）を有している。Ｗｅｂクライアント２１，２２，２３は、Ｗｅｂサーバ３０にアクセスして、様々なコンテンツを閲覧することができる。
【００２１】
Ｗｅｂサーバ３０は、Ｗｅｂクライアント２１，２２，２３からの要求に応じて、コンテンツを提供する。また、Ｗｅｂサーバ３０は、Ｗｅｂクライアント２１，２２，２３から、ファイルサーバ１００，２００，３００が保持するファイルへのアクセス要求（書き込み要求や読込要求）を受けると、その処理をアプリケーションサーバ４１，４２，４３に依頼する。
【００２２】
アプリケーションサーバ４１，４２，４３は、Ｗｅｂサーバ３０において高度な処理が必要となったときに、その処理をＷｅｂサーバ３０に代わって実行する。たとえば、アプリケーションサーバ４１，４２，４３は、Ｗｅｂサーバ３０から、ファイルサーバ１００，２００，３００に対するファイル操作要求の処理を引き継ぐ。処理を引き継いだアプリケーションサーバ４１，４２，４３は、ファイルサーバ１００，２００，３００に対してファイル操作要求を出力する。そして、アプリケーションサーバ４１，４２，４３は、ファイルサーバ１００，２００，３００に対するファイル操作要求の結果を、Ｗｅｂサーバ３０に通知する。
【００２３】
なお、アプリケーションサーバ４１、４２，４３は、図１に示すクライアント１として機能する。
複数のファイルサーバ１００，２００，３００は、それぞれが大規模のストレージデバイスを有しており、ファイルサーバ１００，２００，３００全体でクラスタが構成されている。そして、クラスタを構成する各ファイルサーバ１００，２００，３００が有しているストレージデバイスの利用環境が、アプリケーションサーバ４１，４２，４３に提供される。たとえば、ファイルサーバ１００，２００，３００は、アプリケーションサーバ４１，４２，４３からのファイル操作要求に応じて、ディレクトリの作成、ファイルの書き込み、ファイルの読み取りなどの処理を行う。
【００２４】
なお、各ファイルサーバ１００，２００，３００には、それぞれを一意に識別するためのノードＩＤが割り振られている。図２の例では、ファイルサーバ１００のノードＩＤは［１］であり、ファイルサーバ２００のノードＩＤは［２］であり、ファイルサーバ３００のノードＩＤは［３］である。
【００２５】
図３は、本発明の実施の形態に用いるファイルサーバのハードウェア構成例を示す図である。ファイルサーバ１００は、ＣＰＵ(Central Processing Unit)１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ(Random Access Memory)１０２、ストレージデバイスインタフェース１０３、グラフィック処理装置１０４、入力インタフェース１０５、および通信インタフェース１０６が接続されている。
【００２６】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ストレージデバイスインタフェース１０３には、ストレージデバイス１１０が接続されている。ストレージデバイスインタフェース１０３は、ストレージデバイス１１０の動作を制御し、ＣＰＵ１０１からの要求に従って、ストレージデバイス１１０へのデータの書き込みやデータの読み出しを行う。ストレージデバイス１１０は、たとえば、ハードディスク装置（ＨＤＤ：Hard Disk Drive）である。ストレージデバイス１１０には、ＯＳやアプリケーションプログラム、各種データが格納される。格納されるデータには、分割されたファイルデータも含まれる。
【００２７】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。
【００２８】
通信インタフェース１０６は、ネットワーク１０に接続されている。通信インタフェース１０６は、ネットワーク１０を介して、他のコンピュータとの間でデータの送受信を行う。
【００２９】
以上のようなハードウェア構成によって、第１の実施の形態の処理機能を実現することができる。なお、図３には、ファイルサーバ１００の構成を示したが、他のファイルサーバ２００，３００、Ｗｅｂクライアント２１，２２，２３、Ｗｅｂサーバ３０、およびアプリケーションサーバ４１，４２，４３も同様のハードウェア構成で実現できる。
【００３０】
以下、図２，３で示した構成のシステムにおけるファイルサーバ１００、２００，３００およびアプリケーションサーバ４１，４２，４３が有する処理機能について説明する。なお、各ファイルサーバ１００，２００，３００は、それぞれ同様の処理機能を有しているため、ファイルサーバ１００の機能を代表的に説明するものとする。同様に、アプリケーションサーバ４１，４２，４３は、それぞれ同様の処理機能を有しているため、アプリケーションサーバ４１の機能を代表的に説明するものとする。
【００３１】
図４は、第１の実施の形態におけるアプリケーションサーバとファイルサーバとの機能ブロック図である。
アプリケーションサーバ４１は、ユーザバッファ４１ａとファイル操作要求部４１ｂとを有している。ユーザバッファ４１ａは、Ｗｅｂサーバ３０から依頼された処理を実行するためのプロセスが利用する記憶領域である。ファイル操作要求部４１ｂは、ファイルサーバ１００，２００，３００に対してファイル操作要求を送信する。ファイル操作要求には、ディレクトリ作成要求、ファイル書き込み要求、ファイル読み取り要求などがある。
【００３２】
ファイルサーバ１００に接続されたストレージデバイス１１０には、ディレクトリ１１１，１１１ａ，１１１ｂ，・・・、オブジェクト１１２，１１２ａ，１１２ｂ，・・・、ディレクトリ管理情報１１３、およびファイルテーブル１１４が格納されている。ディレクトリ１１１，１１１ａ，１１１ｂ，・・・は、ファイルサーバ１００によって作成されたディレクトリであり、そのディレクトリ配下のファイルに関する情報が登録されている。オブジェクト１１２，１１２ａ，１１２ｂ，・・・は、クラスタ全体で管理される各ファイルの一部である。ディレクトリ管理情報１１３は、ディレクトリ１１１，１１１ａ，１１１ｂ，・・・に関する管理情報である。
【００３３】
ファイルテーブル１１４は、一つのファイルがクラスタ全体においてどのように分散されているかを含むファイル情報のリストである。ファイル情報には、ファイルの属性（更新時間、作成者など）も含まれている。なお、１つのファイルに対するファイル情報は、クラスタを構成するファイルサーバ２００，３００のうちの一台が管理している。すなわち、ファイルサーバ１００のファイルテーブル１１４は、ファイルサーバ１００自身が作成したファイルに関するファイル情報が登録されている。同様に、各ファイルサーバ１００，２００，３００は、それぞれオリジナルのファイルテーブル（ファイルサーバのノードＩＤがファイルテーブル内のファイル情報中のファイルＩＤに含まれている）を有している。
【００３４】
ファイルサーバ１００が自身オリジナルのファイルテーブル１１４に変更を加えた場合、データ入出力部１６０が、ファイルテーブルに、内容を変更したことを示すフラグを立てる。ファイルサーバ１００が、自身がオリジナルのファイルテーブルを持たないファイルに対して処理を行う場合、そのファイルテーブルのコピーが生成される。そのとき、ファイルサーバ１００は、今回コピーしたファイルテーブルが前回から変更がない場合は、前回コピーしたファイルテーブルを使用する。
【００３５】
ファイルサーバ１００は、管理エージェント１２０、ディレクトリ作成部１３０、ＲＤＭＡ(Remote Direct Memory Access)転送部１４０、キャッシュ領域１５０、およびデータ入出力部１６０を有している。
【００３６】
管理エージェント１２０は、他のファイルサーバ２００，３００の管理エージェントと連携して、ノードリスト１２１とファイルテーブル１１４との内容の統一化や、ディレクトリ１１１の送受信などを行う。
【００３７】
たとえば、ネットワーク１０上に新たなファイルサーバが追加された場合には、追加されたファイルサーバの管理エージェントが、他のファイルサーバを検出し、接続する。追加されたファイルサーバは、接続したファイルサーバのノードＩＤをノードリストに書き込む。追加されたファイルサーバの接続相手の既存のファイルサーバは、接続要求を受けたことにより新規のファイルサーバを認識し、自身のノードリストに、追加されたファイルサーバのノードＩＤを加える。
【００３８】
また、ファイルサーバ１００において他のファイルサーバ２００，３００が有するファイルテーブルを参照する場合、管理エージェント１２０が他のファイルサーバ２００，３００で管理されているオリジナルのファイルテーブルを参照する。そして、管理エージェント１２０は、前回参照したときに作成したときから変更されていれば、参照したファイルテーブルのコピーを生成し、生成したコピーを自分自身で管理する。
【００３９】
さらに、管理エージェント１２０は、ディレクトリ作成部１３０からディレクトリ情報の取得依頼を受け取ると、その取得依頼に応じて、他のファイルサーバ２００，３００にディレクトリ情報の取得要求を送信する。そして、他のファイルサーバ２００，３００から送られたディレクトリ情報を、ディレクトリ作成部１３０に渡す。逆に、管理エージェント１２０は、他のファイルサーバ２００，３００からのディレクトリ情報の取得要求を受信すると、その取得要求で指定されたディレクトリ情報をストレージデバイス１１０内のディレクトリ１１１，１１１ａ，１１１ｂ，・・・やディレクトリ管理情報１１３から読み出す。そして、管理エージェント１２０は、ディレクトリ情報の取得要求を出力したファイルサーバに対して、ストレージデバイス１１０から読み出したディレクトリ情報を送信する。
【００４０】
なお、管理エージェント１２０が他のファイルサーバ２００，３００との間で受け渡しするディレクトリ情報には、様々な情報がある。たとえば、あるディレクトリの親ディレクトリや、その親ディレクトリ配下にディレクトリを前回作成したファイルサーバのノードＩＤである。また、ディレクトリ情報には、ディレクトリ１１１，１１１ａ，１１１ｂ，・・・のコピーも含まれる。
【００４１】
ディレクトリ作成部１３０は、アプリケーションサーバ４１〜４３からのディレクトリ作成要求に応じて、ストレージデバイス１１０にディレクトリを作成する。具体的には、ディレクトリ作成部１３０には、ファイルサーバ１００自身がディレクトリ作成処理を担当するか否かを判断するための判断条件が、予め定義されている。ディレクトリ作成部１３０は、アプリケーションサーバ４１，４２，４３からのディレクトリ作成要求を受け取ると、予め定義されている判断条件に従って、ファイルサーバ１００で管理すべきディレクトリか否かを判断する。そして、ディレクトリ作成部１３０は、ディレクトリを作成すべきであると判断された場合のみ、ファイルサーバ１００で管理すべきディレクトリ１１１のみを、ストレージデバイス１１０に作成する。
【００４２】
第１の実施の形態では、ディレクトリ作成の判断条件として、共通の親ディレクトリの配下へディレクトリを作成するファイルサーバの処理担当順が、ファイルサーバ１００自身の順番であることという条件が定義されている。ディレクトリ作成処理担当順は、ノードリスト１２１の登録順に従う。
【００４３】
すなわち、ディレクトリ作成部１３０は、アプリケーションサーバ４１，４２，４３からディレクトリ作成要求を受け取ると、まず、作成すべきディレクトリの親ディレクトリ配下に、前回ディレクトリを作成したファイルサーバを調べる。そのために、ディレクトリ作成部１３０は、該当するファイルサーバのノードＩＤの取得依頼を、管理エージェント１２０に通知する。すると、管理エージェント１２０で該当するファイルサーバのノードＩＤの取得処理が行われ、取得したノードＩＤがディレクトリ作成部１３０に渡される。
【００４４】
ディレクトリ作成部１３０は、管理エージェント１２０から渡されたノードＩＤが、ノードリスト１２１の順番において、ファイルサーバ１００自身の直前であるかどうかを判断する。管理エージェント１２０から渡されたノードＩＤの次の順番がファイルサーバ１００自身であれば、ディレクトリ作成部１３０は、ディレクトリ作成要求に応じてディレクトリを作成する。
【００４５】
ディレクトリ作成部１３０は、ディレクトリを作成した際には、作成したディレクトリに対応する情報を、ディレクトリ管理情報１１３に登録する。
ＲＤＭＡ転送部１４０は、ＲＤＭＡと呼ばれるデータ転送方式により、アプリケーションサーバ４１，４２，４３との間でファイルデータの送受信を行う。ＲＤＭＡ転送は、転送元と転送先とのアドレスを指定したデータ転送である。ＲＤＭＡ転送を行うことで、たとえば、アプリケーションサーバ４１のユーザバッファ４１ａ内のアドレスを指定して、そのアドレス内のデータをキャッシュ領域１５０に転送することができる。また、ＲＤＭＡ転送によれば、アプリケーションサーバ４１のユーザバッファ４１ａ内のアドレスを指定して、そのアドレス内へキャッシュ領域１５０のデータを転送することができる。
【００４６】
キャッシュ領域１５０は、アプリケーションサーバ４１，４２，４３との間で送受信するデータを一時的に格納する記憶領域である。キャッシュ領域１５０は、図３に示すＲＡＭ１０２の記憶領域の一部である。
【００４７】
データ入出力部１６０は、アプリケーションサーバ４１，４２，４３からの要求に応じて、ストレージデバイス１１０に対するデータの入出力を行う。具体的には、データ入出力部１６０には、予めファイル書き込み要求を実行する際の判断条件として、ファイルの分割規則と、分割により生成されたファイルデータのうち、ファイルサーバ１００自身が管理すべきファイルデータの選択規則が定義されている。
【００４８】
データ入出力部１６０は、ファイル書き込み要求を受け取ると、ファイルサーバ１００自身が管理すべきファイルデータの有無を判断する。管理すべきファイルデータがあれば、該当するファイルデータのデータ転送をＲＤＭＡ転送部１４０に依頼する。次に、データ入出力部１６０は、転送されたファイルデータをキャッシュ領域１５０から読み出し、１つのオブジェクトとしてストレージデバイス１１０に書き込む。このとき、データ入出力部１６０は、格納したオブジェクト１１２の元となったファイルの情報をファイルテーブル１１４に登録する。
【００４９】
また、データ入出力部１６０は、ファイル読み取り要求を実行するための判断条件として、ファイル読み取り要求で示されるファイル、またのそのファイルの一部（ファイルデータ）を自己の管理するストレージデバイス１１０内に格納していることという条件が定義されている。データ入出力部１６０は、ファイル読み取り要求を受け取ると、読み取り対象のファイルの少なくとも一部がストレージデバイス１１０に格納されているか否かを判断する。
【００５０】
たとえば、読み取り対象のファイルを構成するオブジェクト１１２がストレージデバイス１１０に格納されていれば、データ入出力部１６０は、そのオブジェクト１１２をストレージデバイス１１０から読み出し、キャッシュ領域１５０に格納する。キャッシュ領域１５０に格納されたオブジェクト１１２は、ＲＤＭＡ転送部１４０によって、ファイル読み取り要求を出力したアプリケーションサーバに転送される。
【００５１】
次に、ファイルサーバ１００が管理するデータの構造について説明する。
図５は、ノードリストのデータ構造例を示す図である。ノードリスト１２１には、ディレクトリ作成処理を行うファイルサーバ１００，２００，３００の処理担当順が定義されている。図５の例では、ノードＩＤが上位に記載されている程、対応するファイルサーバの順番が先となる。ノードリスト１２１に登録されているノードＩＤの順番に基づいて、ディレクトリの作成順が決定される。なお、ノードリスト１２１の最後尾のノードＩＤの次の順番は、先頭のノードＩＤとなる。
【００５２】
図６は、ディレクトリのデータ構造例を示す図である。ディレクトリ１１１には、配下のディレクトリのディレクトリ名とファイルＩＤ（識別情報として、ディレクトリとファイルとは区別されない）との組、および配下のファイルのファイル名とファイルＩＤとの組が格納されている。いずれかのファイルサーバ１００，２００，３００でディレクトリやファイルが作成または削除されると、各ファイルサーバ１００，２００，３００の管理エージェントの働きにより、操作対象のディレクトリまたはファイルの親ディレクトリを有しているファイルサーバに対し、処理の内容が通知される。これにより、ディレクトリ１１１の内容が最新の状態に保たれる。
【００５３】
次に、オブジェクト１１２，１１２ａ，１１２ｂについて説明する。オブジェクト１１２，１１２ａ，１１２ｂは、ファイルを分散格納させることで生成されている。
【００５４】
図７は、ファイルの分散格納状況を示す図である。アプリケーションサーバ４１に格納されているファイル５０をファイルサーバ１００，２００，３００に分散格納する場合、ファイル５０が、所定長の複数のファイルデータ５１〜５９，・・・に分割される。分割されたファイルデータ５１〜５９，・・・は、各ファイルサーバ１００，２００，３００に分散して送信される。なお、ファイル５０を分割した際の各ファイルデータ５１〜５９，・・・に対し、先頭から順番に０から始まる識別番号を付与するものとする。
【００５５】
ファイルサーバ１００では、アプリケーションサーバ４１から送られた識別番号「０」，「３」，「６」，・・・のファイルデータ５１，５４，５７，・・・によってオブジェクト１１２を構成し、ストレージデバイス１１０に格納する。オブジェクト１１２には、オブジェクトＩＤ［Ｘ］が付与されている。
【００５６】
ファイルサーバ２００では、アプリケーションサーバ４１から送られた識別番号「１」，「４」，「７」，・・・のファイルデータ５２，５５，５８，・・・によってオブジェクト２１２を構成し、ストレージデバイス２１０に格納する。オブジェクト２１２には、オブジェクトＩＤ［Ｙ］が付与されている。
【００５７】
ファイルサーバ３００では、アプリケーションサーバ４１から送られた識別番号「２」，「５」，「８」，・・・のファイルデータ５３，５６，５９，・・・によってオブジェクト３１２を構成し、ストレージデバイス３１０に格納する。オブジェクト３１２には、オブジェクトＩＤ［Ｚ］が付与されている。
【００５８】
このように、各ファイルデータ５１〜５９，・・・は、先頭から順番に、１つずつ各ファイルサーバ１００，２００，３００に割り振られている。そして、ファイルデータ５１〜５９，・・・は、割り振られたファイルサーバ１００，２００，３００で管理される。
【００５９】
図８は、ファイルテーブルのデータ構造例を示す図である。ファイルテーブル１１４には、クラスタで管理されている各ファイルに関するファイル情報１１４ａが格納されている。ファイル情報１１４ａは、ファイルＩＤ６１と、マップ情報（ｍａｐ［１］，ｍａｐ［２］，ｍａｐ［３］）６２〜６４とで構成されている。
【００６０】
ファイルＩＤ６１は、分散格納されたファイルの識別情報である。
各マップ情報６２〜６４は、それぞれファイルサーバ１００，２００，３００に対応している。図８において、マップ情報６２〜６４を表している文字（ｍａｐ［１］，ｍａｐ［２］，ｍａｐ［３］）の括弧内の数字は、対応するファイルサーバのノードＩＤを示している。各マップ情報６２〜６４は、対応するファイルサーバ１００，２００，３００で管理されているオブジェクトに関する情報である。
【００６１】
マップ情報６２には、ファイルサーバ１００で管理されているオブジェクト１１２に関する情報が登録されている。オフセット６２ａ、データ長６２ｂ、及びオブジェクトＩＤ６２ｃで構成されている。オフセット６２ａは、ファイル５０を構成する各オブジェクト１１２，２１２，３１２を結合した場合における、マップ情報６２に対応するオブジェクト１１２の先頭までのオフセットアドレスである。データ長６２ｂは、マップ情報６２に対応するオブジェクト１１２のデータ長（データ容量）である。オブジェクトＩＤ６２ｃは、マップ情報６２に対応するオブジェクト１１２のオブジェクトＩＤ［Ｘ］である。
【００６２】
マップ情報６３は、マップ情報６２と同様のデータ構造により、オブジェクト２１２に関する情報が登録されている。したがって、マップ情報６３のファイルＩＤの欄には、オブジェクト２１２のオブジェクトＩＤ［Ｙ］が登録される。
【００６３】
マップ情報６４は、マップ情報６２と同様のデータ構造により、オブジェクト３１２に関する情報が登録されている。したがって、マップ情報６４のファイルＩＤの欄には、オブジェクト３１２のオブジェクトＩＤ［Ｚ］が登録される。
【００６４】
ここで、マップ情報６２〜６４に登録されるオフセット値について詳しく説明する。
図９は、マップ情報に登録されるオフセットを説明する図である。各オブジェクト１１２，２１２，３１２に対応するマップ情報６２〜６４に設定されるオフセットは、オブジェクト１１２、オブジェクト２１２、オブジェクト３１２の順で結合したときの先頭からのオフセットである。従って、オブジェクト１１２に対応するマップ情報６２に登録されるオフセットは、０である。オブジェクト２１２に対応するマップ情報６３に登録されるオフセットは、オブジェクト１１２のデータ長に相当する値である。オブジェクト３１２に対応するマップ情報６４に登録されるオフセットは、オブジェクト１１２とオブジェクト２１２とを合わせたデータ長に相当する値である。
【００６５】
図１０は、ディレクトリ管理情報のデータ構造例を示す図である。ディレクトリ管理情報１１３には、ファイルサーバ１００で管理している各ディレクトリの管理情報１１３ａが登録されている。管理情報の１つとして、前回ディレクトリ作成ノードＩＤが登録されている。前回ディレクトリ作成ノードＩＤは、管理情報１１３ａに対応するディレクトリ配下に、ディレクトリ（子ディレクトリ）を前回作成したファイルサーバのノードＩＤである。図１０の例では、ノードＩＤ「２」が登録されている。
【００６６】
次に、以上のような構成のシステムにおいて実行される処理を以下に説明する。
まず、ノードリスト１２１の同一性確保処理について説明する。
【００６７】
図１１は、ノードリストの同一性確保処理の概念図である。各ファイルサーバ１００，２００，３００の管理エージェント１２０，２２０，３２０は、互いにノードリスト１２１の内容を通知し合っている。そして、１つのファイルサーバでノードリスト１２１の内容が更新された場合、更新後のノードリスト１２１が他のファイルサーバに通知される。更新後のノードリスト１２１を受け取ったファイルサーバは、受け取ったノードリスト１２１の内容に従って、自己の管理するノードリストの内容を更新する。これにより、複数のファイルサーバ１００，２００，３００において、ノードリスト１２１の内容の同一性が保たれる。
【００６８】
次に、ディレクトリ作成処理について説明する。
図１２は、ディレクトリ作成処理の手順を示すフローチャートである。図１２では、アプリケーションサーバ４１とファイルサーバ１００との処理手順が示されている。アプリケーションサーバ４１の処理は図中左側に示されており、ファイルサーバ１００の処理は図中右側に示されている。以下、図１２に示す処理をステップ番号に沿って説明する。
【００６９】
［ステップＳ１１］アプリケーションサーバ４１のファイル操作要求部４１ｂは、ディレクトリ作成要求を生成する。作成されたディレクトリ作成要求には、作成するディレクトリの親ディレクトリに関する情報（親ディレクトリを生成したファイルサーバのノードＩＤを含む）が含まれている。
【００７０】
［ステップＳ１２］ファイル操作要求部４１ｂは、全てのファイルサーバ１００，２００，３００に対して、ディレクトリ作成要求を送信する。その後、アプリケーションサーバ４１の処理はステップＳ１３に進むと共に、ファイルサーバ１００において、ステップＳ１４の処理が開始される。
【００７１】
［ステップＳ１３］ファイル操作要求部４１ｂは、ファイルサーバ１００，２００，３００からの返信を待つ。
［ステップＳ１４］ファイルサーバ１００のディレクトリ作成部１３０は、アプリケーションサーバ４１からのディレクトリ作成要求を受信する。
【００７２】
［ステップＳ１５］ディレクトリ作成部１３０は、親ディレクトリを持つファイルサーバから、親ディレクトリ配下に前回ディレクトリを作成したファイルサーバのノードＩＤを取得する。
【００７３】
具体的には、ディレクトリ作成部１３０は、ディレクトリ作成要求に含まれる親ディレクトリに関する情報を抽出する。そして、抽出した情報を管理エージェント１２０に渡すと共に、管理エージェント１２０に対して、親ディレクトリ配下に前回ディレクトリを作成したノードのノードＩＤの取得を依頼する。
【００７４】
すると、管理エージェント１２０は、親ディレクトリに関する情報から、親ディレクトリを作成したファイルサーバのノードＩＤを認識する。そして、管理エージェント１２０は、親ディレクトリを作成したファイルサーバに対して、親ディレクトリ配下に前回ディレクトリを作成したファイルサーバのノードＩＤの取得要求を出力する。この取得要求を受け取ったファイルサーバの管理エージェントは、親ディレクトリのディレクトリ管理情報を参照し、そのディレクトリ配下に前回ディレクトリを作成したファイルサーバのノードＩＤを取得する。そして、親ディレクトリを作成したファイルサーバの管理エージェントは、取得したノードＩＤを、取得要求を出力したファイルサーバ１００に対して送信する。送信されたノードＩＤは、ファイルサーバ１００の管理エージェント１２０で受け取られ、ディレクトリ作成部１３０に渡される。
【００７５】
［ステップＳ１６］ディレクトリ作成部１３０は、管理エージェント１２０が保持しているノードリスト１２１と、取得したノードＩＤとを比較する。
［ステップＳ１７］ディレクトリ作成部１３０は、ノードリスト１２１の配列において、取得したノードＩＤのファイルサーバの次に、自己（ファイルサーバ１００）のノードＩＤがあるか否かを判断する。次に自己のノードＩＤが設定されている場合には、処理がステップＳ１８に進められる。次に自己のノードＩＤが設定されていない場合には、処理がステップＳ２２に進められる。
【００７６】
［ステップＳ１８］ディレクトリ作成部１３０は、ディレクトリ作成要求に従って、新規のディレクトリを作成する。
［ステップＳ１９］ディレクトリ作成部１３０は、親ディレクトリを有するファイルサーバからディレクトリの内容を取得する。
【００７７】
具体的には、ディレクトリ作成部１３０は、管理エージェント１２０に対して、親ディレクトリを指定したディレクトリの取得を依頼する。管理エージェント１２０は、依頼に応じて、親ディレクトリを有するファイルサーバに対して、ディレクトリ取得要求を出力する。すると、親ディレクトリを有するファイルサーバの管理エージェントが、親ディレクトリの内容をコピーし、ファイルサーバ１００に送信する。送信された親ディレクトリのコピーは、管理エージェント１２０からディレクトリ作成部１３０に渡される。
【００７８】
［ステップＳ２０］ディレクトリ作成部１３０は、親ディレクトリのコピーに、作成したディレクトリの情報を追加する。そして、ディレクトリ作成部１３０は、更新後の親ディレクトリのコピーを、元のファイルサーバに送信する。なお、親ディレクトリのコピーを送信する場合、実際には、まず、親ディレクトリのコピーが管理エージェント１２０に渡される。そして、管理エージェント１２０が、親ディレクトリを有するファイルサーバに対して、ディレクトリ作成部１３０によって更新された親ディレクトリのコピーを送信する。更新後の親ディレクトリのコピーを受信したファイルサーバでは、管理エージェントが、受信した内容に従って、親ディレクトリのディレクトリ管理情報を更新する。
【００７９】
［ステップＳ２１］ディレクトリ作成部１３０は、ディレクトリを作成した旨の応答内容を作成する。その後、処理がステップＳ２３に進められる。
［ステップＳ２２］ディレクトリ作成部１３０は、ディレクトリを作成しない旨の応答内容を作成する。
【００８０】
［ステップＳ２３］ディレクトリ作成部１３０は、ディレクトリ作成要求に対する応答として、ディレクトリ作成結果を送信する。その後、ファイルサーバ１００の処理は終了すると共に、アプリケーションサーバ４１においてステップＳ２４の処理が開始される。
【００８１】
［ステップＳ２４］アプリケーションサーバ４１のファイル操作要求部４１ｂは、全てのファイルサーバ１００，２００，３００からディレクトリ作成結果を受信し、処理を終了する。
【００８２】
図１３は、ディレクトリ作成処理の概念図の前半である。図１３の例は、アプリケーションサーバ４１からの要求によって、ファイルサーバ１００が有するディレクトリの配下に新規のディレクトリを作成する場合の例である。なお、ファイルサーバ１００が有するディレクトリ配下に前回ディレクトリを作成したファイルサーバは、ノードＩＤ「２」のファイルサーバ２００であるものとする。
【００８３】
［ステップＳ１０１］アプリケーションサーバ４１からファイルサーバ１００に対して、ディレクトリ作成要求７１が送信される。同様に、アプリケーションサーバ４１から、ファイルサーバ２００に対してディレクトリ作成要求７２が送信され、ファイルサーバ３００に対してディレクトリ作成要求７３が送信される。各ディレクトリ作成要求７１〜７３は、宛先が異なる以外は、同じ内容である。
【００８４】
［ステップＳ１０２］新規に作成するディレクトリの親ディレクトリを有しているファイルサーバ１００から他のファイルサーバ２００，３００に対して、親ディレクトリ配下に前回ディレクトリを作成したファイルサーバ２００のノードＩＤ７４（図１３の例では、ノードＩＤ＝２）が通知される。
【００８５】
［ステップＳ１０３］ノードリスト１２１の配列においてノードＩＤ「２」の次のノードＩＤ「３」に対応するファイルサーバ３００では、ディレクトリ作成部３３０が、ストレージデバイス３１０に新規ディレクトリ３１１を作成する。
【００８６】
図１４は、ディレクトリ作成処理の概念図の後半である。
［ステップＳ１０４］新規ディレクトリ３１１を作成したファイルサーバ３００の管理エージェント３２０は、ファイルサーバ１００から親ディレクトリ情報（親ディレクトリの内容をコピーしたもの）８１を受け取る。
【００８７】
［ステップＳ１０５］ファイルサーバ３００の管理エージェント３２０は、親ディレクトリのコピーを更新し、更新後の親ディレクトリ情報８２をファイルサーバ１００に送信する。
【００８８】
［ステップＳ１０６］各ファイルサーバ１００、２００，３００は、アプリケーションサーバ４１に対して、ディレクトリ作成要求７１〜７３に対する応答９１〜９３を返す。ファイルサーバ１００からアプリケーションサーバ４１へは、ディレクトリを作成しない旨（非作成）の応答９１が返される。ファイルサーバ２００からアプリケーションサーバ４１へは、ディレクトリを作成しない旨（非作成）の応答９２が返される。ファイルサーバ３００からアプリケーションサーバ４１へは、ディレクトリの作成が完了した旨（作成完了）の応答９３が返される。
【００８９】
以上のような処理により、クラスタを構成するファイルサーバ１００，２００，３００のいずれか１つにおいて、新規のディレクトリが作成される。
次に、ファイルの書き込み処理について説明する。
【００９０】
図１５は、ファイル書き込み処理の手順を示すフローチャートの前半である。図１５には、アプリケーションサーバ４１がファイルの書き込み要求を出力した場合の処理の例を示している。図１５では、アプリケーションサーバ４１とファイルサーバ１００との処理手順が示されている。アプリケーションサーバ４１の処理は図中左側に示されており、ファイルサーバ１００の処理は図中右側に示されている。以下、図１５に示す処理をステップ番号に沿って説明する。
【００９１】
［ステップＳ３１］アプリケーションサーバ４１のファイル操作要求部４１ｂは、ファイルサーバ１００，２００，３００へ転送する書き込み要求を作成する。
【００９２】
［ステップＳ３２］ファイル操作要求部４１ｂは、全てのファイルサーバ１００，２００，３００に書き込み要求を送信する。その後、アプリケーションサーバ４１の処理がステップＳ３３に進められると共に、ファイルサーバ１００においてステップＳ３４の処理が開始される。
【００９３】
［ステップＳ３３］ファイル操作要求部４１ｂは、全てのファイルサーバ１００，２００，３００からの返信を待つ。その後、アプリケーションサーバ４１の処理は、図１６に示すステップＳ４８に進められる。
【００９４】
［ステップＳ３４］ファイルサーバ１００のデータ入出力部１６０は、アプリケーションサーバ４１からの書き込み要求を取得する。
［ステップＳ３５］データ入出力部１６０は、書き込み要求で指定されたファイルのデータを書き込むべきか否かを判断する。たとえば、ファイルを複数のファイルデータに分割した際に、ファイルサーバ１００自身に割り当てられたデータが存在する場合には、ファイルのデータを書き込むべきであると判断する。ファイルサーバ１００自身に割り当てられたデータが存在しない場合には、ファイルのデータを書き込む必要なないと判断する。データを書き込むべきであれば、処理がステップＳ３６に進められる。データを書き込むべきでなければ、処理が図１６に示すステップＳ４１に進められる。
【００９５】
［ステップＳ３６］データ入出力部１６０は、管理エージェント１２０へ書き込みを行うストレージデバイス１１０内のブロックの情報を通知する。
［ステップＳ３７］ＲＤＭＡ転送部１４０は、アプリケーションサーバ４１内のユーザバッファ４１ａから、ファイルサーバ１００自身に割り当てられたファイルデータをＲＤＭＡ転送で、メモリのキャッシュ領域１５０に転送する。
【００９６】
［ステップＳ３８］データ入出力部１６０は、キャッシュ領域１５０に格納された複数のファイルデータを１つのオブジェクトとして、ストレージデバイス１１０に書き込む。
【００９７】
［ステップＳ３９］データ入出力部１６０は、管理エージェント１２０へ書き込み完了を通知する。その後、処理が図１６のステップＳ４３に進められる。
図１６は、ファイル書き込み処理の手順を示すフローチャートの後半である。以下、図１６に示す処理をステップ番号に沿って説明する。
【００９８】
［ステップＳ４１］データ入出力部１６０は、処理対象のファイルがファイルサーバ１００自身の管理するファイルか否かを判断する。具体的には、処理対象のファイルのファイルＩＤには、そのファイルのファイル情報を管理しているファイルサーバのノードＩＤが含まれている。
【００９９】
従って、データ入出力部１６０は、ファイルＩＤに含まれるノードＩＤと、ファイルサーバ１００自身のノードＩＤとを比較する。データ入出力部１６０は、比較の結果、ノードＩＤが一致すれば、自己の管理するファイルであると判断し、ノードＩＤが一致しなければ、自己の管理するファイルではないと判断する。処理対象のファイルがファイルサーバ１００自身の管理するファイルであれば、処理がステップＳ４２に進められる。処理対象のファイルがファイルサーバ１００自身の管理するファイルでなければ、処理がステップＳ４６に進められる。
【０１００】
［ステップＳ４２］データ入出力部１６０は、管理エージェント１２０に対して、データの書き込みを行わないことを通知する。
［ステップＳ４３］管理エージェント１２０は、他のファイルサーバ２００，３００の管理エージェント２２０，３２０と連携して、書き込みデータの総量を計算する。計算結果は、データ入出力部１６０に通知される。
【０１０１】
［ステップＳ４４］処理対象のファイルがファイルサーバ１００自身の管理するファイルか否かを判断する。処理対象のファイルがファイルサーバ１００自身の管理するファイルであれば、処理がステップＳ４５に進められる。処理対象のファイルがファイルサーバ１００自身の管理するファイルでなければ、処理がステップＳ４６に進められる。
【０１０２】
［ステップＳ４５］データ入出力部１６０は、書き込み結果を作成する。書き込み結果には、書き込んだオブジェクトのデータ量を示す情報が含まれる。その後、処理がステップＳ４７に進められる。
【０１０３】
［ステップＳ４６］データ入出力部１６０は、処理をしないことを示す書き込み結果を作成する。
［ステップＳ４７］データ入出力部１６０は、作成した書き込み結果を、アプリケーションサーバ４１に送信する。その後、ファイルサーバ１００における処理が終了し、アプリケーションサーバ４１においてステップＳ４８の処理が実行される。
【０１０４】
［ステップＳ４８］アプリケーションサーバ４１のファイル操作要求部４１ｂでは、全てのファイルサーバ１００，２００，３００からの書き込み結果を受信し、処理を終了する。
【０１０５】
このように、ファイルサーバ１００において、書き込み処理が行われる。なお、データ量を含む書き込み結果（正常に書き込みを完了したことを示す情報）は、処理対象のファイルのファイル情報を管理するファイルサーバが、アプリケーションサーバに対して通知する。他のファイルサーバは、データの書き込みを行った場合でも、アプリケーションサーバに対して、処理を行わないことを示す処理結果を通知する。これにより、アプリケーションサーバにおいて、１台のファイルサーバが書き込み処理を実行したものと認識させることができる。その結果、ファイルサーバにおいて、ファイルが分散格納されたことによる特別な処理が不要となる。このことは、後述するファイルの読み取り処理においても同様である。
【０１０６】
図１７は、書き込み処理の概念図である。
［ステップＳ１１１］アプリケーションサーバ４１から全てのファイルサーバ１００，２００，３００に対して、書き込み要求４１１〜４１３が送信される。書き込み要求４１１〜４１３は、宛先が異なるのみで、それ以外は同じ内容である。
【０１０７】
［ステップＳ１１２］アプリケーションサーバ４１のユーザバッファ４１ａに格納されているファイル５０がファイルデータ単位に分割され、複数のファイルサーバ１００，２００，３００に分散して転送される。各ファイルサーバ１００，２００，３００では、転送されファイルデータがキャッシュ領域１５０，２５０，３５０に格納される。
【０１０８】
［ステップＳ１１３］各ファイルサーバ１００，２００，３００のキャッシュ領域１５０，２５０，３５０に格納されたファイルデータは、オブジェクト１１２，２１２，３１２としてストレージデバイス１１０，２１０，３１０に格納される。
【０１０９】
このようにして、ファイルを分散格納することができる。
次に、ファイルの読み取り処理について説明する。
図１８は、ファイルの読み取り処理の手順を示すフローチャートの前半である。図１８では、アプリケーションサーバ４１とファイルサーバ１００との処理手順が示されている。アプリケーションサーバ４１の処理は図中左側に示されており、ファイルサーバ１００の処理は図中右側に示されている。以下、図１８に示す処理をステップ番号に沿って説明する。
【０１１０】
［ステップＳ５１］アプリケーションサーバ４１のファイル操作要求部４１ｂは、ファイルサーバ１００，２００，３００に転送する読み取り要求を作成する。読み取り要求では、ファイルの一部のデータに対する読み取り要求を出すことができる。その場合、データ開始位置のオフセット（ファイルの先頭からの差分）や、データ長により、読み取り対象のデータが特定される。
【０１１１】
［ステップＳ５２］ファイル操作要求部４１ｂは、全てのファイルサーバ１００，２００，３００に対して、読み取り要求を送信する。その後、アプリケーションサーバ４１の処理がステップＳ５３に進むと共に、ファイルサーバ１００においてステップＳ５４の処理が実行される。
【０１１２】
［ステップＳ５３］ファイル操作要求部４１ｂは、全てのファイルサーバからの返信を待つ。その後、アプリケーションサーバ４１の処理は、図１９に示すステップＳ６８に進められる。
【０１１３】
［ステップＳ５４］ファイルサーバ１００のデータ入出力部１６０は、アプリケーションサーバ４１からの読み取り要求を取得する。
［ステップＳ５５］データ入出力部１６０は、読み取り対象として要求されているデータを有しているか否かを判断する。読み取り対象のデータを有していれば、処理がステップＳ５６に進められる。読み取り対象のデータを有していなければ、処理が図１９に示すステップＳ６１に進められる。
【０１１４】
［ステップＳ５６］データ入出力部１６０は、管理エージェント１２０へ、読み取りを行うストレージデバイス１１０内のブロックを通知する。
［ステップＳ５７］データ入出力部１６０は、ストレージデバイス１１０に格納されているオブジェクトから、要求されているファイルデータを読み取り、キャッシュ領域１５０に書き込む。
【０１１５】
［ステップＳ５８］ＲＤＭＡ転送部１４０は、キャッシュ領域１５０に書き込まれたデータを、アプリケーションサーバ４１のユーザバッファ４１ａにＲＤＭＡ転送する。転送先のアドレスは、読み取り要求で指定されている。
【０１１６】
［ステップＳ５９］データ入出力部１６０は、管理エージェント１２０へ、読み取り完了を通知する。その後、処理が図１９に示すステップＳ６３に進められる。
【０１１７】
図１９は、ファイルの読み取り処理の手順を示すフローチャートの後半である。以下、図１９に示す処理をステップ番号に沿って説明する。
［ステップＳ６１］データ入出力部１６０は、処理対象のファイルがファイルサーバ１００自身の管理するファイルか否かを判断する。ファイルサーバ１００自身の管理するファイルか否かは、処理対象のファイルのファイルＩＤに含まれるノードＩＤが、ファイルサーバ１００自身のノードＩＤと一致するか否かによって判断できる。処理対象のファイルがファイルサーバ１００自身の管理するファイルであれば、処理がステップＳ６２に進められる。処理対象のファイルがファイルサーバ１００自身の管理するファイルでなければ、処理がステップＳ６６に進められる。
【０１１８】
［ステップＳ６２］データ入出力部１６０は、管理エージェント１２０に対して、データの読み取りを行わないことを通知する。
［ステップＳ６３］管理エージェント１２０は、他のファイルサーバ２００，３００の管理エージェント２２０，３２０と連携して、読み取りデータの総量を計算する。計算結果は、データ入出力部１６０に通知される。
【０１１９】
［ステップＳ６４］処理対象のファイルがファイルサーバ１００自身の管理するファイルか否かを判断する。処理対象のファイルがファイルサーバ１００自身の管理するファイルであれば、処理がステップＳ６５に進められる。処理対象のファイルがファイルサーバ１００自身の管理するファイルでなければ、処理がステップＳ６６に進められる。
【０１２０】
［ステップＳ６５］データ入出力部１６０は、読み取り結果を作成する。この読み取り結果には、転送したデータのデータ量が示されている。その後、処理がステップＳ６７に進められる。
【０１２１】
［ステップＳ６６］データ入出力部１６０は、処理を行わないことを示す読み取り結果を作成する。
［ステップＳ６７］データ入出力部１６０は、読み取り結果をアプリケーションサーバ４１に送信する。その後、ファイルサーバ１００における処理が終了すると共に、アプリケーションサーバ４１においてステップＳ６８の処理が実行される。
【０１２２】
［ステップＳ６８］アプリケーションサーバ４１のファイル操作要求部４１ｂは、全てのファイルサーバ１００，２００，３００から読み取り結果を受信し、処理を終了する。
【０１２３】
図２０は、読み取り処理の概念図である。
［ステップＳ１２１］アプリケーションサーバ４１から各ファイルサーバ１００，２００，３００へ、読み取り要求４２１〜４２３が送信される。読み取り要求４２１〜４２３は、宛先が異なるのみで、それ以外は同じ内容である。
【０１２４】
［ステップＳ１２２］各ファイルサーバ１００，２００，３００は、読み取り要求で指定されたファイルデータのうち、自身が所有しているファイルデータをストレージデバイス１１０，２１０，３１０から読み出し、キャッシュ領域１５０，２５０，３５０に格納する。
【０１２５】
［ステップＳ１２３］各ファイルサーバ１００，２００，３００は、キャッシュ領域１５０，２５０，３５０に格納したファイルデータを含む読み取り結果４３１〜４３３を、アプリケーションサーバ４１のユーザバッファ４１ａにＲＤＭＡにより転送する。なお、ＲＤＭＡ転送の際に、各ファイルデータの格納領域が指定されることで、ユーザバッファ４１ａに格納された時点で、複数のファイルデータが連結され、元のファイル５０が生成される。
【０１２６】
このようにして、分散格納されているファイルを読み取ることができる。
以上説明したように、本発明の実施の形態によれば、アプリケーションサーバ４１〜４３がファイルサーバ１００，２００，３００に対してファイル操作（ディレクトリ作成、データ書き込み、データ読み取りなど）を要求する場合、全てのファイルサーバ１００，２００，３００に同じ内容の要求を送信することで、ファイルサーバ１００，２００，３００にファイル操作を実行させることができる。これにより、アプリケーションサーバ４１〜４３において、ファイル操作要求を送信すべきファイルサーバを認識する必要が無くなる。すなわち、ファイルサーバ１００，２００，３００のクライアントとして動作するコンピュータ（たとえばアプリケーションサーバ４１〜４３）に、ファイルサーバ１００，２００，３００の負荷分散のための処理機能を実装せずにすむ。その結果、ファイルサーバ１００，２００，３００のクライアントとして動作するコンピュータの処理負荷が軽減される。
【０１２７】
また、１つのファイルを分散格納するようにしたため、大容量のファイルの入出力が発生しても、１つのファイルサーバへの負荷の集中が無くなる。しかも、ファイルを分散格納したことで、１つのファイルの書き込みや読み取りの処理が、高速化される。その結果、ネットワークの通信速度の高速化によるメリットを、十分に生かすことができる。
【０１２８】
［第２の実施の形態］
第１の実施の形態では、ＲＤＭＡ転送を行うことができるシステムについて説明したが、ＲＤＭＡ転送ができない場合であっても、同様のファイルの分散格納を行うことできる。そこで、ＲＤＭＡ転送を用いない場合の例を、第２の実施の形態として説明する。
【０１２９】
なお、第２の実施の形態におけるシステム構成は、図２に示した第１の実施の形態の構成と同様である。ただし、アプリケーションサーバとファイルサーバとの機能の一部が、第１の実施の形態と異なる。また、第２の実施の形態におけるアプリケーションサーバとファイルサーバとは、図３と同様のハードウェア構成で実現することができる。
【０１３０】
図２１は、第２の実施の形態における機能ブロック図である。第２の実施の形態は、複数のアプリケーションサーバ４５〜４７と、複数のファイルサーバ１００ａ，２００ａ，３００ａとで構成される。ファイルサーバ１００ａ，２００ａ，３００ａによって、クラスタが構成されている。ここで、アプリケーションサーバ４５とファイルサーバ１００ａとの機能を、代表的に説明する。なお、ストレージデバイス１１０の内容は第１の実施の形態と同じであるため、図４と同一の符号を付して説明を省略する。
【０１３１】
アプリケーションサーバ４５は、ユーザバッファ４５ａ、ファイル操作要求部４５ｂ、および通信バッファ４５ｃを有している。
ユーザバッファ４５ａは、Ｗｅｂサーバ３０からの要求に応じた処理を実行するためのプロセスが利用する記憶領域である。
【０１３２】
ファイル操作要求部４５ｂは、ファイルサーバ１００ａ，２００ａ，３００ａに対してファイル操作要求を送信する。ファイル操作要求には、ディレクトリ作成要求、ファイル書き込み要求、ファイル読み取り要求などがある。ファイル操作要求部４５ｂは、ファイルの読み取り要求を各ファイルサーバ１００ａ，２００ａ，３００ａに送信した際には、その応答として、各ファイルサーバ１００ａ，２００ａ，３００ａからオブジェクトを受け取る。すると、ファイル操作要求部４５ｂは、受け取った複数のオブジェクトを組み合わせて１つのファイルを生成し、ユーザバッファ４５ａに格納する。
【０１３３】
通信バッファ４５ｃは、ファイル操作要求部４５ｂがネットワークを介した通信を行うためのデータを記憶するための記憶領域である。
ファイルサーバ１００ａは、管理エージェント１２０ａ、ディレクトリ作成部１３０ａ、キャッシュ領域１５０ａ、およびデータ入出力部１６０ａを有している。管理エージェント１２０ａは、ノードリスト１２１ａを保持している。管理エージェント１２０ａ、ディレクトリ作成部１３０ａの機能は、図４に示した第１の実施の形態の同名も構成要素と同じである。
【０１３４】
キャッシュ領域１５０ａは、データ入出力部１６０ａが、ストレージデバイス１１０に入出力するデータを一時的に格納する記憶領域である。
データ入出力部１６０ａは、アプリケーションサーバ４５からのファイルの書き込み要求や読み取り要求に応じて、ストレージデバイス１１０内のファイルを操作する。
【０１３５】
データ入出力部１６０ａは、アプリケーションサーバ４５からファイルの書き込み要求を受け取れば、管理エージェント１２０ａが保持しているノードリスト１２１ａを参照して、書き込みを行うべきファイルデータを特定する。次に、データ入出力部１６０ａは、書き込みを行うべきファイルデータをアプリケーションサーバ４５のファイル操作要求部４５ｂから受け取り、一旦キャッシュ領域１５０ａに格納する。そして、データ入出力部１６０ａは、キャッシュ領域１５０ａに格納したファイルデータを纏めて１つのオブジェクト１１２として、ストレージデバイス１１０に格納する。
【０１３６】
データ入出力部１６０ａは、アプリケーションサーバ４５からファイルの読み取り要求を受け取ると、指定されたファイルの一部を構成するオブジェクト１１２をストレージデバイス１１０から読み取り、キャッシュ領域１５０ａに格納する。次に、キャッシュ領域１５０ａに格納されたオブジェクト１１２を、アプリケーションサーバ４５のファイル操作要求部４５ｂに渡す。
【０１３７】
次に、第２の実施の形態におけるファイルの読み取り処理について詳しく説明する。
図２２は、第２の実施の形態におけるファイルの読み取り処理の手順を示すフローチャートである。図２２では、アプリケーションサーバ４５とファイルサーバ１００ａとの処理手順が示されている。アプリケーションサーバ４５の処理は図中左側に示されており、ファイルサーバ１００ａの処理は図中右側に示されている。以下、図２２に示す処理をステップ番号に沿って説明する。
【０１３８】
［ステップＳ２０１］アプリケーションサーバ４５のファイル操作要求部４５ｂは、読み取り要求を作成する。読み取り要求では、ファイルの一部のデータに対する読み取り要求を出すことができる。その場合、データ開始位置のオフセット（ファイルの先頭からの差分）や、データ長により、読み取り対象のデータが特定される。
【０１３９】
［ステップＳ２０２］ファイル操作要求部４５ｂは、全てのファイルサーバ１００ａ，２００ａ，３００ａに対して、ファイルの読み取り要求を送信する。その後、アプリケーションサーバ４５の処理がステップＳ２０３に進むと共に、ファイルサーバ１００ａにおいてステップＳ２０４の処理が実行される。
【０１４０】
［ステップＳ２０３］ファイル操作要求部４５ｂは、全てのファイルサーバ１００ａ，２００ａ，３００ａからの返信を待つ。その後、アプリケーションサーバ４５の処理は、ステップＳ２１０に進められる。
【０１４１】
［ステップＳ２０４］ファイルサーバ１００ａのデータ入出力部１６０ａは、アプリケーションサーバ４５からの読み取り要求を取得する。
［ステップＳ２０５］データ入出力部１６０ａは、読み取り対象として要求されているデータを有しているか否かを判断する。読み取り対象のデータを有していれば、処理がステップＳ２０６に進められる。読み取り対象のデータを有していなければ、処理がステップＳ２０８に進められる。
【０１４２】
［ステップＳ２０６］データ入出力部１６０ａは、ストレージデバイス１１０に格納されているオブジェクトから、要求されているファイルデータを読み取り、キャッシュ領域１５０ａに書き込む。
【０１４３】
［ステップＳ２０７］データ入出力部１６０ａは、読み取り結果を作成する。読み取り結果には、要求されたデータや、そのデータのデータ量などが含まれる。その後、処理がステップＳ２０９に進められる。
【０１４４】
［ステップＳ２０８］データ入出力部１６０ａは、処理を行わないことを示す読み取り結果を作成する。
［ステップＳ２０９］データ入出力部１６０ａは、読み取り結果をアプリケーションサーバ４５に送信する。その後、ファイルサーバ１００ａにおける処理が終了すると共に、アプリケーションサーバ４５においてステップＳ２１０の処理が実行される。
【０１４５】
［ステップＳ２１０］アプリケーションサーバ４５のファイル操作要求部４５ｂは、全てのファイルサーバ１００ａ，２００ａ，３００ａから読み取り結果を受信する。受信した読み取り結果は、一旦、通信バッファ４５ｃに格納される。
【０１４６】
［ステップＳ２１１］ファイル操作要求部４５ｂは、全ファイルサーバからの読み取り結果に含まれるファイルデータを通信バッファ４５ｃから読み出し、繋ぎ合わせ、連続データとする。これにより、読み取り対象のファイルが生成される。ファイル操作要求部４５ｂは、生成したファイルをユーザバッファ４５ａに格納する。
【０１４７】
図２３は、第２の実施の形態におけるファイル読み取り処理の前半を示す概念図である。
［ステップＳ２２１］アプリケーションサーバ４５から各ファイルサーバ１００ａ，２００ａ，３００ａへ、読み取り要求４４１〜４４３が送信される。読み取り要求４４１〜４４３は、宛先が異なるのみで、それ以外は同じ内容である。
【０１４８】
［ステップＳ２２２］各ファイルサーバ１００ａ，２００ａ，３００ａは、読み取り要求４４１〜４４３で指定されたファイルデータのうち、自身が所有しているファイルデータをストレージデバイス１１０，２１０，３１０から読み出し、キャッシュ領域１５０ａ，２５０ａ，３５０ａに格納する。
【０１４９】
図２４は、第２の実施の形態におけるファイル読み取り処理の後半を示す概念図である。
［ステップＳ２２３］各ファイルサーバ１００ａ，２００ａ，３００ａは、キャッシュ領域１５０ａ，２５０ａ，３５０ａに格納したファイルデータを含む読み取り結果４５１〜４５３を、アプリケーションサーバ４５に転送する。その読み取り結果４５１〜４５３は、通信バッファ４５ｃに格納される。
【０１５０】
［ステップＳ２２４］アプリケーションサーバ４５は、通信バッファ４５ｃに格納された読み取り結果内のファイルデータを、元の順番に繋ぎ合わせ、ファイルを生成する。そして、アプリケーションサーバ４５は、そのファイルをユーザバッファ４５ａに格納する。
【０１５１】
以上のようにして、ＲＤＭＡ機能を用いずに、分散格納されたファイルの読み取りを行うことができる。
［変形例］
以下、上記第１、第２の実施の形態に対する変形例について説明する。
【０１５２】
上記の実施の形態では、ファイルを分散格納しているが、常にファイルの分散格納を行う必要はない。たとえば、ファイルのデータ量が小さければ、分散させずに、１つのファイルサーバで管理させてもよい。この場合、ファイルの書き込み要求が出されたときに、各ファイルサーバは、自己の格納すべきファイルか否かを判断する。たとえば、ファイルサーバに対して、格納対象のファイルを決定するための規則を予め定義しておく。そして、各ファイルサーバは、定義された規則に従って、それぞれの格納すべきファイルを特定し、特定したファイルの書き込みを実行する。
【０１５３】
格納対象のファイルを決定するための規則としては、たとえば、ディレクトリ作成要求に応じてディレクトリを作成するファイルサーバの決定規則と同様の規則を適用することができる。すなわち、ファイルが作成される場所のディレクトリ（親ディレクトリ）配下に、前回ファイルを作成したファイルサーバを調べる。そして、ノードリストにおいて、前回ファイルを作成したファイルサーバの次のファイルサーバがファイルの書き込みを行う。
【０１５４】
なお、上記第１、第２の実施の形態の説明では、ファイルのファイル情報を管理するファイルサーバの決定方法について説明していないが、上記の変形例に示した格納対象のファイルを決定するための規則と同様の方法によって、あるファイルのファイル情報を管理すべきファイルサーバを決定することができる。
【０１５５】
上記の処理機能は、サーバコンピュータとクライアントコンピュータとによって実現することができる。その場合、ファイルサーバが有すべき機能の処理内容を記述したサーバプログラム、およびアプリケーションサーバが有すべき機能の処理内容を記述したクライアントプログラムが提供される。サーバプログラムをサーバコンピュータで実行することにより、ファイルサーバの処理機能がサーバコンピュータ上で実現される。また、クライアントプログラムをクライアントコンピュータで実行することにより、アプリケーションサーバの処理機能がクライアントコンピュータ上で実現される。
【０１５６】
処理内容を記述したサーバプログラムやクライアントプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ(Digital Versatile Disc)、ＤＶＤ−ＲＡＭ(Random Access Memory)、ＣＤ−ＲＯＭ(Compact Disc Read Only Memory)、ＣＤ−Ｒ(Recordable)／ＲＷ(ReWritable)などがある。光磁気記録媒体には、ＭＯ(Magneto-Optical disc)などがある。
【０１５７】
サーバプログラムやクライアントプログラムを流通させる場合には、たとえば、各プログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、クライアントプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータからクライアントコンピュータにクライアントプログラムを転送することもできる。
【０１５８】
サーバプログラムを実行するサーバコンピュータは、たとえば、可搬型記録媒体に記録されたサーバプログラムを、自己の記憶装置に格納する。そして、サーバコンピュータは、自己の記憶装置からサーバプログラムを読み取り、サーバプログラムに従った処理を実行する。なお、サーバコンピュータは、可搬型記録媒体から直接サーバプログラムを読み取り、そのサーバプログラムに従った処理を実行することもできる。
【０１５９】
クライアントプログラムを実行するクライアントコンピュータは、たとえば、可搬型記録媒体に記録されたクライアントプログラムもしくはサーバコンピュータから転送されたクライアントプログラムを、自己の記憶装置に格納する。そして、クライアントコンピュータは、自己の記憶装置からクライアントプログラムを読み取り、クライアントプログラムに従った処理を実行する。なお、クライアントコンピュータは、可搬型記録媒体から直接クライアントプログラムを読み取り、そのクライアントプログラムに従った処理を実行することもできる。また、クライアントコンピュータは、サーバコンピュータからクライアントプログラムが転送される毎に、逐次、受け取ったクライアントプログラムに従った処理を実行することもできる。
【０１６０】
（付記１）  クラスタを構成する複数のファイルサーバの一つとしてコンピュータを機能させるためのファイルサーバプログラムにおいて、
前記コンピュータに、
前記クラスタにおいて実行する処理のうち自身の担当する処理を判断するための判断条件が予め定義されており、前記クラスタを構成する前記複数のファイルサーバに対して送信されたファイル操作要求を受け取ると、前記判断条件に基づいて前記ファイル操作要求に応じた処理の実行の要否を判断し、
前記ファイル操作要求に応じた処理の実行が必要と判断された場合、自己の管理するストレージデバイスに対して前記ファイル操作要求に応じた処理を行う、
処理を実行させることを特徴とするファイルサーバプログラム。
【０１６１】
（付記２）  前記クラスタを構成する前記複数のファイルサーバの処理担当順が予め定義されており、前記処理担当順において自己の順番であることが、前記判断条件として定義されていることを特徴とする付記１記載のファイルサーバプログラム。
【０１６２】
（付記３）  前記ファイル操作要求がディレクトリ作成要求である場合、前記処理担当順によって、共通の親ディレクトリの配下へディレクトリを作成するファイルサーバの順番が定義されていることを特徴とする付記２記載のファイルサーバプログラム。
【０１６３】
（付記４）  ディレクトリを作成した後は、前記ディレクトリの配下に最後に子ディレクトリを作成したファイルサーバの識別情報を記憶し、
前記ディレクトリ作成要求において、前記ディレクトリ配下へのディレクトリ作成が要求された場合、前記ディレクトリ配下に前回子ディレクトリを作成したファイルサーバの識別情報を、他のファイルサーバに通知することを特徴とする付記３記載のファイルサーバプログラム。
【０１６４】
（付記５）  前記ファイル操作要求に応じた処理のうち担当部分として割り当てられた処理を含むことが前記判断条件として定義されており、
前記ファイル操作要求に応じた処理を実行する際には、前記担当部分として割り当てられた処理のみを実行することを特徴とする付記１記載のファイルサーバプログラム。
【０１６５】
（付記６）  前記ファイル操作要求がファイルの書き込み要求であるときの前記判断条件として、前記ファイルを分割したファイルデータのうち、書き込み処理を担当すべき処理担当データの選択規則が定義されており、
前記ファイル操作要求に応じた処理を実行する際には、前記処理担当データを、自己の管理するストレージデバイスに格納することを特徴とする付記１記載のファイルサーバプログラム。
【０１６６】
（付記７）  前記ファイル操作要求がファイルの読み取り要求であるときの前記判断条件として、前記ファイルを自己の管理するストレージデバイス内に格納していることが定義されており、
前記ファイル操作要求に応じた処理を実行する際には、前記ストレージデバイスから前記ファイルを読み出し、読み出した前記ファイルを、前記ファイル操作要求を出力した装置へ送信することを特徴とする付記１記載のファイルサーバプログラム。
【０１６７】
（付記８）  前記ファイル操作要求がファイルを構成する一部のファイルデータの読み取り要求である場合、前記ファイルデータを自己の管理するストレージデバイス内に格納していることが、前記判断条件として定義されており、
前記ファイル操作要求に応じた処理を実行する際には、前記ストレージデバイスから前記ファイルデータを読み出し、読み出した前記ファイルデータを、前記ファイル操作要求を出力した装置へ送信することを特徴とする付記１記載のファイルサーバプログラム。
【０１６８】
（付記９）  クラスタを構成する複数のファイルサーバの一つとして機能するコンピュータのファイル操作方法において、
前記クラスタにおいて実行する処理のうち自身の担当する処理を判断するための判断条件が予め定義されており、前記クラスタを構成する前記複数のファイルサーバに対して送信されたファイル操作要求を受け取ると、前記判断条件に基づいて前記ファイル操作要求に応じた処理の実行の要否を判断し、
前記ファイル操作要求に応じた処理の実行が必要と判断された場合、自己の管理下にあるストレージデバイスに対して前記ファイル操作要求に応じた処理を行う、
ことを特徴とするファイル操作方法。
【０１６９】
（付記１０）  クラスタを構成する複数の装置の一つとして機能するファイルサーバにおいて、
ストレージデバイスと、
前記クラスタにおいて実行する処理のうち自身の担当する処理を判断するための判断条件が予め定義されており、前記クラスタを構成する前記複数の装置に対して送信されたファイル操作要求を受け取ると、前記判断条件に基づいて前記ファイル操作要求に応じた処理の実行の要否を判断する判断手段と、
前記判断手段において前記ファイル操作要求に応じた処理の実行が必要と判断された場合、前記ストレージデバイスに対して前記ファイル操作要求に応じた処理を行う処理実行手段と、
を有することを特徴とするファイルサーバ。
【０１７０】
（付記１１）  クラスタを構成する複数のファイルサーバの一つとしてコンピュータを機能させるためのファイルサーバプログラムを記録した前記コンピュータ読み取り可能な記録媒体において、
前記コンピュータに、
前記クラスタにおいて実行する処理のうち自身の担当する処理を判断するための判断条件が予め定義されており、前記クラスタを構成する前記複数のファイルサーバに対して送信されたファイル操作要求を受け取ると、前記判断条件に基づいて前記ファイル操作要求に応じた処理の実行の要否を判断し、
前記ファイル操作要求に応じた処理の実行が必要と判断された場合、自己の管理するストレージデバイスに対して前記ファイル操作要求に応じた処理を行う、
処理を実行させることを特徴とする記録媒体。
【０１７１】
【発明の効果】
以上説明したように本発明では、全てのファイルサーバに対してディレクトリ作成要求が出力されると、親ディレクトリ配下に各サーバが順番にディレクトリを作成するようにした。そのため、ディレクトリ作成要求の送信先をクライアントに認識させることなく共通の親ディレクトリ配下に各サーバが順番にディレクトリを作成でき、処理の効率化を図ることができるとともに、ディレクトリ作成要求の送信先の認識処理に起因する処理負荷の偏りを防ぐことができる。
【図面の簡単な説明】
【図１】本発明の実施の形態に適用される発明の概念図である。
【図２】第１の実施の形態のシステム構成例を示す図である。
【図３】本発明の実施の形態に用いるファイルサーバのハードウェア構成例を示す図である。
【図４】第１の実施の形態におけるアプリケーションサーバとファイルサーバとの機能ブロック図である。
【図５】ノードリストのデータ構造例を示す図である。
【図６】ディレクトリのデータ構造例を示す図である。
【図７】ファイルの分散格納状況を示す図である。
【図８】ファイルテーブルのデータ構造例を示す図である。
【図９】マップ情報に登録されるオフセットを説明する図である。
【図１０】ディレクトリ管理情報のデータ構造例を示す図である。
【図１１】ノードリストの同一性確保処理の概念図である。
【図１２】ディレクトリ作成処理の手順を示すフローチャートである。
【図１３】ディレクトリ作成処理の概念図の前半である。
【図１４】ディレクトリ作成処理の概念図の後半である。
【図１５】ファイル書き込み処理の手順を示すフローチャートの前半である。
【図１６】ファイル書き込み処理の手順を示すフローチャートの後半である。
【図１７】書き込み処理の概念図である。
【図１８】ファイルの読み取り処理の手順を示すフローチャートの前半である。
【図１９】ファイルの読み取り処理の手順を示すフローチャートの後半である。
【図２０】読み取り処理の概念図である。
【図２１】第２の実施の形態における機能ブロック図である。
【図２２】第２の実施の形態におけるファイルの読み取り処理の手順を示すフローチャートである。
【図２３】第２の実施の形態におけるファイル読み取り処理の前半を示す概念図である。
【図２４】第２の実施の形態におけるファイル読み取り処理の後半を示す概念図である。
【符号の説明】
１  クライアント
１ａ，１ｂ、１ｃ  ファイル操作要求
２  クラスタ
３，４，５  ファイルサーバ
３ａ，４ａ，５ａ  ストレージデバイス
１０  ネットワーク
２１，２２，２３  Ｗｅｂクライアント
３０  Ｗｅｂサーバ
４１，４２，４３  アプリケーションサーバ
１００，２００，３００  ファイルサーバ
【図１】
0003983036.tif 000002
【図２】
0003983036.tif 000003
【図３】
0003983036.tif 000004
【図４】
0003983036.tif 000005
【図５】
0003983036.tif 000006
【図６】
0003983036.tif 000007
【図７】
0003983036.tif 000008
【図８】
0003983036.tif 000009
【図９】
0003983036.tif 000010
【図１０】
0003983036.tif 000011
【図１１】
0003983036.tif 000012
【図１２】
0003983036.tif 000013
【図１３】
0003983036.tif 000014
【図１４】
0003983036.tif 000015
【図１５】
0003983036.tif 000016
【図１６】
0003983036.tif 000017
【図１７】
0003983036.tif 000018
【図１８】
0003983036.tif 000019
【図１９】
0003983036.tif 000020
【図２０】
0003983036.tif 000021
【図２１】
0003983036.tif 000022
【図２２】
0003983036.tif 000023
【図２３】
0003983036.tif 000024
【図２４】
0003983036.tif 000025