以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一符号を付し、その繰り返しの説明は省略する。図1〜図16は、本発明の一実施の形態を説明するための図である。
本発明の一実施の形態におけるサーバ装置は、本サーバ装置を複数用いてサーバグループが定義・設定された構成において、クライアント装置からの要求をサーバグループで受信して、各サーバ装置での負荷状態の判断に応じて処理を受け付け、また各サーバ装置での負荷状態の判断に応じて動作状態を制御する。これによりサーバ装置間での負荷の調整及び節電がなされる。本サーバ装置上では、サーバグループにおける負荷分散、及び、節電のためのスリープ状態への移行やその復帰の制御のための制御方法に従った処理が、プログラムやハードウェア論理等に従って実行される。
<情報処理システム>
図1は、本発明の一実施の形態におけるサーバ装置であるサーバ200を含んで構成される情報処理システムの構成例を示す。本システムは、ネットワーク4に、PC1と、サーバ集合筐体2に実装された複数のサーバ200{a,b,c}とを有する。
ネットワーク4は、TCP/IPをベースとするインターネット、LANなどである。本実施の形態では、ネットワーク4は特にEthernet(登録商標)によるLANであり、TCP/IPベースのプロトコルで通信処理が行われる。また、実際の接続形態として、マルチドロップ接続、スイッチングハブやルータ経由によるスター接続などがあり得るが、いずれの場合も、各サーバ200へ出入りする電文はすべて、他のサーバ200においても傍受可能なように設定されている。
PC1は、ネットワーク端末装置であり、サーバ200に対するクライアント装置として、ネットワーク4を通じてサーバ200に対してアプリケーション等の処理の実行を要求する。必要に応じて1つ以上のPC1がネットワーク4に接続される構成である。
サーバ200{a,b,c}は、クライアントであるPC1からの処理要求を受信してそれに対応したアプリケーション等の処理を行う装置である。本例では、各サーバ200は、サーバ集合筐体2内に実装可能なブレードサーバ方式である。
サーバ集合筐体2は、1つの筐体に複数のサーバ200を実装可能とする筐体である。サーバ集合筐体2は、本例では、ブレードサーバ方式のサーバ200に対応したブレードシャーシの形態である。その他、サーバ集合筐体2は、サーバ200の形態に応じてラックマウントキャビネットといった各種形態が可能である。各サーバ200{a,b,c}は、保守・管理者により、必要に応じて、サーバ集合筐体2内に対して挿抜の動作により実装可能である。前記サーバ200の実装とは、サーバ200及びサーバ集合筐体2の形態に応じた挿抜や搭載やネジ止めなどの方法に加え、製造時点で、布線、半田付けなどにより事実上固定されているものも含んでいい。
サーバ集合筐体2には、各サーバ200の挿抜のためのスロット及びコネクタ等の構成を有する。例えばサーバ200の増設の場合、保守・管理者が、対象サーバ200をスロットに挿入してコネクタ同士を接続することで、サーバ集合筐体2内に接続・固定される。サーバ集合筐体2には、各サーバ200{a,b,c}が自由に実装され、すべてのサーバ200が同じネットワ−ク4に接続される。サーバ集合筐体2に有する実装スペースが許す限りで何台のサーバ200でも実装可能である。本例では、3つのサーバ200{a,b,c}がサーバ集合筐体2内に実装されており、それぞれネットワーク4上で通信可能である。
本システムでは、これら複数のサーバ200{a,b,c}を同一グループとして定義し、ネットワーク4上で処理の負荷分散を行う対象として取り扱う。このグループに関する定義情報を含む必要な設定の情報が、当該グループの各サーバ200において保持される。これら同一グループとして定義及び通信接続される複数のサーバ200{a,b,c}を、サーバグループと称する。
本システムでは、PC1からの処理要求を、共通の通信アドレスによりサーバグループで受信すると共に、負荷状態に応じてサーバ200{a,b,c}で処理を受け付ける。そして処理を受け付けたサーバ200は、その処理を実行した結果をPC1へ応答として送信する。なお、本例ではPC1とサーバ200との間で処理が完結する場合を説明するが、サーバ200に対して更に他の外部のサーバが接続される場合も可能である。その場合、サーバ200は、PC1から受け付けた処理の実行について他の外部のサーバでの処理が必要な場合に、そのサーバへ要求を出して、そのサーバからの処理結果またはそれをもとに処理を行った結果を、PC1へ応答として送信する。
<PC>
図2は、PC1のハードウェアブロック構成図を示している。PC1は、CPU101、メモリ102、LANボード103、HDD104、入力制御ボード105、出力制御ボード106を有する。
CPU101は、PC1全体を制御するプロセッサである。メモリ102は、プログラムやデータなどを一時記憶する。HDD104は、プログラム、テーブル類、DB情報などを記憶している外部記憶装置である。CPU101は、メモリ102上のプログラムを実行してPC1としての機能を実現する。入力制御ボード105は、キーボード、マウスなどの入力装置を制御するボードである。出力制御ボード106は、モニタ、液晶ディスプレイなどの表示装置や他の出力装置を制御するボードである。LANボード103は、ネットワーク4に対するLANインターフェースを制御するボードである。LANボード103によりネットワーク4上で各種コマンドやデータが授受される。PC1は、後述するグループIPアドレス614を認識している。
図3は、PC1のソフトウェアブロック構成図を示している。PC1は、アプリケーション部111、OS112、通信制御部113、入力制御部114、出力制御部115を有する。
アプリケーション部111は、Webブラウザ、メール、データ参照などのアプリケーションソフトウェアのプログラムを示す。OS(オペレーティングシステム)112は、入出力制御、イベント通知、アプリケーション部111のプログラムの起動・終了などのスケジュール管理を行う。アプリケーション部111及びOS112は、サーバ200に対する処理要求を必要に応じて発行する。
通信制御部113は、前記LANボード103の処理に対応するもので、LANインターフェースを制御するドライバや、TCP/IPプロトコル制御などが含まれる。入力制御部114は、前記入力装置の入力制御を行うドライバなどを含む。出力制御部115は、前記表示装置を制御する表示ドライバ、ビデオメモリ管理などが含まれる。
<サーバ>
図4は、サーバ200{a〜c}のハードウェアブロック構成図を示している。各々のサーバ200は、CPU201、メモリ202、LAN制御部203、HDD204、SVP制御部205、電源制御部206、補助電源207、及び図示しない主電源を有する。
CPU201は、サーバ200全体を制御するプロセッサであり、自サーバでの処理等を制御する。メモリ202は、プログラム、データ、テーブル情報などを一時記憶するメモリである。HDD204は、プログラム、テーブル類、DB情報などを記憶している外部記憶装置である。本例では、HDD204には、後述するテーブル(6,7)が保持される。CPU201は、メモリ202上のプログラムを実行してサーバ200としての機能を実現する。
LAN制御部203は、ネットワーク4に対するLANインターフェースを制御する部分であり、自サーバ200全体がスリープ状態の場合、ネットワーク4からの電文監視、電源制御も可能とする。LAN制御部203によりネットワーク4上で各種コマンドやデータが授受される。また、LAN制御部203は、同一サーバグループ内にある関連IPアドレスをソース、デスティネーションに使用した電文を、一旦、本制御部に取り込み、解析し、傍受可能としている。
SVP制御部205は、SVPインターフェースを制御する部分であり、サーバ内各部と外部のSVP(サービスプロセッサ)に対して接続される。SVPは、SVP制御部205を通じて、各サーバ200についての保守・管理の処理を行う。SVPの処理は、例えば構成や障害の管理といったものである。
本サーバ200は、ブレードサーバ方式であるため、個々には入力装置や出力装置を持たない構成である。その代わりに、外付けの監視装置やシステムコンソールなどの役目を果たすSVPによる入出力を可能とするために、SVP制御部205を有している。保守・管理者は、SVPを操作してサーバ200の保守・管理を行うことができる。サーバ集合筐体2としてのブレードシャーシ内には、図示しないが、上記SVPや、各サーバ200に対する電源供給を行う電源部や送風を行うファンといった部位が設けられている。
電源制御部206は、主電源をオフしたりオンしたりする制御が可能である。補助電源207上で主電源が稼動する。サーバ200内で主電源のオンにより電源供給される範囲は、補助電源207のオンにより電源供給される範囲以外とする。主電源及び補助電源207共にオンの状態を通常状態とし、主電源オフで補助電源207がオンの状態をスリープ状態とする。サーバ200に対するAC入力がオフあるいは装置のメインスイッチがオフの場合、主電源及び補助電源207共にオフであり完全に停止状態である。
また、LAN制御部203及び電源制御部206は、補助電源207によりバックアップされており、スリープ状態において動作可能な部位である。本部位は、主電源が落ちた場合でも補助電源207からの電源供給により、動作可能となっている。
そのため、LAN制御部203内においては、HDD204に格納されている必要なテーブル類(6,7)のコピーも記憶しており、スリープ状態時は、LAN制御部203でテーブル類の情報の参照や更新、電源制御部206への制御が可能である。
図5は、サーバ200{a,b,c}のソフトウェアブロック構成図を示している。サーバ200は、アプリケーション部211、OS212、通信制御部213、監視制御部214、負荷測定部215、電源制御部216、設定テーブル6、動作テーブル7を有する。
アプリケーション部211は、Web参照、メール制御、データ参照などのアプリケーションサーバソフトウェアのプログラムを示す。OS212は、入出力制御、イベント通知、アプリケーション部211のプログラムの起動・終了などのスケジュール管理を行う。サーバ200は、OS212とアプリケーション部211において、PC1からの処理要求に対応した処理(サービス)を行う。本例では、PC1からの処理要求に応じてサーバ200のアプリケーション部211で処理が行われ、その処理応答がPC1へ返される。
通信制御部213は、前記LAN制御部203の処理に対応するもので、LANインターフェースを制御するドライバ、TCP/IPプロトコル制御などが含まれる。通信制御部213を介して、PC1との間、サーバグループのサーバ200間で、それぞれ通信可能である。
監視制御部214は、同一サーバグループに構成されたサーバ200の動作状況の監視や、LANインターフェース上での電文の傍受監視などを行う。また監視制御部214は、設定テーブル6や動作テーブル7を管理し、必要に応じて参照・更新する。
負荷測定部215は、負荷状態の把握のための負荷情報として、自サーバ200のCPU201におけるCPU使用率を、定期的またはアプリケーション部211の処理の起動・終了などの負荷の変動時に応じて測定する。負荷測定部215で測定された自サーバ200の負荷情報は、監視制御部214を介して、動作テーブル7に反映される。また、負荷がある程度変動した場合には、通信制御部213を介して、同一サーバグループ内の他サーバ200への負荷情報の通知や交換のための通信が行われる。
電源制御部216は、前記電源制御部206の処理に対応するもので、主電源のオン/オフ制御による動作状態制御などが含まれる。電源制御部216により自サーバ200の動作状態を移行する場合、監視制御部214を介して、動作テーブル7に動作状態の情報を反映する。
本実施の形態では、グループ定義情報として、設定テーブル6と動作テーブル7を有する。設定テーブル6は、システムの設定のための情報であり、自身も含めた同一サーバグループの各サーバ200{a,b,c}のアドレスや識別名などの必要な設定情報を保持している。動作テーブル7は、システムの状態管理及び制御のための情報であり、自身も含めた同一サーバグループの各サーバ200{a,b,c}の動作や負荷の状態や制御条件などを、動作情報(状態情報などと言い換えてもよい)として管理・保持している。
サーバ200内の各部位は、通常状態において動作可能である。通信制御部213、監視制御部214、設定テーブル6、動作テーブル7は、ハードウェアのLAN制御部203上で動作し、電源制御部216は、ハードウェアの電源制御部206上で動作する。それにより、これらの部位は、主電源が落ちても補助電源207でバックアップされているため、スリープ状態時にも機能が動作可能である。逆に、CPU201及びメモリ202等のハードウェア上で実行される、アプリケーション部211、OS212、負荷測定部215等は、スリープ状態時には動作しない。
サーバ200の通常状態では、PC1からの処理受け付け及び実行や、負荷測定及び通知などの機能が可能である。サーバ200のスリープ状態では、サーバ200間でのメッセージの電文の授受や動作状態制御などの機能が実行可能である。
<テーブル>
図6は、設定テーブル6の形式の一実施例を示す。設定テーブル6は、すべてのサーバ200において、自ホスト名620を除き、同じ内容を持つ。設定テーブル6で、列(601〜603)にサーバ200{a,b,c}単位の情報を示し、行(611〜615)に各設定情報の項目を示している。これら設定テーブル6の内容は、外部のSVPよりSVP制御部205を通じて設定され、HDD204内などに記憶される。
固有ホスト名611は、各サーバ200に固有のホスト名が割り当てられる。本例では、各サーバ200{a,b,c}の固有ホスト名611は、“APSRVRa”、“APSRVRb”、“APSRVRc”と割り当てられている。
固有IPアドレス612は、各サーバ200{a,b,c}に固有のIPアドレスが通信アドレスとして割り当てられる。本例では、各サーバ200{a,b,c}の固有IPアドレス612は、“202.200.256.1”、“202.200.256.2”、“202.200.256.3”と割り当てられている。
グループホスト名613は、同一サーバグループのサーバ200群のすべてに対して、同一ホスト名が割り当てられる。本例では、サーバ200{a,b,c}のグループホスト名613は、“APSRVR”が割り当てられている。
グループIPアドレス614は、同一サーバグループのサーバ200群のすべてに対して、同一IPアドレスが共通の通信アドレスとして割り当てられる。一般には、本アドレスとして、テレビ会議などで使用される同一のマルチキャストアドレスや、ブロードキャストアドレスとして定義することでもよい。これにより、サーバ200が分散していても、ルータなどを経由して電文が届けられることになるため、各サーバ200のデータも傍受が可能になる。また、さらに、各サーバ200が同じLANの物理線上に接続されている場合は、固有のIPアドレス以外に、あらかじめ定めた共通のIPアドレスを監視することで実現可能である。本例では、すべてのサーバ200{a,b,c}は、グループIPアドレス614として“202.200.256.0”が割り当てられている。
MACアドレス615は、各サーバ200で固有のMACアドレスである。本例では、サーバ200{a,b,c}のMACアドレス615は、それぞれ、“01.23.45.67.89.AB”、“AB.CD.EF.01.23.45”、“67.89.AB.CD.EF.01”となっている。LAN制御部203は、MACアドレス615を有し、SVPからの設定でなく、パワーオン時、自サーバのMACアドレスのみ、LAN制御部203から取得し、本テーブルに設定することも可能である。
固有IPアドレス612、グループIPアドレス614、MACアドレス615は、ネットワーク4上の通信において送信元や送信先のアドレスとして使用される。
また、自ホスト名620には、自サーバ200のホスト名が設定される。例えば、サーバa(200)の自ホスト名620に、“APSRVRa”が設定されている。自ホスト名620が固有ホスト名611とリンクすることにより、上記列(601〜603)のうちいずれが自サーバ200の内容かを知ることができる。
本実施の形態では、PC1からサーバ200に対する処理要求は、グループIPアドレス614が送信先として使用される。また、処理要求を受け付けたサーバ200からPC1に対する応答は、固有IPアドレス612が送信元として使用される。
PC1からは処理要求に対応した処理を実際に受け付けて実行しているサーバ200を識別する必要は特にないが、当該サーバ200の識別は、固有IPアドレス612等により可能である。また、グループIPアドレス614や固有IPアドレス612は、各サーバ200間での負荷情報や動作状態の通知や動作状態移行のための要求などの各種メッセージの通信においても使用される。本例では、グループIPアドレス614を用いてグループ内に情報が通知される。
通信におけるIPアドレス部分では、上記グループIPアドレス614や固有IPアドレス612が設定されていても、ネットワーク4であるEthernet(登録商標)のデータリンクレベルでは、実際に送受信処理するLAN制御部203のMACアドレス615が設定される。但し、以降、IPアドレスからMACアドレス615への変換の技術は、ARP(Address Resolution Protocol)などを使用して、条件に該当するサーバが応答を返すことでMACアドレス615に変換することによりなされる。以下、この処理の詳細過程は省略するが、IPアドレスで行っている動作は、MACアドレス615においても同様に適用可能である。
図7は、動作テーブル7の形式の一実施例を示す。動作テーブル7の列(701〜703)にサーバ200{a,b,c}単位の情報を示し、行(711〜715)に各サーバ200の状態や制御条件などの項目を示している。本例では、動作テーブル7で管理する各サーバ200の状態として、処理提供及び電源制御に係わる動作の状態と、処理の実行に係わる負荷の状態とを分けており、それぞれ動作状態711とCPU使用率712とにより管理されている。これらの値に基づきサーバ200での処理の受け付けが判断され、すなわちサーバ200間の負荷が調整されることになる。また、前記各サーバ200の状態に関して、各サーバ200の動作状態711の制御のための情報が、稼動優先順位713やスリープ条件714等により管理されている。
動作状態711は、各サーバ200での処理提供及び電源制御に係わる動作の状態を示す項目であり、当該状態の変動に応じて設定される。動作状態711が“ON”ならば、該当サーバ200は、電源制御部206により主電源がオンされて通常状態であること、すなわち処理中または処理提供可能な状態であることを示す。主電源オンにより、処理を受け付け実行する処理部を含む部位に対して電源供給される。また動作状態711が“OFF”ならば、該当サーバ200は、電源制御部206により主電源がオフされ補助電源207がオンでスリープ状態であること、すなわち処理提供しない状態であることを示す。補助電源オンにより、スリープ状態で動作するサーバ200内の一部の部位に対し電源供給されバックアップされる。
CPU使用率712は、サーバ200での処理の実行における負荷状態を表わす値であり、CPU201の使用率の数値(単位は[%])で示している。自サーバのCPU使用率712は、負荷測定部215の処理により設定され、他サーバのCPU使用率712は、他サーバからの負荷情報の通知により設定される。
稼働優先順位713は、サーバグループのサーバ200間の稼動優先順位を示す。本例では、最後までスリープ状態とならないでサービス提供可能なサーバ200の順位(713)を“1”とし、以下、必要に応じてスリープ状態となるサーバ200の順位(713)を“2”,“3”と順位付けした値が設定されている。逆に、本稼動優先順位713が“3”,“2”のサーバ200の順に、優先してスリープ状態へ移行させることになる。本例では、稼動優先順位713の設定により、少なくともサーバa(200)が通常状態として稼動し続ける。従ってサーバグループにおける通常状態の稼動サーバ数が、1〜3台の間で負荷に応じて自動的に調整されることになる。
スリープ条件714は、各サーバ200がスリープ状態へ移行する際の判定のための条件を示している。サーバ200は、判定において、自身のCPU使用率712等をスリープ条件714に照らして、本条件に合致する場合、スリープ状態へ移行させる。例えば、サーバ200は、負荷測定部215によりCPU使用率712の経時変化を監視しておき、本CPU使用率712が低下傾向を示し、かつある閾値を下回った場合、自身で判断して、以降新たな処理要求は受け付けずに仕掛かりの処理のみ実行してそれがすべて終了後に、スリープ状態に移行する。
本例では、サーバa(200)のスリープ条件714は、稼動優先順位713を“1”としているため無しである。サーバb(200)において、自身のスリープ条件714が、「CPU使用率が50%から20%以下に低下」と設定されている。サーバb(200)は、自身のCPU使用率712の経時変化に基づき、本値が50%から20%以下に低下したときに、自身で判断してスリープ状態に移行する。同様にサーバc(200)において「CPU使用率が50%から30%以下に低下」と設定されている。
ヘルプ条件715は、サーバグループにおいて処理提供に係わる他のサーバ200の支援すなわち処理分散を要求する際の判定のための条件を示している。サーバ200は、判定において、自身のCPU使用率712等をヘルプ条件に照らして、本条件に合致する場合、ヘルプ要求処理を実行させる。これにより、ヘルプ要求において、サーバグループ内でスリープ状態中にある他のサーバ200で、稼動優先順位713の高いサーバから、再起動をかけていき、すなわち通常状態へ復帰させて処理の負荷分散がなされる状態にする。例えば、サーバ200は、負荷測定部215によりCPU使用率712の経時変化を監視しておき、本CPU使用率712の上昇傾向を示し、かつある閾値を越えた場合、自身で判断して、ヘルプ要求の電文を他のサーバ200へ送信する。
本例では、すべてのサーバ200{a,b,c}において、自身のヘルプ条件715が、「CPU使用率が50%から80%以上に上昇」と設定されている。サーバ200は、自身のCPU使用率712の経時変化に基づき、本値が50%から80%以上に上昇したときに、自身で判断してヘルプ要求処理を実行する。
また、これら動作テーブル7の情報も、自ホスト名620とリンクして前記図6と同様の列の配列とすることにより、上記列(701〜703)のうちいずれが自サーバ200の内容かを知ることができる。なお、稼動優先順位713やスリープ条件714等を、設定テーブル6内に設定されるようにしてもよい。例えばSVPからSVP制御部205を介して稼働優先順位713、スリープ条件714、ヘルプ条件715に対する設定を可能とする。
これら動作テーブル7の情報の内容は、各サーバ200の状態の変動などの契機で、後述の方法によって複数のサーバ200間でお互いに通信することにより、各サーバ200で保持している情報の整合性をとっている。
<電文>
図8は、ネットワーク4におけるLANインターフェース上で使用される電文の形式の一実施例を示している。電文の種類に対応してその電文に設定される各種情報を示している。PC1、サーバグループのサーバ200の間で授受される電文の種類として、本例では、各コマンド811〜817を使用する。各コマンド811〜817は、例えばヘッダとコンテンツを有する形式であり、ステータスや単なるデータ等の場合を含むものとする。各電文は、コマンド801、ソースIPアドレス801、デスティネーションIPアドレス802、セッション番号804、コンテンツ805の領域を含む。
コマンド801には、起動完了811、負荷情報812、処理要求813、処理受付814、受付応答815、スリープ連絡816、ヘルプ要求817がある。各コマンド811〜817は、電文の種類を示しており、コンテンツ805として何を含むかが決まる。
ソースIPアドレス802、デスティネーションIPアドレス803は、それぞれ、TCP/IPプロトコルにおける送信元のアドレス、送信先のアドレスが指定される。またセッション番号804は、他の同類の要求及び処理と混信しないための識別情報が設定される。
起動完了811は、自サーバ200が起動されて処理提供可能な通常状態(“ON”)となったことを、同一サーバグループ内の他サーバ200に対し報告するものである。本電文は、サーバ200における、主電源及び補助電源207共にオフである停止状態からのパワーオンによる起動時や、主電源オフであるスリープ状態からの復帰のための主電源オンによる再起動時に用いる。本例では、このソースIPアドレス802には、各サーバ200の固有IPアドレス612として“202.200.256.i”(iは1,2,3のどれか)を指定する場合を示している。またデスティネーションIPアドレス803には、グループIPアドレス614を指定する場合を示している。またコンテンツ805には、どのサーバ200が“ON”となったかを示す情報として、動作状態711を含む“APSRVRj=ON”(jはa,b,cのどれか)が含まれ、また他サーバ200への確認のために動作テーブル7の対象サーバ200に対応する列の情報(712〜715)も含まれている。また、稼動優先順位713やスリープ条件714等の情報については、これらが固定された設定のシステムとした場合には、これら情報を報告しないようにしてもよい。また、これら情報が更新されるシステムとした場合には、これら情報を更新に応じて報告するようにしてもよい。
負荷情報812は、各サーバ200の負荷の変動時、動作テーブル7における自身を含む各サーバ200の負荷情報を、サーバグループ内の他サーバ200に対し報告するためのものである。前記負荷の変動は、処理の受け付けや実行の状態以外にも、前記サーバ200の起動なども含む。このソースIPアドレス802及びデスティネーションIPアドレス803は、例えば起動完了811の場合と同様である。また、コンテンツ805には、自サーバ200で動作テーブル7に保持している、サーバグループ内の自身を含む全サーバ200についての負荷情報を、他サーバ200への確認も含めて報告する。本例では、負荷情報812のコンテンツ805に、負荷情報以外に動作状態711等の情報も含めており、例えば“APSRVRa=ON,70%”,“APSRVRb=ON,80%”,“APSRVRc=OFF”などが含まれている。
処理要求813は、PC1からサーバ200に対する、URL参照、メール送信、データ参照などの要求を表わす電文である。このソースIPアドレス802はPC1のIPアドレスであり、デスティネーションIPアドレス803はグループIPアドレス614である。またセッション番号804には、本例では“aa”が付与される。またコンテンツ805には、処理要求内容、及びパラメータなどのデータが含まれている。
処理受付814は、PC1からの処理要求813についてのサーバ200での処理の受け付けを表わす。この電文を受信したPC1等は、該当サーバ200で処理を受け付けることが認識できる。このソースIPアドレス802は、サーバグループにおいて処理要求813に対応した処理を受け付けたサーバ200の固有IPアドレス612を使用する。デスティネーションIPアドレス803はPC1のIPアドレスである。またセッション番号804として前記PC1からの処理要求813に対応したセッション番号804と同じ値(“aa”)が付加される。
受付応答815は、処理受付814に対する確認のための応答である。このソースIPアドレス802はPC1のIPアドレスであり、デスティネーションIPアドレス803は、処理受付814を送信してきた該当サーバ200の固有IPアドレス612である。PC1は、サーバ200からの処理受付814の電文を受信すると、これに付与されているセッション番号804(“aa”)と同じセッション番号804をセットした受付応答815の電文を該当サーバグループに返信する。
上記処理受付814や受付応答815等において、処理を受け付けたサーバ200の固有IPアドレス612を使用する理由は、サーバ200間での負荷情報などの交換の遅れや漏れ等に起因して複数のサーバ200がPC1に対し処理受付814の応答を返した場合にも対応してサーバ200を識別できるようにするためである。この場合、処理を受け付ける複数のサーバ200が、PC1に対し固有IPアドレス612を用いて処理受付814の電文を送信する。そして、PC1から、どの処理受付814の電文を受け取ったかを示すために該当サーバ200の固有IPアドレス612を用いて受付応答815を送信する。PC1からの受付応答815を受信したサーバ200は、自サーバ200で受け付けた処理がPC1側からも確認されたので、当該処理を継続する。前記受付応答815を受信しなかったサーバ200は、当該処理の継続を中止する。
処理結果818は、サーバ200での処理受付814に対応した処理結果となる、PC1への応答を示す。このソースIPアドレス802は処理を行った該当サーバ200の固有IPアドレス612であり、デスティネーションIPアドレス803はPC1のIPアドレスである。またセッション番号804として、前記処理受付814のセッション番号804と同じ値(“aa”)がセットされる。またコンテンツ805は、処理結果及びそのデータの詳細などが含まれている。
スリープ連絡816は、スリープ条件714による判定が成立したサーバ200が、スリープ状態へ移行する旨を同一サーバグループの他サーバ200に対し通知するためのものである。このソースIPアドレス802は、連絡元となるサーバ200の固有IPアドレス612を使用する。またデスティネーションIPアドレス803は、同一サーバグループのグループIPアドレス614を使用する場合を示す。またコンテンツ805には、該当サーバ200の動作状態711に対応した、どのサーバ200がスリープ状態へ移行するかを表す情報(“APSRVRj=OFF”)が含まれ、また確認のために動作テーブル7の対象サーバ200に対応する列の情報(712〜715)も含まれている。
ヘルプ要求817は、ヘルプ条件715による判定が成立したサーバ200が、同一サーバグループの他サーバ200に対し支援を要求するためのものである。各サーバ200は、自サーバ200のCPU使用率712などをもとにヘルプ条件715に照らしてヘルプ要求を発行するかどうかを判定する。サーバ200は、高い負荷状態となったこと等によりヘルプ条件715が成立した場合、他サーバ200に対しヘルプ要求を送信して、これにより他サーバ200でのヘルプ要求受付処理を通じて他サーバ200を再起動させる。このソースIPアドレス802は要求元のサーバ200の固有IPアドレス612を使用する。またデスティネーションIPアドレス803は、同一サーバグループのグループIPアドレス614を使用する場合を示す。またコンテンツ805に、要求元のサーバ200の動作テーブル7の対象サーバの列の情報(711〜715)を含めるようにしてもよい。
本例では、通常シーケンスでは、サーバ200からの処理受付814に対してPC1から受付応答815を返す。処理受付814と受付応答815とにより、該当サーバ200での処理の受け付けが確認される。処理受付814等の電文上において、固有IPアドレス612等により、どのサーバ200が具体的に処理を受け付けたかを知ることができる。サーバ200は、各サーバ200の負荷状態に応じて自分が処理すべきものか否か判断して、自己責任により遂行することになる。
なお、処理受付814と受付応答815を省略して確認なしに処理させるシーケンスとすることも可能である。すなわち、処理要求813に対して各サーバ200で判断して継続して処理する形態とする。偶然に複数のサーバ200が同じ条件・状態になったことにより、それぞれ同じ判断に基いて同じ処理を実行する可能性があるが、この場合でも、PC1では、最終的には、処理結果818を早く返したサーバ200からのデータが採用されることになる。
シーケンスにおける処理受付814及び受付応答815の必要性は、後述するように、これらの電文を他のサーバ200が傍受することにより、複数のサーバ200で同じ処理が実行される頻度を下げているだけである。通信におけるノイズなどにより処理受付814や受付応答815の電文が取りこぼされた場合なども含めて、複数のサーバ200が処理を受け付けた場合も、上記により処理がなされるようになっている。
<処理シーケンス及びフロー>
次に、本システムにおける処理のシーケンス及びフローを説明する。図9は、PC1、同一サーバグループのサーバ200{a,b,c}の間での一連の処理及び制御のシーケンスの例を示している。PC1、サーバ200の間では、前記電文を用いて本シーケンス及びフローに対応した通信及び処理が行われる。
ステップS1200において、サーバグループの各サーバ200、例えばサーバa(200)は、自身におけるある程度の負荷の変動を検出すると(S1011)、負荷情報812の電文を、サーバグループ内の他のサーバb,c(200)に送信することで負荷通知を行う(S1012)。これにより負荷情報812の電文を受信した各サーバb,c(200)は、その受信情報をもとに、動作テーブル7の内容を更新する(S1021,S1031)。
また、上記負荷通知と同様に、サーバグループのサーバ200は、起動により通常状態となった場合などに、動作状態の変動を通知するための起動完了811の電文を、サーバグループ内の他サーバ200に送信する。起動完了811の電文を受信したサーバ200は、その受信情報をもとに、自身の動作テーブル7の内容を更新する。負荷状態や動作状態の変動が発生したサーバ(200)では、自身の動作テーブル7の内容を更新している。上記動作が、常時、サーバグループ内で任意のサーバ200から他サーバ200に対して、変動発生に伴う情報の通知や交換によりお互いに連絡し合うことが行われている。
負荷変動時の負荷情報の交信については、通常処理を妨げるほどに頻繁に発生し過ぎないようにする。例えば、サーバグループにおいて、負荷通知のための閾値の設定を持たせ、サーバ200での負荷変動がその閾値の範囲を越えた場合に負荷情報912の電文を送信するようにする。
次に、S1001において、PC1から処理要求813の電文がサーバグループに対して送信された場合を示している。本処理要求813は、サーバグループに対して、そのグループIPアドレス614を送信先として用いて発行される。
一方、S1300で、サーバグループの各サーバ200は、処理要求813を受信する処理、及び、自サーバ200でその処理要求813に対応した処理を受け付けるかどうかを動作テーブル7の参照に基づき判断する処理などを行う。図13で述べる処理及び制御に従って、いずれかのサーバ200で処理を受け付け、処理を受け付けたサーバ200から処理受付814の電文がPC1に送信されることになる。本例では、S1001での処理要求813に対して、S1300でサーバグループの全サーバ200が通常状態であり、そのうちサーバb(200)の負荷が最小の状態であったため、サーバb(200)で処理を受け付ける場合を示している。
上記S1300では、各サーバ200で独立して処理の受け付けに関する判断が行われるので、状況に応じて結果として、1つのサーバ200のみが処理を受け付ける場合以外にも、複数のサーバ200が処理を受け付ける場合や、いずれも受け付けずに再試行が行われる場合などが発生し得る。いずれの場合でも、結果として1つのサーバ200との間で実際に処理が行われることになる。
上記S1300においてS1300bで、サーバb(200)は、動作テーブル7における各サーバ200{a,b,c}についてのCPU使用率712の比較に基づき、自サーバで処理を受け付けるか否か判断して、自サーバで処理を受け付けることを決めると、処理受付814の電文をPC1に送信する。サーバグループのうちサーバb(200)から処理受付814の電文を受信したPC1は、それに対する受付応答818の電文をサーバb(200)へ送信する。サーバb(200)は、受付応答818の電文を受信することで処理の受け付けを確認し、当該処理を継続する。
サーバグループのサーバb(200)が処理を受け付けたことにより、当該サーバb(200)で負荷変動が発生し検出される。そのため、前記S1200の処理と同様に、S1400の処理において、サーバb(200)から負荷情報812の電文を他サーバa,c(200)に報告し(S1022)、各サーバ200の動作テーブル7の内容を更新する。
ここで、サーバグループにおける負荷変動の検出の時期については、各サーバ200が非同期に、ある定められた間隔や、イベントが発生した直後など、任意に定めてよい。
前記S1400の後、前記処理要求813に対応した処理を受け付けたサーバb(200)で処理が遂行されると、処理結果818の電文が応答としてPC1へ送信されることとなる。S1002で、PC1は、処理結果818をサーバグループのサーバb(200)から受信する処理を行う。また、図示しないが、上記サーバb(200)において1つの処理が完了したことにより負荷変動が検出され、同様にサーバグループ内への負荷通知が行われる。
次に、処理要求813の発生が少ないことからサーバグループにおける全体の負荷が徐々に減少してきたものとする。これにより、サーバグループの各サーバ200での負荷状態とスリープ条件715に応じたスリープ判定に基づき、通常状態のサーバ200をスリープ状態へ移行する処理が行われる。本例では、S1500で、サーバグループの全サーバ200{a,b,c}が通常状態において、特にサーバc(200)において判定によりスリープ状態へ移行する場合を示す。
S1033で、サーバc(200)は、動作テーブル7の情報をもとに、自身の状態がスリープ条件714に合致するかどうかをチェックする処理(スリープ判定)を行っている。ここで、サーバc(200)は、自身の状態が、自身のスリープ条件714である「CPU使用率が50%から30%以下に低下」と合致した場合、スリープ状態へ移行することを決める。サーバc(200)は、その時点以上の処理の受け付けをせず、その時点で受け付け済みや処理途中の処理のみを遂行してから、スリープ連絡816の電文を同じサーバグループの他サーバa,b(200)に対し送信する。そしてS1034で、サーバc(200)は、自身で、電源制御部216により主電源をオフにしてスリープ状態に移行する処理(スリープ処理)を行う。サーバc(200)は、自身の動作テーブル7の動作状態711を“ON”から“OFF”にする。
一方、スリープ連絡816の電文を受け取った各サーバa,b(200)では、受信情報をもとに、自身の動作テーブル7における該当サーバc(200)についての動作状態711を“ON”から“OFF”にする(S1013,S1023)。その後、サーバa,b(200)の2台による運転すなわち処理提供が継続されることになる。
次に、その後、処理要求813の発生が多くなったことからサーバグループにおける全体の負荷が徐々に上昇してきたものとする。これにより、サーバグループの各サーバ200での負荷状態とヘルプ条件に応じたヘルプ判定に基づき、スリープ状態のサーバ200を通常状態へ移行する処理が行われる。本例では、S1600で、サーバグループのサーバa,b(200)の通常状態において、特にサーバa(200)において判定によりヘルプ要求817が発行され、その受け付けによりサーバc(200)が通常状態へ移行する場合を示す。
S1014で、サーバa(200)は、動作テーブル7の情報をもとに、自身の状態がヘルプ条件715に合致するかどうかをチェックする処理(ヘルプ判定)を行っている。ここで、サーバa(200)の状態が、自身のヘルプ条件715である「CPU使用率が50%から80%以上に上昇」と合致した場合、サーバa(200)は、ヘルプ要求8171を出すことを決める。サーバa(200)は、ヘルプ要求817の電文を同じサーバグループの他サーバb,c(200)に対し送信する。同様に他のサーバ200でヘルプ判定により条件に合致した場合もヘルプ要求817の電文を他サーバ200へ通知することになる。
一方、サーバグループ内の各サーバb,c(200)は、サーバa(200)からのヘルプ要求817の電文を受信する(S1024,S1034)。そのうち、スリープ状態にあるサーバ200は、自身の動作テーブル7の情報をもとに、ヘルプ要求817に応じて再起動するかどうか判断する受け付け処理を行う。本例では、スリープ状態にあるサーバc(200)が、サーバa(200)からのヘルプ要求817に対し、サーバグループの各サーバ200の動作状態711と稼動優先順位713をもとに判断して、自身を再起動することに決める。そして、S1036で、サーバc(200)は、自身で、電源制御部216により主電源をオンにしてスリープ状態から通常状態へ復帰する処理(再起動処理)を行う。そして、再起動後、サーバc(200)は、起動完了811の電文により、自身がスリープ状態から通常状態へ復帰した旨を、サーバグループ内の他サーバa,b(200)に対し送信する。これに応じて各サーバa,b(200)は、動作テーブル7の内容を更新する。これにより、再起動されたサーバc(200)を含むサーバグループすなわちサーバ200{a,b,c}において処理の負荷分散がなされる状態となるので、前記ヘルプ要求817を発行したサーバa(200)の負荷が減少されることになる。
またS1600の処理の際、一定時間内に複数のサーバ200からヘルプ要求817が発生した場合、複数のヘルプ要求817を受信した各サーバ200においては、1件のヘルプ要求が来たように集約する。すなわち、同じ時間内であればサーバグループ内で1台のスリープ状態のサーバ200のみで再起動をかけるようにする。
前記受け付け処理の判断では、サーバグループにおける動作状態711が“OFF”のサーバ200のうちで、稼働優先順位713が最も高いサーバ200を、ヘルプ要求817に応じて再起動させる。例えば、前記S1600で、サーバb,c(200)がスリープ状態で、各稼動優先順位713が“2”,“3”であったとする。その場合、各サーバb,c(200)でのヘルプ要求817の受け付け処理の判断で、サーバb(200)の稼動優先順位713の方が高いことにより、サーバb(200)の方で再起動することに決まる。
図10は、サーバグループのサーバ200{a,b,c}における、装置のパワーオンによる起動時、または他サーバ200からのヘルプ要求817の受け付けに応じた主電源オンによる再起動時の処理の詳細を示すフロー図である。再起動処理の場合は、電源制御部216より主電源をオンする。以下、再起動処理の場合を示す。本処理は、前記図9における再起動処理(S1036)等に対応している。
ステップS1001で、主電源オンにより再起動されたサーバ200(例えばサーバc)は、動作テーブル7における自サーバ200に相当する列の動作状態711を、“OFF”から“ON”にする。また、S1002で、同サーバ200は、同じ列のCPU使用率712を、‘0’にセットする。
次に、S1003で、同サーバ200は、負荷測定部215を起動し、これによりサーバグループの負荷状態の監視が行われる状態となる。
次に、S1004で、同サーバ200は、自身が再起動されたことを表わす起動完了811の電文を、同一サーバグループ内の他サーバ200(a,b)に対して送信する。これにより、自サーバ200(c)がサーバグループに対して処理提供可能な通常状態(“ON”)で追加されることを知らせる。
一方、図12のS1221でも示すように、サーバグループの各サーバ200(a,b)は、前記起動完了811の電文を受信すると、追加されるサーバ200(c)について、自身の動作テーブル7の内容を更新する。そしてそれと共に、自身の動作テーブル7における自身を含む各サーバ200(a,b)の負荷情報を、前記負荷情報812の電文により該当サーバ200(c)へ送信する。
次に、S1005で、前記起動完了811を送信したサーバ200(c)は、他サーバ200(a,b)からの負荷情報812の電文の受信を確認する。負荷情報812の電文を受信した場合(S1005−YES)、S906で、同サーバ200(c)は、その電文のコンテンツ805に含まれている各サーバ200(a,b)についての負荷情報に従い、それに対応する自身の動作テーブル7における自サーバの列以外のすべての列を更新する。
図11は、サーバグループのサーバ200{a,b,c}における負荷情報の送信処理の詳細を示すフロー図である。本処理は、前記図9における、負荷変動をチェックして他サーバ200へ負荷情報812の電文を送信する処理(S1200等)に対応している。
まず、S1101で、各サーバ200は、負荷測定部215により、自サーバ200の負荷情報としてCPU使用率712を測定している。この負荷の測定方法については各種周知技術があるが、例えば、インターバルタイマーを利用して、一定間隔で、OS212の状態を見て、ウェイト状態か否か(すなわち処理待ちか処理中か)を判定したり、CPU自身から発生されるウェイト信号、HOLD信号など特定の信号を監視したりすることにより、CPU201の使用率を計算することにより行う。
S1102で、サーバ200は、直前測定時の自サーバ200の動作テーブル7のCPU使用率712と、S1101で現在測定した値とを比較する。比較に基づき、S1103で、前記測定したCPU使用率712の値が、ある程度の範囲内に収まるかそれ以上に変動しているかを、閾値との比較により判定することで負荷変動をチェックする。なお、上記判断の基準となる閾値について設定可能としてもよい。
前記閾値内の変動の場合(S1103−YES)、S1105で、該当サーバ200は、定められた時間分をウェイト後、S1101へ移り、再度同様の処理を繰り返す。上記定められた時間の値は、ランダム値や一定値などである。
前記閾値以上の変動がある場合(S1103−NO)、S1104において、該当サーバ200は、前記S1101での測定値を、動作テーブル7におけるCPU使用率712の項目の自サーバ200に対応する列へ設定して更新する。
次に、S1106において、該当サーバ200は、負荷変動を検出したことにより、負荷情報812の電文を作成する。すなわち、該当サーバ200は、自身の動作テーブル7における動作状態711及びCPU使用率712の項目における全サーバの列(701〜703)に対応した値を、負荷情報812の電文のコンテンツ805へセットする。なお、この際、CPU使用率712の値のみ使用するようにしてもよい。
次に、S1107において、該当サーバ200は、作成した負荷情報812の電文を、同一サーバグループ内の他サーバ200に対して送信する。
なお、前記各サーバ200の動作テーブル7の情報に関しては、状態の変動や情報の通知の遅れや漏れ等により、サーバ200間で違いがあり得る。前記他サーバ200から負荷情報812や起動完了811の電文を受信した際に動作テーブル7へ反映する情報の決定においては、例えば、常に受信した最近値を使用すること、あるいは、最近値に限らず重い負荷を示す情報の方を優先して使用すること等により決定してもよい。例えば、あるサーバ200の負荷状態の更新のための複数の負荷情報812を受けた場合に、最近値を使用する。また例えば、動作テーブル7で記憶する情報として、ある時点の負荷であることを示すタイムスタンプ情報を付加しておき、本タイムスタンプと比較して新しい値を使用する形式としてもよい。
また、サーバ200間での負荷情報812の授受に関しては、あるサーバ200からサーバグループに対して自サーバ200のみの情報を通知するようにしてもよい。本例では、動作テーブル7における自サーバ200を含むすべてのサーバ200についての負荷情報を他サーバ200へ通知することで、サーバ200間の情報の違いを少なくさせるようにしている。
図12は、サーバグループのサーバ200{a,b,c}における各種コマンド801の電文の受信処理についての詳細を示すフロー図である。
まず、S1201において、電文を受信したサーバ200は、受信した電文のデスティネーションIPアドレス803がグループIPアドレス614であるかどうかを比較判定する。当該アドレスが一致しない場合は終了する。
前記アドレスが一致する場合は、次に、S1202で、該当サーバ200は、電文のコマンド801が負荷情報812かどうかを判定する。負荷情報812の場合、S1211で、該当サーバ200は、該当電文のコンテンツ805における自サーバを除く全サーバについての負荷情報の値を、動作テーブル7の該当行(712)へ、自サーバの列の値は残してそれ以外の他サーバの列へセットする。
次に、S1203において、該当サーバ200は、コマンド801が起動完了811かどうか判定する。起動完了811の場合、S1221で、該当サーバ200は、該当電文のコンテンツ805における対象サーバの動作状態711などの情報を、自身の動作テーブル7における該当行の対象サーバの列へセットする。
次に、S1204で、該当サーバ200は、コマンド801が処理要求813かどうか判定する。処理要求813の場合、S1241で、図13で詳細に示すような、処理要求813の電文についての受け付け処理を行う。そしてこの受け付け処理後に終了する。
次に、S1205で、該当サーバ200は、コマンド801がスリープ連絡816かどうか判定する。スリープ連絡816の場合、S1231で、該当サーバ200は、スリープ連絡816の電文のコンテンツ805に従い、動作テーブル7における対象サーバの列の動作状態711を“ON”から“OFF”にし、CPU使用率712を‘0’にする。
次に、S1206で、該当サーバ200は、コマンド801がヘルプ要求817かどうか判定する。ヘルプ要求817の場合、S1251で、図16に詳細に示すように、該当サーバ200は、ヘルプ要817についての受け付け処理を行う。受信した電文のコマンド801が以上に該当しない場合、何もしないで当該電文を破棄して終了する。
図13は、サーバグループのサーバ200{a,b,c}における処理要求813についての受け付け処理(S1241)の詳細を示すフロー図である。S1303〜S1305の処理により、いずれかのサーバ200で処理を受け付けるように制御する例である。
まず、S1301において、グループIPアドレス614を送信先として用いた処理要求813の電文を受信した各サーバ200は、動作テーブル7の内容を読み出す。次に、S1302で、該当サーバ200は、動作テーブル7におけるCPU使用率712の自サーバの列と他サーバの列との値を比較する。次に、S1303で、該当サーバ200は、自サーバの列のCPU使用率712がサーバグループ内で最小かどうかを判定する。
前記S1303で、該当サーバ200は、自サーバのCPU使用率712が最小でない場合(S1303−NO)、S1310に移る。該当サーバ200は、前記自サーバのCPU使用率712が最小の場合(S1303−YES)、更にS1304で、動作テーブル7で本最小値において他サーバの対応列のCPU使用率712と一致するものが無いかを判定する。すなわちサーバグループ内の複数のサーバ200で負荷が同じ最小値となっている場合を検出する。
前記最小値が一致する複数のサーバ200がある場合は(S1304−YES)、あらかじめ設定されている所定の規則に従って、その中で処理を受け付けるサーバ200を選択して自サーバで処理を受け付けるかどうかを決める。この際の規則の例として、本例では、S1305で、該当サーバ200は、設定テーブル6における各サーバ200のMACアドレス615の情報を参照して、自サーバのMACアドレス615の値が最小かどうかを判定し、その値が最小のサーバ200で処理を受け付けるように決定する。自サーバ200のMACアドレス615の値が最小値でない場合(S1305−NO)、S1310に移る。
上記処理を通じて、CPU使用率712が最小の1つのサーバ200(S1304−NO)、あるいは、CPU使用率712が最小の複数のサーバ200がある場合はそのうちMACアドレス615が最小のサーバ200(S1305−YES)が、処理を受け付ける義務を負うことになる。
前記S1303−NOまたはS1305−NOとなり処理を受け付ける条件が成立しない場合、次にS1310で、該当サーバ200は、ランダムな時間分ウェイトして、S1311で、他サーバ200が処理を受け付けたかどうかを、前記処理受付814の電文を傍受監視することで判断する。該当サーバ200は、前記処理受付814の電文を傍受した場合(S1311−YES)、終了する。前記処理受付814の電文を傍受しなかった場合(S1311−NO)、再度、開始に戻って前記S1301からやり直す。
前記S1311−NOの場合には、再度、処理受け付けの判断に係わる再試行を行う。これは、各サーバ200間の状態に関して、情報の通知の遅れや漏れ等により同時刻で同じ値が保証される訳ではないことを考慮して、サーバグループの全サーバ200が処理を受け付けずデッドロックにより誰も応答しない場合を防止するための措置である。
前記S1303の処理を中心にして、PC1に対し処理受付814の電文を応答する条件が整った場合、該当サーバ200は、複数のサーバ200からの処理受付814の応答が同時に発生しないように、Ethernet(登録商標)における衝突防止と同様の考え方により、S1306で、ランダムな時間分ウェイトする。そしてS1307で、該当サーバ200は、そのウェイトの間、サーバグループの他サーバ200からの処理受付814の電文を傍受監視することにより、他サーバ200が処理受付814の応答をPC1に対して行っていないことを確認する。該当サーバ200は、前記電文を傍受したことにより他サーバ200が応答していることを確認した場合(S1307−YES)、処理を受け付けせずに終了する。
該当サーバ200は、前記電文を傍受しなかったことにより他サーバ200が応答していないことを確認した場合(S1307−NO)、次に、S1308で、処理受付814の電文を作成する。ここで、該当サーバ200は、処理受付814の電文に、送信元として自サーバの固有IPアドレス612をセットし、またセッション番号804をセットする。そして、S1309で、該当サーバ200は、作成した処理受付814の電文を、PC1に対して送信する。
S1309の後、PC1において処理受付814の電文が受信され、受付応答815の電文が該当サーバ200へと返される。そして該当サーバ200で処理が継続して実行され、処理結果818がPC1へ返されることになる。
前記S1303等の処理において、サーバ200の負荷状態を最小値により判断する以外にも、負荷情報がある程度の閾値以下に収まるものを選択すること等により判断してもよい。また、前記S1305で用いる規則は、MACアドレス615以外でも、各サーバ200に対し定められた異なる値などを用いることもできる。また、前記S1306やS1310におけるウェイト時間については、例えばMACアドレス615等をもとに定められる、各サーバ200で異なる固定値などとしてもよい。
このようなサーバ200での処理受付の決定に係わる所定の判断基準や規則に応じて、1つのサーバ200で処理受付が行われるように制御している。また、前記判断基準や各サーバ200で持つ情報の違い等によって、複数のサーバ200で処理受付が行われる場合も発生し得る。この場合、そのうち1つのサーバ200に対するPC1からの受付応答815の授受や、S1310及びS1311におけるウェイト及び電文の傍受監視による処理受付に係わる判断の再試行などの仕組みにより、1つのサーバ200で実際に処理を行わせるように制御している。
また、S1307,S1311における傍受は、マルチキャストやブローキャスト用のアドレスではないため、必ずしも電文が流れてくる保証は無いが、これにより、偶然2台以上のサーバ200で同じ条件となり、複数サーバ200上で、無駄な冗長処理が実行される確率を低くしている。万一、複数サーバ200が受け付けても早いものが有効となり、遅いサーバ200での処理が空振りとなるだけである。
本例では、サーバグループにおける電文の傍受により他サーバ200からの応答(処理受け付け)を知る方法を採ったが、サーバ200からPC1への応答時、これに合わせて、同じサーバグループ内のサーバ200に対してマルチキャスト送信も含む明示的な送信を行う方法により、前記応答を知ることとしてもよい。
図14は、サーバグループのサーバ200{a,b,c}におけるスリープ判定の処理の詳細を示すフロー図である。本処理は、前記図9におけるスリープ条件714のチェック処理(S1033)及びスリープ処理(S1034)に対応している。本処理は、通常状態のサーバ200において、負荷状態などの変動、定められた間隔、任意の空いている時間の利用などの契機で適宜実行される。
まず、S1401で、該当サーバ200は、負荷測定部215により、自サーバの最新のCPU使用率712を測定する。次に、S1402で、該当サーバ200は、上記測定したCPU使用率712が、自サーバのスリープ条件714に合致するかどうか判定する。上記条件に合致しない場合(S1403−NO)、終了する。上記条件に合致した場合(S1403−YES)、該当サーバ200は、スリープ連絡816の電文を作成して、同じサーバグループの他サーバ200に対し送信する。そして送信後に、S1404で、該当サーバ200自身は、電源制御部216により主電源をオフしてスリープ状態へ移行し、すなわち動作テーブル7の自身の動作状態711を“ON”から“OFF”にし、終了する。
図15は、サーバグループのサーバ200{a,b,c}におけるヘルプ判定の処理の詳細を示すフロー図である。本処理は、前記図9におけるヘルプ条件715のチェック処理(S1014)に対応している。本処理は、通常状態のサーバ200において、負荷状態などの変動、定められた間隔、任意の空いている時間の利用などの契機で適宜実行される。
まず、S1501で、該当サーバ200は、負荷測定部215により自サーバの最新のCPU使用率712を測定する。次に、S1502で、上記測定したCPU使用率712が、自サーバのヘルプ条件715に合致するかどうか判定する。上記条件に合致しない場合(S1502−NO)、終了する。上記条件に合致した場合(S1502−YES)、次にS1503において、ヘルプ要求817の電文を作成して、同じサーバグループの他サーバ200に対し送信し、終了する。
図16は、サーバグループのサーバ200{a,b,c}におけるヘルプ要求817の受け付け処理の詳細を示すフロー図である。本処理は、前記図9におけるヘルプ受信・受付処理(S1035)及び再起動処理(S1036)に対応している。本処理は、スリープ状態にあるサーバ200においてヘルプ要求817の電文を受信した時に実行される。
まず、S1601で、スリープ状態のサーバ200でヘルプ要求817の電文を受信する。次に、S1602で、該当サーバ200は、自サーバで保持している動作テーブル7における全サーバの情報を参照して、各動作状態711及び稼動優先順位713を含む情報をチェックする。そして、S1603で、動作状態711においてスリープ状態(“OFF”)になっている自サーバを含む1つ以上のサーバ200のうちで、自サーバの稼働優先順位713が一番高い、すなわち数字としては小さいかどうかを判断する。他サーバの稼働優先順位713の方が高い場合(S1603−NO)、ヘルプ要求817に応じずに終了する。自サーバの稼働優先順位713が一番高い場合(S1603−YES)、次にS1604で、該当サーバ200は、前記図10に示すように、電源制御部206から主電源をオンすることにより、自サーバを再起動して通常状態へ復帰させ動作テーブル7の内容を更新する。また、再起動後、該当サーバ200は、起動完了811の電文をサーバグループ内の他サーバ200に送信することにより、通常状態へ復帰したことを通知し、各動作テーブル7の内容を更新させる。
以上説明したように、本実施の形態によれば、サーバグループの全体を管理するあるいは処理要求を一次受け付けするような装置や、外付けの負荷分散装置のような特殊な装置を必要とせず、サーバグループ内のサーバ200における処理の負荷分散・均衡化を図ることができる。また、サーバ200やPC1の数の増減に伴う負荷変動に対応して、サーバグループの全サーバ200が自立的に負荷を調整していき、常に、全サーバ200でできる限り均等に負荷を持つようにできる。そして、サーバ200間で各サーバ200が負荷状態及び制御条件などに基づき自立的に判断して動作状態711を移行する制御により、負荷が少なくなってきた場合はスリープ状態となって節電でき、また負荷が多くなってきた場合は通常状態へ復帰させて処理分散できる。
以上の他に、本実施の形態では、サーバ200の負荷情報としてCPU使用率712を用いたが、その他、サーバ200でPC1から受け付けた処理数や、いわゆるトラフィック量(転送レート等)や、実行ジョブ(サーバ200での処理を分割した単位)数などの他のパラメータを使用してもよい。
また、本例では、負荷分散対象となるサーバ200に関して、同様の性能のブレードサーバ方式を対象にした。これに限らず、本発明の他の実施の形態では、前記ブレードサーバ方式ではなく、スタンドアロン型の複数のサーバ装置や、それぞれ異なる性能の複数のサーバを用いてシステムが構成される。スタンドアロン型の複数のサーバ装置でシステムを構成する場合、前記図1におけるサーバ集合筐体2を除いた同様の構成となる。また上記異なる性能の複数のサーバ、例えばCPU201の処理速度[Hz]が異なる複数のサーバで構成する場合では、負荷情報として前記CPU使用率712などを使用する場合、低い性能のサーバには少ない仕事量を、高い性能のサーバには多くの仕事量を課すような負荷分散の均衡を保たせる。
また、処理を受け付けたサーバ200の識別に関して、固有IPアドレス612を用いる以外に、グループIPアドレス614、セッション番号804、及びサーバ200の識別情報(固有ホスト名611や固有IPアドレス612等)の組み合わせを用いる等としてもよい。
また、本システム内に1つのサーバグループのみ設定される場合を示したが、例えば、サーバ集合筐体2においてサーバ200の組み合わせにより複数のサーバグループを設定して、各サーバグループにおいて同様に負荷分散することも可能である。
また、本例では、各サーバ200のネットワーク4に対する接続・配線の形式について、マルチドロップ型、すなわち各サーバ200が独立してLAN制御部203によりネットワーク4に対し接続される形式とした。これに限らず、各サーバ200が、ネットワーク4に対し、スイッチやハブやルータやゲートウェイ等の、データ転送の役割を持つ中継部を介在して接続・配線される形式も可能である。すなわち各サーバ200が中継部に接続され、中継部がネットワーク4に対し接続される形式である。例えば、サーバ集合筐体2内にこのような中継部を設けた構成も可能である。この場合でも、各サーバ200間、及び、各サーバ200とPC1との間の通信の電文において、前記グループIPアドレス614が用いられた場合には、前記中継部でその電文が同一サーバグループのサーバ200に対して転送されるように、転送に関する設定を行っておく。これにより同様に負荷分散が実現可能である。
また、起動完了811、負荷情報812、スリープ連絡816、ヘルプ要求817などのサーバ200間で交換する電文のデスティネーションIPアドレスとして、共通のグループIPアドレス614を使用せず、毎回、同じグループの全サーバ200の個別IPアドレス(612)に対して、ユニキャスト通信により、相手を明示的に指定して送る方法でもよい。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
1…PC、2…サーバ集合筐体、4…ネットワーク、6…設定テーブル、7…動作テーブル、101,201…CPU、102,202…メモリ、103…LANボード、104,204…HDD、105…入力制御ボード、106…出力制御ボード、111,211…アプリケーション部、112,212…OS、113,213…通信制御部、114…入力制御部、115…出力制御部、200…サーバ、203…LAN制御部、205…SVP制御部、206,216…電源制御部、207…補助電源、214…監視制御部、215…負荷測定部、711…動作状態、712…CPU使用率、713…稼動優先順位、714…スリープ条件、715…ヘルプ条件。