JP2016170669A - 負荷分散機能配備方法、負荷分散機能配備装置および負荷分散機能配備プログラム - Google Patents

負荷分散機能配備方法、負荷分散機能配備装置および負荷分散機能配備プログラム Download PDF

Info

Publication number
JP2016170669A
JP2016170669A JP2015050652A JP2015050652A JP2016170669A JP 2016170669 A JP2016170669 A JP 2016170669A JP 2015050652 A JP2015050652 A JP 2015050652A JP 2015050652 A JP2015050652 A JP 2015050652A JP 2016170669 A JP2016170669 A JP 2016170669A
Authority
JP
Japan
Prior art keywords
virtual machine
driver
virtual
communication
load distribution
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
Application number
JP2015050652A
Other languages
English (en)
Inventor
鈴木 和宏
Kazuhiro Suzuki
和宏 鈴木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015050652A priority Critical patent/JP2016170669A/ja
Priority to US15/051,894 priority patent/US20160266938A1/en
Publication of JP2016170669A publication Critical patent/JP2016170669A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45562Creating, deleting, cloning virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

【課題】負荷分散を行う仮想マシンを動的に配備すること。【解決手段】演算部11bは、仮想マシン13,13aとの通信を制御する仮想マシン13bの配備指示を受けると、仮想マシン13が有しており仮想マシン13aとの通信に利用されるドライバD11に対応するドライバD31と、仮想マシン13,13bの通信に利用されるドライバD32とを仮想マシン13bに作成して仮想ブリッジB2により接続する。演算部11bは、ドライバD11が使用するバッファ領域A1をドライバD31のバッファ領域に変更した後、ドライバD11を無効にし、ドライバD31を有効にする。【選択図】図1

Description

本発明は負荷分散機能配備方法、負荷分散機能配備装置および負荷分散機能配備プログラムに関する。
情報処理の分野では、物理的なコンピュータ(物理マシンと呼ぶことがある)上で、1以上の仮想的なコンピュータ(仮想マシンと呼ぶことがある)を実行する仮想化技術が利用されている。それぞれの仮想マシンにおいて、オペレーティングシステム(OS:Operating System)が実行される。仮想マシンを実行するコンピュータでは、例えば、CPU(Central Processing Unit)やRAM(Random Access Memory)などのコンピュータのリソースを仮想マシンに割り当てるソフトウェア(ハイパーバイザと呼ぶことがある)が実行される。各仮想マシンのOSは、割り当てられたリソースの範囲内で、アプリケーションプログラムのスケジューリングなどの制御を行う。
近年では、ネットワーク経由で、コンピュータのリソースおよび仮想マシンの利用環境をユーザに提供するサービスも利用されている。このようなサービス利用形態として、例えばIaaS(Infrastructure as a Service)がある。
仮想マシンに対し、OSやアプリケーションなどのソフトウェアへのセキュリティ対策や機能改善用の更新パッチの適用を行うことがある。この場合、仮想マシンやソフトウェアの再起動などに伴って、サービス提供が一時的に停止され得る。このとき、同じ業務サービスを提供する複数の仮想マシンを負荷分散機能により予め冗長化することで、何れかの仮想マシンを一時的に停止しても、他の仮想マシンによるユーザへのサービス提供を継続できる。このような更新方法は、ローリングアップデートと呼ばれることがある。
また、1つの物理マシン上で複数の仮想マシンを実現する際に、管理用の仮想マシン(管理OSやホストOSと呼ぶことがある)が他の仮想マシン(ゲストOSと呼ぶことがある)によるデバイスアクセスを管理することがある。例えば、管理OSが複数のゲストOSに対する負荷分散を行う提案がある。この提案では、管理OSがデータを受信すると、各ゲストOSの識別情報を基にデータの分配先のゲストOSを決定し、分配先のゲストOSのフロントエンドドライバ部に対する管理OSのバックエンドドライバ部からデータを送る。
なお、1つの情報処理装置上の複数のLPAR(Logical Partition)により複数のOSを実行する場合に、代表LPARが外部ネットワークと他のLPARとの通信を中継する提案もある。
特開2010−66931号公報 特開2007−110240号公報
負荷分散を行う仮想マシンを予め配備していない場合でも、既存の仮想マシンに対するソフトウェア更新作業などに応じて、負荷分散を行う仮想マシンを新たに配備したいことがある。この場合、仮想マシンとクライアントとの間の通信を維持しながら、負荷分散を行う仮想マシンを動的に配備する方法が問題となる。
例えば、業務サービスを提供する仮想マシンのIP(Internet Protocol)アドレスを、負荷分散を行う仮想マシンに引き継いで当該仮想マシンを配備することが考えられる。この場合、配備前と同じIPアドレスを指定したクライアントからのアクセスを、負荷分散を行う仮想マシンにより受け付けて負荷分散を行える。しかし、負荷分散を行う仮想マシンがIPアドレスを単に引き継いだだけでは、業務サービスを提供する仮想マシンとクライアントとの通信途中のセッション情報が失われてしまい、負荷分散を開始する前の通信内容を維持することが難しい。
1つの側面では、本発明は、負荷分散を行う仮想マシンを動的に配備できる負荷分散機能配備方法、負荷分散機能配備装置および負荷分散機能配備プログラムを提供することを目的とする。
1つの態様では、負荷分散機能配備方法が提供される。この負荷分散機能配備方法では、コンピュータが、1以上の仮想マシンとの通信機能を有する第1の仮想マシンと第2の仮想マシンとの通信を制御する新規仮想マシンの配備指示を受けると、第1の仮想マシンが有しており第2の仮想マシンとの通信に利用される第1のドライバに対応する第2のドライバと、新規仮想マシンと第1の仮想マシンとの通信に利用される第3のドライバとを新規仮想マシンに作成して仮想ブリッジにより接続し、第1のドライバが使用するバッファ領域を第2のドライバのバッファ領域に変更した後、第1のドライバを無効にし、第2のドライバを有効にする。
また、1つの態様では、負荷分散機能配備装置が提供される。この負荷分散機能配備装置は、記憶部と演算部とを有する。記憶部は、仮想マシンが通信するデータを格納するバッファ領域を含む。演算部は、1以上の仮想マシンとの通信機能を有する第1の仮想マシンと第2の仮想マシンとの通信を制御する新規仮想マシンの配備指示を受けると、第1の仮想マシンが有しており第2の仮想マシンとの通信に利用される第1のドライバに対応する第2のドライバと、新規仮想マシンと第1の仮想マシンとの通信に利用される第3のドライバとを新規仮想マシンに作成して仮想ブリッジにより接続し、第1のドライバが使用するバッファ領域を第2のドライバのバッファ領域に変更した後、第1のドライバを無効にし、第2のドライバを有効にする。
また、1つの態様では、負荷分散機能配備プログラムが提供される。この負荷分散機能配備プログラムでは、コンピュータに、1以上の仮想マシンとの通信機能を有する第1の仮想マシンと第2の仮想マシンとの通信を制御する新規仮想マシンの配備指示を受けると、第1の仮想マシンが有しており第2の仮想マシンとの通信に利用される第1のドライバに対応する第2のドライバと、新規仮想マシンと第1の仮想マシンとの通信に利用される第3のドライバとを新規仮想マシンに作成して仮想ブリッジにより接続し、第1のドライバが使用するバッファ領域を第2のドライバのバッファ領域に変更した後、第1のドライバを無効にし、第2のドライバを有効にする、処理を実行させる。
1つの側面では、負荷分散を行う仮想マシンを動的に配備できる。
第1の実施の形態の負荷分散機能配備装置を示す図である。 第2の実施の形態の情報処理システムの例を示す図である。 業務サーバのハードウェア例を示す図である。 仮想マシンの例を示す図である。 仮想マシンの通信例を示す図である。 仮想マシンの接続例を示す図である。 ローリングアップデートの例を示す図である。 SLB配備の比較例を示す図である。 SLB配備後の仮想マシンの接続の比較例を示す図である。 SLB配備後の仮想マシンの接続例を示す図である。 業務サーバの機能例を示す図である。 VM管理テーブルの例を示す図である。 ネットワーク管理テーブルの例を示す図である。 デバイスマイグレーションの例を示すフローチャートである。 SLB配備の例を示すフローチャートである。 SLB配備部のテーブル更新例を示す図である。 SLB配備部のテーブル更新例(続き)を示す図である。 バッファ切換の例を示すフローチャートである。 バッファ切換部のテーブル更新例を示す図である。 マイグレーション後の負荷分散の例を示す図である。 SLB配備例(その1)を示す図である。 SLB配備例(その2)を示す図である。 SLB撤収の例を示すフローチャートである。 SLB撤収の例を示す図である。 仮想マシンの更新方法の例(その1)を示す図である。 仮想マシンの更新方法の例(その2)を示す図である。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の負荷分散機能配備装置を示す図である。負荷分散機能配備装置10は、複数の仮想マシンを実行可能である。負荷分散機能配備装置10は、ネットワーク20に接続されている。ネットワーク20には、クライアントコンピュータ(単にクライアントと呼ぶことがある)が接続される(図示を省略している)。クライアントは、負荷分散機能配備装置10上の仮想マシンが提供するサービスを利用する。
負荷分散機能配備装置10は、ハードウェア11、ハイパーバイザ12および仮想マシン13,13aを含む。ハードウェア11は、負荷分散機能配備装置10の物理的なリソースの集合である。ハードウェア11は、記憶部11aおよび演算部11bを含む。
記憶部11aは、RAMなどの揮発性記憶装置でもよい。演算部11bは、CPU、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。演算部11bはプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。ハードウェア11は、記憶部11aおよび演算部11b以外にも、HDD(Hard Disk Drive)などの不揮発性記憶装置やネットワーク20に接続されるNIC(Network Interface Card)(物理NIC)などを含み得る。
ハイパーバイザ12は、ハードウェア11のリソースを用いて仮想マシン13,13aを動作させるソフトウェアである。仮想マシン13,13aは、それぞれ独立にOSを実行する仮想的なコンピュータである。仮想マシン13は、ホストOSを実行する。ホストOSは、ハードウェア11のリソースの管理や仮想マシン13aなどの他の仮想マシンで動作するOS(ゲストOSと呼ばれることがある)の起動/停止などの管理を担う。仮想マシン13は、ハードウェア11を制御するデバイスドライバを有する。仮想マシン13a上のゲストOSによるハードウェア11へのアクセスはホストOSを介して行われる。すなわち、ホストOSは、ゲストOSによるハードウェア11へのアクセスを管理する。ホストOSを管理OSと呼ぶこともある。仮想マシン13自体をホストOSと呼ぶこともある。
仮想マシン13は、1以上の仮想マシンとの通信機能を有する。仮想マシン13は、ドライバD11,D12および仮想ブリッジB1を有する。ドライバD11は、仮想マシン13a上のドライバと連携して仮想マシン13aの仮想的なNIC(仮想NIC)を実現するドライバである。ドライバD11はバックエンドドライバと呼ばれることがある。ドライバD12は、物理NICを制御するデバイスドライバである。仮想ブリッジB1はドライバD11,D12を接続する。
仮想マシン13aは、ドライバD21を有する。ドライバD21は、ドライバD11と連携して仮想マシン13,13aのデータ転送を実現する。ドライバD21はフロントエンドドライバと呼ばれることがある。ドライバD11,D21は、バッファ領域A1を共有する。バッファ領域A1は、ハイパーバイザ12によって管理される記憶領域である。バッファ領域A1は、記憶部11a上に確保された記憶領域でもよい。上記のように、物理NICと仮想NICとを仮想ブリッジB1を介して接続する接続形態では、ネットワーク20上の他の物理マシンまたは他の仮想マシンと同じL2(Layer 2)ネットワーク上に仮想マシン13aが存在するよう動作させることができる。
負荷分散機能配備装置10は、仮想マシン13aにより実行されるサービスをネットワーク20に接続されたクライアントに提供する。負荷分散機能配備装置10では、ゲストOSを実行する複数の仮想マシン(仮想マシン13aを含む)に対して負荷分散を実行する仮想マシン13b(新規仮想マシン)を追加で配備することがある。例えば、仮想マシン13aにおけるゲストOSやサービスを提供するアプリケーションを更新する場合である。仮想マシン13aと同じサービスを提供する仮想マシンを、仮想マシン13,13a,13b以外に更にもう1つ配備して、サービス提供を冗長化することで、更新作業に伴うサービス提供の停止時間を減らせるからである。負荷分散機能配備装置10は、仮想マシン13bを次のように配備する。以下に示す演算部11bの処理は、ハイパーバイザ12の1つの機能として実装されてもよい。
演算部11bは、仮想マシン13と仮想マシン13aとの通信を制御する新規仮想マシンの配備指示を受け付ける。新規仮想マシンは、仮想マシン13aを含む複数の仮想マシンに対する負荷分散機能を担う。
すると、演算部11bは、仮想マシン13が有しており仮想マシン13aとの通信に利用されるドライバD11(第1のドライバ)に対応するドライバD31(第2のドライバ)を、仮想マシン13bに作成する。ドライバD31は、ドライバD21と接続するためのバックエンドドライバである。また、演算部11bは、仮想マシン13bと仮想マシン13との通信に利用されるドライバD32(第3のドライバ)を、仮想マシン13bに作成する。ドライバD32は、フロントエンドドライバである。演算部11bは、ドライバD31,D32を仮想ブリッジB2により接続する。なお、ドライバを「作成する」とは、例えば該当の仮想マシンの所定のコンフィグ情報にドライバの情報を追加して、当該コンフィグ情報に基づき仮想マシンで所定の制御サービスを実行させ、仮想マシン上で当該ドライバを動作させることを示す。
演算部11bは、ドライバD11が使用するバッファ領域A1を、ドライバD31のバッファ領域に変更する。具体的には、演算部11bは、ドライバD31のバッファ領域へのアクセス先アドレスを、バッファ領域A1のアドレスに設定する。すなわち、ドライバD31は、引き続きバッファ領域A1を利用する。このとき、例えば演算部11bは、ドライバD11によるアクセス先を、アクセス禁止領域を示すアドレスに変更し、ドライバD11によるデータ書き込みをトラップすることで、ドライバD11による書き込みデータもバッファ領域A1に書き込む。これにより、ドライバD11による通信途中のデータをバッファ領域A1に継続して書き込める。
その後、演算部11bは、ドライバD11を無効にし、ドライバD31を有効にする。ドライバD11を「無効にする」とは、例えば仮想マシン13の所定のコンフィグ情報からドライバD11の情報を削除して、仮想マシン13の制御サービスを動作させることを示す。ドライバD31を「有効にする」とは、ドライバD31を用いた通信を可能にすることを示す。具体的には、演算部11bは、ドライバD11を無効にし、ドライバD32に対するバックエンドドライバであるドライバD13を仮想マシン13に新たに動作させることで、ドライバD13,D32,D31を用いた通信を開始させる。その結果、ドライバD31を用いたネットワーク20と仮想マシン13aとの通信が可能になる。
この処理は、仮想マシン13(ホストOS)で動作していたドライバD11(バックエンドドライバ)を、負荷分散を実行する仮想マシン13bに移行させたことに相当する。すなわち、仮想マシン13aのフロントエンドドライバ(ドライバD21)に対応するバックエンドドライバ(ドライバD31)を仮想マシン13bで動作させる。
ドライバD31,D32は仮想ブリッジB2で接続されるので、ドライバD21に対応するIPアドレスとして、仮想マシン13bの配備前と同じIPアドレスを利用できる。仮想マシン13bの配下の仮想マシン(仮想マシン13aを含むゲストOSを実行する仮想マシン)に対する負荷分散機能を、仮想マシン13bにより実行させることができる。例えば、仮想マシン13aとサービス提供を冗長化するもう1つの仮想マシンを、ハイパーバイザ12上で動作させる。この場合、仮想マシン13bは、仮想ブリッジB2での中継を行う際に、所定の識別情報に基づいて、仮想マシン13aを含む複数の仮想マシンそれぞれを識別し、負荷分散を行える。
複数の仮想マシンそれぞれを識別する情報として、各仮想マシンが保持するMAC(Media Access Control)アドレスを利用してもよい。すなわち、仮想マシン13bは、パケットの振り分け先とする複数の仮想マシンを各仮想マシンのMACアドレスによって管理する。例えば、仮想マシン13bは、仮想マシン13bの配備前に通信していたクライアントのIPアドレスを送信元とするパケットについては、仮想マシン13bの配備後も、仮想マシン13aに振り分ける。仮想マシン13bは、仮想マシン13bの配備後に当該クライアントのIPアドレスを、仮想マシン13aから取得してもよい。バッファ領域A1には仮想マシン13aと当該クライアントとの間の通信のデータが格納されており、また、仮想マシン13aのIPアドレスも変更せずに済むので、仮想マシン13aでは仮想マシン13bの配備前のセッション情報を継続して利用できる。よって、仮想マシン13bの配備後も、仮想マシン13aとクライアントとの既存の通信内容を維持できる。
ここで、負荷分散を実行する仮想マシンを新たに配備する方法として、仮想マシン13aのIPアドレス(IPアドレスaとする)を、負荷分散を実行する仮想マシンにより引き継ぐことが考えられる。そして、仮想マシン13aに新たなIPアドレス(IPアドレスbとする)を付与する。また、仮想マシン13aと同じサービスを提供する仮想マシン(新たに配備する)にもIPアドレス(IPアドレスcとする)を付与する。
この場合、負荷分散を実行する仮想マシンは、仮想マシン13(ホストOS)におけるバックエンドドライバおよび仮想ブリッジを介して、配下の仮想マシン(仮想マシン13aを含む)と接続される。これにより、IPアドレスaを指定したクライアントからのパケットを、負荷分散用の仮想マシンにより受信し、当該パケットの送信先をIPアドレスb,cに振り分けることができる。
ところが、負荷分散を行う仮想マシンにより仮想マシン13aのIPアドレスを引き継ぐ方法では、クライアント側でIPアドレスaの利用を継続してサービスへアクセスできるものの、負荷分散機能の配備前に存在しているセッション情報を維持できない。クライアント側でのIPアドレスaを指定したアクセス先が、負荷分散を行う仮想マシンに変更され、仮想マシン13aのIPアドレスがIPアドレスbに変更されるからである。また、仮想マシン13aでは、IPアドレスの変更に伴い、変更後の設定をロードするためにネットワークサービスの再起動が生じ得る(それ以前にネットワークサービスで保持している情報はリセットされる)。この場合、仮想マシン13aとクライアントとは、通信セッションを再度構築しなおすことになる。このため、ユーザが行っていた業務内容が破棄されてしまい、ユーザに作業のやり直しを強いるおそれがある。また、ネットワーク20に含まれるスイッチにおいて、MACアドレス学習テーブルなどの再学習が発生し、クライアントと仮想マシン13aとの間で通信できない期間が発生するおそれもある。したがって、負荷分散を行う仮想マシンにより仮想マシン13aのIPアドレスを引き継ぐ方法では、動的配備の方法としては不十分である。
一方、負荷分散機能配備装置10によれば、仮想マシン13bを配備した後でも、仮想マシン13aはIPアドレスaを継続して利用する。仮想マシン13bは、仮想マシン13bの配備前から仮想マシン13aと通信していたクライアントのIPアドレスを送信元とするパケットを仮想マシン13aに振り分ける。
特に、ドライバD31が継続してバッファ領域A1にアクセスする。また、ドライバD11を無効にするまでは、ドライバD11のデータ書き込みをドライバD31が利用するバッファ領域A1に対して行うようにする。このため、通信途中のパケットの喪失を抑えられる。よって、仮想マシン13bの配備後も、仮想マシン13aとクライアントとの既存の通信内容を適切に維持でき、ユーザに提供するサービスへの影響を抑えられる。更に、仮想マシン13aではアドレス変更をしないので、ネットワーク20に含まれるスイッチに、仮想マシン13aについてMACアドレス学習テーブルなどの再学習を行わせずに済む。
また、例えば、ローリングアップデートを実行するために、負荷分散機能を担う仮想マシンを事前に配備しておくことも考えられる。ローリングアップデートは、仮想マシンを冗長化させ、一方の仮想マシンのサービス提供を他方の仮想マシンにより代替させることで、ソフトウェア更新時にサービス提供を中断しないようにする方法である。しかし、負荷分散機能配備装置10のように、例えばあるユーザへのあるサービスの提供が1つの仮想マシン13aを用いて行われる場合、負荷分散機能は不要であり、負荷分散機能を事前に配備しておくのは無駄である。
これに対し、負荷分散機能配備装置10によれば、負荷分散を行う仮想マシン13bを動的に配備できる。このため、負荷分散機能を利用しないときにまで負荷分散用の仮想マシン13bを配備しておかずに済み、リソースが無駄に利用されることを防げる。
ところで、近年では、ネットワーク経由で、コンピュータのリソースをユーザに貸し出すIaaSなどのサービスが利用されている。例えば、IaaSでは、OSやアプリケーションなどのソフトウェアを含む仮想マシンおよび仮想マシンを実行するためのリソースをユーザに提供する。IaaS事業者には、ユーザによるサービス利用に影響しないようシステムを運用することが求められる。ユーザによるサービス利用に影響する可能性のある作業として、OSのセキュリティパッチやアプリケーションの更新パッチなどの適用が挙げられる。プログラムの再ロードに伴い、OSやアプリケーションの再起動が発生し得るからである。
負荷分散機能配備装置10によれば、クライアントと仮想マシン13aとの通信を維持しながら、仮想マシン13bを動的に配備し、ローリングアップデートを実行可能となる。このため、負荷分散機能配備装置10は、IaaS事業者などによる仮想マシンのソフトウェア更新の際にも有用である。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムの例を示す図である。第2の実施の形態の情報処理システムは、業務サーバ100、管理サーバ200およびクライアント300を有する。業務サーバ100および管理サーバ200は、ネットワーク30に接続されている。ネットワーク30は、データセンタ内に敷設されたLAN(Local Area Network)である。データセンタは、IaaS事業者によって運用される。クライアント300は、ネットワーク40に接続されている。ネットワーク40は、例えばインターネットやWAN(Wide Area Network)などである。
業務サーバ100は、IaaSにおいてユーザに提供するハードウェア資源やソフトウェア資源を備えたサーバコンピュータである。業務サーバ100は、複数の仮想マシンを実行可能である。仮想マシンは、ユーザの業務を支援する各種のサービスを提供する。ユーザは、クライアント300を操作して、業務サーバ100が提供するサービスを利用できる。業務サーバ100は、第1の実施の形態の負荷分散機能配備装置10の一例である。
管理サーバ200は、業務サーバ100の運用管理を行うサーバコンピュータである。例えば、システムの管理者は、管理サーバ200を操作して、業務サーバ100の起動/停止、新たな仮想マシンの起動(配備)/停止などを業務サーバ100に指示する。
クライアント300は、ユーザが利用するクライアントコンピュータである。例えば、クライアント300は、Webブラウザとして機能する。業務サーバ100は、例えばWebサーバとして機能し、ユーザの業務を支援するWebアプリケーションのGUI(Graphical User Interface)をクライアント300のWebブラウザに提供し得る。ユーザは、クライアント300のWebブラウザ上のGUIを操作することで、業務サーバ100が提供するWebアプリケーションの機能を利用できる。
図3は、業務サーバのハードウェア例を示す図である。業務サーバ100は、プロセッサ101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。各ユニットは業務サーバ100のバスに接続されている。管理サーバ200やクライアント300も業務サーバ100と同様のユニットを用いて実現できる。
プロセッサ101は、業務サーバ100の情報処理を制御する。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、DSP、ASICまたはFPGAなどである。プロセッサ101は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
RAM102は、業務サーバ100の主記憶装置である。RAM102は、プロセッサ101に実行させるOSのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101による処理に用いる各種データを記憶する。
HDD103は、業務サーバ100の補助記憶装置である。HDD103は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103は、OSのプログラム、アプリケーションプログラム、および各種データを記憶する。業務サーバ100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
画像信号処理部104は、プロセッサ101からの命令に従って、業務サーバ100に接続されたディスプレイ21に画像を出力する。ディスプレイ21としては、CRT(Cathode Ray Tube)ディスプレイや液晶ディスプレイなどを用いることができる。
入力信号処理部105は、業務サーバ100に接続された入力デバイス22から入力信号を取得し、プロセッサ101に出力する。入力デバイス22としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
媒体リーダ106は、記録媒体23に記録されたプログラムやデータを読み取る装置である。記録媒体23として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)を使用できる。また、記録媒体23として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ106は、例えば、プロセッサ101からの命令に従って、記録媒体23から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
通信インタフェース107は、ネットワーク30を介して他の装置と通信を行う。通信インタフェース107は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
図4は、仮想マシンの例を示す図である。業務サーバ100は、ハードウェア110、ハイパーバイザ120および仮想マシン130,140を含む。ハードウェア110は、プロセッサ101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を含む物理的なリソースの集合である。
ハイパーバイザ120は、ハードウェア110のリソースを用いて、仮想マシンを動作させる制御ソフトウェアである。ハイパーバイザ120は、仮想マシンモニタ(VMM:Virtual Machine Monitor)と呼ばれることもある。ハイパーバイザ120は、プロセッサ101の処理能力やRAM102の記憶領域を、演算のリソースとして、仮想マシン130,140に割り当てる。ハイパーバイザ120は、仮想マシン130,140によるハードウェア110へのアクセスを調停する。
ハイパーバイザ120は、仮想マシン130,140に割り当てられるリソースとは別個に確保されたプロセッサ101およびRAM102のリソースを用いて実行される。あるいは、業務サーバ100は、ハイパーバイザ120を動作させるために、プロセッサ101およびRAM102以外のプロセッサおよびRAMを有してもよい。
ハイパーバイザ120が仮想マシン130,140に割り当てるプロセッサ101の処理能力の単位を仮想プロセッサ(あるいは、仮想CPU)と呼ぶことがある。例えば、プロセッサ101がマルチコアである場合、1コアを1つの仮想プロセッサとして割り当ててもよい。また、例えばプロセッサ101の利用可能時間の1周期を時分割した場合の1つのタイムスライスを1つの仮想プロセッサとして割り当ててもよい。また、ハイパーバイザ120が仮想マシン130,140に割り当てるRAM102の記憶領域を単にメモリと称する。メモリの割当量は、GB(Giga Bytes)など記憶領域のサイズで表せる。
仮想マシン130,140は、業務サーバ100上で動作する仮想マシンである。仮想マシン130は、ホストOSを実行する仮想マシンである。ホストOSは、ゲストOSを実行する他の仮想マシン(例えば、仮想マシン140)に対するハードウェア110のリソースの割り当てや他の仮想マシンによるデバイスアクセスを管理する。仮想マシン130は、第1の実施の形態の仮想マシン13の一例である。
仮想マシン140は、ゲストOSを実行する仮想マシンである。仮想マシン140は、ゲストOS上でユーザの業務を支援するアプリケーションを更に実行し、ユーザに対して業務サービスを提供する。なお、仮想マシンをVM(Virtual Machine)と略記することがある。仮想マシン140は、第1の実施の形態の仮想マシン13aの一例である。
業務サーバ100では、複数のゲストOSがそれぞれ物理的なI/Oデバイスを有しているのではなく、各ゲストOSの入出力をホストOSに依頼し、ホストOSが代行することで各ゲストOSの入出力制御を仮想化する。例えば、ホストOSからゲストOSへデータを転送する際、ホストOSのバックエンドドライバが、ハイパーバイザ120にデータを渡す。そして、ハイパーバイザ120がゲストOSのフロントエンドドライバが用いる所定のメモリ領域にデータを書き込むことで、仮想的にデータ転送を実現する。このような仮想マシンの実行環境として、例えばXen(登録商標)が挙げられる。仮想マシン130は、ドメイン0と呼ばれることもある。仮想マシン140は、ドメインUと呼ばれることもある。
図5は、仮想マシンの通信例を示す図である。仮想マシン130は、通信インタフェース107(物理NIC)を直接制御する。仮想マシン130は、ゲストOSを実行する他の仮想マシンによる、通信インタフェース107を用いた通信を制御する。例えば、仮想マシン140が仮想マシン130を介して通信を行う場合を考える。仮想マシン140は、準仮想化(PV:Para-Virtualization)ドライバを用いる。PVドライバとは、仮想マシン140の処理を高速化するために、仮想マシン140のカーネル内で動作するドライバであり、ハイパーバイザ120の機能を直接呼び出す機能をもつ。例えば、仮想マシン140は、PVドライバを利用して、HDD103や通信インタフェース107へのアクセスを行う。
PVドライバでは、デバイスチャネル(イベントチャネルと呼ぶこともある)およびバッファを介してHDD103へのディスクI/O(Input / Output)やネットワークI/Oを仮想マシン130に転送する。
より具体的には、ホストOSを実行する仮想マシン130のバックエンドドライバD1と、ゲストOSを実行する仮想マシン140のフロントエンドドライバD2とが協調して動作する。バックエンドドライバD1とフロントエンドドライバD2とは1対1に対応する。
バッファ121は、ハイパーバイザ120により管理されるバッファ領域である(バッファ領域を単にバッファと称する)。バッファ121は、バックエンドドライバD1およびフロントエンドドライバD2により共有されるリングバッファである。バッファ121は、例えばRAM102上の記憶領域として確保される。バックエンドドライバD1およびフロントエンドドライバD2は、バッファ121を介してデータを転送する。より具体的には、バックエンドドライバD1およびフロントエンドドライバD2の何れか一方のドライバが共有メモリのアドレスの値などを書き込んで、ハイパーバイザコールを発行すると、他方のドライバは、書き込まれた値を読み出せる。
図6は、仮想マシンの接続例を示す図である。図6では、ハイパーバイザ120上で仮想マシン130,140が動作する場合を例示している。図5で例示したように、仮想マシン130,140は、バッファ121を介してデータの転送を行う。
仮想マシン130は、デバイスドライバ131、バックエンドドライバ132およびブリッジ135を有する。デバイスドライバ131は、通信インタフェース107を制御するソフトウェアである。通信インタフェース107は、仮想マシン130において“eth0”という識別情報に対応付けられている。
バックエンドドライバ132は、仮想マシン140との通信に用いられるソフトウェアである。バックエンドドライバ132は、“vif1.0”という識別情報に対応付けられている。
ブリッジ135は、デバイスドライバ131およびバックエンドドライバ132を接続する仮想的なブリッジ(仮想ブリッジ)である。ブリッジ135は、“br0”という識別情報に対応付けられている。
仮想マシン140は、フロントエンドドライバ141を有する。フロントエンドドライバ141は、仮想マシン140の仮想的な通信インタフェースとして機能するソフトウェアである。フロントエンドドライバ141は、仮想マシン140において“eth0”という識別情報に対応付けられている。フロントエンドドライバ141のIPアドレスは、“IP−A”である。
バックエンドドライバ132およびフロントエンドドライバ141は、図5で例示したようにバッファ121を共有している。バックエンドドライバ132およびフロントエンドドライバ141は、バッファ121を介してデータの転送を行う。バックエンドドライバ132およびフロントエンドドライバ141は、互いに通信するためのチャネルを有しているので、両者は「接続されている」といえる。ここで、バックエンドドライバとフロントエンドドライバとの接続関係を「ネット」と称することがある。ハイパーバイザ120は、“vif1.0”に対応するバックエンドドライバ132とフロントエンドドライバ141との接続を“Net1”という識別情報(Net IDと称することがある)に対応付けて管理する。この場合、バックエンドドライバ132およびフロントエンドドライバ141は、“Net1”で識別されるネットに属するともいえる。
ところで、IaaS事業者は、OSやアプリケーションなどのソフトウェアを常に最新版にしてユーザに提供することが求められる。特に、セキュリティホールやバグなどの対策がなされた更新プログラムがソフトウェアのベンダにより配布されたのであれば、当該更新プログラムにより迅速にソフトウェアを更新することが好ましい。このため、業務サーバ100では、仮想マシン140で実行されるソフトウェアの更新作業が発生する。その際、仮想マシン140によりユーザに提供されるサービスをできる限り停止しないよう運用することが求められる。そのための手法として、例えばローリングアップデートが考えられる。
図7は、ローリングアップデートの例を示す図である。例えば、負荷分散を行う仮想マシンM1を業務サーバ100上に予め配備しておき、ソフトウェアの更新作業時にローリングアップデートを行うことが考えられる。仮想マシンM1は、ハイパーバイザ120上で動作する仮想マシンである。仮想マシンM1は、SLB(Server Load Balancer)50を有する。SLB50は、負荷分散機能を実現するソフトウェアである。
仮想マシン140は、サービス140aを有する。サービス140aは、クライアント300に所定のサービスを提供するソフトウェアである。仮想マシン150は、ハイパーバイザ120上で動作する仮想マシンである。仮想マシン150は、サービス150aを有する。サービス150aは、サービス140aと同等の機能を提供するソフトウェアである。図7の例において、仮想マシンM1のIPアドレスは、“IP−A”である。仮想マシン140のIPアドレスは、“IP−Ax”である。仮想マシン150のIPアドレスは、“IP−Ay”である。
クライアント300は、仮想マシン140のサービスを利用する場合、宛先IPアドレス“IP−A”を指定したリクエストを送信する。SLB50は、当該リクエストを受信すると、仮想マシン140,150の負荷に応じて、あるいは、ラウンドロビンなどの所定の方法により、仮想マシン140,150のうちリクエストの振り分け先を決定する。例えば、SLB50は、仮想マシン140を振り分け先とする場合、宛先IPアドレスを“IP−Ax”に変えて仮想マシン140に転送する。SLB50は、送信元IPアドレスが“IP−Ax”であるレスポンスを仮想マシン140から受信すると、送信元IPアドレスを“IP−A”に変えて仮想マシン140に転送する。
サービスを提供する仮想マシンが、仮想マシン140,150のように冗長化されている場合、何れかの仮想マシンのソフトウェアの更新作業を行う際にローリングアップデートを用いることができる。具体的には、何れか一方ずつ順番に更新作業を行うことで、ユーザへのサービス提供を停止させずに、ソフトウェアを更新できる。
一方、図4で例示したように、仮想マシンM1,150が存在していない場合、仮想マシンM1,150を新たに配備して、ローリングアップデートを行うことが考えられる。
図8は、SLB配備の比較例を示す図である。仮想マシンM1の配備前の段階において、仮想マシン140のIPアドレスは“IP−A”である。仮想マシンM1,150を新たに配備するとき、ハイパーバイザ120は、仮想マシンM1,150に新たにIPアドレスを設定する。
このとき、クライアント300がサービス140aへのアクセスに用いているIPアドレスを仮想マシンM1に設定することで、仮想マシンM1を介した負荷分散構成へ移行させる。当該IPアドレスを利用できなくなると、クライアント300からのリクエストがサービス140a,150aへ到達できなくなるからである。また、ハイパーバイザ120は、仮想マシン140のIPアドレスを“IP−Ax”に設定する。ハイパーバイザ120は、仮想マシン150のIPアドレスを“IP−Ay”に設定する。
すると、図7と同等の負荷分散構成となり、ローリングアップデートを実行できる。なお、この場合、サービスを提供する仮想マシンは1つでよいので、仮想マシン150に更新済みのソフトウェアがインストールされた状態で仮想マシン150を起動し、その後、仮想マシン140を撤収する方法でもよい。
図9は、SLB配備後の仮想マシンの接続の比較例を示す図である。図9では、図8のように仮想マシンM1を配備したときの仮想マシン130,140,M1の接続例を示している。なお、仮想マシン150については図示を省略している。
仮想マシン130は、デバイスドライバ131、バックエンドドライバ132,132a,132bおよびブリッジ135,136を有する。バックエンドドライバ132a,132bは、仮想マシンM1との通信に用いられるソフトウェアである。バックエンドドライバ132aは、“vif2.0”という識別情報に対応付けられている。バックエンドドライバ132bは、“vif3.0”という識別情報に対応付けられている。
この場合、ブリッジ135は、デバイスドライバ131およびバックエンドドライバ132aを接続する。ブリッジ136は、バックエンドドライバ132,132bを接続する。ブリッジ136は、“br1”という識別情報に対応付けられている。
仮想マシンM1は、フロントエンドドライバM1a,M1bを有する。フロントエンドドライバM1a,M1bは、仮想マシンM1の仮想的なインタフェースとして機能するソフトウェアである。フロントエンドドライバM1aのIPアドレスは“IP−A”である(図8のIPアドレス“IP−A”に相当)。フロントエンドドライバM1aは、バックエンドドライバ132aと接続される。フロントエンドドライバM1bは、バックエンドドライバ132bと接続される。IPアドレス“IP−A”は仮想マシンM1で使用するので、仮想マシン140のフロントエンドドライバ141のIPアドレスは“IP−Ax”に変更される(図8のIPアドレス“IP−Ax”に相当)。
なお、図9の例において、仮想マシン150も仮想マシン140と同様に、仮想マシンM1を介して仮想マシン130と接続されることになる。すなわち、仮想マシン130において、仮想マシンM1,150それぞれと接続するバックエンドドライバを計2つ追加し、これらを接続するブリッジを1つ追加する。仮想マシン130のバックエンドドライバと接続するフロントエンドドライバを仮想マシンM1にもう1つ追加する。
図8のように、仮想マシンM1により仮想マシン140のIPアドレスを単に引き継いで配備するとき、各仮想マシンはこのような接続となる。しかし、図8,9のようにして新たに仮想マシンM1,150を配備し、仮想マシン140のIPアドレスの設定変更を行うと、負荷分散構成へ切り替える前におけるクライアント300と仮想マシン140との通信途中のセッション情報を利用できなくなる。このため、負荷分散構成への切り替えに伴って、クライアント300と仮想マシン140とは新たにセッションを確立しなおすことになる。この場合、ユーザに対して、それまで行っていた作業のやり直しを強いるおそれがあり、IaaSにおけるサービス品質の観点からは好ましくない。
更に、仮想マシン140でアドレス変更を行うと、ネットワーク30,40に含まれるスイッチにおいて、MACアドレス学習テーブルなどの再学習が発生し得る。すると、クライアント300と仮想マシン140との間で比較的長く(クライアント300と仮想マシン140との間に確立されたセッションがタイムアウトになるほど長く)通信できない期間が発生するおそれもある。
なお、仮想マシンM1を配備する代わりに、ネットワーク30またはネットワーク40に接続されたDNS(Domain Name System)サーバ(図2では図示を省略している)によりDNSラウンドロビンを実行することで、負荷分散を行うことも考えられる。しかし、DNSラウンドロビンでは、クライアント300がIPアドレスを直接指定してアクセスする場合に負荷分散を行えない。また、仮想マシン140,150に均一に負荷が分散されてしまうため、一方の仮想マシンにのみトラフィックを振り分けるなど、更新作業時の流量制御を行うことが難しい。
そこで、業務サーバ100は、SLB50を実行する仮想マシンを以下のように配備し、仮想マシン140でのアドレス変更を伴わないようにする。まず、各仮想マシンの接続例を説明する。
図10は、SLB配備後の仮想マシンの接続例を示す図である。第2の実施の形態では、ハイパーバイザ120は、仮想マシンM1の代わりに仮想マシン160を配備する。仮想マシン160は、仮想マシン130,140との接続関係が、仮想マシンM1と異なる。仮想マシン160は、仮想マシン140,150に対する負荷分散を行う。図10では、仮想マシン150の図示を省略している。仮想マシン150も含めた接続例は後述される。
仮想マシン130は、デバイスドライバ131、バックエンドドライバ133およびブリッジ135を有する。バックエンドドライバ133は、仮想マシン160との通信に用いられるソフトウェアである。バックエンドドライバ133は、“vif2.0”という識別情報に対応付けられている。図10では、点線で囲ったブロックでバックエンドドライバ132を示している。バックエンドドライバ132の機能(例えば、仮想マシン140との通信機能)は、仮想マシン160に移転(マイグレーション)されるためである。バックエンドドライバ132は仮想マシン130上では無効になる。この場合、ブリッジ135は、デバイスドライバ131とバックエンドドライバ133とを接続する。
仮想マシン160は、フロントエンドドライバ161、バックエンドドライバ162およびブリッジ165を有する。フロントエンドドライバ161は、仮想マシン160の仮想的な通信インタフェースとして機能するソフトウェアである。フロントエンドドライバ161は、仮想マシン160において“eth0”という識別情報に対応付けられている。なお、バックエンドドライバ133およびフロントエンドドライバ161に対して、バッファ122が設けられる。ハイパーバイザ120は、“vif2.0”に対応するバックエンドドライバ133とフロントエンドドライバ161との接続を“Net2”というNet IDに対応付けて管理する。
バックエンドドライバ162は、仮想マシン140との通信に用いられるソフトウェアである。バックエンドドライバ162は、バックエンドドライバ132に対応するドライバである。バックエンドドライバ162は、“vif1.0”という識別情報に対応付けられている。
この場合、仮想マシン140のフロントエンドドライバ141は、バックエンドドライバ162と接続される。フロントエンドドライバ141およびバックエンドドライバ162との通信では、バッファ121が引き続き利用される。ハイパーバイザ120は、“vif1.0”に対応するバックエンドドライバ162とフロントエンドドライバ161との接続を“Net1”というNet IDに対応付けて管理する。
例えば、ハイパーバイザ120は、各仮想マシンにおけるフロントエンドドライバ、バックエンドドライおよびブリッジの情報を、所定のコンフィグ情報など(例えば、Xenであればxend−configファイルやドメイン定義ファイルなど)に対して追加/削除する。そして、ハイパーバイザ120は、当該コンフィグ情報に基づいて所定の制御サービス(例えば、xendなど)を仮想マシンにより動作させることで、各仮想マシンに対して各種ドライバおよびブリッジを追加/削除し得る。
図11は、業務サーバの機能例を示す図である。ハイパーバイザ120は、デバイス移転制御部123、SLB配備部124、バッファ作成部125、バッファ切換部126およびアクセス制御部127を有する。デバイス移転制御部123、SLB配備部124、バッファ作成部125、バッファ切換部126およびアクセス制御部127は、RAM102に記憶されたプログラムをプロセッサ101が実行することで実現される。
デバイス移転制御部123は、新規にSLB用の仮想マシンを配備する際に、ある仮想マシンから別の仮想マシンへのバックエンドドライバのマイグレーションを制御する。例えば、図10で説明したように、デバイス移転制御部123は、仮想マシン130でバックエンドドライバ132を動作させる代わりに、仮想マシン160でバックエンドドライバ162を動作させる。
SLB配備部124は、負荷分散機能を有する仮想マシン160の配備を行う。SLB配備部124は、仮想マシン160におけるフロントエンドドライバ161、バックエンドドライバ162およびブリッジ165の接続の設定を行う。
バッファ作成部125は、バックエンドドライバとフロントエンドドライバとで共有されるバッファをRAM102上に確保する(バッファを作成する)。バッファ作成部125は、バックエンドドライバおよびフロントエンドドライバの組ごとに、バッファを設ける。
バッファ切換部126は、バックエンドドライバによるデータの書き込み先アドレスの切換を行う。例えば、バッファ切換部126は、バックエンドドライバ132のデータの書き込み先を、RAM102上の禁止領域のアドレスに切り換える。これにより、バックエンドドライバ132による書き込みをトラップして、当該書き込み先の別のアドレス(何れかのバッファのアドレス)への変更を行えるようにする。
アクセス制御部127は、各ドライバからのバッファに対するアクセスを制御する。アクセス制御部127は、各バッファに対する各ドライバからの書き込み/読み出しのアクセスの禁止/許可を制御する。
仮想マシン130は、マネージャ137を有する。マネージャ137は、仮想マシン130に割り当てられたメモリ上のプログラムを仮想マシン130に割り当てられた仮想プロセッサが実行することで実現される。
マネージャ137は、業務サーバ100への動作指示を発行する管理用のソフトウェアである。マネージャ137は、仮想マシン(SLBを含む)の新規配備の指示や、仮想マシンの撤収の指示などをハイパーバイザ120に通知する。マネージャ137は、仮想マシン160上のSLBに対する負荷分散の設定変更を行うこともできる。なお、管理サーバ200がマネージャ137の機能を発揮してもよい。
記憶部170は、ハイパーバイザ120の処理に利用される情報を記憶する。具体的には、記憶部170は、各仮想マシンのバックエンドドライバおよびフロントエンドドライバを管理するためのVM管理テーブルを記憶する。また、記憶部170は、バックエンドドライバとフロントエンドドライバとが共有するバッファを管理するためのネットワーク管理テーブルを記憶する。
図12は、VM管理テーブルの例を示す図である。VM管理テーブル171は、記憶部170に記憶される。VM管理テーブル171は、VM ID、CPU、メモリ、Net IDおよびドライバ種別の項目を含む。
VM IDの項目には、仮想マシンのIDが登録される。CPUの項目には、仮想マシンに割り当てられた仮想プロセッサの個数が登録される。メモリの項目には、仮想マシンに割り当てられたメモリのサイズが登録される。Net IDの項目には、Net IDが登録される。Net IDの項目は、設定なし(ハイフン“−”)であることもある。ドライバ種別の項目には、ドライバ種別が登録される。ドライバ種別は、バックエンドドライバまたはフロントエンドドライバを示す情報である。ただし、ドライバ種別が設定なし(“None”)であることもある。
ここで、VM管理テーブル171では、図6で例示した、仮想マシン130および仮想マシン140の各ドライバの情報が登録された例を示している。例えば、VM管理テーブル171には、VM IDが“0”、CPUが“2”、メモリが“4GB”、Net IDが“Net1”、ドライバ種別が“Backend”という情報が登録される。VM ID“0”は仮想マシン130を示す。すなわち、当該エントリは、仮想マシン130のエントリである。仮想マシン130には仮想プロセッサが2個、メモリが4GB割り当てられていることを示す。また、仮想マシン130は1つのバックエンドドライバ132を有することを示す。更に、バックエンドドライバ132がNet ID“Net1”で識別されるネットに属することを示す。
また、VM管理テーブル171には、VM IDが“1”、CPUが“1”、メモリが“1GB”、Net IDが“Net1”、ドライバ種別が“Frontend”という情報が登録される。VM ID“1”は仮想マシン140を示す。すなわち、当該エントリは、仮想マシン140のエントリである。仮想マシン140には、仮想プロセッサが1個、メモリが1GB割り当てられていることを示す。また、仮想マシン140は1つのフロントエンドドライバ141を有することを示す。更に、フロントエンドドライバ141がNet ID“Net1”で識別されるネットに属することを示す。
図13は、ネットワーク管理テーブルの例を示す図である。ネットワーク管理テーブル172は、記憶部170に記憶される。ネットワーク管理テーブル172は、Net ID、バッファアドレス、サイズおよびアクセス制御の項目を含む。
Net IDの項目には、Net IDが登録される。バッファアドレスの項目には、ハイパーバイザ120が各仮想マシンからの要求に基づいて該当のバッファにアクセスする際に用いるアドレスが登録される(各仮想マシンによるバッファへのアクセスは、ハイパーバイザ120を介して行われるため)。サイズの項目には、バッファのサイズが登録される。アクセス制御の項目には、該当のバッファに対するアクセス制御の情報が登録される。具体的には、アクセス制御の項目には、該当のバッファへのアクセスを許容する仮想マシンのVM IDが登録される。アクセス制御の項目に登録されていないVM IDに対応する仮想マシンは、該当のバッファへのアクセスが許可されていないことになる。
例えば、ネットワーク管理テーブル172には、Net IDが“Net1”、バッファアドレスが“Addr1”、サイズが“Size1”、アクセス制御が“0,1”という情報が登録される。これは、Net ID“Net1”で識別されるネットに対応するバッファ121のアドレスが“Addr1”であり、サイズが“Size1”であることを示す。また、VM ID“0”の仮想マシン130およびVM ID“1”の仮想マシン140からのバッファ121に対するアクセスが許可されており、それ以外の仮想マシンからバッファ121に対するアクセスが許可されていないことを示す。
次に、業務サーバ100による処理手順を説明する。
図14は、デバイスマイグレーションの例を示すフローチャートである。以下、図14に示す処理をステップ番号に沿って説明する。
(S1)デバイス移転制御部123は、マネージャ137からSLB配備指示を受け付ける。例えば、システムの管理者は、管理サーバ200または業務サーバ100に接続された入力デバイスを操作して、SLB配備指示を業務サーバ100に入力できる。マネージャ137は、SLB配備指示を受け付けると、デバイス移転制御部123にSLB配備指示を通知する。SLB配備指示には、負荷分散の対象としたい仮想マシン(例えば、仮想マシン140)を指定する情報が含まれる。
(S2)デバイス移転制御部123は、業務サーバ100上にSLBが配備済であり、かつ、SLBがマネージャ137からの制御を許容しているか否かを判定する。SLBが配備済であり、かつSLBがマネージャ137からの制御を許容している場合、処理を終了する。SLBが配備済でないか、または、SLBが配備済であっても、マネージャ137からの制御が許容されていない場合、処理をステップS3に進める。ここで、ステップS2でYesの場合に処理を終了する理由は、例えば、マネージャ137から既存のSLBの負荷分散の設定を操作することで、ローリングアップデートを行えるからである。一方、ステップS2でNoの場合は、新規にSLB用の仮想マシン160を配備することになる。
(S3)SLB配備部124は、SLB(仮想マシン160)の配備を実行する。ステップS3に伴って、VM管理テーブル171およびネットワーク管理テーブル172は更新される。詳細は後述される。
(S4)デバイス移転制御部123は、切換対象のNet IDに対応するバックエンドドライバを、更新後のVM管理テーブルから検索する。
(S5)デバイス移転制御部123は、何れかのバックエンドドライバを検索できたか否かを判定する。何れかのバックエンドドライバを検索できた場合、処理をステップS6に進める。何れのバックエンドドライバも検索できなかった場合、処理を終了する(この場合、エラーとなるので、デバイス移転制御部123は、所定のエラー処理を実行してもよい)。例えば、切換対象のNet IDが“Net1”の場合、更新後のVM管理テーブルには、仮想マシン140,160の接続関係がNet ID“Net1”に対応付けて登録されることになる(図16で例示する)。したがって、この場合、Net ID“Net1”に対して検索されるバックエンドドライバは、バックエンドドライバ162である。
(S6)デバイス移転制御部123は、更新後のVM管理テーブルに基づいて、バックエンドドライバの切換元の仮想マシン(切換元VM)を選択する。例えば、バックエンドドライバ162の切換元の仮想マシンは、仮想マシン130である。
(S7)バッファ切換部126は、各仮想マシンによるアクセス先のバッファを切り換える。詳細は後述される。
(S8)デバイス移転制御部123は、更新後のVM管理テーブルを更新して、最新の状態とする。例えば、デバイス移転制御部123は、不要なエントリの削除などを行う。
(S9)デバイス移転制御部123は、切換先のバックエンドドライバでの通信を開始する。具体的には、バックエンドドライバ132をバックエンドドライバ162へマイグレーションする場合、デバイス移転制御部123は、バックエンドドライバ132をダウンさせ、バックエンドドライバ133をアップさせる。あるいは、デバイス移転制御部123は、バックエンドドライバ132の動作を停止させて、バックエンドドライバ133の動作を開始させる。これにより、バックエンドドライバ132は無効になる。また、バックエンドドライバ133,162およびフロントエンドドライバ161,141を用いた通信が有効となる。
図15は、SLB配備の例を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。以下の手順は、図14のステップS3に相当する。なお、負荷分散の対象としたい仮想マシンのVM IDとしてVM ID“1”(仮想マシン140)が指定されているものとする。仮想マシン140のフロントエンドドライバ141は、仮想マシン130のバックエンドドライバ132に接続されているので、SLB配備部124は、SLB配備に伴い、仮想マシン130,140の接続関係を変更することになる。
(S11)SLB配備部124は、ホストOSを実行する仮想マシン130のVM ID“0”と、SLB配備要求で指定された仮想マシン140のVM ID“1”とで共通のNet IDを、VM管理テーブル171から取得する。VM管理テーブル171の例によれば、Net ID“Net1”である。
(S12)SLB配備部124は、取得したNet IDについて、バックエンド側(バックエンドドライバ側)に対応するVM IDを、VM管理テーブル171から取得する。例えば、Net ID“Net1”の場合、バックエンド側に対応するVM IDは“1”(仮想マシン130)である。
(S13)SLB配備部124は、フロントエンドおよびバックエンドの2つのNICをもつ新規仮想マシン(仮想マシン160)を配備する。2つのNICのうちフロントエンドは、フロントエンドドライバ161に対応する。バックエンドは、バックエンドドライバ162に対応する。SLB配備部124は、配備結果に応じて、VM管理テーブル171を更新する。
(S14)SLB配備部124は、更新後のVM管理テーブルにおいて、配備した仮想マシン160のフロントエンドNIC(フロントエンドドライバ161)に対するバックエンド側(バックエンドドライバ133)を、ステップS12で取得したVM ID“1”に対し設定する。すなわち、SLB配備部124は、仮想マシン130について、バックエンドドライバ133に関する新たなエントリを、VM管理テーブルに登録する。また、SLB配備部124は、各ドライバが属するNet IDをVM管理テーブルに登録する。
(S15)SLB配備部124は、バックエンドドライバ133およびフロントエンドドライバ161が属するネットのNet IDを仮想基盤(ハイパーバイザ120上でドライバ間の接続関係を管理する別プロセス)から取得する。なお、Net IDは、SLB配備部124により新たに付与されてもよい。例えば、SLB配備部124は、Net ID“Net2”を取得する。
(S16)SLB配備部124は、取得したNet IDでネットワーク管理テーブル172を検索する。例えば、SLB配備部124は、Net ID“Net2”のエントリをネットワーク管理テーブル172から検索する。
(S17)SLB配備部124は、ネットワーク管理テーブル172に該当のNet IDのエントリが存在するか否かを判定する。存在する場合、処理をステップS19に進める。存在しない場合、処理をステップS18に進める。
(S18)SLB配備部124は、ステップS17で存在していないと判定されたNet IDのエントリを、ネットワーク管理テーブル172に作成する。例えば、SLB配備部124は、Net ID“Net2”のエントリを作成する。バッファ作成部125は、作成されたエントリに対応するバッファを新たに作成する。バッファ作成部125は、バッファのアドレスおよびサイズをSLB配備部124に提供する。
(S19)SLB配備部124は、ステップS15で取得したNet IDに対し、ネットワーク管理テーブル172のアクセス制御の項目に、フロントエンド側のVM ID(例えば“1”)とバックエンド側のVM ID(例えば“2”)とを追加する。
図16は、SLB配備部のテーブル更新例を示す図である。図16では、図15のステップS11,S13,S14におけるテーブル参照または更新の例を示す。図16(A)は、ステップS11におけるVM管理テーブル171を例示している。図16(B)は、ステップS13におけるVM管理テーブル171aを例示している。図16(C)は、ステップS14におけるVM管理テーブル171bを例示している。
ステップS11では、SLB配備部124は、VM管理テーブル171を参照する。例えば、VM ID“0”、“1”に共通のNet IDは、“Net1”である。また、“Net1”に対応するVM ID“0”、“1”のうち、バックエンド側はVM ID“0”である(ステップS12)。
ステップS13では、SLB配備部124は、VM管理テーブル171を、VM管理テーブル171aに更新する。具体的には、新規に配備した仮想マシン160のVM ID“2”、CPU“1”、メモリ“1GB”、Net ID“−”(設定なし)、ドライバ種別“Backend”というエントリを登録する。同様に、ドライバ種別“Frontend”のエントリを登録する(その他の項目の設定は“Backend”のエントリと同様である)。
ステップS14では、SLB配備部124は、VM管理テーブル171aを、VM管理テーブル171bに更新する。具体的には、バックエンドドライバ132のエントリ(VM ID“0”、Net ID“Net1”、ドライバ種別“Backend”を含む)について、Net IDを設定なし“−”とし、ドライバ種別を“None”とする。また、仮想マシン160のフロントエンドドライバ161と接続するバックエンドドライバ133のエントリを仮想マシン130のVM ID“2”に対応付けて登録する。具体的には、VM ID“0”、Net ID“2”、ドライバ種別“Backend”のエントリである。
更に、SLB配備部124は、仮想マシン160のバックエンドドライバ162のエントリ(VM ID“2”、Net ID“−”、ドライバ種別“Backend”)にNet ID“Net1”を設定する。SLB配備部124は、仮想マシン160のフロントエンドドライバ161のエントリ(VM ID“2”、Net ID“−”、ドライバ種別“Frontend”)にNet ID“Net2”を設定する。
なお、図14のステップS4の検索は、VM管理テーブル171bを参照して実行されることになる(切換対象のNet ID“1”に対してバックエンドドライバ162が検索される)。
図17は、SLB配備部のテーブル更新例(続き)を示す図である。図17では、図15のステップS17,S18,S19におけるテーブル参照または更新の例を示す。図17(A)は、ステップS17におけるネットワーク管理テーブル172を例示している。図17(B)は、ステップS18におけるネットワーク管理テーブル172aを例示している。図17(C)は、ステップS19におけるネットワーク管理テーブル172bを例示している。
ステップS17では、SLB配備部124は、ネットワーク管理テーブル172に基づいて判定を行う。例えば、SLB配備部124がネットワーク管理テーブル172を参照してNet ID“Net2”を検索しても、ネットワーク管理テーブル172には、Net ID“Net2”のエントリは存在しない。
ステップS18では、SLB配備部124は、ネットワーク管理テーブル172をネットワーク管理テーブル172aに更新する。具体的には、SLB配備部124は、ステップS17で存在しないと判定されたNet ID“Net2”、バッファアドレス“Addr2”、サイズ“Size2”のエントリをネットワーク管理テーブル172に追加する。アクセス制御の項目については、この段階では設定なし“−”とする。このとき、SLB配備部124は、バッファのアドレスおよびサイズに関する情報を、バッファ作成部125から取得する。
ステップS19では、SLB配備部124は、ネットワーク管理テーブル172bのNet ID“Net2”のエントリのアクセス制御の項目に、フロントエンド側のVM ID“0”と、バックエンド側のVM ID“2”との組“0,2”を設定する。
図18は、バッファ切換の例を示すフローチャートである。以下、図18に示す処理をステップ番号に沿って説明する。以下の手順は、図14のステップS7に相当する。
(S21)バッファ切換部126は、切換対象であるNet ID(例えば、“Net1”)でネットワーク管理テーブル172bを検索し、バッファアドレスとアクセス制御の情報とを取得する。
(S22)バッファ切換部126は、取得したアクセス制御の情報に基づいて、新規配備した仮想マシン160は、ステップS21で取得したバッファアドレスにアクセス可能であるか否かを判定する。アクセス可能である場合、処理を終了する。アクセス可能でない場合、処理をステップS23に進める。
(S23)バッファ切換部126は、新規配備した仮想マシン160のバックエンドドライバ162のアクセス先のバッファアドレスを書き換える。具体的には、バックエンドドライバ162がもつ情報を操作して、バックエンドドライバ162内にデフォルトで設定されているポインタを、バッファ121のアドレス(“Addr1”)に書き換える。
(S24)バッファ切換部126は、切換元のバックエンドドライバ132のアクセス先のバッファアドレスを、書込み禁止領域のアドレスに変更することで、転送中の書き込みをトラップ(捕捉)する。具体的には、バッファ切換部126は、バックエンドドライバ132がもつ情報を操作して、バックエンドドライバ132内のポインタ(“Addr1”を示す)を、バックエンドドライバ132の書込みが禁止されているアドレスに変更する。すると、例えば、バックエンドドライバ132による禁止領域への書き込み時に、ハードウェア割り込みを発生させることができる。よって、バッファ切換部126は、当該割り込みによりバックエンドドライバ132によるデータ書き込みをトラップ可能になる。バックエンドドライバ132による当該書込みが発生するということは、転送途中のデータが存在することを意味する。したがって、バッファ切換部126は、トラップしたデータをバッファ121に書き込むことで、現在転送中のデータをバッファ121に格納できる。
(S25)バッファ切換部126は、ネットワーク管理テーブル172bにおけるアクセス制御の情報を更新する。具体的には、バッファ切換部126は、切換対象であるNet ID“Net1”に関して、仮想マシン140,160によるアクセスを許可し、仮想マシン130によるアクセスを不許可とするよう設定する。ただし、ステップS24で説明したように、バックエンドドライバ132による禁止領域へのデータ書込みがトラップされた場合、当該書込み対象のデータのバッファ121への書き込みは許容される(この書き込みはハイパーバイザ120の一機能であるバッファ切換部126により実行されるため)。
図19は、バッファ切換部のテーブル更新例を示す図である。図19では、図18のステップS22,S25におけるテーブル参照または更新の例を示す。図19(A)は、ステップS22におけるネットワーク管理テーブル172bを例示している。図19(B)は、ステップS25におけるネットワーク管理テーブル172cを例示している。
ステップS22では、バッファ切換部126は、ネットワーク管理テーブル172bに基づいて判定を行う。例えば、バッファ切換部126は、Net ID“Net1”に対して、バッファアドレス“Addr1”およびアクセス制御“0,1”を取得する。
ステップS25では、バッファ切換部126は、ネットワーク管理テーブル172bを、ネットワーク管理テーブル172cに更新する。具体的には、バッファ切換部126は、Net ID“Net1”のエントリにおけるアクセス制御の項目を“1,2”に設定する。アクセス制御部127は、ネットワーク管理テーブル172cのアクセス制御の項目に基づいて、各バッファに対するアクセス制御を行う。
このようにして、業務サーバ100は、バックエンドドライバ132のバックエンドドライバ162へのマイグレーションを実行する。
図20は、マイグレーション後の負荷分散の例を示す図である。例えば、ローリングアップデートを行う場合、ハイパーバイザ120は、仮想マシン140と同等のサービスを提供する仮想マシン150も新たに配備する。仮想マシン150は、フロントエンドドライバ151を有する。フロントエンドドライバ151は、仮想マシン150において“eth0”という識別情報に対応付けられている。この場合、仮想マシン160に、バックエンドドライバ163を更に追加する。バックエンドドライバ163は、フロントエンドドライバ151と接続される。バックエンドドライバ163は、“vif3.0”という識別情報に対応付けられている。仮想マシン160は、SLB160aを有する。
SLB160aは、ブリッジ165を経由するパケットを取得して、負荷分散を行う。例えば、SLB160aは、MACアドレスを用いて負荷分散を行う。より具体的には、SLB160aは、仮想マシン140から、仮想マシン160を配備する前から仮想マシン140にアクセスしていたクライアントのIPアドレスを取得する(当該IPアドレスをハイパーバイザ120から取得してもよい)。SLB160aは、当該クライアントのIPアドレスを送信元とするパケットを、仮想マシン140に振り分けるようにする。振り分け先の仮想マシン140,150の管理は、フロントエンドドライバ141,151のMACアドレスにより行う。この場合、フロントエンドドライバ151のIPアドレスは、任意でよい。例えば、フロントエンドドライバ151にフロントエンドドライバ141と同じIPアドレス“IP−A”を設定してもよい。
フロントエンドドライバ151にフロントエンドドライバ141と異なるIPアドレスを設定してもよい。その場合、SLBは、宛先IPアドレス“IP−A”を指定したパケットを仮想マシン150に振り分ける際に、当該パケットの宛先IPアドレスを、仮想マシン150のIPアドレスに変換する。SLBは、仮想マシン150から当該パケットに対する応答パケットを受信したときは、送信元IPアドレスをIPアドレス“IP−A”に戻して、転送する。こうして、仮想マシン140,150,160を用いて、ユーザに対するサービス提供機能を冗長化させることで、ローリングアップデートを行える。
図21は、SLB配備例(その1)を示す図である。第2の実施の形態によれば、負荷分散を行う仮想マシン160が配備されていなくても、クライアント300と仮想マシン140との間のセッション情報を維持しながら、仮想マシン160を動的に配備可能となる。例えば、仮想マシン140に設定されているIPアドレス“IP−A”は、仮想マシン160の配備後も、仮想マシン140により利用される。
ここで、バッファ121には仮想マシン140と当該クライアント300との間の通信データが格納され、また、仮想マシン140のIPアドレスも変更せずに済むので、仮想マシン140は仮想マシン160の配備前のセッション情報を継続して利用できる。よって、仮想マシン160の配備後も、仮想マシン140とクライアント300との通信内容を維持できる。また、ネットワーク30,40に含まれる各スイッチにおいて、MACアドレス学習テーブルなどの再学習を行わなくてもよいので、各スイッチによる再学習に伴うクライアント300と仮想マシン140との通信の中断も抑制できる。
図22は、SLB配備例(その2)を示す図である。ここで、図14のステップS2では、SLBが配備済であり、かつ、SLBがマネージャ137からの制御を許容しているという条件を満たさない場合に、新規にSLBを有する仮想マシン160を配備する例を示した。その具体的なケースの1つとして、仮想マシン140,150に対してSLB180aを有する仮想マシン180が配備済であるが、SLB180aに対するマネージャ137からの制御が許容されていない場合が考えられる。
この場合、管理者の操作により、SLB180aの設定を変更できないので、SLB180aによるパケットの流量制御を行えず、ローリングアップデートを適切に行えないことになる。このような場合にも、ハイパーバイザ120は、第2の実施の形態の方法により、仮想マシン160を動的に配備する。すると、仮想マシン180のフロントエンドドライバのIPアドレスを変更しなくてよい(例えば、仮想マシン160の配備前のIPアドレス“IP−A”を、仮想マシン160の配備後にも仮想マシン180で使用できる)。ハイパーバイザ120は、仮想マシン190を更に動作させる。仮想マシン190は、サービス140a,150aと同等のサービスを提供する。そして、SLB160aは、仮想マシン180,190に対する負荷分散を行う。こうして、SLB180aによるパケットの流量制御を行えなくても、SLB160aによりパケットの流量制御を行えるようになる。したがって、サービス190aによってサービス提供を代替させている間に、仮想マシン140,150におけるソフトウェアの更新作業などを行えるようになる。特に、仮想マシン160の配備後も、仮想マシン140,150とクライアント300との通信途中のセッション情報を維持できる。
なお、ローリングアップデートなどの作業後は、SLBを行う仮想マシン160を撤収してよい。次に、撤収の手順を例示する。
図23は、SLB撤収の例を示すフローチャートである。以下、図23に示す処理をステップ番号に沿って説明する。
(S31)デバイス移転制御部123は、SLB160a(仮想マシン160)の撤収指示(あるいは、仮想マシン160の停止指示)を受け付ける。すると、デバイス移転制御部123は、バックエンドドライバ132を仮想マシン130上で動作させる。
(S32)バッファ切換部126は、バッファ切換を行う。バッファ切換部126は、図18で例示したバッファ切換の手順を、バックエンドドライバ162からバックエンドドライバ132へ移転させるケースとして実行する。バッファ切換部126は、バックエンドドライバ132のアクセス先をバッファ121に設定する。このとき、バッファ122に格納されたデータをバッファ121にマージしてもよい。また、バックエンドドライバ133,162のデータ書込み先のアドレスを書込み禁止領域のアドレスに設定することで、バックエンドドライバ133,162によるデータ書込みをトラップして、バッファ121に書き込んでもよい。バッファ切換部126は、ネットワーク管理テーブル172cを更新する。更新後のネットワーク管理テーブルは、ネットワーク管理テーブル172と同じ設定内容となる。
(S33)デバイス移転制御部123は、VM管理テーブル171bを更新する。更新後のネットワーク管理テーブルは、VM管理テーブル171と同じ設定内容となる。すなわち、VM管理テーブル171およびネットワーク管理テーブル172は、仮想マシン160の配備前の状態に戻される。
(S34)デバイス移転制御部123は、SLB160aの仮想マシン160を撤収する。具体的には、デバイス移転制御部123は、仮想マシン160を停止させ、仮想マシン160に割り当てていたリソースを解放する(当該リソースは再利用可能となる)。
図24は、SLB撤収の例を示す図である。ハイパーバイザ120は、仮想マシン160のバックエンドドライバ162に代えて、バックエンドドライバ132を仮想マシン130上で動作させる。バックエンドドライバ132は、フロントエンドドライバ141と共にバッファ121を共有し、再び仮想マシン130,140の通信を実現する。バックエンドドライバ132のアクセス先をバッファ121とすることで、クライアント300と仮想マシン140との間で転送途中のデータは維持される。また、バックエンドドライバ133,162によるアクセス先を禁止領域のアドレスに変更することで、バックエンドドライバ133,162による転送途中のデータの書き込みをトラップし、当該データをバッファ121に書き込んでもよい。このようにすれば、転送途中であるがバッファ121に未書き込みであるデータもバッファ121に格納できる。
その後、ハイパーバイザ120は、仮想マシン160を停止させる。また、ハイパーバイザ120は、仮想マシン130からバックエンドドライバ133を削除する。こうして、ハイパーバイザ120は、業務サーバ100を図6の状態(元の状態)に戻せる。
ところで、第2の実施の形態の方法を用いて、仮想マシン140に対するソフトウェア更新を次のように行うことが考えられる。
図25は、仮想マシンの更新方法の例(その1)を示す図である。まず、クライアント300と仮想マシン140とが通信しており、仮想マシン150,160が配備されていないとする。クライアント300と仮想マシン140とが通信途中であるときに、ハイパーバイザ120は、仮想マシン140のソフトウェアの更新指示(仮想マシン160の配備指示に相当すると考えてもよい)をマネージャ137から受け付ける。
ハイパーバイザ120は、仮想マシン150,160を配備する。仮想マシン160のSLB160aは、仮想マシン140,150に対する負荷分散を行う。SLB160aは、仮想マシン140とクライアント300との通信を維持するため、クライアント300からのパケットを仮想マシン140に振り分ける。仮想マシン140とクライアント300との通信が完了すると、SLB160aは、全てのパケットを仮想マシン150へ振り分け、仮想マシン140へはパケットを振り分けないようにする。
そして、ハイパーバイザ120は、仮想マシン140に対するソフトウェアの更新作業を行う(例えば、更新後のソフトウェアをインストールした状態で仮想マシン140を再起動させる)。仮想マシン140が一時的に停止しても、仮想マシン150側でサービス提供を代替することで、ユーザへのサービス提供を停止させずに済む。仮想マシン140のソフトウェア更新後、ハイパーバイザ120は、仮想マシン150,160を撤収する。
図26は、仮想マシンの更新方法の例(その2)を示す図である。まず、クライアント300と仮想マシン140とが通信しており、仮想マシン150,160が配備されていないとする。クライアント300と仮想マシン140とが通信途中であるときに、ハイパーバイザ120は、仮想マシン140のソフトウェアの更新指示をマネージャ137から受け付ける。ハイパーバイザ120は、仮想マシン150,160を配備する。
ハイパーバイザ120は、仮想マシン140と同一スペック、同一IPアドレス、かつ、更新後のソフトウェアをインストールした状態で、仮想マシン150を動作させる。
仮想マシン160のSLB160aは、例えば、MACアドレスにより仮想マシン140,150を区別して、仮想マシン140,150に対する負荷分散を行う。SLB160aは、仮想マシン140とクライアント300との通信を維持するため、クライアント300からのパケットを仮想マシン140に振り分ける。仮想マシン140とクライアント300との通信が完了すると、SLB160aは、全てのパケットを仮想マシン150へ振り分け、仮想マシン140へはパケットを振り分けないようにする。その後、ハイパーバイザ120は、仮想マシン140,160を撤収する。この場合、ハイパーバイザ120は、バックエンドドライバ133および図20で示したバックエンドドライバ163によるデータの書き込み先をメモリの禁止領域に設定して書き込みをトラップしてもよい。当該データの書き込み先を、仮想マシン130上に新たに作成されるバックエンドドライバ(仮想マシン150との通信に用いられる)がアクセスするバッファ領域へ変更することで、転送途中であるが当該バッファ領域に未書き込みであるデータも同バッファ領域に格納できるからである。
図25の方法では仮想マシン140を残し、仮想マシン150を撤収する。一方、図26の方法では、仮想マシン150を残し、仮想マシン140を撤収する点が異なる。業務サーバ100は、何れの方法も実行可能である。例えば、図25の方法では、仮想マシン140,150のスペックは同じでなくてもよいので、仮想マシン150のスペックを仮想マシン140よりも高くしたり低くしたりできる。すなわち、リソースの利用状況に応じて、仮想マシン150のスペックを調整できるという利点がある。一方、図26の方法では、(図25の方法に対して)更新後のソフトウェアを適用した状態で仮想マシン140を再起動する手順を省ける。このため、作業を短縮化できるという利点がある。
以上の説明では、ホストOSにバックエンドドライバを設ける場合を例示したが、ドライバOS(あるいは、ドライバドメイン)として機能する仮想マシンに、バックエンドドライバを設ける場合にも、第2の実施の形態の方法を適用できる。その場合、ドライバドメインのバックエンドドライバを、ドライバドメインに代えて、ゲストOSに移行させることになる。
なお、第1の実施の形態の情報処理は、演算部11bにプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体23に記録できる。
例えば、プログラムを記録した記録媒体23を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体23に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
以上の第1,第2の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
(付記1) コンピュータが、
1以上の仮想マシンとの通信機能を有する第1の仮想マシンと第2の仮想マシンとの通信を制御する新規仮想マシンの配備指示を受けると、前記第1の仮想マシンが有しており前記第2の仮想マシンとの通信に利用される第1のドライバに対応する第2のドライバと、前記新規仮想マシンと前記第1の仮想マシンとの通信に利用される第3のドライバとを前記新規仮想マシンに作成して仮想ブリッジにより接続し、
前記第1のドライバが使用するバッファ領域を前記第2のドライバのバッファ領域に変更した後、前記第1のドライバを無効にし、前記第2のドライバを有効にする、
負荷分散機能配備方法。
(付記2) 前記第1のドライバによるデータの書き込みを検出し、前記データの書き込み先を前記第2のドライバのバッファ領域に変更する、付記1記載の負荷分散機能配備方法。
(付記3) 前記検出では、前記第1のドライバによるデータの書き込み先を、前記第1のドライバからデータの書き込みが禁止されているアドレスに設定することで、前記第1のドライバによるデータの書き込み時に割り込みを発生させる、付記2記載の負荷分散機能配備方法。
(付記4) 前記新規仮想マシンは、前記第2の仮想マシンを含む複数の仮想マシンに対する負荷分散を実行する仮想マシンである、付記1乃至3の何れか1つに記載の負荷分散機能配備方法。
(付記5) 前記第2の仮想マシンのIPアドレスを、前記新規仮想マシンの配備前と配備後とで同じにする、付記4記載の負荷分散機能配備方法。
(付記6) 前記第2の仮想マシンと同じIPアドレスを前記複数の仮想マシンに設定する、付記5記載の負荷分散機能配備方法。
(付記7) 前記新規仮想マシンの撤収指示を受けると、前記第1の仮想マシンに前記第1のドライバを作成し、前記第2のドライバが使用するバッファ領域を、作成した前記第1のドライバのバッファ領域に変更し、前記第1の仮想マシンと前記第2の仮想マシンとの通信を開始させた後、前記新規仮想マシンを停止させる、付記1乃至6の何れか1つに記載の負荷分散機能配備方法。
(付記8) 前記第1の仮想マシンは、前記コンピュータが有するハードウェアへの他の仮想マシンによるアクセスを制御する仮想マシンであり、
前記第1および前記第2のドライバは、前記第2の仮想マシンとの通信を行うバックエンドドライバである、付記1乃至7の何れか1つに記載の負荷分散機能配備方法。
(付記9) 仮想マシンが通信するデータを格納するバッファ領域を含む記憶部と、
1以上の仮想マシンとの通信機能を有する第1の仮想マシンと第2の仮想マシンとの通信を制御する新規仮想マシンの配備指示を受けると、前記第1の仮想マシンが有しており前記第2の仮想マシンとの通信に利用される第1のドライバに対応する第2のドライバと、前記新規仮想マシンと前記第1の仮想マシンとの通信に利用される第3のドライバとを前記新規仮想マシンに作成して仮想ブリッジにより接続し、前記第1のドライバが使用するバッファ領域を前記第2のドライバのバッファ領域に変更した後、前記第1のドライバを無効にし、前記第2のドライバを有効にする演算部と、
を有する負荷分散機能配備装置。
(付記10) コンピュータに、
1以上の仮想マシンとの通信機能を有する第1の仮想マシンと第2の仮想マシンとの通信を制御する新規仮想マシンの配備指示を受けると、前記第1の仮想マシンが有しており前記第2の仮想マシンとの通信に利用される第1のドライバに対応する第2のドライバと、前記新規仮想マシンと前記第1の仮想マシンとの通信に利用される第3のドライバとを前記新規仮想マシンに作成して仮想ブリッジにより接続し、
前記第1のドライバが使用するバッファ領域を前記第2のドライバのバッファ領域に変更した後、前記第1のドライバを無効にし、前記第2のドライバを有効にする、
処理を実行させる負荷分散機能配備プログラム。
10 負荷分散機能配備装置
11 ハードウェア
11a 記憶部
11b 演算部
12 ハイパーバイザ
13,13a,13b 仮想マシン
20 ネットワーク
A1 バッファ領域
B1,B2 仮想ブリッジ
D11,D12,D21,D31,D32 ドライバ

Claims (7)

  1. コンピュータが、
    1以上の仮想マシンとの通信機能を有する第1の仮想マシンと第2の仮想マシンとの通信を制御する新規仮想マシンの配備指示を受けると、前記第1の仮想マシンが有しており前記第2の仮想マシンとの通信に利用される第1のドライバに対応する第2のドライバと、前記新規仮想マシンと前記第1の仮想マシンとの通信に利用される第3のドライバとを前記新規仮想マシンに作成して仮想ブリッジにより接続し、
    前記第1のドライバが使用するバッファ領域を前記第2のドライバのバッファ領域に変更した後、前記第1のドライバを無効にし、前記第2のドライバを有効にする、
    負荷分散機能配備方法。
  2. 前記第1のドライバによるデータの書き込みを検出し、前記データの書き込み先を前記第2のドライバのバッファ領域に変更する、請求項1記載の負荷分散機能配備方法。
  3. 前記検出では、前記第1のドライバによるデータの書き込み先を、前記第1のドライバからデータの書き込みが禁止されているアドレスに設定することで、前記第1のドライバによるデータの書き込み時に割り込みを発生させる、請求項2記載の負荷分散機能配備方法。
  4. 前記新規仮想マシンは、前記第2の仮想マシンを含む複数の仮想マシンに対する負荷分散を実行する仮想マシンである、請求項1乃至3の何れか1項に記載の負荷分散機能配備方法。
  5. 前記第2の仮想マシンのIP(Internet Protocol)アドレスを、前記新規仮想マシンの配備前と配備後とで同じにする、請求項4記載の負荷分散機能配備方法。
  6. 仮想マシンが通信するデータを格納するバッファ領域を含む記憶部と、
    1以上の仮想マシンとの通信機能を有する第1の仮想マシンと第2の仮想マシンとの通信を制御する新規仮想マシンの配備指示を受けると、前記第1の仮想マシンが有しており前記第2の仮想マシンとの通信に利用される第1のドライバに対応する第2のドライバと、前記新規仮想マシンと前記第1の仮想マシンとの通信に利用される第3のドライバとを前記新規仮想マシンに作成して仮想ブリッジにより接続し、前記第1のドライバが使用するバッファ領域を前記第2のドライバのバッファ領域に変更した後、前記第1のドライバを無効にし、前記第2のドライバを有効にする演算部と、
    を有する負荷分散機能配備装置。
  7. コンピュータに、
    1以上の仮想マシンとの通信機能を有する第1の仮想マシンと第2の仮想マシンとの通信を制御する新規仮想マシンの配備指示を受けると、前記第1の仮想マシンが有しており前記第2の仮想マシンとの通信に利用される第1のドライバに対応する第2のドライバと、前記新規仮想マシンと前記第1の仮想マシンとの通信に利用される第3のドライバとを前記新規仮想マシンに作成して仮想ブリッジにより接続し、
    前記第1のドライバが使用するバッファ領域を前記第2のドライバのバッファ領域に変更した後、前記第1のドライバを無効にし、前記第2のドライバを有効にする、
    処理を実行させる負荷分散機能配備プログラム。
JP2015050652A 2015-03-13 2015-03-13 負荷分散機能配備方法、負荷分散機能配備装置および負荷分散機能配備プログラム Pending JP2016170669A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015050652A JP2016170669A (ja) 2015-03-13 2015-03-13 負荷分散機能配備方法、負荷分散機能配備装置および負荷分散機能配備プログラム
US15/051,894 US20160266938A1 (en) 2015-03-13 2016-02-24 Load balancing function deploying method and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015050652A JP2016170669A (ja) 2015-03-13 2015-03-13 負荷分散機能配備方法、負荷分散機能配備装置および負荷分散機能配備プログラム

Publications (1)

Publication Number Publication Date
JP2016170669A true JP2016170669A (ja) 2016-09-23

Family

ID=56888662

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015050652A Pending JP2016170669A (ja) 2015-03-13 2015-03-13 負荷分散機能配備方法、負荷分散機能配備装置および負荷分散機能配備プログラム

Country Status (2)

Country Link
US (1) US20160266938A1 (ja)
JP (1) JP2016170669A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017208747A (ja) * 2016-05-20 2017-11-24 日本電信電話株式会社 流量制御方法および流量制御装置
EP3796168A1 (en) 2019-09-19 2021-03-24 Fujitsu Limited Information processing apparatus, information processing method, and virtual machine connection management program
WO2022044270A1 (ja) * 2020-08-28 2022-03-03 日本電信電話株式会社 更新装置、更新方法、および、プログラム
JP7485190B1 (ja) 2023-11-16 2024-05-16 横河電機株式会社 装置、システム、方法およびプログラム

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102015214424A1 (de) * 2015-07-29 2017-02-02 Robert Bosch Gmbh Verfahren und Vorrichtung zum Kommunizieren zwischen virtuellen Maschinen
US10001983B2 (en) 2016-07-27 2018-06-19 Salesforce.Com, Inc. Rolling version update deployment utilizing dynamic node allocation
US10402341B2 (en) * 2017-05-10 2019-09-03 Red Hat Israel, Ltd. Kernel-assisted inter-process data transfer
US10303522B2 (en) * 2017-07-01 2019-05-28 TuSimple System and method for distributed graphics processing unit (GPU) computation
US11467881B2 (en) * 2017-09-13 2022-10-11 At&T Intellectual Property I, L.P. Framework, method and apparatus for network function as a service for hosted network functions in a cloud environment
US10250677B1 (en) * 2018-05-02 2019-04-02 Cyberark Software Ltd. Decentralized network address control
JP6669807B2 (ja) * 2018-05-30 2020-03-18 株式会社日立製作所 計算機システムおよび計算機
US10764113B2 (en) * 2018-07-05 2020-09-01 At&T Intellectual Property I, L.P. Self-adjusting control loop
US11886917B2 (en) * 2018-08-06 2024-01-30 Telefonaktiebolaget Lm Ericsson (Publ) Automation of management of cloud upgrades
JP2021135777A (ja) * 2020-02-27 2021-09-13 株式会社小松製作所 作業機械のコンポーネントのソフトウェア更新システムおよびソフトウェア更新方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007036072A1 (en) * 2005-09-29 2007-04-05 Intel Corporation Apparatus and method for expedited virtual machine (vm) launch in vm cluster environment
US9146762B2 (en) * 2012-08-23 2015-09-29 Citrix Systems, Inc. Specialized virtual machine to virtualize hardware resource for guest virtual machines

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017208747A (ja) * 2016-05-20 2017-11-24 日本電信電話株式会社 流量制御方法および流量制御装置
EP3796168A1 (en) 2019-09-19 2021-03-24 Fujitsu Limited Information processing apparatus, information processing method, and virtual machine connection management program
WO2022044270A1 (ja) * 2020-08-28 2022-03-03 日本電信電話株式会社 更新装置、更新方法、および、プログラム
JP7485190B1 (ja) 2023-11-16 2024-05-16 横河電機株式会社 装置、システム、方法およびプログラム

Also Published As

Publication number Publication date
US20160266938A1 (en) 2016-09-15

Similar Documents

Publication Publication Date Title
JP2016170669A (ja) 負荷分散機能配備方法、負荷分散機能配備装置および負荷分散機能配備プログラム
US10963282B2 (en) Computing service with configurable virtualization control levels and accelerated launches
US11218364B2 (en) Network-accessible computing service for micro virtual machines
US11068355B2 (en) Systems and methods for maintaining virtual component checkpoints on an offload device
US10050850B2 (en) Rack awareness data storage in a cluster of host computing devices
US9582221B2 (en) Virtualization-aware data locality in distributed data processing
JP4972670B2 (ja) 仮想計算機システム、そのアクセス制御方法及び通信装置
US20200106669A1 (en) Computing node clusters supporting network segmentation
WO2015171469A1 (en) Constructing and operating high-performance unified compute infrastructure across geo-distributed datacenters
US20130042238A1 (en) Optimized Virtual Function Translation Entry Memory Caching
WO2013024375A1 (en) Dynamic network adapter memory resizing and bounding for virtual function translation entry storage
JP2021048513A (ja) 情報処理装置、情報処理方法および仮想マシン接続管理プログラム
US11822970B2 (en) Identifier (ID) allocation in a virtualized computing environment
US11397622B2 (en) Managed computing resource placement as a service for dedicated hosts
US10965616B2 (en) Nonstop computing fabric arrangements
US20160182403A1 (en) Automatic creation of affinity-type rules for resources in distributed computer systems
JP2015075898A (ja) 処理再開方法、処理再開プログラムおよび情報処理システム
US20230244601A1 (en) Computer memory management in computing devices
JP5754294B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
US11907161B2 (en) Upgrading the file system of objects in a distributed storage system