(57)【特許請求の範囲】
【請求項１】
第１のファイルシステムを有する第１の計算機ノードと、前記第１の計算機ノードに通信可能に接続され、前記第１のファイルシステムの複製である第２のファイルシステムを有する第２の計算機ノードと、前記第２の計算機ノードに通信可能に接続され、前記第１のファイルシステムの複製である第３のファイルシステムを有する第３の計算機ノードとを有し、
前記第１の計算機ノードは、変更および追加がある毎または定期的に前記第１のファイルシステムのデータのうち前回から変更および追加されたデータを増分データとして生成する増分データ生成手段と、第１の記憶手段と、前記増分データ生成手段で生成された前記増分データを前記第１の記憶手段に記憶すると共に前記第２の計算機ノードに送信する第１の制御手段とを有し、
前記第２の計算機ノードは、第２の記憶手段と、前記第１の計算機ノードから受信した前記増分データを前記第２の記憶手段に記憶すると共に前記第２のファイルシステムに反映し、さらに前記第３の計算機ノードに送信する第２の制御手段とを有し、
前記第３の計算機ノードは、第３の記憶手段と、前記第２の計算機ノードから受信した前記増分データを前記第３の記憶手段に記憶すると共に前記第３のファイルシステムに反映する第３の制御手段とを有し、
前記第２の制御手段は、前記第１の計算機ノードから新たな前記増分データを受信したとき、前記新たな増分データ以前の前記増分データを前記第３の計算機ノードに送信している最中でなければ、前記新たな増分データを前記第３の計算機ノードへ送信し、前記新たな増分データ以前の前記増分データを前記第３の計算機ノードに送信している最中であれば、前記新たな増分データを前記第２の記憶手段に記憶すると共に前記新たな増分データの前記第３の計算機ノードへの送信を保留にし、前記送信中の前記増分データ以降の複数回分の前記増分データが前記第２の記憶手段に蓄積された場合、前記複数回分の前記増分データを１つの増分データにマージする
ことを特徴とする分散ファイルシステム。
【請求項２】
前記増分データ生成手段は、変更および追加がある毎または定期的に前記第１のファイルシステムのイメージであるスナップショットを取得し、今回取得したスナップショットと前回取得したスナップショットとの差分を前記増分データとして算出する
ことを特徴とする請求項１に記載の分散ファイルシステム。
【請求項３】
前記増分データ生成手段が生成する前記増分データは、前記第１のファイルシステムを構成するブロックのうち、前回から変更および追加のあったブロックのみを有する
ことを特徴とする請求項１または２に記載の分散ファイルシステム。
【請求項４】
前記第２の制御手段は、前記第２の記憶手段に蓄積される前記複数回分の前記増分データのうち、一番早く受信した増分データを第１の増分データ、該第１の増分データの次に受信した増分データを第２の増分データとするとき、前記第１および第２の増分データの何れか一方にのみ含まれるブロックを含み、双方に含まれるブロックについては前記第２の増分データのブロックのみを含む増分データを、前記第１および第２の増分データをマージした増分データとして生成する
ことを特徴とする請求項１ないし３の何れかに記載の分散ファイルシステム。
【請求項５】
前記第２の制御手段は、前記第２の記憶手段に蓄積される前記複数回分の前記増分データに、前記第２の増分データの次に受信した第３の増分データが含まれる場合、前記第１および第２の増分データをマージした増分データに、さらに前記第３の増分データをマージする
ことを特徴とする請求項４に記載の分散ファイルシステム。
【請求項６】
第１のファイルシステムを有する第１の計算機ノードと、前記第１の計算機ノードに通信可能に接続され、前記第１のファイルシステムの複製である第２のファイルシステムを有する第２の計算機ノードと、前記第２の計算機ノードに通信可能に接続され、前記第１のファイルシステムの複製である第３のファイルシステムを有する第３の計算機ノードとを有し、前記第１の計算機ノードは増分データ生成手段と第１の記憶手段と第１の制御手段とを有し、前記第２の計算機ノードは第２の記憶手段と第２の制御手段とを有し、前記第３の計算機ノードは第３の記憶手段と第３の制御手段とを有する分散ファイルシステムが実行する多重化方法であって、
前記第１の計算機ノードの前記増分データ生成手段が、変更および追加がある毎または定期的に前記第１のファイルシステムのデータのうち前回から変更および追加されたデータを増分データとして生成し、
前記第１の計算機ノードの前記第１の制御手段が、前記増分データ生成手段で生成された前記増分データを前記第１の記憶手段に記憶すると共に前記第２の計算機ノードに送信し、
前記第２の計算機ノードの前記第２の制御手段が、前記第１の計算機ノードから受信した前記増分データを前記第２の記憶手段に記憶すると共に前記第２のファイルシステムに反映し、さらに前記第３の計算機ノードに送信し、
前記第３の計算機ノードの前記第３の制御手段が、前記第２の計算機ノードから受信した前記増分データを前記第３の記憶手段に記憶すると共に前記第３のファイルシステムに反映し、
前記第２の計算機ノードの前記第２の制御手段が、前記第１の計算機ノードから新たな前記増分データを受信したとき、前記新たな増分データ以前の前記増分データを前記第３の計算機ノードに送信している最中でなければ、前記新たな増分データを前記第３の計算機ノードへ送信し、前記新たな増分データ以前の前記増分データを前記第３の計算機ノードに送信している最中であれば、前記新たな増分データを前記第２の記憶手段に記憶すると共に前記新たな増分データの前記第３の計算機ノードへの送信を保留にし、前記送信中の前記増分データ以降の複数回分の前記増分データが前記第２の記憶手段に蓄積された場合、前記複数回分の前記増分データを１つの増分データにマージする
ことを特徴とする分散ファイルシステムにおける多重化方法。
【請求項７】
上流側計算機ノードと下流側計算機ノードとに通信可能に接続され、
マスターファイルシステムの複製である複製ファイルシステムと、
記憶手段と、
前記マスターファイルシステムのデータのうち前回から変更および追加されたデータを含む増分データを前記上流側計算機ノードから受信して前記記憶手段に記憶すると共に前記複製ファイルシステムに反映し、さらに前記下流側計算機ノードに送信する制御手段であって、前記上流側計算機ノードから新たな前記増分データを受信したとき、前記新たな増分データ以前の前記増分データを前記下流側計算機ノードに送信している最中でなければ、前記新たな増分データを前記下流側計算機ノードへ送信し、前記新たな増分データ以前の前記増分データを前記下流側計算機ノードに送信している最中であれば、前記新たな増分データを前記記憶手段に記憶すると共に前記新たな増分データの前記下流側計算機ノードへの送信を保留にし、前記送信中の前記増分データ以降の複数回分の前記増分データが前記記憶手段に蓄積された場合、前記複数回分の前記増分データを１つの増分データにマージする制御手段と
を有することを特徴とする計算機ノード。
【請求項８】
上流側計算機ノードと下流側計算機ノードとに通信可能に接続され、マスターファイルシステムの複製である複製ファイルシステムと、記憶手段とを有するコンピュータを、
前記マスターファイルシステムのデータのうち前回から変更および追加されたデータを含む増分データを前記上流側計算機ノードから受信して前記記憶手段に記憶すると共に前記複製ファイルシステムに反映し、さらに前記下流側計算機ノードに送信する制御手段であって、前記上流側計算機ノードから新たな前記増分データを受信したとき、前記新たな増分データ以前の前記増分データを前記下流側計算機ノードに送信している最中でなければ、前記新たな増分データを前記下流側計算機ノードへ送信し、前記新たな増分データ以前の前記増分データを前記下流側計算機ノードに送信している最中であれば、前記新たな増分データを前記記憶手段に記憶すると共に前記新たな増分データの前記下流側計算機ノードへの送信を保留にし、前記送信中の前記増分データ以降の複数回分の前記増分データが前記記憶手段に蓄積された場合、前記複数回分の前記増分データを１つの増分データにマージする制御手段
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は分散ファイルシステムに関し、特にネットワークで接続された複数の計算機ノード間でファイルシステムの増分データを転送することによりファイルシステムの多重化を行う分散ファイルシステムに関する。
【背景技術】
【０００２】
高信頼型の分散ファイルシステムでは、マスターファイルシステムと同一の内容を持つ複製ファイルシステムを作成し、マスターファイルシステムが格納されている計算機ノードとは別の計算機ノードに複製ファイルシステムを格納する多重化が採用される。このような分散ファイルシステムでは、ファイルに対する更新は、マスターファイルシステムに行うと共に、その更新内容を複製ファイルシステムに対して反映することで、ファイルシステムの多重化を維持する。この分散ファイルシステムでは、マスターおよび複製の何れかが壊れた場合でも、ファイルシステムの内容を他方から復元することができる。また複製ファイルシステムを複数作成しておくことにより、より高い信頼性を確保することができる。
【０００３】
マスターとなるデータの複製を複数の計算機ノードに作成する方法の一例が特許文献１の図１０に記載されている。特許文献１に記載の技術では、複製データを有する複数の計算機ノードは、数珠繋ぎに接続されている。マスター計算機上のデータの更新にあわせて、複製データを有する複数の計算機ノードのうちの先頭の１つの計算機ノード上の複製データが更新される。次に、この先頭の計算機ノードから２番目の計算機ノードに対してデータが転送され、２番目の計算機ノード上の複製データが更新される。同様の動作が最後尾の計算機ノードまでリレー転送によって繰り返される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２０００８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述したリレー転送による多重化方法は、特定の計算機ノードに負荷が集中することを避けることができる。しかし、複製データを有する複数の計算機ノード間の通信に遅延が生じると、計算機ノードの記憶部に下流に送出できないデータが大量に滞留する。この滞留したデータは、下流に送出しない限り削減することは困難である。
【０００６】
本発明の目的は、上述した課題、すなわちリレー転送による多重化方法では途中の計算機ノードに滞留したデータは下流に送出しない限り削減することは困難である、という課題を解決する分散ファイルシステムを提供することにある。
【課題を解決するための手段】
【０００７】
本発明の一形態にかかる分散ファイルシステムは、
第１のファイルシステムを有する第１の計算機ノードと、上記第１の計算機ノードに通信可能に接続され、上記第１のファイルシステムの複製である第２のファイルシステムを有する第２の計算機ノードと、上記第２の計算機ノードに通信可能に接続され、上記第１のファイルシステムの複製である第３のファイルシステムを有する第３の計算機ノードとを有し、
上記第１の計算機ノードは、変更および追加がある毎または定期的に上記第１のファイルシステムのデータのうち前回から変更および追加されたデータを増分データとして生成する増分データ生成手段と、第１の記憶手段と、上記増分データ生成手段で生成された上記増分データを上記第１の記憶手段に記憶すると共に上記第２の計算機ノードに送信する第１の制御手段とを有し、
上記第２の計算機ノードは、第２の記憶手段と、上記第１の計算機ノードから受信した上記増分データを上記第２の記憶手段に記憶すると共に上記第２のファイルシステムに反映し、さらに上記第３の計算機システムに送信する第２の制御手段とを有し、
上記第３の計算機ノードは、第３の記憶手段と、上記第２の計算機ノードから受信した上記増分データを上記第３の記憶手段に記憶すると共に上記第３のファイルシステムに反映する第３の制御手段とを有し、
上記第２の制御手段は、上記第３の計算機ノードに上記増分データを送信している最中に、上記送信中の上記増分データ以降の複数回分の上記増分データが上記第２の記憶手段に蓄積された場合、上記複数回分の上記増分データを１つの増分データにマージする、といった構成を採る。
【発明の効果】
【０００８】
本発明は上述した構成を有するため、途中の計算機ノードに滞留したデータを下流に送出することなく削減することが可能になる。
【図面の簡単な説明】
【０００９】
【図１】本発明の第２の実施形態の構成説明図である。
【図２】本発明の第２の実施形態におけるノードのブロック図である。
【図３】本発明の第２の実施形態におけるスナップショット状態遷移図である。
【図４】本発明の第２の実施形態における中間ノード遅延状態時のスナップショット状態遷移図である。
【図５】本発明の第２の実施形態におけるノード離脱時のスナップショット状態遷移図である。
【図６】本発明の第２の実施形態におけるノード復帰時のスナップショット状態遷移図である。
【図７】本発明の第２の実施形態におけるサーバプロセスの処理例を示すフローチャートである。
【図８】本発明の第２の実施形態における先頭ノードのスナップショット制御プロセスの処理例を示すフローチャートである。
【図９】本発明の第２の実施形態における中間ノードのスナップショット制御プロセスの処理例を示すフローチャートである。
【図１０】本発明の第２の実施形態における末端ノードのスナップショット制御プロセスの処理例を示すフローチャートである。
【図１１】本発明の第２の実施形態における転送要求パケットの説明図である。
【図１２】本発明の第２の実施形態におけるノードリストの説明図である。
【図１３】本発明の第２の実施形態におけるネクストホップの説明図である。
【図１４】本発明の第２の実施形態におけるネクストホップの説明図である。
【図１５】本発明の第１の実施形態のブロック図である。
【図１６】本発明の第１の実施形態における増分データとそのマージ処理の説明図である。
【発明を実施するための形態】
【００１０】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
図１５を参照すると、本発明の第１の実施形態にかかる分散ファイルシステムは、計算機ノード１１０と、この計算機ノード１１０とネットワークを通じて通信可能に接続された計算機ノード１２０と、この計算機ノード１２０とネットワークを通じて通信可能に接続された計算機ノード１３０とを有する。
【００１１】
計算機ノード１１０は、マスターとなるファイルシステム１１１と、変更および追加がある毎または定期的にファイルシステム１１１のデータのうち前回から変更および追加されたデータを増分データとして生成する増分データ生成手段１１２と、記憶手段１１３と、増分データ生成手段１１２で生成された増分データを記憶手段１１３に記憶すると共に計算機ノード１２０に送信する制御手段１１４とを有する。
【００１２】
増分データ生成手段１１２は、変更および追加がある毎または定期的にファイルシステム１１１のイメージであるスナップショットを取得し、今回取得したスナップショットと前回取得したスナップショットとの差分を増分データとして算出するようにしてよい。また増分データは、ファイルシステムを構成するブロックのうち、前回から変更および追加のあったブロックのみを有するものとしてよい。
【００１３】
例えば、ファイルシステム１１１が合計４個のブロックから構成され、ｎ回目、ｎ＋１回目、ｎ＋２回目に取得したスナップショットが図１６に示すような内容になっていたとする。図１６において、Ａ０〜Ｄ０、Ａ１、Ａ２、Ｂ１は各ブロックの内容を示す。すなわち、ｎ回目に取得したスナップショットでは、ブロック１〜４はそれぞれＡ０〜Ｄ０という内容であり、ｎ＋１回目のスナップショットでは、ブロック１、２がＡ０、Ｂ０からＡ１、Ｂ１という内容に変わっており、ｎ＋２回目では、ブロック１がさらにＡ２という内容に変わっているとする。このとき、ｎとｎ＋１との増分データは、Ａ１の内容を有するブロック１と、Ｂ１という内容を有するブロック２とを有する。また、ｎ＋１とｎ＋２との増分データは、Ａ２という内容を有するブロック１を有する。
【００１４】
計算機ノード１２０は、ファイルシステム１１１の複製となるファイルシステム１２１と、記憶手段１２３と、計算機ノード１１０から受信した増分データを記憶手段１２３に記憶すると共にファイルシステム１２１に反映し、さらに計算機ノード１３０に送信する制御手段１２４とを有する。また制御手段１２４は、計算機ノード１３０に増分データを送信している最中に、送信中の上記増分データ以降の複数回分の増分データが記憶手段１２３に蓄積されたことを検出すると、その複数回分の増分データを１つの増分データにマージする機能を有する。
【００１５】
制御手段１２４は、第１の増分データとこの第１の増分データの次に受信した第２の増分データとをマージし、第１および第２の増分データの何れか一方にのみ含まれるブロックと、双方に含まれるブロックについては第２の増分データのブロックのみを含む増分データを生成してよい。例えば図１６に示したｎとｎ＋１との増分データと、ｎ＋１とｎ＋２との増分データとをマージした増分データは、Ａ２の内容を有するブロック１と、Ｂ１という内容を有するブロック２とを有する。
【００１６】
計算機ノード１３０は、ファイルシステム１１１の複製となるファイルシステム１３１と、記憶手段１３３と、計算機ノード１２０から受信した増分データを記憶手段１３３に記憶すると共にファイルシステム１３１に反映する制御手段１３４とを有する。
【００１７】
次に本実施形態の動作を説明する。
【００１８】
計算機ノード１１０の増分データ生成手段１１２は、ファイルシステム１１１に変更および追加がある毎、または定期的に、ファイルシステム１１１のデータのうち前回から変更および追加されたデータを増分データとして生成する。制御手段１１４は、増分データ生成手段１１２で生成された増分データを記憶手段１１３に記憶すると共に、計算機ノード１２０に送信する。
【００１９】
計算機ノード１２０の制御手段１２４は、計算機ノード１１０から増分データを受信すると、受信した増分データを記憶手段１２３に記憶すると共に、ファイルシステム１２１に反映する。さらに制御手段１２４は、上記受信した増分データを計算機ノード１３０に送信する。
【００２０】
計算機ノード１３０の制御手段１３４は、計算機ノード１２０から増分データを受信すると、受信した増分データを記憶手段１３３に記憶すると共に、ファイルシステム１３１に反映する。
【００２１】
上述のように、ファイルシステム１１１の増分データが、ファイルシステム１２１、１３１に反映されることにより、ファイルシステム１２１、１３１はファイルシステム１１１と同じ内容を維持する。
【００２２】
また、計算機ノード１２０と計算機ノード１３０とを接続する通信ネットワークの混雑等が原因で、増分データの通信に長時間を要すると、計算機ノード１２０が計算機ノード１３０に増分データを送信している最中に、新たな増分データが計算機ノード１１０から計算機ノード１２０に送信されてきて、記憶手段１２３に蓄積されていく。制御手段１２４は、送信中の増分データ以降の複数回分の増分データが記憶手段１２３に記憶されていることを検出すると、その複数回分の増分データを１つの増分データにマージする。その後、制御手段１２４は、送信中の増分データの送信が終了すると、記憶手段１２３から上記マージ後の増分データを読み出して計算機ノード１３０へ送信する。
【００２３】
計算機ノード１３０の制御手段１３４は、計算機ノード１２０から上記マージ後の増分データを受信すると、受信したマージ後の増分データを記憶手段１３３に記憶すると共に、ファイルシステム１３１に反映する。
【００２４】
このように本実施形態によれば、途中の計算機ノードに滞留したデータを下流に送出することなく削減することが可能になる。例えば、図１６に示した例では、ｎとｎ＋１との増分データと、ｎ＋１とｎ＋２との増分データとをマージすることにより、滞留するデータ量を２／３に削減することができる。
【００２５】
また本実施形態によれば、下流に送出する増分データの数およびデータ量がマージによって削減されるため、より短時間で末端の計算機ノードまで増分データを届けることができる。これにより、ファイルシステムの多重化を早期に維持することが可能になる。
【００２６】
[第２の実施形態]
[本実施形態の特徴]
本実施形態の特徴は、ネットワークで接続されたノード間において、ファイルシステムのスナップショットを効率的にリレー転送して、ファイルシステムの多重化を維持する方式である。
【００２７】
[本実施形態が解決しようとする課題]
ファイルシステムの多重化を行うためにファイルシステムの或る時点のイメージとその次の時点のイメージとの増分である増分スナップショット（以下、単にスナップショットと記す）を送信し、ノード間のデータ同期をとる技術は存在した。しかし、中継ノードがスナップショットを送信中に、上位ノードから次々にスナップショットを受信した場合、送信すべきスナップショット数が増加し、その分だけコスト（ディスク容量、スナップショット数、通信数）が増え、効率的ではなく、保存するスナップショット数を減らし効率良く管理する必要があった。
【００２８】
[本実施形態による解決手段]
本実施形態では、管理するスナップショットを最大限に少なくし、効率的なスナップショットリレー転送を提供する。また、ネットワークからノードの離脱時および復帰時に、各ノードが動的にノードの親子関係を決定し、同期する。そのため、スナップショットリレーノードを無限にスケールすることが可能となる。具体的には、リレーノード機能種別に、先頭ノード機能、中間ノード機能、末端ノード機能、の３種類を備え、各ノードは親ノードと子ノードのみ通信するモデルを定義する。ノード機能の単位は、ファイルシステムごとに提供する。詳細は後述する。
【００２９】
[本実施形態の構成]
本実施形態の構成について説明する。全体の構成は図１を参照する。システムは複数のコンピュータ装置で構成される。コンピュータ装置はスナップショット制御プロセスの制御を行う１つのサーバプロセスを持つ。コンピュータ装置は単数および複数のディスク装置を持つ。ディスク装置には単数および複数のファイルシステムを持つ。１つのファイルシステム上には複数のスナップショットを構成することができる。1つのファイルシステムにつき、1つのスナップショット制御プロセスを持つ。
【００３０】
制御情報の受信および、ノード構成は、1台〜y台で構成する。1台の場合は、転送処理を実施しない。2台の場合は、先頭ノードと末端ノード機能のみで構成される。３台以上の場合は、先頭ノードと中間ノード、および末端ノードの機能で構成される。
【００３１】
リレーノード機能については、図２を参照する。サーバプロセス２１０は制御情報を受信する制御情報送受信部２１１、およびスナップショット制御プロセス情報を管理するスナップショット制御プロセスリスト２１２を持つ。
【００３２】
スナップショット制御プロセス２２０は、ノード情報を管理するノードリスト２２１、スナップショットを取得するスナップショット取得部２２２、スナップショットを確認するスナップショット確認部２２３、スナップショットを削除するスナップショット削除部２２４、転送制御情報を送信する制御情報送信部２２５、およびそれらを管理するスナップショット制御部２２６を持つ。
【００３３】
スナップショットを受信するスナップショット受信部２３０、スナップショトを送信するスナップショット送信部２３１は、スナップショット制御プロセスの機能であっても良いし、ファイルシステムなどの外部機能であっても良い。
【００３４】
ディスク装置２４０は、単数および複数のファイルシステム２４１を持ち、１つのファイルシステム上には複数のスナップショット２４２を構成することができる。
【００３５】
[本実施形態の動作の説明] 
■動作シーケンス
１．サーバプロセス
まず図２を参照し、各プロセス機能について説明する。サーバプロセス２１０は、システム開始時、管理対象ファイルシステム数分スナップショット制御プロセス２２０を起動する。管理対象ファイルシステムがｘ個あれば、スナップショット制御プロセス２２０もｘ個起動する。管理するスナップショット制御プロセス２２０のリストをスナップショット制御プロセスリスト２１２に保存する。
【００３６】
スナップショット制御プロセス２２０が意図せず停止した場合は、プロセスを再起動する。システム停止時、スナップショット制御プロセスリスト２１２を参照し、起動したｘ個のスナップショット制御プロセスを停止する。
【００３７】
２．スナップショット制御プロセス
２．１．先頭ノードのスナップショット送信シーケンス
次に図２、図３、図７、図８を参照し、先頭ノードの動作シーケンスについて説明する。スナップショット制御プロセス２２０の各処理はスナップショット制御部２２６（以降、制御部２２６）が制御する。
【００３８】
制御部２２６は、定期的に、あるいはファイルシステムに書き込みがあったことを契機に、スナップショット取得部２２２に対してスナップショット取得要求を命令する。スナップショット取得部２２２はファイルシステム２４１に対してスナップショット取得を実行する。
【００３９】
スナップショットを取得すると、ファイルシステム２４１には今回送信分スナップショット（ｎ）が保存され、前回送信分は、前回送信分スナップショット（ｎ-１）として保存される。制御部２２６は、スナップショット送信部２３１に対して、子ノードへの今回送信分スナップショット（ｎ）の送信要求を命令する。スナップショット送信部２３１は、送信要求を受信すると、当該スナップショットを子ノードへ送信する。
【００４０】
スナップショット（n）の送信が完了すると、制御部２２６は制御情報送信部２２５を経由して、子ノードへの今回分スナップショット（ｎ）の転送要求を送信する。サーバプロセス２１０の制御情報送受信部２１１は子ノードからの転送要求結果を受信し、当該スナップショット制御プロセス２２０の制御部２２６に結果を伝える。転送要求結果が成功の場合は、次のスナップショット取得転送サイクルに移る。転送要求結果が失敗の場合は、前回送信分スナップショット（n-1）および今回送信分スナップショット（n）を保存する。
【００４１】
２．２．中間ノードのスナップショット転送シーケンス
次に図２、図３、図７、図９を参照し、中間ノードの動作シーケンスについて説明する。スナップショット制御プロセス２２０の各処理はスナップショット制御部２２６（以降、制御部２２６）が制御する。
【００４２】
スナップショット受信部２３０はスナップショット（ｎ）を受信すると、ファイルシステム２４１にスナップショットを適用する。これにより、親ノードと自ノードのファイルシステム２４１の同期がとられる。
【００４３】
次にサーバプロセス２１０の制御情報送受信部２１１が、転送要求を受信し、制御部２２６に伝える。制御部２２６が転送要求を受信すると、スナップショット確認部２２３に対して、スナップショット確認要求を命令する。スナップショット確認部２２３は当該スナップショットが保存されているかどうかファイルシステム２４１を確認する。保存されていれば、制御部２２６はスナップショット送信部２３１にスナップショット送信要求を命令する。この送信要求は非同期で実行され、送信要求命令後は送信完了を待たずに処理を戻す。制御部２２６はサーバプロセス２１０の制御情報送受信部２１１を経由して、転送要求結果を親ノードに送信する。
【００４４】
スナップショット（ｎ）の送信が完了すると、制御部２２６は制御情報送信部２２５を経由して、子ノードへ今回送信分スナップショット（ｎ）の転送要求を送信する。サーバプロセス２１０は子ノードからの転送要求結果を受信し、当該スナップショット制御プロセス２２０の制御部２２６に結果を伝える。転送要求結果が成功の場合は、制御情報送信部２２５を経由して、前回送信分スナップショット（ｎ-１）の削除要求を親ノードに命令する。転送要求結果が失敗の場合は、前回送信分スナップショット（n-1）および今回送信分スナップショット（n）を保存する。
【００４５】
次に図２、図４、図７、図９を参照し、中間ノードがスナップショット送信中にスナップショットを受信した場合のシーケンスを説明する。サーバプロセス２１０の制御情報送受信部２１１が、転送要求を受信し、制御部２２６に伝える。このときスナップショット送信中に制御部２２６が転送要求を受信すると、スナップショット確認部２２３に対して、スナップショット確認要求を命令する。このとき、前回受信分スナップショット（ｎ+1）が存在していなければ、当該の今回受信分スナップショットが保存されていることを確認し、制御部２２６はサーバプロセス２１０の制御情報送受信部２１１を経由し、転送要求結果を親ノードに送信する。前回受信分スナップショット（ｎ+1）が存在していれば、当該の今回受信分スナップショットが保存されていることを確認し、制御部２２６はスナップショット削除部２２４に前回受信分スナップショット（ｎ+1）削除要求を命令する。この場合スナップショット（n）を送信中なので、スナップショット削除部２２４は、前回受信分スナップショット（ｎ+1）と今回受信分スナップショット（ｎ+２）とをマージしたデータで、今回受信分スナップショット（ｎ+２）を置き換え、当該スナップショット（ｎ+1）の削除を実行する。加えて、制御情報送信部２２５を経由し、前回受信分スナップショット（ｎ+1）の削除要求を親ノードに命令する。処理完了後、制御部２２６はサーバプロセス２１０の制御情報送受信部２１１を経由し、転送要求結果を親ノードに送信する。
【００４６】
２．３．  末端ノードのスナップショット受信シーケンス
次に図２、図３、図７、図１０を参照し、末端ノードの動作シーケンスについて説明する。スナップショット制御プロセス２２０の各処理はスナップショット制御部２２６（以降、制御部２２６）が制御する。
【００４７】
スナップショット受信部２３０はスナップショット（ｎ）を受信すると、ファイルシステム２４１にスナップショットを適用する。これにより、親ノードと自ノードのファイルシステム２４１の同期がとられる。
【００４８】
次にサーバプロセス２１０の制御情報送受信部２１１が、転送要求を受信し、制御部２２６に伝える。制御部２２６が転送要求を受信すると、スナップショット確認部２２３に対して、スナップショット確認要求を命令する。スナップショット確認部２２３は当該スナップショットが保存されているかどうかファイルシステム２４１を確認する。このとき、転送する子ノードが存在しないので、転送処理は実行しない。保存されていれば、制御部２２６はスナップショット削除部２２４に前回受信分スナップショット（ｎ-１）削除要求を命令する。スナップショット削除部２２４は、当該スナップショットの削除を実行する。次に制御情報送信部２２５を経由し、前回受信分スナップショット（ｎ-１）の削除要求を親ノードに命令する。処理完了後、制御部２２６はサーバプロセス２１０の制御情報送受信部２１１を経由し、転送要求結果を親ノードに送信する。
【００４９】
２．４．共通シーケンス
取得転送サイクルとは非同期で、サーバプロセス２１０の制御情報送受信部２１１は子ノードから前回送信分スナップショット（ｎ-１）の削除要求を受信する。受信した場合、当該スナップショット制御プロセス２２０の制御部２２６に削除要求を命令し、制御部２２６はスナップショット削除部２２４に当該スナップショット削除要求を命令する。スナップショット削除部は、当該スナップショットの削除を実行する。当該スナップショットの削除とは、管理情報であるスナップショットを削除するということで、ファイルシステムの実データを削除するということではない。送信中スナップショットが存在した場合は、段落００４５にあるようにマージ処理を実行する。
【００５０】
取得転送サイクルとは非同期で、サーバプロセス２１０の制御情報送受信部２１１はノードステータス変更要求を受信する。受信した場合、当該スナップショット制御プロセス２２０の制御部２２６にノードステータス変更要求を命令し、制御部２２６はノードリスト２２１の当該ノードステータスを変更する。
【００５１】
３．ノード離脱時のシーケンス
図５を参照し、ノード離脱時のシーケンスを説明する。図５の例では中間ノード２から子ノード３への転送中にノード３がノード群から離脱した場合のシーケンスである。スナップショット送信中にノード３がノード群から離脱（例えば、ノードダウン）した場合、送信中スナップショット（n）および前回送信分スナップショット（n-1）を削除しないよう保存し、ノードリストのノード３のステータスを異常状態にする。また、親ノード１に対して当該スナップショット保存およびノード３のステータス変更要求を送信する。
【００５２】
このように、前回送信分スナップショット（n-1）および送信中スナップショット（n）の両方を保存する。この２つのスナップショットを保存する理由は、ノード３へスナップショット送信が完了したかどうかノード３離脱時点では不明なためである。離脱したノード３がノード群へ復帰する時に、ノード３の持つ最新のスナップショットは、ノード２、ノード１が保存しておいた２つのスナップショットのいずれかとなり、そのスナップショットを起点に再同期することが可能になる。
【００５３】
スナップショット保存後は、サイクル処理を継続する。ノード２は次のプライオリティの子ノードが存在すればスナップショット転送を行う。図５の例では、ノード２に子ノードが存在しないため、ノード２はノード群の末端ノード機能で動作する。
【００５４】
４．ノード復帰時のシーケンス
次に図６を参照し、ノード復帰のシーケンスを説明する。図６の例ではノード３がノード２に対して復帰要求を送信した場合のシーケンスである。ノード３は自身の持つ最新スナップショット（n-1）を起点に、ノード２に対し復帰要求を送信する。ノード２は復帰要求を受信すると、保存スナップショット（n-1）を起点に前回受信分スナップショット（n）までの差分同期を実行する。
【００５５】
この差分同期とは非同期で、ノード１からノード２へスナップショットが送信され、サイクル処理を実行する。このとき、差分同期実行中は、前回受信分スナップショット（n）は削除対象から外れる。
【００５６】
ノード２とノード３との差分同期が完了後、ノード２は中間ノードに昇格、ノード３を末端ノードとしてノード群に加える。また、ノード３のスナップショット（n-1）およびスナップショット（n-2）を削除、親ノード２に対し保存スナップショット（n-1）および保存スナップショット（n-2）の削除要求およびステータス変更要求を送信する。
【００５７】
ノード２は、保存スナップショットの削除要求およびステータス変更要求を受信すると、当該スナップショットを削除し、ノード３のステータスを正常に変更する。処理が完了すると、親ノード１に対して当該スナップショットの削除要求およびステータス変更要求を送信する。
【００５８】
ノード１は、保存スナップショットの削除要求およびステータス変更要求を受信すると、当該スナップショットを削除し、ノード３のステータスを正常に変更する。このとき、削除処理とは非同期でノード１とノード２間のサイクル処理は継続している。
【００５９】
差分同期完了後、ノード２がスナップショット（n+2）の転送要求を受信した場合、当該スナップショットが保存されているかどうかファイルシステムを確認し、保存されていれば、前回受信分スナップショット（n+1）の削除を実行し、親ノード１に対して前回受信分スナップショット（n+1）の削除要求を送信する。処理完了後、ノード３へスナップショット（n+2）を送信する。この送信は非同期で実行され、転送要求の処理結果を親ノード１に返す。
【００６０】
送信中のスナップショット（ｎ+2）の送信が完了すると、ノード２からノード３に対してスナップショット（ｎ+2）の転送要求を送信する。ノード３で当該スナップショットが保存されていることを確認し、前回受信分スナップショット（ｎ）を削除する。ノード２への転送要求結果に加えて、ノード３からノード２に対し前回受信分スナップショット（ｎ）の削除要求を送信する。ノード２は転送要求結果を受信すると、親ノード１に対して前回送信分スナップショット（ｎ）の削除要求を送信する。以上の処理を実行し、全ノードで同期がとれた定常状態に戻る。
【００６１】
■補足
１．転送要求パケットについて
図１１を参照し、転送要求パケットについて説明する。転送要求パケットには次を含む。
コンピュータ装置上で一意なファイルシステム名またはそれを示すIDなど。
転送対象のスナップショット名またはそれを示すIDなど。
送信元ノード名またはIPアドレスなど送信元ノードを示すもの。
既に受信したノードに転送要求することを防止する未送信ノードビット。
【００６２】
未送信ノードビットは、ビットがノード順になっており、先頭ノードが転送要求送信時に、送信すべきノードのビットを1にする。中間ノードは転送時に自身のビットを0にして、子ノードへ転送要求を送信する。
【００６３】
２．ノードリストについて
図１１を参照し、ノードリストについて説明する。各ノードはそれぞれノード群に登録されているノードリストを保持するが、全ノードのステータス管理を行うのではなく、自身の親ノードおよび子ノードのステータスのみ管理する。子ノードに対してデータを送信できなかった場合、ノード群から離脱したとみなし、子ノードのステータスを異常状態にする。親ノードからの通信が異常終了した場合は、親ノードのステータスを異常状態にする。また、ノード群から離脱したノードからのステータス変更要求を受けて、当該ノードのステータスを正常にする。
【００６４】
３．ネクストホップについて
図１２を参照し、ネクストホップについて説明する。転送要求パケットの未送信ノードビットのサイズ次第でデータ転送可能ノード数が決まる。ネクストホップアドレスを設定している場合は、ノード群の末端ノードは中間ノード機能で動作し、ネクストホップアドレスへスナップショットを転送する。通常、ネクストホップアドレスは次のノード群の仮想IPアドレスを指定する。物理IPアドレスを指定しても良い。次のノード群のネクストホップアドレスを持つノードは中間ノード機能で動作する。
【００６５】
図１２の場合、先頭ノード1-1のスナップショットをノード1-4まで順に転送し、ノード1-4は中間ノード機能で動作し、ネクストホップアドレスへ転送する。ネクストホップアドレスを持つノード2-1は中間ノード機能で動作し、スナップショットをノード2-4まで順に転送する。ノード2-4は末端ノードとして動作する。
【００６６】
次に図１３を参照し、ノード異常が発生した場合について説明する。図１３は、ノード群の末端ノードが離脱、および次のノード群の先頭ノードが離脱した場合の例である。ノード1-4が離脱しているので、ネクストホップへの転送処理はノード1-4の親にあたるノード1-3が代行する。ノード2-1が離脱しているので、ネクストホップアドレスはノード2-1の子ノードにあたるノード2-2が保持し、処理を代行する。
【００６７】
[本実施形態の効果]
１．複数ノードでデータ同期をとることができ、単数または複数ノードに障害が発生した場合も、残りのノードでデータを利用することができる。
２．スナップショット機能を持つあらゆるファイルシステムについて本発明を利用することが出来る。
【００６８】
[他の実施形態]
１．スナップショット機能を持つ様々なファイルシステムが本発明の対象となる。
２．転送対象はファイルシステムのスナップショットだけでなく、全ての差分保存機能を持つデータが対象となる。
３．データは暗号化して送信することもできる。
４．データは圧縮して送信することもできる。
５．障害発生後のアプリケーション切り替えにHAクラスタソフトウェアを利用することで、業務停止時間を最小限にすることができる。
【００６９】
以上本発明の実施形態について説明したが、本発明は以上の実施形態にのみ限定されず、その他各種の付加変更が可能である。また、本発明の分散ファイルシステムを構成する計算機ノードの制御手段は、コンピュータとプログラムとで実現することができる。プログラムは、磁気ディスクや半導体メモリなどのコンピュータ読み取り可能な記録媒体に記録されて提供され、コンピュータの立ち上げ時などにコンピュータに読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータ上に第１の実施形態における制御手段などを実現する。
【符号の説明】
【００７０】
１１０、１２０、１３０…計算機ノード
１１１…ファイルシステム（マスター）
１１２…増分データ生成手段
１１３、１２３、１３３…記憶手段
１１４、１２４、１３４…制御手段
１２１、１３１…ファイルシステム（複製）
【図１】
0005776267.tif 000002
【図２】
0005776267.tif 000003
【図３】
0005776267.tif 000004
【図４】
0005776267.tif 000005
【図５】
0005776267.tif 000006
【図６】
0005776267.tif 000007
【図７】
0005776267.tif 000008
【図８】
0005776267.tif 000009
【図９】
0005776267.tif 000010
【図１０】
0005776267.tif 000011
【図１１】
0005776267.tif 000012
【図１２】
0005776267.tif 000013
【図１３】
0005776267.tif 000014
【図１４】
0005776267.tif 000015
【図１５】
0005776267.tif 000016
【図１６】
0005776267.tif 000017