(57)【要約】  複数のアクセスサーバと複数のＩ／Ｏ処理サーバを有するシステムにおける負荷分散システムを提供する。ユーザアプリケーションから発行されたＩ／Ｏ処理要求は、アクセスサーバ、Ｉ／Ｏ処理サーバを介して、ストレージ装置に通知される。Ｉ／Ｏ処理サーバは、Ｉ／Ｏ処理要求をストレージ装置に通知してからレスポンスを受信し、処理が完了するまでの応答時間を計測し、これから、過負荷状態が発生しているか否かを判断する。過負荷状態が発生している場合には、Ｉ／Ｏ処理サーバは、アクセスサーバに過負荷状態を通知する。過負荷状態の通知を受けたアクセスサーバは、他のＩ／Ｏ処理サーバにＩ／Ｏ処理要求を送信するよう設定し、以降のＩ／Ｏ処理要求を、この他のＩ／Ｏ処理サーバに送るようにする。
2013094007.tif 000002
【特許請求の範囲】
【請求項１】
入力処理要求又は出力処理要求を受け付け、処理結果を返送する複数のストレージ装置と、
該複数のストレージ装置の１つに該入入力処理要求又は出力処理要求を送信し、該処理結果を受信し、該入力処理要求又は出力処理要求の送信から該処理の完了までのレスポンス時間が閾値を超えた場合に、該入力処理要求又は出力処理要求に対する処理が過負荷状態にあることを示す過負荷応答を送出する複数のＩ／Ｏ処理サーバと、
ユーザからの入力処理要求又は出力処理要求を、該Ｉ／Ｏ処理サーバからの該過負荷応答に基づいて、過負荷状態ではないＩ／Ｏ処理サーバへ送信する複数のアクセスサーバと、
を備えることを特徴とする負荷分散システム。
【請求項２】
前記アクセスサーバは、過負荷状態にある前記Ｉ／Ｏ処理サーバに対し、ダミーの入力処理要求又は出力処理要求を送信し、過負荷状態が解消したか否かを確認することを特徴とする請求項１に記載の負荷分散システム。
【請求項３】
前記アクセスサーバは、前記Ｉ／Ｏ処理サーバごとに、負荷状態を判断する閾値に対応付けられた、レベルが増加するごとに該閾値が小さくなる閾値レベルを保持し、過負荷状態を示す場合には、対応する該Ｉ／Ｏ処理サーバの閾値レベルの値を増加することを特徴とする請求項１に記載の負荷分散システム。
【請求項４】
前記閾値レベルは、過負荷状態が解消された場合には、値が減少されることを特徴とする請求項３に記載の負荷分散システム。
【請求項５】
前記アクセスサーバは、前記閾値レベルに基づいて、負荷の軽い前記Ｉ／Ｏ処理サーバから順にリストにリストアップし、該リストの上に登録されている該Ｉ／Ｏ処理サーバから順に前記入力処理要求又は出力処理要求を割り振ることを特徴とする請求項４に記載の負荷分散システム。
【請求項６】
前記Ｉ／Ｏ処理サーバは、前記ストレージ装置ごとに、負荷状態を判断する閾値に対応付けられた、レベルが増加するごとに該閾値が大きくなる閾値レベルを保持し、前記レスポンス時間が過負荷状態を示す場合には、対応する該ストレージ装置の閾値レベルの値を増加することを特徴とする請求項１に記載の負荷分散システム。
【請求項７】
前記閾値レベルは、過負荷状態が解消された場合には、値が減少されることを特徴とする請求項６に記載の負荷分散システム。
【請求項８】
前記Ｉ／Ｏ処理サーバは、前記レスポンス時間が前記閾値レベルに対応した、負荷状態を判断する閾値より大きい場合、過負荷状態であることを前記アクセスサーバに送信することを特徴とする請求項７に記載の負荷分散システム。
【請求項９】
入力処理要求又は出力処理要求を受け付け、処理結果を返送する複数のストレージ装置と、該複数のストレージ装置の１つに該入力処理要求又は出力処理要求を送信し、該処理結果を受信し、複数のＩ／Ｏ処理サーバと、ユーザからの入力処理要求又は出力処理要求を、該Ｉ／Ｏ処理サーバに送信する複数のアクセスサーバとを備える負荷分散システムの負荷分散方法であって、
該Ｉ／Ｏ処理サーバは、該入力処理要求又は出力処理要求の送信から該処理の完了までのレスポンス時間が閾値を超えた場合に、該入力処理要求又は出力処理要求に対する処理が過負荷状態にあることを示す過負荷応答を送出し、
該アクセスサーバは、該Ｉ／Ｏ処理サーバからの該過負荷応答に基づいて、過負荷状態ではないＩ／Ｏ処理サーバへ該入力処理要求又は出力処理要求を送信する
ことを特徴とする負荷分散方法。
【請求項１０】
入力処理要求又は出力処理要求を受け付け、処理結果を返送する複数のストレージ装置と、該複数のストレージ装置の１つに該入力処理要求又は出力処理要求を送信し、該処理結果を受信する複数のＩ／Ｏ処理サーバと、ユーザからの入力処理要求又は出力処理要求を、該Ｉ／Ｏ処理サーバからの過負荷応答に基づいて、過負荷状態ではないＩ／Ｏ処理サーバへ該入力処理要求又は出力処理要求を送信する複数のアクセスサーバとを備える負荷分散システムのプログラムであって、
該Ｉ／Ｏ処理サーバに、
該入力処理要求又は出力処理要求の送信から該処理の完了までのレスポンス時間が閾値を超えた場合に、該入力処理要求又は出力処理要求に対する処理が過負荷状態にあることを示す該過負荷応答を該アクセスサーバに送出させる、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
以下の実施形態は、負荷分散システムに関する。
【背景技術】
【０００２】
近年、コンピュータとネットワークの発展により、従来、ローカルなハードディスクなどに格納されていたデータを、ネットワークで接続されたサーバシステムの記憶装置に格納する形態のサービスが実現されつつある。このようなサービスをクラウドサービスと呼ぶ。このようなクラウドサービスにおいては、多数のサーバが設けられ、ユーザからの処理要求を各サーバに割り振ることが行なわれる。その際には、１つのサーバに処理が集中しないように、負荷分散を行なう必要がある。サーバの負荷は、サーバから記憶装置にＩ／Ｏ処理要求を発行し、それが処理されるまでの記憶装置の処理速度によって大きく左右される。記憶装置が速く処理をすれば、そのＩ／Ｏ処理要求を送出したサーバの処理も早く済み、負荷が軽減されることになる。したがって、サーバの負荷は、記憶装置の応答時間により決定される。【０００３】
図１は、負荷分散を行なう従来技術を説明する図である。
図１のシステムは、ユーザからの処理要求を受け付けるアクセスサーバ１０−１、１０−２、負荷分散装置１２を備える。また、アクセスサーバ１０−１、１０−２からのアクセス要求を処理するＩ／Ｏ処理サーバ１４−１〜１４−３、データの書き込み、読み出しを行なうストレージ装置１６−１〜１６−４を備える。そして、これらは、ネットワーク１１、１３、１５によって接続される。Ｉ／Ｏ処理サーバ１４−１〜１４−３とストレージ装置１６−１〜１６−４との間の接続は、ネットワーク１５を介して、Ｉ／Ｏ処理サーバ１つに複数のストレージ装置が接続されたり、１つのストレージ装置に複数のＩ／Ｏ処理サーバが接続されたりする。アクセスサーバは、ストレージ装置にＩ／Ｏ処理要求を転送する場合、Ｉ／Ｏ処理サーバを介して所望のストレージ装置にＩ／Ｏ処理要求を転送するか決定する。どのＩ／Ｏ処理サーバもいずれのストレージ装置にＩ／Ｏ処理要求を転送できるように設定される。【０００４】
負荷の平準化についての従来の方式では、負荷分散装置１２を使用して実処理を行うＩ／Ｏ処理サーバ１４−１〜１４−３の負荷を平準化している。図１は、Ｉ／Ｏ処理要求（ストレージ装置１６−１〜１６−４に対する書き込み、読み出し要求）を行うアクセスサーバ１０−１、１０−２が複数あり、負荷分散装置１２を使用してＩ／Ｏ処理サーバ１４−１〜１４−３の負荷を分散させる例を示している。【０００５】
あるＩ／Ｏ処理サーバがあるストレージ装置への書き込みを行なう場合、アクセスサーバからＩ／Ｏ処理要求が発行されても、ストレージ装置の負荷が大きく、レスポンスが悪い場合、Ｉ／Ｏ処理サーバの処理の時間も長くかかってしまう。したがって、このような場合には、Ｉ／Ｏ処理サーバの負荷が大きいと見ることができる。ここでの負荷は、アクセスサーバから見た、Ｉ／Ｏ処理サーバとストレージ装置からなるシステム側の全体としての負荷バランスという意味で述べている。アクセスサーバがあるデータにアクセスしたい場合、そのデータを保持しているストレージ装置にアクセスできなければ意味がない。したがって、あるストレージ装置にアクセスが集中した場合には、負荷を分散することができない。しかし、アクセスサーバから見たＩ／Ｏ処理サーバとストレージ装置からなるシステムの負荷の分散という意味では、Ｉ／Ｏ処理サーバの負荷を分散させることがある。複数のＩ／Ｏ処理サーバと複数のストレージ装置は相互に接続されており、異なるＩ／Ｏ処理サーバから同じストレージ装置にアクセスすることができる。Ｉ／Ｏ処理サーバの負荷は、ストレージ装置にＩ／Ｏ処理要求を送信してから、その処理が完了するまでのレスポンス時間を示すと考えることができる。したがって、あるＩ／Ｏ処理サーバのレスポンス時間が大きい場合には、他のレスポンス時間が小さいＩ／Ｏ処理サーバにＩ／Ｏ処理要求を送るようにする。このことにより、同じストレージ装置にアクセスするとしても、Ｉ／Ｏ処理サーバとストレージ装置からなるシステムの負荷分散を行なうことができる。【０００６】
この構成では、Ｉ／Ｏ処理サーバ１４−１〜１４−３のいずれかの負荷が高くなった場合には、負荷分散装置１２が別のＩ／Ｏ処理サーバ１４−１〜１４−３に対して負荷を振り分ける。この構成では、以下の２点の問題がある。
・負荷分散装置１２の高負荷
アクセスサーバ１０−１、１０−２の数が増えた際に、負荷分散装置１２の負荷が高くなり、負荷分散装置１２の処理でボトルネックが発生する可能性がある。
・負荷分散装置１２の異常
負荷分散装置１２に異常が発生し、負荷分散装置１２がダウンした場合には、全てのＩ／Ｏ処理要求に対する処理が止まることになる。【０００７】
異常が発生した際のＩ／Ｏ処理要求の処理の引き継ぎに関して、従来の方式では、マルチパス方式を使用している。【０００８】
図２は、従来のマルチパス方式を使用した場合の構成図である。
アクセスサーバ１０では、Ｉ／Ｏ処理サーバ１４−１とＩ／Ｏ処理サーバ１４−２への複数のパス（アクセスパス（１）、（２））を予め定義しておく。Ｉ／Ｏ処理サーバ１４−１、１４−２でＩ／Ｏ処理要求に対する処理を行っているときに、Ｉ／Ｏ処理サーバ１４−１で異常が発生したとする。そのときには、アクセスサーバ１０は、アクセスパスをアクセスパス（１）から（２）に切り替えることで処理を継続する。【０００９】
この方式では次の問題がある。
アクセスサーバが複数あり、同じＩ／Ｏ処理サーバを使用している場合、いずれかのＩ／Ｏ処理サーバに異常が発生した状況を考える。このとき、個々のアクセスサーバがパスの切り替え処理を行うため、パス切り替え後に特定のＩ／Ｏ処理サーバの負荷が高くなる場合がある。【００１０】
アクセスサーバ同士でＩ／Ｏ処理サーバの負荷を調整する仕組みを持たせることにより、特定のＩ／Ｏ処理サーバの負荷が高くなることへの対策とすることができる。しかし、この場合には、アクセスサーバ間になんらかの通信手段を持つ必要がある。一方、クラウドサービスなどを考慮すると、個々のアクセスサーバを管理するのは別会社となる可能性が高く、アクセスサーバ同士で通信を行うと会社の秘密が他社に漏れてしまう。したがって、図２の方式では、このようなセキュリティの問題や構成が複雑化すること、また、それに伴うシステムコストが高くなることが問題となる。【００１１】
従来技術には、サーバ、サーバで動作しているアプリケーション、ストレージ装置、アクセス経路などの情報を管理するストレージ管理サーバを設け、負荷分散を行なうものがある。また、その他の従来技術には、ストレージサブシステムにあるコントローラが各接続ポートの負荷状況を監視し、この監視内容に基づいて負荷分散を行なうものがある。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００７−２３３７８３号公報
【特許文献２】特開２００８−９４９７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
多数のアクセスサーバと多数のＩ／Ｏ処理サーバがある環境において、Ｉ／Ｏ処理サーバの負荷分散を効率的に行なえる図１の構成では、負荷分散装置に異常が発生した際にサービスが停止してしまう。【００１４】
Ｉ／Ｏ処理サーバで異常が発生した場合のＩ／Ｏ処理サーバの切り替え方式(図２）では、多数のＩ／Ｏ処理サーバの負荷を平準化するために、多数存在するアクセスサーバ間で負荷調整の情報をやりとりする必要がある。この場合には、システム構成が複雑になる、セキュリティ上の弱点が生じるなどの問題がある。【００１５】
したがって、特定のＩ／Ｏ処理サーバへのＩ／Ｏ処理要求の発行が集中するのを防ぐ他の方策が望まれる。【００１６】
１つの側面では、本発明は、複数のアクセスサーバと複数のＩ／Ｏ処理サーバを有するシステムにおける負荷分散を図ることを目的とする。
【課題を解決するための手段】
【００１７】
以下の実施形態の一側面における負荷分散システムは、入力処理要求又は出力処理要求を受け付け、処理結果を返送する複数のストレージ装置と、該複数のストレージ装置の１つに該入力処理要求又は出力処理要求を送信し、該処理結果を受信し、該入力処理要求又は出力処理要求の送信から該処理の完了までのレスポンス時間が閾値を超えた場合に、該入力処理要求又は出力処理要求に対する処理が過負荷状態にあることを示す過負荷応答を送出する複数のＩ／Ｏ処理サーバと、ユーザからの入力処理要求又は出力処理要求を、該Ｉ／Ｏ処理サーバからの該過負荷応答に基づいて、過負荷状態ではないＩ／Ｏ処理サーバへ送信する複数のアクセスサーバとを備える。
【発明の効果】
【００１８】
１実施形態によれば、複数のアクセスサーバと複数のＩ／Ｏ処理サーバを有するシステムにおける負荷分散を図ることができる。
【図面の簡単な説明】
【００１９】
【図１】負荷分散を行なう従来技術を説明する図である。
【図２】従来のマルチパス方式を使用した場合の構成図である。
【図３】本実施形態の負荷分散システムを含む全体のシステム構成図である。
【図４】アクセスサーバ及びＩ／Ｏ処理サーバのブロック図である。
【図５】アクセスサーバとＩ／Ｏ処理サーバの間で行われる通信の基本的な流れを示すシーケンス図である。
【図６】Ｉ／Ｏ処理サーバで異常が発生し、Ｉ／Ｏ処理サーバを切り替える場合の全体的な流れを示すシーケンス図である。
【図７】Ｉ／Ｏ処理サーバで異常が発生した場合のアクセスサーバの処理のフローチャートである。
【図８】アクセスサーバの処理を説明する図（その１）である。
【図９】アクセスサーバの処理を説明する図（その２）である。
【図１０】アクセスサーバの処理を説明する図（その３）である。
【図１１】アクセスサーバの処理を説明する図（その４）である。
【図１２】ソート処理における管理テーブルのリストの遷移状態を説明する図である。
【図１３】Ｉ／Ｏ処理サーバの処理を説明する図（その１）である。
【図１４】Ｉ／Ｏ処理サーバの処理を説明する図（その２）である。
【図１５】Ｉ／Ｏ処理サーバの処理を説明する図（その３）である。
【図１６】アクセスサーバがＩ／Ｏ処理サーバを再選択する際の処理のフローチャートである。
【図１７】アクセスサーバが管理するテーブルとその遷移の例を示す図である。
【図１８】Ｉ／Ｏ処理サーバが管理するテーブルとその遷移の例を示す図である。
【図１９】アクセスサーバおよびＩ／Ｏ処理サーバの管理テーブルの制御を行う仕組みを示す図である。
【図２０】管理テーブル監視部の処理フローである。
【図２１】Ｉ／Ｏ処理要求をＳＣＳＩコマンドで実現する場合のレスポンスデータフォーマットの一例を示す図である。
【図２２】アクセスサーバによるＩ／Ｏ処理サーバへの負荷問い合わせ処理のシーケンス図である。
【図２３】負荷情報の問い合わせコマンドであるＩｎｑｕｉｒｙに対する応答のフォーマットを示す図である。
【図２４】負荷状態の問い合わせの際のアクセスサーバの処理を示すフローチャートである。
【図２５】本実施形態の処理をプログラムで実現する場合の、アクセスサーバ及びＩ／Ｏ処理サーバのハードウェア構成を説明する図である。
【発明を実施するための形態】
【００２０】
以下の実施形態は、たとえば、クラウドシステムのようにサーバ台数もストレージ台数も多いシステムに適用される。そして、システム全体の負荷の平準化によるサービスの均一化と、負荷平準化の際に、いずれかの機器に故障が発生した場合にもサービスが継続できるような信頼性を備えたシステムを提供する。
【００２１】
このために、アクセスサーバがＩ／Ｏ処理サーバへ送るＩ／Ｏ処理要求の情報と、Ｉ／Ｏ処理サーバがアクセスサーバへ応答を返すレスポンス情報を拡張する。
【００２２】
Ｉ／Ｏ処理サーバが iSCSIのターゲットデバイスとして接続されている場合には、アクセスサーバからのリクエストは SCSIコマンドを拡張したコマンドとして送信される。Ｉ／Ｏ処理サーバからアクセスサーバへのレスポンスも SCSIコマンドのレスポンス情報を拡張することで実現する。（Ｉ／Ｏ処理サーバがFibreChannelのターゲットとして接続されている場合には、アクセスサーバからのリクエスト、Ｉ／Ｏ処理サーバからアクセスサーバへのレスポンスともファイバチャネルコマンドの拡張として実現する。実現手段は同じであるため、以下ではiSCSIの場合を例として記載する。）
【００２３】
ここで、負荷分散の対象は、アクセスサーバから見たＩ／Ｏ処理サーバ及びストレージ装置からなるシステム全体である。アクセスサーバがあるデータにアクセスしたいとする場合、そのデータが格納されているストレージ装置にアクセスする必要がある。この場合、そのストレージ装置が負荷が高くアクセスしにくい場合であっても、アクセスしたいデータを有していないストレージ装置にアクセスすることはできない。しかし、ストレージ装置とＩ／Ｏ処理サーバとは相互に複数対複数で接続されているので、所望のストレージ装置にアクセス可能なＩ／Ｏ処理サーバを別のものに切り替えることは可能である。これにより、ストレージ装置の負荷は分散できないが、ストレージ装置にＩ／Ｏ処理要求を送信するＩ／Ｏ処理サーバの負荷を分散することができる。Ｉ／Ｏ処理サーバの負荷を分散することにより、アクセスサーバから見たＩ／Ｏ処理サーバ及びストレージ装置からなるシステムの負荷が均一化できることになる。その場合、Ｉ／Ｏ処理サーバの負荷は、ストレージ装置にＩ／Ｏ処理要求を発行してから、これが完了するまでのレスポンス時間となるので、レスポンス時間が大きいＩ／Ｏ処理サーバから小さいＩ／Ｏ処理サーバに切り替えることにより負荷分散を行なうことができる。
【００２４】
負荷分散の方式としては以下のように処理を行う。
概略すると、Ｉ／Ｏ処理サーバが過負荷となった場合には、Ｉ／Ｏ処理サーバはアクセスサーバからのＩ／Ｏ処理要求（リクエスト）に対し、過負荷となった旨のレスポンスを行う。これを受けたアクセスサーバは、別のＩ／Ｏ処理サーバに対してＩ／Ｏ処理要求の振り分けを行う。システム運用開始時に、どのＩ／Ｏ処理サーバがどのストレージ装置に接続されるかは、システムの立ち上げ時に決定する。これは、運用開始時に一部のＩ／Ｏ処理サーバへのアクセス集中を防止するためである。
【００２５】
このことにより、アクセスサーバがＩ／Ｏ処理サーバの負荷状況に対して、自分で、振り分けを行なうので、複数のアクセスサーバがある場合でもアクセスサーバ同士での通信、及び、調整が不要となる。
【００２６】
すなわち、Ｉ／Ｏ処理サーバは、Ｉ／Ｏ処理サーバがアクセスサーバからのＩ／Ｏ処理要求を受信してから、ストレージ装置からの応答をアクセスサーバに返すまでのレスポンス時間（自サーバ内の処理時間を含む）から、自サーバが過負荷になっているか否かを判断する。そして、過負荷になっている場合には、Ｉ／Ｏ処理サーバはアクセスサーバに過負荷となっている旨通知する。アクセスサーバは、過負荷となった旨の通知をＩ／Ｏ処理サーバから受信すると、他のＩ／Ｏ処理サーバにＩ／Ｏ処理要求を送信する。
【００２７】
また、Ｉ／Ｏ処理サーバに接続されたストレージ装置やＩ／Ｏ処理サーバの負荷を確認するために、アクセスサーバは、全てのＩ／Ｏ処理サーバに対して負荷情報応答用のコマンドを送信する。この応答によって最も負荷の低いＩ／Ｏ処理サーバに対して無応答またはエラーとなったＩ／Ｏ処理要求の処理を依頼する。
【００２８】
アクセスサーバがＩ／Ｏ処理サーバから過負荷を示すレスポンスを受けた場合の負荷分散においても、アクセスサーバから全てのＩ／Ｏ処理サーバに対して、負荷情報応答用のコマンドを送信する。そして、その結果をもって、より負荷の低いＩ／Ｏ処理サーバへＩ／Ｏ処理を依頼することで、より効率の良い負荷分散が可能となる。
【００２９】
以上によれば、クラウドシステムにおいて、効率的なＩ／Ｏ処理要求の負荷分散を行えることで、システム全体の性能向上が行える。また、多数のサーバを使用することにより、Ｉ／Ｏ処理サーバのうちのいずれかのサーバが故障する可能性が高くなるが、その場合でもクラウドシステムが提供するサービスを継続できる。
【００３０】
なお、Ｉ／Ｏ処理サーバで異常が発生した場合には、アクセスサーバはＩ／Ｏ処理要求に対する無応答またはエラーとして異常を検知できる。このとき、アクセスサーバは別のＩ／Ｏ処理サーバに対してＩ／Ｏ処理要求を発行する。
【００３１】
図３は、本実施形態の負荷分散システムを含む全体のシステム構成図である。
全体システムは、複数のアクセスサーバ２０−１〜２０−ｎ（クラウドサービスを提供するための物理サーバ。このアクセスサーバ上で多数の仮想マシンを動作させる）を備える。更に、複数のＩ／Ｏ処理サーバ２１−１〜２１−ｍ（アクセスサーバが発行したＩ／Ｏ処理要求を処理するサーバ）、複数のストレージ装置２２−１〜２２−Ｎから構成される。そして、これらの装置は、ネットワーク２３、２４によって接続される。
【００３２】
アクセスサーバ２０−１〜２０−ｎ同士はセキュリティ確保の観点から管理用の通信経路を持たず、Ｉ／Ｏ処理サーバの負荷調整のための通信は行わない。
【００３３】
Ｉ／Ｏ処理サーバ２１−１〜２１−ｍ同士はセキュリティ確保の観点から管理用の通信経路を持たず、互いの負荷調整のための通信は行わない。
【００３４】
図４は、アクセスサーバ及びＩ／Ｏ処理サーバのブロック図である。
アクセスサーバ及びＩ／Ｏ処理サーバは、同じブロック図で表すことが出来る。Ｉ／Ｏ受付部３０は、送信されてきたＩ／Ｏ処理要求（リクエスト）を受け付ける。図４の装置がアクセスサーバの場合、Ｉ／Ｏ受付部３０は、ユーザアプリケーションから発行されたＩ／Ｏ処理要求を受け付ける。図４の装置がＩ／Ｏ処理サーバの場合には、Ｉ／Ｏ受付部３０は、アクセスサーバから発行されたＩ／Ｏ処理要求を受け付ける。
【００３５】
Ｉ／Ｏ時間監視部３２は、Ｉ／Ｏ処理要求の受け付けから、これに対するレスポンスを受信し、アクセスサーバにレスポンスを返すまでの時間を監視し、必要に応じて管理テーブル格納部３３の管理テーブルを更新する。Ｉ／Ｏ時間監視部３２は、Ｉ／Ｏ処理サーバの数Ｌ個だけのカウンタ３５−１〜３５−Ｌを備えており、レスポンスに対する過負荷応答を返さない場合にカウンタがカウントアップし、管理テーブルのカウンタの値保持部の値を更新する。このＬは、図４の装置が、アクセスサーバの場合には、Ｉ／Ｏ処理サーバの数ｍであり、図４の装置が、Ｉ／Ｏ処理サーバの場合には、ストレージ装置の数Ｎである。
【００３６】
管理テーブルについては後述する。管理テーブル監視部３４は、管理テーブル格納部３３に格納された管理テーブルに登録される閾値レベルを監視する。Ｉ／Ｏ発行部３１は、Ｉ／Ｏ受付部３０で受け付けたＩ／Ｏ処理要求を、受付時間の登録をした後、転送するものである。図４の装置がアクセスサーバの場合、Ｉ／Ｏ発行部３１は、Ｉ／Ｏ処理サーバにＩ／Ｏ処理要求を送信する。図４の装置がＩ／Ｏ処理サーバの場合には、Ｉ／Ｏ発行部３１は、ストレージ装置にＩ／Ｏ処理要求を送信する。
【００３７】
図５は、アクセスサーバとＩ／Ｏ処理サーバの間で行われる通信の基本的な流れを示すシーケンス図である。
ユーザアプリケーションからＩ／Ｏ処理要求が発行され、アクセスサーバ、Ｉ／Ｏ処理サーバ（１）を介して、ストレージ装置にＩ／Ｏ処理要求が通知される。Ｉ／Ｏ処理サーバ（１）は、このＩ／Ｏ処理要求のレスポンスを受信し、Ｉ／Ｏ処理サーバがアクセスサーバからのＩ／Ｏ処理要求を受信してから、ストレージ装置からの応答をアクセスサーバに返すまでのレスポンス時間を計測する。このレスポンス時間が、現在自サーバに設定されている閾値を超えない場合は、Ｉ／Ｏ処理サーバから正常である旨のレスポンスがアクセスサーバ、ユーザアプリケーションに返送される。このレスポンス時間が、現在自サーバに設定されている閾値を超える場合には、過負荷が生じていると判断する。このレスポンス時間は、Ｉ／Ｏ処理要求が発行されてから処理が完了するまでの時間を含んでいるので、ストレージ装置の応答時間とＩ／Ｏ処理装置の処理時間が含まれる。したがって、このレスポンス時間が閾値を超えているという場合には、ストレージ装置、あるいは、Ｉ／Ｏ処理装置のいずれか、あるいは、その両方において過負荷が生じていると考えられる。
【００３８】
Ｉ／Ｏ処理サーバ(1)で、アクセスしたストレージ装置へのＩ／Ｏ処理要求に対する過負荷を検出した場合、Ｉ／Ｏ処理サーバは、Ｉ／Ｏ処理要求を行ったアクセスサーバに対してレスポンスを返すと共に過負荷状態の通知を行う。アクセスサーバはＩ／Ｏ処理サーバから過負荷の情報を受け取ると、後続のＩ／Ｏ処理要求を発行する際に、別のＩ／Ｏ処理サーバへＩ／Ｏ処理要求を振り分ける。この別のＩ／Ｏ処理サーバへＩ／Ｏ処理要求を振り分けることを図５では、再選択処理と呼んでいる。再選択処理については図１６で後述する。アクセスサーバは、後述の図１０、図１１の管理テーブルを参照し、Ｉ／Ｏ処理要求のサイズ（または発行頻度）が閾値を超えている場合は、更なる振り分けが必要と判断し、更に後続のＩ／Ｏ処理要求は更に別のＩ／Ｏ処理サーバに対して実行される。ここで、Ｉ／Ｏ処理要求のサイズは、Ｉ／Ｏ処理要求によって指定される、ストレージ装置から読み出すデータの量、あるいは、ストレージ装置に書き込むデータの量のことである。
【００３９】
図６は、Ｉ／Ｏ処理サーバで異常が発生し、Ｉ／Ｏ処理サーバを切り替える場合の全体的な流れを示すシーケンス図である。
Ｉ／Ｏ処理サーバでエラーが発生した場合には、アクセスサーバが発行したＩ／Ｏ処理要求がエラーとなる。このとき、アクセスサーバはＩ／Ｏ処理サーバが異常となったことを検知できるものとする。アクセスサーバは、Ｉ／Ｏ処理サーバの異常を検知すると、再選択処理を実行して、別のＩ／Ｏ処理サーバに対してＩ／Ｏ処理要求を再実行する。このことで、Ｉ／Ｏ処理サーバで異常が発生した場合でもサービスの継続が可能になる。
【００４０】
図７は、Ｉ／Ｏ処理サーバで異常が発生した場合のアクセスサーバの処理のフローチャートである。
ステップＳ４０における、Ｉ／Ｏ処理要求発行先のＩ／Ｏ処理サーバの再選択の処理では、Ｉ／Ｏ処理サーバの管理テーブルを参照し、Ｉ／Ｏサイズ、Ｉ／Ｏ頻度が閾値内となる条件を満たした後述する閾値レベルのもっとも小さなＩ／Ｏ処理サーバをＩ／Ｏ処理要求の再発行先サーバとして選択する。このことで負荷がより低いと判断できるＩ／Ｏ処理サーバに対してＩ／Ｏ処理要求を発行できる。
【００４１】
異常が発生したＩ／Ｏ処理サーバが復旧した場合には、アクセスサーバに対してＩ／Ｏ処理サーバを再度Ｉ／Ｏ発行対象として設定する。このことで復旧後のＩ／Ｏ処理サーバが再度負荷分散の対象となる。
【００４２】
図８〜図１１は、アクセスサーバの処理を説明する図である。
アクセスサーバは、Ｉ／Ｏ処理サーバ毎に発行できるＩ／Ｏ処理要求のサイズの閾値とＩ／Ｏ頻度の閾値を管理している。Ｉ／Ｏ処理要求発行時には、この閾値よりサイズが大きなＩ／Ｏ処理要求（または閾値を超えた頻度のＩ／Ｏ処理要求）は、そのＩ／Ｏ処理をこれまで依頼していたＩ／Ｏ処理サーバとは別のＩ／Ｏ処理サーバに対してＩ／Ｏ処理要求を行う。Ｉ／Ｏ処理サーバから過負荷状態の応答があった場合は徐々に閾値を小さくする（過負荷状態の応答が無かった場合には閾値サイズを徐々に大きくする）。このことにより、Ｉ／Ｏ処理サーバの処理負荷を軽減する。
【００４３】
図８及び図９は、アクセスサーバが有する管理テーブルの例である。
図８は、管理テーブルである。管理テーブルは、複数の閾値定義テーブルがリストとして配列されたテーブルの集まりである。管理テーブルの閾値定義テーブルは、Ｉ／Ｏ処理サーバごとに設けられる。そして、各閾値定義テーブルは、閾値レベルとＩ／Ｏ処理要求のサイズの閾値、Ｉ／Ｏ処理要求頻度の閾値、閾値カウンタ定義値とを対応付けて保持する。また、Ｉ／Ｏ処理サーバごとの閾値定義テーブルは、それぞれ、カウンタの値保持部とレベル値設定部を有する。レベル値設定部とは、Ｉ／Ｏ処理サーバが現在、閾値定義テーブルにある閾値レベルのうちのどの閾値レベルにあるかを指定するものである。閾値カウンタ定義値は、カウンタの値保持部がその値になったとき、レベル値設定部に設定される閾値レベルを変更するものである。図４のカウンタ３５は、過負荷応答が無かった場合にカウント値を１つ増加するものである。カウンタはＩ／Ｏ処理サーバの数だけ設けられる。カウントする値は、カウンタの値保持部が保持しており、カウンタがカウントアップするごとに、カウンタの値保持部の値が変更される。カウンタの値保持部は、過負荷状態が存在しない場合にカウンタがカウントアップする値を保持する。カウンタの値保持部の値が閾値カウンタ定義値になると、レベル値設定部の閾値レベルを変更し、カウンタ３５をリセットすると共にカウンタの値保持部のカウンタの値を０に初期化する。
【００４４】
図９は、図８のｍ個のテーブルのうちで１つのＩ／Ｏ処理サーバについての閾値定義テーブルを詳細に示したものである。閾値レベルとしては、１〜ｋまでの各値を取るものとしている。Ｉ／Ｏサイズは、閾値レベル１の無制限から、閾値レベルが大きくなるにしたがって、小さくなる値となっている。このＩ／Ｏサイズは、Ｉ／Ｏ処理要求のサイズの閾値である。Ｉ／Ｏ頻度は、閾値レベル１の１００回／ｓｅｃから、閾値レベルが大きくなるに従い、少なくなる値となっている。このＩ／Ｏ頻度は、Ｉ／Ｏ処理要求の頻度の閾値である。閾値カウンタ定義値は、カウンタの値がいくつになったら閾値レベルを変えるかを定義するものである。
【００４５】
図８及び図９の管理テーブルは、システム管理者が予め定義する。システム管理者は、閾値レベルという閾値の設定値のラベルについて、それぞれ、Ｉ／Ｏ処理サーバに与える負荷の大きさをＩ／Ｏ処理サーバのマシンパワーに照らし合わせて見積もって、閾値のレベルを設定する。過負荷応答があった場合には、閾値レベルを上下させることで各閾値を変える。Ｉ／Ｏ処理要求に対する応答が過負荷応答でなかった場合に、カウンタをカウントアップする。このカウンタが閾値カウンタ定義値を超えた場合に、閾値レベルを下げる。
【００４６】
図１０は、アクセスサーバの処理を示すフローチャートである。
図１０の処理は、新たにＩ／Ｏ処理要求が発生するごとに実行するものである。
図１０に従うと、ステップＳ１０において、アクセスサーバは、例えば運用開始時には、アクセスすべきストレージ装置に対して接続されているＩ／Ｏ処理サーバの管理テーブル（後述）を参照し、当該Ｉ／Ｏ処理サーバの閾値レベルを確認する。管理テーブルに含まれる各閾値定義テーブルには、当該Ｉ／Ｏ処理サーバの現在の閾値レベルを保持するレベル値設定部が存在し、この値を確認する。ステップＳ１１において、Ｉ／Ｏ処理要求のサイズが該閾値レベルに対応する閾値未満であるか否かを判断する。ステップＳ１１の判断がＮｏの場合には、ステップＳ１３に進む。ステップＳ１１の判断がＹｅｓの場合には、ステップＳ１２に進む。ステップＳ１２では、Ｉ／Ｏ処理要求の頻度が該閾値レベルに対応する閾値未満であるか否かを判断する。頻度は、例えば、１秒間に発行するＩ／Ｏ処理要求の数である。アクセスサーバは、自分が１秒間に当該Ｉ／Ｏ処理サーバに発行するＩ／Ｏ処理要求の数を計数することによって頻度を取得する。ステップＳ１２の判断がＮｏの場合には、ステップＳ１３に進む。ステップＳ１２の判断がＹｅｓの場合には、ステップＳ１４に進む。
【００４７】
ステップＳ１３においては、Ｉ／Ｏ処理要求の発行先となるＩ／Ｏ処理サーバを、後述する図１６に従って再選択して、ステップＳ１４に進む。ステップＳ１４においては、Ｉ／Ｏ処理要求を発行する。ステップＳ９において、発行したＩ／Ｏ処理要求に対するレスポンスを受信して、ユーザアプリケーションにレスポンスを返送し、Ｉ／Ｏ処理を完了する。ステップＳ１５においては、発行したＩ／Ｏ処理要求に対するレスポンスの応答時間が過負荷を示しているか（Ｉ／Ｏ処理サーバから過負荷応答があったか）否かを判断する。ステップＳ１５の判断がＹｅｓの場合には、ステップＳ１６に進む。ステップＳ１５の判断がＮｏの場合には、ステップＳ２２に進む。
【００４８】
ステップＳ１６においては、閾値レベルの値を１だけ大きくし、ステップＳ２４で、カウンタ３５と、管理テーブルのカウンタの値保持部を初期化し、ステップＳ１７において、Ｉ／Ｏ処理サーバのソート（後述）を行なって、処理を終了する。ステップＳ２２においては、現在処理中のＩ／Ｏ処理サーバの閾値定義テーブルのレベル値設定部に設定される閾値レベルが１か否かを判断する。この判断は、後のステップＳ２０において、閾値レベルを１下げる処理があるが、閾値レベルが１の場合には、これ以上下げることができないので、カウンタもカウントアップしないようにするものである。ステップＳ２２の判断がＮｏ場合には、ステップＳ１８に進み、ステップＳ２２の判断がＹｅｓの場合には、ステップＳ１９に進む。ステップＳ１８においては、カウンタ３５のカウントアップに従い、閾値定義テーブルのカウンタの値保持部の値を１だけ大きくし、ステップＳ１９において、カウンタが定義値を超えたか否かを判断する。ステップＳ１９の判断がＮｏの場合には、処理を終了する。ステップＳ１９の判断がＹｅｓの場合には、ステップＳ２０に進む。
【００４９】
ステップＳ２０においては、閾値レベルを１だけ減少し、ステップＳ２３において、カウンタ３５をリセットし、管理テーブルのカウンタの値保持部を初期化し、ステップＳ２１において、Ｉ／Ｏ処理サーバのソート（後述）を行なって、処理を終了する。
【００５０】
図１０の処理が開始する前においては、システムの運用開始後において、Ｉ／Ｏ処理要求をどのＩ／Ｏ処理サーバに送信するかは、管理テーブルのリストの先頭にある閾値定義テーブルに対応するＩ／Ｏ処理サーバを設定する。さらにその後、当該Ｉ／Ｏ処理サーバが過負荷になると、別のＩ／Ｏ処理サーバにＩ／Ｏ処理要求が送信されるようになる。
【００５１】
Ｉ／Ｏ処理サーバのソートは、閾値定義テーブルを複数備える管理テーブル内の、閾値定義テーブルの配列の順序を変更することである。
【００５２】
図１１は、Ｉ／Ｏ処理サーバのソート処理のフローチャートである。
Ｉ／Ｏ処理サーバのソートにおいては、各閾値定義テーブルのレベル値設定部に保持される閾値レベルの大きさの順に閾値定義テーブルを配列し、Ｉ／Ｏ処理サーバに対しリストを生成し、複数の閾値定義テーブルがリストされたテーブルの集まりを管理テーブルとする。
【００５３】
ステップＳ２５においては、図１０のステップＳ１６またはＳ２０で、変更した結果の閾値レベルを変数、例えば、Ｌに設定する。ステップＳ２６において、閾値レベルを変更したＩ／Ｏ処理サーバの閾値定義テーブルを管理テーブルのリストから外す。ここで、リストから外すとは、後述のステップＳ２８のリストへの挿入とで１つの処理となる。すなわち、閾値レベルを変更した閾値定義テーブルのデータをリストから読み取り、リスト内のそのテーブルのデータを削除し、閾値レベルの順序に合うリストの配列の場所にデータを挿入するものである。ステップＳ２７のループは、Ｉ／Ｏ処理サーバの数だけループする。ステップＳ２８において、閾値レベルがＬより大きいか否かを判断する。ステップＳ２８の判断がＮｏの場合にはループを続け、Ｙｅｓの場合には、管理テーブルを管理テーブルのリストに挿入して処理を終了する。
【００５４】
アクセスサーバが管理しているＩ／Ｏ処理サーバの管理テーブルを閾値レベルの小さな順にソートしておくことで、管理テーブルのリストの先頭は最も負荷の低いＩ／Ｏ処理サーバとなる。
【００５５】
図１２は、ソート処理における管理テーブルのリストの遷移状態を説明する図である。
図１２（１）は、図１０のステップＳ１７に相当する処理で、過負荷応答発生後の状態を示す。複数のＩ／Ｏ処理サーバの閾値定義テーブルが配列されている。Ｉ／Ｏ処理サーバ（１）の閾値定義テーブルは、レベル値設定部の値が１となっている。次に、Ｉ／Ｏ処理サーバ（４）の閾値定義テーブルが来ており、レベル値設定部の値（変更後）は、３となっている。その次は、Ｉ／Ｏ処理サーバ（２）の閾値定義テーブルが来ており、レベル値設定部の値は、２となっている。最後に、Ｉ／Ｏ処理サーバ（３）の閾値定義テーブルが来ており、レベル値設定部の値は、４となっている。
【００５６】
次に、ソート処理では、Ｉ／Ｏ処理サーバ（４）の閾値定義テーブルがＩ／Ｏ処理サーバ（２）の閾値定義テーブルの上に来てしまっているので、これを入れ替える必要がある。図１２（２）の状態は、位置が間違っているＩ／Ｏ処理サーバ（４）の閾値定義テーブルをリストから取り外した状態を示している。そして、図１２（３）のソート後の状態では、Ｉ／Ｏ処理サーバ（４）の閾値定義テーブルは、Ｉ／Ｏ処理サーバ（２）の次に挿入される。
【００５７】
なお、管理テーブルのリストのソート処理の方法としては、図１１の方法の代わりに、各閾値定義テーブルに次のテーブルを指すポインタを設け、そのポインタの値を張り替えることも可能である。
【００５８】
図１３〜１５は、Ｉ／Ｏ処理サーバの処理を説明する図である。
Ｉ／Ｏ処理サーバは、Ｉ／Ｏ処理要求の受付からＩ／Ｏ処理の完了までの処理時間を管理している。処理時間が、Ｉ／Ｏ処理サーバが保持する管理テーブルの閾値を超えた場合には、Ｉ／Ｏ処理サーバはアクセスサーバへ過負荷応答を返す。すなわち、ストレージ装置の応答時間（自サーバでの処理時間を含む）が閾値を超えたときに、アクセスサーバに過負荷応答を返す。処理時間の閾値の初期値は、ストレージ装置の応答時間に合わせた応答時間を設定しておく。処理時間が閾値を超えた場合には、応答時間の閾値を徐々に長くする（閾値を超えない場合には徐々に短くする）。このことにより、頻繁に過負荷の応答を返すことを避ける。たとえば、Ｉ／Ｏ処理サーバ（１）が過負荷状態で、他のＩ／Ｏ処理サーバ（Ｉ／Ｏ処理サーバ（２））も過負荷状態である場合、Ｉ／Ｏ処理サーバ（２）に対するＩ／Ｏ処理要求が、Ｉ／Ｏ処理サーバ（１）に再び振り向けられる場合がある、このとき、Ｉ／Ｏ処理サーバ（１）が依然として過負荷であった場合は、２つしかない全てのＩ／Ｏ処理サーバが過負荷の応答をすることになる。このような状況が続いた場合には、Ｉ／Ｏ処理要求全てに過負荷の応答が行われることになり、アクセスサーバとＩ／Ｏ処理サーバのやりとりが多くなる。このような状況を避けるために閾値を徐々に変更する。
【００５９】
図１３及び図１４は、Ｉ／Ｏ処理サーバが保持する管理テーブルの例である。
図１３に示されるように、Ｉ／Ｏ処理サーバは、アクセスするストレージ装置ごとに閾値定義テーブルを保持する。管理テーブルは、複数の閾値定義テーブルをリストとして配列したテーブルの集まりである。各閾値定義テーブルは、閾値レベルと、応答時間の閾値と、閾値カウンタ定義値とを対応付けて保持する。また、各ストレージ装置についての閾値定義テーブルは、それぞれ、カウンタの値保持部とレベル値設定部を有する。レベル値設定部とは、ストレージ装置が現在、閾値定義テーブルにある閾値レベルのうちのどの閾値レベルにあるかを指定するものである。カウンタの値保持部は、過負荷状態が存在しない場合に、カウンタがカウントする値を保持する。カウンタの値保持部の値が閾値カウンタ定義値になると、レベル値設定部の閾値レベルを変更し、カウンタ３５をリセットすると共に、カウンタの値保持部のカウンタの値を０に初期化する。
【００６０】
図１４は、図１３のストレージ装置ごとの管理テーブルの内容の例を示した図である。閾値レベルとして、１〜ｊの値が設定されている。応答時間の閾値は、閾値レベル１が１０ｍｓｅｃ／ＫＢで、閾値レベルが大きくなるに従い、大きな値となっている。閾値カウンタ定義値は、閾値レベルを変えるときのカウンタの値を設定している。
【００６１】
図１３及び図１４の管理テーブルは、Ｉ／Ｏ処理サーバによって、アクセスサーバと同様に保持される。
【００６２】
図１５は、Ｉ／Ｏ処理サーバの処理フローである。
Ｉ／Ｏ処理サーバは、ステップＳ３０で、アクセスサーバからＩ／Ｏ処理要求を受け付けると、ステップＳ３１において、ストレージ装置にＩ／Ｏ処理要求を発行する。ステップＳ３２において、ストレージ装置からＩ／Ｏ処理要求が完了した旨の応答を受け取り、アクセスサーバにレスポンスを返して基本的なＩ／Ｏ処理を完了し、ステップＳ３３において、Ｉ／Ｏ処理要求の受付時間と完了時間から応答時間を算出する。ステップＳ３４において、管理テーブル（図１３、図１４）を参照し、閾値定義テーブルのレベル値設定部に設定されている閾値レベルを取得する。そして、取得した閾値レベルに相当する応答時間の閾値を取得する。ステップＳ３５において、応答時間が取得した応答時間の閾値を超えているか否かを判断する。ステップＳ３５の判断がＹｅｓの場合には、ステップＳ４０に進む。ステップＳ３５の判断がＮｏの場合には、ステップＳ４１に進む。
【００６３】
ステップＳ４０において、過負荷である旨の応答をアクセスサーバに対して行い、ステップＳ３６においては、閾値レベルを１だけ増加し、ステップＳ４３において、カウンタ３５をリセットすると共に、管理テーブルのカウンタの値保持部の値を初期化し、処理を終了する。ステップＳ４１においては、閾値定義テーブルのレベル値設定部の閾値レベルが１であるか否かを判断する。この判断は、後のステップＳ３９において、閾値レベルを１下げる処理があるが、閾値レベルが１の場合には、これ以上下げることができないので、カウンタもカウントアップしないようにするものである。ステップＳ４１の判断がＮｏの場合には、ステップＳ３７に進み、Ｙｅｓの場合には、ステップＳ３８に進む。ステップＳ３７では、カウンタ３５をカウントアップし、管理テーブルのカウンタの値保持部の値を１だけ増加し、ステップＳ３８において、カウンタが定義値を超えたか否かを判断する。ステップＳ３８の判断がＮｏの場合には、処理を終了し、Ｙｅｓの場合には、ステップＳ３９に進む。ステップＳ３９では、閾値レベルを１だけ減少し、ステップＳ４２において、カウンタ３５をリセットし、管理テーブルのカウンタの値保持部の値を初期化し、処理を終了する。
【００６４】
図１６は、アクセスサーバがＩ／Ｏ処理サーバを再選択する際の処理（図７のステップＳ４０、図１０のステップＳ１３）のフローチャートである。
アクセスサーバは、Ｉ／Ｏ処理サーバを再選択する際には、管理テーブルにある閾値の値を参照し、その中で最も閾値の大きな（負荷が低いと考えられる）Ｉ／Ｏ処理サーバをＩ／Ｏ処理要求の発行先として再選択する。
【００６５】
図１６において、ステップＳ４５では、振り分け先を、ソート処理で得られたリストの先頭にあるＩ／Ｏ処理サーバとする。ステップＳ４６のループでは、アクセスサーバの管理テーブルを走査する。すなわち、管理テーブルのリストに格納される全てのＩ／Ｏ処理サーバの閾値定義テーブルがなくなるまで、処理を繰り返す。ステップＳ４７において、閾値が振り分け先の値より大きいか否かを判断する。ステップＳ４７の判断がＮｏの場合には、ステップＳ４６のループを続け、Ｙｅｓの場合には、ステップＳ４８に進む。ステップＳ４８では、振り分け先に、ステップＳ４７で選択されたＩ／Ｏ処理サーバを割り当て、処理を終了する。
【００６６】
また、この他にアクセスサーバがＩ／Ｏ処理サーバを再選択する方法として、アクセスサーバがＩ／Ｏ処理サーバに対して負荷情報の確認コマンドを送信し、Ｉ／Ｏ処理サーバが自サーバで処理中のＩ／Ｏ処理要求数を応答する仕組みを持たせる。この応答をアクセスサーバが参照し、もっともＩ／Ｏ処理要求数の少ないＩ／Ｏ処理サーバを再選択の対象とすることもできる。
【００６７】
図１７は、アクセスサーバが管理する管理テーブルとその遷移の例を示す図である。
図１７は、図８及び図９の管理テーブルから、各Ｉ／Ｏ処理サーバについて設定された閾値レベルの値のみを見やすくするために抜き出したものである。
【００６８】
Ｉ／Ｏ処理サーバ（１）から過負荷応答があった場合には、図１０のステップＳ１６によって閾値レベルが変更されることによって、Ｉ／Ｏ処理サーバ（１）の閾値定義テーブルは、閾値レベルが１つ増加され、状態１から状態２のように遷移する。一方、Ｉ／Ｏ処理要求に対して、Ｉ／Ｏ処理サーバ（１）が過負荷の応答を返さない場合には、過負荷応答の無い回数をカウントアップする。そして、その計数値が閾値カウンタ定義値を超えた場合に、閾値レベルが１つ減少され、閾値定義テーブルは状態２から状態１へ遷移する。すなわち、一定回数のＩ／Ｏ処理要求の応答時間が過負荷状態を示していない場合に閾値を減少させるようにする。このことにより、負荷状態が安定していない状態で閾値を減少させることを防ぐ。
【００６９】
図１８は、Ｉ／Ｏ処理サーバが管理するテーブルとその遷移の例を示す図である。
図１８は、図１３及び図１４の管理テーブルから、各ストレージ装置について設定された閾値レベルの値のみを見やすくするために抜き出したものである。
【００７０】
ストレージ装置（２）へのＩ／Ｏ応答時間が閾値を超えた場合は、図１５のステップＳ３６によって閾値レベルが増加されるため、ストレージ装置（２）の閾値管理テーブルは状態１から状態２へ遷移する。Ｉ／Ｏ処理要求に対する応答が閾値を超えない場合には、超えない回数を計数する。そして、その計数値が閾値カウンタ定義値を超えた場合に、閾値レベルが１つ減少され、閾値定義テーブルは状態２から状態１へ遷移する。すなわち、一定回数のＩ／Ｏ処理要求に対する応答時間が過負荷状態でないことを示す場合に、閾値を減少させるようにする。このことにより、負荷状態が安定していない状態で閾値を減少させることを防ぐ。
【００７１】
Ｉ／Ｏ処理サーバの再選択を行う際に、アクセスサーバからＩ／Ｏ処理サーバに対して負荷情報の確認を行うことにより再選択を行う場合は、Ｉ／Ｏ処理サーバには図１８のテーブルの他に、自サーバが処理中のＩ／Ｏ処理要求数を管理するカウンタを用意しておく。このことでアクセスサーバからの負荷情報の確認に対して、Ｉ／Ｏ処理要求数を応答できる。
【００７２】
図１９は、アクセスサーバおよびＩ／Ｏ処理サーバの管理テーブルの制御を行う仕組みを示す図である。
アクセスサーバにおいて図１９のＩ／Ｏ処理要求の要求元はアプリケーションであり、Ｉ／Ｏ処理要求の発行先はＩ／Ｏ処理サーバである。Ｉ／Ｏ処理サーバにおいて、図１９のＩ／Ｏ処理要求の要求元はアクセスサーバであり、Ｉ／Ｏ処理要求の発行先はストレージ装置である。
【００７３】
図１９の管理テーブル格納部３３に格納される管理テーブルは、アクセスサーバでは、図８、図９と同じものであり、Ｉ／Ｏ処理サーバでは、図１３、図１４と同じものである。管理テーブルは、アクセスサーバでは図１７（Ｉ／Ｏ処理サーバでは図１８）において状態１から状態２へＩ／ＯサイズやＩ／Ｏ頻度（Ｉ／Ｏ処理サーバでは応答時間）の閾値が変化する場合に、どのような値に遷移するかを定義した表である。この表は予めシステム管理者が定義する。
【００７４】
図１９の管理テーブル監視部３４は、アクセスサーバやＩ／Ｏ処理サーバの管理テーブルをできるだけ最新の状態に保つようにするための機能である。たとえば、アクセスサーバがＩ／Ｏ処理サーバに対して発行したＩ／Ｏ処理要求に対する応答において、過負荷状態が通知された場合、アクセスサーバは管理テーブルの閾値を変更する。このとき、閾値が下限（閾値レベルの最大時）まで下がってしまった場合、それ以後、アクセスサーバはそのＩ／Ｏ処理サーバに対してＩ／Ｏ処理要求を発行しなくなる。この状態となったしばらく後、Ｉ／Ｏ処理サーバの処理量が減った場合を想定する。このとき、Ｉ／Ｏ処理サーバの負荷が低減しているにも関わらずアクセスサーバは要求を発行しないため、管理テーブルの閾値変更が行われず、Ｉ／Ｏ負荷分散が正常に行なわれない状態となる。このような状態を避けるため、管理テーブル監視部３４が定期的に試験Ｉ／Ｏ処理要求（ダミーＩ／Ｏ処理要求）を発行し、Ｉ／Ｏ発行先の負荷状態の確認を行う。
【００７５】
図２０は、管理テーブル監視部の処理フローである。
管理テーブル監視部は、一定時間Ｉ／Ｏ処理要求が発行されていないＩ／Ｏ発行先（アクセスサーバの場合はＩ／Ｏ処理サーバ、Ｉ／Ｏ処理サーバの場合はストレージ装置）に対し、試験Ｉ／Ｏ処理要求（ダミーＩ／Ｏ処理要求）を発行する。このＩ／Ｏ処理要求が正常に処理された場合（アクセスサーバの場合は、Ｉ／Ｏ処理要求に対して過負荷応答が無い場合、Ｉ／Ｏ処理サーバの場合は応答時間内にＩ／Ｏ処理要求に対する応答を受信した場合）には、管理テーブルの閾値を変更する。このときの閾値の変更は、アクセスサーバの場合は図１０、Ｉ／Ｏ処理サーバの場合は図１５に従った変更を行う。
【００７６】
ステップＳ５０において、管理テーブル監視部は、過負荷となったＩ／Ｏ処理サーバに一定時間内にＩ／Ｏ処理要求が発行されているか否かを判断する。ステップＳ５０の判断がＹｅｓの場合には、処理を終了する。ステップＳ５０の判断がＮｏの場合には、ステップＳ５１において、試験Ｉ／Ｏ処理要求を発行する。ステップＳ５２において、試験Ｉ／Ｏ処理要求に対する応答が正常か否かを判断する。ステップＳ５２の判断がＮｏの場合には、処理を終了する。ステップＳ５２の判断がＹｅｓの場合には、閾値を変更して処理を終了する。
【００７７】
図２１は、Ｉ／Ｏ処理要求をＳＣＳＩコマンドで実現する場合のレスポンスデータフォーマットの一例を示す図である。
図２１のＳＣＳＩコマンドのレスポンスデータフォーマットは一般的なものであるが、過負荷状態を示すレスポンスとして、ユーザが自由に定義可能な値として定義されているコード番号のデータを設定するようにする。例えば、Ｓｅｎｓｅ  Ｋｅｙに「９」を、Ａｄｄｉｔｉｏｎａｌ  ｓｅｎｃｅ  ｃｏｄｅには、「０ｘ８０」を設定する。このコード番号は、ベンダが自由に設定使用可能なものであるので、本実施形態の過負荷状態を示すレスポンスを示すものであると定義する。
【００７８】
なお、ファイバチャネルのコマンドを用いる場合、ＳＣＳＩコマンドを伝送する経路として光ファイバを使用している以外は、ＳＣＳＩと同様に、ｖｅｎｄｅｒ  ｓｐｅｃｉｆｉｃとして定義されているコード番号を過負荷状態を示すレスポンスとして使用する。
【００７９】
図２２は、アクセスサーバによるＩ／Ｏ処理サーバへの負荷問い合わせ処理のシーケンス図である。
負荷状態の確認においては、アクセスサーバ（Ａ）がＩ／Ｏ処理サーバ（１）、(２)に対してＩｎｑｕｉｒｙコマンドを発行する。Ｉ／Ｏ処理サーバ（１）、（２）ではＩｎｑｕｉｒｙの応答としてコマンドのｖｅｎｄｅｒ  ｓｐｅｃｉｆｉｃの領域に負荷情報を入れて応答を返す。
【００８０】
図２３は、負荷情報の問い合わせコマンドであるＩｎｑｕｉｒｙに対する応答のフォーマットを示す図である。
図２３は、Ｉｎｑｕｉｒｙコマンドに対する応答フォーマットの一般的なものであるが、このフォーマットの中に、ｖｅｎｄｅｒ  ｓｐｅｃｉｆｉｃと指定されているフィールドがある。Ｉ／Ｏ処理サーバは、ｖｅｎｄｅｒ  ｓｐｅｃｉｆｉｃと指定されている３６〜５５バイト目の領域に、Ｉｎｑｕｉｒｙを受け付けた時に既に受付済みで、かつ、処理完了前であったＩ／Ｏ処理要求の数を設定し、アクセスサーバに返送する。
【００８１】
図２４は、負荷状態の問い合わせの際のアクセスサーバの処理を示すフローチャートである。
ステップＳ５５のループでは、Ｉ／Ｏ処理サーバの数だけ処理を繰り返す。ステップＳ５６において、Ｉｎｑｕｉｒｙを発行し、ステップＳ５７において、Ｉｎｑｕｉｒｙの応答を受け付ける。ステップＳ５８において、変数、例えば、ｎに、応答によって受信した、Ｉ／Ｏ処理サーバが受け付けている、単位時間当たりのＩ／Ｏ処理要求の数を設定する。ステップＳ５９では、アクセスサーバが保持する管理テーブル内の、現在処理中のＩ／Ｏ処理サーバの閾値定義テーブルを参照し、ステップＳ６０で、ｎがＩ／Ｏ頻度の閾値を超えているか否かを判断する。閾値定義テーブルは、図８、図９と同じものであって、レベル値設定部が保持する閾値レベルで示される、図９のようなＩ／Ｏ頻度の値を閾値として用いる。
【００８２】
ステップＳ６０の判断がＮｏの場合には、ステップＳ５５のループを繰り返す。ステップＳ６０の判断がＹｅｓの場合には、ステップＳ６１において、閾値定義テーブルのレベル値設定部の閾値レベルの値を下げて、ｎの値がＩ／Ｏ頻度の閾値以下となるようにする。ステップＳ６２でＩ／Ｏ処理サーバのソートを行い、その後、ステップＳ５５のループを繰り返す。ステップＳ５５のループが、全てのＩ／Ｏ処理サーバについて処理し終わったら、処理を終了する。
【００８３】
図２５は、本実施形態の処理をプログラムで実現する場合の、アクセスサーバ及びＩ／Ｏ処理サーバのハードウェア構成を説明する図である。
アクセスサーバ及びＩ／Ｏ処理サーバは、ＣＰＵ４０を備えるコンピュータ３９として実現される。
【００８４】
ＣＰＵ４０には、バス５０を介して、ＲＯＭ４１、ＲＡＭ４２、通信インタフェース４３、記憶装置４６、媒体読み取り装置４７、及び、入出力装置４９が接続される。ＣＰＵ４０は、ＲＯＭ４１に格納されているＢＩＯＳ等の基本プログラムを読み込んで実行し、コンピュータ３９の基本動作を実現させる。
【００８５】
また、ＣＰＵ４０は、ハードディスクなどの記憶装置４６に格納された、本実施形態の処理を行うプログラムをＲＡＭ４２に展開して実行し、本実施形態の処理を実現する。本実施形態の処理を行うプログラムは、記憶装置４６に格納されている必要は必ずしも無く、ＣＤ−ＲＯＭ、ＤＶＤ、Ｂｌｕ−ｒａｙ、ＩＣメモリ、フレキシブルディスクなどの可搬記録媒体４８に格納されていても良い。この場合には、媒体読み取り装置４７を用いて、可搬記録媒体４８に格納されたプログラムを読み込み、ＲＡＭ４２に展開して、ＣＰＵ４０が実行する。
【００８６】
入出力装置４９は、キーボード、タブレット、マウス、ディスプレイ、プリンタなどの、コンピュータ３９を操作するユーザが入力を行なったり、処理結果の出力を行ったりするものである。
【００８７】
通信インタフェース４３は、ネットワーク４４を介して、情報提供者４５の有するデータベース等にアクセスし、プログラム等をコンピュータ３９にダウンロードするなどするものである。ダウンロードされたプログラムは、記憶装置４６や可搬記録媒体４８に格納したり、直接ＲＡＭ４２に展開してＣＰＵ４０が実行したりする。また、プログラムの実行は、情報提供者４５の有するコンピュータで行い、コンピュータ３９は、入出力操作だけ行うようにしてもよい。
【符号の説明】
【００８８】
１０、１０−１、１０−２、２０−１〜２０−ｎ      アクセスサーバ
１１、１３、１５、２３、２４      ネットワーク
１２      負荷分散装置
１４−１〜１４−３、２１−１〜２１−ｍ      Ｉ／Ｏ処理サーバ
１６−１〜１６−４、２２−１〜２２−Ｎ      ストレージ装置
３０      Ｉ／Ｏ受付部
３１      Ｉ／Ｏ発行部
３２      Ｉ／Ｏ時間監視部
３３      管理テーブル格納部
３４      管理テーブル監視部
４０      ＣＰＵ
４１      ＲＯＭ
４２      ＲＡＭ
４３      通信インタフェース
４４      ネットワーク
４５      情報提供者
４６      記憶装置
４７      媒体読み取り装置
４８      可搬記録媒体
４９      入出力装置
５０      バス
【図１】
2013094007.tif 000003
【図２】
2013094007.tif 000004
【図３】
2013094007.tif 000005
【図４】
2013094007.tif 000006
【図５】
2013094007.tif 000007
【図６】
2013094007.tif 000008
【図７】
2013094007.tif 000009
【図８】
2013094007.tif 000010
【図９】
2013094007.tif 000011
【図１０】
2013094007.tif 000012
【図１１】
2013094007.tif 000013
【図１２】
2013094007.tif 000014
【図１３】
2013094007.tif 000015
【図１４】
2013094007.tif 000016
【図１５】
2013094007.tif 000017
【図１６】
2013094007.tif 000018
【図１７】
2013094007.tif 000019
【図１８】
2013094007.tif 000020
【図１９】
2013094007.tif 000021
【図２０】
2013094007.tif 000022
【図２１】
2013094007.tif 000023
【図２２】
2013094007.tif 000024
【図２３】
2013094007.tif 000025
【図２４】
2013094007.tif 000026
【図２５】
2013094007.tif 000027
【手続補正書】
【提出日】平成26年6月13日(2014.6.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
入力処理要求又は出力処理要求を受け付け、処理結果を返送する複数のストレージ装置と、
該複数のストレージ装置の１つに該入力処理要求又は出力処理要求を送信し、該処理結果を受信し、該入力処理要求又は出力処理要求の送信から該処理の完了までのレスポンス時間が閾値を超えた場合に、該入力処理要求又は出力処理要求に対する処理が過負荷状態にあることを示す過負荷応答を送出する複数のＩ／Ｏ処理サーバと、
ユーザからの入力処理要求又は出力処理要求を、該Ｉ／Ｏ処理サーバからの該過負荷応答に基づいて、過負荷状態ではないＩ／Ｏ処理サーバへ送信する複数のアクセスサーバと、
を備えることを特徴とする負荷分散システム。
【請求項２】
前記アクセスサーバは、過負荷状態にある前記Ｉ／Ｏ処理サーバに対し、ダミーの入力処理要求又は出力処理要求を送信し、過負荷状態が解消したか否かを確認することを特徴とする請求項１に記載の負荷分散システム。
【請求項３】
前記アクセスサーバは、前記Ｉ／Ｏ処理サーバごとに、負荷状態を判断する閾値に対応付けられた、レベルが増加するごとに該閾値が小さくなる閾値レベルを保持し、過負荷状態を示す場合には、対応する該Ｉ／Ｏ処理サーバの閾値レベルの値を増加することを特徴とする請求項１に記載の負荷分散システム。
【請求項４】
前記閾値レベルは、過負荷状態が解消された場合には、値が減少されることを特徴とする請求項３に記載の負荷分散システム。
【請求項５】
前記アクセスサーバは、前記閾値レベルに基づいて、負荷の軽い前記Ｉ／Ｏ処理サーバから順にリストにリストアップし、該リストの上に登録されている該Ｉ／Ｏ処理サーバから順に前記入力処理要求又は出力処理要求を割り振ることを特徴とする請求項４に記載の負荷分散システム。
【請求項６】
前記Ｉ／Ｏ処理サーバは、前記ストレージ装置ごとに、負荷状態を判断する閾値に対応付けられた、レベルが増加するごとに該閾値が大きくなる閾値レベルを保持し、前記レスポンス時間が過負荷状態を示す場合には、対応する該ストレージ装置の閾値レベルの値を増加することを特徴とする請求項１に記載の負荷分散システム。
【請求項７】
前記閾値レベルは、過負荷状態が解消された場合には、値が減少されることを特徴とする請求項６に記載の負荷分散システム。
【請求項８】
前記Ｉ／Ｏ処理サーバは、前記レスポンス時間が前記閾値レベルに対応した、負荷状態を判断する閾値より大きい場合、過負荷状態であることを前記アクセスサーバに送信することを特徴とする請求項７に記載の負荷分散システム。
【請求項９】
入力処理要求又は出力処理要求を受け付け、処理結果を返送する複数のストレージ装置と、該複数のストレージ装置の１つに該入力処理要求又は出力処理要求を送信し、該処理結果を受信し、複数のＩ／Ｏ処理サーバと、ユーザからの入力処理要求又は出力処理要求を、該Ｉ／Ｏ処理サーバに送信する複数のアクセスサーバとを備える負荷分散システムの負荷分散方法であって、
該Ｉ／Ｏ処理サーバは、該入力処理要求又は出力処理要求の送信から該処理の完了までのレスポンス時間が閾値を超えた場合に、該入力処理要求又は出力処理要求に対する処理が過負荷状態にあることを示す過負荷応答を送出し、
該アクセスサーバは、該Ｉ／Ｏ処理サーバからの該過負荷応答に基づいて、過負荷状態ではないＩ／Ｏ処理サーバへ該入力処理要求又は出力処理要求を送信する
ことを特徴とする負荷分散方法。
【請求項１０】
入力処理要求又は出力処理要求を受け付け、処理結果を返送する複数のストレージ装置と、該複数のストレージ装置の１つに該入力処理要求又は出力処理要求を送信し、該処理結果を受信する複数のＩ／Ｏ処理サーバと、ユーザからの入力処理要求又は出力処理要求を、該Ｉ／Ｏ処理サーバからの過負荷応答に基づいて、過負荷状態ではないＩ／Ｏ処理サーバへ該入力処理要求又は出力処理要求を送信する複数のアクセスサーバとを備える負荷分散システムのプログラムであって、
該Ｉ／Ｏ処理サーバに、
該入力処理要求又は出力処理要求の送信から該処理の完了までのレスポンス時間が閾値を超えた場合に、該入力処理要求又は出力処理要求に対する処理が過負荷状態にあることを示す該過負荷応答を該アクセスサーバに送出させる、
ことを特徴とするプログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００３７
【補正方法】変更
【補正の内容】
【００３７】
図５は、アクセスサーバとＩ／Ｏ処理サーバの間で行われる通信の基本的な流れを示すシーケンス図である。
ユーザアプリケーションからＩ／Ｏ処理要求が発行され、アクセスサーバ、Ｉ／Ｏ処理サーバ（１）を介して、ストレージ装置にＩ／Ｏ処理要求が通知される。Ｉ／Ｏ処理サーバ（１）は、このＩ／Ｏ処理要求のレスポンスを受信し、Ｉ／Ｏ処理サーバがアクセスサーバからのＩ／Ｏ処理要求を受信してから、ストレージ装置からの応答をアクセスサーバに返すまでのレスポンス時間を計測する。このレスポンス時間が、現在自サーバに設定されている閾値を超えない場合は、Ｉ／Ｏ処理サーバから正常である旨のレスポンスがアクセスサーバ、ユーザアプリケーションに返送される。このレスポンス時間が、現在自サーバに設定されている閾値を超える場合には、過負荷が生じていると判断する。このレスポンス時間は、Ｉ／Ｏ処理要求が発行されてから処理が完了するまでの時間を含んでいるので、ストレージ装置の応答時間とＩ／Ｏ処理装置の処理時間が含まれる。したがって、このレスポンス時間が閾値を超えているという場合には、ストレージ装置、あるいは、Ｉ／Ｏ処理サーバのいずれか、あるいは、その両方において過負荷が生じていると考えられる。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００３８
【補正方法】変更
【補正の内容】
【００３８】
Ｉ／Ｏ処理サーバ(1)で、アクセスしたストレージ装置へのＩ／Ｏ処理要求に対する過負荷を検出した場合、Ｉ／Ｏ処理サーバは、Ｉ／Ｏ処理要求を行ったアクセスサーバに対してレスポンスを返すと共に過負荷状態の通知を行う。アクセスサーバはＩ／Ｏ処理サーバから過負荷の情報を受け取ると、後続のＩ／Ｏ処理要求を発行する際に、別のＩ／Ｏ処理サーバへＩ／Ｏ処理要求を振り分ける。この別のＩ／Ｏ処理サーバへＩ／Ｏ処理要求を振り分けることを図５では、再選択処理と呼んでいる。再選択処理については図１６で後述する。アクセスサーバは、後述の図８、図９の管理テーブルを参照し、Ｉ／Ｏ処理要求のサイズ（または発行頻度）が閾値を超えている場合は、更なる振り分けが必要と判断し、更に後続のＩ／Ｏ処理要求は更に別のＩ／Ｏ処理サーバに対して実行される。ここで、Ｉ／Ｏ処理要求のサイズは、Ｉ／Ｏ処理要求によって指定される、ストレージ装置から読み出すデータの量、あるいは、ストレージ装置に書き込むデータの量のことである。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００５３
【補正方法】変更
【補正の内容】
【００５３】
ステップＳ２５においては、図１０のステップＳ１６またはＳ２０で、変更した結果の閾値レベルを変数、例えば、Ｌに設定する。ステップＳ２６において、閾値レベルを変更したＩ／Ｏ処理サーバの閾値定義テーブルを管理テーブルのリストから外す。ここで、リストから外すとは、後述のステップＳ２９のリストへの挿入とで１つの処理となる。すなわち、閾値レベルを変更した閾値定義テーブルのデータをリストから読み取り、リスト内のそのテーブルのデータを削除し、閾値レベルの順序に合うリストの配列の場所にデータを挿入するものである。ステップＳ２７のループは、Ｉ／Ｏ処理サーバの数だけループする。ステップＳ２８において、閾値レベルがＬより大きいか否かを判断する。ステップＳ２８の判断がＮｏの場合にはループを続け、Ｙｅｓの場合には、閾値定義テーブルを管理テーブルのリストに挿入して処理を終了する。
【手続補正５】
【補正対象書類名】図面
【補正対象項目名】図１１
【補正方法】変更
【補正の内容】
【図１１】
2013094007.tif 000028
【国際調査報告】
2013094007.tif 000029
2013094007.tif 000030
2013094007.tif 000031
2013094007.tif 000032
2013094007.tif 000033
2013094007.tif 000034