"複数のノードを有しておりキーと対応付けられたデータを当該キーから算出されるハッシュ値に応じたノードに格納するシステムが実行するストレージ制御方法であって、第1のノードに割り当てるハッシュ値の範囲と第2のノードに割り当てるハッシュ値の範囲との境界を、第1のハッシュ値から第2のハッシュ値にシフトすることで、前記第1のノードに割り当てるハッシュ値の範囲を拡大し、前記第2のノードに格納されたデータの一部であって、キーから算出されるハッシュ値が前記第1のハッシュ値と前記第2のハッシュ値との間に属するデータを検索し、検索されたデータを前記第2のノードから前記第1のノードに移動する、ストレージ制御方法。前記複数のノードのデータ格納状況およびアクセス処理状況の少なくとも一方に基づいて、前記複数のノードの中から、割り当てるハッシュ値の範囲を拡大する前記第1のノードを選択する、請求項1記載のストレージ制御方法。前記複数のノードの中から前記第1のノードを選択し、割り当てられているハッシュ値の範囲が前記第1のノードと隣接するノードを前記第2のノードとして選択する、請求項1または2記載のストレージ制御方法。シフト後の境界である前記第2のハッシュ値を、前記第1および第2のノードに割り当てられているハッシュ値の個数に基づいて決定する、請求項1乃至3の何れか一項に記載のストレージ制御方法。データの移動が完了する前に、ハッシュ値が前記第1のハッシュ値と前記第2のハッシュ値との間に属するキーを指定したアクセスを、前記第1のノードで受け付け可能とし、前記第1のノードにおいて、アクセスで指定されたキーに対応するデータが移動済みか否かを判定し、判定結果に応じた方法で当該アクセスを処理する、請求項1乃至4の何れか一項に記載のストレージ制御方法。複数のノードを有しておりキーと対応付けられたデータを当該キーから算出されるハッシュ値に応じたノードに格納するシステムの制御に用いられる情報処理装置であって、前記複数のノードに割り当てたハッシュ値の範囲を示す情報を記憶する記憶部と、第1のノードに割り当てるハッシュ値の範囲と第2のノードに割り当てるハッシュ値の範囲との境界を第1のハッシュ値から第2のハッシュ値にシフトすることで、前記第1のノードに割り当てるハッシュ値の範囲を拡大し、前記第2のノードに格納されたデータの一部であって、キーから算出されるハッシュ値が前記第1のハッシュ値と前記第2のハッシュ値との間に属するデータを、前記第2のノードから前記第1のノードに移動させる制御部と、を有する情報処理装置。複数のノードを有しておりキーと対応付けられたデータを当該キーから算出されるハッシュ値に応じたノードに格納するシステムの制御に用いられるプログラムであって、コンピュータに、第1のノードに割り当てるハッシュ値の範囲と第2のノードに割り当てるハッシュ値の範囲との境界を、第1のハッシュ値から第2のハッシュ値にシフトすることで、前記第1のノードに割り当てるハッシュ値の範囲を拡大し、前記第2のノードに格納されたデータの一部であって、キーから算出されるハッシュ値が前記第1のハッシュ値と前記第2のハッシュ値との間に属するデータを、前記第2のノードから前記第1のノードに移動させる、処理を実行させるプログラム。分散ストレージシステムでは、各ストレージノードにハッシュ値の範囲を割り当てた後に、ストレージノードによってデータ量や受付アクセス数に偏りが生じることがある。その場合、偏りを解消するため、ハッシュ値の範囲の割り当てを変更したいことがある。しかし、あるストレージノードに対するハッシュ値の範囲の割り当てを一度解除して再定義するという方法を用いると、解除に伴うデータの退避および再定義に伴うデータの引き継ぎという大量のデータ移動が、ストレージノード間で発生する可能性がある。また、当該方法では、変更前に当該ストレージノードが保持しているデータであって変更後も引き続き保持するデータについても移動が発生してしまい、非効率的となる。一側面では、本発明は、データの移動量を低減できるストレージ制御方法、情報処理装置およびプログラムを提供することを目的とする。一実施態様では、複数のノードを有しておりキーと対応付けられたデータを当該キーから算出されるハッシュ値に応じたノードに格納するシステムが実行するストレージ制御方法が提供される。このストレージ制御方法では、第1のノードに割り当てるハッシュ値の範囲と第2のノードに割り当てるハッシュ値の範囲との境界を、第1のハッシュ値から第2のハッシュ値にシフトすることで、第1のノードに割り当てるハッシュ値の範囲を拡大する。第2のノードに格納されたデータの一部であって、キーから算出されるハッシュ値が第1のハッシュ値と第2のハッシュ値との間に属するデータを検索し、検索されたデータを第2のノードから第1のノードに移動する。また、一実施態様では、複数のノードを有しておりキーと対応付けられたデータを当該キーから算出されるハッシュ値に応じたノードに格納するシステムの制御に用いられる情報処理装置が提供される。この情報処理装置は、記憶部と制御部とを有する。記憶部は、複数のノードに割り当てたハッシュ値の範囲を示す情報を記憶する。制御部は、第1のノードに割り当てるハッシュ値の範囲と第2のノードに割り当てるハッシュ値の範囲との境界を第1のハッシュ値から第2のハッシュ値にシフトすることで、第1のノードに割り当てるハッシュ値の範囲を拡大し、第2のノードに格納されたデータの一部であって、キーから算出されるハッシュ値が第1のハッシュ値と第2のハッシュ値との間に属するデータを、第2のノードから第1のノードに移動させる。また、一実施態様では、コンピュータに実行させるプログラムであって、複数のノードを有しておりキーと対応付けられたデータを当該キーから算出されるハッシュ値に応じたノードに格納するシステムの制御に用いられるプログラムが提供される。一実施態様によれば、データの移動量を低減できる。以下、本実施の形態を図面を参照して説明する。[第1の実施の形態]図1は、第1の実施の形態の情報処理システムを示す図である。この情報処理システムは、キーと対応付けられたデータを当該キーから算出されるハッシュ値に応じたノードに格納するシステムである。この情報処理システムは、情報処理装置1、第1のノード2および第2のノード2aを含む。情報処理装置1、第1のノード2および第2のノード2aは、ネットワークで接続されている。例えば、第1のノード2には、key,valueのペアとして、key1,value1、key2,value2、key3,value3が格納されている。第1のノード2が担当するハッシュ値の範囲には、ハッシュ値Hkey1,Hkey2,Hkey3が含まれる。また、例えば、第2のノード2aには、key,valueのペアとして、key4,value4、key5,value5、key6,value6が格納されている。第2のノード2aが担当するハッシュ値の範囲には、ハッシュ値Hkey4,Hkey5,Hkey6が含まれる。ここで、HkeyNは、keyNから算出されたハッシュ値であるN=1,2,3,4,5,6。第1のノード2および第2のノード2aにそれぞれ割り当てられたハッシュ値の担当範囲は隣接している。情報処理装置1は、CPUCentralProcessingUnitなどのプロセッサとRAMRandomAccessMemoryなどのメモリとを備えてもよく、メモリに記憶されたプログラムをプロセッサが実行するコンピュータであってもよい。情報処理装置1は、記憶部1aおよび制御部1bを有する。記憶部1aは、第1のノード2および第2のノード2aに割り当てたハッシュ値の範囲を示す情報を記憶する。記憶部1aは、RAMやHDDHardDiskDriveによって実装されてもよい。制御部1bは、記憶部1aを参照して、各ノードに割り当てるハッシュ値の範囲を変更する。制御部1bは、第1のノード2に割り当てるハッシュ値の範囲と第2のノード2aに割り当てるハッシュ値の範囲との境界を、第1のハッシュ値から第2のハッシュ値にシフトすることで、第1のノード2に割り当てるハッシュ値の範囲を拡大する。第1のハッシュ値は、Hkey3とHkey4との間の値であるとする。また、第2のハッシュ値は、Hkey4とHkey5との間の値であるとする。この場合、制御部1bが第1のノード2に割り当てるハッシュ値の範囲を拡大すると、第1のノード2の担当範囲にHkey4が含まれることになる。制御部1bは、第2のノード2aに格納されたデータの一部であって、キーから算出されるハッシュ値が第1のハッシュ値と第2のハッシュ値との間に属するデータを検索し、検索されたデータを第2のノード2aから第1のノード2に移動する。例えば、制御部1bは、第1のハッシュ値と第2のハッシュ値との間に存在するハッシュ値Hkey4に対応するvalue4を検索する。制御部1bは、検索したvalue4を第1のノード2に移動する。なお、制御部1bは、移動対象のハッシュ値範囲を第2のノード2aに通知して、第2のノード2aに当該検索を行わせてもよい。また、第2のノード2aが、移動対象として検索したvalue4を第1のノード2に移動してもよい。すなわち、制御部1bは、検索されたデータの第1のノード2への移動を、第2のノード2aに行わせてもよい。情報処理装置1によれば、制御部1bにより、第1のノード2に割り当てるハッシュ値の範囲と第2のノード2aに割り当てるハッシュ値の範囲との境界が、第1のハッシュ値から第2のハッシュ値にシフトされることで、第1のノード2に割り当てるハッシュ値の範囲が拡大される。制御部1bにより、第2のノードに格納されたデータの一部であって、キーから算出されるハッシュ値が第1のハッシュ値と第2のハッシュ値との間に属するデータが検索され、検索されたデータが第2のノード2aから第1のノード2に移動される。これにより、第1のノード2および第2のノード2aの間で、移動するデータ量を低減できる。例えば、第1のノード2の担当範囲を拡大する際、第1のノード2の全データを第2のノード2aに移動して、第1のノード2の担当範囲を削除し、その後、第1のノード2に拡大後の担当範囲を追加する方法も考えられる。しかし、この方法では、元々第1のノード2に存在していたデータを第2のノード2aに移動し、担当範囲の再設定後に当該データを第2のノード2aから第1のノード2に移動する処理が生ずる。このため、元々第1のノード2に存在していたデータの無駄な移動が生じ、移動するデータ量が大きい。一方、情報処理装置1によれば、担当範囲の拡大によって、第1のノード2が新たに担当するハッシュ値範囲のデータを検索して、該データを第2のノード2aから第1のノード2に移動させる。このため、第1のノード2の担当範囲の削除/追加を行う場合に比べて、データの無駄な移動が生じない。例えば、元々第1のノード2に存在していたデータの移動が行われない。よって、移動するデータ量を低減でき、担当範囲を拡大する処理を効率的に実行できる。[第2の実施の形態]図2は、第2の実施の形態の分散ストレージシステムを示す図である。第2の実施の形態の分散ストレージシステムは、KVSの手法によりデータを複数のストレージノードに分散配置する。第2の実施の形態の分散ストレージシステムは、ストレージ制御装置100、ストレージノード200,200a,200b、ディスク装置300,300a,300bおよびクライアント400を含む。ネットワーク10には、ストレージ制御装置100、ストレージノード200,200a,200bおよびクライアント400が接続されている。ネットワーク10はLANLocalAreaNetworkでもよい。ネットワーク10はインターネットなどの広域ネットワークでもよい。ストレージ制御装置100は、ストレージノード200,200a,200bのハッシュ値の担当範囲の変更を制御するサーバコンピュータである。ストレージノード200には、ディスク装置300が接続されている。ストレージノード200aには、ディスク装置300aが接続されている。ストレージノード200bには、ディスク装置300bが接続されている。ストレージノード200,200a,200bとディスク装置300,300a,300bとの間のインタフェースには、例えばSCSISmallComputerSystemInterfaceやファイバチャネルFibreChannelなどを用いてもよい。ストレージノード200,200a,200bは、それぞれディスク装置300,300a,300bからのデータの読出しRead、および、ディスク装置300,300a,300bへのデータの書込みWriteを実行するサーバコンピュータである。ディスク装置300,300a,300bは、データを記憶する記憶装置である。ディスク装置300,300a,300bは、HDDHardDiskDriveやSSDSolidStateDriveなどの記憶デバイスを備える。ディスク装置300,300a,300bは、ストレージノード200,200a,200bに内蔵されてもよい。クライアント400は、分散ストレージシステムに格納されたデータにアクセスするクライアントコンピュータである。例えば、クライアント400は、ユーザが操作する端末装置である。クライアント400は、ストレージノード200,200a,200bの何れかにデータの読出しを要求するRead要求。クライアント400は、ストレージノード200,200a,200bの何れかに、データの書込みを要求するWrite要求。ここで、ディスク装置300,300a,300bは、キーkeyとデータvalueのペアkey,valueを記憶する。ストレージノード200,200a,200bは、キーを指定したデータのRead要求があると、当該キーに対応するデータを読み出す。ストレージノード200,200a,200bは、キーを指定したデータのWrite要求があると、当該キーに対応するデータを更新する。このとき、ストレージノード200,200a,200bは、キーから算出されるハッシュ値に基づいて、アクセス対象のデータが何れのストレージノードの担当下にあるか判断する。キーに対するハッシュ値は、例えば、MD5MessageDigestalgorithm5を用いて算出できる。SHASecureHashAlgorithmなど他のハッシュ関数を用いてもよい。図3は、ストレージ制御装置のハードウェア例を示す図である。ストレージ制御装置100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、ディスクドライブ106および通信部107を有する。各ユニットがストレージ制御装置100のバスに接続されている。ストレージノード200,200a,200bおよびクライアント400もストレージ制御装置100と同様のハードウェアを用いて実装できる。CPU101は、ストレージ制御装置100の情報処理を制御するプロセッサである。CPU101は、HDD103に記憶されているプログラムやデータの少なくとも一部を読み出し、RAM102に展開してプログラムを実行する。なお、ストレージ制御装置100は、複数のプロセッサを設けて、プログラムを分散して実行してもよい。RAM102は、CPU101が実行するプログラムや処理に用いるデータを一時的に記憶する揮発性メモリである。なお、ストレージ制御装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えていてもよい。HDD103は、OSOperatingSystemプログラムやアプリケーションプログラムなどのプログラムおよびデータを記憶する不揮発性の記憶装置である。HDD103は、CPU101の命令に従って、内蔵の磁気ディスクに対してデータの読み書きを行う。なお、ストレージ制御装置100は、HDD以外の種類の不揮発性の記憶装置例えば、SSDなどを備えてもよく、複数の記憶装置を備えていてもよい。画像信号処理部104は、CPU101の命令に従って、ストレージ制御装置100に接続されたディスプレイ11に画像を出力する。ディスプレイ11としては、例えば、CRTCathodeRayTubeディスプレイや液晶ディスプレイを用いることができる。入力信号処理部105は、ストレージ制御装置100に接続された入力デバイス12から入力信号を取得し、CPU101に出力する。入力デバイス12としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。ディスクドライブ106は、記録媒体13に記録されたプログラムやデータを読み取る駆動装置である。記録媒体13として、例えば、フレキシブルディスクFD:FlexibleDiskやHDDなどの磁気ディスク、CDCompactDiscやDVDDigitalVersatileDiscなどの光ディスク、光磁気ディスクMO:MagnetoOpticaldiskを使用できる。ディスクドライブ106は、例えば、CPU101の命令に従って、記録媒体13から読み取ったプログラムやデータをRAM102またはHDD103に格納する。通信部107は、ネットワーク10を介してストレージノード200,200a,200bおよびクライアント400と通信を行う通信インタフェースである。通信部107は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。図4は、第2の実施の形態のソフトウェア例を示すブロック図である。図4に示すユニットの一部または全部は、ストレージ制御装置100、ストレージノード200およびクライアント400が実行するプログラムのモジュールであってもよい。また、図4に示すユニットの一部または全部は、FPGAFieldProgrammableGateArrayやASICApplicationSpecificIntegratedCircuitなどの電子回路であってもよい。ストレージノード200a,200bもストレージノード200と同様のユニットを用いて実装できる。ストレージ制御装置100は、記憶部110、ネットワークI/OInputOutput部120および担当範囲制御部130を有する。記憶部110は、担当管理テーブルおよびノード利用管理テーブルを記憶する。担当管理テーブルは、ストレージノード200,200a,200bが担当するハッシュ値の範囲を定義したデータである。ノード利用管理テーブルは、ストレージノード200,200a,200bの利用状況を記録したデータである。記憶部110は、RAM102に確保された記憶領域でもよいし、HDD103に確保された記憶領域であってもよい。ネットワークI/O部120は、ストレージノード200,200a,200bから受信したデータを、担当範囲制御部130に出力する。ネットワークI/O部120は、担当範囲制御部130から取得したデータを、ストレージノード200,200a,200bに送信する。担当範囲制御部130は、ストレージノード200,200a,200bのハッシュ値の担当範囲の変更を制御する。担当範囲制御部130は、ストレージノード200,200a,200bの利用状況に応じて、または、システム管理者の操作入力に応じて、担当範囲の割り当てを変更する。担当範囲制御部130は、担当範囲の変更に伴い、ストレージノード間で移動させるデータを検索する。担当範囲制御部130は、移動させるデータが存在する場合、対象のストレージノード間で当該データを移動する。担当範囲制御部130は、担当範囲の変更に伴い、記憶部110に記憶された担当管理テーブルを更新する。担当範囲制御部130は、担当管理テーブルの更新内容を示す更新データをネットワークI/O部120に出力する。ストレージノード200は、記憶部210、ネットワークI/O部220、ディスクI/O部230、ノード一覧管理部240、担当ノード判定部250および監視部260を有する。記憶部210は、担当管理テーブルを記憶する。当該担当管理テーブルは、記憶部110に格納される担当管理テーブルと同じ内容である。記憶部210は、ストレージノード200上のRAMに確保された記憶領域でもよいし、ストレージノード200上のHDDに確保された記憶領域であってもよい。ネットワークI/O部220は、ストレージ制御装置100、ストレージノード200a,200bおよびクライアント400から受信したデータを、ディスクI/O部230および担当ノード判定部250に出力する。ネットワークI/O部220は、ディスクI/O部230、担当ノード判定部250および監視部260から取得したデータを、ストレージ制御装置100、ストレージノード200a,200bおよびクライアント400に送信する。ディスクI/O部230は、担当ノード判定部250の指示により、ディスク装置300からデータの読出しを行う。また、ディスクI/O部230は、担当ノード判定部250の指示により、ディスク装置300にデータの書込みを行う。ノード一覧管理部240は、ネットワークI/O部220がストレージ制御装置100から受信した更新データに基づいて、記憶部210に記憶された担当管理テーブルを更新する。ノード一覧管理部240は、担当ノード判定部250からの要求により、担当管理テーブルの内容を担当ノード判定部250に応答する。担当ノード判定部250は、ネットワークI/O部220がクライアント400から受信したRead要求に基づき、担当ノードを判定する。Read要求には、読出し対象のデータに対応するキーが含まれる。担当ノードとは、当該キーから算出されるハッシュ値を担当しているストレージノードである。担当ノード判定部250は、算出したハッシュ値とノード一覧管理部240から取得する担当管理テーブルとに基づいて、担当ノードを判定できる。担当ノード判定部250は、自ノードが担当ノードであれば、ディスクI/O部230に読出しを指示する。担当ノード判定部250は、自ノード以外のノードが担当ノードであれば、ネットワークI/O部220を介して、当該担当ノードにRead要求を転送する。監視部260は、ストレージノード200の利用状況を監視する。監視部260は、監視結果を含む監視データを、ネットワークI/O部220を介して、ストレージ制御装置100に定期的に送信する。利用状況には、例えば、ディスク装置300が記憶しているデータ量、ディスク装置300の空き容量およびディスク装置300へのアクセス数などが含まれる。クライアント400は、ネットワークI/O部410およびアクセス部420を有する。ネットワークI/O部410は、アクセス部420からデータのRead要求やWrite要求を取得し、ストレージノード200,200a,200bの何れかに送信する。ネットワークI/O部410は、ストレージノード200,200a,200bからデータを受信すると、アクセス部420に出力する。アクセス部420は、読出し対象のデータのキーを含むRead要求を生成して、ネットワークI/O部410に出力する。アクセス部420は、更新対象のデータのキーを含むWrite要求を生成して、ネットワークI/O部410に出力する。なお、第2の実施の形態のストレージ制御装置100は、第1の実施の形態の情報処理装置1の一例である。担当範囲制御部130は、制御部1bの一例である。図5は、ハッシュ値の担当範囲の割当例を示す図である。第2の実施の形態の分散ストレージシステムでは、利用可能なハッシュ値の範囲は0~99である。ただし、99の次の値は0である。そのうちの複数の範囲がストレージノード200,200a,200bに割り当てられている。ここで、ラベルAは、ストレージノード200の識別情報である。ラベルBは、ストレージノード200aの識別情報である。ラベルCは、ストレージノード200bの識別情報である。各ラベルの位置は、各担当範囲の開始位置である。図5では、各ラベル位置に対応する値を含むハッシュ値範囲R1,R2,R3が示されている。ハッシュ値範囲R1は10~39であり、ストレージノード200の担当範囲である。ハッシュ値範囲R2は40~89であり、ストレージノード200aの担当範囲である。ハッシュ値範囲R3は90~99、0~9であり、ストレージノード200bの担当範囲である。ハッシュ値範囲R3は、99および0を跨いだ領域である。第2の実施の形態の分散ストレージシステムでは、担当範囲の一端の値を、ストレージノード200,200a,200bに対して指定することで、ストレージノード200,200a,200bの担当範囲を割り当てる。例えば、担当範囲の両端の値のうち小さい方開始位置を指定する場合、ストレージノード200にハッシュ値10を、ストレージノード200aにハッシュ値40を指定する。これにより、ストレージノード200の担当範囲が10~39となる。ハッシュ値範囲R3のように、当該範囲が0を跨ぐ場合には、例外として、両端の値のうち大きい方が開始位置となる。この場合、例えば、ハッシュ値90を指定することで、0を跨いだ範囲を指定できる。なお、担当範囲の両端の値のうち大きい方終了位置を指定して、担当範囲を割り当ててもよい。例えば、ストレージノード200にハッシュ値39を、ストレージノード200aにハッシュ値89を、ストレージノード200bにハッシュ値9を指定する。すると、図5で示したハッシュ値範囲R1,R2,R3と同等の担当範囲を、ストレージノード200,200a,200bに割り当てることができる。この場合も、0を跨ぐ範囲については、例外として、両端の値のうち小さい方が終了位置となる。よって、両端の値のうち小さい方を指定することで、0を跨いだ範囲を指定できる。以下の説明では、ストレージノード200,200a,200bに、担当範囲の開始位置を指定することで、当該担当範囲を割り当てるものとする。ここで、ストレージノード200,200a,200bには、担当範囲を更に分割したブロック単位で担当範囲が割り当てられる。また、ストレージノード200,200a,200bの利用状況もブロック単位で管理される。図6は、担当管理テーブルの例を示す図である。担当管理テーブル111は、記憶部110に記憶される。また、担当管理テーブル111と同様の担当管理テーブルが、記憶部210およびストレージノード200a,200bにも格納される。担当管理テーブル111は、ブロック開始位置およびノードの項目を含む。ブロック開始位置の項目には、ブロックの開始位置に対応するハッシュ値が登録される。ノードの項目には、ストレージノード200,200a,200bのラベルが登録される。例えば、ブロック開始位置が0、10のレコードが存在する。この場合、前者のレコードは、ハッシュ値範囲0~9のブロックが、ストレージノード200bラベルCに割り当てられていることを示す。図7は、ノード利用管理テーブルの例を示す図である。ノード利用管理テーブル112は、記憶部110に記憶される。ノード利用管理テーブル112は、ブロック開始位置、データ量、空き容量、アクセス数および総転送量の項目を含む。ブロック開始位置の項目には、ブロックの開始位置に対応するハッシュ値が登録される。データ量の項目には、当該ブロックに記憶済のデータ量例えば、GBGigaByte単位が登録される。空き容量の項目には、当該ブロックの空き容量例えば、GB単位が登録される。アクセス数の項目には、当該ブロックに対する読出し/書込みの総アクセス数が登録される。総転送量の項目には、当該ブロックに対する読出し/書込みに伴うデータの転送量例えば、GB単位の総和が登録される。図8は、担当範囲を拡大する処理例を示すフローチャートである。以下、図8に示す処理をステップ番号に沿って説明する。ステップS11担当範囲制御部130は、ハッシュ値の担当範囲を拡大するストレージノードを決定する。例えば、担当範囲制御部130は、記憶部110に記憶されたノード利用管理テーブル112に基づいて、何れのストレージノードを対象とするか決定する。例えば、最もデータ量の小さいノードを選ぶ、最もデータ量の大きいノードの担当範囲に隣接する範囲を担当するノードを選ぶ、などの方法により対象を決定することが考えられる。あるいは、システム管理者の操作入力により指定されたノードを、担当範囲の拡大対象としてもよい。ここでは、ストレージノード200bを担当範囲の拡大対象に決定したとする。ステップS12担当範囲制御部130は、ノード利用管理テーブル112を参照して、ハッシュ値範囲R3の両端のうち拡大する側開始位置側か終了位置側かを決定する。例えば、データ量のより大きいストレージノードの担当範囲と隣接する側とする、予め定められた側開始位置側とする、などが考えられる。あるいは、システム管理者の操作入力により指定された側を拡大対象に決定してもよい。ここでは、ハッシュ値範囲R3の開始位置側を拡大する側に決定したとする。この場合、ハッシュ値範囲R3の開始位置ハッシュ値範囲R2,R3の境界をストレージノード200aが担当するハッシュ値範囲R2側へシフトして、ハッシュ値範囲R3を拡大することになる。ステップS13担当範囲制御部130は、記憶部110に記憶された担当管理テーブル111およびノード利用管理テーブル112に基づき、ハッシュ値範囲R3の開始位置のシフト量を決定する。例えば、ストレージノード200a,200bのデータ量が均等になるあるいは、均等に近くなるブロック開始位置70をハッシュ値範囲R3の新たな開始位置とするシフト量は20。この場合、当該新たな開始位置70と元の開始位置90との間の範囲70~89がストレージノード200aからストレージノード200bに移設する範囲である。また、例えば、担当するハッシュ値範囲に含まれるハッシュ値の個数に基づいて、シフト量を決定してもよい。例えば、移動後に各ノードが担当するハッシュ値範囲に含まれるハッシュ値の個数が均一になるようにシフト量を決定することが考えられる。ステップS14担当範囲制御部130は、担当管理テーブル111を更新する。具体的には、ブロック開始位置70、80の設定ラベルBをストレージノード200bのラベルCに変更する。担当範囲制御部130は、当該変更内容を示す更新データをネットワークI/O部120に出力する。ネットワークI/O部120は、更新データをストレージノード200,200a,200bに送信する。ストレージノード200,200a,200bは、更新データを受信すると、自ノードの担当管理テーブルを更新する。ステップS15担当範囲制御部130は、ステップS13で決定した範囲70~89に属する差分のデータを検索し、ストレージノード200aからストレージノード200bに移動する。例えば、担当範囲制御部130は、ストレージノード200aに当該範囲にハッシュ値が属するデータを問い合わせて、ストレージノード200aからストレージノード200bに当該データを移動する。また、例えば、担当範囲制御部130は、ディスク装置300aにおける当該範囲に対応するアドレスディレクトリ名やセクタ番号などをブロックに対応付けて管理してもよい。例えば、担当管理テーブル111の各ブロック開始位置に対応付けて、当該アドレスを登録することが考えられる。このようにすれば、担当範囲制御部130は、移動対象のデータの格納位置を当該アドレスに基づいて検索できる。担当範囲制御部130は、移動対象範囲をストレージノード200aに通知して、ストレージノード200aにより該移動対象範囲のデータをストレージノード200bへ移動させてもよい。このように、担当範囲制御部130は、ストレージノード200bに対してストレージノード200aとの境界側を、担当範囲を拡大させる側と決定する。担当範囲制御部130は、ハッシュ値範囲R3の開始位置ハッシュ値範囲R2,R3の境界値をハッシュ値範囲R2側にシフトさせる。シフト量は、ストレージノード200a,200bの利用状況により決定する。そして、シフト分のハッシュ値範囲に属するデータを、ストレージノード200aからストレージノード200bに移動する。なお、ステップS11~S13では、上述した方法以外の方法で、担当を拡大するストレージノードおよび担当範囲の開始位置のシフト量を決定してもよい。例えば、次の1、2の何れかの方法を用いることも考えられる。1空き容量が少ないノードを担当範囲の拡大対象として、空き容量の多いノードからハッシュ値範囲の一部を移設するように決定する。そして、両ノードの空き容量が均等になるように開始位置のシフト量を決定する。各ノードの空き容量は、ノード利用管理テーブル112で照会できる例えば、ノードごとにブロックの空き容量の和をとれば、ノードごとの空き容量の総和が得られる。これにより、当該空き容量が少ないノードの空き容量の増加を図れる。2負荷の小さいアクセス数や総転送量などノードを担当範囲の拡大対象として、負荷の大きいノードからハッシュ値範囲の一部を移設するように決定する。そして、両ノードの負荷が均等になるように開始位置のシフト量を決定する。各ノードの負荷は、ノード利用管理テーブル112で照会できる例えば、ノードごとにブロックのアクセス数の和をとれば、ノードごとのアクセス数の総和が得られる。これにより、各ノードの負荷分散を図れる。更に、例示した複数の方法を組み合わせてシフト量を決定してもよい。例えば、データ量を均等にするシフト量を決定した後、両ノードのアクセス数の差がより小さくなるようにシフト量を調整することも考えられる。例えば、まず、ハッシュ値範囲R3の開始位置を開始位置70に仮決定するシフト量20に仮決定。そして、ストレージノード200a,200bのアクセス数の差が小さくなるように、開始位置を60に決定するシフト量30に決定。なお、上記2では、負荷として、各ストレージノードのCPU使用率などの他の指標を用いてもよい。その場合、例えば、ストレージ制御装置100は、各ストレージノードからCPU使用率などの指標を収集する。また、担当範囲制御部130は、ブロック単位でデータの移動を行う。このため、ブロックを移設する順序を、任意に決定できる。例えば、対象ブロックごとの利用状況に基づいて順序を決定することが考えられる。より具体的には、現在アクセス中のデータを多く含むブロック程、後回しにすることが考えられる。また、例えば、システム管理者の操作入力により指定された順序とすることが考えられる。また、上記ステップS14,S15を逆の順序で行ってもよい。図9は、移設するハッシュ値範囲の例を示す図である。図9では、図5に示したハッシュ値範囲R3をハッシュ値範囲R2側へシフト量20だけ拡大した場合を例示している。ハッシュ値範囲R2aは、ストレージノード200aの変更後の担当範囲である。ハッシュ値範囲R2aでは、ハッシュ値範囲R3の拡大に伴って、終了位置が69にシフトしている。ハッシュ値範囲R3aは、ストレージノード200bの変更後の担当範囲である。ハッシュ値範囲R3aでは、開始位置が90から70にシフトしている。ハッシュ値範囲R2bは、ハッシュ値範囲R2,R3aの重なり合う領域であり、70~89の範囲である。ハッシュ値範囲R2bは、ストレージノード200aからストレージノード200bに移設する範囲である。ハッシュ値範囲R2bに属するデータが、ストレージノード200aからストレージノード200bへの移動対象データである。このように、ストレージ制御装置100は、ハッシュ値範囲R3の開始位置ハッシュ値範囲R2,R3の境界をシフトさせることで、ハッシュ値範囲R3をハッシュ値範囲R3aへ拡大する。そして、ハッシュ値範囲R2bに属するデータをストレージノード200aからストレージノード200bへ移動する。ここで、例えば、ハッシュ値範囲R3を拡大する際、ハッシュ値範囲R3を削除して、ハッシュ値範囲R3のデータをストレージノード200aに移動してから、ストレージノード200bにハッシュ値範囲R3aを割り当てる方法も考えられる。この場合、ハッシュ値範囲R3に属する全データをストレージノード200aに移動するハッシュ値範囲R3に属していたデータはハッシュ値範囲R2に属することとなる。そして、ハッシュ値範囲R3aの割当後、ハッシュ値範囲R3aに属するデータを、ストレージノード200aからストレージノード200bに移動する。しかし、この方法では、元々ストレージノード200bに存在していたデータハッシュ値範囲R3に属していたデータの無駄な移動が生じ、移動するデータ量が大きい。一方、ストレージ制御装置100によれば、ハッシュ値範囲R3の削除を伴わないので、ハッシュ値範囲R3に属するデータのストレージノード200aへの移動が生じない。データの移動は、差分のデータ、すなわち、ハッシュ値範囲R2bに属するデータの移動で済む。よって、移動するデータ量を低減できる。ストレージノード200の担当範囲を拡大する処理を効率的に実行できる。なお、ストレージ制御装置100をストレージノード200,200a,200bとは別個に設ける場合を例示したが、担当範囲制御部130の機能をストレージノード200,200a,200bの何れかまたは全部に設けてもよい。何れかのストレージノードに担当範囲制御部130の機能を設ける場合、当該ストレージノードが他のストレージノードの情報を収集して、一元管理する。全部のストレージノードに担当範囲制御部130の機能を設ける場合、全部のストレージノードの情報を各ストレージノードで共有し、それぞれのストレージノードが、所定のタイミングで担当範囲制御部130の機能を発揮すればよい。所定のタイミングとしては、例えば、ストレージノードが自身の空き容量が閾値よりも小さくなったことを検知したタイミングが考えられる。この場合、当該ストレージノードは、自身の空き容量を増やすように担当範囲の拡大を行う。あるいは、所定のタイミングとしては、例えば、ストレージノードが自身の負荷例えば、アクセス数が閾値を上回ったことを検知したタイミングが考えられる。この場合、当該ストレージノードは、負荷が分散されるように担当範囲の拡大を行う。ここで、あるストレージノードの担当範囲の変更に伴うデータ移動の最中に、移設対象の範囲に属するデータへのクライアント400からのアクセスが発生することもある。このとき、ストレージノード200,200a,200bの担当管理テーブルには、変更後の担当範囲がデータ移動よりも先に登録されるので、アクセス先のノードに対象のキーに対応するデータが存在しないことがある。その場合にも、ストレージノード200,200a,200bは当該アクセスに適切に対処できることが望ましい。そこで、以下では、データ移動の最中にクライアント400からデータへのアクセスがあった場合の処理を説明する。まず、データのRead要求を受信した場合の処理例を説明する。図10は、Read要求受信時の処理例を示すフローチャートである。以下、図10に示す処理をステップ番号に沿って説明する。ステップS21ネットワークI/O部220は、クライアント400からRead要求を受信する。ネットワークI/O部220は、担当ノード判定部250にRead要求を出力する。ステップS22担当ノード判定部250は、Read要求が自ノードへのアクセスか否かを判断する。自ノードへのアクセスである場合、処理をステップS24に進める。自ノード以外のノードへのアクセスである場合、処理をステップS23に進める。自ノードの担当範囲は、記憶部210に記憶された担当管理テーブルにより特定できる。自ノードへのアクセスか否かは、Read要求に含まれるキーから算出されるハッシュ値が、自ノードの担当範囲に属するか否かにより判断できる。ハッシュ値が自ノードの担当範囲に属する場合、自ノードへのアクセスである。ハッシュ値が自ノードの担当範囲に属さない場合、自ノード以外のノードへのアクセスである。ステップS23担当ノード判定部250は、アクセス対象のハッシュ値が属する範囲を担当する担当ノードを、担当管理テーブルを参照して特定する。担当ノード判定部250は、特定した担当ノードにRead要求を転送する。そして、処理を終了する。ステップS24担当ノード判定部250は、キーに対応するRead対象のデータが移動済であるか否かを判断する。移動済でない場合、処理をステップS25に進める。移動済である場合、処理をステップS26に進める。ここで、移動済でない場合とは、例えば、ストレージノード200の担当範囲を拡大済であるが、拡大した範囲に属する当該データのストレージノード200への移動が未完了である場合である。この場合、Read対象のデータは、当該データの移動元のストレージノードに存在している。ステップS25担当ノード判定部250は、当該データの移動元のストレージノード移動元ノードを、クライアント400に応答する。移動元ノードとは、担当範囲の拡大に伴って、ストレージノード200が現在通信している相手ノードである。クライアント400は、当該移動元ノードに、再度Read要求を送信する。そして、処理を終了する。ステップS26担当ノード判定部250は、キーに対応するデータの読出しをディスクI/O部230に指示する。ディスクI/O部230は、ディスク装置300から当該データの読出しを行う。ステップS27ディスクI/O部230は、読出したデータをネットワークI/O部220に出力する。ネットワークI/O部220は、ディスクI/O部230から取得した当該データを、クライアント400に送信する。このように、ストレージノード200,200a,200bは、Read要求があったときに、Read対象のデータが未移動である場合、移動元ノードを応答する。クライアント400は、当該応答に基づいて、移動元ノードに再度Read要求を送信し、当該データに適切にアクセスできる。なお、ステップS23において、Read要求を受信した担当ノードも、上記ステップS21~S27の処理を行うことで、Read要求を適切に処理できる。また、ステップS25において、Read要求を受信した移動元ノードも、上記ステップS21~S27の処理を行うことで、Read要求を適切に処理できる。更に、ステップS25では、移動対象のデータに対するRead要求につき、移動元ノードを応答して、クライアント400にリトライさせる例を示した。一方、アクセスを受け付けたノードと移動元ノードとの間でRead要求を送受信して、Read対象のデータをクライアント400に応答してもよい。例えば、クライアント400からRead要求を受信したノードが、移動元ノードにRead要求を転送する。移動元ノードは、当該Read要求に応じたデータをクライアント400に応答する。次に、データのWrite要求を受信した場合の処理例を説明する。図11は、Write要求受信時の処理例を示すフローチャートである。以下、図11に示す処理をステップ番号に沿って説明する。ステップS31ネットワークI/O部220は、クライアント400からWrite要求を受信する。ネットワークI/O部220は、担当ノード判定部250にWrite要求を出力する。ステップS32担当ノード判定部250は、Write要求が自ノードへのアクセスか否かを判断する。自ノードへのアクセスである場合、処理をステップS34に進める。自ノード以外のノードへのアクセスである場合、処理をステップS33に進める。ステップS33担当ノード判定部250は、アクセス対象のハッシュ値が属する範囲を担当する担当ノードを、記憶部210に記憶された担当管理テーブルを参照して特定する。担当ノード判定部250は、特定した担当ノードにWrite要求を転送する。そして、処理を終了する。ステップS34担当ノード判定部250は、キーに対応するデータの書込み更新をディスクI/O部230に指示する。ディスクI/O部230は、ディスク装置300に当該データの書込みを行う。ディスクI/O部230は、ネットワークI/O部220を介して、クライアント400に書込み完了を応答する。ステップS35担当ノード判定部250は、ステップS34で書込みを行ったデータがストレージノード200の担当範囲の拡大に伴うデータ移動の対象であるか否かを判断する。移動対象である場合、処理をステップS36に進める。移動対象でない場合、処理を終了する。例えば、担当ノード判定部250は、次の1~3の条件が全て満たされるときに、当該データが移動対象であると判断できる。1自ノードが、担当範囲の拡大に伴い移動元ノードからデータを移動中である。2アクセス対象のキーから算出されるハッシュ値が拡大後の担当範囲に属する。3当該キーに対応するデータを移動元ノードから未だ移動していない。ステップS36担当ノード判定部250は、ステップS34で書込みを行ったデータを移動元ノードからの移動対象から除外する。例えば、担当ノード判定部250は、当該データに対応するキーのデータを、移動せずに削除するよう移動元ノードに依頼する。また、例えば、担当ノード判定部250は、当該キーのデータを移動元ノードから受信したとき、当該データを破棄する。このように、ストレージノード200,200a,200bは、Write要求があったときに、データの書込みを行い、移動元ノードから受信するデータによって、書き込んだデータが更新されないようにする。これにより、新しいデータが古いデータで上書きされるのを防止できる。なお、ステップS33において、Write要求を受信した担当ノードも、上記ステップS31~S36の処理を行うことで、Write要求を適切に処理できる。また、ステップS34では、更新対象のデータが未移動であれば、移動元ノードにWrite要求を転送して、移動元ノードにデータの更新を実行させてもよい。更に、ステップS34では、更新対象のデータが未移動であれば、当該データの移動を先に行ってから、当該データの更新を行ってもよい。更に、上述の例では、担当範囲を拡大したとき、ストレージノード200,200a,200bが保持する担当範囲テーブルを更新した後に、データの移動を行うものとしたが、これらの手順を逆の順序で行ってもよい。具体的には、担当範囲制御部130は、担当範囲を拡大する場合、データの移動を行ったあとに、ストレージノード200,200a,200bが保持する担当範囲テーブルを更新するようにしてもよい。この場合、移設中の範囲に属するデータに対してクライアント400からアクセスがあると、移動先のストレージノードに当該データが移動済で、アクセスを受けたストレージノードに当該データが存在しないことがある。その場合には、アクセスを受けたストレージノードが、移動先のストレージノードをクライアント400に応答すればよい。そうすれば、クライアント400は、移動先のストレージノードに対し、改めて当該データへアクセスできる。"