(57)【特許請求の範囲】
【請求項１】
ファイルを分散して管理する分散ファイルシステムにネットワークを介して参加するノード装置であって、
ファイルを分散して記憶するストレージノード装置または付加機能を提供する機能ノード装置であり、前記分散ファイルシステムを構成するノード装置のノードＩＤとアドレスとを対応付けする管理用ノードテーブルと、前記ストレージノード装置のノードＩＤとアドレスとを対応付けする検索用ノードテーブルとを記憶する記憶部と、
前記分散ファイルシステムへの各ノード装置の参加または離脱の通知情報を受信し、前記管理用ノードテーブルに記憶されている前記ノードＩＤに基づいて選択した前記アドレスをあて先として前記通知情報を送信する通知情報処理部と、
ストレージノード装置が参加したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記ストレージノード装置のノードＩＤとアドレスとを前記管理用ノードテーブルと前記検索用ノードテーブルとに書き込み、
機能ノード装置が参加したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記機能ノード装置のノードＩＤとアドレスとを前記管理用ノードテーブルのみに書き込み、
ストレージノード装置が離脱したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記ストレージノード装置のノードＩＤと対応するアドレスとを前記管理用ノードテーブルと前記検索用ノードテーブルとから削除し、
機能ノード装置が離脱したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記機能ノード装置のノードＩＤと対応するアドレスとを前記管理用ノードテーブルから削除するテーブル処理部と、
指定されたファイルＩＤと、前記検索用ノードテーブルに記憶されている前記ノードＩＤとに基づいて、前記ファイルＩＤを管理する前記ストレージノード装置のアドレスを取得するテーブル検索部と、
を備えることを特徴とするノード装置。
【請求項２】
前記管理用ノードテーブルに登録されている前記アドレスの前記ノード装置が離脱していないかを確認する安定化部をさらに備え、
前記テーブル処理部は、前記管理用ノードテーブルに登録されている前記アドレスの前記ノード装置が離脱したことを前記安定化部が検出した場合、前記管理用ノードテーブルと前記検索用ノードテーブルとから離脱したノード装置のノードＩＤとアドレスとを削除し、
前記通知情報処理部は、前記管理用ノードテーブルに記憶されている前記ノードＩＤに基づいて選択した前記アドレスをあて先として、前記安定化部が検出した前記ノード装置が離脱したことを表す通知情報を送信する、
ことを特徴とする請求項１に記載のノード装置。
【請求項３】
ファイルを記憶するファイル蓄積部と、
ファイルＩＤと、ファイルを記憶している前記ストレージノード装置のアドレスとを対応付けて記憶するキーテーブル蓄積部と、
指定されたファイルＩＤに対応した前記ストレージノード装置のアドレスを前記キーテーブル蓄積部から読み出して出力するキーテーブル操作部と、
ファイル名を指定した操作指示を受信し、前記ファイル名により特定される前記ファイル蓄積部内の前記ファイルに対する操作を行うファイル操作部と、
をさらに備えることを特徴とする請求項１または請求項２に記載のノード装置。
【請求項４】
前記キーテーブル蓄積部は、ステータスＩＤとステータス情報とを対応付けて記憶し、
自ノード装置のステータス情報を特定するステータスＩＤを前記テーブル検索部に渡し、前記ステータスＩＤに対応して前記テーブル検索部が取得したアドレスをあて先として前記ステータスＩＤ及び前記ステータス情報の登録要求を送信するステータス情報登録部をさらに備え、
前記キーテーブル操作部は、ステータスＩＤ及びステータス情報の登録要求を受信した場合、登録が要求された前記ステータスＩＤと前記ステータス情報とを対応付けて前記キーテーブル蓄積部に書き込み、ステータスＩＤを指定したステータス情報の要求を受信した場合、受信した前記ステータスＩＤに対応したステータス情報を前記キーテーブル蓄積部から読み出して出力し、
前記テーブル検索部は、ファイルＩＤの代わりに前記ステータスＩＤを用いて前記ストレージノード装置のアドレスを取得する、
ことを特徴とする請求項３に記載のノード装置。
【請求項５】
ファイル名を指定したファイル操作指示を受信し、受信したファイル名から生成されるファイルＩＤを前記テーブル検索部に渡し、前記ファイルＩＤに対応して前記テーブル検索部が取得したアドレスをあて先として前記ファイルＩＤを送信し、送信した前記ファイルＩＤに対応してファイルを記憶しているストレージノード装置のアドレスを受信し、受信したアドレスをあて先として前記ファイル名を指定したファイル操作指示を送信するファイル処理部をさらに備える、
ことを特徴とする請求項１または請求項２に記載のノード装置。
【請求項６】
分散ファイルシステム内の前記ストレージノード装置それぞれのステータス情報を特定するステータスＩＤを前記テーブル検索部に渡し、前記ステータスＩＤに対応して前記テーブル検索部が取得したアドレスをあて先として前記ステータスＩＤを送信し、ステータス情報を要求するステータス情報取得部と、
前記ステータス情報取得部の要求に応じて取得した前記ストレージノード装置のステータス情報に基づいて、ファイルの移動元及び移動先の前記ストレージノード装置と、移動容量とを決定する容量均等化計算部と、
前記容量均等化計算部によって決定されたファイル移動元の前記ストレージノード装置からファイル移動先の前記ストレージノード装置へ前記移動容量に基づいてファイルを移動するファイル移動部と、をさらに備え、
前記テーブル検索部は、ファイルＩＤの代わりに前記ステータスＩＤを用いて前記ストレージノード装置のアドレスを取得する、
ことを特徴とする請求項１または請求項２に記載のノード装置。
【請求項７】
前記ノード装置のステータス情報を特定するステータスＩＤを前記テーブル検索部に渡し、前記ステータスＩＤに対応して前記テーブル検索部が取得したアドレスをあて先として前記ステータスＩＤを送信し、ステータス情報を取得するステータス情報取得部と、
前記ステータス情報取得部が取得した前記ステータス情報を出力する情報提示部と、をさらに備え、
前記テーブル検索部は、ファイルＩＤの代わりに前記ステータスＩＤを用いて前記ストレージノード装置のアドレスを取得する、
ことを特徴とする請求項１または請求項２に記載のノード装置。
【請求項８】
前記管理用ノードテーブルにノードＩＤの追加または削除が行なわれたことを検出した場合に、ノード装置の参加または離脱を出力する情報提示部をさらに備える、
ことを特徴とする請求項１または請求項２に記載のノード装置。
【請求項９】
ファイルを分散して管理する分散ファイルシステムにネットワークを介して参加するノード装置として用いられるコンピュータを、
ファイルを分散して記憶するストレージノード装置または付加機能を提供する機能ノード装置であり、前記分散ファイルシステムを構成するノード装置のノードＩＤとアドレスとを対応付けする管理用ノードテーブルと、前記ストレージノード装置のノードＩＤとアドレスとを対応付けする検索用ノードテーブルとを記憶する記憶部と、
前記分散ファイルシステムへの各ノード装置の参加または離脱の通知情報を受信し、前記管理用ノードテーブルに記憶されている前記ノードＩＤに基づいて選択した前記アドレスをあて先として前記通知情報を送信する通知情報処理部と、
ストレージノード装置が参加したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記ストレージノード装置のノードＩＤとアドレスとを前記管理用ノードテーブルと前記検索用ノードテーブルとに書き込み、
機能ノード装置が参加したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記機能ノード装置のノードＩＤとアドレスとを前記管理用ノードテーブルのみに書き込み、
ストレージノード装置が離脱したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記ストレージノード装置のノードＩＤと対応するアドレスとを前記管理用ノードテーブルと前記検索用ノードテーブルとから削除し、
機能ノード装置が離脱したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記機能ノード装置のノードＩＤと対応するアドレスとを前記管理用ノードテーブルから削除するテーブル処理部と、
指定されたファイルＩＤと、前記検索用ノードテーブルに記憶されている前記ノードＩＤとに基づいて、前記ファイルＩＤを管理する前記ストレージノード装置のアドレスを取得するテーブル検索部、
として機能させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク上に分散されたノード間におけるファイルの分散管理に関し、特にＰ２Ｐ（Peer-to-Peer）型の分散ファイルシステムのノード装置及びコンピュータプログラムに関する。
【背景技術】
【０００２】
コンピュータではユーザが保存するデータをファイルと呼ばれる一連のデータの塊として取り扱う。このファイルはハードディスクドライブ等の蓄積装置に記録される。ファイルのどこのデータを蓄積装置のどの場所に記録したかを管理している部分をファイルシステムと呼び、ＯＳ（オペレーティングシステム）の一部として動作している。
分散ファイルシステムは、コンピュータネットワークで接続された複数のストレージサーバーを見かけ上１台の蓄積装置とみなして、ファイルの読み出しや書き込みなどのファイル操作を利用者に提供するシステムである。
【０００３】
分散ファイルシステムでは、保存したデータがどのストレージサーバーに保管されているかを管理する必要がある。管理方法は、大きく集中型と分散型に分けることができる。ここでは、分散型のファイル管理方法、特に、Ｐ２Ｐ（Peer-to-Peer）型のファイル管理方法について説明する。Ｐ２Ｐ型のファイル管理方法では、ファイル名とその保管先アドレスを一元管理しているサーバーが存在しないため、障害に強い特長を持つ。Ｐ２Ｐ型のファイル管理方法は、非構造型と構造型に分類されるが、以下に、ＤＨＴ（Distributed Hash Table）を使った構造型Ｐ２Ｐによるファイル管理技術を説明する。
【０００４】
ＤＨＴを使ったＰ２Ｐでは、複数のノードによりオーバーレイネットワークを構成する。ここで、ノードとは、オーバーレイネットワークに参加するサーバーなどの総称である。図２０は、ＤＨＴを用いたＰ２Ｐオーバーレイネットワークの原理を示す図である。同図に示す例では、円形のオーバーレイネットワークを形成している。オーバーレイネットワークに参加するノードは、例えば、ＳＨＡ（Secure Hash Algorithm）−１などのある決められたハッシュ関数によりノードＩＤを生成し、オーバーレイネットワーク内では、このノードＩＤにより各ノードを識別する。円形のオーバーレイネットワーク（図２０における実線の円）は、ノードＩＤをＩＤの数値が小さい順に時計周りに並べた状態を示している。また、各ノードが保有するファイルにはファイルＩＤを付与する。ファイルＩＤは、例えばファイル名を元にハッシュ関数を使って生成する。オーバーレイネットワーク内では、ファイルＩＤの値に時計回りに近いノードＩＤのノードがそのファイルを管理する。ここで、ファイルの管理とは、ファイルＩＤとそのファイルを保有するノードのアドレスを保存することである。
【０００５】
ファイルを保有するノードは、ファイルＩＤと自身のノードアドレスとの対応付けを、このファイルＩＤを管理すべきノードに登録する。ファイルの利用者は、利用したいファイルのファイルＩＤから、そのファイルＩＤに近いノードＩＤのノードをオーバーレイネットワーク上で発見し、その利用したいファイルを保有するノードのアドレスを知ることによって、ファイルにアクセスすることができる。
【０００６】
なお、ここではファイルＩＤをキーとし、ノードアドレスをそのキーに対応した値として、ＤＨＴによるＰ２ＰをファイルＩＤからファイルを保管するノードアドレスを取得するデータベースとして利用している。このＤＨＴによるＰ２Ｐは、キーからその値を検索する汎用的なKey-Value型データベースとして利用できる。
【０００７】
ファイルＩＤからそのファイルＩＤを管理するノード（ファイルを記憶しているノードではないことに注意）を検索するには、各ノードが、オーバーレイネットワークに参加しているノードを検索できることが必要である。そのため、各ノードは、ノードＩＤとノードアドレスとの対応付けを登録したノードテーブルを保持し、所望のファイルＩＤに近いノードを検索する。保持しているノードテーブルから所望のファイルＩＤの管理ノードを見つけられない場合には、他のノードに転送（ルーティング）することによって、最終的に参加ノードの中からファイルＩＤに近いノードを検索する。ＤＨＴを使ったＰ２Ｐでは、ノードテーブルの保持方法および、検索方法（検索要求のルーティング方法）により様々な方式が提案されている（例えば、非特許文献１参照）。ここでは、参加している全ノードを含むノードテーブルを、全ノードが保管する方式であるOneHopについて説明する（例えば、非特許文献２参照）。
【０００８】
OneHopでは、全ノードが全参加ノードの完全なテーブルを保持するため、各ノードが持つノードテーブルのサイズが大きくなる欠点があるが、検索時のルーティングを必要としないため高速な検索が実現できる。また、ノードテーブルを分散して管理するＰ２Ｐでは、オーバーレイネットワークに参加している全ノードを把握することが困難であるが、OneHopでは全参加ノードを容易に把握できるため、ノードの状態管理が必要な用途では有効な方式である。
【０００９】
OneHopでは、ノードの参加や離脱を、オーバーレイネットワーク内の全ノードへ通知することによって、全ノードが完全なノードテーブルを保持する。そのため、図２１に示すようにオーバーレイネットワークを均等にｋ個に分割し、各領域においてスライス・リーダー（Slice Leader）を決める。さらに、ｋ個に分割された領域内を、均等にｓ個に分割し、その分割したそれぞれにおいてユニット・リーダー（Unit Leader）を決める。ノードの参加や離脱を検知したノードは、まず、自領域のスライス・リーダーに通知する（ステップＳ１）。通知を受けたスライス・リーダーは、他の領域のスライス・リーダーに通知する（ステップＳ２）。通知を受けた各領域のスライス・リーダーは、自領域内のユニット・リーダーに通知する。このように、OneHopでは、階層的構造により、ノードの参加や離脱の情報をオーバーレイネットワーク内の全ノードに通知する。
【００１０】
以上説明したように、OneHopに限らずＤＨＴを使ったＰ２Ｐ型ファイル管理技術では、ファイルＩＤの検索にノードテーブルを利用するため、ノードの参加や離脱が発生した場合にも、各ノードが保持するノードテーブルを正しい状態にしておくことが必要である。しかし、ノードの参加や離脱の通知が正しく到達しないなどが原因で、ノードテーブルに不整合が生じる場合がある。その対応として、一般に各ノードはStabilization（安定化）と呼ばれる処理を行う。Stabilizationでは、各ノードが自身の保持するノードテーブルに記録されている各ノードに対して、それら各ノードが存在するかどうかを検出するための生存確認用のパケットを定期的に送信する。これによって、ノードの参加や離脱を検知し、各ノードが保持するノードテーブルのメンテナンスを行なう。
【００１１】
また、オーバーレイネットワークは、物理的なネットワークとは無関係にノードＩＤによって決められる仮想的なネットワークである。そのため、オーバーレイネットワーク上では隣接ノードであっても、物理的には遠距離に配置されたノードである場合もあるため、結果として物理ネットワーク上に多くのパケットが流れることになる。遠距離のノード間の通信量を減らす方法としてOneHop拡張方式が提案されている（例えば、特許文献１、非特許文献３参照）。
【００１２】
OneHop拡張方式では、これまで説明したような、ファイルＩＤから当該ファイルＩＤを管理するノードを検索するためのノードテーブルである検索用テーブルとは別に、物理ネットワーク上のノードの位置（ローカリティ）を考慮してノードを並べたノードテーブルである管理用テーブルを保持する。そして、その管理用テーブルを使ってノードの参加や離脱の通知、Stabilizationの通信を行うことで、遠距離のノード間の通信量を減少させる。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００９−２３０６８６号公報
【非特許文献】
【００１４】
【非特許文献１】首藤一幸, “スケールアウトの技術”, 情報処理, pp.1080-1085, Vol.50, No.11, 2009
【非特許文献２】A. Gupta, B. 他, “One Hop Lookups for Peer-to-Peer Overlays,” 9th Workshop on Hot Topics in Operating Systems (HotOS-IX), 2003.
【非特許文献３】金子、他, “ノードの局所性と管理の公平性を考慮したOneHop-Ｐ２Ｐ拡張方式”, RL-006, FIT2008, 2008
【発明の概要】
【発明が解決しようとする課題】
【００１５】
分散ファイルシステムでは、ファイルの保管場所の管理だけでなく、利用者が分散ファイルシステムに接続するためのアクセス機能、ファイルを保持（ストレージ）するノードである各ストレージノードの使用容量を均等化する容量負荷分散機能、オーバーレイネットワークに参加しているノードの状況を把握するための管理機能など、様々な機能の追加が求められる。その場合、利用者の増減に応じてアクセス負荷分散を行うためにアクセス機能を持ったノードを増減させるなど、状況に応じて機能の追加、削除が必要になる。
【００１６】
一方、上記において説明したように、ＤＨＴを用いたＰ２Ｐ型のファイル管理技術では、ノードの参加や離脱が発生すると、参加や離脱したノードの隣接ノードが管理するファイルＩＤの範囲が変わるため、各ノードが持つノードテーブルが古い状態（不整合な状態）の間は、所望のファイルＩＤを管理するノードを発見できないという問題がある。また、ファイルＩＤの管理ノードが変更になった場合、新しい管理ノードにファイルＩＤに対するノードの情報（ファイルの保管先のサーバーアドレスなど）が正しく登録されるまでの間もファイルＩＤを発見できないという問題がある。
【００１７】
ノードテーブルの不整合はStabilizationにより自動的に修正することができるが、修正されるまでには時間がかかるため、修正が行なわれている間はファイル（ファイルＩＤ）の検索に障害が生じてしまう。
つまり、ストレージノードと、ファイルストレージ以外の個別の機能を持った機能ノードとからなる分散ファイルシステムにおいては、必要に応じて機能ノードを頻繁にオーバーレイネットワークに参加、離脱させると、ファイルＩＤを管理するノードが頻繁に変更になってしまい、ファイルを記憶しているストレージノード自体には参加や離脱が発生しなくても、ファイルＩＤを検索できない期間が増大するという問題がある。
【００１８】
ノードの参加、離脱による検索障害に対応するために、ファイルＩＤの登録を管理ノードだけでなく近隣のノードにも登録しておく方法や、ノードの参加、離脱時に隣接ノードとの間でノードテーブルをコピーするなどの方法が提案されているが、いずれもその処理のためにノードに処理負荷や、ノード間の通信負荷が発生する。
【００１９】
本発明は、このような事情を考慮してなされたもので、その目的は、ファイルストレージ以外の機能を持ったノードが、他のノードやネットワークに負荷をかけずに、かつ、ファイルの検索に影響を及ぼすことなく、参加や離脱を行なうことが可能な分散ファイルシステムのノード装置及びコンピュータプログラムを提供することにある。
【課題を解決するための手段】
【００２０】
［１］  本発明の一態様は、ファイルを分散して管理する分散ファイルシステムにネットワークを介して参加するノード装置であって、ファイルを分散して記憶するストレージノード装置または付加機能を提供する機能ノード装置であり、前記分散ファイルシステムを構成するノード装置のノードＩＤとアドレスとを対応付けする管理用ノードテーブルと、前記ストレージノード装置のノードＩＤとアドレスとを対応付けする検索用ノードテーブルとを記憶する記憶部と、前記分散ファイルシステムへの各ノード装置の参加または離脱の通知情報を受信し、前記管理用ノードテーブルに記憶されている前記ノードＩＤに基づいて選択した前記アドレスをあて先として前記通知情報を送信する通知情報処理部と、ストレージノード装置が参加したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記ストレージノード装置のノードＩＤとアドレスとを前記管理用ノードテーブルと前記検索用ノードテーブルとに書き込み、機能ノード装置が参加したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記機能ノード装置のノードＩＤとアドレスとを前記管理用ノードテーブルのみに書き込み、ストレージノード装置が離脱したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記ストレージノード装置のノードＩＤと対応するアドレスとを前記管理用ノードテーブルと前記検索用ノードテーブルとから削除し、機能ノード装置が離脱したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記機能ノード装置のノードＩＤと対応するアドレスとを前記管理用ノードテーブルから削除するテーブル処理部と、指定されたファイルＩＤと、前記検索用ノードテーブルに記憶されている前記ノードＩＤとに基づいて、前記ファイルＩＤを管理する前記ストレージノード装置のアドレスを取得するテーブル検索部と、を備えることを特徴とするノード装置である。
この発明によれば、ネットワークを介して接続される複数のノード装置から構成される分散ファイルシステムにおいて、各ノード装置は、ファイル検索用のノードテーブルと、ノード装置管理用のノードテーブルを保持し、ファイルを保管するストレージノード装置については、検索用のノードテーブル及び管理用のノードテーブルにノード情報を登録し、付加機能を有するノード装置については、管理用のノードテーブルにのみノード情報を登録する。
これにより、分散ファイルシステムの稼働中であっても、ファイル管理に影響を及ぼすことなく、ファイル記憶以外の個別の機能を有するノードの追加や削除が可能となる。また、検索用ノードテーブルを同期させる必要がないため、ネットワークやノード装置に負荷がかからない。
【００２１】
［２］  本発明の一態様は、上述するノード装置であって、前記管理用ノードテーブルに登録されている前記アドレスの前記ノード装置が離脱していないかを確認する安定化部をさらに備え、前記テーブル処理部は、前記管理用ノードテーブルに登録されている前記アドレスの前記ノード装置が離脱したことを前記安定化部が検出した場合、前記管理用ノードテーブルと前記検索用ノードテーブルとから離脱したノード装置のノードＩＤとアドレスとを削除し、前記通知情報処理部は、前記管理用ノードテーブルに記憶されている前記ノードＩＤに基づいて選択した前記アドレスをあて先として、前記安定化部が検出した前記ノード装置が離脱したことを表す通知情報を送信する、ことを特徴とする。
この発明によれば、分散ファイルシステムから離脱したノード装置を検出し、検索用のノードテーブルと管理用のノードテーブルからこの離脱したノード装置の情報を削除するとともに、他のノード装置へも当該ノード装置の離脱を通知する。
これにより、ノード装置が分散ファイルシステムから離脱するときに、他のノード装置へ離脱を通知しなくとも、検索用のノードテーブルと管理用のノードテーブルを更新することができる。
【００２２】
［３］  本発明の一態様は、上述するノード装置であって、ファイルを記憶するファイル蓄積部と、ファイルＩＤと、ファイルを記憶している前記ストレージノード装置のアドレスとを対応付けて記憶するキーテーブル蓄積部と、指定されたファイルＩＤに対応した前記ストレージノード装置のアドレスを前記キーテーブル蓄積部から読み出して出力するキーテーブル操作部と、ファイル名を指定した操作指示を受信し、前記ファイル名により特定される前記ファイル蓄積部内の前記ファイルに対する操作を行うファイル操作部と、をさらに備えることを特徴とする。
この発明によれば、ノード装置は、分散ファイルシステムにおける管理対象のファイルを記憶するとともに、ファイルが記憶されているストレージノード装置のアドレスを管理する。そして、ファイルＩＤを受信すると、該ファイルＩＤのファイルを記憶しているストレージノード装置のアドレスを返送する。また、自身が記憶しているファイルに対して、他のノード装置から指示されたファイル操作を行なう。
これにより、ノード装置は、ストレージノード装置として機能し、分散ファイルシステムにおける管理対象のファイルの所在を管理するとともに、他のノード装置から自身が記憶しているファイルに対するファイル操作を可能とする。
【００２３】
［４］  本発明の一態様は、上述するノード装置であって、前記キーテーブル蓄積部は、ステータスＩＤとステータス情報とを対応付けて記憶し、自ノード装置のステータス情報を特定するステータスＩＤを前記テーブル検索部に渡し、前記ステータスＩＤに対応して前記テーブル検索部が取得したアドレスをあて先として前記ステータスＩＤ及び前記ステータス情報の登録要求を送信するステータス情報登録部をさらに備え、前記キーテーブル操作部は、ステータスＩＤ及びステータス情報の登録要求を受信した場合、登録が要求された前記ステータスＩＤと前記ステータス情報とを対応付けて前記キーテーブル蓄積部に書き込み、ステータスＩＤを指定したステータス情報の要求を受信した場合、受信した前記ステータスＩＤに対応したステータス情報を前記キーテーブル蓄積部から読み出して出力し、前記テーブル検索部は、ファイルＩＤの代わりに前記ステータスＩＤを用いて前記ストレージノード装置のアドレスを取得する、ことを特徴とする。
この発明によれば、ノード装置は、各ノード装置のステータス情報を分散管理し、問合せがあった場合には、管理しているステータス情報を出力する。
これにより、ストレージノード装置として機能するノード装置において、分散ファイルシステム内の各ストレージノード装置のステータス情報を分散し管理し、ストレージノード装置の使用ディスク容量を均等化する容量負荷分散ノード装置として機能するノード装置や、各ノード装置のステータス情報をユーザに提供する管理ノード装置として機能するノード装置にステータス情報を通知することができる。
【００２４】
［５］  本発明の一態様は、上述するノード装置であって、ファイル名を指定したファイル操作指示を受信し、受信したファイル名から生成されるファイルＩＤを前記テーブル検索部に渡し、前記ファイルＩＤに対応して前記テーブル検索部が取得したアドレスをあて先として前記ファイルＩＤを送信し、送信した前記ファイルＩＤに対応してファイルを記憶しているストレージノード装置のアドレスを受信し、受信したアドレスをあて先として前記ファイル名を指定したファイル操作指示を送信するファイル処理部をさらに備える、ことを特徴とする。
この発明によれば、クライアント装置からファイル操作指示を受信し、検索用ノードテーブルを利用してファイル操作対象のファイルの所在を検索し、検索の結果得られたストレージノード装置にファイル操作指示を出力する。
これにより、ノード装置はアクセスノード装置として機能し、クライアント装置に対して、分散ファイルシステムで管理しているファイルへのファイル操作を可能とする。
【００２５】
［６］  本発明の一態様は、上述するノード装置であって、分散ファイルシステム内の前記ストレージノード装置それぞれのステータス情報を特定するステータスＩＤを前記テーブル検索部に渡し、前記ステータスＩＤに対応して前記テーブル検索部が取得したアドレスをあて先として前記ステータスＩＤを送信し、ステータス情報を要求するステータス情報取得部と、前記ステータス情報取得部の要求に応じて取得した前記ストレージノード装置のステータス情報に基づいて、ファイルの移動元及び移動先の前記ストレージノード装置と、移動容量とを決定する容量均等化計算部と、前記容量均等化計算部によって決定されたファイル移動元の前記ストレージノード装置からファイル移動先の前記ストレージノード装置へ前記移動容量に基づいてファイルを移動するファイル移動部と、をさらに備え、前記テーブル検索部は、ファイルＩＤの代わりに前記ステータスＩＤを用いて前記ストレージノード装置のアドレスを取得する、ことを特徴とする。
この発明によれば、分散ファイルシステム内の各ストレージノード装置のステータス情報を取得し、取得したステータス情報に基づいて、各ストレージノード装置における使用ディスク容量が均等に近づくよう、ストレージノード装置間でファイルを移動させる。
これにより、容量負荷分散ノード装置として機能するノード装置は、ユーザによる操作を必要とせず、分散ファイルシステム内の各ストレージノード装置のディスク使用率が均等に近づくように調整することができる。例えば、ファイル未登録のストレージノード装置を分散ファイルシステムに参加させた場合、管理者が明示的にファイル移動を指示しなくとも、ディスク使用率が高いストレージノード装置から新たに参加したストレージノード装置へファイルを移動させることができる。
【００２６】
［７］  本発明の一態様は、上述するノード装置であって、前記ノード装置のステータス情報を特定するステータスＩＤを前記テーブル検索部に渡し、前記ステータスＩＤに対応して前記テーブル検索部が取得したアドレスをあて先として前記ステータスＩＤを送信し、ステータス情報を取得するステータス情報取得部と、前記ステータス情報取得部が取得した前記ステータス情報を出力する情報提示部と、をさらに備え、前記テーブル検索部は、ファイルＩＤの代わりに前記ステータスＩＤを用いて前記ストレージノード装置のアドレスを取得する、ことを特徴とする。
この発明によれば、検索用ノードテーブルを用いて、各ストレージノード装置のステータス情報を記憶しているストレージノード装置を検索し、この検索の結果得られたストレージノード装置から読み出したステータス情報を提示する。
これにより、ノード装置は管理ノード装置として機能し、利用者に指示されたストレージノード装置のステータス情報を提示することができる。
【００２７】
［８］  本発明の一態様は、上述するノード装置であって、前記管理用ノードテーブルにノードＩＤの追加または削除が行なわれたことを検出した場合に、ノード装置の参加または離脱を出力する情報提示部をさらに備える、ことを特徴とする。
この発明によれば、ノード装置は、管理用ノードテーブルにノードＩＤが登録された場合はノード装置の参加を、ノードＩＤが削除された場合はノード装置の離脱を出力する。
これにより、ノード装置は管理ノード装置として機能し、分散ファイルシステムにノード装置が参加または離脱したことを利用者に提示することができる。
【００２８】
［９］  本発明の一態様は、ファイルを分散して管理する分散ファイルシステムにネットワークを介して参加するノード装置として用いられるコンピュータを、ファイルを分散して記憶するストレージノード装置または付加機能を提供する機能ノード装置であり、前記分散ファイルシステムを構成するノード装置のノードＩＤとアドレスとを対応付けする管理用ノードテーブルと、前記ストレージノード装置のノードＩＤとアドレスとを対応付けする検索用ノードテーブルとを記憶する記憶部と、前記分散ファイルシステムへの各ノード装置の参加または離脱の通知情報を受信し、前記管理用ノードテーブルに記憶されている前記ノードＩＤに基づいて選択した前記アドレスをあて先として前記通知情報を送信する通知情報処理部と、ストレージノード装置が参加したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記ストレージノード装置のノードＩＤとアドレスとを前記管理用ノードテーブルと前記検索用ノードテーブルとに書き込み、機能ノード装置が参加したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記機能ノード装置のノードＩＤとアドレスとを前記管理用ノードテーブルのみに書き込み、ストレージノード装置が離脱したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記ストレージノード装置のノードＩＤと対応するアドレスとを前記管理用ノードテーブルと前記検索用ノードテーブルとから削除し、機能ノード装置が離脱したことを表す通知情報を前記通知情報処理部が受信した場合には、前記通知情報に基づいて前記機能ノード装置のノードＩＤと対応するアドレスとを前記管理用ノードテーブルから削除するテーブル処理部と、指定されたファイルＩＤと、前記検索用ノードテーブルに記憶されている前記ノードＩＤとに基づいて、前記ファイルＩＤを管理する前記ストレージノード装置のアドレスを取得するテーブル検索部、として機能させることを特徴とするコンピュータプログラムである。
【発明の効果】
【００２９】
本発明によれば、ネットワークを介して接続される複数のノード装置によって構成される分散ファイルシステムにおいて、各ノード装置がファイル検索用の検索用ノードテーブルと、ノード装置管理用の管理用ノードテーブルとを保持し、ファイルを保管するノード装置については、検索用ノードテーブル及び管理用のノードテーブルにノード情報を登録し、ファイルを保管せず個別の機能を有するノード装置については、管理用ノードテーブルにのみノード情報を登録することにより、分散ファイルシステムの稼働中であっても、ファイル管理に影響を及ぼすことなく、個別の機能を有するノード装置の追加や削除が可能となる。また、検索用ノードテーブルを同期させる必要がないため、ネットワークやノード装置へ高い負荷をかけることがない。
【図面の簡単な説明】
【００３０】
【図１】本発明の一実施形態による分散ファイルシステムの構成図である。
【図２】同実施形態によるノード装置の内部構成を示すブロック図である。
【図３】同実施形態によるノードテーブル管理部の詳細な構成を示すブロック図である。
【図４】同実施形態による管理用ノードテーブルおよび検索用ノードテーブルの例を説明する図である。
【図５】同実施形態による要求パケット及び応答パケットの構造を示す図である。
【図６】同実施形態による要求パケット及び応答パケットの固有データの内容を示す図である。
【図７】同実施形態によるＮＯＴＩＦＹ受信処理の流れ図である。
【図８】同実施形態によるストレージノード装置の固有機能処理部の構成を示すブロック図である。
【図９】同実施形態によるキーテーブルの例を示すブロック図である。
【図１０】同実施形態による低レベルインタフェース部において提供されるインタフェース関数の一覧である。
【図１１】同実施形態によるファイル情報登録部の動作の流れ図である。
【図１２】同実施形態によるステータス情報登録部の動作の流れ図である。
【図１３】同実施形態によるアクセスノード装置の固有機能処理部の構成を示すブロック図である。
【図１４】同実施形態による高レベルインタフェース部において提供されるインタフェース関数の一覧である。
【図１５】同実施形態による容量負荷分散ノード装置の固有機能処理部の構成を示すブロック図である。
【図１６】同実施形態によるステータス情報取得部の動作の流れ図である。
【図１７】同実施形態による容量均等化計算部の動作の流れ図である。
【図１８】同実施形態による容量均等化計算部の動作の流れ図である。
【図１９】同実施形態による管理ノード装置の固有機能処理部の構成を示すブロック図である。
【図２０】Ｐ２Ｐ方式におけるコンテンツの分散管理を説明する図である。
【図２１】OneHopにおける情報の通知方法を説明する図である。
【発明を実施するための形態】
【００３１】
以下、図面を参照しながら本発明の実施形態を詳細に説明する。
【００３２】
[１．  全体説明]
図１は、本発明の一実施の形態による分散ファイルシステムの構成図である。同図において、分散ファイルシステムは、ストレージノード装置１００、アクセスノード装置２００、容量負荷分散ノード装置３００、管理ノード装置４００を、通信ネットワーク１を介して接続することによって構成される。通信ネットワーク１は、ルータなどの通信装置やケーブルなどの通信線等の各種ネットワーク装置から構成されるＩＰ（Internet Protocol）通信網である。同図に示す分散ファイルシステムにおいては、複数のストレージノード装置１００として、ストレージノード装置１００ａ、１００ｂ、１００ｃが示されている。なお、アクセスノード装置２００、容量負荷分散ノード装置３００、管理ノード装置４００が複数存在してもよい。
【００３３】
ストレージノード装置１００は、分散ファイルシステムにおいて管理対象となるファイルを記憶する。アクセスノード装置２００、容量負荷分散ノード装置３００、管理ノード装置４００はそれぞれ、ファイルストレージ以外の個別の機能を提供する。以下、ストレージノード装置１００、アクセスノード装置２００、容量負荷分散ノード装置３００、及び、管理ノード装置４００を総称して「ノード装置」と記載し、アクセスノード装置２００、容量負荷分散ノード装置３００、及び、管理ノード装置４００を総称して「機能ノード装置」と記載する。これらの機能ノード装置が提供する機能を付加機能という。付加機能は、分散ファイルシステムへ提供される、ファイルを記憶する機能以外の付加的な機能である。
【００３４】
本実施形態のノード装置はノードを実行する装置であり、ノードとはコンピュータ内のプロセスに相当する。１台のコンピュータ装置が１つのノード装置のみを備える場合もあり、１台のコンピュータ装置が２以上のノード装置を備えることにより、１台のコンピュータ装置において機能の異なる複数のノードが実行される場合もある。
【００３５】
利用者は、アクセスノード装置２００に接続されたクライアント装置２を介して、分散ファイルシステム内のファイルを操作することができる。１台のコンピュータ装置がクライアント装置２のみを備える場合もあり、１台のコンピュータ装置において、アクセスノード装置２００などのノード装置とクライアント装置２を備える場合もある。
【００３６】
本実施形態による分散ファイルシステムは、通信ネットワーク１を介して接続されるノード装置によりオーバーレイネットワークを実現する。オーバーレイネットワークに参加する各ノード装置は、ノードテーブルとして、ファイル検索に用いる検索用ノードテーブルと、オーバーレイネットワークに参加している全てのノード装置の管理に用いる管理用ノードテーブルとを記憶する。そして、ストレージノード装置１００については、検索用ノードテーブル及び管理用ノードテーブルの両方に登録し、機能ノード装置については管理用ノードテーブルのみに登録する。ノード装置は、検索用ノードテーブルのみを用いて、ＤＨＴ（Distributed Hash Table）を使ったＰ２Ｐと同様に、ファイルＩＤを管理するノード装置の検索を行なう。これにより、機能ノード装置の参加や離脱が生じた場合にも、ファイルＩＤの検索が滞るなどの影響を及ぼさないようにすることが可能となる。
【００３７】
[２．  ノード装置の構成]
図２は、ノード装置の構成を示すブロック図であり、本発明と関係する機能ブロックのみ抽出して示している。同図に示すように、ストレージノード装置１００、アクセスノード装置２００、容量負荷分散ノード装置３００、及び、管理ノード装置４００の各ノード装置は、ノードテーブル管理部１０、固有機能処理部２０、ネットワークインタフェース部３０、記憶部４０を備えて構成される。全てのノード装置は、固有機能処理部２０を除き、共通な構成である。
【００３８】
記憶部４０は、ハードディスク装置や半導体メモリなどで実現され、管理用ノードテーブル４１と検索用ノードテーブル４２を記憶する。管理用ノードテーブル４１は、オーバーレイネットワークに参加している全ノード装置のノードＩＤ及びノードアドレスの対応付けを示す。検索用ノードテーブル４２は、ストレージノード装置１００のノードＩＤ及びノードアドレスの対応付けを示す。
【００３９】
ネットワークインタフェース部３０は、通信ネットワーク１を介したデータの送受信インタフェースを提供する。ネットワークインタフェース部３０は、通信ネットワーク１から受信したデータを各部へ出力したり、各部から指示に従って通信ネットワーク１を介してデータを送信したりする。ノードテーブル管理部１０は、他のノード装置との間で、ノード装置の参加及び離脱の通知メッセージを交換し、記憶部４０内の管理用ノードテーブル４１、検索用ノードテーブル４２を更新する。固有機能処理部２０は、記憶部４０内の管理用ノードテーブル４１、検索用ノードテーブル４２を利用して、ストレージノード装置１００、アクセスノード装置２００、容量負荷分散ノード装置３００、管理ノード装置４００などのノード装置の種類に応じた機能を実行する。
【００４０】
[２．１  ノードテーブル管理部１０の内部構成]
図３は、図２に示すノード装置のノードテーブル管理部１０の内部構成を示すブロック図であり、本発明と関係する機能ブロックのみ抽出して示している。同図に示すように、ノードテーブル管理部１０は、通知処理部１２（通知情報処理部）、安定化（Stabilization）処理部１３、テーブル処理部１４を備えて構成される。
通知処理部１２は、ネットワークインタフェース部３０を介して他のノードの通知処理部１２との間で、ノード装置の参加および離脱を表す通知情報として通知メッセージを交換する。安定化処理部１３は、記憶部４０内の管理用ノードテーブル４１及び検索用ノードテーブル４２を正しく維持するために、ネットワークインタフェース部３０を介して他のノード装置との間で存在確認を行う。テーブル処理部１４は、通知処理部１２または安定化処理部１３からノード装置の参加、離脱の通知を受け、記憶部４０内の管理用ノードテーブル４１および検索用ノードテーブル４２を書き換える。
【００４１】
[２．２  テーブル構成]
図４は、記憶部４０に記憶される管理用ノードテーブル４１及び検索用ノードテーブル４２の設定例を示す図である。同図に示すように、管理用ノードテーブル４１には、オーバーレイネットワークに参加している全てのノード装置のノードＩＤを示すキー値と、そのノードＩＤにより特定されるノード装置のノードアドレスを示すデータとが対応付けて登録されている。
【００４２】
一方、検索用ノードテーブル４２には、オーバーレイネットワークに参加しているストレージノード装置１００のノードＩＤを示すキー値と、そのノードＩＤにより特定されるストレージノード装置１００のノードアドレスを示すデータとが対応付けて登録されている。
管理用ノードテーブル４１、検索用ノードテーブル４２においては、ノードＩＤが小さい順に並べられている。
【００４３】
[２．３  ノード装置間の通信パケット]
図５は、通知処理部１２および安定化処理部１３が他のノード装置と交換する通信パケット（通知情報）の構造を示す図である。同図に示すように、通信パケットは、コマンド種別または応答種別と、送信先アドレス、送信元アドレス、及び、固有データとから構成される。本実施形態の通信パケットには、要求パケットと、要求パケットに対する応答である応答パケットとがある。要求パケットのコマンドの種類には「ＪＯＩＮ」、「ＰＩＮＧ」、「ＮＯＴＩＦＹ」があり、応答パケットの応答種別には、「ＯＫ」、「ＮＧ」がある。
【００４４】
図６は、図５に示す通信パケットの固有データの内容を示す図である。同図に示すように、固有データの内容は、コマンドの種別により異なる。
ＪＯＩＮコマンド及びＰＩＮＧコマンドの場合、ノードＩＤ、機能種別、及び、ノードアドレスが固有データに設定され、ＮＯＴＩＦＹコマンドの場合、ホストＩＤ、機能種別、ノードアドレス、動作種別、及び、通知モードが固有データに設定される。また、ＪＯＩＮコマンドの応答の場合、管理用ノードテーブルが固有データに設定される。ＰＩＮＧコマンド、ＮＯＴＩＦＹコマンドの応答には、固有データは設定されない。
機能種別は、例えば、「ストレージノード」、「アクセスノード」、「容量負荷分散ノード」、「管理ノード」などを示し、動作種別は、「参加（ＪＯＩＮ）」、または、「離脱（ＬＥＡＶＥ）」のいずれかを示す。
以下に、各コマンドについて説明する。
【００４５】
[２．３．１  ＪＯＩＮコマンド]
ＪＯＩＮコマンドは、ノード装置がオーバーレイネットワークに参加する場合に用いる。ＪＯＩＮコマンドの要求パケット（以下、「要求パケット（ＪＯＩＮ）」と記載する。）には、オーバーレイネットワークに参加したノード装置のノードＩＤ、機能種別、ノードアドレスが固有データとして格納される。また、ノードＩＤは、あらかじめ決められたハッシュ関数により生成される。例えば、ＳＨＡ−１のハッシュ関数を使ってノードアドレス（ノード装置のＩＰドレスとポート番号の組み合わせ）のハッシュ値を算出し、その算出したハッシュ値をノードＩＤとする。
ＪＯＩＮコマンドが成功すると、要求パケット（ＪＯＩＮ）を受信したノード装置において記憶されている管理用ノードテーブル４１が、ＪＯＩＮコマンドに対する応答種別「ＯＫ」の応答パケット（以下、「応答パケット（ＯＫ）」と記載する。）の固有データに格納され、要求パケット（ＪＯＩＮ）の送信元ノード装置に返送される。
【００４６】
[２．３．２  ＰＩＮＧコマンド]
ＰＩＮＧコマンドは、ノード装置の生存確認を行うために用いる。ＰＩＮＧコマンドの要求パケット（以下、「要求パケット（ＰＩＮＧ）」と記載する。）には、ＰＩＮＧコマンド送信元のノード装置のノードＩＤ、機能種別、ノードアドレスが固有データとして格納される。ノード装置が、相手先のノード装置へ要求パケット（ＰＩＮＧ）を送信し、その応答パケット（ＯＫ）を受信することによって、生存確認対象のノード装置の存在を確認する。また、要求パケット（ＰＩＮＧ）を受信したノード装置は、要求パケット（ＰＩＮＧ）の送信元のノード装置が自身の保持するノードテーブルに存在しない場合、ノードテーブルに送信元のノード装置のノードＩＤとノードアドレスを追加する。
【００４７】
[２．３．２  ＮＯＴＩＦＹコマンド]
ＮＯＴＩＦＹコマンドは、ノード装置の参加、離脱をオーバーレイネットワーク上の全ノード装置に通知するために用いる。ＮＯＴＩＦＹコマンドの要求パケット（以下、「要求パケット（ＮＯＴＩＦＹ）」と記載する。）には、参加または離脱したノード装置のノードＩＤ、機能種別及びノードアドレスと、動作種別、通知モードが格納される。通知モードは、OneHopにおける通知の段階を示すものであり、図２１において説明した各ステップに相当する。すなわち、通知モード「１」は、通報元からスライス・リーダー（Slice Leader）への通知（図２１のステップＳ１）を、通知モード「２」は、スライス・リーダーから他のスライス・リーダーへの通知（図２１のステップＳ２）を、通知モード「３」は、スライス・リーダーからユニット・リーダー（Unit Leader）への通知（図２１のステップＳ３）を表す。通知モード「４」は、ユニット・リーダーからその配下のノードへの通知を表す。
【００４８】
[２．４  ノードテーブル管理部１０の動作]
続いて、ノードテーブル管理部１０の各部の動作について説明する。
【００４９】
[２．４．１  通知処理部１２の動作]
通知処理部１２は、ＪＯＩＮコマンドおよびＮＯＴＩＦＹコマンドの送信および受信処理を行う。
【００５０】
［２．４．１．１  ＪＯＩＮコマンド送信処理］
ノード装置が新規にオーバーレイネットワークに参加する場合、該ノード装置の通知処理部１２は、すでにオーバーレイネットワークに参加している他のノード装置に要求パケット（ＪＯＩＮ）を送信する。参加通知先の他のノード装置のノードアドレスを取得する方法は任意であり、例えば、利用者が入力してもよく、通信ネットワーク１上に検索パケットを送信し、すでにオーバーレイネットワークに参加しているノード装置から検索パケットに対応した応答を受信することにより取得してもよい。通知処理部１２は、送信した要求パケット（ＪＯＩＮ）の応答パケット（ＯＫ）を受信すると、受信した応答パケット（ＯＫ）の固有データに格納された管理用ノードテーブルをテーブル処理部１４に出力し、ノードテーブルの更新を指示する。
【００５１】
［２．４．１．２  ＪＯＩＮコマンド受信処理］
通知処理部１２は、オーバーレイネットワークに新規に参加した他のノード装置から要求パケット（ＪＯＩＮ）を受信すると、受信した要求パケット（ＪＯＩＮ）の固有データをノード情報としてテーブル処理部１４に出力し、ノードテーブルの更新を指示する。さらに、通知処理部１２は、記憶部４０から管理用ノードテーブル４１を読み出すと、ＪＯＩＮコマンドの応答パケット（ＯＫ）の固有データにこの読み出した管理用ノードテーブル４１を格納し、要求パケット（ＪＯＩＮ）の送信元ノード装置に返送する。さらに、通知処理部１２は、動作種別に「参加（ＪＯＩＮ）」を、通知モードに「１（通報元からスライス・リーダーへの通知）」をセットした要求パケット（ＮＯＴＩＦＹ）を生成し、スライス・リーダーとなるノード装置へ送信する。
上記処理によって送信された要求パケット（ＮＯＴＩＦＹ）を受信したノード装置の通知処理部１２は、受信したパケットの通知モードに応じて、さらにＮＯＴＩＦＹパケットを送信する。
【００５２】
［２．４．１．３  ＮＯＴＩＦＹコマンド受信処理］
図７は、通知処理部１２におけるＮＯＴＩＦＹコマンドの受信処理の流れ図を示す。
通知処理部１２は、他のノード装置から要求パケット（ＮＯＴＩＦＹ）を受信すると、受信した要求パケット（ＮＯＴＩＦＹ）の固有データをノード情報としてテーブル処理部１４に出力し、ノードテーブルの更新を指示する（ステップＳ１２−１）。このときのテーブル処理部１４の動作の詳細は後述する。
【００５３】
通知処理部１２は、受信した要求パケット（ＮＯＴＩＦＹ）のモードが「１（通報元からスライス・リーダーへの通知）」であると判断した場合（ステップＳ１２−２：ＹＥＳ）、当該要求パケット（ＮＯＴＩＦＹ）の固有データを読み出して通知モードを「２（スライス・リーダーから他のスライス・リーダーへの通知）」に書き換え、この書き換えた固有データを設定した要求パケット（ＮＯＴＩＦＹ）を全スライス・リーダーに送信する（ステップＳ１２−３）。
【００５４】
通知処理部１２は、受信した要求パケット（ＮＯＴＩＦＹ）のモードが「２」であると判断した場合（ステップＳ１２−２：ＮＯ，Ｓ１２−４：ＹＥＳ）、当該要求パケット（ＮＯＴＩＦＹ）から固有データを読み出して通知モードを「３（スライス・リーダーからユニット・リーダーへの通知）」に書き換え、この書き換えた固有データを設定した要求パケット（ＮＯＴＩＦＹ）を自ノード装置が所属するユニット（領域）のユニット・リーダーに送信する（ステップＳ１２−５）。
【００５５】
通知処理部１２は、受信した要求パケット（ＮＯＴＩＦＹ）のモードが「３」であると判断した場合（ステップＳ１２−２：ＮＯ，Ｓ１２−４：ＮＯ、ステップＳ１２−６：ＹＥＳ）、当該要求パケット（ＮＯＴＩＦＹ）から固有データを読み出して通知モードを「４」に書き換え、この書き換えた固有データを設定した要求パケット（ＮＯＴＩＦＹ）を自ノード装置が所属するユニット（領域）内の全ノード装置に送信する（ステップＳ１２−７）。
【００５６】
［２．４．１．４  スライス・リーダー、ユニット・リーダーの決定方法］
通知処理部１２は、管理用ノードテーブル４１に登録されているノード装置によって構成されるオーバーレイネットワークをｋ個の領域に分割し、それぞれの分割領域内のノード装置の１台をスライス・リーダーとして選択する。通知処理部１２は、このｋ個に分割された領域をさらにｓ個に分割し、その領域内のノード装置の１台をユニット・リーダーとする。各領域内でのスライス・リーダー、ユニット・リーダーの選択方法は任意であるが、例えば、各領域内においてノードＩＤが最小のノード装置をスライス・リーダー、ユニット・リーダーとして選択する方法などがある。例えば、ｋ＝２５６（２８）、ｓ＝１６（２４）で分割する場合、ノードＩＤの上位８ビットをスライス番号、上位９ビット目から１２ビット目までの４ビットをユニット番号として領域を分割することができるので、それぞれの領域における最小値のノードＩＤを持つノードをスライス・リーダー、ユニット・リーダーと決めるなどの方法がある。
【００５７】
[２．４．２  安定化処理部１３の動作]
安定化処理部１３は、ノード装置の生存確認を行うことで、オーバーレイネットワークの構造を維持する。
【００５８】
[２．４．２．１  ＰＩＮＧコマンドの送信処理］
安定化処理部１３は、記憶部４０に記憶されている管理用ノードテーブル４１を参照し、管理用ノードテーブル４１に登録されているノード装置に対し、順にＰＩＮＧコマンドの要求パケット（ＰＩＮＧ）を定期的に送信する。
【００５９】
具体的には、所定の時間毎に生存確認処理が起動されると、安定化処理部１３は、管理用ノードテーブル４１から登録されているノード装置のノードアドレスを順に読み出し、この読み出したノードアドレスを送信先アドレスとして要求パケット（ＰＩＮＧ）を送信する。送信した要求パケット（ＰＩＮＧ）に対する応答を受信した場合、安定化処理部１３は、次の生存確認対象のノード装置へ要求パケット（ＰＩＮＧ）を送信する。
【００６０】
一方、送信した要求パケット（ＰＩＮＧ）に対する応答がなかった場合、安定化処理部１３は、要求パケット（ＰＩＮＧ）の送信先のノード装置が離脱したものとして、動作種別に「離脱（ＬＥＡＶＥ）」を設定し、通知モードに「１（通知元からスライス・リーダー）」を設定した要求パケット（ＮＯＴＩＦＹ）をスライス・リーダーへ送信する。これによって、オーバーレイネットワークを構成する全ノード装置にノード装置の離脱を通知する。その後、次の生存確認対象のノード装置へ要求パケット（ＰＩＮＧ）を送信する。
【００６１】
[２．４．２．２  ＰＩＮＧコマンドの受信処理］
安定化処理部１３は、他のノード装置から要求パケット（ＰＩＮＧ）を受信した場合、受信した要求パケット（ＰＩＮＧ）内の固有データに格納されている情報をノード情報としてテーブル処理部１４に出力し、ノードテーブルの更新を指示する。その後、安定化処理部１３は、要求パケット（ＰＩＮＧ）の送信元へ応答パケット（ＯＫ）を返送する。
【００６２】
[２．４．３  テーブル処理部１４の動作]
テーブル処理部１４は、記憶部４０に記憶された管理用ノードテーブル４１と検索用ノードテーブル４２の変更を行う。
本実施形態では、管理用ノードテーブルにはオーバーレイネットワークに参加している全ノード装置を登録し、検索用ノードテーブルにはストレージノード装置１００のみを登録することを特徴としている。これを実現するため、テーブル処理部１４は、通知処理部１２あるいは安定化処理部１３から動作種別が「参加（ＪＯＩＮ）」のノード情報を受信した場合、このノード情報に含まれている機能種別が「ストレージノード」である場合には、ノード情報に含まれているノードＩＤ及びノードアドレスの組みを管理用ノードテーブル４１および検索用ノードテーブル４２に書き込み、機能種別が「アクセスノード」、「容量負荷分散ノード」、「管理ノード」などの機能ノードである場合には、ノード情報に含まれているノードＩＤ及びノードアドレスの組みを管理用ノードテーブル４１のみに書き込む。このとき、テーブル処理部１４は、テーブル内でノードＩＤの値が小さい順となるように書き込みを行なう。
【００６３】
また、テーブル処理部１４は、通知処理部１２あるいは安定化処理部１３から動作種別が「離脱（ＬＥＡＶＥ）」のノード情報を受信した場合、このノード情報に設定されているノードＩＤ及びノードアドレスの組を、管理用ノードテーブル４１および検索用ノードテーブル４２から削除する。ただし、ノード情報に含まれている機能種別が機能ノードを示している場合、検索用ノードテーブル４２に削除対象のノードＩＤ及びノードアドレスの組みは登録されていないため、実際には削除は行なわれない。
また、テーブル処理部１４は、通知処理部１２から管理用ノードテーブルを受信した場合、この受信した管理用ノードテーブルを記憶部４０に書き込む。
【００６４】
[２．５  本実施形態のノード装置の効果]
以上の動作により、オーバーレイネットワークに頻繁に機能ノード装置の参加、離脱が生じたとしても、検索用ノードテーブル４２には変化がないため、ファイルＩＤの検索動作には影響が生じない。また、検索用ノードテーブル４２は、管理用ノードテーブルを更新するための情報に基づいて生成可能であるため、ノード間の通信量は従来のOneHopと変わらない。
【００６５】
なお、本実施形態では、管理用ノードテーブル４１のノードの並びはノードＩＤの小さい順で並べることで説明を行ったがこれに限定されるものではない。例えば、非特許文献３に記載されているように、ノードの物理的な位置の情報が含まれるローカルノードＩＤを使うことによって、物理的に離れたノード間のパケット量を減少させることが可能である。また、非特許文献３に記載されているように、ストレージノード装置の性能により、仮想ノードＩＤを生成して検索用ノードテーブル４２に登録することで、処理負荷をストレージノード装置の性能に比例させることが可能である。
【００６６】
[３．  各ノード装置の固有機能]
次に、ストレージノード装置１００、アクセスノード装置２００、容量負荷分散ノード装置３００、管理ノード装置４００の固有機能の動作について説明する。各ノード装置の固有機能の動作は、図２に示す固有機能処理部２０の動作によって決定される。
【００６７】
[３．１  ストレージノード装置１００の固有機能]
[３．１．１  固有機能処理部の構成]
図８は、ストレージノード装置１００の固有機能処理部１２０の構成を示す図であり、図２に示す固有機能処理部２０に相当する。同図に示すストレージノード装置１００の固有機能処理部１２０は、低レベルインタフェース部１０１、キーテーブル操作部１０２、ファイル操作部１０３、ファイル情報登録部１０４、ステータス情報登録部１０５、テーブル検索部１０６、キーテーブル蓄積部１０７、及び、ファイル蓄積部１０８を備えて構成される。キーテーブル蓄積部１０７及びファイル蓄積部１０８は、ハードディスク装置や半導体メモリなどで実現される。
【００６８】
キーテーブル蓄積部１０７は、key（キー）とvalue（値）との対応付けを示すキーテーブルを記憶する。キーテーブルには、ＤＨＴ（分散ハッシュテーブル、Distributed Hash Table）によるＰ２Ｐ（Peer-to-Peer）が構成するKey-Value型データベースのうち、自ストレージノード装置１００が管理する範囲のKey-Value値を記憶する。本実施形態の分散ファイルシステムでは、Ｐ２ＰによるKey-Value型データベースをファイルＩＤの管理に用いるため、キーテーブルには、keyとしてファイルを特定するファイルＩＤが設定され、valueとしてファイルを保存しているストレージノード装置１００のノードアドレスが設定される。また、キーテーブルには、各ノード装置の各種ステータス情報もまた設定される。この場合、keyとしてストレージノード装置１００及びステータス情報の種類を特定するステータスＩＤが設定され、valueとしてテータス情報が設定される。ステータス情報は、例えば、ファイル蓄積装置１０８の最大蓄積容量であるディスク容量、ファイル蓄積装置１０８の使用ディスク容量、ストレージノード装置１００のＣＰＵ負荷、ファイル蓄積部１０８に記憶されているファイル数など、ストレージノード装置１００に関する様々な情報である。
ファイル蓄積部１０８は、分散ファイルシステムにおいて操作対象となるファイルを記憶する。
【００６９】
低レベルインタフェース部１０１は、ネットワークインタフェース部３０を介して、自ストレージノード装置１００のキーテーブル蓄積部１０７に記憶されているキーテーブル、および、自ストレージノード装置１００のファイル蓄積部１０８に記録されているファイルを操作するためのインタフェースを提供する。キーテーブル操作部１０２は、低レベルインタフェース部１０１が提供するキーテーブル操作用のインタフェースに対応した処理を実行し、キーテーブル蓄積部１０７に記憶されているキーテーブルに対するキーの登録や検索を行う。ファイル操作部１０３は、低レベルインタフェース部１０１が提供するファイル操作用のインタフェースに対応した処理を実行し、ファイル蓄積部１０８内に記録されたファイルの読み出し、書き込み、削除や、ファイルのリストの取得を行なう。
【００７０】
ファイル情報登録部１０４は、ファイル蓄積部１０８内に記憶されているファイルのファイルＩＤと、自ストレージノード装置１００のノードアドレスを、このファイルＩＤを管理するストレージノード装置１００が保持しているキーテーブルに登録する。ステータス情報登録部１０５は、自ストレージノード装置１００のステータス情報を定期的に、このステータス情報を管理するストレージノード装置１００が保持しているキーテーブルに登録する。テーブル検索部１０６は、記憶部４０に保存されている検索用ノードテーブル４２を参照して、指定されたＩＤに時計回りに近いノードＩＤを特定し、その特定したノードＩＤに対応付けられているノードアドレスを読み出して出力する。
【００７１】
図９は、キーテーブル蓄積部１０７に記憶されるキーテーブルを示す図である。同図に示すように、キーテーブルは、キー（key）と、値（value）とを対応付けたレコードからなる。ここで、キーは、ファイルを一意に特定するファイルＩＤ、または、ステータス情報名とノード装置の組み合わせを特定するステータスＩＤである。
ファイルＩＤは、例えば、所定のハッシュ関数を用いてファイル名から生成したハッシュ値を用いることができる。キー（key）がファイルＩＤの場合、当該ファイルＩＤにより特定されるファイルを記憶しているストレージノード装置１００のノードアドレスが対応する値（value）として設定される。
一方、ステータスＩＤは、例えば、所定のハッシュ関数を用いて、ステータス情報名とノードアドレスとを結合したデータから生成したハッシュ値を用いることができる。ステータス情報名は、例えば、ディスク容量、使用ディスク容量、ＣＰＵ負荷などのステータス情報の種類を表す名前である。キー（key）がステータスＩＤの場合、ステータスＩＤにより特定されるノード装置及びステータス情報の種類に対応したステータス情報が値（value）として設定される。
【００７２】
図１０は、低レベルインタフェース部１０１が提供するインタフェースを示す。同図に示すように、低レベルインタフェース部１０１は、キーテーブル操作用としてgetおよびput、ファイル操作用としてlow_read、low_write、low_delete、ファイルリスト取得用としてget_listの各インタフェースを提供する。引数のinおよびoutはデータの通信方向を示しており、inはインタフェースの呼び出し側が設定する値、outは呼び出し側へ返答される値を示している。
【００７３】
getは、キーテーブル蓄積部１０７に記憶されているキーテーブルから引数keyに対応した値（value）を読み出し、呼び出し元に引数valueとして出力するインタフェースである。
putは、キーテーブル蓄積部１０７に記憶されているキーテーブルに、引数key及び引数valueの組を書き込むインタフェースである。
【００７４】
low_readは、ファイル蓄積部１０８に記憶されているファイルからデータを読み出すインタフェースである。引数fnameは、データ読み出し対象ファイルのファイル名を示す。引数offsetは、データの読み出しを行なう先頭位置を示し、ファイルの先頭からのバイト数が設定される。引数sizeは、読み出すデータのバイトサイズを示す。また、引数dataは、読み出されたデータを示す。
low_writeは、ファイル蓄積部１０８に記憶されているファイルへデータを書き込むインタフェースである。引数fnameは、データ書き込み対象ファイルのファイル名を示す。引数offsetは、データの書き込みを行なう先頭位置を示し、ファイルの先頭からのバイト数が設定される。引数sizeは、書き込むデータのバイトサイズを示し、引数dataは、ファイルに書き込むデータを示す。
【００７５】
low_deleteは、ファイル蓄積部１０８に記憶されているファイルを削除するインタフェースである。引数fnameは、削除対象ファイルのファイル名を示す。
get_listは、ファイル蓄積部１０８に記憶されているファイルのリストを提供するインタフェースである。引数flistは、ファイル蓄積部１０８に記憶されているファイルのファイル名とサイズとを関連付けたリストを示す。
【００７６】
[３．１．２  キーテーブル操作部１０２の動作]
キーテーブル操作部１０２は、低レベルインタフェース部１０１のgetおよびputインタフェースに対する処理を行う。キーテーブル操作部１０２は、低レベルインタフェース部１０１のputインタフェースが呼び出された場合、引数key及び引数valueとして指定された（key, value）値の組をキーテーブル蓄積部１０７に記憶されているキーテーブルに登録する。一方、低レベルインタフェース部１０１のgetインタフェースが呼び出された場合、キーテーブル操作部１０２は、引数keyに対する値（value）をキーテーブル蓄積部１０７に記憶されているキーテーブルから検索して読み出し、getインタフェースの呼び出し元のノード装置に返送する。
【００７７】
[３．１．３  ファイル操作部１０３の動作]
ファイル操作部１０３は、低レベルインタフェース部１０１のlow_read、low_write、low_delete、get_listの各インタフェースに対する処理を行う。ファイル操作部１０３は、低レベルインタフェース部１０１のlow_writeインタフェースが呼び出された場合、ファイル蓄積部１０８に記憶されている引数fnameのファイル名のファイルに、ファイルの先頭から引数offsetで示されるバイト数だけ進んだ位置を開始位置として、引数sizeで示されるバイト数のデータを書き込む。指定されたファイルが存在しない場合は、新たにファイルを作成し、データを書き込む。
【００７８】
一方、低レベルインタフェース部１０１のlow_readインタフェースが呼び出された場合、ファイル操作部１０３は、ファイル蓄積部１０８に記憶されている引数fnameがファイル名のファイルの先頭から、引数offsetで示されるバイト数だけすすんだ位置を開始位置として、引数sizeで示されるバイトのデータを読み出して引数dataに設定し、low_readインタフェースの呼び出し元のノード装置に返送する。
【００７９】
また、低レベルインタフェース部１０１のlow_deleteインタフェースが呼び出された場合、ファイル操作部１０３は、引数fnameがファイル名であるファイルをファイル蓄積部１０８から削除する。
また、低レベルインタフェース部１０１のget_listインタフェースが呼び出された場合、ファイル操作部１０３は、ファイル蓄積部１０８に記憶されている全ファイルのファイル名とサイズを読み出し、読み出したファイル名とサイズのリストを呼び出し元のノード装置に返送する。
【００８０】
[３．１．４  ファイル情報登録部１０４の動作]
ファイル情報登録部１０４は、ファイル蓄積部１０８内に記憶されているファイルのファイルＩＤをキー（key）とし、自ストレージノード装置１００のノードアドレスを値（value）とした（key, value）値の組を、Ｐ２Ｐが構成するKey-Value型データベースへ登録する。
【００８１】
図１１は、ファイル情報登録部の１０４の動作の流れ図を示す。同図に示す流れ図は、ファイル蓄積部１０８に蓄積された１つのファイルに対する登録動作であり、ファイル情報登録部１０４は、ファイル蓄積部１０８に蓄積されたファイル数だけ繰り返しこの動作を行う。なお、ファイル情報登録部１０４は、定期的に、あるいは、ファイル蓄積部１０８に新たなファイルが書き込まれたときに起動される。
【００８２】
まず、ファイル情報登録部１０４は、ファイル蓄積部１０８に記憶されているファイルのファイル名からファイルＩＤを生成する（ステップＳ１０４−１）。ファイルＩＤの生成方法には、例えばファイル名からＳＨＡ−１ハッシュ関数により生成する方法がある。次に、生成したファイルＩＤから、そのファイルＩＤを登録すべきノード装置を検索する（ステップＳ１０４−２）。検索は、テーブル検索部１０６が行う。テーブル検索部１０６は、記憶部４０に保存されている検索用ノードテーブル４２から、指定されたファイルＩＤに時計回りに近いノードＩＤを検索し、そのノードアドレスを返す。次に、ファイル情報登録部１０４は、テーブル検索部１０６から検索結果として出力されたノードアドレスにより特定される登録先のノード装置に対してputインタフェースの実行を要求する（ステップＳ１０４−３）。putインタフェースの引数keyには生成したファイルＩＤが設定され、引数valueには自ストレージノード装置１００のノードアドレスが設定される。これにより、（ファイルＩＤ，ノードアドレス）の組を、生成したファイルＩＤの管理ノードであるストレージノード装置１００に登録する。
【００８３】
[３．１．５  ステータス情報登録部１０５の動作]
ステータス情報登録部１０５は、ストレージノード装置１００のステータス情報を定期的にＰ２ＰによるKey-Value型データベースに登録する。ステータス情報登録部１０５が、あらかじめ決められたキーを使ってこれらの情報を登録しておくことで、他のノード装置からストレージノード装置１００の様々なステータス情報を取得できるようにする。
【００８４】
図１２は、ステータス情報登録部１０５の動作の流れ図を示す。
ステータス情報登録部１０５が起動される際に、ステータス情報の種類を示すステータス情報名が、ステータス情報と共に入力される。ディスク容量、ディスクの使用容量、ＣＰＵ負荷などのステータス情報は、例えば、ノード装置を実装するストレージノード装置１００が有するリソース管理機能部によって取得することができる。ステータス情報登録部１０５は、はじめにキーを生成する(Ｓ１０５−１)。ステータスＩＤは、ステータス情報の種別を表す予め決められたステータス情報名と、自ストレージノード装置１００のノードアドレスとの組み合わせから、ＳＨＡ−１等のハッシュ関数により生成したハッシュ値とする。例えば、ディスク容量であれば、「DISKCAPA_ノードアドレス」、ＣＰＵの負荷であれば「CPU_ノードアドレス」などをハッシュ関数の入力とし、ハッシュ値を算出する。
【００８５】
ステータス情報登録部１０５は、ハッシュ関数により作られたステータスＩＤを使ってステータス情報をＰ２ＰのKey-Value型データベースに登録するため、テーブル検索部１０６により当該ステータスＩＤを管理するノード装置を検索する（ステップＳ１０５−２）。すなわち、テーブル検索部１０６は、記憶部４０に保存されている検索用ノードテーブル４２から、指定されたステータスＩＤに時計回りに近いノードＩＤを検索し、そのノードアドレスを返す。ステータス情報登録部１０５は、テーブル検索部１０６から検索結果として出力されたノードアドレスの登録先ストレージノード装置１００に対してputインタフェースの実行を要求し、ステータス情報を登録する（ステップＳ１０５−３）。putインタフェースの引数keyには生成したステータスＩＤが設定され、引数valueにはステータス情報が設定される。
【００８６】
［３．１．６  ストレージノード装置１００の効果］
以上説明したように、固有機能処理部１２０を有するストレージノード装置１００により、ＤＨＴを使ったＰ２Ｐによる分散ファイルシステムを構築することができる。
【００８７】
[３．２  アクセスノード装置２００の固有機能]
[３．２．１  固有機能処理部の構成]
図１３は、アクセスノード装置２００の固有機能処理部２２０の構成を示す図であり、図２に示す固有機能処理部２０に相当する。
アクセスノード装置２００の固有機能処理部２２０は、高レベルインタフェース部２０１、ファイル処理部２０２、テーブル検索部２０３を備えて構成される。
【００８８】
高レベルインタフェース部２０１は、分散ファイルシステム内のストレージノード装置１００に保管されているファイルを操作するためのインタフェースを提供する。クライアント装置２は、通信ネットワーク１を介してこのインタフェースを使用することで、分散ファイルシステム内のファイルを操作することができる。ファイル処理部２０２は、高レベルインタフェース部２０１が受信したインタフェースに従って、操作対象ファイルの操作を行なう。テーブル検索部２０３は、ストレージノード装置１００のテーブル検索部１０６と同様の機能を有し、記憶部４０に保存されている検索用ノードテーブル４２を参照して、指定されたファイルＩＤに時計回りに近いノードＩＤを特定し、その特定したノードＩＤに対応付けられているノードアドレスを読み出して出力する。
【００８９】
図１４は、高レベルインタフェース部２０１が提供するインタフェースを示す。同図に示すように、高レベルインタフェース部２０１は、hi_read、及び、hi_writeインタフェースを提供する。
hi_readは、指定されたファイル名のファイルからデータを読み出すインタフェースである。引数fnameは、データ読み出し対象ファイルのファイル名を示す。引数offsetは、データを読み出す先頭位置を示し、ファイルの先頭からのバイト数が設定される。引数sizeは、読み出すデータのバイトサイズを示す。また、引数dataは、読み出されたデータを示す。
hi_writeは、指定されたファイル名のファイルへデータを書き込むインタフェースである。引数fnameは、データ書き込み対象ファイルのファイル名を示す。引数offsetは、データを書き込む先頭位置を示し、ファイルの先頭からのバイト数が設定される。引数sizeは、書き込むデータのバイトサイズを示し、引数dataは、ファイルに書き込むデータを示す。
【００９０】
[３．２．２  固有機能処理部２２０の動作]
アクセスノード装置２００において、クライアント装置２から高レベルインタフェース部２０１のhi_readインタフェースまたはhi_writeインタフェースの実行が要求されると、ファイル処理部２０２は、高レベルインタフェース部２０１に要求されたインタフェースについての実際の処理を行う。
【００９１】
クライアント装置２によって高レベルインタフェース部２０１のhi_readインタフェースが呼び出された場合、ファイル処理部２０２は、引数fnameとして指定されたファイル名fnameから、ファイルＩＤを生成する。ファイルＩＤの生成には、例えば、ＳＨＡ−１などのあらかじめ決められたハッシュ関数を用いる。次に、ファイル処理部２０２は、テーブル検索部２０３にファイルＩＤを出力し、ノードアドレスを要求する。テーブル検索部２０３は、受信したファイルＩＤをテーブル検索部２０３に出力し、当該ファイルＩＤを管理するストレージノード装置１００のノードアドレスを検索する。テーブル検索部２０３は、受信したファイルＩＤによって記憶部４０に記憶されている検索用ノードテーブル４２を検索してノードアドレスを取得すると、ファイル処理部２０２に出力する。
【００９２】
ファイル処理部２０２は、テーブル検索部２０３が検索の結果取得したノードアドレスを用いて、ファイルＩＤを管理しているストレージノード装置１００の低レベルインタフェース部１０１にgetインタフェースの実行を要求する。getインタフェースの引数keyには、ファイルＩＤが設定される。getインタフェースの実行が要求されたストレージノード装置１００は、キーテーブル蓄積部１０７に記憶されているキーテーブルから引数keyに対応した値を読み出し、引数valueとして返送する。この引数valueは、ファイルＩＤにより特定されるファイルを記憶しているストレージノード装置１００のノードアドレスを示す。
【００９３】
ファイル処理部２０２は、getインタフェースの引数valueにより示されるノードアドレスを用いて、操作対象のファイルを記憶しているストレージノード装置１００の低レベルインタフェース部１０１に、low_readインタフェースの実行を要求し、ファイルの読み出し処理を行う。low_readインタフェースの引数fname, offset, sizeには、hi_readインタフェースの引数fname, offset, sizeが設定される。low_readインタフェースの実行を受信したストレージノード装置１００は、実行結果の引数dataを返送する。アクセスノード装置２００のファイル処理部２０２は、ストレージノード装置１００から返送された引数dataをhi_readインタフェースの実行要求元のクライアント装置２へ出力する。
【００９４】
また、高レベルインタフェース部２０１のhi_writeインタフェースが呼び出された場合も、hi_readインタフェースが呼び出された場合と同様の処理を行ない、ファイルを記憶しているストレージノード装置１００の低レベルインタフェース部１０１に対して、low_writeインタフェースの実行を指示し、ファイルの書き込み処理を行う。low_writeインタフェースの引数fname, offset, size, dataには、hi_writeインタフェースの引数fname, offset, size, dataが設定される。low_writeインタフェースの実行が要求されたストレージノード装置１００は、low_writeインタフェースを実行する。
【００９５】
[３．２．３  アクセスノード装置２００の効果]
以上説明した固有機能処理部２２０を有するアクセスノード装置２００により、クライアント装置２から、本実施形態の分散ファイルシステムに保存されているファイルの操作が可能となる。アクセスノード装置２００は、高レベルインタフェース部２０１を介して、複数のクライアント装置２に対して、分散ファイルシステムへのアクセスを提供することができる。
【００９６】
本実施形態によるアクセスノード装置２００を用いることにより、クライアント装置２が増加した場合、アクセスノード装置２００を分散ファイルシステムに追加し、分散ファイルシステムへのアクセスの負荷を分散することが可能となる。また、クライアント装置２の数が減少した場合には、アクセスノード装置２００を離脱させ、無駄なアクセスノードを削除することができる。本実施形態では、アクセスノード装置２００の追加、離脱は、分散ファイルシステムのファイル管理を滞らせることがない。従って、アクセスノード装置２００の参加及び離脱は、稼働中の分散ファイルシステムにおいてどのタイミングにおいて行っても問題ない。また、アクセスノード装置２００とクライアント装置２を同一のコンピュータ上で稼動させることも可能であり、その場合には、他のクライアント装置２からのアクセスが無い、高速なファイル操作が可能となる。
【００９７】
なお、本実施形態では、アクセスノード装置２００が提供する高レベルインタフェース部２０１はhi_read、hi_writeインタフェースのような基本的なインタフェースのみについて述べたが、ファイル処理部２０２に、金子他, “構造型Ｐ２Ｐを使った分散ファイルシステムにおける分散ディレクトリ管理手法”, L-033, FIT2009, 2009（参考文献１）にあるように、ディレクトリファイルによる分散管理方法を用いることで、本実施形態の分散ファイルシステムを、ディレクトリ構造をもったファイルシステムとして提供することも可能である。例えば、分散ファイルシステム内で一意なファイル名が付与されたｉノードファイル、ディレクトリファイル、データファイルを分散してストレージノード装置１００のファイル蓄積装置１０８に記憶しておく。ディレクトリファイルは、配下のディレクトリ名とディレクトリファイルのファイル名との対応関係、および、配下のユーザ利用ファイル名とデータファイルのファイル名との対応関係に関する管理情報を含む。ｉノードファイルは、ディレクトリファイルまたはデータファイルのファイル名を含む。データファイルは、ファイル本体である。アクセスノード装置２００は、クライアント装置２からディレクトリ名及びユーザ利用ファイル名によるファイル操作要求を受信する。アクセスノード装置２００は、ルートディレクトリに対応したｉノードファイルから順に、ｉノードファイル、及び、ディレクトリファイルをストレージノード装置１００より読み出して、ディレクトリ名及びユーザ利用ファイル名に対応したデータファイル名を取得すると、このデータファイル名のデータファイル本体を保持するストレージノード装置１００に対して、クライアント装置２から要求されたファイル操作を要求する。なお、ｉノードファイル、ディレクトリファイルの読み出しや、データファイルのファイル操作は、ｉノードファイル、ディレクトリファイル、データファイルのファイル名から生成したファイルＩＤに基づいて、上述した実施形態と同様に行なう。
【００９８】
[３．３  容量負荷分散ノード装置３００の固有機能]
[３．３．１  固有機能処理部の構成]
容量負荷分散ノード装置３００は、分散ファイルシステム内のストレージノード装置１００が備えるファイル蓄積部１０８の使用率を均等に近づける機能ノード装置である。
図１５は、容量負荷分散ノード装置３００の固有機能処理部３２０の構成を示す図であり、図２に示す固有機能処理部２０に相当する。容量負荷分散ノード装置３００の固有機能処理部３２０は、ステータス情報取得部３０１、容量均等化計算部３０２、ファイル移動部３０３、テーブル検索部３０４を備えて構成される。
【００９９】
ステータス情報取得部３０１は、分散ファイルシステム内の各ストレージノード装置１００のステータス情報を取得する。容量均等化計算部３０２は、ステータス情報取得部３０１が取得したステータス情報に基づいて、各ストレージノード装置１００のファイル蓄積部１０８の使用率を均等にするために、ファイル移動を行なう対象のストレージノード装置１００と、移動するファイル容量を決定する。ファイル移動部３０３は、容量均等化計算部３０２が決定したファイルの移動元及び移動先ストレージノード装置１００と、移動するファイル容量に従って、ファイルの移動を指示する。テーブル検索部３０４は、記憶部４０に保存されている検索用ノードテーブル４２から、ストレージノード装置１００のノードアドレスを順に読み出してステータス情報取得部３０１へ出力する。また、テーブル検索部３０４は、ストレージノード装置１００のテーブル検索部１０６と同様の機能を有し、検索用ノードテーブル４２を参照して、ステータス情報取得部３０１またはファイル移動部３０３から指定されたＩＤに時計回りに近いノードＩＤを特定し、その特定したノードＩＤに対応付けられているノードアドレスを読み出して出力する。
【０１００】
[３．３．２  ステータス情報取得部３０１の動作]
図１６は、ステータス情報取得部３０１の動作の流れ図を示す。容量負荷分散ノード装置３００は、所定の時間に定期的に、あるいは、利用者に指示された時間に、使用率の均等化処理を起動する。これにより、図１６の処理が起動される。
【０１０１】
同図において、ステータス情報取得部３０１は、ｎに初期値として０を設定すると、テーブル検索部３０４により、検索用ノードテーブル４２にｎ番目に登録されているストレージノード装置１００（以下、「ストレージノード装置（ｎ）」と記載する。）のノードアドレスを取得する（ステップＳ３０１−１）。次に、ステータス情報取得部３０１は、ディスク容量及び使用ディスク容量のそれぞれについて、ステータス情報名と、テーブル検索部３０４が取得したノードアドレスとからステータスＩＤを生成する（ステップＳ３０１−２）。ステータスＩＤの生成方法は、ストレージノード装置１００のステータス情報登録部１０５の動作において説明した方法と同一であり、例えば、ディスク容量の場合であれば、「DISKCAPA_ノードアドレス」のハッシュ値をハッシュ関数によって生成する。次に、生成したステータスＩＤをテーブル検索部３０４に出力し、当該ステータスＩＤを管理しているノード装置のノードアドレスを要求する。テーブル検索部３０４は、ステータスＩＤにより記憶部４０に記憶されている検索用ノードテーブル４２を検索してノードアドレスを取得し、ステータス情報取得部３０１は、テーブル検索部３０４から検索結果のノードアドレスを取得する（ステップＳ３０１−３）。
【０１０２】
ステータス情報取得部３０１は、ステップＳ３０１−３において取得したノードアドレスを用い、ストレージノード装置１００の低レベルインタフェース部１０１に対して、getインタフェースの実行を要求し、ストレージノード装置（ｎ）のディスク容量及び使用ディスク容量それぞれのステータス情報を取得する（ステップＳ３０１−４）。getインタフェースの引数keyには、ステップＳ３０１−２において生成したステータスＩＤが設定される。ストレージノード装置（ｎ）が、検索用ノードテーブル４２に登録されている最後のノード装置ではない場合（ステップＳ３０１−５：ＮＯ）、ｎに１を加算した後（ステップＳ３０１−６）、ステップＳ３０１−１からの動作を繰り返す。そして、ステップＳ３０１−５において、ストレージノード装置（ｎ）が検索用ノードテーブル４２の最後のノード装置であった場合（ステップＳ３０１−５：ＹＥＳ）、ステータス情報取得部３０１の動作を終了し、容量均等化計算部３０２の動作の実行を開始する（ステップＳ３０１−７）。
【０１０３】
[３．３．３  容量均等化計算部３０２の動作]
容量均等化計算部３０２は、ステータス情報取得部３０１が取得したストレージノードの最大蓄積容量と使用中の蓄積容量から、全ストレージノード装置１００の使用率が一定となるように、ストレージノード装置１００間におけるファイルの受け渡し容量を計算する。
【０１０４】
[３．３．３．１  容量均等化アルゴリズム]
まず、本実施形態による容量均等化の計算方法について説明する。
ノード数Ｎをストレージノード装置１００の数（Ｎは１以上の整数）、ディスク容量Ｃｉをストレージノード装置（ｉ）のディスク容量、使用ディスク容量Ｍｉをストレージノード装置（ｉ）の使用ディスク容量とすると（ｉは０以上（Ｎ−１）以下の整数）、全ストレージノード装置１００におけるストレージの平均使用率ｒａｖｇは下記の式（１）により算出される。
【０１０５】
【数１】
0005470148.tif 000002
【０１０６】
Ｍ’ｉを容量均等化後のストレージノード装置（ｉ）の使用ディスク容量とすると、以下の式（２）が成り立つ。
【０１０７】
【数２】
0005470148.tif 000003
【０１０８】
ストレージノード装置（ｉ）の現在のディスクの使用容量Ｍｉから、ストレージノード装置（ｉ）の容量均等化後のディスクの使用容量Ｍ’ｉへの変換行列をＡとすると、以下の式（３）が成り立つ。
【０１０９】
【数３】
0005470148.tif 000004
【０１１０】
変換行列Ａの成分ａｉｊ（ｉ、ｊは０以上（Ｎ−１）以下の整数）は、現在のストレージノード装置（ｊ）の使用ディスク容量に対する、該ストレージノード装置（ｊ）からストレージノード装置（ｉ）に移動するディスク容量の割合を示す。したがって、容量均等化とは、下記の式（４）が示す条件の下で変換行列Ａを求めることである。
【０１１１】
【数４】
0005470148.tif 000005
【０１１２】
これは、ｉ列の成分は、ストレージノード装置（ｉ）の使用ディスク容量をどのように分配するかの割合を示しており、分配する割合を合計した列成分の和は１となるためである。
【０１１３】
変換行列Ａは１つに定まらないため、本実施形態では、下記の（手順１）〜（手順３）により変換行列Ａを求める。
【０１１４】
（手順１）対角成分の決定：
変換行列Ａの対角成分ａｉｉ、および、関連する他の成分を、下記にしたがって決定する。
【０１１５】
【数５】
0005470148.tif 000006
【０１１６】
（ａ）は、現在の使用ディスク容量が、目標の使用容量以上の場合であり、他のストレージノード装置１００からファイルを受け取る必要がないためである。また、（ｂ）は、現在の使用ディスク容量が、目標の使用容量より少ない場合であり、他のストレージノード装置１００へファイルを移動させる必要がなく、また、列成分の和が１となるためである。
【０１１７】
ここで、下記の表１に示す状態の５台のストレージノード装置（０）〜（４）を例にして説明を行う。
【０１１８】
【表１】
0005470148.tif 000007
【０１１９】
式（５）に示すように、この例での平均使用率ｒａｖｇは以下である。
【０１２０】
【数６】
0005470148.tif 000008
【０１２１】
このとから、Ｍ’＝ＡＭとして下記の式（６）が求められる。つまり、（手順１）においてノードの番号ｉ＝０、１、３のストレージノード装置（ｉ）については（ａ）が適用され、ノードの番号ｉ＝２、４のストレージノード装置（ｉ）については（ｂ）が適用される。なお、「−」は未設定成分である。
【０１２２】
【数７】
0005470148.tif 000009
【０１２３】
（手順２）未設定成分の決定：
処理の対象とする未設定成分をａＩＪとする。このとき、ファイル移動後のストレージノード１００（Ｉ）の容量は以下の（７）のように表すことができる。
【０１２４】
【数８】
0005470148.tif 000010
【０１２５】
そして、（７）に示すファイル移動後のストレージノード装置（Ｉ）の容量が最大となるように、下記の条件下で成分ａＩＪを算出する。
【０１２６】
【数９】
0005470148.tif 000011
【０１２７】
条件１は、ストレージノード装置（Ｊ）から移動するディスク容量の割合の合計が１以下となることを示している。また、条件２は、ファイル移動後のストレージノード装置（Ｉ）の使用ディスク容量が、容量均等化後の使用ディスク容量Ｍ’Ｉ以下となることを示している。
さらに、上記による成分ａＩＪの決定により、以下の条件を満たした場合に他の成分も決定する。
【０１２８】
【数１０】
0005470148.tif 000012
【０１２９】
以上を全未設定成分について順に求めていく。
【０１３０】
前記の式（６）の例を用いて未設定成分を計算すると、下記のようになる。
まず、処理対象を第０列の未設定成分ａ２０とする。条件１及び条件２から、成分ａ２０＝０．５１１が算出され、（ｃ）により成分ａ４０＝０となる。従って、式（６）は、以下の式（８）となる。
【０１３１】
【数１１】
0005470148.tif 000013
【０１３２】
次に、処理対象を第１列の未設定成分ａ２１とする。条件１及び条件２から、成分ａ２１＝０．４５が算出され、（ｃ）により成分ａ４１＝０となる。従って、式（８）は、以下の式（９）となる。
【０１３３】
【数１２】
0005470148.tif 000014
【０１３４】
次に、処理対象を第３列の未設定成分ａ２３とする。条件１及び条件２から、成分ａ２３＝０．０９５が算出され、以下の式（１０）となる。
【０１３５】
【数１３】
0005470148.tif 000015
【０１３６】
次に、処理対象を第３列の未設定成分ａ４３とする。条件１及び条件２から、成分ａ４３＝０．３５５が算出され、以下の式（１１）となる。
【０１３７】
【数１４】
0005470148.tif 000016
【０１３８】
（手順３）移動元、移動先及び移動容量の決定：
以上の（手順２）により求められた変換行列Ａの対角成分以外で、かつ、０以外の成分がディスク容量の移動を表す部分である。すなわち、成分ａｉｊに対し、移動元のノード装置がストレージノード装置（ｊ）、移動先のノード装置がストレージノード装置（ｉ）、移動容量がａｉｊ×Ｍｊである。
前記の例の場合、表２のようにストレージノード装置１００間の移動量を求めることができる。
【０１３９】
【表２】
0005470148.tif 000017
【０１４０】
[３．３．３．２  処理フロー]
図１７及び図１８は、容量均等化計算部３０２の流れ図を示す。
図１７において、まず、容量均等化計算部３０２は、Ｎ行Ｎ列の変換行列Ａの全成分ａｉｊ（ｉ、ｊは０以上（Ｎ−１）以下の整数）を初期化すると（ステップＳ３０２−１）、ステータス情報取得部３０１が取得したＮ個の全ストレージノード装置（ｉ）のディスク容量Ｃｉ及び使用ディスク容量Ｍｉを用い、式（２）により全ストレージノード装置１００の平均使用率ｒａｖｇを算出する（ステップＳ３０２−２）。続いて、容量均等化計算部３０２は、ステップＳ３０２−２において算出した平均使用率ｒａｖｇとストレージノード装置１００（ｉ）の使用ディスク容量Ｍｉとを用い、式（３）により全てのストレージノード装置（ｉ）について、容量均等化後のストレージノード装置（ｉ）の使用ディスク容量Ｍ’ｉを算出する（ステップＳ３０２−３）。
【０１４１】
続いて、容量均等化計算部３０２は、ｉに０を代入して初期化すると（ステップＳ３０２−４）、ストレージノード装置（ｉ）の現在の使用ディスク容量Ｍｉは容量均等化後の使用ディスク容量Ｍ'ｉ以上であるかを判断する（ステップＳ３０２−５）。ステップＳ３０２−５においてＹＥＳと判断した場合、容量均等化アルゴリズムの（手順１）の（ａ）の処理を行なう。すなわち、容量均等化計算部３０２は、対角成分ａｉｉに（Ｍ'ｉ／Ｍｉ）を設定し（ステップＳ３０２−６）、他の全てのストレージノード装置（ｊ）からストレージノード装置（ｉ）への移動に対応した成分ａｉｊに０を設定する（ステップＳ３０２−７）。一方、ステップＳ３０２−５においてＮＯと判断した場合、容量均等化計算部３０２は、対角成分ａｉｉに１を設定し（ステップＳ３０２−８）、ストレージノード装置（ｉ）から他の全てのストレージノード装置（ｊ）への移動に対応した成分ａｊｉに０を設定する（ステップＳ３０２−９）。
【０１４２】
ステップＳ３０２−７またはステップＳ３０２−９の処理の後、容量均等化計算部３０２は、現在のｉの値に１を加算すると（ステップＳ３０２−１０）、ｉが（Ｎ−１）よりも大きいかを判断する（ステップＳ３０２−１１）。ステップＳ３０２−１１でＮＯと判断した場合、容量均等化計算部３０２は、ステップＳ３０２−５からの処理を繰り返し、ステップＳ３０２−１１でＹＥＳと判断した場合、図１８の処理を行なう。
【０１４３】
図１８において、容量均等化計算部３０２は、容量均等化アルゴリズムの（手順２）の処理を行なう。すなわち、容量均等化計算部３０２は、現在値が設定されていない成分ａＩＪを選択する（ステップＳ３０２−１２）。現在値が設定されていない成分の中から任意に成分ａＩＪを選択することができるが、ここでは、Ｉ、Ｊが最も小さい成分を選択する。
【０１４４】
容量均等化計算部３０２は、容量均等化アルゴリズムの（手順２）における（条件１）及び（条件２）を満たすように、成分ａＩＪの値を算出すると（ステップＳ３０２−１３）、容量均等化アルゴリズムの（手順２）の（ｃ）または（ｄ）の条件を満たすかを判断する。
【０１４５】
容量均等化計算部３０２は、ストレージノード装置（Ｊ）から移動するディスク容量の割合の合計が１であり、（ｃ）の条件を満たすと判断した場合（ステップＳ３０２−１４：ＹＥＳ）、まだ値が設定されていない成分ａｋＪに０を設定する（ステップＳ３０２−１５）。また、容量均等化計算部３０２は、ステップＳ３０２−１４でＮＯと判断した場合、ファイル移動後のストレージノード装置（Ｉ）の使用ディスク容量が、容量均等化後の使用ディスク容量Ｍ'ｉに等しいかを判断する（ステップＳ３０２−１６）。容量均等化計算部３０２は、ステップＳ３０２−１６がＹＥＳであり、（ｄ）の条件を満たすと判断した場合、まだ値が設定されていない成分ａＩｋに０を設定する（ステップＳ３０２−１７）。
【０１４６】
ステップＳ３０２−１５、ステップＳ３０２−１７の処理の後、あるいは、ステップＳ３０２−１６においてＮＯと判断した場合、容量均等化計算部３０２は、値が設定されていない成分があるか否かを判断する（ステップＳ３０２−１８）。値が設定されていない成分があると判断した場合（ステップＳ３０２−１８：ＹＥＳ）、ステップＳ３０２−１２からの処理を繰り返す。
【０１４７】
値が設定されていない成分がないと判断した場合（ステップＳ３０２−１８：ＮＯ）、容量均等化計算部３０２は、容量均等化アルゴリズムの（手順３）を実行する。すなわち、容量均等化計算部３０２は、０以外の成分ａｉｊ（ｉ≠ｊ、かつ、ｉ及びｊは０以上（Ｎ−１）以下の整数）を用いて、ストレージノード装置（ｉ）からストレージノード装置（ｊ）への移動容量ａｉｊ×Ｍｊを算出し（ステップＳ３０２−１９）、ファイル移動部３０３にファイルの移動を指示する（ステップＳ３０２−２０）。
【０１４８】
［３．３．３  ファイル移動部３０３の動作］
ファイル移動部３０３は、容量均等化計算部３０２により得られたストレージノード装置１００間のファイルの移動処理を行う。しかし、容量均等化計算部３０２において得られたストレージノード装置１００間のファイルの移動処理を全て行なうと、通信ネットワーク１に負荷がかかるだけでなく、多くのストレージノード装置１００についても負荷が増大してしまう。また、移動の間はファイルへのアクセスが制限される場合もある。そこで、ファイル移動処理は、例えば、移動容量が所定以上である、ファイル移動元のストレージノード装置１００のディスク使用率が所定以上であるなど、所定の条件に合致するストレージノード装置１００間の移動のみを対象とする。以下では、最も移動容量が多いストレージノード装置１００間のファイル移動のみを行うものとして説明する。また、ファイル移動をトラヒックが少ない時間に行うことによって、通信ネットワーク１への負荷を抑える。
【０１４９】
まず、ファイル移動部３０３は、容量均等化計算部３０２が算出した移動容量に基づいて、最も移動容量が多い、ストレージノード装置（ｉ）からストレージノード装置（ｊ）へのファイル移動を行うと判断する。
ファイル移動部３０３は、テーブル検索部３０４にストレージノード装置（ｉ）のノードＩＤを出力してノードアドレスを要求し、テーブル検索部３０４は、記憶部４０に記憶されている検索用ノードテーブル４２から、ノードＩＤに対応したノードアドレスを読み出す。ファイル移動部３０３は、テーブル検索部３０４が読み出したノードアドレスをあて先として、get_listの実行を要求する。
【０１５０】
ストレージノード装置１００は、ファイル蓄積部１０８に記憶されているファイルのファイル名とサイズのリストを読み出し、引数listに設定して容量負荷分散ノード装置３００へ返送する。容量負荷分散ノード装置３００のファイル移動部３０３は、ストレージノード装置１００から取得したリストに基づいて、サイズの合計が移動容量に近くなるように移動対象のファイルを選択する。例えば、サイズの大きいファイルから順に選択していき、選択したファイルのサイズ移動容量を最初に超えたとき、あるいは、超える直前までに選択したファイルを移動対象として決定したり、ファイルの全ての組み合わせを生成し、合計のファイルサイズが最も移動容量が近いファイルの組み合わせを選択し、移動対象として決定したりすることができる。
【０１５１】
ファイル移動部３０３は、移動対象として決定したファイルを読み出すため、ストレージノード装置（ｉ）に移動対象の各ファイルのlow_readの実行を出力する。low_readの引数fnameには、移動対象のファイルのファイル名を、引数offsetに０を、引数sizeに移動対象のファイルのサイズが設定される。ストレージノード装置（ｉ）は、ファイル蓄積部１０８から指定されたファイル名のファイル本体を読み出し、引数dataに設定して容量負荷分散ノード装置３００へ返送する。
【０１５２】
ファイル移動部３０３は、移動対象のファイルをストレージノード装置（ｉ）から読み出すと、読み出した各ファイルを移動先に書き込むため、ストレージノード装置（ｊ）に移動対象の各ファイルのlow_writeの実行を出力する。low_readの引数fnameには、移動対象のファイルのファイル名が、引数offsetには０が、引数sizeには移動対象のファイルのサイズが、引数dataにはファイル本体が設定される。ストレージノード装置（ｊ）は、ファイル蓄積部１０８へ移動対象のファイルを書き込む。ストレージノード装置（ｊ）は、ファイルを書き込むと図１１に示す処理を行なう。
【０１５３】
続いてファイル移動部３０３は、ストレージノード装置（ｉ）に記憶されている各移動対象のファイルのlow_deleteの実行を出力する。low_deleteの引数fnameには、移動対象のファイルのファイル名が設定される。ストレージノード装置（ｉ）は、ファイル蓄積部１０８から引数fnameによって指定されたファイル名のファイルを削除する。
【０１５４】
［３．３．４  容量負荷分散ノード装置３００の効果］
以上、説明したように、容量負荷分散ノード装置３００により、本実施形態による分散ファイルシステム内のストレージノード装置の使用容量を均等化する機能を追加することができる。そして、１日１回など定期的に、移動容量が多いストレージノード装置１００間についてのみファイル移動を行なうことによって、分散ファイルシステム全体に負荷をかけないよう、ゆるやかに使用容量を均等に近づけることができる。
また、容量負荷分散ノード装置３００の分散ファイルシステムの追加や削除は、分散ファイルシステムの検索処理を滞らせることがないため、分散ファイルシステムの稼働中のどのタイミングでも容量負荷分散機能の追加、削除が行え、容量負荷分散ノード装置３００の数も限定されない。
【０１５５】
本実施形態では、分散ファイルシステム内の全ストレージノード装置１００の容量を均等化する場合の説明を行ったが、これに限定されるものではない。例えば、非特許文献３で述べられている、ストレージノード装置の物理的な位置を考慮したローカルノードＩＤを使って管理用ノードテーブル４１を作成した場合、容量負荷分散ノード装置３００の処理を、ローカルＩＤで限定される範囲のストレージノード装置１００に限定して容量負荷分散を行うことも可能である。
【０１５６】
また、容量負荷分散ノード装置３００のファイル移動部３０３は、各ストレージノード装置１００からファイル蓄積部１０８に記憶されているファイルのファイル名と更新日時のリストを取得し、所定の日時以前の更新日時のファイルを上述したストレージノード装置１００間のファイル移動手順に従ってアーカイブ専用のストレージノード装置１００に移動させることも可能である。これによって、アーカイブ専用のストレージノード装置１００にのみ、古いファイルを移動させるような方法も可能となる。
さらに、容量負荷分散機能の処理を、分散ファイルシステムのアクセスが少ない深夜などの特定の時間のみに稼動させるなども可能である。
【０１５７】
[３．４  管理ノード装置４００の固有機能]
[３．４．１  固有機能処理部の構成]
管理ノード装置４００は、分散ファイルシステムの各ノード装置の状態を表示するための機能ノードである。
【０１５８】
図１９は、管理ノード装置４００の固有機能処理部４２０の構成を示す図であり、図２に示す固有機能処理部２０に相当する。管理ノード装置４００の固有機能処理部４２０は、ステータス選択部４０１、ステータス情報取得部４０２、情報提示部４０３、ノード通知部４０４、テーブル検索部４０５を備えて構成される。
【０１５９】
ステータス選択部４０１は、ステータス情報の確認対象を受け付ける。ステータス情報取得部４０２は、ステータス選択部４０１が受け付けた確認対象であるノード装置のステータス情報を管理しているストレージノード装置１００から、ネットワークインタフェース部３０を介してステータス情報を取得し、情報提示部４０３へ通知する。ノード通知部４０４は、記憶部４０の管理用ノードテーブル４１を監視し、ノード装置の参加や離脱が生じた場合に、その参加あるいは離脱したノード装置の情報を情報提示部４０３に通知する。情報提示部４０３は、ステータス情報取得部４０２から通知されたステータス情報、あるいは、ノード通知部４０４から通知されたノード装置の参加や離脱をディスプレイに表示するなどして利用者に提示する。テーブル検索部４０５は、ストレージノード装置１００のテーブル検索部１０６と同様の機能を有し、記憶部４０に保存されている検索用ノードテーブル４２から、指定されたステータスＩＤに時計回りに近いノードＩＤを検索し、そのノードアドレスを返す。
【０１６０】
[３．４．２  管理ノード装置４００の動作]
まず、ステータス選択部４０１は、管理ノード装置４００を利用する利用者から、ステータス情報の確認対象となるノード装置の選択、確認したいステータス情報の種別の入力を受け付け、ステータス情報取得部４０２へそれらの情報を通知する。
【０１６１】
ステータス情報取得部４０２は、ステータス選択部４０１から通知されたノード装置のノードアドレス及びステータス情報の種別から、ステータス情報登録部１０５と同様の方法によりキーとなるステータスＩＤを生成する。ステータス情報取得部４０２は、ステータスＩＤをテーブル検索部４０５へ出力し、ステータスＩＤを管理するストレージノード装置１００のノードアドレスを取得する。ステータス情報取得部４０２は、取得したノードアドレスのストレージノード装置１００に対してgetインタフェースの実行を要求し、ステータス情報を取得する。getインタフェースの引数keyには、生成したステータスＩＤが設定される。ステータス情報取得部４０２は、ストレージノード装置１００から取得したステータス情報を情報提示部４０３に通知し、情報提示部４０３は、ステータス情報取得部４０２から通知されたステータス情報を提示する。情報提示部４０３は、確認対象として指定されたノード装置やステータス情報の種類を併せて提示してもよい。情報提示部４０３は、例えば、テキストによるデータの表示、ノード毎にグラフ化した表示など、任意の提示方法を用いることができる。
【０１６２】
一方、ノード通知部４０４は、記憶部４０の管理用ノードテーブル４１を監視し、テーブル処理部１４によって管理用ノードテーブル４１にノードＩＤ及びノードアドレスが追加された場合、そのノードＩＤ及びノードアドレスが追加されるトリガとなったノード情報を情報提示部４０３に通知する。情報提示部４０３は、ノード通知部４０４から通知されたノード情報と、参加である旨を提示する。
同様に、ノード通知部４０４は、テーブル処理部１４によって管理用ノードテーブル４１からノードＩＤ及びノードアドレスが削除された場合、その削除のトリガとなったノード情報を情報提示部４０３に通知する。情報提示部４０３は、ノード通知部４０４から通知されたノード情報と、離脱である旨を提示する。
【０１６３】
[３．４．３  管理ノード装置４００の効果]
以上説明したように、管理ノード装置４００により、本実施形態の分散ファイルシステム内に参加している全ノード装置の参加、離脱の状態や、各ノード装置のステータス情報を利用者に提供することができる。本実施形態による管理ノード装置４００の参加及び離脱は、分散ファイルシステムのファイル管理を滞らせることがないため、分散ファイルシステムの稼働中にいつでも、参加または離脱することができ、管理ノード装置４００の数に制限もない。
なお、本実施形態ではノード情報の提示を分散ファイルシステムに参加する全ノード装置を対象として説明したが、これに限定されるものではない。例えば、非特許文献３に提案されているように、ノード装置の物理的な位置の情報を含んだローカルノードＩＤを本実施形態の管理用ノードテーブルに用いることにより、管理ノード装置４００を特定のローカルＩＤ、すなわち特定の物理的な範囲のノード装置に限定して、そのステータス情報を表示することも可能である。
【０１６４】
[４．  本実施形態の効果]
以上のように本実施形態によれば、ＤＨＴを用いたＰ２Ｐ型の分散ファイルシステムにおいて、オーバーレイネットワークに参加する各ノード装置は、ファイル検索用のノードテーブルである検索用ノードテーブルと、ノード装置管理用のノードテーブルである管理用ノードテーブルを保持し、ファイルを保管するストレージノード装置のノードＩＤ及びノードアドレスは検索用ノードテーブル及び管理用ノードテーブルに登録し、ファイルを保管せず、各種の付加機能を提供する機能ノード装置については管理用ノードテーブルのみに登録する。従って、機能ノード装置の参加や離脱が生じても検索用ノードテーブルには変更がないため、ファイルＩＤの検索が滞ることがなく、操作対象のファイルの検索に影響を与えない。また、検索用ノードテーブルを同期させる必要もない。
【０１６５】
このように、Ｐ２Ｐ型分散ファイルシステムにおいて、ファイルストレージ以外の様々な機能を持った機能ノード装置の追加や離脱を、ファイルの検索に影響を与えずに行なうことができるため、分散ファイルシステムを停止することなく機能を拡張することが可能となる。
また、分散ファイルシステムの利用者の増減に対応して、本実施形態のアクセスノード装置の参加や離脱を行なうことで、アクセス負荷分散が可能となる。
また、本実施形態の容量負荷分散ノード装置により、ストレージノード装置がファイルの記憶に要するディスクの使用量を均等化したり、あるいは、管理者が意図した使用量に調整したりすることができる。
また、本実施形態の管理ノード装置により、オーバーレイネットワークに参加しているノード装置の状態を把握し、利用者へ提示することが可能となる。
【０１６６】
［５．  その他］
上述したストレージノード装置１００、アクセスノード装置２００、容量負荷分散ノード装置３００、管理ノード装置４００、及び、クライアント装置２を実装する装置は、内部にコンピュータシステムを有している。そして、ストレージノード装置１００、アクセスノード装置２００、容量負荷分散ノード装置３００、管理ノード装置４００、クライアント装置２の動作の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをコンピュータシステムが読み出して実行することによって、上記処理が行われる。ここでいうコンピュータシステムとは、ＣＰＵ及び各種メモリやＯＳ、周辺機器等のハードウェアを含むものである。
【０１６７】
また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶部のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバーやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含むものとする。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【符号の説明】
【０１６８】
１…通信ネットワーク
２…クライアント装置
１０…ノードテーブル管理部
１２…通知処理部（通知情報処理部）
１３…安定化処理部
１４…テーブル処理部
２０、１２０、２２０、３２０、４２０…固有機能処理部
３０…ネットワークインタフェース部
４０…記憶部
４１…管理用ノードテーブル
４２…検索用ノードテーブル
１００…ストレージノード装置
１０１…低レベルインタフェース部
１０２…キーテーブル操作部
１０３…ファイル操作部
１０４…ファイル情報登録部
１０５…ステータス情報登録部
１０６…テーブル検索部
１０７…キーテーブル蓄積部
１０８…ファイル蓄積部
２００…アクセスノード装置
２０１…高レベルインタフェース部
２０２…ファイル処理部
２０３…テーブル検索部
３００…容量負荷分散ノード装置
３０１…ステータス情報取得部
３０２…容量均等化計算部
３０３…ファイル移動部
３０４…テーブル検索部
４００…管理ノード装置
４０１…ステータス選択部
４０２…ステータス情報取得部
４０３…情報提示部
４０４…ノード通知部
４０５…テーブル検索部
【図１】
0005470148.tif 000018
【図２】
0005470148.tif 000019
【図３】
0005470148.tif 000020
【図４】
0005470148.tif 000021
【図５】
0005470148.tif 000022
【図６】
0005470148.tif 000023
【図７】
0005470148.tif 000024
【図８】
0005470148.tif 000025
【図９】
0005470148.tif 000026
【図１０】
0005470148.tif 000027
【図１１】
0005470148.tif 000028
【図１２】
0005470148.tif 000029
【図１３】
0005470148.tif 000030
【図１４】
0005470148.tif 000031
【図１５】
0005470148.tif 000032
【図１６】
0005470148.tif 000033
【図１７】
0005470148.tif 000034
【図１８】
0005470148.tif 000035
【図１９】
0005470148.tif 000036
【図２０】
0005470148.tif 000037
【図２１】
0005470148.tif 000038