(57)【要約】【課題】  クラスタシステムで共有可能な高速で大容量のメモリファイルシステムを提供し、特に大容量の入出力データを扱うアプリケーションプログラムのスループットを向上し、さらに高可用性メモリファイルシステムを提供することでメモリファイルシステムの適用分野を拡大することを目的とする。【解決手段】  クラスタシステムの複数ノードの主記憶から各々メモリ領域を確保し、それらを連結して一つのグローバルなメモリストレージを構成することで大容量メモリファイルシステムを実現する。また、複数ノードのメモリ領域を利用してミラーリングすることにより、ノード障害やノード間通信の経路障害が発生した場合にアプリケーションを中断することなく続行可能な高可用性を実現する。【選択図】  図１
2005234919.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも一つのプロセッサおよび主記憶とそれらを制御するオペレーティングシステムが動作するコンピュータをノードとし、複数のノードを高速ネットワークで接続した疎結合型のクラスタメモリファイルシステムは、
少なくとも一つのノードの主記憶からそれぞれ独立してメモリ割り当てる手段と、
複数ノードにまたがるメモリ領域を連結して連続した一つのストレージとして使用可能とするグローバルメモリストレージと、
アプリケーションプログラムに対してファイルシステムインタフェースを介して、グローバルメモリストレージ上にクラスタシステム内の任意のノードからアクセスする手段を有することを特徴とするクラスタメモリファイルシステム。
【請求項２】
請求項１記載のグローバルメモリストレージは、アプリケーション実行ノードで入出力要求を受け付けるクライアントドライバと、物理的にメモリ領域を保有するノードで実際のメモリ領域に対して入出力データを処理するサーバドライバによってアクセス手段を有し、
クライアントドライバは、アクセス要求のあったグローバルメモリストレージ内のオフセットを物理的なノード位置とノード内のアドレスに変換し、該当ノードのサーバドライバに入出力要求を発行することで、上位のアプリケーションに対して物理的なメモリ位置を仮想化する下位のグローバルメモリストレージドライバを有することを特徴とするクラスタメモリファイルシステム。
【請求項３】
請求項２記載のグローバルメモリストレージを二つ以上のノードにまたがる主記憶から構成し、個々のノードのメモリ領域をボリュームと見なしてノード間でミラーボリュームを構成し、前記グローバルメモリストレージに対してデータを書き込む場合にクライアントドライバによって前記グローバルメモリストレージを構成する他ノードのメモリ領域に同じデータのコピーを書き込み、前記グローバルメモリストレージを構成するノード及びノード間通信経路の少なくとも一方で障害が発生した場合には、データのコピーを保持するノードに通信経路を切り替えることを特徴とするクラスタメモリファイルシステム。
【請求項４】
請求項１記載のクラスタメモリファイルシステムにおいて、前記グローバルメモリストレージが少なくともひとつのノード群、各ノードの主記憶から確保するメモリ量、グローバルメモリストレージの属性を含む項目を定義する手段を有し、グローバルメモリストレージを構成するノード、各ノード上に確保された前記グローバルメモリストレージ用メモリ領域アドレス、メモリ領域サイズを含むグローバルメモリストレージの属性情報、およびグローバルメモリストレージ上のクラスタメモリファイルシステムに作成されたファイルのメモリアドレス、ファイルのアクセス権限を含むファイル属性情報を格納するデータベースを外部記憶装置に有することを特徴とするクラスタメモリファイルシステム。
【請求項５】
請求項４記載のクラスタメモリファイルシステムは、前記データベースを用いて、クラスタシステム内に分散して存在するグローバルメモリストレージおよびクラスタメモリファイルシステム上のファイルを一元管理し、アクセスの整合性を維持し、システム運用管理を支援するための、クラスタシステム内の任意の１つのノードで実行する管理デーモンを有することを特徴とするメモリファイルシステム。
【請求項６】
請求項５記載のクラスタメモリファイルシステムは、クラスタメモリファイルシステム上のファイルをアプリケーションがオープンしたときに、前記管理デーモンにオープン要求を発行し、オープン要求を受けた管理デーモンは前記データベースからオープン要求を受けたファイルおよびそのファイルが存在するグローバルメモリストレージの管理情報を読み出し、アプリケーション実行ノードに管理情報を送信し、クラスタメモリファイルシステムはグローバルメモリストレージの管理情報をクライアントドライバに登録し、ファイルへの入出力要求時には前記管理情報に基づいて、クライアントドライバが直接ファイルが存在するノードに入出力要求を発行することを特徴とするクラスタメモリファイルシステム。
【請求項７】
請求項１のクラスタメモリファイルシステムは、さらに、グローバルメモリストレージへのアクセスを許可するクライアントノード群を定義する手段を有し、定義されたノードにのみ前記グローバルメモリストレージへのアクセスを許可することを特徴とするクラスタメモリファイルシステム。
【請求項８】
少なくとも一つのプロセッサおよび主記憶とそれらを制御するオペレーティングシステムが動作するコンピュータをノードとし、複数のノードを高速ネットワークで接続した疎結合型のクラスタシステムにおいて、
少なくとも一つのノードの主記憶からそれぞれ独立してメモリ割り当て、
複数ノードにまたがるメモリ領域を連結して連続した一つのストレージとして使用可能とするグローバルメモリストレージを構成し、
アプリケーションプログラムに対してファイルシステムインタフェースを介して、グローバルメモリストレージ上にクラスタシステム内の任意のノードからアクセスすることを特徴とするメモリ構成方法。
【請求項９】
前記グローバルメモリストレージへのアクセスの際に、アクセス要求のあったグローバルメモリストレージ内のオフセットを物理的なノード位置とノード内のアドレスに変換し、該当ノードのサーバドライバに入出力要求を発行することを特徴とする請求項８記載のメモリ構成方法。
【請求項１０】
前記グローバルメモリストレージを二つ以上のノードにまたがる主記憶から構成し、個々のノードのメモリ領域をボリュームと見なしてノード間でミラーボリュームを構成し、前記グローバルメモリストレージに対してデータを書き込む場合にクライアントドライバによって前記グローバルメモリストレージを構成する他ノードのメモリ領域に同じデータのコピーを書き込み、前記グローバルメモリストレージを構成するノード及びノード間通信経路の少なくとも一方で障害が発生した場合には、データのコピーを保持するノードに通信経路を切り替えることを特徴とする請求項９記載のメモリ構成方法。
【請求項１１】
アプリケーションを実行するための少なくとも１つの第１のノードと、データの入出力を行なうための少なくとも１つの第２のノードとからなる計算機システムにおいて、
前記第２のノードのメモリを連結してグローバルメモリストレージを構成し、
前記グローバルメモリストレージへの前記第１のノードからアクセス要求を、前記第２のノードを特定し、前記特定された第２のノードのメモリ内のアドレスに変換し、
前記変換された情報に基づいて前記グローバルメモリストレージにアクセスすることを特徴とするメモリ構成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスタシステムで共有可能なメモリファイルシステムに関する。
【背景技術】
【０００２】
従来、クラスタシステムにおけるファイル共有技術として、例えば、下記特許文献１及び特許文献２に記載のものが知られている。
【０００３】
下記特許文献１に記載のものは、ＳＡＮ（Storage Area Network（ストレージエリアネットワーク））環境におけるファイル共有技術に関するものである。 これは、磁気ディスク装置をＳＡＮで物理的に複数のコンピュータに接続してファイルを共有し、分散共有メモリをベースにそれぞれのプロセスの空間内にファイルをマッピングしてファイルへのアクセスを主記憶へのアクセスとして処理するようにしたものである。
【０００４】
下記特許文献２に記載のものは、クラスタシステム内のあるノードに物理的に接続されたディスクを仮想化する仮想ディスクシステムによって共有する技術に関するものである。
【０００５】
これは、物理的な一つの記憶装置に対して物理的に接続されていないノードからの要求に対して一貫性を保証したアクセス手段を提供するものである。
【０００６】
下記特許文献３に記載のものは、不揮発性メモリを用いたメモリファイルシステムに関するものである。不揮発性メモリ上にメモリファイルシステムを構築することでメモリファイルシステムの信頼性を向上させるものである。
【０００７】
【特許文献１】特開２００２−２６８９３３号公報
【特許文献２】特表２００２−５１４８１３号公報
【特許文献３】特開平７−２０１１９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
上記特許文献１に記載の技術は、メモリアクセスと同様にファイルアクセスを実現するために分散共有メモリにファイルをマップする技術で、ファイルをプロセスの空間にマップするためアクセスは高速であるが、使用できるファイルのサイズがプロセス空間に制限される。アプリケーションプログラム本来の処理を行うために必要な仮想メモリ空間と、入出力を高速化するためにファイルをマップする仮想メモリ空間をひとつのプロセス空間に共存させることになるため、メモリを多く必要とするアプリケーションプログラムでは必然的にマップできるファイルのサイズが制限されるため両者はトレードオフとなる。また、ファイルをプロセスの空間にマップしなくとも、メモリファイルシステムをアプリケーションプログラムの実行ノード上に配置すれば、物理メモリの不足によるスラッシングが発生しやすくなりパフォーマンス低下の要因ともなり得る。入出力データ量の増加に伴ってメモリファイルシステムと磁気ディスクの性能差は顕著に現れ、その効果を発揮するが、実際には大容量のデータはメモリファイルシステムに置けない、という問題がある。
上記特許文献２の技術は、物理的な装置を仮想化する点で、磁気ディスクではなくあるノード上のメモリ領域を仮想装置として同様にトランスペアレントなアクセスを実現することはできるが、この場合も前述の特許文献１の技術と同様に１つのノードの物理メモリ容量の制限を受けるものである。
【０００９】
また、メモリファイルシステムは高性能である反面、ひとたび障害が発生すればデータを消失するためきわめて信頼性が低いという重大な欠点がある。信頼性が低いためにメモリファイルシステムは積極的には利用されていない。磁気ディスクを使用した共有可能なクラスタファイルシステムは、特許文献２に記載の技術に見られるように高可用性を実現した例があるが、メモリファイルシステムに関して高可用性を実現した例は見当たらない。
【００１０】
上記特許文献３に記載の技術は不揮発性メモリとバッテリによってデータ消失を防ぐ方式によってメモリファイルシステムの欠点をカバーするものであるが、専用のハードウェアを必要とし、また複数コンピュータでの共有手段がないため、クラスタシステムで共有可能なファイルシステムが構築できない。
【００１１】
本発明は、複数ノードの主記憶を利用することで、従来はメモリ上に必要な容量が確保できないために、磁気ディスク上にファイルを作成するしかなかった大容量のファイルが作成可能なクラスタメモリファイルシステムを得ることを目的とする。
【００１２】
本発明は、クラスタシステムにおけるアプリケーション実行ノードとメモリファイルシステムを構築するノードとをそれぞれ分離可能とすることで、アプリケーションに対して実行ノードの自由度を与え、実行ノードにおけるメモリのトレードオフを解消する、クラスタメモリファイルシステムを得ることを目的とする。
【００１３】
本発明は、アプリケーションが書き込んだデータを、複数ノードにミラーリングすることで、ひとつのノードで障害が発生してもデータを消失することなくアプリケーションを続行可能とする高可用性を備えたクラスタメモリファイルシステムを得ることを目的とする。
【００１４】
本発明は、クラスタシステム内に分散して配置されたクラスタメモリファイルシステムをデータベースと管理デーモンによって一元管理することで、クラスタシステム内の任意のノードで実行されるアプリケーションに対してはメモリファイルシステムが存在するノードを抽象化すること、異なるノード間でファイルを共有する場合のアクセスの整合性を維持すること、さらにシステム管理者に対しては運用管理の容易性を提供することを目的とする。
【００１５】
本発明は、ファイルオープン時に管理デーモンから該ファイルの管理情報とマップテーブルを受け取り、アプリケーション実行ノードにキャッシュすることで同一ノードからの同一ファイルオープン処理を高速化し、入出力要求時に管理デーモンに問い合わせをすることなく直接物理的に存在するノードに入出力要求を転送し高速化することを目的とする。
【００１６】
発明は、グローバルメモリストレージにクラスタシステム内の任意のノードからアクセス可能とする一方で、実際のシステム運用において利用目的ごとに特定のノード群を割り当てる運用があり、このような場合にはアクセスを許可するノード群を限定する手段を提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記目的を達成するため、本発明は、複数ノードの主記憶を利用してひとつの連続する仮想的なメモリストレージを定義して構成する手段と、メモリストレージ上にファイルシステムを構築する手段と、メモリストレージおよびメモリファイルシステムに関する定義情報およびファイル管理情報を外部記憶装置上のデータベースに格納することで障害やクラスタシステムの再起動等によって定義情報を消失することなく再構成する手段と、管理デーモンによるデータベースの一元管理により物理構成を抽象化する手段と、アプリケーションからの入出力要求に対してアプリケーションが指定するファイルオフセットを物理的なノード位置とノード内アドレスに変換して入出力経路を自動的に選択する手段と、複数ノードのメモリ領域を用いてミラーリングすることで高可用化する手段とを備える。
【００１８】
クラスタシステムの中で特に科学技術計算分野に最適化したハイパフォーマンスコンピューティングクラスタにおいては、アプリケーションプログラムを実行する演算ノードと入出力を主に処理するＩ／Ｏノードとを分離する運用が多く見られる。演算ノードではアプリケーションプログラムが最大限メモリを使用して演算を行い、演算結果をＩ／Ｏノードに転送して磁気ディスクに書き出す。Ｉ／Ｏノードでは入出力を主に処理するため、演算ノードに比べてメモリやＣＰＵの負荷が低い。本発明はこのリソース消費傾向に着目し、Ｉ／Ｏノード群のメモリを利用してメモリファイルシステムを構築することで、アプリケーションプログラムでの最大限のメモリ使用と同時に、大容量のメモリファイルシステムによってＩ／Ｏ時間を短縮してスループットの向上が図られる。近年のノード間ネットワークの性能向上は著しく、レイテンシが数マイクロ秒のものが主流となりつつあり、ノード間転送を行っても物理的に接続された磁気ディスクに対して本発明のメモリファイルシステムは性能優位性がある。
【発明の効果】
【００１９】
本発明によれば、クラスタシステムにおけるクラスタ共有ファイルシステムで、アプリケーションプログラムが使用するメモリ量に影響を与えずに、ノードの物理メモリ容量を越える大容量のメモリファイルシステムを得ることができる。更に本発明では、メモリファイルシステムの信頼性を向上させることで、従来は信頼性の理由により適用できなかった用途にも、メモリファイルシステムの適用分野を拡大することができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明を実施する場合の一形態を図面を参照して具体的に説明する。
【００２１】
図１は、本発明の実施例のグローバルメモリストレージとクラスタメモリファイルシステムの構成を示すブロック図である。システムを構成する複数のノードは、アプリケーションプログラムを実行するＡＰノード１２Ｄ、１２ＥとＡＰノードに比べて負荷が軽くＡＰノードに使用されていないメモリを提供するＩ／Ｏノード１２Ａ〜Ｃとに分かれている。
【００２２】
グローバルメモリストレージ構成ノード群の各ノードの主記憶上に確保されたメモリ領域をＧＭＳ(Global Memory System)領域と呼び、図１の実施例においては、ノード１２Ａの主記憶に確保されたＧＭＳ領域１３Ａ、ノード１２Ｂの主記憶に確保されたＧＭＳ領域１３Ｂ、およびノード１２Ｃの主記憶に確保されたＧＭＳ領域１３Ｃを連結して一つの連続するグローバルメモリストレージ（ＧＭＳ）１１を構成している。  
アプリケーションプログラム実行ノード１２Ｄでは、アプリケーションプログラム１４Ｄの入出力要求を受けるクラスタメモリファイルシステム１７Ｄとクライアントドライバであってクラスタメモリファイルシステム１７Ｄからの入出力要求を受けるＧＭＳドライバクライアント１５Ｄが動作する。同様に、アプリケーションプログラム実行ノード１２Ｅでは、アプリケーションプログラム１４Ｅの入出力要求を受けるクラスタメモリファイルシステム１７Ｅとクラスタメモリファイルシステム１７Ｅからの入出力要求を受けるＧＭＳドライバクライアント１５Ｅが動作する。
【００２３】
グローバルメモリストレージ１１を構成する、Ｉ／Ｏノードであるノード１２Ａ、ノード１２Ｂ、およびノード１２Ｃでは、それぞれサーバドライバであるＧＭＳドライバサーバ１６Ａ、１６Ｂおよび１６Ｃが動作し、ＧＭＳドライバクライアントからの入出力要求を受けて各ノードのＧＭＳ領域へのアクセスを行う。
【００２４】
管理デーモン１８は、アプリケーションプログラム実行ノードやグローバルメモリストレージ１１を構成するノードとは異なるノード１２Ｆで動作させることができる。デーモンは、ユーザプログラムの一種であり、通常はシステム立ち上げ時にシステムによって起動され、システム稼動中は動作し続け、システムに関連したサービスを提供する。管理デーモン１８は、クラスタ内に定義されているすべてのグローバルメモリストレージと各グローバルメモリストレージ上に作成されているクラスタメモリファイルシステムのすべてのファイル情報を、データベース１９を用いて管理する。
【００２５】
図１の実線の矢印は、グローバルメモリストレージへのアクセスの流れを示している。  アプリケーションプログラム１４Ｄが入出力要求を発行すると、これをクラスタメモリファイルシステム１７Ｄが受けてファイル内のオフセットをグローバルメモリストレージ１１内のオフセットに変換してＧＭＳドライバクライアント１５Ｄに入出力要求を発行する。  ＧＭＳドライバクライアント１５Ｄは、仮想メモリストレージであるグローバルメモリストレージ内のオフセットを物理的なノード位置とノード内アドレスに変換する。
【００２６】
アクセス要求がＧＭＳ領域１３Ａの範囲ならばＧＭＳドライバサーバ１６Ａに、ＧＭＳ領域１３Ｂの範囲ならばＧＭＳドライバサーバ１６Ｂに、ＧＭＳ領域１３Ｃの範囲ならばＧＭＳドライバサーバ１６Ｃにそれぞれ入出力要求を転送する。
【００２７】
クラスタメモリファイルシステム１７Ｄからの入出力要求範囲がＧＭＳ領域境界をまたぐ場合、例えばＧＭＳ領域１３ＡとＧＭＳ領域１３Ｂをまたぐ場合には、ＧＭＳドライバクライアント１５Ｄは、入出力要求を分割してＧＭＳドライバサーバ１６ＡとＧＭＳドライバサーバ１６Ｂにそれぞれ入出力要求を転送する。アプリケーションプログラム１４Ｅからの入出力要求についても、クラスタメモリファイルシステム１７Ｅ、ＧＭＳドライバクライアント１５Ｅを経由して同様の方法で入出力を処理する。
【００２８】
また、図１の点線の矢印は、データベース１９の管理情報へのアクセスの流れを示すもので、管理情報の取得や更新を行う場合には、クラスタメモリファイルシステム１７Ｄが管理デーモン１８と通信し、管理デーモン１８はデータベース１９にアクセスして管理情報の取得や更新を行う。グローバルメモリストレージ内のオフセットから物理的なノード位置とオフセットに変換するストレージマップテーブルは、クラスタメモリファイルシステム１７ＤがＧＭＳドライバクライアント１５Ｄに登録する。管理情報および管理情報へのアクセスについては、後述する図２から図１３までの説明で詳細を示す。
【００２９】
図１に示した実施の形態は、本発明の典型的な実施例であり、必ずしもこのように多数のノードを必須とするものではなく、最小構成ではＧＭＳドライバクライアント、ＧＭＳドライバサーバ、クラスタメモリファイルシステム、管理デーモンをすべてひとつのノードで動作させることもでき、また最大構成では構成ノード数に論理的な上限を設けるものでもない。あくまでも物理的なノード位置を抽象化することを特徴とするものである。  
図２から図６にデータベース１９の構造の一実施例を示し、以下に説明する。
【００３０】
図２は、データベース１９の構成要素であるＧＭＳ定義データベース２１を示した図である。ＧＭＳ定義構成データベース２１はグローバルメモリストレージの構成に関する情報を格納したもので、グローバルメモリストレージ名２２、グローバルメモリストレージの状態を表すステータス２３、当該グローバルメモリストレージの構成ノード群２４、当該グローバルメモリストレージ容量２５、ミラー属性２６、閉塞パス２７からなる。
【００３１】
グローバルメモリストレージ名２２はクラスタシステム内に複数のグローバルメモリストレージが存在する場合にそれぞれを一意に特定するために用いる。ステータス２３はグローバルメモリストレージがどのような状態にあるかを示すもので、”定義状態”、”使用可能状態”、”閉塞状態”、”部分閉塞状態”などの状態を示す。”定義状態”はデータベースに定義のみが存在している状態、”使用可能状態”はグローバルメモリストレージが生成されて使用可能な状態、”閉塞状態”はグローバルメモリストレージ構成ノード群の一部でノード障害またはノード間通信経路障害が検出されてノード又は通信路であるデバイスは使用不可の状態、”部分閉塞状態”はミラー属性２６が有効なグローバルメモリストレージ構成ノード群の一部でノード障害またはノード間通信経路障害が検出されて一部経路が閉塞されている状態で別の経路でアクセス可能な状態であり、この場合は閉塞された経路情報を閉塞パス２７に格納する。
【００３２】
構成ノード群２４は当該グローバルメモリストレージを構成するノード群の情報を格納するもので、例えばグローバルメモリストレージ１１においてはノード１２Ａ、ノード１２Ｂ、ノード１２Ｃである。グローバルメモリストレージ容量２５は、構成ノード群で示される各ノードの主記憶上に確保されるＧＭＳ領域１３Ａ、ＧＭＳ領域１３Ｂ、ＧＭＳ領域１３Ｃの合計サイズを示す。また、ミラー属性２６は、グローバルメモリストレージのミラーの有無とミラーを構成する相手サーバの識別子を有する。
【００３３】
図３はデータベース１９の構成要素で、ＧＭＳクライアント定義データベース３１を示した図である。ＧＭＳクライアント定義データベース３１は、グローバルメモリストレージ名３２、クライアントノード群３３からなり、グローバルメモリストレージとそれにアクセスを許可されたノード群を対応付ける。
【００３４】
グローバルメモリストレージ名３２は図２のグローバルメモリストレージ名２２と対応するもので、クライアントノード群３３で記述されるノード群から当該グローバルメモリストレージにアクセス可能であることを示す。例えば、グローバルメモリストレージ１１においてアプリケーション実行ノード１２Ｄおよびノード１２Ｅ、他には当該グローバルメモリストレージ構成ノード群からのアクセスを許可する場合には、ノード１２Ａ、ノード１２Ｂ、ノード１２Ｃを含めて定義する。本実施例の場合、ノード１２Ｆからのアクセス要求は拒絶される。
【００３５】
図４はデータベース１９の構成要素であって、グローバルメモリストレージ上のクラスタメモリファイルシステムのファイル定義データベース４１を示した図である。
【００３６】
ファイル定義データベース４１は、クラスタメモリファイルシステムが、ファイル作成時にファイル定義情報を格納するデータベースで、ファイル名４２、グローバルメモリストレージ名４３、所有者ユーザＩＤ４４、所有者グループＩＤ４５、ファイルアクセス権限４６、ファイルサイズ４７、ファイル終端オフセット４８、増分単位４９、オープンモード４Ａ、オープンカウンタ４Ｂからなる。
【００３７】
ファイル名４２は、クラスタメモリファイルシステム内でファイルを一意に特定するための名称である。グローバルメモリストレージ名４３は、当該ファイルがどのグローバルメモリストレージ上に存在するかを示すものである。所有者ユーザＩＤ４４は、当該ファイルを作成したユーザのユーザＩＤである。所有者グループＩＤ４５は、当該ファイルを作成した所有者が属するユーザグループのＩＤである。
【００３８】
ファイルアクセス権限４６は、当該ファイルへのアクセス権限を示すもので、所有者自身、所有者グループメンバ、その他ユーザ別にそれぞれｒｅａｄ権限、ｗｒｉｔｅ権限の有無を設定する。クラスタメモリファイルシステムには実行形式ファイルを格納して実行することはできないため実行権限の有無の設定はない。
【００３９】
ファイルサイズ４７は、当該ファイルの予約サイズを格納しており、当該ファイル割り当て時に要求サイズをグローバルメモリストレージから予約割り当てする。ファイル終端オフセット４８は、実際にデータが書かれている終端位置をファイルの先頭からのオフセットで示す。増分単位４９は、ファイル予約量を使い切って新たにファイルの増分割り当てが必要になった場合の１回あたりの増分割り当て量を示す。増分割り当てが行われた場合には増分単位４９をファイルサイズ４７に加算する。オープンモード４Ａはファイルがｒｅａｄモードでオープンされているかｗｒｉｔｅモードでオープンされているかを示す。オープンカウンタ４Ｂはオープンごとに１ずつ加算し、クローズするごとに１ずつ減算する。当該ファイルを複数プロセスが共有している場合には使用しているプロセス数に等しい。ファイルの削除要求があった場合にはオープンカウンタ４Ｂが１以上の場合にはオープンカウンタがゼロになるまでファイルの削除を保留する。ファイル定義データベース４１は、ファイル作成時にエントリを追加作成し、ファイル削除時にエントリを削除する。
【００４０】
図５はデータベース１９の構成要素であって、グローバルメモリストレージを構成するノードごとのスペースに関する情報を格納したＧＭＳスペース管理データベース５１を示した図である。当該データベースエントリは、グローバルメモリストレージが構成処理されて使用可能な状態になった場合に作成されるもので、具体的にはステータス２３が”定義状態”から”使用可能状態”になるときに当該データベースエントリが作成される。ＧＭＳスペース管理データベース５１は、グローバルメモリストレージ名５２、開始オフセット５３、サイズ５４、ノード識別子５５、ノード内開始アドレス５６からなる。
【００４１】
グローバルメモリストレージ名５２は、グローバルメモリストレージを一意に特定するもので、以降の項目は当該グローバルメモリストレージを構成する個々のノードごとの情報を格納する。開始オフセット５３は、物理的に異なるノードに分散している個々のメモリ領域のグローバルメモリストレージ内での境界であり、グローバルメモリストレージの先頭からのオフセットで示す。サイズ５４は、物理的に同一ノードに領域が存在する範囲を示す。ノード識別子５５は、開始オフセット５３で始まるサイズ５４の連続する領域が物理的に存在するノード位置を示す。ノード内開始アドレス５６は、ノード識別子５５上での実際のアドレスを示す。
【００４２】
図６はデータベース１９の構成要素であって、ＣＭＦＳ(Cluster Memory File System)スペース管理データベース６１を示した図である。当該データベースは、クラスタメモリファイルシステムがグローバルメモリストレージ上にファイルを作成した場合に作成するもので、グローバルメモリストレージ上の使用領域を管理するものである。ＣＭＦＳスペース管理データベース６１は、ファイル名６２、エクステント番号６３、ファイル内開始オフセット６４、エクステントサイズ６５、グローバルメモリストレージ内開始オフセット６６からなる。
【００４３】
ファイル名６２は、クラスタメモリファイルシステム内でファイルを一意に特定する名称である。エクステント番号６３は、グローバルメモリストレージ上で連続するひとつの割り当て単位をエクステントと呼び、ファイル内オフセットの小さい方から昇順に割り当てる「０」から始まるシーケンス番号である。グローバルメモリストレージがノードをまたがる場合には、クラスタメモリファイルシステムはその物理的な境界によってもエクステント分割してスペース管理を行う。ファイル内開始オフセット６４は、エクステント番号６３のファイルの先頭からのオフセットを示す。エクステントサイズ６５は、エクステント番号６３のサイズを示す。グローバルメモリストレージ内オフセット６６は、エクステント番号６３のエクステントが存在するグローバルメモリストレージの先頭からのオフセットを示す。
【００４４】
図７にファイル空間とグローバルメモリストレージ空間の対応例を示す。ノード１２Ａ、ノード１２Ｂ、ノード１２Ｃに各１０ＧＢ、合計３０ＧＢのグローバルメモリストレージ上にファイルＡを１５ＧＢ割り当て、次にファイルＢを１０ＧＢ割り当て、その次にファイルＡを５ＧＢ拡張した場合のファイルエクステントとグローバルメモリストレージ上の配置例を示している。
【００４５】
図７の（ａ）の矢印は、グローバルメモリストレージがノードをまたがる物理的な境界のオフセットを示している。（ａ）の矢印が指す位置は、ＧＭＳスペース管理データベース５１の開始オフセット５３に格納されるグローバルメモリストレージ内オフセットである。  （ｂ）の矢印は、ファイルのエクステント境界を指している。ファイルエクステントは、ファイルスペースの割り当て単位の先頭と（ａ）で示したグローバルメモリストレージの物理境界で分割して管理する。（ｂ）の矢印が指す位置は、ＣＭＦＳスペース管理データベース６１のファイル内開始オフセット６４に格納されるファイル内のオフセットである。（ｃ）の矢印は、（ｂ）のファイルのエクステント境界に対応するグローバルメモリストレージ内のオフセットを示している。（ｃ）の矢印が指す位置は、ＣＭＦＳスペース管理データベース６１のグローバルメモリストレージ内開始オフセット６６に格納されるグローバルメモリストレージ内オフセットである。
【００４６】
次に、グローバルメモリストレージの定義処理シーケンスについて図８に示す。グローバルメモリストレージの定義処理はクラスタシステム内の任意のノードで実行することができる。定義処理は定義パラメータの入力を受けると（ステップ８１）、管理デーモンに定義パラメータとともに定義要求メッセージを送信する（ステップ８２）。管理デーモンは定義要求メッセージを受信すると（ステップ８３）、受信した定義要求メッセージや定義パラメータに基づいて管理デーモン内の定義処理を開始し（ステップ８４）、ＧＭＳ定義データベース２１のグローバルメモリストレージ名２２に重複がないことをチェックする（ステップ８５）。重複がなければ新たな定義をＧＭＳ定義データベース２１に追加して（ステップ８６）、定義処理に正常終了のメッセージを返し、重複が検出された場合には定義エラーのメッセージを返して定義処理を終了する。
【００４７】
次に、グローバルメモリストレージの作成処理シーケンスについて図９に示す。グローバルメモリストレージの作成処理はクラスタシステム内の任意のノードで実行することができる。作成処理には定義済みのグローバルメモリストレージ名を入力し（ステップ９０１）、管理デーモンに作成要求メッセージを送信する（ステップ９０２）。管理デーモンのメッセージ受信処理は作成要求メッセージを受信すると（ステップ９０３）、管理デーモンの作成処理ルーチンを開始する（ステップ９０４）。作成処理ルーチンは、ＧＭＳ定義データベース２１を読み出して（ステップ９０５）、作成要求のあったグローバルメモリストレージのステータス２３が”定義状態”であるかどうかをチェックし（ステップ９０６）、”定義状態”ならば作成処理を続行するが、定義が存在しない場合やステータス２３が”定義状態”以外の場合には作成処理はエラー終了する。
【００４８】
後続の作成処理では、構成ノード群の各ノード上で領域確保処理を実行するため、リモートプロシジャコールで各ノードにＧＭＳ領域の確保を実行する（ステップ９０７、９０８）。確保した領域アドレスは管理デーモンに返信する（ステップ９０９）。管理デーモンは、構成ノード群のすべてのノードで領域確保に成功したことを確認すると（ステップ９１０）、各ノードの領域の開始アドレスとともにＧＭＳスペース管理データベース３１にＧＭＳスペース管理情報を格納し（ステップ９１１）、ＧＭＳ定義データベース２１のステータス２３を”使用可能状態”に変更する（ステップ９１２）。以上の処理シーケンスによってグローバルメモリストレージが使用可能状態となる。
【００４９】
ここで、クラスタシステムを再起動した場合の処理について述べる。クラスタシステムを再起動した場合、グローバルメモリストレージは再作成する必要があるが、個々のグローバルメモリストレージ作成処理を再起動ごとに実行するのは運用上システム管理者の負担となる。その際、必要に応じて、クラスタシステムの再起動の前に、グローバルメモリストレージ内のデータを各ノードの外部記憶装置に保存し、再起動後にグローバルメモリストレージ内にデータを復元する。
【００５０】
そこで、本発明ではシステム管理者の負担を軽減するために管理デーモン再起動時に自動的にＧＭＳ定義データベース２１を読み出して作成処理ルーチンを実行する。  これによりシステム管理者の介在なく、一度定義したグローバルメモリストレージはクラスタシステム再起動後に自動的に使用可能状態となる。
【００５１】
以上がグローバルメモリストレージの定義から作成までの処理に関する説明である。
【００５２】
次に、クラスタメモリファイルシステムのファイルオープン処理、ファイル入出力処理、ファイルクローズ処理の基本的な処理シーケンスについて説明する。
【００５３】
まず、図１０を用いてクラスタメモリファイルシステムのファイルオープン処理のシーケンスについて説明する。
【００５４】
アプリケーションプログラムがクラスタメモリファイルシステムのファイルにアクセスする場合には、まず、ファイルのオープン要求を発行する。クラスタメモリファイルシステムはオープン要求が新規作成か既存ファイルのオープンかを判断し（ステップ１００１）、新規作成であればまずファイル作成処理を実行（ステップ１００２）してからオープン処理を行うというシーケンスで処理する。
【００５５】
ファイル作成処理の詳細は図１１に示す。ファイル作成処理は管理デーモンにファイル作成要求メッセージを送信する（ステップ１１０１）。管理デーモンはファイル作成要求メッセージを受信すると（ステップ１１０２）、当該グローバルメモリストレージのＧＭＳスペース管理データベース５１を読み込み（ステップ１１０３）、当該クラスタメモリファイルシステムのＣＭＦＳスペース管理データベース６１を読み込む（ステップ１１０４）。ＧＭＳスペース管理データベース５１とＣＭＦＳスペース管理データベース６１から当該クラスタメモリファイルシステム内の空きスペースを検索し（ステップ１１０５）、要求量を満たす空きスペースがなければ割り当てエラーで作成処理を中断し（ステップ１１０６）、空きスペースがあれば新たに割り当てたファイルのファイル定義情報をファイル定義データベース４１に追加し（ステップ１１０７）、スペース情報をＣＭＦＳスペース管理データベース６１に追加する（ステップ１１０８）ことでファイルの作成処理を完了する。
【００５６】
ここで説明をオープン処理に戻す。オープン処理は管理デーモンにオープン要求メッセージを送信し（ステップ１００３）、管理デーモンのメッセージ受信処理はオープン要求メッセージを受信すると（ステップ１００４）、ファイルオープン処理ルーチンを開始する（ステップ１００５）。
【００５７】
まず、クライアント定義データベース３１を読み込み（ステップ１００６）、要求元ノードがクライアントノード群３３のノードか否かの判定を行い、クライアントノード群でないノードの場合にはオープン要求を拒否する（ステップ１００７）。次に、ファイル定義データベース４１から当該ファイルの定義情報を読み込み（ステップ１００８）、オープン要求を発行したアプリケーションのユーザが当該ファイルに対するアクセス権限を保有するかをファイルアクセス権限４５によって判定を行い、アクセス権限がなければオープン要求を拒否する（ステップ１００９）。
【００５８】
次に、オープン処理ルーチンはクラスタシステム内のアプリケーション間でのファイルアクセスの整合性を保つためにファイル排他制御を実行する。ファイル排他制御はｗｒｉｔｅモードオープン要求の場合はクラスタシステム内の単一プロセスのみにアクセスを許可し、ｒｅａｄモードオープン要求の場合はｒｅａｄモード要求のプロセス間でファイルの共有アクセスを許可する。まず、ｗｒｉｔｅモードオープン要求の場合は（ステップ１０１０）、当該ファイルのデータベース４１のオープンカウンタ４Ｂが１以上か（他プロセスがオープン中か）否かを判定し、他にオープン中のプロセスが存在すればオープン要求を拒否する（ステップ１０１１）。
【００５９】
ｒｅａｄモードオープン要求の場合は当該ファイルのデータベース４１のオープンモード４Ａがｗｒｉｔｅモードなら（他にｗｒｉｔｅモードでオープン中のプロセスが存在すれば）オープンを拒否し、ｒｅａｄモードオープンのプロセスだけが存在する場合には共有アクセスを許可する（ステップ１０１２）。
【００６０】
オープンが許可されたら、ファイル定義データベース４１のオープンカウンタ４Ｂを＋１してオープンモード４Ａに指定されたオープンモードを格納する（ステップ１０１３）。さらに、ＣＭＦＳスペース管理データベース６１から当該ファイルのスペース管理情報を読み込んで（ステップ１０１４）、ファイルマップテーブルを作成し（ステップ１０１５）、グローバルメモリストレージのスペース管理データベースから当該グローバルメモリストレージのスペース情報を読み込んで（ステップ１０１６）、ストレージマップテーブルを作成する（ステップ１０１７）。オープン要求元のクラスタメモリファイルシステムにファイルマップテーブルとストレージマップテーブルを送信して管理デーモンのオープン処理ルーチンを完了する。ファイルマップテーブルは、クラスタメモリファイルシステムがファイルオフセットをグローバルメモリストレージのオフセットに変換するために使用し、ストレージマップテーブルは、ＧＭＳドライバクライアントがグローバルメモリストレージのオフセットを物理的なノード位置とノード内アドレスに変換するために使用するものである。
【００６１】
クラスタメモリファイルシステムは、管理デーモンからのオープン処理結果を判定し（ステップ１０１８）、ファイルのオープンが成功していればストレージマップテーブルをＧＭＳドライバクライアントに登録する（ステップ１０１９）。クラスタメモリファイルシステムが自ノードのメモリにファイルマップテーブルをキャッシュする（ステップ１０２０）。  最後に、アプリケーションが以降の入出力処理でファイル識別に使用するファイル記述子をアプリケーションに返す（ステップ１０２１）。
【００６２】
次に、クラスタメモリファイルシステムの入出力処理のシーケンスについて図１２を用いて説明する。クラスタメモリファイルシステムは、アプリケーションから入出力要求を受けると、オープ処理で管理デーモンから受け取ったファイルマップテーブルを用いてファイル内の入出力データのオフセットをグローバルメモリオフセット内のオフセットに変換する（ステップ１２０１）。グローバルメモリストレージ内の位置が決定したら入出力要求ブロックを作成して（ステップ１２０２）、ＧＭＳドライバクライアントに入出力要求を発行する（ステップ１２０３）。
【００６３】
ＧＭＳドライバクライアントはストレージマップテーブルを用いて入出力要求ブロックに指定されたグローバルメモリストレージ内のオフセットを物理的なノード位置とノード内アドレスに変換する（ステップ１２０４）。これにより入出力経路を決定し該当ノードのＧＭＳドライバサーバに入出力要求を転送する（ステップ１２０５）。ＧＭＳドライバサーバは自ノードの指定アドレスに対して入出力を実行する（ステップ１２０６）。
【００６４】
図１３にファイルクローズ処理のシーケンスを示す。
【００６５】
アプリケーションからファイルのクローズ要求を受けると、クラスタメモリファイルシステムは管理デーモンにクローズ要求メッセージを送信する（ステップ１３０１）。管理デーモンはクローズ要求メッセージを受信すると（ステップ１３０２）、クローズ処理ルーチンを開始し（ステップ１３０３）、ファイル定義データベース４１の当該ファイルのオープンカウンタ４Ｂを−１して更新し（ステップ１３０４）、ファイル記述子を開放してクローズ処理を完了する。
【００６６】
次に、ノード障害発生時にデータを消失することなくアプリケーションのアクセスを続行可能とする高可用化の方法について図１４を用いて説明する。
【００６７】
管理デーモン１４０２はノード１４０１で動作しており、ノード監視ルーチンが定期的にノード間ネットワーク経由でパケットを送信しながらグローバルメモリストレージ構成ノード群の稼動状況を監視する。
【００６８】
本実施例ではグローバルメモリストレージ（ＧＭＳ）１４０７の構成ノード群はノード１４０８とノード１４１１で、ＧＭＳ定義データベース２１のミラー属性２６が有効になっている。グローバルメモリストレージのミラー属性を有効にすると、構成ノード群の各ＧＭＳ領域をひとつのボリュームとみなしてミラーリングを行う。
【００６９】
図１４の実施例においてはノード１４０８が正系でＧＭＳ領域１４１０がマスタボリューム、ノード１４１１が副系でＧＭＳ領域１４１３がミラーボリュームである。  障害が発生していない通常の状態では、アプリケーションプログラム１４０４がグローバルメモリストレージ１４０７のファイルに対してｗｒｉｔｅすると、クラスタメモリファイルシステム１４０５からＧＭＳドライバクライアント１４０６にｗｒｉｔｅ要求を発行する。
【００７０】
ＧＭＳドライバクライアント１４０６は、ストレージマップテーブルを参照してグローバルメモリストレージ内オフセットを、ＧＭＳ領域１４１０およびＧＭＳ領域１４１３のアドレスに変換して、ミラー属性２６に基づいてＧＭＳドライバサーバ１４０９とＧＭＳドライバサーバ１４１２の双方に対して同一データのｗｒｉｔｅ要求を発行する。また、アプリケーションプログラム１４０４がグローバルメモリストレージ１４０７のファイルに対してｒｅａｄするとクラスタメモリファイルシステム１４０５からＧＭＳドライバクライアント１４０６にｒｅａｄ要求を発行する。
【００７１】
ＧＭＳドライバクライアント１４０６は正系であるノード１４０８のＧＭＳドライバサーバ１４０９に対してのみｒｅａｄ要求を発行する。ここでＧＭＳドライバクライアント１４０６がｒｅａｄまたはｗｒｉｔｅ処理中に、ＧＭＳドライバサーバ１４０９から一定時間の応答なしを検出したとすると、ノード１４０８またはノード１４０８との通信経路で障害が発生したものと判断して正系の経路を閉塞し、以降のｗｒｉｔｅ要求は副系のＧＭＳドライバサーバ１４１２に対してのみ発行し、ｒｅａｄ要求先もＧＭＳドライバサーバ１４１２に経路切り替えを行う。このような部分閉塞の発生は上位のクラスタメモリファイルシステム１４０５やアプリケーションプログラム１４０４に通知することなく行われ、アプリケーションプログラム１４０４は障害によって中断することなく処理を続行することができる。
【００７２】
また、管理デーモン１４０２のノード監視によってもノード１４０８の障害が検出されて、管理デーモン１４０２はデータベース１４１４にアクセスし、当該グローバルメモリストレージのＧＭＳ定義データベース２１のステータス２３を部分閉塞し、閉塞パス２７にＧＭＳドライバサーバ１４０９への経路が閉塞された情報を記録する。これ以降にグローバルメモリストレージ１４０７上のファイルに対するオープン要求が発行された場合には、管理デーモンはＧＭＳ領域１４１３へのストレージマップテーブルのみをオープン要求元のクラスタメモリファイルシステムに送信する。
【図面の簡単な説明】
【００７３】
【図１】本発明の一実施例におけるクラスタメモリファイルシステムの概略構成を示すブロック図である。
【図２】グローバルメモリストレージ定義データベースを説明するためのブロック図である。
【図３】クライアント定義データベースを説明するためのブロック図である。
【図４】ファイル定義データベースを説明するためのブロック図である。
【図５】グローバルメモリストレージのスペース管理データベースを説明するためのブロック図である。
【図６】クラスタメモリファイルシステムのスペース管理データベースを説明するためのブロック図である。
【図７】ファイル空間とグローバルメモリストレージ空間の対応例を説明するためのブロック図である。
【図８】グローバルメモリストレージの定義処理手順を示すフローチャートである。
【図９】グローバルメモリストレージの作成処理手順を示すフローチャートである。
【図１０】クラスタメモリファイルシステムのオープン処理手順を示すフローチャートである。
【図１１】クラスタメモリファイルシステムのファイル作成手順を示すフローチャートである。
【図１２】クラスタメモリファイルシステムの入出力手順を示すフローチャートである。
【図１３】クラスタメモリファイルシステムのクローズ処理手順を示すフローチャートである。
【図１４】グローバルメモリストレージのミラーリングを説明するためのブロック図である。
【符号の説明】
【００７４】
１１…グローバルメモリストレージ（ＧＭＳ）、
１２Ａ，１２Ｂ，１２Ｃ，１２Ｄ，１２Ｅ，１２Ｆ  …  ノード、  
１３Ａ，１３Ｂ，１３Ｃ  …  ＧＭＳ領域、
１４Ｄ，１４Ｅ  …  アプリケーションプログラム、
１５Ｄ，１５Ｅ  …  ＧＭＳドライバクライアント、
１６Ａ，１６Ｂ，１６Ｃ  …  ＧＭＳドライバサーバ、
１７Ｄ，１７Ｅ  …  クラスタメモリファイルシステム（ＣＭＦＳ）、
１８  …  管理デーモン、
１９  …  データベース、
２１  …  グローバルメモリストレージ定義データベース、
２２  …  グローバルメモリストレージ名、
２３  …  ステータス、
２４  …  構成ノード群、
２５  …  グローバルメモリストレージ容量、
２６  …  ミラー属性、
２７  …  閉塞パス、
３１  …  クライアント定義データベース、
３２  …  グローバルメモリストレージ名、
３３  …  クライアントノード群
４１  …  ファイル定義データベース、
４２  …  ファイル名、
４３  …  グローバルメモリストレージ名、
４４  …  所有者ユーザＩＤ、
４５  …  所有者グループＩＤ、
４６  …  ファイルアクセス権限、
４７  …  ファイルサイズ、
４８  …  ファイル終端オフセット、
４９  …  増分単位、
４Ａ  …  オープンモード、
４Ｂ  …  オープンカウンタ、
５１  …  ＧＭＳスペース管理データベース、
５２  …  グローバルメモリストレージ名、
５３  …  開始オフセット、
５４  …  サイズ、
５５  …  ノード識別子、
５６  …  ノード内開始アドレス、
６１  …  ＣＭＦＳスペース管理データベース、
６２  …  ファイル名
６３  …  エクステント番号、
６４  …  ファイル内開始オフセット、
６５  …  エクステントサイズ、
６６  …  グローバルメモリストレージ内開始オフセット
【図１】
2005234919.tif 000003
【図２】
2005234919.tif 000004
【図３】
2005234919.tif 000005
【図４】
2005234919.tif 000006
【図５】
2005234919.tif 000007
【図６】
2005234919.tif 000008
【図７】
2005234919.tif 000009
【図８】
2005234919.tif 000010
【図９】
2005234919.tif 000011
【図１０】
2005234919.tif 000012
【図１１】
2005234919.tif 000013
【図１２】
2005234919.tif 000014
【図１３】
2005234919.tif 000015
【図１４】
2005234919.tif 000016