以下に添付図面を参照して、この発明に係るスナップショット制御装置、スナップショット制御方法およびスナップショット制御プログラムの実施形態を詳細に説明する。なお、この実施形態によりこの発明が限定されるものではない。
[第1の実施形態におけるスナップショット制御システムの構成の一例]
図1は、第1の実施形態におけるスナップショット制御システムの構成の一例を示す図である。
図1に示すように、第1の実施形態におけるスナップショット制御システムは、マスタサーバ100と、複数のデータサーバ200、300、400、500、600として構成される。マスタサーバ100、データサーバ200、300、400、500、600はネットワーク800で接続される。マスタサーバ100は分散ファイルシステムの名前空間やデータサーバへのチャンクの割り当てなどを管理するためのメタデータを保持するスナップショット制御装置である。データサーバ200、300、400、500、600はチャンクを保持する記憶装置である。外部アプリケーション700はファイルやディレクトリの作成や削除、スナップショットの作成や削除、ファイルの読み出しや書き込みなどを要求する。図1では、例として、1つのマスタサーバを示しているが、可用性や耐障害性を高めるために、複数のマスタサーバを用意し、マスタサーバ間でメタデータを同期するようにしてもよい。また、図1では、例として、5つのデータサーバを示しているが、データサーバの数は5つに限定されない。
データサーバ200、300、400、500、600には各データサーバを一意に識別するためのデータサーバ識別子が割り当てられる。例えば、データサーバ200、300、400、500、600が動作するコンピュータのネットワークインタフェースに割り当てられたIPアドレスをデータサーバ識別子とする。図1の例では、データサーバ200、300、400、500、600にはそれぞれデータサーバ識別子ds2、ds3、ds4、ds5、ds6が割り当てられている。
外部アプリケーション700が書き込むファイルデータは固定長のチャンクに分割されてデータサーバに格納される。各チャンクにはチャンクを一意に識別するためのチャンク識別子が割り当てられる。各チャンクは定められた冗長度の数のデータサーバに格納される。
図2は、第1の実施形態におけるファイルデータと固定長のチャンクの関係を示す図である。図2の例では、ファイルデータ900は固定長のチャンク910、920、930に分割される。チャンク910、920、930にはそれぞれチャンク識別子c1、c2、c3が割り当てられている。なお、ファイルのサイズが固定長の倍数でない場合、末尾のチャンク930のサイズは固定長よりも小さくなる。また、ファイル中にデータが存在しない区間がある場合、固定長よりも小さいチャンクとなったり、チャンクが割り当てられていない区間となったりすることがある。
図3は、第1の実施形態におけるスナップショットと固定長のチャンクの関係を示す図である。図3(1)はスナップショット作成前のファイル1 1000の状態である。ファイル1 1000はチャンク識別子c1、c2、c3で識別されるチャンク1010、1020、1030で構成されている。図3(2)はファイル1 1000のスナップショットとしてファイル2 1100を作成したときのファイル1 1000とファイル2 1100の状態である。ファイル1 1000とファイル2 1100はチャンク識別子c1、c2、c3で識別されるチャンク1010、1020、1030を共有している。
図3(3)はファイル2 1100の末尾へ書き込みを行った後のファイル1 1000とファイル2 1100の状態である。ファイル2 1100への書き込みを行うと、書き込み対象チャンクであるチャンク識別子c3で識別されるチャンク1030をコピーして、チャンク識別子c4で識別されるチャンク1130を生成する。ファイル2 1100はチャンク識別子c4で識別されるチャンク1130を参照するように変更される。書き込みはチャンク識別子c4で識別されるチャンク1130に対して行われる。ファイル1 1000はチャンク識別子c3で識別されるチャンク1030を参照したままである。また、チャンク識別子c1で識別されるチャンク1010とチャンク識別子c2で識別されるチャンク1020はファイル1 1000とファイル2 1100とで共有されたままである。
[第1の実施形態におけるマスタサーバ100の構成の一例]
図4は、第1の実施形態におけるマスタサーバ100の構成の一例を示す図である。マスタサーバ100はファイル管理部110とデータサーバ状態管理部120を備える。ファイル管理部110はファイルやディレクトリの生成や削除、ファイルへのチャンクの割り当て、チャンクを保持するデータサーバの割り当てを管理する。ファイル管理部110はファイルと当該ファイルを構成するチャンクとを対応づけるためのファイルテーブル111を保持する。また、ファイル管理部110はチャンクと当該チャンクを保持するデータサーバとを対応づけるためのチャンクテーブル112を保持する。また、ファイル管理部110は、決定部113および制御部114を有する。
決定部113は、複数のデータサーバに格納されたファイルデータであって、固定長のチャンクに分割して格納されたファイルデータに対するスナップショットへの書き込み要求を受け付けた場合に、コピーオンライトにより、該書き込み要求の対象となるチャンクのコピー先のデータサーバを、各データサーバにおけるデータ記憶部の空き容量、コピーされるチャンクを保持しているデータサーバと各データサーバとの距離、各データサーバの負荷状態、各データサーバにおける複数のファイルに共有されているチャンクの数のいずれか一つまたは複数に基づいて決定する。
例えば、決定部113は、データサーバにおけるデータ記憶部の空き容量が所定の閾値以上であるデータサーバのなかから、後述するデータサーバ状態管理部120によって取得された負荷状態が最も低いデータサーバを、コピー先のデータサーバとして決定する。
また、決定部113は、例えば、データサーバにおけるデータ記憶部の空き容量が所定の閾値以上であるデータサーバのなかから、コピーされるチャンクを保持しているデータサーバとの距離が最も小さいデータサーバを、コピー先のデータサーバとして決定する。
また、決定部113は、例えば、データサーバにおけるデータ記憶部の空き容量が所定の閾値以上であるデータサーバのなかから、各データサーバにおける複数のファイルに共有されているチャンクの数が所定の閾値未満であるデータサーバの1つを、コピー先のデータサーバとして決定する。
ここで、データサーバにおけるデータ記憶部の空き容量が所定の閾値以上であるデータサーバのなかから、コピーされるチャンクを保持しているデータサーバとの「距離」、各データサーバの「負荷状態」、各データサーバにおける複数のファイルに共有されている「チャンクの数」のいずれのパラメータに基づいて、コピー先のデータサーバを決定するかは、管理者が任意に選択できるものとする。例えば、データサーバ同士のネットワーク上の距離が離れているようなスナップショット制御システムである場合には、コピーされるチャンクを保持しているデータサーバとの「距離」が最も小さいデータサーバを、コピー先のデータサーバとして決定するように設定することが好ましい。このように、スナップショット制御システムの特性に応じて、任意にパラメータを選択することができる。
また、複数のパラメータを設定することも可能であるし、複数のパラメータを選択して、パラメータに優先順位を設定することも可能である。例えば、各データサーバの「負荷状態」を最も高い優先順位に設定し、各データサーバにおける複数のファイルに共有されている「チャンクの数」を2番目に高い優先順位に設定する。このような場合には、例えば、負荷状態が最も低いデータサーバが複数ある場合には、それらのデータサーバのなかから、複数のファイルに共有されているチャンクの数が所定の閾値未満であるデータサーバを、コピー先のデータサーバとして決定するようにしてもよい。
また、制御部114は、決定部113によって決定されたデータサーバに対して、書き込み要求の対象となるチャンクをコピーするように制御する。
データサーバ状態管理部120は、データサーバの状態を管理する。データサーバ状態管理部120は、データサーバの状態に関する情報を保持するデータサーバ状態管理テーブル121を保持する。データサーバ状態管理部120は、すべてのデータサーバから各データサーバのデータ記憶部に格納可能なデータの最大容量と、データ記憶部の空き容量と、データサーバの負荷状態をそれぞれ取得する。データサーバのデータ記憶部については後述する。
ファイルテーブル111は、各ファイルまたはディレクトリに対して、当該ファイルまたはディレクトリのパス名と、ファイルかディレクトリかを示すパス種別、ファイルを構成する各チャンクのチャンク識別子のリストであるチャンク識別子リストとを保持する。これらに加えて、ファイルテーブル111は、ファイルまたはディレクトリに関するその他の情報を保持してもよい。
図5は、第1の実施形態におけるファイルテーブル111の構成の一例を示す図である。図5の例では、パス名として、ディレクトリ「/」、ファイル「/file1」、ファイル「/file2」、ファイル「/file3」がファイルテーブル111に登録されている。パス種別では、「f」はファイル、「d」はディレクトリを表している。第1の実施形態におけるディレクトリは、当該ディレクトリ内のファイルやディレクトリに関する情報を持たないため、ディレクトリにおけるチャンク識別子リストは使用されない。図5の例では、ディレクトリ「/」の未使用のチャンク識別子リストを「−」で表している。ファイル「/file1」はチャンク識別子c1、c2、c3で識別されるチャンクで構成されている。ファイル「/file2」はファイル「/file1」のスナップショットとして作成されたあと、ファイルの末尾へ書き込みを行った状態であり、チャンク識別子c1、c2、c4で識別されるチャンクで構成されている。ファイル「/file3」はチャンク識別子c5で識別されるチャンクで構成されている。
チャンクテーブル112は、各チャンクに対して、当該チャンクのチャンク識別子と、当該チャンクを共有しているファイルの数を示す参照カウントと、当該チャンクを格納する各データサーバのデータサーバ識別子のリストであるデータサーバ識別子リストとを保持する。
図6は、第1の実施形態におけるチャンクテーブル112の構成の一例を示す図である。図6の例では、チャンク識別子c1で識別されるチャンクは参照カウントが2であり、データサーバ識別子ds2、ds3、ds4で識別されるデータサーバ各々に格納されている。チャンク識別子c2で識別されるチャンクは参照カウントが2であり、データサーバ識別子ds2、ds5、ds6で識別されるデータサーバ各々に格納されている。チャンク識別子c3で識別されるチャンクは参照カウントが1であり、データサーバ識別子ds2、ds4、ds5で識別されるデータサーバ各々に格納されている。チャンク識別子c4で識別されるチャンクは参照カウントが1であり、データサーバ識別子ds2、ds4、ds6で識別されるデータサーバ各々に格納されている。チャンク識別子c5で識別されるチャンクは参照カウントが1であり、データサーバ識別子ds3、ds4、ds5で識別されるデータサーバ各々に格納されている。
図6の例では、チャンク識別子c1で識別されるチャンクおよびチャンク識別子c2で識別されるチャンクはファイル「/file1」とファイル「/file2」とで共有されているため、参照カウントがそれぞれ2になっている。また、ファイル「/file2」の末尾への書き込みでは、コピーオンライトにより、チャンク識別子c3で識別されるチャンクがチャンク識別子c4で識別されるチャンクにコピーされ、そのあとにチャンク識別子c4で識別されるチャンクへ書き込みが行われている。データサーバ識別子ds2で識別されるデータサーバと、データサーバ識別子ds4で識別されるデータサーバでは、コピーオンライトによるチャンクのコピーは同一データサーバ内でローカルに行われているが、データサーバ識別子ds5で識別されるデータサーバでは、データサーバ識別子ds6で識別されるデータサーバへのチャンクのコピーが行われている。
データサーバ状態管理テーブル121は、各データサーバに対して、当該データサーバのデータサーバ識別子、当該データサーバのデータ記憶部に格納可能なデータの最大容量と、データ記憶部の空き容量と、当該データサーバの負荷状態とを保持する。これらに加えて、データサーバ状態管理テーブル121は、データサーバに関するその他の情報を保持してもよい。
図7は、第1の実施形態におけるデータサーバ状態管理テーブル121の構成の一例を示す図である。図7の例では、データサーバ識別子ds2で識別されるデータサーバ200のデータ記憶部に格納可能なデータの最大容量は2.0テラバイト(TB)、空き容量は1.0テラバイト(TB)、負荷状態は0.5、データサーバ識別子ds3で識別されるデータサーバ300のデータ記憶部に格納可能なデータの最大容量は2.0テラバイト(TB)、空き容量は1.1テラバイト(TB)、負荷状態は1.0、データサーバ識別子ds4で識別されるデータサーバ400のデータ記憶部に格納可能なデータの最大容量は1.0テラバイト(TB)、空き容量は0.6テラバイト(TB)、負荷状態は3.0、データサーバ識別子ds5で識別されるデータサーバ500のデータ記憶部に格納可能なデータの最大容量は1.0テラバイト(TB)、空き容量は0.1テラバイト(TB)、負荷状態は0.8、データサーバ識別子ds6で識別されるデータサーバ600のデータ記憶部に格納可能なデータの最大容量は1.5テラバイト(TB)、空き容量は0.7テラバイト(TB)、負荷状態は0.5である。
このように、マスタサーバ100は、コピーオンライトによるチャンクのコピーにおいて、多様なコピーオンライト戦略に基づいて、コピーオンライトによるチャンクのコピー先を決定する。このため、複数のファイルに共有されているチャンクを保持しているデータサーバのデータ記憶部の空き容量が不足しても、データ記憶部の空き容量がある他のデータサーバにチャンクをコピーすることにより、書き込みを継続したり、データサーバ間で負荷を分散したりすることができるという効果を奏する。
[第1の実施形態におけるデータサーバの構成の一例]
図8は、第1の実施形態におけるデータサーバ200、300、400、500、600の構成の一例を示す図である。なお、データサーバ200、300、400、500、600の構成はいずれも同様であるものとし、以下、データサーバ200を代表例として説明する。以下の説明では、必要に応じて対応する他のデータサーバ300、400、500、600の構成要素の参照符号を、括弧を付して併記する。
データサーバ200(300、400、500、600)は、データ記憶部210(310、410、510、610)、データアクセス部220(320、420、520、620)、および状態通知部230(330、430、530、630)を備える。
データ記憶部210(310、410、510、610)はデータサーバ200(300、400、500、600)が格納するすべてのチャンク、およびチャンク情報テーブル211(311、411、511、611)を保持する。
第1の実施形態におけるチャンク情報テーブル211(311、411、511、611)は、格納する各チャンクに対して、当該チャンクのチャンク識別子と、データ記憶部210(310、410、510、610)内での当該チャンクの格納場所と、当該チャンクのサイズとを保持する。これらに加えて、チャンク情報テーブル211(311、411、511、611)は、チャンクに関するその他の情報を保持してもよい。
図9は、第1の実施形態におけるチャンク情報テーブル211(311、411、511、611)の構成の一例を示す図である。図9の例では、チャンク識別子c1で識別されるチャンクは、データ記憶部210内の「p1」で識別される位置に格納されており、チャンクのサイズは64メガバイト(MB)、チャンク識別子c2で識別されるチャンクは、データ記憶部210内の「p2」で識別される位置に格納されており、チャンクのサイズは64メガバイト(MB)、チャンク識別子c3で識別されるチャンクは、データ記憶部210内の「p3」で識別される位置に格納されており、チャンクのサイズは48メガバイト(MB)、チャンク識別子c4で識別されるチャンクは、データ記憶部210内の「p4」で識別される位置に格納されており、チャンクのサイズは64メガバイト(MB)である。
データアクセス部220(320、420、520、620)は、データ記憶部210(310、410、510、610)に格納されているチャンクの読み出しや書き込みを実行する。また、データアクセス部220(320、420、520、620)は、データ記憶部210(310、410、510、610)に格納されているチャンク情報テーブル211(311、411、511、611)の情報の読み出しや書き込みを実行する。
状態通知部230(330、430、530、630)は、データ記憶部210(310、410、510、610)の状態やデータサーバ200(300、400、500、600)の負荷状態を監視し、マスタサーバ100に通知する。状態通知部230(330、430、530、630)は、データ記憶部210(310、410、510、610)に格納可能なデータの最大容量とデータ記憶部210(310、410、510、610)の空き容量とデータサーバ200(300、400、500、600)の負荷状態とを定期的に検知し、検知した最大容量と空き容量と負荷状態とをマスタサーバ100へ通知する。
マスタサーバ100はデータサーバ状態管理部120のデータサーバ状態管理テーブル121における当該データサーバの最大容量と空き容量と負荷状態とを、通知された最大容量と空き容量と負荷状態とで更新する。これらに加えて、状態通知部230(330、430、530、630)は、データサーバ200(300、400、500、600)に関するその他の情報をマスタサーバ100に通知してもよい。なお、ここでは定期的に状態を検知し通知するものとするが、なんらかのイベントの発生に応じて検知および通知を実行するものとしてもよい。
[第1の実施形態におけるスナップショット制御の一例]
はじめに、ファイルやディレクトリを生成するときの処理の一例を[ファイル生成処理の一例]と[ディレクトリ生成処理の一例]で説明する。次に、ファイルやディレクトリのスナップショットを生成するときの処理の一例を[スナップショット生成処理の一例]で説明する。最後に、ファイルへの書き込み処理の一例を[書き込み処理の一例]で説明する。
[ファイル生成処理の一例]
[ファイル生成処理における外部アプリケーション700の処理の一例]
図10は、第1の実施形態におけるファイル生成処理において、外部アプリケーション700がマスタサーバ100へファイル生成要求を送信したときの動作の一例を示すフローチャートである。
外部アプリケーション700はマスタサーバ100へファイル生成要求と、ファイルパス名とを送信する(ステップS1001)。そして、外部アプリケーション700はマスタサーバ100からファイル生成応答を受信する(ステップS1002)。
[ファイル生成処理におけるマスタサーバ100の処理の一例]
図11は、第1の実施形態におけるファイル生成処理において、マスタサーバ100が外部アプリケーション700からファイル生成要求を受信したときの動作の一例を示すフローチャートである。
マスタサーバ100は外部アプリケーション700からファイル生成要求と、ファイルパス名とを受信する(ステップS1101)。そして、マスタサーバ100はファイル管理部110のファイルテーブル111に当該ファイルパス名と、ファイルであることを示すパス種別「f」と、空のチャンク識別子リストとを登録する(ステップS1102)。続いて、マスタサーバ100は外部アプリケーション700にファイル生成応答を送信する(ステップS1103)。
[ディレクトリ生成処理の一例]
[ディレクトリ生成処理における外部アプリケーション700の処理の一例]
図12は、第1の実施形態におけるディレクトリ生成処理において、外部アプリケーション700がマスタサーバ100へディレクトリ生成要求を送信したときの動作の一例を示すフローチャートである。
外部アプリケーション700はマスタサーバ100へディレクトリ生成要求と、ディレクトリパス名とを送信する(ステップS1201)。そして、外部アプリケーション700はマスタサーバ100からディレクトリ生成応答を受信する(ステップS1202)。
[ディレクトリ生成処理におけるマスタサーバ100の処理の一例]
図13は、第1の実施形態におけるディレクトリ生成処理において、マスタサーバ100が外部アプリケーション700からディレクトリ生成要求を受信したときの動作の一例を示すフローチャートである。
マスタサーバ100は外部アプリケーション700からディレクトリ生成要求と、ディレクトリパス名とを受信する(ステップS1301)。そして、マスタサーバ100はファイル管理部110のファイルテーブル111に当該ディレクトリパス名と、ディレクトリであることを示すパス種別「d」とを登録する(ステップS1302)。チャンク識別子リストは使用しない。続いて、マスタサーバ100は外部アプリケーション700にディレクトリ生成応答を送信する(ステップS1303)。
[スナップショット生成処理の一例]
[スナップショット生成処理における外部アプリケーション700の処理の一例]
図14は、第1の実施形態におけるスナップショット生成処理において、外部アプリケーション700がマスタサーバ100へスナップショット生成要求を送信したときの動作の一例を示すフローチャートである。
外部アプリケーション700はマスタサーバ100へスナップショット生成要求と、スナップショット元パス名と、スナップショット先パス名とを送信する(ステップS1401)。そして、外部アプリケーション700はマスタサーバ100からスナップショット生成応答を受信する(ステップS1402)。
[スナップショット生成処理におけるマスタサーバ100の処理の一例]
図15は、第1の実施形態におけるスナップショット生成処理において、マスタサーバ100が外部アプリケーション700からスナップショット生成要求を受信したときの動作の一例を示すフローチャートである。
マスタサーバ100は外部アプリケーション700からスナップショット生成要求と、スナップショット元パス名と、スナップショット先パス名とを受信する(ステップS1501)。
そして、マスタサーバ100はファイル管理部110のファイルテーブル111におけるスナップショット元パス名に対するパス種別と、チャンク識別子リストとを取得する(ステップS1502)。
続いて、マスタサーバ100は当該パス種別が「f」ならば、ステップS1504へ、「d」ならば、ステップS1505へ遷移する(ステップS1503)。マスタサーバ100は当該パス種別が「f」ならば、ファイルスナップショット処理(ステップS1504−1〜ステップS1504−5)を実行する(ステップS1504)。
ここで、図16を用いて、マスタサーバ100のファイルスナップショット処理について説明する。マスタサーバ100はファイル管理部110のファイルテーブル111にスナップショット先パス名と、パス種別「f」と、ステップS1502で取得したチャンク識別子リストとを登録する(ステップS1504−1)。ここで、マスタサーバ100は当該チャンク識別子リスト内のすべてのチャンク識別子に対して後述するステップS1504−4の処理を実行する。
はじめに、当該チャンク識別子リスト内のチャンク識別子の位置を示すインデックスを当該チャンク識別子リスト内の先頭に設定する(ステップS1504−2)。
続いて、マスタサーバ100は当該チャンク識別子リスト内のすべてのチャンク識別子の処理が完了したか判定し(ステップS1504−3)、完了したら処理を終了する。そうでなければ、ステップS1504−4へ遷移する。
マスタサーバ100は当該チャンク識別子リスト内のすべてのチャンク識別子の処理が完了していなければ、ファイル管理部110のチャンクテーブル112における当該チャンク識別子リスト内のインデックスの位置のチャンク識別子に対する参照カウントの値を1増加させる(ステップS1504−4)。その後、マスタサーバ100はインデックスを当該チャンク識別子リスト内の次の位置に設定する(ステップS1504−5)。
図15の説明に戻って、マスタサーバ100は当該パス種別が「d」ならば、ディレクトリスナップショット処理(ステップS1505−1〜ステップS1505−11)を実行する(ステップS1505)。ディレクトリスナップショット処理では、ディレクトリ配下のファイルおよびディレクトリに対して再帰的にスナップショットを作成する。
ここで、図17を用いて、マスタサーバ100のディレクトリスナップショット処理について説明する。マスタサーバ100はファイル管理部110のファイルテーブル111から当該スナップショット元パス名配下にあるすべてのパス名のリスト(以降、スナップショット元配下パス名リスト)を取得する(ステップS1505−1)。
マスタサーバ100は当該スナップショット元配下パス名リスト内のすべてのパス名に対してステップS1505−4からステップS1505−10の処理を実行する。初めに、当該スナップショット元配下パス名リスト内のパス名の位置を示すインデックス1を当該スナップショット元配下パス名リスト内の先頭に設定する(ステップS1505−2)。
そして、マスタサーバ100は当該スナップショット元配下パス名リスト内のすべてのパス名の処理が完了したか判定し(ステップS1505−3)、完了したと判定した場合には、処理を終了する。また、処理が完了していないと判定した場合には、ステップS1505−4へ遷移する。
マスタサーバ100は当該スナップショット元配下パス名リスト内のすべてのパス名の処理が完了していなければ、ファイル管理部110のファイルテーブル111における当該スナップショット元配下パス名リスト内のインデックス1の位置のパス名に対するパス種別とチャンク識別子リストを取得する(ステップS1505−4)。
続いて、マスタサーバ100はファイル管理部110のファイルテーブル111に、当該スナップショット元配下パス名リスト内のインデックス1の位置のパス名におけるルートディレクトリから親ディレクトリまでの部分をスナップショット先パス名で置き換えたパス名と、ステップS1505−4で取得したパス種別、ステップS1505−4で取得したチャンク識別子リストとを登録する(ステップS1505−5)。
そして、マスタサーバ100は当該パス種別が「f」であるか「d」であるかを判定し、「f」ならば、ステップS1505−7へ、「d」ならば、ステップS1505−11へ遷移する(ステップS1505−6)。ここで、当該パス種別が「f」である場合には、マスタサーバ100は当該チャンク識別子リスト内のすべてのチャンク識別子に対して後述するステップS1505−9の処理を実行する。
初めに、当該チャンク識別子リスト内のチャンク識別子の位置を示すインデックス2を当該チャンク識別子リストの先頭に設定する(ステップS1505−7)。
そして、マスタサーバ100は当該チャンク識別子リスト内のすべてのチャンク識別子の処理が完了したら、ステップS1505−11へ、そうでなければ、ステップS1505−9へ遷移する(ステップS1505−8)。
マスタサーバ100は当該チャンク識別子リスト内のすべてのチャンク識別子の処理が完了していなければ、ファイル管理部110のチャンクテーブル112における当該チャンク識別子リスト内のインデックス2の位置のチャンク識別子に対する参照カウントの値を1増加させる(ステップS1505−9)。
そして、マスタサーバ100はインデックス2を当該チャンク識別子リスト内の次の位置に設定する(ステップS1505−10)。マスタサーバ100は当該チャンク識別子リスト内のすべてのチャンク識別子の処理が完了したら、インデックス1を当該スナップショット元配下パス名リスト内の次の位置に設定する(ステップS1505−11)。
図15の説明に戻って、ステップS1506において、マスタサーバ100は外部アプリケーション700へスナップショット生成応答を送信する(ステップS1506)。
[書き込み処理の一例]
[書き込み処理における外部アプリケーション700の処理の一例]
図18は、第1の実施形態における書き込み処理において、外部アプリケーション700がファイルへの書き込みを行うときの動作の一例を示すフローチャートである。
外部アプリケーション700はマスタサーバ100へチャンク情報取得要求と、ファイルパス名と、書き込み位置(ファイルの先頭からのオフセット)とを送信する(ステップS1601)。
そして、外部アプリケーション700はマスタサーバ100から当該書き込み位置に対応するチャンクのチャンク識別子(以降、書き込み対象チャンク識別子)と、当該書き込み対象チャンク識別子で識別されるチャンクを保持するデータサーバ(以降、書き込み対象チャンク保持データサーバ)のデータサーバ識別子のリスト(以降、書き込み対象チャンク保持データサーバ識別子リスト)とを受信する(ステップS1602)。
続いて、外部アプリケーション700は当該書き込み対象チャンク保持データサーバ識別子リスト内のデータサーバ識別子で識別されるデータサーバから最も距離の近いデータサーバを選択し、選択したデータサーバへデータ送信要求と、当該書き込み対象チャンク識別子と、書き込みデータと、当該書き込み対象チャンク保持データサーバ識別子リストとを送信する(ステップS1603)。
データ送信要求を受信したデータサーバは、まだデータ送信要求を受信していない当該書き込み対象チャンク保持データサーバのうち、最も距離が近いデータサーバへデータ送信要求を送信する。以降、すべての当該書き込み対象チャンク保持データサーバがデータ送信要求を受信するまでデータ送信要求の送信を繰り返す。データサーバがデータ送信要求を受信したときの動作については後述する。
二つのデータサーバ間の距離の例として、当該二つのデータサーバが動作しているコンピュータのネットワークインタフェースに割り当てられているIPアドレスの排他的論理和の自然対数に1を加算した値とする。この例では、二つのIPアドレスの上位ビットが異なるほど距離が大きくなる。ここでは、例として、最も距離の近いデータサーバとしてデータサーバ200を選択したとする。
そして、外部アプリケーション700はデータサーバ200からデータ送信応答を受信する(ステップS1604)。続いて、外部アプリケーション700はプライマリデータサーバへ書き込み要求と、当該書き込み対象チャンク識別子と、当該書き込み位置とを送信する(ステップS1605)。
プライマリデータサーバとは、マスタサーバ100からチャンクへの書き込みに関する制御を委譲されたデータサーバであり、当該書き込み対象チャンク保持データサーバ識別子リスト内のデータサーバ識別子で識別されるデータサーバの中からマスタサーバ100が選択する。また、当該書き込み対象チャンク保持データサーバ識別子リスト内のデータサーバ識別子で識別されるデータサーバのうち、プライマリデータサーバ以外のデータサーバをセカンダリデータサーバとする。プライマリデータサーバの選択方法については後述する。ここでは、例として、プライマリデータサーバとしてデータサーバ400が選択されたとする。そして、外部アプリケーション700はデータサーバ400から書き込み応答を受信する(ステップS1606)。
[書き込み処理におけるマスタサーバ100の処理の一例]
図19は、第1の実施形態における書き込み処理において、マスタサーバ100が外部アプリケーション700からチャンク情報取得要求を受信したときの動作の一例を示すフローチャートである。
マスタサーバ100は外部アプリケーション700からチャンク情報取得要求と、ファイルパス名と、書き込み位置とを受信する(ステップS1701)。そして、マスタサーバ100はファイル管理部110のファイルテーブル111から当該ファイルパス名に対するチャンク識別子リストを取得する(ステップS1702)。
マスタサーバ100は当該チャンク識別子リスト内に当該書き込み位置に対応するチャンク識別子(以降、書き込み位置チャンク識別子)が存在すれば、ステップS1704へ、そうでなければ、ステップS1707へ遷移する(ステップS1703)。コピーオンライトを発生させる書き込みでは、当該書き込み位置チャンク識別子が存在するため、ステップS1704へ遷移することになる。
そして、マスタサーバ100はファイル管理部110のチャンクテーブル112における当該書き込み位置チャンク識別子に対する参照カウントが2以上ならば、ステップS1705へ、そうでなければ、ステップS1706へ遷移する(ステップS1704)。
コピーオンライトを発生させる書き込みでは、当該書き込み位置チャンク識別子で識別されるチャンクは複数のファイルに共有されており、当該書き込み位置チャンク識別子に対する参照カウントは2以上であるため、ステップS1705へ遷移することになる。マスタサーバ100はコピーオンライト処理(ステップS1705−1〜ステップS1705−13)を実行する(ステップS1705)。
ここで、図20を用いて、コピーオンライト処理について説明する。マスタサーバ100はファイル管理部110のチャンクテーブル112から当該書き込み位置チャンク識別子に対するデータサーバ識別子リスト(以降、コピー対象チャンク保持データサーバ識別子リスト)を取得する(ステップS1705−1)。ここでは、例として、コピー対象チャンク保持データサーバ識別子リストとしてds2、ds4、ds5を取得したとする。
そして、マスタサーバ100は新たなチャンク識別子(以降、書き込み対象チャンク識別子)と、空のデータサーバ識別子リスト(以降、書き込み対象チャンク保持データサーバ識別子リスト)を生成する(ステップS1705−2)。
マスタサーバ100は当該コピー対象チャンク保持データサーバ識別子リスト内のすべてのデータサーバ識別子(以降、コピー対象チャンク保持データサーバ識別子)に対してステップS1705−5からステップS1705−11の処理を実行する。初めに、当該コピー対象チャンク保持データサーバ識別子リスト内のコピー対象チャンク保持データサーバ識別子の位置を示すインデックスを当該コピー対象チャンク保持データサーバ識別子リスト内の先頭に設定する(ステップS1705−3)。
マスタサーバ100は当該コピー対象チャンク保持データサーバ識別子リスト内のすべてのコピー対象チャンク保持データサーバ識別子の処理が完了したら、ステップS1705−13へ、そうでなければ、ステップS1705−5へ遷移する(ステップS1705−4)。
マスタサーバ100は当該コピー対象チャンク保持データサーバ識別子リスト内のすべてのコピー対象チャンク保持データサーバ識別子の処理が完了していなければ、当該コピー対象チャンク保持データサーバ識別子リスト内のインデックスの位置にあるコピー対象チャンク保持データサーバ識別子に対して、コピーオンライト戦略に基づいて、コピーされるチャンクを保持するデータサーバ(以降、書き込み対象チャンク保持データサーバ)を決定する(ステップS1705−5)。
コピーオンライト戦略の例として、コピー対象チャンク保持データサーバ識別子で識別されるデータサーバのデータ記憶部の空き容量が定められた閾値以上ならば、当該データサーバ自身を書き込み対象チャンク保持データサーバとして選択し、そうでなければ、すでに書き込み対象チャンク保持データサーバとして選択されたデータサーバが動作するコンピュータと同一のラックに収納されているコンピュータ上で動作するデータサーバを除いて、データ記憶部の空き容量が定められた閾値以上のデータサーバのうち、当該コピー対象チャンク保持データサーバ識別子リスト内のコピー対象チャンク保持データサーバ識別子で識別されるデータサーバ各々との距離の最小値が最も小さいデータサーバや、最も負荷状態の低いデータサーバや、保持しているチャンクのうち、参照カウントの値が2以上のチャンクの数が定められた閾値未満のデータサーバを書き込み対象チャンク保持データサーバとして選択する。また、各データサーバにおけるデータ記憶部の空き容量、コピーされるチャンクを保持しているデータサーバと各データサーバとの距離、各データサーバの負荷状態、各データサーバにおける複数のファイルに共有されているチャンクの数のいずれか一つまたは複数に基づいて選択することもできる。
ここで、各データサーバに対する参照カウントの値が2以上のチャンクの数を高速に取得するために、マスタサーバ100は、各データサーバに対して、当該データサーバのデータサーバ識別子と、当該データサーバ識別子で識別されるデータサーバにおける参照カウントの値が2以上のチャンクの数とを保持するテーブルを保持してもよい。
分散ファイルシステムがあらかじめ一つ以上のコピーオンライト戦略を用意し、ユーザがそれらから利用するコピーオンライト戦略を選択したり、ユーザが独自のコピーオンライト戦略を定義して利用したりしてもよい。
ここでは、例として、コピー対象チャンク保持データサーバ識別子がds2のときは書き込み対象チャンク保持データサーバとしてデータサーバ識別子ds2で識別されるデータサーバ200が、コピー対象チャンク保持データサーバ識別子がds4のときは書き込み対象チャンク保持データサーバとしてデータサーバ識別子ds4で識別されるデータサーバ400が、コピー対象チャンク保持データサーバ識別子がds5のときは書き込み対象チャンク保持データサーバとしてデータサーバ識別子ds6で識別されるデータサーバ600が、それぞれ選択されたとする。
そして、マスタサーバ100は当該コピー対象チャンク保持データサーバ識別子と当該書き込み対象チャンク保持データサーバのデータサーバ識別子(以降、書き込み対象チャンク保持データサーバ識別子)とが同一ならば、ステップS1705−7へ、そうでなければ、ステップS1705−9へ遷移する(ステップS1705−6)。
ここでは、コピー対象チャンク保持データサーバ識別子がds2、または、ds4のときはステップS1705−7へ、コピー対象チャンク保持データサーバ識別子がds5のときはステップS1705−9へ遷移することになる。
マスタサーバ100は当該コピー対象チャンク保持データサーバ識別子と当該書き込み対象チャンク保持データサーバ識別子とが同一ならば、当該書き込み位置チャンク識別子をコピー元チャンク識別子とし、書き込み対象チャンク保持データサーバ識別子ds2(ds4)で識別される書き込み対象チャンク保持データサーバ200(400)へローカルチャンクコピー要求と、当該コピー元チャンク識別子と、当該書き込み対象チャンク識別子とを送信する(ステップS1705−7)。
そして、マスタサーバ100は書き込み対象チャンク保持データサーバ200(400)からローカルチャンクコピー応答を受信する(ステップS1705−8)。
マスタサーバ100は当該コピー対象チャンク保持データサーバ識別子と当該書き込み対象チャンク保持データサーバ識別子とが同一でないならば、当該書き込み位置チャンク識別子をコピー元チャンク識別子とし、書き込み対象チャンク保持データサーバ識別子ds6で識別される書き込み対象チャンク保持データサーバ600へリモートチャンクコピー要求と、当該コピー元チャンク識別子と、当該書き込み対象チャンク識別子と、当該コピー対象チャンク保持データサーバ識別子リストとを送信する(ステップS1705−9)。
そして、マスタサーバ100は書き込み対象チャンク保持データサーバ600からリモートチャンクコピー応答を受信する(ステップS1705−10)。
マスタサーバ100はローカルチャンクコピー応答を受信するか、リモートチャンクコピーを受信すると、当該書き込み対象チャンク保持データサーバ識別子リストへ当該書き込み対象チャンク保持データサーバ識別子ds2(ds4、ds6)を追加する(ステップS1705−11)。
そして、マスタサーバ100はインデックスを当該コピー対象チャンク保持データサーバ識別子リスト内の次の位置に設定する(ステップS1705−12)。
マスタサーバ100はコピー対象チャンク保持データサーバ識別子リスト内のすべてのコピー対象チャンク保持データサーバ識別子の処理が完了したら、チャンクテーブル112を更新する(ステップS1705−13)。具体的には、マスタサーバ100はファイル管理部110のチャンクテーブル112に当該書き込み対象チャンク識別子と、参照カウント「1」と、当該書き込み対象チャンク保持データサーバ識別子リストとを登録する。また、マスタサーバ100はファイル管理部110のチャンクテーブル112における当該書き込み位置チャンク識別子に対する参照カウントの値を1減少させる。さらに、マスタサーバ100はファイル管理部110のファイルテーブル111における当該ファイルパス名に対するチャンク識別子リスト内の当該書き込み位置チャンク識別子を当該書き込み対象チャンク識別子で置き換える。
図19の説明に戻って、マスタサーバ100はプライマリデータサーバ、セカンダリデータサーバを選択する(ステップS1708)。具体的には、マスタサーバ100は当該書き込み対象チャンク保持データサーバ識別子リスト内から任意の書き込み対象チャンク保持データサーバ識別子を一つ選択し、当該書き込み対象チャンク保持データサーバ識別子で識別されるデータサーバをこの書き込みにおけるプライマリデータサーバとする。また、当該書き込み対象チャンク保持データサーバ識別子リスト内のその他の書き込み対象チャンク保持データサーバ識別子で識別されるデータサーバをセカンダリデータサーバとする。
当該書き込み対象チャンク保持データサーバ識別子リスト内で、どの書き込み対象チャンク保持データサーバ識別子がプライマリデータサーバのデータサーバ識別子であるかを判別できるように、例えば、プライマリデータサーバのデータサーバ識別子は当該書き込み対象チャンク保持データサーバ識別子リスト内の先頭に位置するようにする。その他の方法でプライマリデータサーバのデータサーバ識別子を判定できるようにしてもよい。
ここでは、例として、データサーバ識別子ds4で識別されるデータサーバ400がプライマリデータサーバとして、データサーバ識別子ds2で識別されるデータサーバ200と、データサーバ識別子ds6で識別されるデータサーバ600とがセカンダリデータサーバとして、それぞれ選択されたとする。
そして、マスタサーバ100はデータサーバ400に書き込み制御委譲要求と、当該書き込み対象チャンク識別子と、当該書き込み対象チャンク保持データサーバ識別子リストとを送信する(ステップS1709)。
そして、マスタサーバ100はデータサーバ400から書き込み制御委譲応答を受信する(ステップS1710)。続いて、マスタサーバ100は外部アプリケーション700へチャンク情報として、当該書き込み対象チャンク識別子と、当該書き込み対象チャンク保持データサーバ識別子リストとを送信する(ステップS1711)。
コピーオンライトを発生させる書き込みでは、ステップS1706とステップS1707は実行されない。ステップS1706は参照カウントの値が1であり、複数のファイルに共有されていないチャンクへの書き込み処理、ステップS1707はチャンクが割り当てられていない書き込み位置への書き込み処理である。
ここで、図21を用いて、前述した既存チャンク処理について説明する。マスタサーバ100は既存チャンク情報を取得する(ステップS1706−1)。具体的には、マスタサーバ100は当該書き込み位置チャンク識別子を書き込み対象チャンク識別子とする。また、マスタサーバ100はファイル管理部110のチャンクテーブル112における書き込み対象チャンク識別子に対するデータサーバ識別子リストを取得し、書き込み対象チャンク保持データサーバ識別子リストとする。
ここで、図22を用いて、前述した新規チャンク処理について説明する。マスタサーバ100は新規チャンク処理(ステップS1707−1〜ステップS1707−9)を実行する。
まず、マスタサーバ100は新たなチャンク識別子(以降、書き込み対象チャンク識別子)と、空のデータサーバ識別子リスト(以降、書き込み対象チャンク保持データサーバ識別子リスト)を生成する(ステップS1707−1)。
そして、マスタサーバ100は冗長度の数だけステップS1707−4からステップS1707−7の処理を実行する。初めに、ループカウントの値を0に設定する(ステップS1707−2)。続いて、ループカウントの値が冗長度の数より小さければ、ステップS1707−4へ、そうでなければ、ステップS1707−9へ遷移する(ステップS1707−3)。
マスタサーバ100はループカウントの値が冗長度の数より小さければ、新たに生成するチャンクを保持する書き込み対象チャンク保持データサーバを決定する(ステップS1707−4)。例えば、データ記憶部の空き容量が定められた閾値以上、かつ、保持しているチャンクのうち、参照カウントの値が2以上のチャンクの数が定められた閾値未満のデータサーバのなかから、それぞれ異なるラックに収納されたコンピュータ上で動作するデータサーバを書き込み対象チャンク保持データサーバとして選択する。
そして、マスタサーバ100は当該書き込み対象チャンク保持データサーバへチャンク生成要求と、当該書き込み対象チャンク識別子とを送信する(ステップS1707−5)。続いて、マスタサーバ100は当該書き込み対象チャンク保持データサーバからチャンク生成応答を受信する(ステップS1707−6)。
そして、マスタサーバ100は当該書き込み対象チャンク保持データサーバ識別子リストへ当該書き込み対象チャンク保持データサーバ識別子を追加する(ステップS1707−7)。続いて、マスタサーバ100はループカウントの値を1増加させる(ステップS1707−8)。
マスタサーバ100はループカウントの値が冗長度の数以上ならば、チャンクテーブル112を更新する(ステップS1707−9)。具体的には、マスタサーバ100はファイル管理部110のチャンクテーブル112に当該書き込み対象チャンク識別子と、参照カウント「1」と、当該書き込み対象チャンク保持データサーバ識別子リストとを登録する。また、マスタサーバ100はファイル管理部110のファイルテーブル111における当該ファイルパス名に対するチャンク識別子リスト内の当該書き込み位置に当該書き込み対象チャンク識別子を追加する。
[書き込み処理におけるデータサーバの処理の一例]
図23は、第1の実施形態における書き込み処理において、データサーバ200(400)がマスタサーバ100からローカルチャンクコピー要求を受信したときの動作の一例を示すフローチャートである。
データサーバ200(400)はマスタサーバ100からローカルチャンクコピー要求と、コピー元チャンク識別子と、書き込み対象チャンク識別子とを受信する(ステップS1801)。
そして、データサーバ200(400)はローカルにチャンクをコピーする(ステップS1802)。具体的には、データサーバ200(400)はデータ記憶部210(410)のチャンク情報テーブル211(411)から当該コピー元チャンク識別子に対するチャンクの格納場所とチャンクのサイズとを取得する。データサーバ200(400)は当該チャンク格納場所に格納されているチャンクをコピーし、データ記憶部210(410)に格納する。また、データサーバ200(400)はデータ記憶部210(410)のチャンク情報テーブル211(411)に当該書き込み対象チャンク識別子と、コピーしたチャンクの格納場所と、当該チャンクのサイズとを登録する。
続いて、データサーバ200(400)はマスタサーバ100へローカルチャンクコピー応答を送信する(ステップS1803)。
図24は、第1の実施形態における書き込み処理において、データサーバ600がマスタサーバ100からリモートチャンクコピー要求を受信したときの動作の一例を示すフローチャートである。
データサーバ600はマスタサーバ100からリモートチャンクコピー要求と、コピー元チャンク識別子と、書き込み対象チャンク識別子と、コピー対象チャンク保持データサーバ識別子リストとを受信する(ステップS1901)。
データサーバ600は当該コピー対象チャンク保持データサーバ識別子リスト内のコピー対象チャンク保持データサーバ識別子で識別されるデータサーバからチャンクコピー元データサーバを選択する(ステップS1902)。例えば、最も距離の近いデータサーバをチャンクコピー元データサーバとする。ここでは、例として、データサーバ500をチャンクコピー元データサーバとして選択したとする。
そして、データサーバ600はデータサーバ500へチャンク読み出し要求と、当該コピー元チャンク識別子とを送信する(ステップS1903)。続いて、データサーバ600はデータサーバ500からチャンクを受信する(ステップS1904)。
そして、データサーバ600はデータ記憶部610に受信したチャンクを格納する(ステップS1905)。また、データサーバ600はデータ記憶部610のチャンク情報テーブル611に当該書き込み対象チャンク識別子と、格納したチャンクの格納場所と、当該チャンクのサイズとを登録する。続いて、データサーバ600はマスタサーバ100へリモートチャンクコピー応答を送信する(ステップS1906)。
図25は、第1の実施形態における書き込み処理において、データサーバ500がデータサーバ600からチャンク読み出し要求を受信したときの動作の一例を示すフローチャートである。
データサーバ500はデータサーバ600からチャンク読み出し要求と、コピー元チャンク識別子とを受信する(ステップS2001)。そして、データサーバ500はデータ記憶部510のチャンク情報テーブル511から当該コピー元チャンク識別子に対するチャンクの格納場所を取得し、データ記憶部510から当該チャンクを読み出す(ステップS2002)。続いて、データサーバ500は当該チャンクをデータサーバ600へ送信する(ステップS2003)。
図26は、第1の実施形態における書き込み処理において、データサーバがマスタサーバ100からチャンク生成要求を受信したときの動作の一例を示すフローチャートである。なお、コピーオンライトを発生させる書き込みでは、図26に示す処理は実行されない。図26に示す処理は、チャンクが割り当てられていない位置への書き込みである図19のステップS1707を実行したときに実行される。
データサーバはマスタサーバ100からチャンク生成要求と、書き込み対象チャンク識別子とを受信する(ステップS2101)。そして、データサーバはチャンクを生成し、チャンク情報テーブルを更新する(ステップS2102)。具体的には、データサーバは空のチャンクを生成し、データ記憶部に格納する。また、当該書き込み対象チャンク識別子と、当該チャンクの格納場所と、当該チャンクのサイズ(この時点では0)とをデータ記憶部のチャンク情報テーブルに登録する。その後、データサーバはマスタサーバ100へチャンク生成応答を送信する(ステップS2103)。
図27は、第1の実施形態における書き込み処理において、プライマリデータサーバであるデータサーバ400がマスタサーバ100から書き込み制御委譲要求を受信したときの動作の一例を示すフローチャートである。
データサーバ400はマスタサーバ100から書き込み制御委譲要求と、書き込み対象チャンク識別子と、書き込み対象チャンク保持データサーバ識別子リストとを受信する(ステップS2201)。
そして、データサーバ400は当該書き込み対象チャンク識別子と当該書き込み対象チャンク保持データサーバ識別子リストをメモリに保持する(ステップS2202)。続いて、データサーバ400はマスタサーバ100へ書き込み制御委譲応答を送信する(ステップS2203)。
図28は、第1の実施形態における書き込み処理において、データサーバが外部アプリケーション700または他のデータサーバからデータ送信要求を受信したときの動作の一例を示すフローチャートである。ここでは、例として、データサーバ200は外部アプリケーション700から、データサーバ400はデータサーバ200から、データサーバ600はデータサーバ400から、それぞれデータ送信要求を受信したとする。
データサーバ200(400、600)は外部アプリケーション700(データサーバ200、400)からデータ送信要求と、書き込み対象チャンク識別子と、書き込みデータと、書き込み対象チャンク保持データサーバ識別子リストとを受信する(ステップS2301)。
そして、データサーバ200(400、600)は当該書き込み対象チャンク識別子と当該書き込みデータとをメモリに保持する(ステップS2302)。
続いて、データサーバ200(400、600)は当該書き込み対象チャンク保持データサーバ識別子リストから自身のデータサーバ識別子を削除する(ステップS2303)。
そして、データサーバ200(400、600)は当該書き込み対象チャンク保持データサーバ識別子リストが空ならば、ステップS2307へ、そうでなければ、ステップS2305へ遷移する(ステップS2304)。ここでは、データサーバ200、400はステップS2305へ、データサーバ600はステップS2307へそれぞれ遷移することになる。
データサーバ200(400)は当該書き込み対象チャンク保持データサーバ識別子リスト内のデータサーバ識別子で識別されるデータサーバから、最も距離の近いデータサーバを選択し、選択したデータサーバへデータ送信要求と、当該書き込み対象チャンク識別子と、当該書き込みデータと、当該書き込み対象チャンク保持データサーバ識別子リストとを送信する(ステップS2305)。
ここでは、最も距離の近いデータサーバとして、データサーバ200はデータサーバ400を、データサーバ400はデータサーバ600をそれぞれ選択することとする。
そして、データサーバ200(400)はデータサーバ400(600)からデータ送信応答を受信する(ステップS2306)。データサーバ200(400)はデータ送信応答を受信すると、外部アプリケーション700(データサーバ200)へデータ送信応答を送信する(ステップS2307)。また、データサーバ600は書き込み対象チャンク保持データサーバ識別子リストが空になると、データサーバ400へデータ送信応答を送信する(ステップS2307)。
図29は、第1の実施形態における書き込み処理において、プライマリデータサーバであるデータサーバ400が外部アプリケーション700から書き込み要求を受信したときの動作の一例を示すフローチャートである。
データサーバ400は外部アプリケーション700から書き込み要求と、書き込み対象チャンク識別子と、書き込み位置とを受信する(ステップS2401)。
そして、データサーバ400はデータ記憶部410のチャンク情報テーブル411から当該書き込み対象チャンク識別子に対するチャンクの格納場所を取得する(ステップS2402)。
続いて、データサーバ400は図28のステップS2302で保持した当該書き込み対象チャンク識別子に対応する当該書き込みデータを当該チャンクの当該書き込み位置に書き込む(ステップS2403)。
データサーバ400はステップS2202で保持した当該書き込み対象チャンク保持データサーバ識別子リスト内のすべてのセカンダリデータサーバのデータサーバ識別子に対してステップS2406からステップS2407の処理を実行する。ここでは、セカンダリデータサーバであるデータサーバ200とデータサーバ600に対して処理を実行することになる。
初めに、当該書き込み対象チャンク保持データサーバ識別子リスト内のデータサーバ識別子の位置を示すインデックスを当該書き込み対象チャンク保持データサーバ識別子リスト内の2番目に設定する(ステップS2404)。ここでは、プライマリデータサーバのデータサーバ識別子は当該書き込み対象チャンク保持データサーバ識別子リスト内の先頭に位置するものとし、セカンダリデータサーバのデータサーバ識別子は当該書き込み対象チャンク保持データサーバ識別子リスト内の2番目以降に位置するものとする。
そして、データサーバ400は当該書き込み対象チャンク保持データサーバ識別子リスト内のすべてのセカンダリデータサーバのデータサーバ識別子の処理が完了したら、ステップS2409へ遷移する。そうでなければ、ステップS2406へ遷移する(ステップS2405)。
データサーバ400は当該書き込み対象チャンク保持データサーバ識別子リスト内のすべてのセカンダリデータサーバのデータサーバ識別子の処理が完了していなければ、当該書き込み対象チャンク保持データサーバ識別子リスト内のインデックスの位置のデータサーバ識別子で識別されるデータサーバにセカンダリ書き込み要求と、当該書き込み対象チャンク識別子と、当該書き込み位置とを送信する(ステップS2406)。
続いて、データサーバ400は当該書き込み対象チャンク保持データサーバ識別子リスト内のインデックスの位置のデータサーバ識別子で識別されるデータサーバからセカンダリ書き込み応答を受信する(ステップS2407)。そしてデータサーバ400はインデックスを当該書き込み対象チャンク保持データサーバ識別子リスト内の次の位置に設定する(ステップS2408)。
データサーバ400は当該書き込み対象チャンク保持データサーバ識別子リスト内のすべてのセカンダリデータサーバのデータサーバ識別子の処理が完了したら、外部アプリケーション700へ書き込み応答を送信する(ステップS2409)。
図30は、第1の実施形態における書き込み処理において、セカンダリデータサーバであるデータサーバ200(600)がプライマリデータサーバであるデータサーバ400からセカンダリ書き込み要求を受信したときの動作の一例を示すフローチャートである。
データサーバ200(600)はデータサーバ400からセカンダリ書き込み要求と、書き込み対象チャンク識別子と、書き込み位置とを受信する(ステップS2501)。
そして、データサーバ200(600)はデータ記憶部210(610)のチャンク情報テーブル211(611)から当該書き込み対象チャンク識別子に対するチャンクの格納場所を取得する(ステップS2502)。
続いて、データサーバ200(600)は図28のステップS2302で保持した当該書き込み対象チャンク識別子に対応する当該書き込みデータを当該チャンクの当該書き込み位置に書き込む(ステップS2503)。そして、データサーバ200(600)はデータサーバ400へセカンダリ書き込み応答を送信する(ステップS2504)。
[第1の実施形態の効果]
このように、第1の実施形態に係るマスタサーバ100は、複数のデータサーバに格納されたファイルデータであって、固定長のチャンクに分割して格納されたファイルデータに対するスナップショットへの書き込み要求を受け付けた場合に、コピーオンライトにより、該書き込み要求の対象となるチャンクのコピー先のデータサーバを、各データサーバにおけるデータ記憶部の空き容量、コピーされるチャンクを保持しているデータサーバと各データサーバとの距離、各データサーバの負荷状態、各データサーバにおける複数のファイルに共有されているチャンクの数のいずれか一つまたは複数に基づいて決定する。そして、マスタサーバ100は、決定されたデータサーバに対して、書き込み要求の対象となるチャンクをコピーするように制御する。
このため、コピーオンライトによるチャンクのコピーにおいて、コピーオンライト戦略に基づいて、チャンクのコピー先となるデータサーバを決定することを可能とする。コピーオンライト戦略は、各データサーバにおけるデータ記憶部の空き容量やデータサーバ間のネットワーク上の距離や各データサーバの負荷状態、各データサーバにおける複数のファイルに共有されているチャンクの数などのいずれか、または任意の組合せなどによって、コピーオンライトにおけるチャンクのコピー先となるデータサーバを決定する。想定されるユースケースに応じて適切なコピーオンライト戦略を用いることにより、データサーバのデータ記憶部の空き容量不足によるチャンクのコピーの失敗を防止したり、データサーバ間で負荷を分散したりすることが可能となる。
つまり、スナップショットへの書き込みの際のコピーオンライトにおいて、データサーバ内で無条件にチャンクをローカルにコピーするのではなく、データサーバのデータ記憶部の空き容量やデータサーバ間のネットワーク上の距離、データサーバの負荷などを勘案して、データサーバ内でローカルにコピーしたり、別データサーバにコピーしたりすることにより、データ記憶部の空き容量不足による書き込み不可を回避したり、データサーバの負荷を分散したりすることができる。
(システム構成等)
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、決定部113と制御部114を統合してもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施形態において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
(プログラム)
また、上記実施形態に係るマスタサーバ100またはデータサーバ200(300、400、500、600)が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。この場合、コンピュータがプログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかるプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。なお、以下では、マスタサーバ100と同様の機能を実現するスナップショット制御プログラムを実行するコンピュータの一例を説明する。
図31は、スナップショット制御プログラムを実行するコンピュータを示す図である。図31に示すように、コンピュータ10000は、例えば、メモリ10100と、CPU10200と、ハードディスクドライブインタフェース10300と、ディスクドライブインタフェース10400と、シリアルポートインタフェース10500と、ビデオアダプタ10600と、ネットワークインタフェース10700とを有する。これらの各部は、バス10800によって接続される。
メモリ10100は、ROM(Read Only Memory)10110およびRAM(Random Access Memory)10120を含む。ROM10110は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース10300は、ハードディスクドライブ10900に接続される。ディスクドライブインタフェース10400は、ディスクドライブ10410に接続される。ディスクドライブ10410には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース10500には、例えば、マウス11100およびキーボード11200が接続される。ビデオアダプタ10600には、例えば、ディスプレイ11300が接続される。
ここで、図31に示すように、ハードディスクドライブ10900は、例えば、OS10910、アプリケーションプログラム10920、プログラムモジュール10930およびプログラムデータ10940を記憶する。上記実施形態で説明した各テーブルは、例えばハードディスクドライブ10900やメモリ10100に記憶される。
また、スナップショット制御プログラムは、例えば、コンピュータ10000によって実行される指令が記述されたプログラムモジュールとして、ハードディスクドライブ10900に記憶される。具体的には、上記実施形態で説明したマスタサーバ100が実行する各処理が記述されたプログラムモジュールが、ハードディスクドライブ10900に記憶される。
また、スナップショット制御プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ10900に記憶される。そして、CPU10200が、ハードディスクドライブ10900に記憶されたプログラムモジュール10930やプログラムデータ10940を必要に応じてRAM10120に読み出して、上述した各手順を実行する。
なお、スナップショット制御プログラムに係るプログラムモジュール10930やプログラムデータ10940は、ハードディスクドライブ10900に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ10410等を介してCPU10200によって読み出されてもよい。あるいは、スナップショット制御プログラムに係るプログラムモジュール10930やプログラムデータ10940は、LAN(Local Area Network)やWAN(Wide Area Network)等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース10700を介してCPU10200によって読み出されてもよい。