JP2014044553A - プログラム、情報処理装置および情報処理システム - Google Patents
プログラム、情報処理装置および情報処理システム Download PDFInfo
- Publication number
- JP2014044553A JP2014044553A JP2012186317A JP2012186317A JP2014044553A JP 2014044553 A JP2014044553 A JP 2014044553A JP 2012186317 A JP2012186317 A JP 2012186317A JP 2012186317 A JP2012186317 A JP 2012186317A JP 2014044553 A JP2014044553 A JP 2014044553A
- Authority
- JP
- Japan
- Prior art keywords
- virtual machine
- key
- data
- virtual
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Hardware Redundancy (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】データのバックアップを効率的に取得すること。
【解決手段】記憶部1aは、情報処理装置1で動作する仮想マシン1cに配置されたデータをキーに対応付けて記憶する。演算部1bは、データに対応するキーと仮想マシン1c,2cで共通に用いられるハッシュ関数とから算出されるハッシュ値に基づいて記憶装置3に対するデータの格納を担当する仮想マシンを特定する。演算部1bは、特定した担当の仮想マシンが仮想マシン1cと一致する場合は仮想マシン1cを用いてデータを記憶装置3に格納する。演算部1bは、特定した担当の仮想マシンが仮想マシン1cと一致しない場合は仮想マシン1cが記憶装置3にデータを格納しないように制御する。
【選択図】図1
【解決手段】記憶部1aは、情報処理装置1で動作する仮想マシン1cに配置されたデータをキーに対応付けて記憶する。演算部1bは、データに対応するキーと仮想マシン1c,2cで共通に用いられるハッシュ関数とから算出されるハッシュ値に基づいて記憶装置3に対するデータの格納を担当する仮想マシンを特定する。演算部1bは、特定した担当の仮想マシンが仮想マシン1cと一致する場合は仮想マシン1cを用いてデータを記憶装置3に格納する。演算部1bは、特定した担当の仮想マシンが仮想マシン1cと一致しない場合は仮想マシン1cが記憶装置3にデータを格納しないように制御する。
【選択図】図1
Description
本発明はプログラム、情報処理装置および情報処理システムに関する。
物理的なコンピュータ(物理マシンや物理ホストと呼ぶことがある)上で、複数の仮想的なコンピュータ(仮想マシンや論理ホストと呼ぶことがある)を動作させることがある。各仮想マシン上では、OS(Operating System)やアプリケーションなどのソフトウェアを実行できる。物理マシンは、複数の仮想マシンを管理するためのソフトウェアを実行する。例えば、ハイパーバイザと呼ばれるソフトウェアが、CPU(Central Processing Unit)の処理能力やRAM(Random Access Memory)の記憶領域を、演算のリソースとして複数の仮想マシンに割り振ることがある。
ところで、複数の仮想マシンにデータを分散配置することがある。データを分散配置することでデータアクセスの高速化を図れる。データの分散化にはKVS(Key - Value Store)と呼ばれる手法を用いることがある。KVSではデータ(value)にキー(key)を付与し、キーとデータとのペアを何れかのノード(例えば、仮想マシン)に配置する。保存したデータにアクセスする際はキーを指定する。キーに応じて異なるノードにデータを格納することで、データを分散配置する。あるノードに配置したデータの複製を、隣接ノードにも配置して冗長化することで、ノード故障に耐性を持たせる提案もある。
また、実行系装置と複数の待機系装置とを含むシステムにおいて、実行系装置の主記憶装置上にDB(DataBase)データを配置し、システム停止時に、各待機系装置に接続されたストレージ装置のそれぞれにDBデータを分配して保持させる提案もある。この提案では、DBデータのうち各ストレージ装置に保持させる範囲は実行系装置により決定され、各待機系装置に指示される。
KVSを用いて複数の仮想マシンにデータを分散配置し、当該データの複製を異なる仮想マシンにも配置して冗長化する場合を考える。仮想マシンの運用では、仮想マシンの停止後に、仮想マシンに割り振られていたリソースを解放することがある。解放されたリソースが保持していたデータは消える。このため、データを冗長化したとしても、当該データを消失する可能性は残る。例えば、当該データが配置された全仮想マシンで同時に障害が起こり、当該全仮想マシンを停止して再作成することもあるからである。そこで、データの複製を、記憶装置などにバックアップとして保存しておきたいということがある。
しかし、この場合、データのバックアップをどのようにして効率的に取得するかが問題となる。例えば、同じデータが配置された複数の仮想マシンそれぞれが当該データを複製して記憶装置に格納することも考えられる。しかし、複数の仮想マシンが同じデータを重複して格納すると、データ転送に余計な通信コストや処理コストを伴い非効率的となる。
一側面によれば、本発明は、データのバックアップを効率的に取得できるプログラム、情報処理装置および情報処理システムを提供することを目的とする。
一実施態様によれば、コンピュータによって実行されるプログラムであって、仮想マシンが動作可能な1または複数のコンピュータを備えておりキーと対応付けられたデータをキーに応じた複数の仮想マシンに配置するシステムで、データを記憶装置に保存するために用いられるプログラムが提供される。このプログラムは、コンピュータで動作する第1の仮想マシンに配置されたデータに対応するキーと複数の仮想マシンで共通に用いられるハッシュ関数とから算出されるハッシュ値に基づいて、記憶装置へのデータの格納を担当する第2の仮想マシンを特定し、第2の仮想マシンが第1の仮想マシンと一致する場合は第1の仮想マシンを用いて記憶装置にデータを格納し、また、第2の仮想マシンが第1の仮想マシンと一致しない場合は第1の仮想マシンが記憶装置にデータを格納しないように制御する、処理をコンピュータに実行させる。
また、一実施態様によれば、仮想マシンが動作可能な1または複数の情報処理装置を備えておりキーと対応付けられたデータをキーに応じた複数の仮想マシンに配置するシステムに用いられる情報処理装置が提供される。この情報処理装置は、記憶部と演算部とを有する。記憶部は、自装置で動作する第1の仮想マシンに配置されたデータをキーに対応付けて記憶する。演算部は、データに対応するキーと複数の仮想マシンで共通に用いられるハッシュ関数とから算出されるハッシュ値に基づいて記憶装置に対するデータの格納を担当する第2の仮想マシンを特定し、第2の仮想マシンが第1の仮想マシンと一致する場合は第1の仮想マシンを用いてデータを記憶装置に格納し、また、第2の仮想マシンが第1の仮想マシンと一致しない場合は第1の仮想マシンが記憶装置にデータを格納しないように制御する。
また、一実施態様によれば、仮想マシンが動作可能な1または複数の情報処理装置を備えておりキーと対応付けられたデータをキーに応じた複数の仮想マシンに配置する情報処理システムが提供される。この情報処理システムは、情報処理装置を有する。情報処理装置は、自装置で動作する第1の仮想マシンに配置されたデータに対応するキーと複数の仮想マシンで共通に用いられるハッシュ関数とから算出されるハッシュ値に基づいて記憶装置に対するデータの格納を担当する第2の仮想マシンを特定し、第2の仮想マシンが第1の仮想マシンと一致する場合は第1の仮想マシンを用いてデータを記憶装置に格納し、また、第2の仮想マシンが第1の仮想マシンと一致しない場合は第1の仮想マシンが記憶装置にデータを格納しないように制御する。
一実施態様によれば、データのバックアップを効率的に取得できる。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理システムを示す図である。第1の実施の形態の情報処理システムは、情報処理装置1,2および記憶装置3を有する。情報処理装置1,2および記憶装置3はネットワークを介して接続されている。情報処理装置1,2では仮想マシンが動作可能である。この情報処理システムは、キーと対応付けられたデータを当該キーに応じた複数の仮想マシンに配置する。記憶装置3は、複数の仮想マシンに配置されたデータを格納するための装置である。例えば、記憶装置3は不揮発性の記憶デバイスを備える。例えば、記憶装置3の不揮発性の記憶デバイスに格納されたデータをバックアップとして利用できる。記憶装置3は情報処理装置1,2の何れかに内蔵されてもよい。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理システムを示す図である。第1の実施の形態の情報処理システムは、情報処理装置1,2および記憶装置3を有する。情報処理装置1,2および記憶装置3はネットワークを介して接続されている。情報処理装置1,2では仮想マシンが動作可能である。この情報処理システムは、キーと対応付けられたデータを当該キーに応じた複数の仮想マシンに配置する。記憶装置3は、複数の仮想マシンに配置されたデータを格納するための装置である。例えば、記憶装置3は不揮発性の記憶デバイスを備える。例えば、記憶装置3の不揮発性の記憶デバイスに格納されたデータをバックアップとして利用できる。記憶装置3は情報処理装置1,2の何れかに内蔵されてもよい。
情報処理装置1は、記憶部1a、演算部1bおよび仮想マシン1c,1dを有する。
記憶部1aは、データを保存できる揮発性または不揮発性のメモリである。記憶部1aはRAMやHDD(Hard Disk Drive)を含んでもよい。例えば、情報処理装置1で実行されるハイパーバイザが、記憶部1aの記憶領域の一部を仮想マシン1cのリソースとして割り振る。記憶領域の他の一部を仮想マシン1dのリソースとして割り振る。
記憶部1aは、データを保存できる揮発性または不揮発性のメモリである。記憶部1aはRAMやHDD(Hard Disk Drive)を含んでもよい。例えば、情報処理装置1で実行されるハイパーバイザが、記憶部1aの記憶領域の一部を仮想マシン1cのリソースとして割り振る。記憶領域の他の一部を仮想マシン1dのリソースとして割り振る。
演算部1bは、情報処理装置1における情報処理を実行するプロセッサである。演算部1bはCPUでもよい。演算部1bの処理能力の一部が仮想マシン1c,1dの演算のリソースとして割り振られる。例えば、ハイパーバイザが、演算部1bの利用可能時間を時分割した複数のタイムスライスの一部を仮想マシン1cに割り振る。複数のタイムスライスの他の一部を仮想マシン1dに割り振る。
情報処理装置1は、記憶部1a(メモリ)と演算部1b(プロセッサ)とを備えたコンピュータでもよい。
仮想マシン1c,1dは、記憶部1aおよび演算部1bから割り振られたリソースを用いて動作する仮想的なコンピュータである。仮想マシン1c,1dは、OSやアプリケーションなどのソフトウェアを実行し得る。仮想マシン1c,1dは当該ソフトウェアの処理に用いるデータをKVSの手法により複数の仮想マシンに分散配置する。例えば、仮想マシン1cにはキー(key)とバリュー(value)との組として、(キー,バリュー)=(keyX,valueX),(keyY,valueY)が配置されている。なお、バリューはデータに相当する。キー・バリューの組をデータと称してもよい。
仮想マシン1c,1dは、記憶部1aおよび演算部1bから割り振られたリソースを用いて動作する仮想的なコンピュータである。仮想マシン1c,1dは、OSやアプリケーションなどのソフトウェアを実行し得る。仮想マシン1c,1dは当該ソフトウェアの処理に用いるデータをKVSの手法により複数の仮想マシンに分散配置する。例えば、仮想マシン1cにはキー(key)とバリュー(value)との組として、(キー,バリュー)=(keyX,valueX),(keyY,valueY)が配置されている。なお、バリューはデータに相当する。キー・バリューの組をデータと称してもよい。
情報処理装置2は、記憶部2a、演算部2bおよび仮想マシン2c,2dを有する。記憶部2aの説明は記憶部1aと同様であるため省略する。演算部2bの説明は記憶部1aと同様であるため省略する。
仮想マシン2c,2dは、記憶部2aおよび演算部2bから割り振られたリソースを用いて動作する仮想的なコンピュータである。仮想マシン2c,2dも仮想マシン1c,1dと同様にOSやアプリケーションなどのソフトウェアを実行し得る。仮想マシン2c,2dも当該ソフトウェアの処理に用いるデータをKVSの手法により複数の仮想マシンに分散配置する。
第1の実施の形態では、一例として、同じデータを2つの仮想マシンに配置して冗長化しているものとする。例えば、仮想マシン2cには、仮想マシン1cに配置されたデータの複製も配置される。具体的には、仮想マシン2cにも(キー,バリュー)=(keyX,valueX),(keyY,valueY)が配置されて、仮想マシン1c,2cでデータが冗長化されている。ここで、冗長化されたデータを指して、冗長データと呼ぶことがある。これらの冗長データを記憶装置3に格納するとき、演算部1b,2bは次のような処理を実行する。
演算部1bは、仮想マシン1cに配置されたデータ“valueX”に対応するキー“keyX”と、仮想マシン1c,2cで共通に用いられるハッシュ関数(例えば、関数Hashとする)とからハッシュ値“Hash(keyX)”を算出する。演算部1bは、当該ハッシュ値“Hash(keyX)”に基づいて、記憶装置3への当該データの格納を担当する仮想マシンを特定する。データ“valueY”についても同様である。
ここで、ハッシュ関数とは、入力に対して出力する各ハッシュ値の出現確率が、ほぼ一様に分布するようにした関数である。例えば、ハッシュ関数Hashはキーに対して“0”または“1”をそれぞれほぼ1/2の確率で算出する関数であるとする。この場合、キーに応じたハッシュ値“0”または“1”によって、データの格納を担当する仮想マシンを仮想マシン1c,2cにほぼ均等に割り当てることができる。
担当の仮想マシンが仮想マシン1cと一致する場合、演算部1bは仮想マシン1cを用いて記憶装置3に該当のデータを格納するように制御する。上記のハッシュ関数Hashの例でいえば、ハッシュ値“0”であれば担当は仮想マシン1cであり、ハッシュ値“1”であれば担当は仮想マシン2cである、というように予め決定できるようにしておく。この場合、“Hash(keyX)=0”であれば仮想マシン1cが担当である。よって、演算部1bは仮想マシン1cを用いて“valueX”を記憶装置3に格納する(“keyX”との組を格納してもよい)。演算部2bは、演算部1bと同様の処理を行い、仮想マシン2cが“valueX”を記憶装置3に格納しないように制御することになる。
一方、担当の仮想マシンが仮想マシン1cと一致しない場合、演算部1bは仮想マシン1cが記憶装置3に該当のデータを格納しないように制御する。例えば、“Hash(keyY)=1”であれば、仮想マシン2cが担当なので、演算部1bは、仮想マシン1cが“valueY”を記憶装置3に格納しないように制御する。演算部2bは、演算部1bと同様の処理を行い、仮想マシン2cを用いて“valueY”を記憶装置3に格納することになる(“keyY”との組を格納してもよい)。
情報処理装置1によれば、演算部1bにより、情報処理装置1で動作する仮想マシン1cに配置されたデータに対応するキーと複数の仮想マシンで共通に用いられるハッシュ関数とから算出されるハッシュ値に基づいて記憶装置3に対する当該データの格納を担当する仮想マシンが特定される。担当の仮想マシンが仮想マシン1cと一致する場合は、演算部1bにより、仮想マシン1cを用いて当該データを記憶装置3に格納するように制御される。また、担当の仮想マシンが仮想マシン1cと一致しない場合は、演算部1bにより、仮想マシン1cが記憶装置3にデータを格納しないように制御される。
これにより、データのバックアップを効率的に取得できる。具体的には、冗長化してデータが配置された複数の仮想マシンの何れかに当該データの記憶装置3への格納を担当させるので、同じデータを複数の仮想マシンが重複して格納する場合に比べて、データ転送のための通信コストや処理コストを削減できる。また、記憶装置3で同じデータを2重に書き込むための処理コストも抑えられる。また、当該担当の仮想マシンが自身であるかを各仮想マシンが自律的に判断できる。よって、担当の仮想マシンがどれであるかを指定するような装置を別途設けなくてもよい。更に、複数の仮想マシンに対して、データ格納の責任をほぼ均等に割り振れる。よって、冗長データが配置された複数の仮想マシンの中でデータ格納に伴う処理負荷をほぼ均等に分散できる。
なお、例えば、仮想マシン1c,1dに対してデータを冗長に配置する場合も同様の処理により、仮想マシン1c,1dの何れにデータ格納を担当させるかを決定できる。すなわち、第1の実施の形態の情報処理は情報処理装置が1台でも有効である。
また、第1の実施の形態の情報処理は、記憶部1a,2aに記憶されたプログラムを演算部1b,2bが実行することでも実現できる。その場合、仮想マシン1c,1d,2c,2dに割り当てられたリソースを用いて当該プログラムを実行してもよい。その場合、仮想マシン1c,1d,2c,2dで当該プログラムを実行可能となるように組み込んでおく。一方、仮想マシン1c,1d,2c,2dに割り当てられたリソース以外のリソースを用いて当該プログラムを実行してもよい。例えば、ハイパーバイザが上記の情報処理を実行してもよい。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムを示す図である。第2の実施の形態の情報処理システムは、実行サーバ100,200,300、ストレージサーバ400、管理サーバ500、負荷分散装置600およびクライアント700,700aを含む。実行サーバ100,200,300、ストレージサーバ400および管理サーバ500はネットワーク10に接続されている。実行サーバ100,200,300は負荷分散装置600に接続されている。負荷分散装置600およびクライアント700,700aはネットワーク20に接続されている。
図2は、第2の実施の形態の情報処理システムを示す図である。第2の実施の形態の情報処理システムは、実行サーバ100,200,300、ストレージサーバ400、管理サーバ500、負荷分散装置600およびクライアント700,700aを含む。実行サーバ100,200,300、ストレージサーバ400および管理サーバ500はネットワーク10に接続されている。実行サーバ100,200,300は負荷分散装置600に接続されている。負荷分散装置600およびクライアント700,700aはネットワーク20に接続されている。
ネットワーク10,20は例えばLAN(Local Area Network)である。ネットワーク10,20は、インターネットやWAN(Wide Area Network)などの広域ネットワークでもよい。
実行サーバ100,200,300は、仮想マシンが動作可能なサーバコンピュータである。実行サーバ100,200,300で動作する仮想マシンは、ユーザの業務に用いるアプリケーションを実行する。ユーザは、クライアント700,700aを用いて当該アプリケーションを利用する。仮想マシンはWebサーバ機能を有し、当該アプリケーションをWebアプリケーションとしてユーザに提供する。ユーザは、クライアント700,700aが実行するWebブラウザを操作して、当該Webアプリケーションを利用する。実行サーバ100,200,300上の複数の仮想マシンそれぞれが、あるユーザに対して同一のWebアプリケーションを提供することで、各仮想マシンにおける負荷を分散することもできる。
ストレージサーバ400は、仮想マシンで扱うデータのバックアップを保存するためのサーバコンピュータである。ストレージサーバ400は不揮発性の記憶装置を備える。当該記憶装置にデータを格納しておけば、電源供給が停止してもデータを保持できる。ストレージサーバ400はNAS(Network Attached Storage)でもよい。ネットワーク10をSAN(Storage Area Network)とし、FC(Fibre Channel)などで実行サーバ100,200,300と通信するストレージ装置を、ストレージサーバ400の代わりに用いてもよい。
管理サーバ500は、実行サーバ100,200,300上で動作する仮想マシンの起動・停止を制御するサーバコンピュータである。例えば、管理者は管理サーバ500を操作して、実行サーバ100,200,300に仮想マシンを新たに実行開始させることができる。また、仮想マシンを停止させることもできる。
負荷分散装置600は、複数の仮想マシンに対するリクエストを分散する中継装置である。例えば、実行サーバ100上の仮想マシンと、実行サーバ200上の仮想マシンが同一のWebアプリケーションを提供することがある。この場合、負荷分散装置600は、当該Webアプリケーションに対応した仮想IP(Internet Protocol)アドレス宛てのリクエストをクライアント700,700aから受信する。負荷分散装置600は、実行サーバ100,200上の各仮想マシンの何れかに当該リクエストを振り分ける。振り分けの方法は、例えばラウンドロビンである。各仮想マシンで確立されているコネクション数や各仮想マシンの応答時間などに基づいて振り分け先を決定してもよい。
クライアント700,700aは、ユーザが操作するクライアントコンピュータである。クライアント700,700aは、上述したようにWebブラウザを実行する。例えば、ユーザは、Webアプリケーションが提供するGUI(Graphical User Interface)をWebブラウザ上で操作する。これにより、当該Webアプリケーションにリクエストを送信する、リクエストに対するレスポンスを確認するなどが可能である。
ここで、Webアプリケーションには、その機能の実現に、Webブラウザとの間に確立されたセッションを維持できることを前提とするものがある。そのため、例えば負荷分散装置600は同一クライアントからのリクエストを同一サーバに固定的に割り振り、同一サーバでセッション維持を行えるようにする機能を有する。この機能をスティッキー(Sticky)と呼ぶことがある。
例えば、クライアント700上のWebブラウザからのリクエストが、負荷分散装置600によって実行サーバ100上の仮想マシンに振り分けられたとする。負荷分散装置600はクライアント700についてリクエストの振り分け先を一度決めると、以後もクライアント700からのリクエストを当該振り分け先の仮想マシンに転送する。以後、クライアント700のWebブラウザのリクエストが実行サーバ100上の同一仮想マシンに転送される限り、セッションは維持され、Webアプリケーションの機能を正常に利用できる。
ところが、負荷分散装置600では、スティッキーの持続時間が制限されていることがある。例えば、持続時間が1分などの短い時間に制限されていることがある。すると、ユーザがWebブラウザを閲覧している間にセッションがタイムアウトし、クライアント700からのリクエストが別の仮想マシンに再振り分けされてしまうことがある。すると、Webアプリケーションを利用するためにセッションを再度確立する処理(例えば、ログインなど)が生じてしまい、Webアプリケーションの利用が不便になるおそれがある。負荷分散装置600でスティッキー機能を利用できない場合も同様の問題が生じ得る。
そこで、実行サーバ100,200,300の各仮想マシンは、セッションに関する情報(以下、セッション情報という)を保持し、仮想マシン同士で共有する機能を有している。このようにすれば、リクエストが別の仮想マシンに再振り分けされたとしても、何れかの仮想マシンに配置されたセッション情報を取得することで、セッションを維持できる。すなわち、負荷分散装置600のスティッキー機能によらずに、Webアプリケーションでセッション維持を行える。
第2の実施の形態の情報処理システムでは、KVSの手法を用いて、実行サーバ100,200,300上の各仮想マシンにセッション情報を分散配置して、セッション情報に対するアクセスの高速化を図っている(詳細は後述する)。
図3は、第2の実施の形態の実行サーバのハードウェア例を示す図である。実行サーバ100は、プロセッサ101、RAM102、HDD103、通信部104,104a、画像信号処理部105、入力信号処理部106、ディスクドライブ107および機器接続部108を有する。各ユニットが実行サーバ100のバスに接続されている。実行サーバ200,300、ストレージサーバ400、管理サーバ500およびクライアント700,700aも実行サーバ100と同様のユニットを用いて実現できる。
プロセッサ101は、実行サーバ100の情報処理を制御する。プロセッサ101はマルチプロセッサであってもよい。プロセッサ101は、例えばCPU、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)またはPLD(Programmable Logic Device)などである。プロセッサ101は、CPU、MPU、DSP、ASIC、FPGA、PLDのうちの2以上の要素の組み合わせであってもよい。
RAM102は、実行サーバ100の主記憶装置である。RAM102は、プロセッサ101に実行させるOSのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101による処理に用いる各種データを記憶する。
HDD103は、実行サーバ100の補助記憶装置である。HDD103は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。実行サーバ100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
通信部104は、ネットワーク10を介してストレージサーバ400および管理サーバ500と通信を行えるインタフェースである。通信部104aは、負荷分散装置600を介して実行サーバ200,300およびクライアント700,700aと通信を行えるインタフェースである。通信部104,104aは有線インタフェースでもよいし、無線インタフェースでもよい。
画像信号処理部105は、プロセッサ101からの命令に従って、実行サーバ100に接続されたディスプレイ11に画像を出力する。ディスプレイ11としては、CRT(Cathode Ray Tube)ディスプレイや液晶ディスプレイなどを用いることができる。
入力信号処理部106は、実行サーバ100に接続された入力デバイス12から入力信号を取得し、プロセッサ101に出力する。入力デバイス12としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
ディスクドライブ107は、レーザ光などを利用して、光ディスク13に記録されたプログラムやデータを読み取る駆動装置である。光ディスク13として、例えば、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などを使用できる。ディスクドライブ107は、例えば、プロセッサ101からの命令に従って、光ディスク13から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
機器接続部108は、実行サーバ100に周辺機器を接続するための通信インタフェースである。例えば、機器接続部108にはメモリ装置14やリーダライタ装置15を接続できる。メモリ装置14は、機器接続部108との通信機能を搭載した記録媒体である。リーダライタ装置15は、メモリカード16へのデータの書き込み、またはメモリカード16からのデータの読み出しを行う装置である。メモリカード16は、カード型の記録媒体である。機器接続部108は、例えば、プロセッサ101からの命令に従って、メモリ装置14またはメモリカード16から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
図4は、第2の実施の形態の仮想マシンの実行例を示す図である。実行サーバ100は、物理ハードウェア層110、ハイパーバイザ120および仮想マシン130,140,150を含む。実行サーバ200,300も実行サーバ100と同様にして実現できる。
物理ハードウェア層110は、プロセッサ101、RAM102、HDD103、通信部104,104a、画像信号処理部105、入力信号処理部106、ディスクドライブ107および機器接続部108を含む物理的なリソースの集合である。
ハイパーバイザ120は、物理ハードウェア層110のリソースを用いて仮想マシン130,140,150を動作させるソフトウェアである。ハイパーバイザ120は、プロセッサ101の処理能力やRAM102の記憶領域を演算のリソースとして仮想マシン130,140,150に割り当てる。例えば、ハイパーバイザ120は、プロセッサ101を利用可能な時間を複数のタイムスライスに時分割し、各タイムスライスを仮想CPUとして仮想マシン130,140,150に割り当てる。また、ハイパーバイザ120はRAM102の記憶領域を複数の領域に分割し、仮想マシン130,140,150に各領域を割り当てる。ハイパーバイザ120は、仮想マシンモニタ(VMM:Virtual Machine Monitor)と呼ばれることもある。
また、ハイパーバイザ120は仮想バス121を有する。仮想バス121は仮想マシン130,140,150間の通信路である。
仮想マシン130,140,150は、実行サーバ100上で動作する仮想マシンである。仮想マシンをインスタンス(instance)と呼んでもよい。仮想マシン130,140,150は個別にOSを実行する。同一のOSを実行してもよいし、異なるOSを実行してもよい。
仮想マシン130,140,150は、実行サーバ100上で動作する仮想マシンである。仮想マシンをインスタンス(instance)と呼んでもよい。仮想マシン130,140,150は個別にOSを実行する。同一のOSを実行してもよいし、異なるOSを実行してもよい。
仮想マシン130は、物理ハードウェア層110の入出力デバイスに対する操作を管理する。入出力デバイスは、HDD103、通信部104,104a、画像信号処理部105、入力信号処理部106、ディスクドライブ107および機器接続部108を含む。仮想マシン130を親パーティションと呼ぶことがある。仮想マシン130は、管理OS131およびデバイスドライバ132を含む。
管理OS131は、仮想マシン130上で動作するOSである。管理OS131は、仮想バス121を介して、デバイスドライバ132の利用環境を仮想マシン140,150に提供する。デバイスドライバ132は、物理ハードウェア層110の入出力デバイスを利用するためのドライバソフトウェアである。
仮想マシン140,150は、仮想マシン130上のデバイスドライバ132を利用して物理ハードウェア層110の入出力デバイスを操作する。仮想マシン140,150を子パーティションと呼ぶことがある。仮想マシン140は、ゲストOS141およびAP(APplication)サーバ142を含む。
ゲストOS141は、仮想バス121を介して仮想マシン130と通信し、デバイスドライバ132を用いて物理ハードウェア層110の入出力デバイスを操作する。例えば、実行サーバ200,300上の他の仮想マシンとネットワーク20を介して通信する。また、例えば、仮想マシン140に割り当てられたHDD103上のリソース(記憶領域)にデータを書き込んだり読み出したりする。
APサーバ142は、ユーザが利用するWebアプリケーションである。APサーバ142はWebサーバ機能を有する。例えば、APサーバ142はクライアント700からリクエストを受信する。APサーバ142は、リクエストに応じた業務処理を実行してクライアント700に実行結果を応答する(レスポンス)。
APサーバ142は、クライアント700のWebブラウザとの間でログイン処理などによってセッションを新たに確立すると、クライアント700に対してセッションID(IDentifier)を付与する。そして、セッションIDに対応付けて、セッション情報を生成する。セッション情報にはユーザID、パスワードおよび業務処理に用いる情報が含まれ得る。また、セッション情報には、業務処理に応じた情報を適宜追加することもできる。
仮想マシン150は、ゲストOS151およびAPサーバ152を有する。ゲストOS151の説明はゲストOS141と同様であるため省略する。APサーバ152の説明はAPサーバ142と同様であるため省略する。
このように、仮想マシン140,150は、仮想マシン130が提供するデバイスドライバ132を利用して入出力デバイスを操作する。ハイパーバイザ120の当該実装方法をマイクロカーネル(micro kernel)型と呼ぶことがある。ただし、モノリシックカーネル(monolithic kernel)型でもよい。
図5は、第2の実施の形態のソフトウェア例を示す図である。実行サーバ100は前述のように仮想マシン140,150を含む。更に、実行サーバ200は仮想マシン240を含む。仮想マシン140,150,240はクラスタと呼ばれる1つの仮想マシン群を形成している。当該クラスタ内でセッション情報を共有可能である。例えば、仮想マシン140は、仮想マシン140に該当のセッション情報がなくても、仮想マシン150,240に配置された該当のセッション情報を利用できる。仮想マシン140,150,240上の各APサーバは、当該クラスタ内の何れかの仮想マシンにセッション情報を分散して配置する。
なお、図5ではネットワーク10に接続される装置のうち、実行サーバ300および管理サーバ500の図示を省略している。物理ハードウェア層110および仮想マシン130の図示を省略している。
仮想マシン140は、記憶部143および処理部144を有する。
記憶部143は、処理部144の処理に用いる各種の情報を記憶する。記憶部143は、KVSの手法を用いて作成されたセッション情報を記憶する。具体的には、上述したように(キー,バリュー)=(セッションID,セッション情報の本体)の組を記憶する。1つの組を1つのレコードと称することがある。1つの仮想マシンに配置される(キー,バリュー)の複数の組の集合を指して、KVSと称することがある。また、記憶部143はバックアップ対象のセッション情報を管理するための情報を記憶する。
記憶部143は、処理部144の処理に用いる各種の情報を記憶する。記憶部143は、KVSの手法を用いて作成されたセッション情報を記憶する。具体的には、上述したように(キー,バリュー)=(セッションID,セッション情報の本体)の組を記憶する。1つの組を1つのレコードと称することがある。1つの仮想マシンに配置される(キー,バリュー)の複数の組の集合を指して、KVSと称することがある。また、記憶部143はバックアップ対象のセッション情報を管理するための情報を記憶する。
処理部144は、APサーバ142と連携して、APサーバ142がWebブラウザとの間で確立したときに生成されるセッション情報をKVSに格納する。具体的には、処理部144は、APサーバ142が新たにセッションを確立すると、セッションIDおよびセッション情報をAPサーバ142から取得する。処理部144は、KVSの手法を用いて、取得したセッションIDとセッション情報とを何れかの仮想マシンに分散配置する。キーはセッションIDである。バリューはセッション情報である。
処理部144は、仮想マシン140,150,240上のAPサーバがセッション情報を操作すると、当該操作内容を取得して、KVSに反映させる。また、処理部144は、APサーバからのキーを指定した要求に応じて、KVSからセッション情報を抽出し、当該APサーバに提供する。
また、処理部144は、記憶部143に記憶された情報に基づいて、ストレージサーバ400に対するセッション情報のバックアップを制御する。
仮想マシン150は、記憶部153および処理部154を有する。仮想マシン240は記憶部243および処理部244を有する。記憶部153,243の説明は記憶部143の説明と同様であるため省略する。処理部154,244の説明は処理部144の説明と同様であるため省略する。
仮想マシン150は、記憶部153および処理部154を有する。仮想マシン240は記憶部243および処理部244を有する。記憶部153,243の説明は記憶部143の説明と同様であるため省略する。処理部154,244の説明は処理部144の説明と同様であるため省略する。
ここで、仮想マシン140,150,240にはクラスタ内で一意の仮想マシンID(図5では単にIDと表記している)が付与されている。仮想マシン140の仮想マシンIDは“1”である。仮想マシン150の仮想マシンIDは“2”である。仮想マシン240の仮想マシンIDは“3”である。
図6は、第2の実施の形態のハッシュ値の担当範囲の例を示す図である。第2の実施の形態の情報処理システムでは、一例として、キー・バリューの配置先を決定するためにコンシステントハッシング(consistent hashing)と呼ばれる方法を用いる。コンシステントハッシングでは、キーから算出されるハッシュ値の全範囲を複数の範囲に分割して複数のノードに割り当てる。各ノードは自身が担当するハッシュ値の範囲において、キー・バリューを保持する責任を負う。なお、コンシステントハッシングのために用いるハッシュ関数は、“キー・バリューの配置先を決定するためのハッシュ関数”である。
第2の実施の形態では、ハッシュ値の全範囲を、一例として“0〜99”とする。“99”の次の値は“0”である。ハッシュ値の全範囲は、ハッシュ値範囲R1,R2,R3に分割されている。ハッシュ値範囲R1は“0〜30”および“91〜99”である。ハッシュ値範囲R1は仮想マシン140の担当である。ハッシュ値範囲R2は“31〜60”である。ハッシュ値範囲R2は仮想マシン150の担当である。ハッシュ値範囲R3は“61〜90”である。ハッシュ値範囲R3は仮想マシン240の担当である。
また、処理部144,154,244は、仮想マシン140,150,240に配置された各キー・バリューを複製し、もう1つの別の仮想マシンにも配置する。すなわち、合計2つの仮想マシンで同じデータを保持する。これにより、キー・バリューの冗長化を図る。
例えば、処理部144,154,244は、あるキー・バリューの複製先の仮想マシンを仮想マシンIDに基づいて決定する。具体的には、隣接する仮想マシンのうち、仮想マシンIDの小さい方の仮想マシンが担当するハッシュ値範囲のキー・バリューの複製を、仮想マシンIDの大きい方の仮想マシンに配置する。ただし、最大の仮想マシンIDである仮想マシンが担当するハッシュ値範囲のキー・バリューの複製を、最小の仮想マシンIDである仮想マシンに配置する。ここで、「隣接する」とは、担当のハッシュ値範囲が隣り合っていることを意味する。
より具体的には、仮想マシン140(仮想マシンID:1)が担当するキー・バリューの複製先は仮想マシン150(仮想マシンID:2)である。仮想マシン150(仮想マシンID:2)が担当するキー・バリューの複製先は仮想マシン240(仮想マシンID:3)である。仮想マシン240(仮想マシンID:3)が担当するキー・バリューの複製先は仮想マシン140(仮想マシンID:1)である。すなわち、キーに応じてキー・バリューの配置先が決まれば、複製先も決まることになる。
このようにすれば、例えば、仮想マシン150が障害などで停止したとしても、仮想マシン140は、仮想マシン150に配置されていたキー・バリューの複製を仮想マシン240から取得することで、Webアプリケーションのセッションを維持できる。
キー・バリューの複製は、例えば、キー・バリューが新たに追加・更新されるたびに行われる。また、あるKVSからあるキー・バリューが削除されれば、複製先のKVSからも当該キー・バリューが削除されることになる。
なお、ハッシュ関数や、どのハッシュ値範囲がどの仮想マシンの担当であるかを示す情報は、仮想マシン140,150,240に予め与えられ、記憶部143,153,243に保持される。また、自身のハッシュ値範囲の複製先の仮想マシンがどの仮想マシンであるかを示す情報も、仮想マシン140,150,240に予め与えられ、記憶部143,153,243に保持される。
また、キー・バリューの配置先を決定するために、キーを用いた、コンシステントハッシング以外の方法を適用してもよい。また、キー・バリューの複製先を決定するための方法についても、キーを用いた上記以外の方法を適用してもよい。
図7は、第2の実施の形態のKVSの例を示す図である。図7(A)はKVS143aを例示している。KVS143aは記憶部143に格納される。図7(B)はKVS153aを例示している。KVS153aは記憶部153に格納される。図7(C)はKVS243aを例示している。KVS243aは記憶部243に格納される。
KVS143a,153a,243aのキーはセッションIDである。バリューはセッション情報の本体である。例えば、KVS143aには(キー,バリュー)=(keyA,valueA),(keyB,valueB),(keyD,valueD)という情報が登録されている。KVS153aには(キー,バリュー)=(keyA,valueA),(keyB,valueB),(keyC,valueC)という情報が登録されている。KVS243aには(キー,バリュー)=(keyC,valueC),(keyD,valueD)という情報が登録されている。
KVS143aにおいて、“keyA”および“keyB”のハッシュ値は仮想マシン140が担当するハッシュ値範囲R1に含まれる。“keyD”のハッシュ値はハッシュ値範囲R3に含まれる。すなわち、(キー,バリュー)=(keyD,valueD)は仮想マシン240に配置されたキー・バリューの複製である。
KVS153aにおいて、“keyC”のハッシュ値は仮想マシン150が担当するハッシュ値範囲R2に含まれる。“keyA”および“keyB”のハッシュ値はハッシュ値範囲R1に含まれる。すなわち、(キー,バリュー)=(keyA,valueA),(keyB,valueB)は仮想マシン140に配置されたキー・バリューの複製である。
KVS243aにおいて、“keyD”のハッシュ値は仮想マシン240が担当するハッシュ値範囲R3に含まれる。“keyC”のハッシュ値はハッシュ値範囲R2に含まれる。すなわち、(キー,バリュー)=(keyC,valueC)は仮想マシン150に配置されたキー・バリューの複製である。
図8は、第2の実施の形態の管理テーブルの例を示す図である。図8(A)は管理テーブル143bを例示している。管理テーブル143bは記憶部143に格納される。図8(B)は管理テーブル153bを例示している。管理テーブル153bは記憶部153に格納される。図8(C)は管理テーブル243bを例示している。管理テーブル243bは記憶部243に格納される。
管理テーブル143b,153b,243bは、それぞれKVS143a,153a,243aに対する前回のバックアップ完了時点からの操作内容を記録した履歴である。管理テーブル143b,153b,243bは、セッションIDおよび操作の項目を含む。セッションIDの項目にはセッションIDが登録される。操作の項目には追加や削除などのキー・バリューに対する操作内容が登録される。
例えば、管理テーブル143bには、セッションIDが“keyA”、操作が“ADD”という情報が登録されている。これは、KVS143a,153aで、前回のバックアップ完了時点からキー“keyA”のキー・バリューの追加または更新が発生したことを示す。すなわち、操作“ADD”は当該キー・バリューについてのバックアップの追加または更新を行うべきことを示す。
また、管理テーブル143bには、セッションIDが“keyD”、操作が“DELETE”という情報が登録されている。これは、KVS143a,243aで前回のバックアップ完了時点からキー“keyD”のキー・バリューの削除が発生したことを示す。すなわち、操作“DELETE”は当該キー・バリューについてのストレージサーバ400に格納されたバックアップの削除を行うべきことを示す。
このように、仮想マシン140,150,240は、自身に割り当てられたハッシュ値範囲(複製元が担当するハッシュ値範囲を含む)に対応するキーについて、前回のバックアップ完了時点からの操作内容を保持する。
図9は、第2の実施の形態のバックアップテーブルの例を示す図である。バックアップテーブル410は、ストレージサーバ400に格納される。バックアップテーブル410は、KVS143a,153a,243aに格納されたキー・バリューのバックアップデータである。バックアップテーブル410は、キー、バリューおよび仮想マシンIDの項目を含む。
キーの項目には、セッションIDが登録される。バリューの項目には、セッション情報が登録される。仮想マシンIDの項目には、バックアップ元の仮想マシンの仮想マシンIDが登録される。バックアップ元の仮想マシンは、バックアップをリストアするリストア先の仮想マシンということもできる。
例えば、バックアップテーブル410には、キーが“keyA”、バリューが“valueA”、仮想マシンIDが“1,2”という情報が登録されている。これは、仮想マシン140,150に冗長で配置された(キー,バリュー)=(keyA,valueA)のバックアップである。
ここで、バックアップテーブル410に格納されたデータは、何れかの仮想マシンで障害が発生した場合の復旧時のリストアに用いられる。すなわち、バックアップされたデータはリストアの必要性がなくなり次第削除してよい。例えば、バックアップ元のKVSからログアウトなどによりセッション情報が削除されれば、リストアの必要性はなくなる。よって、この場合はバックアップテーブル410からも該当のバックアップの情報を削除してよい。
図10は、第2の実施の形態の通信データの例を示す図である。図10(A)は、仮想マシン140(または仮想マシン150)がストレージサーバ400に送信する通信データ810を例示している。通信データ810は、バックアップを実行する際に、処理部144(または処理部154)によって生成されストレージサーバ400に送信される。仮想マシン240も通信データ810と同様のフォーマットの通信データをストレージサーバ400に送信する。
通信データ810は、キー、バリューおよび仮想マシンIDのフィールドを含む。キーのフィールドにはセッションIDが設定される。バリューのフィールドにはセッション情報が設定される。仮想マシンIDの項目にはバックアップ元の仮想マシンの仮想マシンIDが設定される。
例えば、通信データ810には、キーが“keyA”、バリューが“valueA”、仮想マシンIDが“1,2”という情報が設定されている。これは、バックアップテーブル410の第一段目のレコードに対応するものである。ストレージサーバ400は通信データ810を受信すると、バックアップテーブル410に当該レコードを登録することになる。
なお、バックアップテーブル410からレコードを削除したい場合は、キーを指定して削除する旨の指示をストレージサーバ400に送信すればよい。
図10(B)は、仮想マシン140,150間の通信データ820を例示している。仮想マシン140,240および仮想マシン150,240の間も同様のフォーマットの通信データが送受信される。通信データ820は、セッションIDおよび操作のフィールドを含む。
図10(B)は、仮想マシン140,150間の通信データ820を例示している。仮想マシン140,240および仮想マシン150,240の間も同様のフォーマットの通信データが送受信される。通信データ820は、セッションIDおよび操作のフィールドを含む。
セッションIDのフィールドには、次回バックアップ時にバックアップ対象とするセッションID(キー)が設定される。操作のフィールドには、当該セッションID(キー)で示されるキー・バリューに対する、前回バックアップ完了時点からの操作内容が設定される。
例えば、処理部144は、キー“keyA”のキー・バリューをKVS143aに追加したとする。すると、処理部144は、複製先である仮想マシン150にも当該追加を通知し、当該キー・バリューを仮想マシン150にも配置する。このとき、例えば、処理部144は通信データ820を生成して複製されたセッション情報とともに仮想マシン150に送信する。複製されたセッション情報を送信するタイミングとは別のタイミングで通信データ820を仮想マシン150に送信してもよい。また、処理部144は当該キー“keyA”に関する通信データ820を複製先以外の仮想マシン240には送信しない。
図11は、第2の実施の形態の関数の処理例を示す図である。図11(A)は関数Selectを例示している。関数Selectの引数はK(Kは文字、文字列、数値、数値列など)である。Kはキー・バリューのキーである。関数Selectはキーに対してM(Mは文字、文字列、数値、数値列など)を返す関数である。Mは仮想マシンIDである。例えば、関数Selectは次のようにしてMを求める。
まず、ハッシュ関数Hashを用いて、ハッシュ値H=Hash(K)を算出する。例えば、Hは0以上の整数である。次に、ハッシュ値Hを、キー・バリューの冗長度N(Nは2以上の整数)で割った剰余D(Dは0以上の整数)を求める。すなわち、D=H mod Nの演算を行う。そして、キーKを担当する仮想マシンのうち、D番目の仮想マシンの仮想マシンIDをMとして返す。
ここで、“D番目”という場合、仮想マシンIDの昇順に何番目かを表している。例えば、仮想マシン140,150,240の例でいえば、それぞれの仮想マシンIDは“1”、“2”、“3”である。
仮想マシン140,150に冗長度N=2で配置されたキー・バリューに着目すると、Dの取り得る値は“0”、“1”である。この場合、“0番目”の仮想マシンは仮想マシン140(仮想マシンID:1)である。“1番目”の仮想マシンは仮想マシン150(仮想マシンID:2)である。
一方、仮想マシン140,240に冗長度N=2で配置されたキー・バリューに着目すると、Dの取り得る値は“0”、“1”である。この場合、“0番目”の仮想マシンは仮想マシン140(仮想マシンID:1)である。“1番目”の仮想マシンは仮想マシン240(仮想マシンID:3)である。
なお、ハッシュ関数Hashによる演算と剰余Dを算出するまでの演算とを併せて、ハッシュ値Dを算出するためのハッシュ関数と呼ぶこともできる。また、ハッシュ関数Hashは前述の“キー・バリューの配置先を決定するためのハッシュ関数”と同一でもよい。
図11(B)は関数Nextを例示している。関数Nextの引数はK,Mである。ここで、Kは関数Selectの入力であり、Mは関数Selectの出力である。関数Nextは、仮想マシンIDが“M”である仮想マシンの次(D+1番目)の仮想マシンの仮想マシンID(これをPとする)を返す関数である。Pは文字、文字列、数値、数値列などである。また、D+1がDの取り得る最大値よりも大きい場合は、“0番目”の仮想マシンの仮想マシンIDを返す。
例えば、仮想マシン140,150に着目すれば、仮想マシン140(仮想マシンID:1)の次の仮想マシン150の仮想マシンID“2”を返す。また、仮想マシン140,150に着目したとき、仮想マシン150の次は仮想マシン140であり、仮想マシンID“1”を返すこともある。
一方、仮想マシン140,240に着目すれば、仮想マシン140(仮想マシンID:1)の次の仮想マシン240の仮想マシンID“3”を返す。また、仮想マシン140,240に着目したとき、仮想マシン240の次は仮想マシン140であり、仮想マシンID“1”を返すこともある。
次に、第2の実施の形態におけるKVSに格納されたセッション情報を更新するための手順を説明する。以下では、処理部144を例示して説明するが、処理部154および処理部244についても同様の手順である。
図12は、第2の実施の形態のセッション更新を示すフローチャートである。以下、図12に示す処理をステップ番号に沿って説明する。
(ステップS11)APサーバ142は、クライアント700のWebブラウザからのアクセスを受け付ける。例えば、Webアプリケーションに対して新規にログイン認証が行われた場合には、新たにセッションIDを発行してセッション情報を追加する。また、業務処理によりセッション情報に変更が生じた場合には、セッション情報を更新する。更に、Webアプリケーションからのログアウトが行われた場合には、該当するセッションIDおよびセッション情報を削除する。処理部144は、APサーバ142からセッションID(キー)を指定したキー・バリューの追加、更新、削除の何れかの操作を受け付ける。
(ステップS11)APサーバ142は、クライアント700のWebブラウザからのアクセスを受け付ける。例えば、Webアプリケーションに対して新規にログイン認証が行われた場合には、新たにセッションIDを発行してセッション情報を追加する。また、業務処理によりセッション情報に変更が生じた場合には、セッション情報を更新する。更に、Webアプリケーションからのログアウトが行われた場合には、該当するセッションIDおよびセッション情報を削除する。処理部144は、APサーバ142からセッションID(キー)を指定したキー・バリューの追加、更新、削除の何れかの操作を受け付ける。
(ステップS12)処理部144は、受け付けたセッションIDの保持担当が仮想マシン140(自身)であるか否かを判定する。自身が担当するセッションIDである場合、処理をステップS13に進める。自身が担当しないセッションIDである場合、処理をステップS16に進める。処理部144は当該判定を次のようにして行える。すなわち、処理部144はセッションID(キー)に応じたハッシュ値を算出する。ここで用いるハッシュ関数は、“キー・バリューの配置先を決定するためのハッシュ関数”である。そして、当該ハッシュ値が仮想マシン140の担当するハッシュ値範囲R1に含まれる場合、当該セッションIDは自身が担当するものである。一方、当該ハッシュ値がハッシュ値範囲R1に含まれない場合、当該セッションIDは自身が担当するものではない。
(ステップS13)処理部144は、KVS143aに格納されたキー・バリューを操作する。キー・バリューの追加であれば、指定されたセッションID(キー)と対応付けたセッション情報(バリュー)をKVS143aに追加する。キー・バリューの更新であれば、指定されたセッションID(キー)に対応するレコードをKVS143aから検索し、セッション情報(バリュー)の更新内容を当該レコードに反映させる。キー・バリューの削除であれば、指定されたセッションID(キー)に対応するレコードをKVS143aから検索し、当該レコードをKVS143aから削除する。
(ステップS14)処理部144は、キー・バリューに対する操作内容を管理テーブル143bに登録する。追加・更新した場合、操作の項目は“ADD”である。削除した場合、操作の項目は“DELETE”である。また、当該キーに対する操作内容が管理テーブル143bに既に存在する場合もある。この場合は、既存のレコードを上書きで更新すればよい。バックアップ時には、最新の操作内容が記録されていれば足りるからである。
(ステップS15)処理部144は、キー・バリューの複製先の仮想マシン150が保持するKVS153aにも、当該操作を反映させる。処理部154は、処理部144の指示に基づいて、KVS153aに対するキー・バリューの追加・更新・削除などを実行する。このとき、処理部144は、通信データ820を用いて処理部154にキー・バリューの操作内容を通知してもよい。処理部154は、キー・バリューに対する操作内容を管理テーブル153bに登録する。そして、処理を終了する。
(ステップS16)処理部144は、指定されたセッションIDを担当する仮想マシンにキー・バリューの操作を依頼する。このとき、処理部144は通信データ820を用いて操作内容を通知してもよい。例えば、仮想マシン150が当該依頼を受け付けたとする。この場合、処理部154がステップS13〜S15に相当する処理を実行することになる。具体的には、処理部154はKVS153aのキー・バリューを操作する。また、処理部154は操作内容を管理テーブル153bに登録する。更に、処理部154は、複製先(例えば、仮想マシン240)にも当該操作内容を反映させ、操作内容を(例えば、管理テーブル243bに)記録させる。そして、処理を終了する。
このようにして、キー・バリューに対する操作が行われる。具体的なキー・バリューを挙げて処理を例示すると次のようになる。
まず、例えば処理部144が(キー,バリュー)=(keyA,valueA)の追加を受け付けた場合を考える。キー“keyA”のハッシュ値は、ハッシュ値範囲R1に含まれる。よって、当該キー・バリューは仮想マシン140の担当である。このため、処理部144は(キー,バリュー)=(keyA,valueA)をKVS143aに追加する。処理部144は、セッションID“keyA”、操作“ADD”のレコードを管理テーブル143bに登録する。
まず、例えば処理部144が(キー,バリュー)=(keyA,valueA)の追加を受け付けた場合を考える。キー“keyA”のハッシュ値は、ハッシュ値範囲R1に含まれる。よって、当該キー・バリューは仮想マシン140の担当である。このため、処理部144は(キー,バリュー)=(keyA,valueA)をKVS143aに追加する。処理部144は、セッションID“keyA”、操作“ADD”のレコードを管理テーブル143bに登録する。
また、処理部144はハッシュ値範囲R1の複製先である仮想マシン150にも当該操作内容を通知する。当該通知を受けて、処理部154は(キー,バリュー)=(keyA,valueA)をKVS153aに追加する。処理部154は、セッションID“keyA”、操作“ADD”のレコードを管理テーブル153bに登録する。
次に、例えば処理部144が(キー,バリュー)=(keyC,valueC)の更新を受け付けた場合を考える。キー“keyC”のハッシュ値は、ハッシュ値範囲R2に含まれる。よって、当該キー・バリューは仮想マシン150の担当であり、仮想マシン140の担当ではない。このため、処理部144は、キー・バリューの操作を仮想マシン150に依頼する。このとき、処理部144は、当該キー“keyC”に関する操作内容を管理テーブル143bに記録しなくてよい。
依頼を受けた処理部154は、処理部144と同様にして、(キー,バリュー)=(keyC,valueC)の更新内容をKVS153aに反映させる。ただし、この場合は既存のキー・バリューを検索して更新することになる。また、当該更新内容を管理テーブル153bに反映させる。処理部154は、ハッシュ値範囲R2の複製先である仮想マシン240にも当該操作内容を通知する。当該通知を受けた処理部244は、同様にKVS243aおよび管理テーブル243bに操作内容を反映させる。このようにして、キー・バリューが更新されるとともに、当該キー・バリューが更新対象として記録される。
次に、第2の実施の形態のバックアップ処理の手順を説明する。以下に示す処理は、仮想マシン140,150,240で個別に管理されるタイミングで実行される。例えば、仮想マシン140,150,240は次の何れかのタイミングでバックアップ処理を開始することが考えられる。
(1)一定時間が経過するたびに行う。
(2)自身のKVSにおいてキー・バリューの更新が一定回数行われるたびに行う。
ただし、(1)、(2)以外のタイミングでバックアップ処理を開始してもよい。以下では、処理部144を例示して説明するが、処理部154および処理部244についても同様の手順である。
(2)自身のKVSにおいてキー・バリューの更新が一定回数行われるたびに行う。
ただし、(1)、(2)以外のタイミングでバックアップ処理を開始してもよい。以下では、処理部144を例示して説明するが、処理部154および処理部244についても同様の手順である。
図13は、第2の実施の形態のバックアップ処理を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。
(ステップS21)処理部144は、バックアップ対象のキーを取得する。具体的には、管理テーブル143bに登録されたセッションIDがバックアップ対象のキーである。
(ステップS21)処理部144は、バックアップ対象のキーを取得する。具体的には、管理テーブル143bに登録されたセッションIDがバックアップ対象のキーである。
(ステップS22)処理部144は、未処理のキーがあるか否かを判定する。未処理のキーがある場合、処理をステップS23に進める。未処理のキーがない場合、処理を終了する。未処理のキーとは、以降の処理(ステップS23〜S28)が未処理であるキーを指す。具体的には、管理テーブル143bに1以上のセッションID(キー)が含まれていれば、未処理のキーがあると判定する。管理テーブル143bにセッションID(キー)が含まれていなければ、未処理のキーがないと判定する。
(ステップS23)処理部144は、ステップS22で未処理であると判定されたキーのうちから1つを抽出して変数Kに代入する。例えば、未処理のキーが複数ある場合は、最小キーを抽出する、または、最大キーを抽出する、などが考えられる。
(ステップS24)処理部144は、M=Select(K)を算出する。
(ステップS25)処理部144は、算出されたMが仮想マシン140(自身)の仮想マシンID“1”に一致するか否かを判定する。一致する場合、処理をステップS26に進める。一致しない場合、処理をステップS27に進める。例えば、M=Select(keyA)=1であるとする。この場合、仮想マシンID“1”に一致する。また、例えば、M=Select(keyC)=3であるとする。この場合、仮想マシンID“1”に一致しない。
(ステップS25)処理部144は、算出されたMが仮想マシン140(自身)の仮想マシンID“1”に一致するか否かを判定する。一致する場合、処理をステップS26に進める。一致しない場合、処理をステップS27に進める。例えば、M=Select(keyA)=1であるとする。この場合、仮想マシンID“1”に一致する。また、例えば、M=Select(keyC)=3であるとする。この場合、仮想マシンID“1”に一致しない。
(ステップS26)処理部144は、管理テーブル143bを参照して、ステップS23で抽出されたキー(例えば、“keyA”)に対する操作(“ADD”または“DELETE”)を判断する。操作が“ADD”であれば、当該キーに対応するバリュー(例えば、“valueA”)をKVS143aから抽出する。また、当該キーを担当する仮想マシン140の仮想マシンID“1”および複製先の仮想マシン150の仮想マシンID“2”を記憶部143から取得する。処理部144は、抽出したキー・バリューと仮想マシンID“1”、“2”とを含む通信データ810をストレージサーバ400に送信する。なお、ストレージサーバ400は通信データ810を受信すると、通信データ810に含まれるキー・バリューや担当の仮想マシンIDの情報をHDDなどの記憶部に格納する。操作が“DELETE”であれば、当該キーに対応するバックアップのレコードを削除するようにストレージサーバ400に指示する。ストレージサーバ400は、当該指示に応じてバックアップテーブル410から該当のレコードを削除する。そして、処理をステップS28に進める。
(ステップS27)処理部144は、仮想マシンIDがM(例えば、“3”)の仮想マシン(例えば、仮想マシン240)は稼働中であるか否かを判定する。稼働中である場合、処理をステップS28に進める。稼働中でない場合、処理をステップS29に進める。例えば、処理部144は自身以外の仮想マシンが稼働中であるか否かを、ICMP(Internet Control Message Protocol)エコーなどを用いて確認できる。具体的には、当該エコーを相手の仮想マシンに送り、その応答があれば稼働中であると判定し、その応答がなければ稼働中でないと判定する。
(ステップS28)処理部144は、管理テーブル143bからステップS23で抽出したセッションID(キー)を削除する。そして、処理をステップS21に進める。
(ステップS29)処理部144は、P=Next(K,M)を算出する。処理部144は、算出したPをMに代入する。例えば、P=Next(keyC,3)=1である。すなわち、本ステップS29の直前でM=3であったとしても、本ステップS29の直後にはM=1に書き換わることになる。そして、処理をステップS25に進める。
(ステップS29)処理部144は、P=Next(K,M)を算出する。処理部144は、算出したPをMに代入する。例えば、P=Next(keyC,3)=1である。すなわち、本ステップS29の直前でM=3であったとしても、本ステップS29の直後にはM=1に書き換わることになる。そして、処理をステップS25に進める。
このようにして、仮想マシン140,150,240は、自身が各キー・バリューのバックアップ処理担当であるか否かを判定する。そして、1つのキー・バリューが仮想マシン140,150,240のうちの何れか1つによってストレージサーバ400に送信されるようにする。これにより、複数の仮想マシンが1つのキー・バリューを重複してストレージサーバ400に送信しないようにする。その結果、重複した通信を行う場合に比べて、処理コストや通信コストを抑えることができる。
ここで、ある仮想マシンが、自身のKVS上に保持されていないキー・バリューのバックアップを担当することも考えられる。しかし、この場合、当該仮想マシンはそのキー・バリューを保持する他の仮想マシンにストレージサーバ400への当該キー・バリューの転送を依頼することになる。すると、当該依頼を行うための余分な処理コストや通信コストが生じ得る。
そこで、仮想マシン140,150,240は、バックアップ処理の担当を、バックアップ対象のキー・バリューが配置された仮想マシンの中から選択する。例えば、(キー,バリュー)=(keyA,valueA)であれば、仮想マシン140,150の何れか一方を当該キー・バリューのバックアップ担当として選択する。これによって、例えば、仮想マシン240が自身で保持していない(キー,バリュー)=(keyA,valueA)のバックアップを担当する場合よりも、処理コストや通信コストを抑えることができる。
また、仮想マシン140,150,240が自律して上記の情報処理を実行するので、各キーにつきバックアップ処理担当の仮想マシンがどれであるかを指定するような装置を別途設けなくてもよい。
また、ハッシュ関数を用いることで、入力に対するハッシュ値を一様に分布させることができる。例えば、ハッシュ関数Hashが算出するハッシュ値はある数値範囲で連続した値の何れかとなる。したがって、当該ハッシュ値をキー・バリューの冗長度Nで除した剰余Dの出現確率も一様に分布することが期待される。このため、複数の仮想マシンに対して、データ格納の責任をほぼ均等に割り振れる。よって、同じデータが配置された複数の仮想マシンの中でデータ格納に伴う処理負荷をほぼ均等に分散することができる。前述したように、この場合には当該剰余Dもハッシュ値と呼ぶことができる。
更に、仮想マシン140,150,240は、自身がバックアップ処理担当ではない場合でも、担当の仮想マシンが稼働中であるか否かを判定することで、該当のキー・バリューのバックアップが行えるかを確認する。そして、バックアップ処理を担当できる仮想マシンが他にない場合には、自身がバックアップ処理を代替で実行する。このようにして、管理テーブル143bに登録されたセッションID(キー)について、バックアップの実行漏れを抑止できる。
なお、第2の実施の形態では以下の(1)〜(9)に示す例外も考え得る。何れの場合にも、バックアップ漏れなどは生じない。具体的には次の通りである。
(1)バックアップ処理中に新たなキー・バリューがKVSに追加されることがある。当該キー・バリューは今回のバックアップ処理の対象とならない可能性もあるが、次回のバックアップ処理の対象となり、バックアップ漏れは生じない。
(1)バックアップ処理中に新たなキー・バリューがKVSに追加されることがある。当該キー・バリューは今回のバックアップ処理の対象とならない可能性もあるが、次回のバックアップ処理の対象となり、バックアップ漏れは生じない。
(2)バックアップ処理中に対象のキー・バリューがKVSから削除されることがある。当該削除のタイミングによっては、バックアップ処理において当該キー・バリューの読み出しに失敗することになる。その場合は当該キー・バリューの送信は行われない(行わなくても支障はない)。また、その場合もバックアップ処理を継続するようにする。
(3)あるキーのバックアップ処理担当の仮想マシンが稼働中であると判定した後で、当該仮想マシンが故障することがある。その場合、今回のバックアップ処理ではバックアップされないことになる。そして、次回のバックアップ処理で別の仮想マシンが当該キーのバックアップを代替で実行することになる。
(4)あるキーのバックアップ処理担当の仮想マシンが稼働中でないと判定して、別の仮想マシンがバックアップを代替した後に、稼働中でないと判定された仮想マシンが復旧することがある。その場合は復旧した担当の仮想マシンにより当該キーについて次回以降のバックアップが行われることになる。このとき、今回バックアップ時点と次回バックアップ時点の時間間隔が短くなることもある。バックアップのタイミングは個々の仮想マシンで管理されるからである。ただし、多重にバックアップされるわけではない。
(5)復旧した仮想マシンが、復旧の直後にバックアップ処理を開始することがある。この場合、バックアップ対象のキー・バリューが当該仮想マシン内のKVSに存在しない。このため、当該仮想マシンはバックアップ処理を行えない。そこで、復旧した仮想マシンにはストレージサーバ400からキー・バリューをリストアする。また、当該リストアが完了するまで、他の仮想マシンからの稼働確認に対して、稼働中でない旨の応答を返す。これにより、復旧直後の仮想マシンで担当すべきキー・バリューのバックアップを他の仮想マシンに委譲できる。
(6)クラスタに仮想マシンが追加されることがある。その場合、クラスタ内で、ハッシュ値の担当範囲が変更され得る。このとき、追加された仮想マシンに既存の仮想マシンから追加された仮想マシンが担当するハッシュ値範囲のキー・バリューが転送されることになる。そこで、追加された仮想マシンは当該転送が完了するまで、他の仮想マシンからの稼働確認に対して稼働中でない旨の応答を返す。これにより、追加直後の仮想マシンで担当すべきキー・バリューのバックアップを他の仮想マシンに委譲できる。
(7)バックアップ処理中にクラスタの仮想マシンが増減することがある。すると、Select関数やNext関数の結果が変化し得る。仮想マシンの増減のタイミングによっては、あるキーについて次回のバックアップに先送りになったり、複数の仮想マシンで短時間に連続してバックアップが行われたりする。しかし、バックアップ漏れが生じるわけではない。
(8)バックアップ処理中に仮想マシンが追加されることがある。すると、追加された仮想マシンへキー・バリューの移動が行われる。移動元の仮想マシンからは当該キー・バリューは削除されることになる。すると、そのキーのバックアップ処理担当の仮想マシンにおいて、当該キーのバックアップを試みても当該キーが存在しないということになる。その場合はキーの読み出しに失敗して当該キーのバックアップは行われない。また、移動元の仮想マシンからキー・バリューが削除されるが、ストレージサーバ400のバックアップテーブル410にはバックアップデータを残すようにする。当該キー・バリューは追加された仮想マシンに移動されて保持されるからである。以後、当該キー・バリューのバックアップは追加された仮想マシンにより実行され得る。
(9)バックアップ処理中に仮想マシンが削除されることがある。削除された仮想マシンのKVSに存在していたキー・バリューは、他の仮想マシンに移動されることになる。この場合、当該キー・バリューは今回のバックアップ処理の対象とならないことがあるが、次回のバックアップ処理の対象となる。よって、バックアップ漏れが生じるわけではない。
また、第2の実施の形態では、2つの仮想マシンに冗長でキー・バリューを配置する場合を例示した。一方、3以上の仮想マシンに冗長でキー・バリューを配置する場合も同様にして、重複したバックアップを抑止できる。クラスタを形成する仮想マシンも2つでもよいし、4つ以上でもよい。
また、前述のように、第1の実施の形態の情報処理は、情報処理装置1,2にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、実行サーバ100,200,300にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体(例えば、光ディスク13、メモリ装置14およびメモリカード16など)に記録できる。
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体が提供される。また、プログラムを他のコンピュータの記憶装置に格納しておき、ネットワーク経由でプログラムを配布することもできる。コンピュータは、例えば、可搬記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、記憶装置に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよく、他のコンピュータからネットワークを介して受信したプログラムを直接実行してもよい。
また、上記の情報処理の少なくとも一部を、DSP、ASIC、PLDなどの電子回路で実現することもできる。
1,2 情報処理装置
1a,2a 記憶部
1b,2b 演算部
1c,1d,2c,2d 仮想マシン
3 記憶装置
1a,2a 記憶部
1b,2b 演算部
1c,1d,2c,2d 仮想マシン
3 記憶装置
Claims (7)
- 仮想マシンが動作可能な1または複数のコンピュータを備えておりキーと対応付けられたデータを前記キーに応じた複数の仮想マシンに配置するシステムで、前記データを記憶装置に保存するために用いられるプログラムであって、コンピュータに、
前記コンピュータで動作する第1の仮想マシンに配置された前記データに対応する前記キーと前記複数の仮想マシンで共通に用いられるハッシュ関数とから算出されるハッシュ値に基づいて前記記憶装置への前記データの格納を担当する第2の仮想マシンを特定し、
前記第2の仮想マシンが前記第1の仮想マシンと一致する場合は前記第1の仮想マシンを用いて前記記憶装置に前記データを格納し、また、前記第2の仮想マシンが前記第1の仮想マシンと一致しない場合は前記第1の仮想マシンが前記記憶装置に前記データを格納しないように制御する、処理を実行させるプログラム。 - 前記第2の仮想マシンが前記第1の仮想マシンと一致しない場合、前記第2の仮想マシンが稼働中であるか否かを判定し、前記第2の仮想マシンが稼働中であれば前記第1の仮想マシンが前記記憶装置に前記データを格納しないように制御し、また、前記第2の仮想マシンが稼働中でなければ前記第2の仮想マシンの代わりに前記記憶装置に前記データを格納可能な第3の仮想マシンを確認する、請求項1記載のプログラム。
- 前記第3の仮想マシンがあれば前記第1の仮想マシンが前記記憶装置に前記データを格納しないように制御し、また、前記第3の仮想マシンがなければ前記第1の仮想マシンを用いて前記記憶装置に前記データを格納するように制御する、請求項2記載のプログラム。
- 前記複数の仮想マシンの中から前記第2の仮想マシンを特定する、請求項1乃至3の何れか1項に記載のプログラム。
- 前記複数の仮想マシンの数に基づいて前記ハッシュ値を算出する、請求項1乃至4の何れか1項に記載のプログラム。
- 仮想マシンが動作可能な1または複数の情報処理装置を備えておりキーと対応付けられたデータを前記キーに応じた複数の仮想マシンに配置するシステムに用いられる情報処理装置であって、
自装置で動作する第1の仮想マシンに配置された前記データを前記キーに対応付けて記憶する記憶部と、
前記データに対応する前記キーと前記複数の仮想マシンで共通に用いられるハッシュ関数とから算出されるハッシュ値に基づいて記憶装置に対する前記データの格納を担当する第2の仮想マシンを特定し、前記第2の仮想マシンが前記第1の仮想マシンと一致する場合は前記第1の仮想マシンを用いて前記データを前記記憶装置に格納し、また、前記第2の仮想マシンが前記第1の仮想マシンと一致しない場合は前記第1の仮想マシンが前記記憶装置に前記データを格納しないように制御する演算部と、を有する情報処理装置。 - 仮想マシンが動作可能な1または複数の情報処理装置を備えておりキーと対応付けられたデータを前記キーに応じた複数の仮想マシンに配置する情報処理システムであって、
自装置で動作する第1の仮想マシンに配置された前記データに対応する前記キーと前記複数の仮想マシンで共通に用いられるハッシュ関数とから算出されるハッシュ値に基づいて記憶装置に対する前記データの格納を担当する第2の仮想マシンを特定し、前記第2の仮想マシンが前記第1の仮想マシンと一致する場合は前記第1の仮想マシンを用いて前記データを前記記憶装置に格納し、また、前記第2の仮想マシンが前記第1の仮想マシンと一致しない場合は前記第1の仮想マシンが前記記憶装置に前記データを格納しないように制御する情報処理装置、を有する情報処理システム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012186317A JP2014044553A (ja) | 2012-08-27 | 2012-08-27 | プログラム、情報処理装置および情報処理システム |
US13/921,528 US20140059312A1 (en) | 2012-08-27 | 2013-06-19 | Recording medium, computer, and information processing system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012186317A JP2014044553A (ja) | 2012-08-27 | 2012-08-27 | プログラム、情報処理装置および情報処理システム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2014044553A true JP2014044553A (ja) | 2014-03-13 |
Family
ID=50149096
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012186317A Pending JP2014044553A (ja) | 2012-08-27 | 2012-08-27 | プログラム、情報処理装置および情報処理システム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20140059312A1 (ja) |
JP (1) | JP2014044553A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016117322A1 (ja) * | 2015-01-22 | 2016-07-28 | 日本電気株式会社 | 処理要求装置、処理装置、データベースシステム、データベース更新方法およびプログラム記録媒体 |
JP2022034455A (ja) * | 2020-08-18 | 2022-03-03 | 株式会社日立製作所 | 計算機システムおよび管理方法 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9727357B2 (en) * | 2013-10-01 | 2017-08-08 | International Business Machines Corporation | Failover detection and treatment in checkpoint systems |
CN105868002B (zh) * | 2015-01-22 | 2020-02-21 | 阿里巴巴集团控股有限公司 | 一种用于在分布式计算中处理重发请求的方法与设备 |
US10075296B2 (en) * | 2015-07-02 | 2018-09-11 | Intel Corporation | Loading and virtualizing cryptographic keys |
CN106790324B (zh) * | 2015-11-20 | 2020-06-16 | 华为技术有限公司 | 内容分发方法、虚拟服务器管理方法、云平台和*** |
US20180089074A1 (en) * | 2016-09-28 | 2018-03-29 | Intel Corporation | Techniques to Manage Key-Value Storage at a Memory or Storage Device |
US10831734B2 (en) | 2018-05-07 | 2020-11-10 | Intel Corporation | Update-insert for key-value storage interface |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE602006003546D1 (de) * | 2006-07-07 | 2008-12-18 | Alcatel Lucent | Verteilter Hashing-Mechanismus für selbstorganisierende Netzwerke |
JP5238469B2 (ja) * | 2008-12-03 | 2013-07-17 | 株式会社日立製作所 | データベース処理方法、データベース処理プログラム、および、データベース指示装置 |
US8135748B2 (en) * | 2009-04-10 | 2012-03-13 | PHD Virtual Technologies | Virtual machine data replication |
US7716179B1 (en) * | 2009-10-29 | 2010-05-11 | Wowd, Inc. | DHT-based distributed file system for simultaneous use by millions of frequently disconnected, world-wide users |
CN102369688B (zh) * | 2011-04-07 | 2013-08-07 | 华为技术有限公司 | 资源动态调整方法和调度设备 |
US8832039B1 (en) * | 2011-06-30 | 2014-09-09 | Amazon Technologies, Inc. | Methods and apparatus for data restore and recovery from a remote data store |
US8850130B1 (en) * | 2011-08-10 | 2014-09-30 | Nutanix, Inc. | Metadata for managing I/O and storage for a virtualization |
US8966573B2 (en) * | 2012-07-20 | 2015-02-24 | Ca, Inc. | Self-generation of virtual machine security clusters |
-
2012
- 2012-08-27 JP JP2012186317A patent/JP2014044553A/ja active Pending
-
2013
- 2013-06-19 US US13/921,528 patent/US20140059312A1/en not_active Abandoned
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016117322A1 (ja) * | 2015-01-22 | 2016-07-28 | 日本電気株式会社 | 処理要求装置、処理装置、データベースシステム、データベース更新方法およびプログラム記録媒体 |
JPWO2016117322A1 (ja) * | 2015-01-22 | 2017-11-02 | 日本電気株式会社 | 処理要求装置、処理装置、データベースシステム、データベース更新方法およびプログラム |
JP2022034455A (ja) * | 2020-08-18 | 2022-03-03 | 株式会社日立製作所 | 計算機システムおよび管理方法 |
JP7125964B2 (ja) | 2020-08-18 | 2022-08-25 | 株式会社日立製作所 | 計算機システムおよび管理方法 |
Also Published As
Publication number | Publication date |
---|---|
US20140059312A1 (en) | 2014-02-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11966729B2 (en) | Virtualized file server | |
CN114341792B (zh) | 存储集群之间的数据分区切换 | |
US11314687B2 (en) | Container data mover for migrating data between distributed data storage systems integrated with application orchestrators | |
US10838829B2 (en) | Method and apparatus for loading data from a mirror server and a non-transitory computer readable storage medium | |
US9037822B1 (en) | Hierarchical volume tree | |
JP2014044553A (ja) | プログラム、情報処理装置および情報処理システム | |
US9772784B2 (en) | Method and system for maintaining consistency for I/O operations on metadata distributed amongst nodes in a ring structure | |
US8473462B1 (en) | Change tracking for shared disks | |
CN112099918A (zh) | 容器化环境中的集群的实时迁移 | |
US9286344B1 (en) | Method and system for maintaining consistency for I/O operations on metadata distributed amongst nodes in a ring structure | |
JP5461216B2 (ja) | 論理ボリューム管理の為の方法と装置 | |
US7966470B2 (en) | Apparatus and method for managing logical volume in distributed storage systems | |
JP2018133105A (ja) | データストリーム取り込み及び永続性ポリシ | |
US20080126706A1 (en) | Recoverable Cache Preload in Clustered Computer System | |
US20190188309A1 (en) | Tracking changes in mirrored databases | |
US20210081123A1 (en) | Cluster controller selection for shared storage clusters | |
US10719413B2 (en) | Unified RCT backup for different hypervisor configurations | |
US11237747B1 (en) | Arbitrary server metadata persistence for control plane static stability | |
US11068192B1 (en) | Utilizing mutiple snapshot sources for creating new copy of volume in a networked environment wherein additional snapshot sources are reserved with lower performance levels than a primary snapshot source | |
JP2019020816A (ja) | 分散コンピューティングシステムにおけるデータをリカバリする方法およびシステム | |
JP6201580B2 (ja) | ストレージ制御装置、ストレージ制御方法及びストレージ制御プログラム | |
Tate et al. | Implementing the IBM System Storage SAN Volume Controller with IBM Spectrum Virtualize V8. 2.1 | |
US12032457B2 (en) | Intelligent discovery of clustered assets | |
Syrewicze et al. | Providing High Availability for Hyper-V Virtual Machines | |
US20240028464A1 (en) | Copy discovery of clustered assets in node agnostic way |