(57)【要約】【課題】オープンフロー技術を利用してコンピュータシステムの負荷分散を行う。【解決手段】本発明によるコンピュータシステムは、オープンフロー技術を利用したシステムであって、複数のクライアント端末２１〜２ｎと複数のサービス提供サーバ３１〜３ｍと間の負荷分散を行うＤＮＳサーバ（５）と、複数のサービス提供サーバ３１〜３ｍのそれぞれの負荷状況に応じて、スイッチ４ｉに設定したフローエントリを変更するコントローラとを具備する。【選択図】図１
2011170718.tif 000002
【特許請求の範囲】
【請求項１】
通信経路上のスイッチに対して、フローエントリを設定するコントローラと、
前記コントローラによって設定されたフローエントリに従って、受信パケットの中継処理を行うスイッチと、
前記スイッチを介して自身に接続された複数のクライアント端末のそれぞれに対して、サービスを提供する複数のサービス提供サーバと、
ラウンドロビン機能によって、前記複数のクライアント端末と前記複数のサービス提供サーバと間の負荷分散を行うＤＮＳ（Ｄｏｍａｉｎ  Ｎａｍｅ  Ｓｙｓｔｅｍ）サーバと
を具備し、
前記複数のサービス提供サーバのそれぞれは、それぞれの負荷状況を監視し、自身に対する負荷が閾値以上であると判定すると、負荷分散要求を前記コントローラに発行し、
前記コントローラは、前記負荷分散要求に応じて、前記スイッチに設定したフローエントリを変更する
コンピュータシステム。
【請求項２】
請求項１に記載のコンピュータシステムにおいて、
前記コントローラは、前記負荷分散要求の要求元サーバへの負荷を軽減させるためのフローエントリを前記スイッチに設定する
コンピュータシステム。
【請求項３】
請求項２に記載のコンピュータシステムにおいて、
前記要求元サーバは、自身に接続中のクライアント端末のアドレスを前記コントローラに通知し、
前記コントローラは、前記通知されたアドレス以外のアドレスを送信元アドレスとしたパケットデータが、前記要求元サーバ以外のサービス提供サーバに到達するように、前記スイッチに設定したフローエントリを変更する
コンピュータシステム。
【請求項４】
請求項３に記載のコンピュータシステムにおいて、
前記コントローラは、前記通知されたアドレスを送信元アドレスとしたパケットデータが、前記要求元サーバに到達するように、前記スイッチに設定したフローエントリを変更する
コンピュータシステム。
【請求項５】
請求項１から４のいずれか１項に記載のコンピュータシステムにおいて、
前記複数のサービス提供サーバのそれぞれは、自身への同時接続数を監視し、前記同時接続数が閾値以上であると判定した場合、前記負荷分散要求を前記コントローラに発行する
コンピュータシステム。
【請求項６】
請求項１から５のいずれか１項に記載のコンピュータシステムにおいて、
前記負荷分散要求を発行した要求元サーバは、前記負荷が前記閾値を下回った場合、設定復帰要求を前記コントローラに発行し、
前記コントローラは、前記負荷分散要求に応じて、変更した前記スイッチのフローエントリを元のフローエントリに戻す
コンピュータシステム。
【請求項７】
請求項１から６のいずれか１項に記載のコンピュータシステムにおいて、
前記複数のサービス提供サーバは、１つのホスト名が割り当てられた仮想サーバを形成し、
前記複数のサービス提供サーバのそれぞれには、複数のＩＰアドレスが割り当てられる
コンピュータシステム。
【請求項８】
請求項１から７のいずれか１項に記載のコンピュータシステムで利用されるコントローラ。
【請求項９】
請求項１から７のいずれか１項に記載のコンピュータシステムで利用されるサービス提供サーバ。
【請求項１０】
コントローラが、通信経路上のスイッチに対して、フローエントリを設定するステップと、
スイッチが、前記コントローラによって設定されたフローエントリに従って、受信パケットの中継処理を行うステップと、
複数のサービス提供サーバのそれぞれが、前記スイッチを介して自身に接続された複数のクライアント端末のそれぞれに対して、サービスを提供するステップと、
ＤＮＳ（Ｄｏｍａｉｎ  Ｎａｍｅ  Ｓｙｓｔｅｍ）サーバが、ラウンドロビン機能によって、前記複数のクライアント端末と前記複数のサービス提供サーバと間の負荷分散を行うステップと、
前記複数のサービス提供サーバのそれぞれが、それぞれの負荷状況を監視するステップと、
前記複数のサービス提供サーバのそれぞれが、自身に対する負荷が閾値以上であると判定すると、負荷分散要求を前記コントローラに発行するステップと、
前記コントローラが、前記負荷分散要求に応じて、前記スイッチに設定したフローエントリを変更するステップと
を具備する
負荷分散方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステム、及び負荷分散方法に関し、特に、オープンフロー（オープンフロー）技術を利用して負荷分散を行うコンピュータシステムに関する。
【背景技術】
【０００２】
コンピュータネットワークにおいて、各スイッチの転送動作等を外部のコントローラによって一元的に制御する技術（オープンフロー）が、ＯｐｅｎＦｌｏｗ  Ｃｏｎｓｏｒｔｉｕｍによって提案されている（非特許文献１参照）。この技術に対応したネットワークスイッチ（以下、オープンフロースイッチ（ＯＦＳ）と称す）は、プロトコル種別やポート番号等の詳細な情報をフローテーブルに保持し、フローの制御と統計情報の採取を行うことができる。
【０００３】
ＯＦＳが保持するフローテーブルは、ＯＦＳとは分離して設けられるコントローラ（以下、オープンフローコントローラ（ＯＦＣ）と称す）によって設定される。ＯＦＣは、ノード間の通信経路の設定や、経路上におけるＯＦＳに対する転送動作（中継動作）等の設定を行う。この際、ＯＦＣは、ＯＦＳが保持するフローテーブルに、フロー（パケットデータ）を特定するルールと、当該フローに対する処理を規定するアクションとを対応付けたフローエントリを設定する。フローテーブルに設定されるエントリの内容については、例えば非特許文献１で規定されている。
【０００４】
通信経路上のＯＦＳは、ＯＦＣによって設定されたフローエントリに従って受信パケットデータの転送先を決定し、転送処理を行う。これにより、ネットワーク上のノードは、ＯＦＣによって設定された通信経路を利用して他のノードとの間でパケットデータの送受信が可能となる。すなわち、オープンフローを利用したコンピュータシステムでは、転送処理を行うＯＦＳと分離して設けられたＯＦＣによって、システム全体の通信を一元的に制御及び管理することが可能となる。
【０００５】
ＯＦＣは、ＯＦＳからの要求に応じて通信経路の算出及び通信経路上のＯＦＳにおけるフローテーブルの更新を行う。詳細には、ＯＦＳが自身のフローテーブルに規定されていないパケットデータを受信した場合、当該パケットデータをＯＦＣに通知する。ＯＦＣは、通知されたパケットデータのヘッダ情報に基づいて転送元及び転送先を特定し通信経路やＯＦＳに設定するフローエントリ（ルール＋アクション）を生成し、各ＯＦＳのフローテーブルを更新する。
【０００６】
一方、処理能力の向上や耐障害性の向上などを目的として、複数のノードを１台のノードのように見せるサーバの仮想化技術が存在する。複数のサーバを１つのサーバとして仮想化した場合、当該サーバ（仮想化サーバ）に対して、複数のクライアントによってアクセス可能となる。この際、複数のクライアントからのアクセスによる負荷分散が可能となる。しかし、仮想サーバを構成する１つのサーバ（物理サーバ）に負荷が偏らないようするためには、各クライアントから接続するサーバを何らかの手段で決定する必要がある。
【０００７】
複数のサーバに対する負荷分散を実現する技術として、ＤＮＳ（Ｄｏｍａｉｎ  Ｎａｍｅ  Ｓｙｓｔｅｍ）サーバのラウンドロビン機能を使った負荷分散方法が知られている。ラウンドロビン機能では、ＤＮＳサーバによって同一名称（ＦＱＤＮ：Ｆｕｌｌｙ  Ｑｕａｌｉｆｉｅｄ  Ｄｏｍａｉｎ  Ｎａｍｅ）のホストに複数のＩＰアドレスを設定し、ＤＮＳクライアントからの名前解決要求に応じて複数のＩＰアドレスのうちの１つを順に返す。これにより、クライアントが１つの名前で参照できるサーバは複数となり、負荷分散が実現される。
【０００８】
又、仮想サーバに対する負荷状況に応じてＦＱＤＮの振り分け可否を設定することで仮想サーバ間の負荷分散を行うシステムが、例えば、特開２００９−２５９２０６に記載されている（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−２５９２０６
【非特許文献】
【００１０】
【非特許文献１】ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｖｅｒｓｉｏｎ  ０．９．０  （Ｗｉｒｅ  Ｐｒｏｔｏｃｏｌ  ０ｘ９８）    Ｊｕｌｙ  ２０，  ２００９
【発明の概要】
【発明が解決しようとする課題】
【００１１】
オープンフロー技術を利用したシステムでは、受信パケットの送信元と送信先のＩＰアドレスやＭＡＣアドレスやポート番号、ＶＬＡＮ  ＩＤなどをもとにして動作を決定することができる。このため、オープンフロー技術では、ルールや動作（アクション）を細かく規定することができるが、この精度を上げようとすると複雑な処理が必要になる。
【００１２】
一方、オープンフロー技術による負荷分散方法が検討され始めている。例えば、ＯＦＣは、ＯＦＳにおける負荷の増大に応じてＯＦＳのフローエントリ（ルール＋アクション）を動的に変更することで負荷分散を実現できる。この場合、負荷の増大や偏りによっては、ＯＦＳのフローエントリの更新頻度が増大することが予想される。オープンフロー技術を利用したシステムでは、１つのＯＦＣによって複数のＯＦＳの動作を一元的に制御しているため、フローエントリの更新頻度の増大に伴って、ＯＦＣにおける処理負荷は増大する。又、上述のように、細かなフローエントリの設定により負荷分散を実現するためには、複雑な処理が必要となるため、ＯＦＣにおける処理負荷が増大し、処理遅延を招くことが予想される。
【００１３】
従って、本発明の目的は、オープンフローコントローラの処理負荷の増大を抑制しつつ、オープンフロー技術を利用した負荷分散を実現することである。
【課題を解決するための手段】
【００１４】
上記の課題を解決するために、本発明は、以下に述べられる手段を採用する。その手段を構成する技術的事項の記述には、［特許請求の範囲］の記載と［発明を実施するための形態］の記載との対応関係を明らかにするために、［発明を実施するための形態］で使用される番号・符号が付加されている。ただし、付加された番号・符号は、［特許請求の範囲］に記載されている発明の技術的範囲を限定的に解釈するために用いてはならない。
【００１５】
本発明によるコンピュータシステムは、通信経路上のスイッチ（４ｉ）に対して、フローエントリを設定するコントローラ（１）と、コントローラ（１）によって設定されたフローエントリに従って、受信パケットの中継処理を行うスイッチ（４ｉ）と、スイッチ（４ｉ）を介して自身に接続された複数のクライアント端末（２１〜２ｎ）のそれぞれに対して、サービスを提供する複数のサービス提供サーバ（３１〜３ｍ）と、ラウンドロビン機能によって、複数のクライアント端末（２１〜２ｎ）と複数のサービス提供サーバ（３１〜３ｍ）と間の負荷分散を行うＤＮＳ（Ｄｏｍａｉｎ  Ｎａｍｅ  Ｓｙｓｔｅｍ）サーバ（５）とを具備する。複数のサービス提供サーバ（３１〜３ｍ）のそれぞれは、それぞれの負荷状況を監視し、自身に対する負荷が閾値以上であると判定すると、負荷分散要求をコントローラ（１）に発行する。コントローラ（１）は、負荷分散要求に応じて、スイッチ（４ｉ）に設定したフローエントリを変更する。
【００１６】
本発明による負荷分散方法は、コントローラ（１）が、通信経路上のスイッチ（４ｉ）に対して、フローエントリを設定するステップと、スイッチ（４ｉ）が、コントローラ（１）によって設定されたフローエントリに従って、受信パケットの中継処理を行うステップと、複数のサービス提供サーバ（３１〜３ｍ）のそれぞれが、スイッチ（４ｉ）を介して自身に接続された複数のクライアント端末（２１〜２ｎ）のそれぞれに対して、サービスを提供するステップと、ＤＮＳサーバ（５）が、ラウンドロビン機能によって、複数のクライアント端末（２１〜２ｎ）と複数のサービス提供サーバ（３１〜３ｍ）と間の負荷分散を行うステップと、複数のサービス提供サーバ（３１〜３ｍ）のそれぞれが、それぞれの負荷状況を監視するステップと、複数のサービス提供サーバ（３１〜３ｍ）のそれぞれが、自身に対する負荷が閾値以上であると判定すると、負荷分散要求をコントローラ（１）に発行するステップと、コントローラ（１）が、前記負荷分散要求に応じて、スイッチ（４ｉ）に設定したフローエントリを変更するステップとを具備する。
【発明の効果】
【００１７】
本発明によれば、オープンフローコントローラの処理負荷の増大を抑制しつつ、オープンフロー技術を利用した負荷分散を実現できる。
【図面の簡単な説明】
【００１８】
【図１】図１は、本発明によるコンピュータシステムの実施の形態における構成を示す図である。
【図２】図２は、本発明によるサービス提供サーバの実施の形態における構成を示す図である。
【図３】図３は、本発明によるオープンフローコントローラの実施の形態における構成を示す図である。
【図４】図４は、本発明によるオープンフローコントローラが保持するフローテーブルの一例を示す図である。
【図５】図５は、本発明によるオープンフローコントローラが保持するトポロジ情報の一例を示す図である。
【図６】図６は、本発明によるオープンフローコントローラが保持する通信経路情報の一例を示す図である。
【図７】図７は、本発明によるオープンフロースイッチの実施の形態における構成を示す図である。
【図８】図８は、オープンフロースイッチが保持するフローテーブルの一例を示す図である。
【図９】図９は、本発明に係るオープンフロー制御を説明するための図である。
【図１０Ａ】図１０Ａは、本発明によるコンピュータシステムの実施の形態における負荷分散動作の一例を示すシーケンス図である。
【図１０Ｂ】図１０Ｂは、本発明によるコンピュータシステムの実施の形態における負荷分散動作の一例を示すシーケンス図である。
【図１１Ａ】図１１Ａは、本発明によるオープンフロースイッチに設定されたフローテーブルの一例を示す図である。
【図１１Ｂ】図１１Ｂは、本発明によるオープンフローコントローラによって更新されたフローテーブルの一例を示す図である。
【図１２】図１２は、本発明によるコンピュータシステムの実施の形態における負荷分散後のパケット転送動作の一例を示すシーケンス図である。
【図１３】図１３は、負荷状況が改善した場合の、通信経路復帰動作の一例を示すシーケンス図である。
【発明を実施するための形態】
【００１９】
（概要）
本発明によるコンピュータシステムでは、通常動作時、ＤＮＳラウンドロビン機能により負荷分散を行い、１つのサーバに負荷が集中した場合、オープンフローコントローラによるフローテーブルの変更によって、クライアントのアクセス先サーバを変更する。これにより、ラウンドロビン機能による負荷分散方法で対処できない負荷の集中を防止するとともに、オープンフローコントローラにおける通信経路の変更処理に係る処理負荷を軽減することができる。
【００２０】
オープンフロー（プログラマブルフローとも呼ぶ）は新しい技術であるため、その処理量についての検討はまだ進んでいないが、本発明では、オープンフロー技術を用いた負荷分散方法と、それに伴う処理量を抑制する方法を実現している。
【００２１】
以下、添付図面を参照しながら本発明の実施の形態を説明する。図面において同一、又は類似の参照符号は、同一、類似、又は等価な構成要素を示す。
【００２２】
（コンピュータシステムの構成）
図１を参照して、本発明によるコンピュータシステムの構成を説明する。図１は、本発明によるコンピュータシステムの実施の形態における構成を示す図である。本発明によるコンピュータシステムは、オープンフローを利用して通信経路の構築及びパケットデータの転送制御を行う。図１を参照して、本発明によるコンピュータシステムは、オープンフローコントローラ１（以下、ＯＦＣ１と称す）、複数のクライアント端末２１〜２ｎ（以下、クライアント２１〜２ｎと称す）、複数のサービス提供サーバ３１〜３ｍ（以下、サーバ３１〜３ｍと称す）、複数のオープンフロースイッチ４１〜４ｉ（以下、ＯＦＳ４１〜４ｉと称す）を有するスイッチ群４、ＤＮＳサーバ５を具備する。ただし、ｍ、ｎ、ｉは２以上の自然数である。又、クライアント２１〜２ｎを区別せずに総称する場合はクライアント２ｎと称し、サーバ３１〜３ｍを区別せずに総称する場合はサーバ３ｍと称し、ＯＦＳ４１〜４ｉを区別せずに総称する場合はＯＦＳ４ｉと称して説明する。
【００２３】
クライアント２ｎ、ＯＦＳ群４、ＤＮＳサーバ５は、ＬＡＮ６（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を介して接続される。又、ＯＦＣ１やサーバ３ｍはＯＦＳ群４を介してＬＡＮ６に接続される。ＤＮＳサーバ５は、ＬＡＮ６に接続するノード（クライアント２ｎやサーバ３ｍ）に対する名前解決を行う。詳細には、ＤＮＳサーバ５は、１つのホスト名に対して複数のＩＰアドレスを返却するためのラウンドロビンによる名前解決の機能（ラウンドロビン機能）を備える。ＤＮＳサーバ５は、クライアント２ｎから名前解決の問い合わせがあった場合に、プールされたＩＰアドレスから順番にＩＰアドレスを返却する。本発明に係るＤＮＳサーバ５は、一般的なラウンドロビン機能を備えることが好適である。
【００２４】
クライアント２ｎは、図示しないＣＰＵ、ネットワークインタフェース（Ｉ／Ｆ）、及びメモリを備えるコンピュータ装置であり、メモリ内のプログラムを実行することでサーバ３ｍとの間で通信を行う。
【００２５】
サーバ３ｍは、ＣＰＵ３０１、ネットワークＩ／Ｆ３０２、及びメモリ３０３を備えるコンピュータ装置である。メモリ３０３には、サービス提供用プログラム３１０及びフロー制御用サーバへの通知用プログラム３２０が格納されている。サーバ３ｍは、ＣＰＵ３０１によってサービス提供用プログラム３１０を実行することで、図２に示すサービス提供部３１１の機能を実現する。
【００２６】
サービス提供部３１１は、ネットワークＩ／Ｆ３０２を制御して、クライアント２ｎや他のサーバ３ｍとの間で通信を行う。クライアント２ｎや他のサーバ３ｍと間の通信は、スイッチ群４を介して行われる。又、サービス提供部３１１は、データベースやファイル共有機能などの業務サービスをクライアント２ｎに提供する。サービス提供部３１１が提供するサービス内容に応じて、サーバ３ｍは、Ｗｅｂサーバ、ファイルサーバ、アプリケーションサーバのいずれかに例示される機能を実現する。例えば、サーバ３ｍがＷｅｂサーバとして機能する場合、クライアント２ｎの要求に従い、メモリ３０３内の図示しないＨＴＭＬ文書や画像データをクライアント２ｎに転送する。
【００２７】
サービス提供部３１１は、他のサーバ３ｍと通信を行うことで、アクセスするクライアントに対して他のサーバ３ｍと同一の処理を実行できる。
【００２８】
又、サーバ３ｍは、ＣＰＵ３０１によってフロー制御用サーバへの通知用プログラム３２０を実行することで、図２に示す負荷監視部３１２の機能を実現する。負荷監視部３１２は、クライアント２ｎからのアクセスに応じた負荷を監視する。又、負荷監視部３１２は、アクセスに応じた負荷が、予め設定された基準値（閾値）以上であるか否かを判定する。この判定は、所定の周期や任意の時期に行われても良いし、クライアントからのアクセスの都度、行われても良い。更に、負荷監視部３１２は、負荷が閾値以上である場合、当該負荷に対応するクライアント２ｎを特定し、ＯＦＣ１に通知する。
【００２９】
例えば、負荷監視部３１２は、サーバ３ｍへの同時接続数を所定の周期で監視及び判定し、同時接続数が基準値以上となった場合、判定時において接続中のクライアント２ｎのＩＰアドレスをＯＦＣ１に通知するとともに、負荷分散要求を発行する。あるいは、負荷監視部３１２は、サーバ３ｍへの同時接続数をアクセスの都度監視及び判定し、同時接続数が基準値に達した場合、負荷監視部は、判定時において接続中のクライアント２ｎのＩＰアドレスをＯＦＣ１に通知するとともに、負荷分散要求を発行する。
【００３０】
負荷状況の監視及び判定は、クライアントの接続数の監視に限らず、ＣＰＵ３０１に対する負荷を監視し、当該負荷が基準値以上となったか否かを判定しても良い。
【００３１】
サーバ３ｍのネットワークＩ／Ｆ３０２には、複数のＩＰアドレス“１”〜ＩＰアドレス“ｋ”（ｋは任意の数）が設定されている。ネットワークインタフェースＩ／Ｆ３０２に設定されたＩＰアドレスの数とサーバ３ｍの数は特に関係性は無いものとする。又、サーバ３１〜３ｍには同じホスト名（ＦＱＤＮ）が与えられ、１つの仮想サーバ１０として機能することが好適である。更に、ＯＦＣ１にもサーバ３１〜３ｍと同じホスト名が与えられてもよい。
【００３２】
ＯＦＣ１は、オープンフロー技術により、システム内におけるパケット転送に係る通信経路パケット転送処理を制御するスイッチ制御部１１を備える。オープンフロー技術とは、コントローラ（ここではＯＦＣ１）が、ルーティングポリシー（フローエントリ：フロー＋アクション）に従い、マルチレイヤ及びフロー単位の経路情報をＯＦＳ４ｉに設定し、経路制御やノード制御を行う技術を示す（詳細は、非特許文献１を参照）。これにより、経路制御機能がルータやスイッチから分離され、コントローラによる集中制御によって最適なルーティング、トラフィック管理が可能となる。オープンフロー技術が適用されるＯＦＳ４ｉは、従来のルータやスイッチのようにパケットやフレームの単位ではなく、ＥＮＤ２ＥＮＤのフローとして通信を取り扱う。
【００３３】
ＯＦＣ１は、ＯＦＳ４ｉが保持するフローテーブル４０３にフローエントリ（ルール１４４＋アクション情報１４５）を設定することで、当該ＯＦＳ４ｉの動作（例えばパケットデータの中継動作）を制御する。
【００３４】
図１及び図３を参照して、ＯＦＣ１の構成の詳細を説明する。図３は、本発明によるＯＦＣ１の構成を示す図である。ＯＦＣ１は、ＣＰＵ１０１、ネットワークＩ／Ｆ１０２、及びメモリ１０３を備えるコンピュータによって実現される。ＯＦＣ１では、ＣＰＵ１０１がメモリ１０３に格納されたフローコントロール用プログラム１１０を実行することで、図３に示すスイッチ制御部１１、フロー管理部１２、フロー生成部１３の各機能が実現される。又、ＯＦＣ１は、メモリ１０３に格納されたフローテーブル１４、トポロジ情報１５、通信経路情報１６を備える。
【００３５】
スイッチ制御部１１は、フローテーブル１４に従ってＯＦＳ４ｉ毎にフローエントリ（ルール＋アクション）の設定又は削除を行う。ＯＦＳ４ｉは、設定されたフローエントリを参照し、受信パケットのヘッダ情報に応じたルールに対応するアクション（例えばパケットデータの中継や破棄）を実行する。ルール、及びアクションの詳細は後述する。
【００３６】
スイッチ制御部１１は、ＯＦＳ４ｉからのファーストパケットの受信通知や、サーバ３ｍからの負荷分散要求に応じてＯＦＳ４ｉに対してフローエントリ（フロー＋アクション）の設定、削除又は更新を行う。ここでファーストパケットとは、ＯＦＳ４ｉに設定されたルール１４４に適合しないパケットデータを示す。又、スイッチ制御部１１は、サーバ３ｍから、負荷の軽減に応じて発行された設定復帰要求を受けると、負荷分散要求に応じて変更したフローエントリを元のフローエントリに変更することが好ましい。この際、後述する設定情報１４６を参照して、変更前のフローテーエントリを特定し、これを用いてフローエントリを元に戻す。
【００３７】
図４は、ＯＦＣ１が保持するフローテーブル１４の構成の一例を示す図である。図４を参照して、フローテーブル１４には、フローエントリを特定するためのフロー識別子１４１、当該フローエントリの設定対象（ＯＦＳ４ｉ）を識別する識別子（対象装置１４２）、経路情報１４３、ルール１４４、アクション情報１４５、設定情報１４６が対応付けられて設定される。フローテーブル１４には、ＯＦＣ１の制御対象となる全てのＯＦＳ４に対して生成されたフローエントリ（ルール１４４＋アクション情報１４５）が設定される。又、フローテーブル１４には、フロー毎のＱｏＳや暗号化に関する情報など、通信の扱い方が定義されても構わない。
【００３８】
ルール１４４には、例えば、ＴＣＰ／ＩＰのパケットデータにおけるヘッダ情報に含まれる、ＯＳＩ（Ｏｐｅｎ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ）参照モデルのレイヤ１からレイヤ４のアドレスや識別子の組み合わせが規定される。例えば、図９に示すレイヤ１の物理ポート、レイヤ２のＭＡＣアドレス、レイヤ３のＩＰアドレス、レイヤ４のポート番号、ＶＬＡＮタグ（ＶＬＡＮ  ｉｄ）のそれぞれの組み合わせがルール１４４として設定される。尚、ＶＬＡＮタグには、優先順位（ＶＬＡＮ  Ｐｒｉｏｒｉｔｙ）が付与されていても良い。
【００３９】
ここで、ルール１４４に設定されるポート番号等の識別子やアドレス等は、所定の範囲で設定されても構わない。又、宛先や送信元のアドレス等を区別してルール１４４として設定されることが好ましい。例えば、ＭＡＣ宛先アドレスの範囲や、接続先のアプリケーションを特定する宛先ポート番号の範囲、接続元のアプリケーションを特定する送信元ポート番号の範囲がルール１４４として設定される。更に、データ転送プロトコルを特定する識別子をルール１４４として設定してもよい。
【００４０】
アクション情報１４５には、例えばＴＣＰ／ＩＰのパケットデータを処理する方法が規定される。例えば、受信パケットデータを中継するか否かを示す情報や、中継する場合はその送信先が設定される。又、アクション情報１４５には、パケットデータの複製や、破棄することを指示する情報が設定されてもよい。
【００４１】
経路情報１４３は、フローエントリ（ルール１４４＋アクション情報１４５）を適用する経路を特定する情報である。これは、後述する通信経路情報１６に対応付けられた識別子である。
【００４２】
設定情報１４６は、フローエントリ（ルール１４４＋アクション情報１４５）が現在、通信経路上のＯＦＳ４に設定されているか否かを示す情報（「設定済み」又は「未設定」）を含む。設定情報１４６は、対象装置１４２や経路情報１４３に対応付けられているため、通信経路にフローが設定されているか否かを確認できるとともに、通信経路上のＯＦＳ４毎にフローが設定されているか否かを確認することができる。
【００４３】
又、設定情報１４６には、負荷が基準値以上であるために変更されたフローエントリを特定する情報（変更情報と称す）を含むことが好ましい。例えば、変更情報として、変更前のフローエントリと変更後のフローエントリとを対応づけるための情報が好適に設定される。
【００４４】
フロー管理部１２は、フロー生成部１３によって生成されたフロー（ルール１４４＋アクション情報１４５）にフロー識別子１４１をつけて記憶装置に記録する。この際、フローエントリを適用する通信経路の識別子（経路情報１４３）やフローエントリを適用するＯＦＳ４の識別子（対象装置４４２）が、フローエントリ（ルール１４４＋アクション情報１４５）に付されて記録される。
【００４５】
又、フロー管理部１２は、フローテーブル１４を参照して、ファーストパケットのヘッダ情報や、サーバ３ｍから通知された送信元のＩＰアドレス等に対応するフローエントリ（ルール１４４＋アクション情報１４５）を抽出し、スイッチ制御部１１に通知する。スイッチ制御部１１は、通知されたフローエントリ（ルール１４４＋アクション情報１４５）を、当該フローエントリに対応付けられた対象装置１４２（ＯＦＳ４）に設定する。
【００４６】
更に、フロー管理部１２は、スイッチ制御部１１によって設定されたフローエントリ（ルール１４４＋アクション情報１４５）の設定情報１４６を設定済みとする。又、負荷分散処理により、他のフローエントリに変更されたフローエントリの設定情報を未設定に変更し、当該他のフローエントリと未設定としたフローエントリとを対応付ける。
【００４７】
フロー生成部１３は、ＯＦＳ４ｉからのファーストパケットの受信通知に応じて、又はサーバ３ｍからの負荷分散要求に応じてフローエントリ（ルール１４４＋アクション情報１４５）を生成する。
【００４８】
フロー生成部１３は、ファーストパケットの通知に応じてフローエントリを生成する場合、ＯＦＳ４ｉから通知されたファーストパケットのヘッダ情報に基づいて通信経路を算出し、当該通信経路上のＯＦＳ４ｉに設定するフローエントリ（ルール１４４＋アクション情報１４５）を生成する。詳細には、フロー生成部１３は、ファーストパケットのヘッダ情報から、パケットデータの送信元のクライアント２ｎと宛先のサーバ３ｍを特定し、トポロジ情報１５を用いて通信経路を算出し、算出結果を通信経路情報１３６として記憶装置に記録する。ここでは、通信経路の端点となるサーバ３ｍと、通信経路上のＯＦＳ４ｉ及びそれぞれの接続関係が通信経路情報１３６として設定される。又、フロー生成部１３は、通信経路情報１３６に基づいて通信経路上のＯＦＳ４ｉに設定するフローエントリ（ルール１４４＋アクション情報１４５）を設定する。
【００４９】
あるいは、フロー生成部１３は、負荷分散要求に応じてフローエントリを生成する場合、サーバ３ｍから通知された送信元ＩＰアドレスと要求元のサーバ３ｍとに基づいて通信経路を算出し、当該通信経路上のＯＦＳ４ｉに設定するフローエントリ（ルール１４４＋アクション情報１４５）を生成する。この際、フロー生成部１３は、要求元のサーバ３ｍへの負荷を軽減させるフローエントリ（ルール１４４＋アクション情報１４５）を生成する。例えば、フロー生成部１３は、要求元のサーバ３ｍ宛のパケットデータの一部又は全部が、要求元のサーバ３ｍ以外のサーバに転送されるようにＯＦＳ４ｉを制御するフローエントリ（ルール１４４＋アクション情報１４５）を生成することが好ましい。
【００５０】
より具体的には、フロー生成部１３は、通知された送信元ＩＰアドレスのクライアント２ｎから、要求元のサーバ３ｍに宛てたパケットデータを要求元のサーバ３ｍに転送するフローエントリと、通知された送信元ＩＰアドレス以外のＩＰアドレスのクライアント２ｎから、要求元のサーバ３ｍに宛てたパケットデータを要求元のサーバ３ｍ以外のサーバに転送するフローエントリとを生成する。あるいは、フロー生成部１３は、所定の期間、要求元のサーバ３ｍ宛のパケットデータを、当該サーバ３ｍ以外のサーバに転送するようなフローエントリを生成する。
【００５１】
負荷分散要求に応じてフローエントリを生成する場合も、上述と同様に、新たに指定した送信元のクライアントと宛先サーバとの間の通信経路を、トポロジ情報１５を用いて算出し、算出結果を通信経路情報１３６として記憶装置に記録する。又、フロー生成部１３は、通信経路情報１３６に基づいて通信経路上のＯＦＳ４ｉに設定するフローエントリ（ルール１４４＋アクション情報１４５）を設定する。
【００５２】
図５は、本発明によるオープンフローコントローラが保持するトポロジ情報の一例を示す図である。トポロジ情報１５は、ＯＦＳ４ｉやサーバ３ｍ等の接続状況に関する情報を含む。具体的には、トポロジ情報１５として、ＯＦＳ４ｉやサーバ３ｍを特定する装置識別子１５１に、当該装置のポート数１５２やポート接続先情報１５３が対応付けられて記憶装置に記録される。ポート接続先情報１５３は、接続相手を特定する接続種別（スイッチ／ノード／外部ネットワーク）や接続先を特定する情報（ＯＦＳ４の場合はスイッチＩＤ、ホストの場合はＭＡＣアドレス、外部ネットワーク（例示：インターネット）の場合は外部ネットワークＩＤ）が含まれる。
【００５３】
図６は、本発明によるオープンフローコントローラが保持する通信経路情報の一例を示す図である。通信経路情報１６は、通信経路を特定するための情報である。詳細には、通信経路情報１３６として、サーバ３ｍや外部ネットワークインタフェース（図示なし）を端点として指定する端点情報１６１と、通過するＯＦＳ４ｉとポートの対群を指定する通過スイッチ情報１６２と、付随情報１６３とが対応付けられて記憶装置に記録される。例えば、通信経路がサーバ３ｍ間を接続する経路である場合、各サーバ３ｍのＭＡＣアドレスが端点情報１６１として記録される。通過スイッチ情報１６２は、端点情報１６１で示される端点間の通信経路上に設けられるＯＦＳ４ｉの識別子を含む。又、通過スイッチ情報１６２は、当該ＯＦＳ４ｉに設定されるフローエントリ（ルール１４４＋アクション情報１４５）と当該ＯＦＳ４ｉとを対応づけるための情報を含んでも良い。付随情報１６３は、端点が変更された後の経路上のＯＦＳ４（通過スイッチ）に関する情報を含む。
【００５４】
以上のような構成により、本発明によるＯＦＣ１は、ＯＦＳ４ｉからのファーストパケットの受信通知や、サーバ３ｍからの負荷分散要求に応じて、当該パケットを転送させるためのフローエントリを生成するとともに、生成したフローエントリを、算出した通信経路上のＯＦＳ４ｉに設定する。
【００５５】
尚、ＯＦＣ１はサーバ３１〜３ｍと異なる装置であっても、サーバ３１〜３ｍのいずれかに搭載されていても良い。
【００５６】
図７は、本発明によるオープンフロースイッチの実施の形態における構成を示す図である。ＯＦＳ４ｉは、ＯＦＣ１によって設定（更新）されたフローテーブル４０３に従って受信パケットの処理方法（アクション）を決定する。ＯＦＳ４ｉは、転送処理部４０１とフロー設定部４０２を備える。転送処理部４０１とフロー設定部４０２は、ハードウェアで構成されても、ＣＰＵによって実行されるソフトウェアで実現してもどちらでも良い。
【００５７】
ＯＦＳ４ｉの記憶装置には、図８に示すようなフローテーブル４０３が設定される。フロー設定部４０２は、ＯＦＣ１から取得したフローエントリ（ルール１４４＋アクション情報１４５）をフローテーブル４０３に設定する。詳細には、フロー設定部４０２は、受信パケットのヘッダ情報が、フローテーブル４０３に記録されたルール１４４に適合（又は一致）しない場合、当該パケットデータをファーストパケットとして判定し、ファーストパケットを受信したことをＯＦＣ１に通知するとともにフローエントリの設定要求を発行する。
【００５８】
そして、フロー設定部４０２は、ファーストパケットの通知に応じてＯＦＣ１から送信されるフローエントリ（ルール１４４＋アクション情報１４５）を、フローテーブル４０３に設定する。このように、ファーストパケットの受信をトリガとして、ＯＦＳ４１〜２ｎのそれぞれにはフローエントリに設定される。
【００５９】
受信パケットのヘッダ情報が、フローテーブル４０３に記録されたルール１４４に適合（一致）する場合、当該パケットデータは、転送処理部４０１によって、他のＯＦＳ４ｉ又はサーバ３ｍに転送される。詳細には、転送処理部４０１は、パケットデータのヘッダ情報に適合（又は一致）するルール１４４に対応するアクション情報１４５を特定する。転送処理部４０１は、当該アクション情報１４５で指定された転送先のノード（ＯＦＳ４ｉ又はサーバ３ｍ）に当該パケットデータを転送する。
【００６０】
具体的には、ルール１４４：ＭＡＣ送信元アドレス（Ｌ２）が“Ａ１〜Ａ３”、ＩＰ宛先アドレス（Ｌ３）が“Ｂ１〜Ｂ３”、プロトコルが“ｈｔｔｐ”、宛先ポート番号（Ｌ４）が“Ｃ１〜Ｃ３”と、アクション情報１４５：“サーバ３１に中継”とが対応付けられているフローが設定されたＯＦＳ４ｉの動作を説明する。ＭＡＣ送信元アドレス（Ｌ２）が“Ａ１”、ＩＰ宛先アドレス（Ｌ３）が“Ｂ２”、プロトコルが“ｈｔｔｐ”、宛先ポート番号（Ｌ４）が“Ｃ３”であるパケットデータを受信した場合、ＯＦＳ４ｉは、ヘッダ情報が当該ルール１４４に一致していると判断し、受信したパケットデータをサーバ３１に転送する。一方、ＭＡＣ送信元アドレス（Ｌ２）が“Ａ５”、ＩＰ宛先アドレス（Ｌ３）が“Ｂ２”、プロトコルが“ｈｔｔｐ”、宛先ポート番号（Ｌ４）が“Ｃ４”であるパケットデータを受信した場合、ＯＦＳ４ｉは、ヘッダ情報が当該ルール１４４に一致（適合）しないと判断し、ファーストパケット受信の旨をＯＦＣ１に通知する。
【００６１】
以上のような構成により、本発明によるＯＦＳ４対するフローテーブルの更新は、ＯＦＳ４ｉにおけるファーストパケットの受信をトリガとして実行されるだけではなく、サーバ３ｍにおける負荷の監視結果に応じた負荷分散要求をトリガとしても実行される。サーバ３ｍからの負荷分散要求に応じて設定されるフローエントリは、要求元のサーバ３ｍにおける負荷が軽減されるようなフローエントリであることが好ましい。
【００６２】
（負荷分散方法）
図１０Ａ、Ｂから図１３を参照して、本発明によるコンピュータシステムにおける負荷分散動作の詳細を説明する。以下では、サーバ３１に集中した負荷を分散する場合を一例に説明する。
【００６３】
先ず、前提条件として、ＯＦＣ１は、ＯＦＳ４１〜４ｉのそれぞれのフローテーブル４０３に、フローエントリ（ルール１４４＋アクション情報１４５）を設定しているものとする。ここでは、ＯＦＳ４１のフローテーブル４０３に図１１Ａに示すようなフローエントリが設定されている。図１１Ａに示すフローテーブル４０３に従った場合、ＯＦＳ４１は、その送信元ＩＰアドレス（アクセス元ＩＰアドレス）に関わらず、宛先ＩＰアドレス（アクセス先ＩＰアドレス）がＩＰアドレス“１”のパケットデータをサーバ３１に転送し、宛先ＩＰアドレス（アクセス先ＩＰアドレス）がＩＰアドレス“２”のパケットデータをサーバ３２に転送する。
【００６４】
図１０Ａ及び図１０Ｂは、本発明によるコンピュータシステムの実施の形態における負荷分散動作の一例を示すシーケンス図である。図１０Ａ及び図１０Ｂを参照して、先ず、クライアント２１は仮想サーバ１０にアクセスするため、仮想サーバ１０のホスト名の名前解決要求をＤＮＳサーバ５に発行する（ステップＳ１０１）。ＤＮＳサーバ５は、クライアント２１からの名前解決要求に対して、ラウンドロビンのルールに基づき、プールされているＩＰアドレスを１つ返却する（ステップＳ１０２）。ここではＩＰアドレス“１”を返却したものとする。
【００６５】
クライアント２１は、ＤＮＳサーバ５から取得したＩＰアドレス“１”を使って仮想サーバ１０にアクセスする（ステップＳ１０３、Ｓ１０４）。詳細には、クライアント２１は、仮想サーバ１０宛てのパケットデータの宛先アドレスとしてＩＰアドレス“１”を設定し、自身のＩＰアドレス“Ａ”を送信元アドレスとして設定し、ＯＦＳ４１に転送する（ステップＳ１０３）。ＯＦＳ４１は、受信パケットに適合するフローエントリに従って、当該パケットデータを処理する。ここでは、図１１Ａに示すフローテーブル４０３に従い、宛先ＩＰアドレスがＩＰアドレス“１”であるため、転送先に設定されたサーバ３１に、受信したパケットデータを転送する（ステップＳ１０４）。
【００６６】
サーバ３１は、パケットデータを受信すると、パケットデータの内容に従った処理を行う（ステップＳ１０５）。処理内容については、パケットデータの内容、及びサービス提供用プログラム３１０に応じたサービス提供処理が実行される。これと並行して、サーバ３１は、自身の負荷状況を監視及び負荷が過大か否かを判断する（ステップＳ１０６）。例えば、サーバ３１は、自身への同時接続数が所定の基準値以上であるか否かを判定する。
【００６７】
ステップＳ１０６において、サーバ３１への負荷（ここでは同時接続数）がサーバ３１にあらかじめ設定していた基準値（ここでは最大接続数）以下である場合、通常通り、クライアント２ｎからのアクセスを待ち受ける（ステップＳ１０６Ｎｏ）。
【００６８】
一方、ステップＳ１０６において、サーバ３１への負荷（ここでは同時接続数）がサーバ３１にあらかじめ設定していた基準値（ここでは最大接続数）以上である場合、ＯＦＣ１に負荷分散要求を発行する（ステップＳ１０６Ｙｅｓ、Ｓ１０７）。この際、負荷状況の判定時にサーバ３１へ接続中のすべてのクライアントのＩＰアドレスを、ＯＦＣ１に通知する。
【００６９】
ＯＦＣ１は、負荷分散要求に応じて、サーバ３１に接続しているクライアント以外のクライアントが以後、サーバ３１にアクセスしないような通信経路を算出し、当該通信経路上のＯＦＳ４ｉ、及びサーバ３１宛てのパケットが通過する通信経路上のＯＦＳ４ｉに設定するフローエントリ（ルール１４４＋アクション情報１４５）を生成する（ステップＳ１０８）。例えば、通知された接続中のＩＰアドレスがＩＰアドレス“Ａ”及び“Ｂ”である場合、ＯＦＣ１は、送信元アドレスがＩＰアドレス“Ａ”又は“Ｂ”、宛先アドレスがＩＰアドレス“１”のパケットデータを、サーバ３１に転送するフローエントリと、送信元アドレスがＩＰアドレス“Ａ”及び“Ｂ”以外のアドレスであり、宛先アドレスがＩＰアドレス“１”であるパケットデータを、サーバ３１以外のサーバ（例えばサーバ３２）に転送するフローエントリとを作成する。
【００７０】
ＯＦＣ１は、作成したフローエントリを、新たに算出した通信経路（以下、新通信経路と称す）上のＯＦＳ４ｉに設定するとともに、サーバ３１へのアクセスに使用した通信経路（以下、旧通信経路と称す）上のＯＦＳ４ｉに設定されていたサーバ３１にアクセスするためのフローエントリを削除する（ステップＳ１０９、Ｓ１１０）。例えばＯＦＳ４１、ＯＦＳ４２を介してサーバ３２に至る経路が新通信経路として算出された場合、ＯＦＣ１は、フローエントリの設定指示を新通信経路上のＯＦＳ４１、４２に発行する（ステップＳ１０９）。この際、ＯＦＳ４１は、旧通信経路上のスイッチであるため、ＯＦＣ１は、ＯＦＳ４１に設定していたサーバ３１を転送先とするフローエントリの削除指示を発行する。
【００７１】
ＯＦＳ４１、４２はＯＦＣ１から送信されたフローエントリを自身のフローテーブル４０３に設定する（ステップＳ１１０）。例えば、ＯＦＳ４１のフローテーブル４０３は、図１１Ｂに示すように更新される。ここでは、ＯＦＳ４１のフローテーブル４０３から、図１１Ａに示す転送先をサーバ３１としたフローエントリが削除され、図１１Ｂに示す新たなフローエントリが追加される。ここでは、送信元ＩＰアドレス（アクセス元ＩＰアドレス）がＩＰアドレス“Ａ”又は“Ｂ”であり、宛先ＩＰアドレス（アクセス先ＩＰアドレス）がＩＰアドレス“１”のパケットデータをサーバ３１に転送するフローエントリと、送信元ＩＰアドレスがＩＰアドレス“Ａ”、“Ｂ”以外のアドレスであり、宛先ＩＰアドレスがＩＰアドレス“１”のパケットデータを、ＯＦＳ４２に転送するフローエントリとが追加設定される。一方、ＯＦＳ４２のフローテーブル４０３には、図示しないが、送信元ＩＰアドレスがＩＰアドレス“Ａ”又は“Ｂ”以外のアドレスであり、宛先ＩＰアドレスがＩＰアドレス“１”のパケットデータをサーバ３２に転送するフローエントリが新たに設定される。
【００７２】
ＯＦＳ４ｉのフローテーブルが更新されて以降、ＩＰアドレス“Ａ”、”Ｂ”のクライアントから、ＩＰアドレス“１”を宛先アドレスとして仮想サーバ１０へアクセスする場合、当該クライアントは、サーバ３１へアクセスすることとなる。一方、ＩＰアドレス“Ａ”、”Ｂ”以外のクライアントから、ＩＰアドレス“１”を宛先アドレスとして仮想サーバ１０へアクセスする場合、当該クライアントは、サーバ３２へアクセスすることとなる。図１２を参照して、ＯＦＣ１による負荷分散処理移行のパケットデータの転送動作について説明する。
【００７３】
現在接続中のクライアント２１（ＩＰアドレス“Ａ”）からＩＰアドレス“１”を宛先としたパケットが送信されると、ＯＦＳ４１は、受信パケットに適合するフローエントリに従って、当該パケットデータを処理する（ステップＳ２０１、Ｓ２０２）。ここでは、図１１Ｂに示すフローテーブル４０３に従い、送信元ＩＰアドレスがＩＰアドレス“Ａ”、宛先ＩＰアドレスがＩＰアドレス“１”であるため、転送先に設定されたサーバ３１に、受信したパケットデータが転送される（ステップＳ２０２）。
【００７４】
サーバ３１は、パケットデータを受信すると、パケットデータの内容に従った処理を行う（ステップＳ２０３）。処理内容については、パケットデータの内容、及びサービス提供用プログラム３１０に応じたサービス提供処理が実行される。上述と同様に、サーバ３１は、自身の負荷状況を監視及び負荷が過大か否かを判断し、判断結果に応じてＯＦＳ４ｉのフローテーブル４０３を変更する。
【００７５】
一方、クライアン２３は仮想サーバにアクセスするため、当該仮想サーバのホスト名の名前解決要求をＤＮＳサーバ５に発行する（ステップＳ２０４）。ＤＮＳサーバ５は、クライアント２３からの名前解決要求に対して、ラウンドロビンのルールに基づき、プールされているＩＰアドレスを１つ返却する（ステップＳ２０５）。ここではＩＰアドレス“１”を返却したものとする。
【００７６】
クライアント２３は、ＤＮＳサーバ５から取得したＩＰアドレス“１”を使って仮想サーバ１０にアクセスする（ステップＳ２０６〜Ｓ２０８）。詳細には、クライアント２３は、仮想サーバ１０宛てのパケットデータの宛先アドレスとしてＩＰアドレス“１”を設定し、自身のＩＰアドレス“Ｃ”を送信元アドレスとして設定して、ＯＦＳ４１に転送する（ステップＳ２０６）。ＯＦＳ４１は、受信パケットに適合するフローエントリに従って、当該パケットデータを処理する。ここでは、図１１Ｂに示すフローテーブル４０３に従い、送信元ＩＰアドレスがＩＰアドレス“Ｃ”、宛先ＩＰアドレスがＩＰアドレス“１”であるため、転送先に設定されたＯＦＳ４２に、受信したパケットデータを転送する（ステップＳ２０７）。
【００７７】
ＯＦＳ４２は、受信パケットに適合するフローエントリに従って、当該パケットデータを処理する（ステップＳ２０８）。ここでは、自身のフローテーブル４０３に従い、送信元ＩＰアドレスがＩＰアドレス“Ｃ”、宛先ＩＰアドレスがＩＰアドレス“１”であるため、転送先に設定されたサーバ３２に、受信したパケットデータを転送する。
【００７８】
サーバ３２は、パケットデータを受信すると、パケットデータの内容に従った処理を行う（ステップＳ２０９）。処理内容については、パケットデータの内容、及びサービス提供用プログラム３１０に応じたサービス提供処理が実行される。図示しないが、サーバ３１と同様に、サーバ３２は、自身の負荷状況を監視及び負荷が過大か否かを判断し、判断結果に応じてＯＦＳ４ｉのフローテーブル４０３を変更する。
【００７９】
以上のように、本発明では、通常動作時においては、ＤＮＳサーバ５のラウンドロビン機能によって負荷分散が行われ、同一サーバに負荷が集中した場合は、ＯＦＣ１によってフローテーブル４０３が更新されることで、負荷の集中を分散することができる。
【００８０】
ラウンドロビン機能のみで負荷分散を行ったとしても、少数のクライアントから高い負荷を加えるような運用がされた場合、１つのサーバに負荷が偏ってしまう可能性がある。本発明では、このような負荷の集中を、ＯＦＣ１による通信経路の変更処理によって回避することができる。すなわち、ＤＮＳでウンドロビンによる負荷制御が十分に機能せず、特定のサーバに負荷が偏ってきた場合に初めてＯＦＣ１による負荷分散が行われる。
【００８１】
又、ＯＦＣ１によるフロー制御機能のみを利用して負荷分散を行っても良いが、この機能のみを使用して負荷分散を行った場合、負荷の偏り（集中）の発生頻度が高まると、ＯＦＣ１における処理負荷が増大してしまう。又、フローテーブルの変更頻度が増大するため、パケット転送処理が遅延する場合がある。本発明では、ＤＮＳラウンドロビン機能を利用することで、負荷が同一サーバに集中する頻度を抑制している。これにより、ＯＦＣ１における処理負荷が軽減される。
【００８２】
本発明によるＯＦＣ１は、ＤＮＳサーバ５による名前解決処理に関係なく、ＯＦＳ４ｉのフローテーブル４０３を更新することで、特定サーバへの負荷の集中を回避できる。このため、ＤＮＳサーバ５は、通常の名前解決を行えばよく、特別な構成の変更を必要としない。例えば、特許文献１に記載のシステムでは、ＤＮＳサーバに対してアドレスの振り分け可否が設定されるが、本発明ではこのような仕様の変更は必要ない。すなわち、本発明によるＯＦＣ１は、従来技術によるＤＮＳサーバと連携して負荷分散を行うことができる。又、ＯＦＣ１は、サーバ３ｍからの通知（サーバ３ｍの負荷状況）に応じて負荷分散処理を行うため、ＤＮＳサーバ５と直接通信することなく、ＤＮＳサーバ５によって回避できなかった負荷の集中を分散することができる。
【００８３】
又、ラウンドロビンで返却する候補のＩＰアドレスの数とサーバ３ｍの数との対応関係は不要であるため、クライアント２ｎの設定を変更することなくサーバ３ｍの数を増減させることができる。
【００８４】
更に、オープンフローによるフロー制御機能を利用して負荷分散を行うため、従来よりも詳細な条件で負荷分散を行うことが可能となる。詳細には、ＯＦＣ１は、フロー（パケットデータ）をレイヤ１からレイヤ４のアドレスや識別子の組み合わせで制御できるため、これらの組み合わせを条件として負荷分散を行うことができる。例えば、サーバ３ｍ上で動作する仮想サーバに対する負荷の集中を分散する運用も可能となる。
【００８５】
ＯＦＣ１による負荷分散処理により、サーバ３１に対する負荷が軽減された場合、ＩＰアドレス“１”宛ての通信経路（新通信経路）を負荷分散前の旧通信経路に変更しても構わない。
【００８６】
図１３は、負荷状況が改善した場合の、通信経路復帰動作の一例を示すシーケンス図である。図１３を参照して、負荷増大に伴い負荷分散要求を発行したサーバ３１は、負荷（例えば同時接続数）が基準値（閾値）を下回るか否かを判定する（ステップＳ３０１）。この判定は、所定の周期や任意に時期に行われることが好ましい。
【００８７】
サーバ３１への同時接続数が予め設定されている基準値を下回った場合、サーバ３１は、設定復帰要求をＯＦＣ１に発行する（ステップＳ３０１Ｙｅｓ、Ｓ３０２）。サーバ３１は、負荷（例えば同時接続数）が基準値を下回った期間が所定の期間以上維持した場合に設定復旧要求を発行することが好ましい。あるいは、サーバ３１は、負荷（例えば同時接続数）が基準値を下回ったことを検出した回数が所定の回数に達した場合に設定復旧要求を発行することが好ましい。一方、サーバ３１への同時接続数が予め設定されている基準値以上である場合は現状を維持し、クライアント２ｎからのアクセスを待ち受ける（ステップＳ３０１Ｎｏ）。
【００８８】
ＯＦＣ１は、同時接続数が閾値を下回ったという通知（設定復帰要求）を受けると、ステップＳ１０８〜Ｓ１１０で変更したＯＦＳ４ｉのフローテーブルを元に戻す（ステップＳ３０３〜Ｓ３０５）。詳細には、変更前に設定していたフローエントリ（ルール１４４＋アクション情報１４５）をフローテーブル１４から抽出し、ＯＦＳ４１、４２に設定する。この際、変更前のフローエントリ（旧通信経路に対応するフローエントリ）は、新通信経路に対応するフローエントリに紐付けられており、これによって、旧通信経路に対応するフローエントリを特定することが好ましい。
【００８９】
このようにアクセス先（通信経路）を元に戻すことで、ＤＮＳサーバ５でのラウンドロビン機能による負荷制御が十分に機能している間は、ＯＦＣ１によって変更されたフローエントリが不要となり、デフォルトの状態（例えばユーザが最初に設定した状態）の通信環境が維持される。すなわち、ユーザが所望の通信環境でシステムの保守管理が可能となる。ただし、ＯＦＣ１によって負荷分散された状態でも、ＯＦＣ１が通信経路やＯＦＳ４ｉの動作を一元的に制御しているため、システムの保守管理は容易に行うことができる。
【００９０】
以上、本発明の実施の形態を詳述してきたが、具体的な構成は上記実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。上述の実施の形態では、新通信経路と旧通信経路は、異なるＯＦＳ４ｉを通過しているが、同じＯＦＳ４ｉを通過した経路でも良い。この場合、ＯＦＳ４ｉの最終段のフローエントリのみを変更することで、クライアント２ｎのアクセス先サーバを変更することができる。この結果、ＯＦＣ１のフローエントリの更新処理による負荷を、更に減じることが可能となる。
【００９１】
上記の実施の形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限らない。
【００９２】
（付記１）
通信経路上のスイッチに対して、フローエントリを設定するコントローラと、
前記コントローラによって設定されたフローエントリに従って、受信パケットの中継処理を行うスイッチと、
前記スイッチを介して自身に接続された複数のクライアント端末のそれぞれに対して、サービスを提供する複数のサービス提供サーバと、
ラウンドロビン機能によって、前記複数のクライアント端末と前記複数のサービス提供サーバと間の負荷分散を行うＤＮＳ（Ｄｏｍａｉｎ  Ｎａｍｅ  Ｓｙｓｔｅｍ）サーバと
を具備し、
前記複数のサービス提供サーバのそれぞれは、それぞれの負荷状況を監視し、自身に対する負荷が閾値以上であると判定すると、負荷分散要求を前記コントローラに発行し、
前記コントローラは、前記負荷分散要求に応じて、前記スイッチに設定したフローエントリを変更する
コンピュータシステム。
【００９３】
（付記２）
付記１に記載のコンピュータシステムにおいて、
前記コントローラは、前記負荷分散要求の要求元サーバへの負荷を軽減させるためのフローエントリを前記スイッチに設定する
コンピュータシステム。
【００９４】
（付記３）
付記２に記載のコンピュータシステムにおいて、
前記コントローラは、前記要求元サーバと異なるサービス提供サーバにアクセスするための新通信経路を算出し、前記新通信経路上のスイッチに設定するフローエントリを生成する
コンピュータシステム。
【００９５】
（付記４）
付記２又は３に記載のコンピュータシステムにおいて、
前記要求元サーバは、自身に接続中のクライアント端末のアドレスを前記コントローラに通知し、
前記コントローラは、前記通知されたアドレス以外のアドレスを送信元アドレスとしたパケットデータが、前記要求元サーバ以外のサービス提供サーバに到達するように、前記スイッチに設定したフローエントリを変更する
コンピュータシステム。
【００９６】
（付記５）
付記４に記載のコンピュータシステムにおいて、
前記コントローラは、前記通知されたアドレスを送信元アドレスとしたパケットデータが、前記要求元サーバに到達するように、前記スイッチに設定したフローエントリを変更する
コンピュータシステム。
【００９７】
（付記６）
付記１から５のいずれか１項に記載のコンピュータシステムにおいて、
前記複数のサービス提供サーバのそれぞれは、自身への同時接続数を監視し、前記同時接続数が閾値以上であると判定した場合、前記負荷分散要求を前記コントローラに発行する
コンピュータシステム。
【００９８】
（付記７）
付記１から６のいずれか１項に記載のコンピュータシステムにおいて、
前記負荷分散要求を発行した要求元サーバは、前記負荷が、前記閾値を下回った場合、設定復帰要求を前記コントローラに発行し、
前記コントローラは、前記負荷分散要求に応じて、変更した前記スイッチのフローエントリを元のフローエントリに戻す
コンピュータシステム。
【００９９】
（付記８）
付記１から７のいずれか１項に記載のコンピュータシステムにおいて、
前記複数のサービス提供サーバは、１つのホスト名が割り当てられた仮想サーバを形成し、
前記複数のサービス提供サーバのそれぞれには、複数のＩＰアドレスが割り当てられる
コンピュータシステム。
【０１００】
（付記９）
付記１から８のいずれか１項に記載のコンピュータシステムで利用されるコントローラ。
【０１０１】
（付記１０）
付記１から８のいずれか１項に記載のコンピュータシステムで利用されるスイッチ。
【０１０２】
（付記１１）
付記１から８のいずれか１項に記載のコンピュータシステムで利用されるサービス提供サーバ。
【０１０３】
（付記１２）
コントローラが、通信経路上のスイッチに対して、フローエントリを設定するステップと、
スイッチが、前記コントローラによって設定されたフローエントリに従って、受信パケットの中継処理を行うステップと、
複数のサービス提供サーバのそれぞれが、前記スイッチを介して自身に接続された複数のクライアント端末のそれぞれに対して、サービスを提供するステップと、
ＤＮＳ（Ｄｏｍａｉｎ  Ｎａｍｅ  Ｓｙｓｔｅｍ）サーバが、ラウンドロビン機能によって、前記複数のクライアント端末と前記複数のサービス提供サーバと間の負荷分散を行うステップと、
前記複数のサービス提供サーバのそれぞれが、それぞれの負荷状況を監視するステップと、
前記複数のサービス提供サーバのそれぞれが、自身に対する負荷が閾値以上であると判定すると、負荷分散要求を前記コントローラに発行するステップと、
前記コントローラが、前記負荷分散要求に応じて、前記スイッチに設定したフローエントリを変更するステップと
を具備する
負荷分散方法。
【０１０４】
（付記１３）
付記１２に記載の負荷分散方法において、
前記フローエントリを変更するステップは、前記コントローラは、前記負荷分散要求の要求元サーバへの負荷を軽減させるためのフローエントリを前記スイッチに設定するステップを備える
負荷分散方法。
【０１０５】
（付記１４）
付記１３に記載の負荷分散方法において、
前記フローエントリを変更するステップは、
前記コントローラが、前記要求元サーバと異なるサービス提供サーバにアクセスするための新通信経路を算出するステップと、
前記コントローラが、前記新通信経路上のスイッチに設定するフローエントリを生成するステップと
を更に備える
負荷分散方法。
【０１０６】
（付記１５）
付記１３又は１４に記載の負荷分散方法において、
前記フローエントリを変更するステップは、
前記要求元サーバが、自身に接続中のクライアント端末のアドレスを前記コントローラに通知するステップと、
前記コントローラが、前記通知されたアドレス以外のアドレスを送信元アドレスとしたパケットデータが、前記要求元サーバ以外のサービス提供サーバに到達するように、前記スイッチに設定したフローエントリを変更するステップと
を更に備える
負荷分散方法。
【０１０７】
（付記１６）
付記１５に記載の負荷分散方法において、
前記フローエントリを変更するステップは、前記コントローラが、前記通知されたアドレスを送信元アドレスとしたパケットデータが、前記要求元サーバに到達するように、前記スイッチに設定したフローエントリを変更するステップを更に備える
負荷分散方法。
【０１０８】
（付記１７）
付記１２から１６のいずれか１項に記載の負荷分散方法において、
前記負荷状況を監視するステップは、前記複数のサービス提供サーバのそれぞれが、自身への同時接続数を監視するステップを備え、
前記負荷分散要求を発行するステップは、前記複数のサービス提供サーバのそれぞれが、前記同時接続数が閾値以上であると判定した場合、前記負荷分散要求を前記コントローラに発行するステップを備える
を備える
負荷分散方法。
【０１０９】
（付記１８）
付記１２から１７のいずれか１項に記載の負荷分散方法において、
前記負荷分散要求を発行した要求元サーバが、前記負荷が前記閾値を下回った場合、設定復帰要求を前記コントローラに発行するステップと、
前記コントローラが、前記負荷分散要求に応じて変更した前記スイッチのフローエントリを、元のフローエントリに戻すステップと
を更に具備する
負荷分散方法。
【符号の説明】
【０１１０】
１：オープンフローコントローラ（ＯＦＣ）
２１〜２ｎ：クライアント端末
３１〜３ｍ：サービス提供サーバ
４１〜４ｉ：オープンフロースイッチ（ＯＦＳ）
【図１】
2011170718.tif 000003
【図２】
2011170718.tif 000004
【図３】
2011170718.tif 000005
【図４】
2011170718.tif 000006
【図５】
2011170718.tif 000007
【図６】
2011170718.tif 000008
【図７】
2011170718.tif 000009
【図８】
2011170718.tif 000010
【図９】
2011170718.tif 000011
【図１０Ａ】
2011170718.tif 000012
【図１０Ｂ】
2011170718.tif 000013
【図１１Ａ】
2011170718.tif 000014
【図１１Ｂ】
2011170718.tif 000015
【図１２】
2011170718.tif 000016
【図１３】
2011170718.tif 000017