JP2004005360A - サーバ負荷分散システム - Google Patents
サーバ負荷分散システム Download PDFInfo
- Publication number
- JP2004005360A JP2004005360A JP2002295556A JP2002295556A JP2004005360A JP 2004005360 A JP2004005360 A JP 2004005360A JP 2002295556 A JP2002295556 A JP 2002295556A JP 2002295556 A JP2002295556 A JP 2002295556A JP 2004005360 A JP2004005360 A JP 2004005360A
- Authority
- JP
- Japan
- Prior art keywords
- server
- request
- client
- pool
- processing status
- 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
Landscapes
- Multi Processors (AREA)
Abstract
【解決手段】複数のサーバに関する情報をサーバプールとして定義するサーバプール定義部と、サーバプール定義情報及び各サーバの処理状況を記憶する処理状況記憶部と、クライアントから受信した一連のリクエストを分解し、各リクエストの受信時点で最も負荷の少ないサーバへ送信するリクエスト振分部とを備える。
【選択図】 図1
Description
【発明の属する技術分野】
本発明は、クライアントからのリクエストを何れかのサーバへ振り分ける負荷分散装置に関する。
【0002】
【従来の技術】
企業内及び企業間の円滑なコミュニケーションを実現するために、LAN(Local Area Network)等のネットワークを介してPC(Personal Computer)等の情報処理装置で作成した文書を送受信する電子メールシステムの普及が進んでおり、受信者のメールアドレスを検索する機能、所謂電子電話帳機能として、CCITT勧告のX.500(ISO9594)等に代表されるディレクトリサービスが利用され始めている。
【0003】
一方、インターネットにおける標準化機関であるIETF(Internet Engineering Task Force)は、TCP/IP上のディレクトリクライアント−サーバ間プロトコルとして「LDAP:Lightweight Directory Access Protocol(RFC2251)」を標準化した。ユーザはディレクトリクライアントからX.500等のディレクトリサーバにLDAPでアクセスし、ユーザのメールアドレス等、所望の情報を検索する。更にLDAPは、エントリ追加、削除、更新、エントリ名変更等のディレクトリ更新系リクエストも規定している。
【0004】
ディレクトリサービスは分散システムアーキテクチャに対応可能であり、各ディレクトリサーバが管理している情報を他のサーバへ複製(レプリケーション)可能である。これにより、一台のサーバに障害が発生しても他のサーバによりサービスを継続でき、更にアクセス負荷を複数のサーバへ分散可能である。
【0005】
サーバの障害に備え、従来のディレクトリクライアントはラウンドロビン等のアルゴリズムを用いて何れかのサーバを選択し、LDAPリクエストを送信していた。しかし、クライアントによるサーバ切替方法は、各クライアントに対象サーバのリストを設定する必要があり、サーバの追加時等、運用に伴うメンテナンスが煩雑であった。この問題を解決するため、たとえば特許文献1のように、複数のディレクトリサーバの内、アクセス可能な状態にあるサーバを見つけ、そのサーバへリクエストを振り分ける方法も提案されている。
【0006】
一方、従来のクライアントによるサーバ切替方法を負荷分散に適用すると、各クライアントが独自にアクセスするサーバを決定するため、必ずしも各サーバの負荷が均等化されないという問題があった。
【0007】
上記問題を解消する技術として、非特許文献1に記載の負荷分散装置(以下、スイッチとする)が挙げられる。負荷分散装置はクライアントとサーバの間に位置し、クライアントからのリクエストを一手に引き受け、最適なサーバへ一連のリクエストを振り分ける。
【0008】
【特許文献1】
特開2001−229070号公報
【非特許文献1】
VALERIA CARDELLINI外2名、「DYNAMIC LOAD BALANCING ON WEB−SERVER SYSTEMS」、IEEE INTERNET COMPUTING、(米国)、IEEE Computer Society PublicationsOffice、1999年、第3巻、第3号、p.32
【0009】
【発明が解決しようとする課題】
前述した従来のスイッチによると、以下の問題が発生する。
【0010】
従来のスイッチは、各々のリクエストが独立したHTTP(Hyper Text Transfer Protocol)を処理対象としており、個々のリクエスト単位で分配することができる。それ以外のアプリケーションプロトコルについてはレイヤ4レベル、つまりTCPコネクション単位で負荷分散する。
【0011】
図4は従来のスイッチを用いた負荷分散の通信シーケンス例である。短期間に、3台のクライアント2a、2b、2cが、各々、一つのLDAPコネクションの中で二つの検索リクエストを独自のタイミングで送信し、スイッチ17が各リクエストを2台のサーバ1a、1bに振り分けている。LDAPは、確立したコネクション上で一連のリクエストやレスポンスを授受するプロトコルであり、LDAPコネクションの確立時、TCPコネクションも確立される。
【0012】
先に述べたように従来のスイッチ17はTCPコネクション単位に負荷分散を行うため、同一LDAPコネクション上のリクエストは全て同一のサーバへ振り分けられる。つまり、リクエストの振分先はLDAPコネクション確立時に決定され、以降、LDAPコネクションを切断するまで変わらない。例えばクライアント2aが送信したリクエスト18と21は、一つのLDAPコネクションに含まれるため、リクエスト24と27として同一のサーバ1aに振り分けられる。同様に、クライアント2bが送信したリクエスト19と22はサーバ1b、クライアント2cが送信したリクエスト20と23はサーバ1aに振り分けられる。このとき、サーバ1aには四つのリクエストが振り分けられているが、サーバ1bには二つのリクエストしか振り分けられていない。
【0013】
上記のように従来のスイッチによる負荷分散方法においては、各サーバの負荷に偏りが生じ、局所的な応答性能が劣化し、ユーザの利便性を損なうことがあった。システムの性能要件を満足させるには冗長なサーバを追加する必要があり、システム規模に比例して情報処理装置の導入コストが増大した。
【0014】
【課題を解決するための手段】
本発明は、各サーバの負荷をより均等化することが可能なサーバ負荷分散技術を提供する。
【0015】
本発明のサーバ負荷分散方法によれば、サーバとクライアントから成る情報処理システムにおいて、クライアントから受信する個々のリクエストを、クライアントとの間で確立しているコネクションとは関係なく、その受信時点で最も負荷の少ないサーバへ送信する。
【0016】
より具体的には、本発明のサーバ負荷分散方法によれば、サーバとクライアントから成る情報処理システムは、その一態様において、複数のサーバに関する情報をサーバプールとして定義するサーバプール定義部と、サーバプール定義情報及び各サーバの処理状況を記憶する処理状況記憶部と、クライアントとの間で確立しているコネクションの中で受信する個々のリクエストを、その受信時点で最も負荷の少ないサーバへ送信するリクエスト振分部とを備える。
【0017】
【発明の実施の形態】
以下、本発明の一実施例について図面を用いて説明する。以下の図中、同一の部分には同一の符号を付加する。
【0018】
図1は、本発明を適用したディレクトリシステムの構成図であり、LAN等のネットワーク10で、本実施例のスイッチ3、2台のディレクトリサーバ1a、1b、3台のディレクトリクライアント2a、2b、2cが接続されている。
【0019】
スイッチ3は、クライアントとの通信処理を実行するクライアント通信制御部4、サーバとの通信処理を実行するサーバ通信制御部7、負荷分散対象のサーバ群(以下、サーバプールと呼ぶ)を定義するサーバプール定義ファイル9、サーバとのコネクションを管理するコネクション管理部8、各サーバの処理状況を記憶する処理状況記憶部6、そしてクライアントから受信したリクエストをその時点で最適なサーバへ振り分けるリクエスト振分部5から成る。
【0020】
スイッチ3は、CPU、メモリ、バス等の内部通信線、ハードディスクなどの二次記憶装置、通信インタフェースから構成される。通信インタフェースは、ネットワークに接続されており、これを経由して、クライアント、サーバと通信する。また、メモリには、以下に述べる処理をCPUに実現させるプログラムと必要なデータが格納されている。プログラムとデータは、予め格納されていても良いし、ネットワークまたは他の記憶媒体を経由して他のサーバから、または二次記憶装置から導入されても良い。
【0021】
図3はサーバプール定義ファイル9の一例を示すものである。システムの運用管理者は、負荷分散の対象とする複数のサーバの名称16をサーバプール定義ファイル9に記述する。名称16には、サーバのホスト名(もしくはIPアドレス)とポート番号を「:」で区切り記述する。ここでポート番号は省略可能であり、省略された場合、LDAPの標準ポート番号である「389」が用いられる。
【0022】
図2は処理状況記憶部6の情報要素を示すものであり、サーバとの間に確立されたコネクションに関する情報を記憶するコネクションテーブル11から成る。コネクションテーブル11は、サーバとの間に確立したコネクション数に相当する配列構造を成す。
【0023】
各コネクションテーブル11は、サーバとのコネクションを一意に識別するハンドル情報を記憶する領域12、該サーバに対して最後に送信したリクエストのメッセージID(最終メッセージIDと呼ぶ)を記憶する領域13、該サーバが処理中のリクエスト数を記憶する領域14、そしてクライアントから受信したリクエストに付与されていたクライアントメッセージIDを記憶する領域15から成る。各コネクションテーブル11中のクライアントメッセージID15は、該サーバが処理中のリクエスト数に相当する配列構造を成す。
【0024】
次に、本実施例のスイッチの動作について説明する。最初に、サーバとのコネクション確立方法について、図6を用い説明する。スイッチが起動する際、コネクション管理部8はサーバプールに属する各サーバとの間にLDAPコネクションを確立する。
【0025】
コネクション管理部8は、サーバプール定義ファイル9の先頭に記述されたサーバ名16を読み出し、サーバとのLDAPコネクションを確立するBindリクエストを組み立て、サーバ通信制御部7に対し送信を依頼する。(S601)
サーバと接続後、コネクション管理部8は、処理状況記憶部6内に新たなコネクションテーブル11を生成し、サーバとの間に確立されたLDAPコネクションを識別するハンドル情報を領域12に登録すると共に、最終メッセージID13を「1」に、リクエスト数14を「0」に初期化する。(S602)
コネクション管理部8が、サーバプール定義ファイル9に記述された全サーバについてS601及び602の処理を繰り返して、スイッチとサーバ間でLDAPコネクションを確立した後(S603)、
スイッチ3は起動処理を終え、サービスの開始が可能となる。
【0026】
リクエストの振分方法について、図7を用い説明する。クライアント通信制御部4は、クライアントからLDAPコネクションを確立するBindリクエストを受信すると、そのリクエストを何れかのサーバへ送信することなく、確立成功を示すレスポンスをクライアントへ返す。これにより、クライアント−スイッチ間のLDAPコネクションが確立される。
【0027】
リクエスト振分部5は、クライアント通信制御部4がクライアントからのリクエストを受信した際、処理に最適なサーバをサーバプール内から選定し、該リクエストを送信する。
【0028】
クライアント通信制御部4がクライアントからのリクエストを受信すると、リクエスト振分部5は、処理状況記憶部6からリクエスト数14に登録された数値が最少のコネクションテーブル11を探すことにより、該リクエストの処理に最適なサーバを選定する。(S701)
次に、選定した最適サーバのコネクションテーブル11を参照し、リクエスト数14及び最終メッセージID13に「1」を加算する。(S702、S703)
続いてリクエスト振分部5は、該コネクションテーブル11内に新たなクライアントメッセージID領域15を生成し、受信したリクエストに付与されたメッセージIDを一時保管する(S704)。
【0029】
そして、クライアントから受信したリクエスト中のメッセージIDを最終メッセージID13が示すIDに付け替え(S705)、
サーバ通信制御部7に対してサーバコネクションハンドル12に登録されたハンドル情報を通知することにより、選定したサーバへのリクエスト送信を依頼し(S706)、
該サーバからのレスポンスを待つ。(S707)
サーバ通信制御部7が該サーバからのレスポンスを受信すると、リクエスト振分部5は、受信したレスポンス中のメッセージIDを、S704において保管したクライアントメッセージID15の値に付け替え(S708)、
クライアント通信制御部4に対して該レスポンスの送信を依頼する(S709)。
【0030】
最後にリクエスト振分部5は、リクエスト数14から「1」を減算し(S710)、
S704において生成したクライアントメッセージID領域15を削除して(S711)、該リクエストに関する振分処理を完了する。
【0031】
このように、本実施例によれば、一つのクライアントとの間で確立されたLDAPコネクションに含まれる複数のリクエストの各々について、そのリクエスト受信時点で最も負荷の少ないサーバへ送信できるので、より良い負荷分散が可能になる。
【0032】
図5は、本実施形態のスイッチ3を適用した負荷分散の通信シーケンス例である。
【0033】
クライアント2aが送信したリクエスト18と21は、同一のLDAPコネクションを介して送信されたにも関わらず、リクエスト24と30として異なるサーバ1a及び1bに振り分けられる。同様に、クライアント2bが送信したリクエスト19と22、クライアント2cが送信したリクエスト20と23も、各々異なるサーバ1a及び1bに振り分けられる。つまり、サーバ1a及びサーバ1bには各々三つのリクエストが均等に振り分けられる。
【0034】
上記のように本実施形態のスイッチ3は、ある一つのクライアントコネクションを介して受信した一連のリクエストをサーバとの間で確立された異なるコネクションを介して送信すること(例えばリクエスト24、30)、また、クライアントとの間で確立された異なるコネクションを介して受信したリクエストを同一のサーバコネクションを介して送信すること(例えばリクエスト24、26、31)もある。
【0035】
以上、本発明のサーバ負荷分散方法を適用した一実施例を説明した。本実施例によれば、一つのクライアントコネクションを介して受信した一以上のリクエスト各々を、各リクエスト受信時点で最適なサーバへ、当該サーバへのコネクションを介して送信する。コネクション単位にリクエストの振り分け先を決めていた従来スイッチに比べると、クライアントコネクションに関わらず、受信した時点で最適なサーバにリクエストを振り分けるため、各サーバの負荷の偏りをより減らすことが可能である。
【0036】
次に本発明の第二の実施例を説明する。上記第一の実施例と同一の処理については説明を割愛する。
【0037】
上記第一の実施例は、単一のサーバプールによる負荷分散方法に関するものである。しかし用途によっては、複数のサーバプールによる負荷分散を必要する場合もある。例えば、メールサーバからのリクエストとWebサーバからのリクエストを処理するサーバ群を分けたい場合等である。
【0038】
図9は、複数のサーバプールに対応可能なスイッチにおけるサーバプール定義ファイル9の一例を示すものである。38は各サーバプールを一意に識別するプール識別子であり、システムの運用管理者は、プール毎に負荷分散の対象とするサーバ群を定義可能である。本実施例においては、RFC2251に規定されたBindリクエストのパラメータであるnameをプール識別子とする。nameはディレクトリサーバを利用するアイデンティティの名称であり、他の情報処理システムにおけるユーザ名もしくはユーザIDに相当する。
【0039】
図8は、本実施例における処理状況記憶部6の情報要素を示すものであり、各サーバの状況を記憶するサーバテーブル33とコネクションテーブル11から成る。サーバテーブル33は全サーバプール内のサーバに相当する配列構造を成す。
【0040】
各サーバテーブル33は、サーバ名等、サーバを一意に識別する情報を記憶する領域36、該サーバが処理中のリクエスト数を記憶する領域14、そして該サーバが属するサーバプールの識別子を記憶する領域37から成る。各サーバテーブル33中のプール識別子37は、該サーバが属する全プール数に相当する配列構造を成す。
【0041】
各コネクションテーブル11は、サーバコネクションハンドル領域12、該コネクションが属するサーバプールの識別子を記憶する領域34、サーバを一意に識別する情報を記憶する領域35、最終メッセージID領域13、そしてクライアントメッセージID領域15から成る。
【0042】
次に、本実施例のスイッチ3の動作について説明する。
【0043】
スイッチ3が起動する際、コネクション管理部8は、サーバプール定義ファイル9に記述されたサーバと接続した後(S601)、
処理状況記憶部6内に新たなコネクションテーブル11を生成し、サーバとの間に確立されたコネクションを識別するハンドル情報と、サーバプール定義ファイル9に記述されたプール識別子及びサーバ識別子を、各々領域12、34、35に登録すると共に、最終メッセージID13の値を「1」に初期化する。また、該サーバ識別子が登録されたサーバテーブル33が存在しない場合は、新たなサーバテーブル33を生成し、プール識別子及びサーバ識別子を、各々領域37、36に登録すると共に、リクエスト数14を「0」に初期化する。一方、該サーバ識別子が登録されたサーバテーブル33が存在する場合は、プール識別子37を追加登録する(S602)。
【0044】
コネクション管理部8が、サーバプール定義ファイル9に記述された全プールの全サーバについて、S601及び602の処理を繰り返した後(S603)、
スイッチは起動処理を終え、サービスを開始する。
【0045】
クライアント通信制御部4がクライアントからのリクエストを受信すると、リクエスト振分部5は、処理状況記憶部6から、先のBindリクエストに含まれたnameパラメータと等しい識別子が領域37に登録され、かつリクエスト数14に登録された数値が最少のサーバテーブル33を探すことにより、該リクエストの処理に最適なサーバを選定する(S701)。
【0046】
次にリクエスト振分部5は、選定したサーバテーブル33のリクエスト数14に「1」を加算した後(S702)、
サーバ識別子36と等しい識別子が領域35に登録されたコネクションテーブル11を探索し、最終メッセージID13の値に「1」を加算する(S703)。
【0047】
続いて、リクエスト振分部5は第一の実施例と同様のメッセージ送信処理を実行し、該サーバからのレスポンスをクライアントへ返した後(S704からS709)、サーバテーブル33のリクエスト数14から「1」を減算し(S710)、
S704において生成したコネクションテーブル11のクライアントメッセージID領域15を削除して(S711)、
該リクエストに関する振分処理を完了する。
【0048】
以上、本発明の第二の実施例を説明した。第二の実施例によると、複数のサーバプールによる負荷分散が可能である。
【0049】
例えばメールサーバのアイデンティティがcn=mail, o=abc.com、Webサーバのアイデンティティがcn=web, o=abc.comである場合、図9のサーバプール定義ファイル9のようにサーバプールを定義すると、メールサーバからのアクセスに3台のサーバ、Webサーバからのアクセスに2台のサーバが、負荷分散のために割り当てられる。
【0050】
また本実施例のスイッチは、各プールから振り分けた処理中リクエストの総和をサーバの負荷として捉えて最適なサーバを選定しているため、1台のサーバを異なるプールで兼用しても、負荷の均等化を実現可能である。
【0051】
図9の39は、ある時点におけるサーバが処理中のリクエスト数である。本実施例のスイッチは、この時点で新たに受信したリクエストの送信元がメールサーバである場合はホスト名がldap1.abc.comであるサーバへ、送信元がWebサーバである場合はホスト名がldap3.abc.comであるサーバへそのリクエストを振り分け、負荷の均等化を図る。
【0052】
上記各実施例は、受信したLDAPリクエストの種別に関わらず、最適なサーバを選択し、リクエストを振り分ける。しかし用途によっては、リクエスト種別によって振り分けるサーバを選別したい場合もある。例えば流通のディレクトリサーバに広く用いられるレプリケーション方法である、あるエントリに関する更新系リクエストを処理可能なサーバを単一にするシングルマスター方式の場合、他のサーバは検索系のリクエストを処理可能であるが、更新系リクエストは受け入れない。また、一般に更新可能なサーバは検索も可能であるが、更新性能を確保するために更新専用とさせたいケースもある。
【0053】
このようなニーズに対して、例えば上記第二の実施例における図9のプール識別子38を[検索]、[更新]とし、クライアントから受信したリクエストがSearchやCompare等の検索系リクエストである場合は[検索]プールに属する何れかのサーバに振り分け、Add、Delete、Modify、Modify DN等の更新系リクエストである場合は[更新]プールに属する何れかのサーバに振り分けるよう制御しても良い。
【0054】
しかし上記方法によると、用途に応じた複数のサーバプールによる負荷分散という第二の実施例の目的を同時に達成できない。
【0055】
この目的を同時に実現する第三の実施例を次に説明する。上記各実施例と同一の処理については説明を割愛する。
【0056】
図10は、複数のサーバプールに対応し、かつリクエスト種別に応じた負荷分散が可能なスイッチにおけるサーバプール定義ファイル9の一例を示すものである。本実施例において、システムの運用管理者は、各サーバ名称16の最後に、サーバの種別を示す、「rw」、「wo」、「ro」の何れかを付与する。ここで、「rw」は読み書き可能サーバ、「wo」は書き込み専用サーバ、「ro」は読み込み専用サーバを表す。
【0057】
図7のS701において、クライアント通信制御部4がクライアントからのリクエストを受信すると、リクエスト振分部5は、処理状況記憶部6から、先のBindリクエストに含まれたnameパラメータと等しい識別子が領域37に登録され、かつ受信したリクエストの種別を処理可能であり、かつリクエスト数14に登録された数値が最少のサーバテーブル33を探すことにより、該リクエストの処理に最適なサーバを選定する。
【0058】
例えば受信したリクエストが検索系リクエストならば、当該プール内で「rw」もしくは「ro」として登録されたサーバ、更新系リクエストならば、当該プール内で「rw」もしくは「wo」として登録されたサーバが選定候補となる。
【0059】
以降の処理は上記第二の実施例と同様である。
【0060】
以上、説明した第三の実施例によると、複数のサーバプールに対応し、かつリクエスト種別に応じた負荷分散が可能である。例えば図10の処理状況40のような時点において、本実施例のスイッチは、新たにメールサーバから受信したリクエストが検索系リクエストである場合はホスト名がldap1.abc.comであるサーバへ、更新系リクエストである場合はホスト名がldap2.abc.comであるサーバへそのリクエストを振り分ける。
【0061】
上記各実施例におけるスイッチは、クライアントから受信した同一コネクション上の一連のリクエストを、各々、その時点で最適なサーバへ振り分ける。しかし、トランザクション処理等、従来のように一連のリクエストを同一のサーバへ振り分けなければならない処理が混在する場合もあり得る。これに対応する第四の実施例を次に説明する。上記各実施例と同一の処理については説明を割愛する。
【0062】
図11は、従来のコネクション単位の負荷分散と本発明のリクエスト単位の負荷分散を同時に実現するスイッチにおけるサーバプール定義ファイル9の一例を示すものである。
【0063】
本実施例において、<OPR>指示子41に続く情報は、上記各実施例と同様にリクエスト単位の負荷分散に用いるサーバプールである。一方、<CON>指示子42に続く情報は、従来と同様のコネクション単位の負荷分散に用いるサーバプールである。
【0064】
本実施例のスイッチは、Bindリクエストに含まれたnameパラメータがリクエスト負荷分散の何れかのプール識別子38と一致する場合、上記各実施例と同様に、以降のリクエスト各々をその時点で最適なサーバへ振り分ける。
【0065】
一方、何れのプール識別子38にも該当しない場合は、<CON>指示子42に続くサーバ群の中から最適なサーバを選定し、以降の当該クライアントコネクションから受信した全てのリクエストを先に選定したサーバへ振り分ける。
【0066】
以上、説明した。本実施例のスイッチは、リクエスト単位の負荷分散、コネクション単位の負荷分散に関わらず、処理中リクエストの総和をサーバの負荷として捉えて最適なサーバを選定するため、各サーバ負荷の均等化を実現可能である。図11の処理状況43の右二列は、コネクション単位の負荷分散中の未完リクエスト数である。本実施例のスイッチは、新たにメールサーバから受信したリクエストが検索系リクエストである場合はホスト名がldap3.abc.comであるサーバへそのリクエストを振り分ける。
【0067】
上記第三または第四の実施例におけるスイッチは、リクエスト種別に関わらず、処理中リクエストの総和により最適なサーバを選定している。しかし一般的なディレクトリサーバは、ディレクトリ情報の更新時に各種インデックスを生成する等、検索用途向けに最適化されている。このためサーバの処理負荷は、検索系リクエストに比べ、更新系リクエストのほうが高い。このようなディレクトリサーバの特性を考慮し、更新系リクエストに重み付けして最適なサーバを選定するよう制御しても良い。例えば第三の実施例において、更新系リクエストのサーバ処理負荷が検索系リクエストの2倍とする。
【0068】
図7のS702において、リクエスト振分部5は、受信したリクエストが更新系ならば、選定したサーバテーブル33のリクエスト数14に「2」を加算する。一方、検索系の場合は「1」を加算する。同様にS710において、処理を完了したリクエストが更新系ならばリクエスト数14から「2」を減算する。一方、検索系の場合は「1」を減算する。
【0069】
図10に示す第三の実施例と同様の処理状況40において、本スイッチは、新たにメールサーバから受信したリクエストが検索系リクエストである場合はホスト名がldap3.abc.comであるサーバへ、更新系リクエストである場合はホスト名がldap1.abc.comであるサーバへそのリクエストを振り分ける。
【0070】
上記説明においては更新系リクエストの重みを2としたが、スイッチの設定ファイル等によりシステム管理者が重み値を定義可能としても良い。
【0071】
なお、上記各実施例において、スイッチが各サーバとのコネクション確立に認証を要する場合は、サーバプール定義ファイル9のサーバ名称16にユーザIDとパスワード等の認証情報を付記し、S601において該認証情報を用いてサーバとのコネクションを確立すれば良い。
【0072】
また上記各実施例においては、スイッチの起動時に、負荷分散対象の全サーバとコネクションを確立する例を示した。しかし起動時ではなく、クライアントからのBindリクエストを受けた時点でサーバとのコネクションを確立しても良い。
【0073】
このサーバとのコネクション確立時には、上記サーバプール定義ファイル9のサーバ名称16に付記されたユーザIDとパスワード等の認証情報を用いても良いし、クライアントからのBindリクエストに含まれる認証情報を用いてサーバとのコネクションを確立しても良い。
【0074】
LDAPは、単一のコネクション上で、リクエストに対応するレスポンスを待たずに次のリクエストを発行することができる。したがって、他のクライアントから同一のBindリクエストを受信した場合は、サーバとのコネクションを新たに確立することなく、既存のコネクションを次のリクエスト振り分けに利用しても良い。
【0075】
上記各実施例においては、クライアントからLDAPコネクションを確立するBindリクエストを受信すると、そのリクエストを何れかのサーバへ送信することなく、コネクション確立成功を示すレスポンスをクライアントへ返すものとした。しかし、クライアントを認証する必要があるならば、受信したBindリクエストを何れかのサーバへ送信し、サーバからのレスポンスをクライアントへ返すよう制御しても良い。
【0076】
この場合、Bindリクエストの送信によりサーバ間で確立したLDAPコネクションが冗長ならば、確立直後に、Unbindリクエストにより解放すれば、無駄なメモリ消費を抑止できる。
【0077】
また、最初にサーバへ送信したBindリクエストに含まれるユーザIDとパスワード等の認証情報を一時記憶領域に記憶しておく、もしくはサーバプール定義ファイル9のサーバ名称16に認証情報を付記しておき、以降、Bindリクエストを受信した場合は、そのリクエストを何れかのサーバへ送信することなく、記憶した認証情報と照合し、確立の成功もしくは失敗を示すレスポンスをクライアントへ返すよう制御すれば、サーバの処理負荷をより低減可能である。
【0078】
ところで、LDAP仕様は、クライアントが身元を明かさない、匿名によるコネクション確立を許している。このような匿名クライアントに対するサーバプールを定義する場合は、サーバプール定義ファイル9のプール識別子38をヌル(null)とすれば良い。スイッチは、匿名クライアントからのBindリクエストを受けると、以降の当該クライアントコネクションからのリクエストを、定義された匿名プール内の何れかのサーバへ振り分ける。
【0079】
なお、上記においては、クライアントがサーバプールを選択する手立てとして、Bindリクエストのパラメータであるnameを利用した。しかし、name以外の標準化された既存パラメータをプール識別子として利用しても良いし、RFC2251で定義されたControlやExtendedRequestを用いてプール識別子を指定しても良い。
【0080】
ところで、上記各実施例においてはリクエストに対するレスポンスについては触れていないが、リクエストを送信した先のサーバから対応するレスポンスが返ってくるため、リクエストとレスポンスから成るオペレーションという単位で負荷分散されていることになる。
【0081】
なお、上記各実施例におけるスイッチは、各サーバの未完リクエスト数により最適なサーバを選定するものとして説明した。しかし、未完リクエスト数ではなく、CPU負荷等、サーバの負荷を測るに好適な手法により、最適なサーバを選定するよう制御しても良い。また、実装が容易なラウンドロビン等の手法により最適なサーバを選定しても良い。
【0082】
ところで、上記各実施例におけるスイッチは、ネットワークに接続された、サーバ及びクライアントとは別の情報処理装置上で動作するものとして説明した。しかし、サーバもしくはクライアントが動作する情報処理装置上で各実施形態のスイッチを動作させる構成としても同様の効果が得られる。
【0083】
また、上記各実施例においては、本発明をディレクトリシステムに適用した場合を例に説明したが、例えばリレーショナルデータベース管理システムやオブジェクト指向データベース管理システムに代表される流通データベース管理システム等、単一のコネクション上で複数のリクエストを送信可能なあらゆる情報処理システムにおいても有用である。
【0084】
同一サーバとの間に複数のコネクションを確立するようにシステムを構成することにより、一つのコネクション上に複数のリクエストを多重に送信できるというLDAPと同様の特徴を備えていない他のデータベースシステムにおいても、並列処理を実現可能である。
【0085】
【発明の効果】
本発明によれば、各サーバの負荷をより均等化でき、システム全体で安定した応答性能を達成する可能性が高まる。これにより、ユーザの利便性を確保しながらも、コストを低減することが可能となる。
【図面の簡単な説明】
【図1】本発明の一実施例のシステム構成図である。
【図2】第一の実施例における処理状況記憶部6の情報構成例を示す図である。
【図3】第一の実施例におけるサーバプール定義ファイル9の情報構成例を示す図である。
【図4】従来の負荷分散システムにおける通信シーケンスを説明する図である。
【図5】本実施例の負荷分散システムにおける通信シーケンスを説明する図である。
【図6】本発明のコネクション管理部8の動作を説明する図である。
【図7】本発明のリクエスト振分部5の動作を説明する図である。
【図8】第二の実施例における処理状況記憶部6の情報構成例を示す図である。
【図9】第二の実施例におけるサーバプール定義ファイル9の情報構成例を示す図である。
【図10】第三の実施例におけるサーバプール定義ファイル9の情報構成例を示す図である。
【図11】第四の実施例におけるサーバプール定義ファイル9の情報構成例を示す図である。
【符号の説明】
1…ディレクトリサーバ、2…ディレクトリクライアント、3…スイッチ、4…クライアント通信制御部、5…リクエスト振分部、6…処理状況記憶部、7…サーバ通信制御部、8…コネクション管理部、9…サーバプール定義ファイル、10…ネットワーク。
Claims (13)
- 複数のサーバと一以上のクライアントとから成り、
前記サーバの内、何れか複数のサーバから成るサーバプールを一以上定義するサーバプール定義部と、
前記サーバプール定義情報及び各々の前記サーバの処理状況を記憶する処理状況記憶部と、
前記クライアントから個々のリクエストを受信した時点で、前記処理状況記憶部を参照して前記リクエストを送信すべきサーバを選択し、前記選択したサーバへ前記リクエストを送信するリクエスト振分部とを有することを特徴とするサーバ負荷分散システム。 - 請求項1において、
前記サーバプール定義部の各サーバプールには識別子が付与され、
前記リクエスト振分部は、前記クライアントから指定された識別子と同一の識別子が付与されたサーバプールに含まれる何れかのサーバを、前記リクエストを送信すべきサーバとして選択することを特徴とするサーバ負荷分散システム。 - 請求項1において、
前記処理状況記憶部は前記各サーバの未完リクエスト総数を記憶し、
前記リクエスト振分部は、前記処理状況記憶部を参照し、前記サーバプールに含まれ、かつ未完リクエスト総数が最少であるサーバを選択することを特徴とするサーバ負荷分散システム。 - 請求項1において、
前記リクエスト振分部は、リクエスト種別に応じてリクエストの送信先となるサーバを選択することを特徴とするサーバ負荷分散システム。 - 請求項4において、
前記処理状況記憶部は前記各サーバの未完リクエスト総数を記憶し、
前記リクエスト振分部は、前記処理状況記憶部を参照し、前記サーバプールに含まれ、かつ受信したリクエストを処理可能であり、かつ未完リクエスト総数が最少であるサーバを選択することを特徴とするサーバ負荷分散システム。 - 請求項5において、
前記処理状況記憶部はさらに、受信したリクエスト種別に応じて、前記各サーバの未完リクエスト状況を重み付けして記憶することを特徴とするサーバ負荷分散システム。 - 請求項1において、
前記リクエスト振分部はさらに、前記クライアントからコネクションの確立要求を受信した時点で、前記処理状況記憶部を参照してサーバを選択し、以降のリクエストを前記選択したサーバへ送信することを特徴とするサーバ負荷分散システム。 - 請求項2において、
前記サーバプール定義部にはさらに識別子を持たないサーバプールが定義され、
前記リクエスト振分部は、クライアントから指定された識別子が前記処理状況記憶部が記憶する何れの識別子とも一致しない場合は、上記識別子を持たないサーバプールに含まれるサーバを選択することを特徴とするサーバ負荷分散システム。 - 請求項2において、
前記クライアントから指定される識別子は、コネクション確立時にクライアントから指定されるアイデンティティであることを特徴とするサーバ負荷分散システム。 - 請求項1において、
前記リクエスト振分部は、同一コネクションを介して受信した複数のリクエスト各々を、複数のコネクションを介してサーバへ送信することを特徴とするサーバ負荷分散システム。 - 請求項1において、
前記リクエスト振分部は、複数のコネクションを介して受信した複数のリクエスト各々を、同一コネクションを介してサーバへ送信することを特徴とするサーバ負荷分散システム。 - 請求項1において、
前記リクエスト振分部は、複数のコネクションを介して受信した複数のリクエスト各々を、複数のコネクションを介して同一のサーバへ送信することを特徴とするサーバ負荷分散システム。 - 複数のサーバと一以上のクライアントから成る情報処理システムに用いるサーバ負荷分散装置であって、
前記サーバの内、何れか複数のサーバから成るサーバプールを一以上定義するサーバプール定義部と、
前記サーバプール定義情報及び各々の前記サーバの処理状況を記憶する処理状況記憶部と、
前記クライアントから個々のリクエストを受信した時点で、前記処理状況記憶部を参照して前記リクエストを送信すべきサーバを選択し、前記選択したサーバへ前記リクエストを送信するリクエスト振分部とを有することを特徴とするサーバ負荷分散装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002295556A JP2004005360A (ja) | 2002-04-10 | 2002-10-09 | サーバ負荷分散システム |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002107282 | 2002-04-10 | ||
JP2002295556A JP2004005360A (ja) | 2002-04-10 | 2002-10-09 | サーバ負荷分散システム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004005360A true JP2004005360A (ja) | 2004-01-08 |
JP2004005360A5 JP2004005360A5 (ja) | 2005-06-23 |
Family
ID=30446821
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002295556A Pending JP2004005360A (ja) | 2002-04-10 | 2002-10-09 | サーバ負荷分散システム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004005360A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007199804A (ja) * | 2006-01-24 | 2007-08-09 | Hitachi Ltd | データベース管理方法、データベース管理プログラム、データベース管理装置、および、データベース管理システム |
JP2009181308A (ja) * | 2008-01-30 | 2009-08-13 | Hamamatsu Photonics Kk | ストレージシステム |
JP2012511210A (ja) * | 2008-12-04 | 2012-05-17 | マイクロソフト コーポレーション | 代替メールボックスの自動発見 |
-
2002
- 2002-10-09 JP JP2002295556A patent/JP2004005360A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007199804A (ja) * | 2006-01-24 | 2007-08-09 | Hitachi Ltd | データベース管理方法、データベース管理プログラム、データベース管理装置、および、データベース管理システム |
JP2009181308A (ja) * | 2008-01-30 | 2009-08-13 | Hamamatsu Photonics Kk | ストレージシステム |
JP2012511210A (ja) * | 2008-12-04 | 2012-05-17 | マイクロソフト コーポレーション | 代替メールボックスの自動発見 |
US10504066B2 (en) | 2008-12-04 | 2019-12-10 | Microsoft Technology Licensing, Llc | Automatic discovery of alternate mailboxes |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20030195962A1 (en) | Load balancing of servers | |
KR100984384B1 (ko) | 클러스터 노드들을 권위적 도메인 네임 서버들로서사용하여 액티브 부하 조절을 하는 시스템, 네트워크 장치,방법, 및 컴퓨터 프로그램 생성물 | |
JP5582344B2 (ja) | 接続管理システム、及びシンクライアントシステムにおける接続管理サーバの連携方法 | |
US7543020B2 (en) | Distributed client services based on execution of service attributes and data attributes by multiple nodes in resource groups | |
US7111300B1 (en) | Dynamic allocation of computing tasks by second distributed server set | |
KR100951257B1 (ko) | 기업 저장 시스템 관리를 위한 컴퓨터화된 시스템, 방법 및 내부 메모리 | |
US8286157B2 (en) | Method, system and program product for managing applications in a shared computer infrastructure | |
US6748437B1 (en) | Method for creating forwarding lists for cluster networking | |
EP1117227A1 (en) | Network client affinity for scalable services | |
US20040003039A1 (en) | Distributed session listing and content discovery | |
US20080270596A1 (en) | System and method for validating directory replication | |
US20080235333A1 (en) | Group access privatization in clustered computer system | |
US8166100B2 (en) | Cross site, cross domain session sharing without database replication | |
US7120704B2 (en) | Method and system for workload balancing in a network of computer systems | |
US20210390082A1 (en) | Distributed file system and method for accessing a file in such a system | |
US20060075082A1 (en) | Content distribution system and content distribution method | |
JP2004005360A (ja) | サーバ負荷分散システム | |
US7672954B2 (en) | Method and apparatus for configuring a plurality of server systems into groups that are each separately accessible by client applications | |
KR20080008699A (ko) | 링 기반 연결 구조를 이용한 그리드 데이터베이스 시스템및 이를 위한 부하 분산 방법 | |
Sangam et al. | Fairly redistributing failed server load in a distributed system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040929 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040929 |
|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20060420 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20061010 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20061017 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20070227 |