(58)【調査した分野】(Int.Cl.,DB名)
前記処理部は、前記複数の上位装置それぞれについて前記受信間隔よりも前記経過時間の方が長い場合に前記バックアップを開始し、少なくとも1つの上位装置について前記受信間隔より前記経過時間の方が長くない場合に前記バックアップの開始を延期する、請求項1記載の制御装置。
前記処理部は、少なくとも1つの上位装置について前記受信間隔より前記経過時間の方が長くない場合でも、他の上位装置に関する前記経過時間が所定時間以上である場合は前記バックアップを開始する、請求項2記載の制御装置。
前記処理部は、前記バックアップでは、第1の記憶装置に記憶された前記データを基にバックアップデータを生成し、書き込み回数に制限のある記憶素子を備える第2の記憶装置に前記バックアップデータを格納する、請求項1乃至5の何れか1項に記載の制御装置。
【発明を実施するための形態】
【0013】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理システムの例を示す図である。第1の実施の形態の情報処理システムは、制御装置1、上位装置2,3および記憶装置4,5を含む。制御装置1、上位装置2,3および記憶装置4,5は、ネットワーク6に接続されている。記憶装置4,5のうちの一方または両方は、制御装置1に内蔵されてもよい。
【0014】
上位装置2,3は、ネットワーク6を介して、記憶装置4に記憶されたデータD1を更新する。具体的には、上位装置2,3それぞれは、データD1に対する一連の更新要求を発行する。制御装置1は、更新要求を受信し、更新要求に応じて記憶装置4に格納されたデータD1を更新する。
【0015】
データD1は、上位装置2,3それぞれの処理に用いられるデータ要素の集合でもよいし、制御装置1による所定の処理に用いられるデータ要素の集合でもよい。後者の例として、制御装置1がシステム内の運用管理におけるイベント通知機能を担う場合が考えられる。その場合、データD1は、制御装置1による上位装置2,3へのイベント通知の設定情報(例えば、通知対象のイベントや通知先を指定する情報など)でもよい。
【0016】
上位装置2,3は、識別情報(装置#と表記する)をもつ。上位装置2の装置#は“1”である。上位装置3の装置#は“2”である。上位装置2,3により発行される更新要求は、上位装置2,3それぞれの装置#、または、制御装置1により装置#に対応付け可能な情報を含む。
【0017】
制御装置1は、記憶装置4に記憶されたデータD1に対するバックアップ処理(単にバックアップと称することがある)を実行する。具体的には、制御装置1は、記憶装置4に記憶されたデータD1を複製することで、データD1に対応するバックアップデータD2を生成する。そして、制御装置1は、バックアップデータD2を記憶装置5に格納する。ここで、制御装置1は、バックアップの実行タイミングを制御する機能を提供する。制御装置1は、記憶部1aおよび処理部1bを有する。
【0018】
記憶部1aは、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部1bは、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部1bはプログラムを実行するプロセッサでもよい。「プロセッサ」は、複数のプロセッサの集合(マルチプロセッサ)を含み得る。
【0019】
記憶部1aは、更新要求の受信間隔と最終の受信時刻とを上位装置毎に記憶する。例えば、テーブルX1を記憶する。テーブルX1は、装置#、受信間隔および最終の受信時刻の項目を含む。装置#の項目には、装置#が登録される。受信間隔の項目には、更新要求の受信間隔が登録される。最終の受信時刻の項目には、更新要求の最終の受信時刻(最新の受信時刻)が登録される。例えば、テーブルX1には、装置#1(上位装置2)に対して、受信間隔Δt1および最終の受信時刻T1が登録されている。また、テーブルX1には、装置#2(上位装置3)に対して、受信間隔Δt2および最終の受信時刻T2が登録されている。
【0020】
処理部1bは、上位装置2,3それぞれにより発行される更新要求を受信し、受信間隔と最終の受信時刻とを上位装置毎に記憶部1aに記録する。具体的には、処理部1bは、上位装置2,3それぞれによる更新要求の受信間隔と最終の受信時刻とを、装置#に対応付けて、テーブルX1に登録する。また、処理部1bは、更新要求に応じて、記憶装置4に記憶されたデータD1を更新する。
【0021】
例えば、処理部1bが、上位装置2を送信元とする更新要求を、時刻T1に受信した場合を考える。処理部1bは、時刻T1を、上位装置2による最終の受信時刻(今回の受信時刻)とする。そして、処理部1bは、前回の受信時刻と今回の受信時刻T1との時間差を、上位装置2による更新要求の受信間隔とする。
【0022】
このとき、処理部1bは、上位装置2について、前回までに得た受信間隔よりも今回の受信間隔の方が大きい場合に、今回の受信間隔を上位装置2の受信間隔Δt1として採用してもよい。また、前回までに得た受信間隔よりも今回の受信間隔の方が小さい場合、および、前回までに得た受信間隔が今回の受信間隔に等しい場合に、前回までに得た受信間隔を上位装置2の受信間隔Δt1として採用してもよい。後述の処理により、上位装置2による一連の更新要求が途切れたことを適切に検出できるようにするためである。あるいは、処理部1bは、上位装置2からの更新要求の受信間隔の統計値を、上位装置2による更新要求の受信間隔としてもよい。統計値としては、例えば、パーセンタイル値(90パーセンタイル値)や平均値(あるいは平均値に誤差を加算した値)などが考えられる。
【0023】
処理部1bは、上位装置3についても、同様にして、更新要求の受信間隔Δt2および最終の受信時刻T2を取得し、テーブルX1に登録する。ここで、時刻T2は、時刻T1よりも未来の時刻であるとする。
【0024】
処理部1bは、所定のタイミングで、最終の受信時刻から当該タイミングまでの経過時間と受信間隔とを上位装置毎に比較する。処理部1bは、上位装置毎の比較結果に応じてバックアップを開始する。「所定のタイミング」は、更新要求に応じたデータ更新とは非同期である(同期していない)。例えば、「所定のタイミング」は、周期的なタイミングでもよいし、別の装置によりバックアップの開始確認を指示されたタイミングでもよい。当該所定のタイミングは、バックアップの開始候補のタイミングである。一例として、第1のタイミングは時刻τ1である。また、一例として、第2のタイミングは時刻τ2である。時刻τ2は、時刻τ1よりも未来の時刻である。
【0025】
より具体的には、処理部1bは、時刻τ1で、記憶部1aに記憶されたテーブルX1を参照して、最終の受信時刻から時刻τ1までの経過時間と受信間隔とを上位装置2,3毎に比較する。
【0026】
すなわち、処理部1bは、上位装置2について、最終の受信時刻T1から時刻τ1までの時間差(τ1−T1のように表記する)と、受信間隔Δt1とを比較する。ここでは、τ1−T1>Δt1であるとする。また、処理部1bは、上位装置3について、最終の受信時刻T2から時刻τ1までの時間差τ1−T2と受信間隔Δt2とを比較する。ここでは、τ1−T2≦Δt2であるとする。
【0027】
処理部1bは、上位装置2に関する比較結果τ1−T1>Δt1、および、上位装置3に関する比較結果τ1−T2≦Δt2に応じて、データD1のバックアップを開始するか否かを決定する。この例の場合、処理部1bは、データD1のバックアップの開始を延期する(すなわち、今回タイミングでのバックアップの開始を保留する)。
【0028】
なぜなら、上位装置3に関する比較結果τ1−T2≦Δt2によれば、上位装置3により発行される一連の更新要求の受信は、未だ途絶えていない(上位装置3によるデータD1の一連の更新が継続している)可能性が高いからである。このように、処理部1bは、何れかの上位装置によるデータD1の更新が継続していると推定される場合には、バックアップの開始を延期する。なお、上位装置2に関する比較結果τ1−T1>Δt1によれば、上位装置2により発行される一連の更新要求の受信は、既に途絶えている(上位装置2によるデータD1の一連の更新が完了している)可能性が高い。
【0029】
次に、処理部1bは、時刻τ2で、記憶部1aに記憶されたテーブルX1を参照して、最終の受信時刻から時刻τ2までの経過時間と受信間隔とを上位装置2,3毎に比較する。
【0030】
すなわち、処理部1bは、上位装置2について、最終の受信時刻T1から時刻τ2までの時間差τ2−T1と受信間隔Δt1とを比較する。ここでは、τ2−T1>Δt1である。また、処理部1bは、上位装置3について、最終の受信時刻T2から時刻τ2までの時間差τ2−T2と受信間隔Δt2とを比較する。ここでは、τ2−T2>Δt2であるとする。
【0031】
処理部1bは、上位装置2に関する比較結果τ2−T1>Δt1、および、上位装置3に関する比較結果τ2−T2>Δt2に応じて、データD1のバックアップを開始するか否かを決定する。この例の場合、処理部1bは、データD1のバックアップを直ちに開始する。
【0032】
なぜなら、上位装置2に関する比較結果τ2−T1>Δt1、および、上位装置3に関する比較結果τ2−T2>Δt2によれば、上位装置2,3により発行される一連の更新要求の受信は、既に途絶えている可能性が高いからである。この場合、上位装置2,3によるデータD1の一連の更新が完了していると考えられる。このように、処理部1bは、全ての上位装置によるデータD1の更新が完了していると推定される場合には、バックアップを開始する。そして、処理部1bは、記憶装置4に記憶されたデータD1に対応するバックアップデータD2を生成し、バックアップデータD2を記憶装置5に格納する。
【0033】
こうして、制御装置1は、上位装置2,3による更新が完了したタイミングに絞ってバックアップを実行することで、バックアップの頻度を低減できる。
ところで、バックアップの頻度が過多または過少であると、好ましくない影響をシステムに及ぼし得る。例えば、上位装置2,3それぞれによる更新が行われるたびに、データD1のバックアップを取得することも考えられる。しかし、この方法では、バックアップの頻度が増えやすい。このため、バックアップに伴う制御装置1や記憶装置4,5などの負荷により、他の処理(例えば、制御装置1や上位装置2,3などによる本来の業務処理)に影響を及ぼす可能性がある。
【0034】
より具体的には、制御装置1が更新要求に対する更新およびバックアップの実行後に更新要求に応答していると、バックアップ時間が要因となって更新要求に対する応答遅延が増し、制御装置1や上位装置2,3による次の処理の実行が遅延し得る。あるいは、バックアップデータD2の書き込み先の記憶装置5でリソースがロックされ、記憶装置5にログ書き込みなどを行う上位装置2,3上の業務処理で待ちが生じる可能性もある。
【0035】
一方、例えば、スケジュールされた時刻に、データD1のバックアップを実行することも考えられる。この方法では、更新要求のたびにバックアップを実行するよりもバックアップの頻度を減らせる。しかし、その反面、現在取得済のバックアップデータD2が、最新の状態のデータに対応するバックアップデータでない可能性が高まる。この場合、記憶装置4の障害などが発生したときに、バックアップデータD2からデータD1を復旧しようとしたときに、データD1を最新の状態に戻せない可能性が高まり、データD1を適切に保全できないおそれがある。
【0036】
そこで、制御装置1は、上位装置2,3により発行されるデータD1の一連の更新要求の受信間隔と最終の受信時刻とを基に、上位装置2,3それぞれによる一連の更新要求の発行が完了したと推定されるタイミングで、データD1のバックアップを開始する。
【0037】
これにより、バックアップの頻度を減らしながら、データD1の最新の状態に対応するバックアップデータD2を効率的に取得可能になる。制御装置1は、複数の上位装置のうち少なくとも1つの上位装置によりデータD1が更新中であると判断される間は、データD1のバックアップを保留する。理由は次の通りである。
【0038】
例えば、上位装置3によりデータD1が更新中であるにも拘わらずバックアップデータD2を取得すると、上位装置3による、その後のデータD1の更新が今回のバックアップデータD2に反映されない。ここで、ある上位装置による一連の更新要求のうち、最初の更新要求の受信時刻と最後の更新要求の受信時刻との時間差は、比較的短いことが多く、その短い間に記憶装置4などの障害によりデータD1が喪失される可能性は比較的低いと考えられる。このため、制御装置1は、何れかの上位装置がデータD1を更新中である間は、バックアップデータの取得を控える。
【0039】
ただし、複数の上位装置によるデータD1の更新が重なると、各上位装置による更新が完了するまでの時間が長引く。このため、制御装置1は、データD1に対する一連の更新要求を同時に発行していた各上位装置によるデータD1の更新が完了したことを検出すると、直ちにデータD1のバックアップを開始する。これにより、各上位装置の更新に対して、より新しい状態のバックアップデータD2を早いタイミングで取得できる。その結果、当該バックアップデータD2により、各上位装置にとって最新の状態で、データD1を復元できる可能性を高められる。すなわち、バックアップの頻度の低減とバックアップによるデータ保全との両立を図れる。
【0040】
また、更新要求によるデータ更新とは非同期に決定されるタイミングでバックアップを実行することで、更新要求に対する応答時間を高速化できる。
更に、制御装置1によれば、バックアップの実行の頻度を低減することで、記憶装置5に対する書き込み回数を減らせるという利点もある。このため、例えば、記憶装置5として、SSD(Solid State Drive)のように内蔵の記憶素子の書き込み回数に制限がある記憶デバイスを用いる場合に、記憶装置5の長寿命化を図れるという利点もある。
【0041】
以下では、制御装置1の機能を有するストレージ装置を例示して、バックアップの実行を制御する機能を更に具体的に説明する。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムの例を示す図である。第2の実施の形態の情報処理システムは、ストレージ装置10およびサーバ200,300,400を含む。ストレージ装置10およびサーバ200,300,400は、LAN(Local Area Network)20に接続されている。LAN20は、運用管理用の通信に用いられるネットワークである。また、ストレージ装置10およびサーバ200,300,400は、SAN(Storage Area Network)30に接続されている。SAN30は、サーバ200,300,400からストレージ装置10に格納されたデータにアクセスするために用いられるネットワークである。
【0042】
ストレージ装置10は、サーバ200,300,400による業務処理に用いられる各種のデータを記憶する。ストレージ装置10は、ストレージアレイやディスクアレイなどと呼ばれるものでもよい。
【0043】
ストレージ装置10は、複数の記憶装置を備える。記憶装置は、例えば、HDDやSSDなどである。ストレージ装置10は、RAID(Redundant Arrays of Inexpensive Disks)の技術により複数の記憶装置を用いた論理ボリュームを作成し、サーバ200,300,400に提供する。また、ストレージ装置10は、サーバ200,300,400に対して、所定の事象の発生を通知する。通知対象の事象の一例として、ストレージ装置10において新たな論理ボリュームを利用可能になったことや、ストレージ装置10におけるデータコピー処理の進捗の変化などが考えられる。また、通知対象の事象は、サーバ200,300,400により選択される。
【0044】
サーバ200,300,400は、SAN30経由で、ストレージ装置10に記憶された業務データに対するブロックアクセスを行い、業務データを用いた所定の業務処理を実行するサーバコンピュータである。
【0045】
また、サーバ200,300,400は、LAN20経由で、ストレージ装置10による通知対象の事象に対する設定を行う。サーバ200,300,400それぞれにより通知を受ける事象の内容は異なる。サーバ200,300,400は、個別に、通知を受けたい事象の情報や通知先の情報を、ストレージ装置10のリポジトリに設定する。
【0046】
ここで、ストレージ装置10は、SMI−S(Storage Management Initiative - Specification)の装置構成変更通知機能(Indication機能と称することがある)を用いて、事象の通知を行う。SMI−Sは、SNIA(Storage Networking Industry Association)が開発・保守している標準規約であり、異ベンダ/異機種混在システムでのストレージ装置の相互運用性の向上を目指すものである。
【0047】
サーバ200,300,400は、SMI−SのIndication機能において、SMI−Sの規約に従った設定を、ストレージ装置10のリポジトリに対して行う。具体的な設定情報は、次の通りである。
【0048】
第1の設定情報は、通知先サーバのIP(Internet Protocol)アドレスおよび通知先サーバの名称である。ここで、通知先サーバをリスナーと称することがある。また、リスナーの名称をリスナー名と称することがある。
【0049】
第2の設定情報は、通知対象の事象である。ここで、通知対象の事象をフィルターと称することがある。
第3の設定情報は、リスナー(通知先のサーバ)とフィルターとのマッピングである。リスナーとフィルターとのマッピングを、サブスクリプションと称することがある。
【0050】
第1,第2,第3の設定情報を総称して、Indication情報と称することがある。
サーバ200,300,400は、ストレージ装置10のリポジトリに格納されたIndication情報に対する更新要求を発行する。サーバ200,300,400は、当該更新要求をLAN20経由で、ストレージ装置10に送信する。
【0051】
図3は、ストレージ装置のハードウェア例を示す図である。ストレージ装置10は、コントローラモジュール(CM:Controller Module)100,100aおよびドライブエンクロージャ(DE:Drive Enclosure)50を有する。CM100,100aおよびDE50は、ストレージ装置10の内部のバスにより相互に接続されている。
【0052】
CM100,100aは、DE50に収納された記憶装置に対するブロックアクセスを制御する制御装置である。CM100,100aは、ストレージ制御装置、あるいは、単にコントローラなどと呼ばれることもある。
【0053】
CM100,100aは、Indication機能を提供する。例えば、CM100,100aの何れか一方が、ストレージ装置10におけるIndication機能を提供してもよい。あるいは、CM100,100aの両方が、ストレージ装置10におけるIndication機能を提供してもよい。例えば、CM100の故障時に、CM100aがIndication機能を代替してもよい。第2の実施の形態の例では、CM100が、ストレージ装置10におけるIndication機能の提供を担当することを想定する(CM100aもCM100と同様にIndication機能を提供できる)。
【0054】
DE50は、複数のHDDを収納する。例えば、DE50は、HDD51,52,53,・・・を備える。DE50は、HDDに加えて、あるいは、HDDに代えて、SSDなどの他の種類の記憶装置を複数備えてもよい。
【0055】
ここで、Indication情報は、CM100が備える所定の揮発性メモリに格納される。このため、停電や故障などによるCM100の再起動や、CM100の電源オン/オフが発生すると、Indication情報は消去される。そこで、CM100は、揮発性メモリに格納されているIndication情報を複製して、不揮発性メモリにバックアップする。これにより、CM100の再起動や、CM100の電源オン/オフが発生しても、不揮発性メモリからIndication情報を復元可能にする。CM100は、Indication情報のバックアップの開始タイミングを制御する機能を提供する。
【0056】
図4は、CMのハードウェア例を示す図である。CM100は、プロセッサ101、RAM102、BUD(Boot-up and Utility Device)103、媒体リーダ104、CM−IF(InterFace)105、DI(Drive Interface)106、NA(Network Adapter)107およびCA(Channel Adapter)108を有する。これらのハードウェアは、CM100の内部バスに接続されている。CM100aもCM100と同様のハードウェアにより実現できる。
【0057】
プロセッサ101は、CM100の情報処理を制御するハードウェアである。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、DSP、ASICまたはFPGAなどである。プロセッサ101は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
【0058】
RAM102は、CM100の主記憶装置である。RAM102は、揮発性の半導体メモリである。RAM102として、例えば、SRAM(Static RAM)やDRAM(Dynamic RAM)などが用いられる。RAM102は、プロセッサ101に実行させるOS(ファームウェア)のプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101による処理に用いられる各種データを記憶する。
【0059】
BUD103は、CM100の補助記憶装置である。BUD103は、不揮発性の半導体メモリである。BUD103として、SSDが用いられる。BUD103は、OS(ファームウェアを含む)のプログラムや各種データなどを記憶する。BUD103は、RAM102に記憶されたデータに対応するバックアップデータの保存にも用いられる。
【0060】
媒体リーダ104は、記録媒体11に記憶されたプログラムやデータを読み取る装置である。記録媒体11として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することができる。媒体リーダ104は、例えば、プロセッサ101からの命令に従って、記録媒体11から読み取ったプログラムやデータを、RAM102やBUD103に格納することもできる。
【0061】
CM−IF105は、CM100aと接続するためのインタフェースである。CM100は、CM−IF105を用いて、CM100aと連携してデータアクセスを行える。例えば、CM100を運用系、CM100aを待機系としてもよい。あるいは、CM100,100aの両方を運用系として、データアクセスを分散して行ってもよい。何れの場合も、一方の故障時に他方でデータアクセスを引き継ぐことができ、ユーザの業務が停止されることを防げる。
【0062】
DI106は、DE50と通信するためのインタフェースである。例えば、DI106として、SAS(Serial Attached SCSI)などのインタフェースを用いることができる。
NA107は、LAN20を介してサーバ200,300,400と通信する通信インタフェースである。NA20として、例えばイーサネット(登録商標)のインタフェースを用いることができる。
【0063】
CA108は、SAN30を介してサーバ200,300,400と通信する通信インタフェースである。CA108として、例えばFC(Fibre Channel)のインタフェースを用いることができる。CA108は、サーバ200,300,400からDE50へのブロックアクセスに用いられる。CA108として、FC以外のインタフェース(例えば、iSCSI(Internet Small Computer System Interface)など)が用いられることもある。
【0064】
図5は、サーバのハードウェア例を示す図である。サーバ200は、プロセッサ201、RAM202、HDD203、媒体リーダ204、画像信号処理部205、入力信号処理部206、LAN−IF207およびHBA(Host Bus Adapter)208を有する。各ハードウェアはサーバ200のバスに接続されている。サーバ300,400もサーバ200と同様のハードウェアを用いて実現できる。
【0065】
プロセッサ201は、サーバ200の情報処理を制御するハードウェアである。プロセッサ201は、マルチプロセッサであってもよい。プロセッサ201は、例えばCPU、DSP、ASICまたはFPGAなどである。プロセッサ201は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
【0066】
RAM202は、サーバ200の主記憶装置である。RAM202は、プロセッサ201に実行させるOSのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM202は、プロセッサ201による処理に用いる各種データを記憶する。
【0067】
HDD203は、サーバ200の補助記憶装置である。HDD203は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD203は、OSのプログラム、アプリケーションプログラム、および各種データを記憶する。サーバ200は、HDD203に代えて、または、HDD203に加えて、SSDなどの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【0068】
媒体リーダ204は、記録媒体21に記録されたプログラムやデータを読み取る装置である。記録媒体21として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)を使用できる。また、記録媒体21として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ204は、例えば、プロセッサ201からの命令に従って、記録媒体21から読み取ったプログラムやデータをRAM202またはHDD203に格納する。
【0069】
画像信号処理部205は、プロセッサ201からの命令に従って、サーバ200に接続されたディスプレイ22に画像を出力する。ディスプレイ22として、CRT(Cathode Ray Tube)ディスプレイや液晶ディスプレイなどを用いることができる。
【0070】
入力信号処理部206は、サーバ200に接続された入力デバイス23から入力信号を取得し、プロセッサ201に出力する。入力デバイス23として、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【0071】
LAN−IF207は、LAN20を介してストレージ装置10と通信する通信インタフェースである。LAN−IF207は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
【0072】
HBA208は、SAN30を介してストレージ装置10と通信する通信インタフェースである。HBA208として、FCのインタフェースを用いることができる。ただし、HBA208として、iSCSIなどのFC以外のインタフェースが用いられることもある。
【0073】
図6は、CMの機能例を示す図である。CM100は、通知制御部111およびBUD制御部112を有する。通知制御部111およびBUD制御部112は、RAM102に記憶されたプログラムをプロセッサ101が実行することで実現される。
【0074】
通知制御部111は、Indication情報に対する更新要求をサーバ200,300,400それぞれから受信する。Indication情報は、RAM102に格納されている。RAM102の記憶領域の一部が、Indication情報を記憶するリポジトリの役割を担う。通知制御部111は、更新要求に応じて、RAM102に記憶されたIndication情報を更新する。
【0075】
ここで、
図6では、運用管理部210,310,410を図示している。運用管理部210は、プロセッサ201により発揮される運用管理機能である。運用管理部310は、サーバ300が備えるプロセッサにより発揮される運用管理機能である。運用管理部410は、サーバ400が備えるプロセッサにより発揮される運用管理機能である。運用管理部210,310,410は、サーバ200,300,400それぞれが備えるRAMに記憶された所定のプログラムを、サーバ200,300,400それぞれが備えるプロセッサが実行することで実現される。
【0076】
例えば、運用管理部210,310,410それぞれは、Indication情報に対する更新要求を発行し、CM100に送信する。運用管理部210,310,410は、監視対象とする事象(フィルター)を、Indication情報に、個別に登録することができる。監視対象とする事象は、運用管理部210,310,410に対して、予め与えられてもよい(例えば、サーバ200,300,400が備える記憶装置に監視対象とする事象が予め登録されていてもよい)。あるいは、運用管理部210,310,410は、監視対象とする事象のユーザによる事後的な選択を許容してもよい。
【0077】
通知制御部111は、サーバ200,300,400によるIndication情報に対する更新要求を監視する。通知制御部111は、更新要求の監視により、サーバ200,300,400それぞれによる更新要求の受信間隔、および、最終の受信時刻を取得する。通知制御部111は、取得した受信間隔および最終の受信時刻を、サーバ200,300,400それぞれの識別情報(例えば、リスナー名)に対応付けて、RAM102に格納する。
【0078】
通知制御部111は、ストレージ装置10における所定の事象の発生を検出すると、Indication情報の設定内容に従って、当該事象の通知対象のリスナーに、当該事象の発生を通知する。
【0079】
BUD制御部112は、RAM102に記憶されたIndication情報のバックアップを行う。具体的には、BUD制御部112は、所定のタイミングで、RAM102に記憶された情報に基づいて、更新要求の最終の受信時刻から当該タイミングまでの経過時間と、更新要求の受信間隔とをサーバ毎に比較する。BUD制御部112は、サーバ毎の比較結果に応じて、バックアップを開始するか否かを決定する。
【0080】
BUD制御部112は、バックアップを開始すると決定した場合、RAM102に記憶されたIndication情報を複製することで、Indication情報に対応するバックアップデータを生成する。BUD制御部112は、生成したバックアップデータをBUD103に格納する。また、BUD制御部112は、バックアップを開始しないと決定した場合、今回のタイミングではバックアップの開始を保留し、次回以降のタイミングにバックアップの開始を延期する。
【0081】
ここで、BUD制御部112がバックアップの開始候補とするタイミングは、所定の周期で定められるタイミングであるとする。ただし、BUD制御部112がバックアップの開始候補とするタイミングは、別の方法により定められてもよい。例えば、BUD制御部112がバックアップの開始候補とするタイミングは、他の装置によりバックアップ開始の確認を指示されたタイミングでもよい。
【0082】
また、BUD制御部112は、BUD103に記憶されたバックアップデータに基づいて、RAM102にIndication情報をリストアすることもある。
図7は、CMのRAMに記憶される情報の例を示す図である。RAM102は、フィルター情報121、ダミーサブスクリプション122、リスナー情報123、サブスクリプション個別情報124、サブスクリプションビットマップ125および更新管理情報126を記憶する。
【0083】
フィルター情報121は、Indication機能による通知対象として設定可能な事象の一覧を示す情報である。当該事象の例としては、前述のように、ストレージ装置10における論理ボリュームの新規登録などが挙げられる。フィルター情報121は、例えば、XML(Extensible Markup Language)を用いたモデルパス形式と呼ばれる記述形式を用いて表される。また、フィルター情報121の内容は、ストレージ装置10のファームウェアにより予め定められる。フィルター情報121の内容は、ファームウェアの版数に応じて異なることもある。
【0084】
ダミーサブスクリプション122は、サブスクリプションの記述に用いられる情報である。ダミーサブスクリプション122は、モデルパス形式で表される。ここで、サブスクリプションは、フィルター固有の記述部分と、リスナー固有の記述部分とを含む。ダミーサブスクリプション122は、サブスクリプションにおけるフィルター固有の記述部分である。ダミーサブスクリプション122は、リスナー固有の所定の情報(リスナー名や登録時刻の情報など)に置換するためのプレースホルダを含む。プレースホルダは、所定のキーワード形式で表される。本例では、キーワード形式は、“%x%”のように“%”(パーセント記号)で文字列を括る記述形式である。ダミーサブスクリプション122は、フィルター数分存在する。
【0085】
リスナー情報123は、通知先サーバのIPアドレスおよびリスナー名の対応関係を示す情報である。リスナー情報123は、モデルパス形式で表される。リスナー情報123のレコードは、リスナー数分作成される。リスナー情報123のレコードは、サーバ200,300,400からの更新要求に応じて、更新または削除される。
【0086】
サブスクリプション個別情報124は、リスナー名およびサブスクリプション登録時間の対応関係を示す情報である。サブスクリプション個別情報124のレコードは、サブスクリプション数(リスナー名とフィルターとの組の数)分作成される。サブスクリプション個別情報124のレコードは、サーバ200,300,400からの更新要求に応じて、通知制御部111により更新または削除される。
【0087】
サブスクリプションビットマップ125は、リスナー名とフィルターとのマッピング情報である。サブスクリプションビットマップ125は、リスナー数分作成される。サブスクリプションビットマップ125は、ビットマップ形式で表される。サブスクリプションビットマップ125は、サーバ200,300,400からの更新要求に応じて、通知制御部111により更新または削除される。
【0088】
更新管理情報126は、Indication情報に関する更新を管理するための情報である。更新管理情報126は、リスナー毎のIndication情報の最終更新時刻、および、更新間隔を含む。
【0089】
最終更新時刻は、該当のリスナーによるIndication情報の最終の更新時刻(最新の更新時刻)である。該当のリスナーによるIndication情報の更新要求を受信した最終の時刻(最終受信時刻)を最終更新時刻とみなしてもよい。最終更新時刻は、リスナー数分登録される。最終更新時刻は、サーバ200,300,400からの更新要求に応じて、通知制御部111により更新または削除される。
【0090】
更新間隔は、該当のリスナーによるIndication情報の更新間隔である。更新間隔に設定される値は、過去に計測された更新間隔のうちの最大値とする。更新間隔は、リスナー数分登録される。更新間隔は、サーバ200,300,400からの更新要求に応じて、通知制御部111により更新または削除される。
【0091】
また、更新管理情報126は、リポジトリ更新フラグを含む。リポジトリ更新フラグは、Indication情報の全体に対する更新有無を示すフラグである。リポジトリ更新フラグ“TRUE”は、前回バックアップ時点から更新があることを示す。リポジトリ更新フラグ“FALSE”は、前回バックアップ時点から更新がないことを示す。リポジトリ更新フラグは、サーバ200,300,400によるIndication情報の更新に応じて、通知制御部111により“TRUE”に設定される。リポジトリ更新フラグは、Indication情報のバックアップ完了時に、BUD制御部112により“FALSE”に設定される。
【0092】
次に、
図7で例示した各情報のデータ構造を具体的に説明する。
図8は、フィルター情報の例を示す図である。フィルター情報121は、フィルター番号および通知対象事象の項目を含む。フィルター番号の項目には、フィルターを識別する番号が登録される。通知対象事象の項目には、通知対象の事象の内容が登録される。
【0093】
例えば、フィルター情報121には、フィルター番号が“1”、通知対象事象が“RAIDグループまたはシンプロプール登録完了時”という情報が登録されている。これは、フィルター番号“1”で示される通知対象事象が、RAIDグループまたはシンプロプールの登録完了という事象であることを示す。ここで、「シンプロ」は、シンプロビジョニングの略である。「シンプロプール」は、サーバ200,300,400の共有のストレージリソースの集合体である。「シンプロプールの登録完了」は、ストレージ装置10において、新たなシンプロプールが登録されたことである。
【0094】
新たなRAIDグループや新たなシンプロプールの登録の結果、サーバ200,300,400は新たなストレージリソースを利用可能になる。サーバ200,300,400は当該事象に対する通知を受信することで、新たなストレージリソースが利用可能になったことを検出でき、ユーザへの通知などを行える。
【0095】
フィルター情報121には、「ボリュームの登録完了時」や、「コピーセッションの状態変更時」などの事象も登録されている。
図9は、ダミーサブスクリプションの例を示す図である。ダミーサブスクリプション122は、XML形式のデータである。ダミーサブスクリプション122は、フィルター(8〜12行目の記述)、通知先のリスナー(13〜16行目の記述)および通知ポリシー(17〜19行目の記述)などの定義を含む。ただし、リスナー名の記述箇所(14行目)は、キーワード“%a%”が設定されている。
【0096】
また、ダミーサブスクリプション122は、該当のリスナーによるサブスクリプションの更新時刻(20行目)および適用開始時刻(21行目)を含む。これらの時刻の記述箇所は、キーワード“%b%”が設定されている。
【0097】
このように、ダミーサブスクリプション122は、フィルター固有の記述を含み、リスナー固有の記述箇所(リスナー名、更新時刻および適用開始時刻)に設定されたキーワードを含む。キーワードは、フィルター(ダミーサブスクリプション)毎に異なる。
【0098】
ダミーサブスクリプション122は、フィルターの識別情報(例えば、前述のフィルター番号)に対応付けられて、RAM102に格納される。また、ダミーサブスクリプション122の記述は、フィルターに対して予め定められた記述となる。このため、通知制御部111は、ダミーサブスクリプション122を、フィルター情報121に基づいて生成可能である。
【0099】
図10は、リスナー情報の例を示す図である。ここでは、リスナー情報123は、XML形式のデータである。リスナー情報123は、リスナー名(14行目)、および、リスナーのIPアドレス(15行目)の定義を含む。1つのリスナーに対応する情報がリスナー情報123の1レコードに相当する。
【0100】
ここで、サーバ200のリスナー名を“Listener1”とする。サーバ300のリスナー名を“Listener2”とする。サーバ400のリスナー名を“Listener3”とする。リスナー名は、サーバ200,300,400に対して予め与えられる。
【0101】
図11は、サブスクリプション個別情報の例を示す図である。サブスクリプション個別情報124は、キーワード識別子および値の項目を含む。キーワード識別子の項目には、ダミーサブスクリプションに設定されたキーワードの識別子(キーワード識別子と称する)が登録される。キーワード識別子は、リスナーを区別する情報(例えば、“L1”のように“L”の文字と数値との組)と、キーワードとの結合(例えば、“L1%a%”)により表される。キーワード識別子におけるリスナーを区別する情報の部分により、ダミーサブスクリプション122に含まれる各キーワードの設定値の組が特定される。値の項目には、該当のキーワード識別子に対応する設定値が登録される。
【0102】
例えば、サブスクリプション個別情報124には、キーワード識別子が“L1%a%”、値が“Listener1”という情報が登録されている。また、サブスクリプション個別情報124には、キーワード識別子が“L1%b%”、値が“20160630060510.116666+000”という情報が登録されている。これらは、ダミーサブスクリプション122のキーワード“%a%”および“%b%”に設定される値の組である。すなわち、キーワード“%a%”を“Listener1”に置換し、キーワード“%b%”を“20160630060510.116666+000”に置換することを示す。この値の組を表す情報は、サブスクリプション個別情報124の1つのレコードに相当する。
【0103】
例えば、サブスクリプション個別情報124には、ダミーサブスクリプション122に設定する別の値の組(例えば、キーワード識別子“L2%a%”および“L2%b%”に対応する値の組)も登録されている。また、サブスクリプション個別情報124には、他のダミーサブスクリプションについても、同様に、キーワード識別子と値との対応関係が登録される。
【0104】
図12は、サブスクリプションビットマップの例を示す図である。サブスクリプションビットマップ125は、ビットマップ125a,125b,125cを含む。ビットマップ125aは、サーバ200に対するサブスクリプションビットマップであり、リスナー名“Listener1”に対応付けられている。ビットマップ125bは、サーバ300に対するサブスクリプションビットマップであり、リスナー名“Listener2”に対応付けられている。ビットマップ125cは、サーバ400に対するサブスクリプションビットマップであり、リスナー名“Listener3”に対応付けられている。
【0105】
ビットマップ125a,125b,125cの各桁は、フィルター番号に対応付けられている。例えば、最上位の桁から最下位の桁へ向かって、順に、フィルター番号“1”、“2”、“3”、・・・と、フィルター番号の昇順に対応付けられている。ある桁のビットの値が“1”のとき、該当のフィルター番号に対応する事象のIndication機能による通知を行うことを示す。また、ある桁のビットの値が“0”のとき、該当のフィルター番号に対応する事象のIndication機能による通知を行わないことを示す。ビットマップ125a,125b,125cの各ビットの初期値は“0”である。
【0106】
また、ビットマップ125a,125b,125cの桁数は、ファームウェアのバージョンによって固定である。ファームウェアのバージョンが変わると、フィルター数も変わり得るため、ビットマップ125a,125b,125cの桁数も変わり得る。
【0107】
例えば、ビットマップ125aの例では、フィルター番号“1”に対応する桁のビット値は“1”である。これは、サーバ200に対して、フィルター番号“1”に対応する事象の通知を行うことを示す。
【0108】
また、ビットマップ125aの例では、フィルター番号“6”に対応する桁のビット値は“0”である。これは、サーバ200に対して、フィルター番号“6”に対応する事象の通知を行わないことを示す。
【0109】
図13は、更新管理情報の例を示す図である。更新管理情報126は、項目名および値の項目を含む。項目名の項目には、更新管理用の設定値の名称が登録される。値の項目には、設定値が登録される。
【0110】
例えば、更新管理情報126には、項目名“リポジトリ更新フラグ”に対して、値“TRUE”が登録されている。これは、リポジトリ更新フラグの設定値が“TRUE”であることを示す。
【0111】
また、更新管理情報126には、項目名“Listener1 最終更新時刻”に対して、値“10:00:04.312”という情報が登録されている。これは、サーバ200によるIndication情報の最終更新時刻が、10時00分04秒312であることを示す。
【0112】
また、更新管理情報126には、項目名“Listener1 更新間隔(msec)”に対して、値“2035”という情報が登録されている。これは、サーバ200によるIndication情報の更新間隔が2035ミリ秒(msec)であることを示す。
【0113】
更新管理情報126には、他のリスナーについてもサーバ200と同様に、最終更新時刻および更新間隔が登録される。なお、更新間隔の設定値“0”は、無効値を表す。
図14は、一連の更新要求の受信例を示す図である。SMI−Sの規約により、通知制御部111は、次のように更新要求を受信する。第1に、各サーバからの1つの更新要求は、1つのリスナーの登録または1つのサブスクリプションの登録に対応する。このため、あるリスナーから複数のサブスクリプションの登録を受け付ける場合、通知制御部111は、複数の更新要求を受信する。
【0114】
第2に、通常はリスナー毎に、連続してリスナー、および、サブスクリプションの登録が行われる。
第3に、リスナー毎の更新要求の受信間隔は、各サーバのマシン性能や各サーバの通信に用いられるネットワーク性能に依存する。このため、通知制御部111は、リスナー毎に、ほぼ等間隔に、更新要求を受信すると予想される。
【0115】
第4に、更新要求の発行元のサーバが複数存在する場合は、通知制御部111は、複数のサーバにより発行された更新要求を、ある時間帯に並行して受信することもある。
例えば、ある時間帯において、通知制御部111は、サーバ200(Listener1)およびサーバ300(Listener2)からIndication情報に対する一連の更新要求を受信する。
図14中、左側から右側へ向かう方向が時間軸の正方向である。
【0116】
更新要求61,62,63,64は、通知制御部111が、この順で、サーバ200から受信した一連の更新要求である。更新要求71,72,73,74は、通知制御部111が、この順で、サーバ300から受信した一連の更新要求である。各更新要求は、送信元のサーバに対応するリスナー名の情報やIndication情報に対する更新内容を示す情報を含む。
【0117】
例えば、更新要求61は、サーバ200に関するリスナー登録の要求である。更新要求62は、更新要求61に後続する1番目のフィルター登録(通知対象とするフィルターの追加)の要求である。更新要求63は、2番目のフィルター登録の要求である。更新要求64は、3番目のフィルター登録の要求である。
【0118】
また、例えば、更新要求71は、サーバ300に関するリスナー登録の要求である。更新要求72は、更新要求71に後続する1番目のフィルター登録の要求である。更新要求73は、2番目のフィルター登録の要求である。更新要求74は、3番目のフィルター登録の要求である。
【0119】
なお、通知制御部111は、既存のフィルターに関するフィルター登録や通知解除(フィルター解除)の更新要求を受信することもある。既存のリスナーがフィルター登録やフィルター(解除)の更新要求を送信する場合、当該更新要求の前に、当該リスナーは、リスナー登録の更新要求を送信しなくてよい。
【0120】
また、リスナー毎のフィルター登録やフィルター解除の更新要求は、サブスクリプションに関する更新要求であるともいえる。
図14の例では、時系列に並ぶ時刻T11,T12,T13,T14,T15,T16が例示されている。時刻T11は、更新要求62の受信時刻である。時刻T12は、更新要求72の受信時刻である。時刻T13は、更新要求63の受信時刻である。時刻T14は、更新要求73の受信時刻である。時刻T15は、更新要求64の受信時刻である。時刻T16は、更新要求74の受信時刻である。
【0121】
この場合、時刻T16において、通知制御部111が観測する各リスナーの更新間隔、および、最終更新時刻は次の通りである。
サーバ200(Listener1)について、更新要求62,63の受信間隔は、更新要求61,62の受信間隔および更新要求63,64の受信間隔より長い。よって、サーバ200による更新間隔Δt10は、Δt10=T13−T11である。また、サーバ200による最終更新時刻は、時刻T15である。
【0122】
サーバ300(Listener2)について、更新要求72,73の受信間隔は、更新要求71,72の受信間隔および更新要求73,74の受信間隔より長い。よって、サーバ300による更新間隔Δt20は、Δt20=T14−T12である。また、サーバ300による最終更新時刻は、時刻T16である。
【0123】
次に、CM100による処理手順を説明する。まず、通知制御部111によりサーバ200からIndication情報の更新要求を受信する処理(更新要求受信処理)の手順を説明する。その後に、BUD制御部112によりIndication情報のバックアップを取得する処理(ポーリングチェック処理)の手順を説明する。
【0124】
図15は、更新要求受信処理の例を示すフローチャートである。以下、
図15に示す処理をステップ番号に沿って説明する。
(S11)通知制御部111は、Indication情報の更新要求を何れかのサーバから受信する。
【0125】
(S12)通知制御部111は、受信した更新要求が、リスナーの登録に関する更新要求であるか否かを判定する。リスナーの登録に関する更新要求である場合、処理をステップS13に進める。リスナーの登録に関する更新要求でない場合(すなわち、登録済リスナーによるサブスクリプションに関する更新要求である場合)、処理をステップS14に進める。
【0126】
(S13)通知制御部111は、リスナー情報更新処理を行う。リスナー情報更新処理の詳細は後述される。そして、通知制御部111は、処理を終了する。
(S14)通知制御部111は、サブスクリプション更新処理を行う。サブスクリプション更新処理の詳細は後述される。そして、通知制御部111は、処理を終了する。
【0127】
図16は、リスナー情報更新処理の例を示すフローチャートである。以下、
図16に示す処理をステップ番号に沿って説明する。以下に示す手順は、
図15のステップS13に相当する。
【0128】
(S21)通知制御部111は、リスナーの登録に関する更新要求(リスナー名やIPアドレスを含む)に応じて、RAM102に記憶されたリスナー情報123の設定内容を更新する。具体的には、通知制御部111は、新規のリスナー設定(リスナー名およびリスナーのIPアドレスを含む)をリスナー情報123に追加する。また、通知制御部111は、該当のリスナーに対するサブスクリプションビットマップ(全ビットを初期値0とする)を作成し、RAM102に格納する。
【0129】
(S22)通知制御部111は、RAM102に記憶された更新管理情報126における該当のリスナーの最終更新時刻に現在時刻を設定する。
(S23)通知制御部111は、更新管理情報126における該当のリスナーの更新間隔に初期値0を設定する。
【0130】
(S24)通知制御部111は、更新管理情報126におけるリポジトリ更新フラグをTRUEに設定する。なお、リポジトリ更新フラグが既にTRUEの場合、通知制御部111は、上書きでTRUEを設定する。
【0131】
(S25)通知制御部111は、更新要求元のサーバに更新完了を応答する。
なお、通知制御部111は、リスナーの更新に関する更新要求として、新規のリスナー設定の追加だけでなく、既存のリスナー設定の更新の要求を受け付けてもよい。その場合、通知制御部111は、リスナー情報123に対するリスナー設定の更新を行った後(ステップS21におけるビットマップ作成は行わなくてよい)、ステップS22を実行し、ステップS23をスキップして、ステップS24に進める。
【0132】
図17は、サブスクリプション更新処理の例を示すフローチャートである。以下、
図17に示す処理をステップ番号に沿って説明する。以下に示す手順は、
図15のステップS14に相当する。
【0133】
(S31)通知制御部111は、サブスクリプションに関する更新要求に応じて、RAM102に記憶されたサブスクリプション個別情報124およびサブスクリプションビットマップ125を更新する。具体的には、更新要求はリスナー名および通知を受けるフィルターを指定する情報を含む。通知制御部111は、指定されたフィルターに対応するダミーサブスクリプションを特定する。通知制御部111は、特定したダミーサブスクリプションに含まれる第1のキーワードに対応する第1のキーワード識別子とリスナー名とを、サブスクリプション個別情報124に登録する。また、通知制御部111は、特定したダミーサブスクリプションに含まれる第2のキーワードに対応する第2のキーワード識別子と更新時刻や適用開始時刻として設定する時刻とを、サブスクリプション個別情報124に登録する。更に、通知制御部111は、該当のリスナーに対応するサブスクリプションビットマップの指定されたフィルターに対応するビットを“1”に設定する。
【0134】
(S32)通知制御部111は、RAM102に記憶された更新管理情報126を参照して、該当のリスナーによるIndication情報の最終更新時刻から5分以上経過しているか否かを判定する。5分以上経過している場合、処理をステップS35に進める。5分以上経過していない場合、処理をステップS33に進める。
【0135】
(S33)通知制御部111は、更新管理情報126を参照して、該当のリスナーの最終更新時刻から現時刻までの経過時間が、該当のリスナーに対して記録済の更新間隔より大きいか否かを判定する。大きい場合、処理をステップS34に進める。大きくない場合、処理をステップS35に進める。
【0136】
(S34)通知制御部111は、該当のリスナーの最終更新時刻から現時刻までの経過時間を、更新管理情報126における当該リスナーの更新間隔に設定する。
(S35)通知制御部111は、更新管理情報126における該当のリスナーの最終更新時刻に現在時刻を設定する。
【0137】
(S36)通知制御部111は、更新管理情報126におけるリポジトリ更新フラグをTRUEに設定する。なお、リポジトリ更新フラグが既にTRUEの場合、通知制御部111は、上書きでTRUEを設定する。そして、処理を終了する。
【0138】
なお、通知制御部111は、ステップS32に示されるように、経過時間が5分以上である場合には、該当のリスナーについて更新間隔の更新を行わない。この場合のIndication情報の更新は、別シーケンス(サブスクリプションの削除など)による更新であると考えられるためである。
【0139】
また、通知制御部111は、ステップS33で示されるように、最終更新時刻からの経過時間が、記録済の更新間隔よりも大きい場合に、当該更新間隔を、今回の更新間隔で上書きする。すなわち、一連の更新間隔のうちの最大の更新間隔を、該当のサーバによる更新間隔とする。これにより、後述のポーリングチェック処理において、該当のサーバによる一連の更新要求の受信が完了したタイミングを適切に特定可能になる。
【0140】
更に、通知制御部111は、ストレージ装置10において、フィルター情報121に登録された事象を検出すると、RAM102に記憶されたサブスクリプションビットマップ125を参照し、該当の事象に対応するIndication通知の対象リスナーを確認する。通知制御部111は、リスナー情報123を参照して、対象リスナーのIPアドレスを特定し、Indication通知の処理を行う。このとき、通知制御部111は、サブスクリプションビットマップ125を用いてIndication通知の対象リスナーを検索することで、リスナーの検索を高速に行える。
【0141】
図18は、BUDに書き込まれる情報/書き込まれない情報の例を示す図である。CM100は、
図7に例示した情報のうち、フィルター情報121、リスナー情報123、サブスクリプション個別情報124およびサブスクリプションビットマップ125を、BUD103に書き込んでバックアップする。
【0142】
ここで、サポートされるフィルター一覧は、ストレージ装置10のファームウェア(あるいは、CM100のファームウェア)のバージョンによって異なる。このため、BUD制御部112は、サブスクリプションビットマップ125に対応するフィルター情報121をBUD103への書き込み対象とする。
【0143】
一方、ダミーサブスクリプション122は、フィルター情報121から再構築可能である。このため、ダミーサブスクリプション122は、BUD103への書き込み対象外である。また、更新管理情報126は、バックアップの実行制御用であり、Indication機能には用いられない。このため、更新管理情報126は、BUD103への書き込み対象外である。
【0144】
図19は、ポーリングチェック処理の例を示すフローチャートである。以下、
図19に示す処理をステップ番号に沿って説明する。BUD制御部112は、以下の手順を、所定の周期(例えば、5秒周期とする)で実行する。
【0145】
(S41)BUD制御部112は、RAM102に記憶された更新管理情報126を参照して、リポジトリ更新フラグがTRUEであるか否かを判定する。TRUEの場合、処理をステップS42に進める。TRUEでない場合(すなわち、FALSEの場合)、処理を終了する。
【0146】
(S42)BUD制御部112は、更新管理情報126を参照して、最終更新時刻からの経過時間が5分以上のリスナーがあるか否かを判定する。最終更新時刻からの経過時間が5分以上のリスナーがある場合、処理をステップS44に進める。最終更新時刻からの経過時間が5分以上のリスナーがない場合、処理をステップS43に進める。
【0147】
(S43)BUD制御部112は、更新管理情報126を参照して、最終更新時刻からの経過時間が更新間隔以下のリスナーがあるか否かを判定する。最終更新時刻からの経過時間が更新間隔以下のリスナーがある場合、処理を終了する(バックアップを延期する)。最終更新時刻の経過時間が更新間隔以下のリスナーがない場合(すなわち、更新管理情報126に記録された全てのリスナーについて、最終更新時刻からの経過時間が更新間隔より大きい場合)、処理をステップS44に進める。
【0148】
なお、更新間隔に無効値(0秒)が設定されているリスナーも存在し得る。この場合、BUD制御部112は、該当のリスナーについて、最終更新時刻からの経過時間が5秒(=ポーリングチェック周期)以下の場合に、「最終更新時刻からの経過時間が更新間隔以下のリスナー」とみなす。一方、BUD制御部112は、該当のリスナーについて、最終更新時刻からの経過時間が5秒より大きい場合に、「最終更新時刻からの経過時間が更新間隔より大きいリスナー」とみなす。
【0149】
(S44)BUD制御部112は、RAM102に記憶されたフィルター情報121、リスナー情報123、サブスクリプション個別情報124およびサブスクリプションビットマップ125を複製することでバックアップデータを生成し、BUD103に書き込む。すなわち、BUD制御部112は、Indication情報のバックアップを実行する。
【0150】
(S45)BUD制御部112は、更新管理情報126におけるリポジトリ更新フラグをFALSEに設定する。更新管理情報126におけるリスナー毎の最終更新時刻および更新間隔の値はRAM102上に保持される。そして、処理を終了する。
【0151】
ここで、ステップS42の判定を行う理由は、あるリスナーからIndication情報が継続的に更新されるなどして、別のリスナーによる更新完了後に、当該別のリスナーによる更新内容がバックアップされるまでに時間がかかるおそれがあるからである。バックアップまでに時間がかかると、停電等によって該当の更新内容が失われるリスクも高まる。そこで、最終更新時刻から5分以上経過したリスナーが存在する場合は、BUD制御部112は、Indication情報のバックアップを直ちに実行する。
【0152】
このように、BUD制御部112は、各サーバについて更新要求の受信間隔よりも最終更新時刻からの経過時間の方が長い場合にIndication情報のバックアップを開始する。また、BUD制御部112は、少なくとも1つのサーバについて更新要求の受信間隔よりも最終更新時刻からの経過時間の方が長くない場合にIndication情報のバックアップの開始を延期する。
【0153】
図20は、ポーリングチェックの例を示す図である。以下の例では、ポーリングチェックの周期を5秒とする。10時00分00秒の時点の更新管理情報126a(初期状態)は、リポジトリ更新フラグ=FALSEを含む。10時00分00秒のタイミングで、BUD制御部112は、ポーリングチェックを実行する。リポジトリ更新フラグ=FALSEなので(ステップS41 No)、BUD制御部112は、バックアップを延期する。
【0154】
10時00分01秒に、通知制御部111は、サーバ200からの更新要求に応じて、サーバ200のリスナー登録を行う。そして、通知制御部111は、リポジトリ更新フラグをTRUEに設定する。通知制御部111は、サーバ200のリスナー名“Listener1”に対して、最終更新時刻“10:00:01.000”および更新間隔“0(無効値)”を更新管理情報126aに登録する。更新管理情報126bは、当該登録後の状態を示す。
【0155】
10時00分02秒に、通知制御部111は、サーバ200からの更新要求に応じて、サーバ200に対してフィルター番号“1”(フィルター1)の登録を行う。この場合、通知制御部111は、更新管理情報126bにおいて、サーバ200のリスナー名“Listener1”に対し、最終更新時刻“10:00:02.000”および更新間隔“1000”(msec)を登録する。更新管理情報126cは、当該登録後の状態を示す。
【0156】
10時00分03秒に、通知制御部111は、サーバ300からの更新要求に応じて、サーバ300のリスナー登録を行う。通知制御部111は、サーバ300のリスナー名“Listener2”に対して、最終更新時刻“10:00:03.000”および更新間隔“0(無効値)”を更新管理情報126cに登録する。更新管理情報126dは、当該登録後の状態を示す。
【0157】
図21は、ポーリングチェックの例(続き)を示す図である。10時00分04秒に、通知制御部111は、サーバ200からの更新要求に応じて、サーバ200に対してフィルター番号“2”(フィルター2)の登録を行う。この場合、通知制御部111は、更新管理情報126dにおいて、サーバ200のリスナー名“Listener1”に対し、最終更新時刻“10:00:04.000”および更新間隔を“2000”(msec)を登録する。更新管理情報126eは、当該登録後の状態を示す。
【0158】
10時00分05秒のタイミングで、BUD制御部112は、ポーリングチェックを実行する。更新管理情報126eによれば、リポジトリ更新フラグ=TRUEである(ステップS41 Yes)。また、最終更新時刻から5分以上経過しているリスナーはない(ステップS42 No)。
【0159】
ただし、サーバ200(Listener1)は、最終更新時刻(10:00:04.000)から更新間隔分(2000msec)が経過していない。また、サーバ300(Listener2)は、最終更新時刻(10:00:03.000)から5秒経過していない(ステップS43 Yes)。このため、BUD制御部112は、今回タイミングでのバックアップを延期する。
【0160】
10時00分06秒に、通知制御部111は、サーバ300からの更新要求に応じて、サーバ300に対してフィルター番号“6”(フィルター6)の登録を行う。この場合、通知制御部111は、更新管理情報126eにおいて、サーバ300のリスナー名“Listener2”に対し、最終更新時刻“10:00:06.000”および更新間隔“3000”(msec)を登録する。更新管理情報126fは、当該登録後の状態を示す。
【0161】
図22は、ポーリングチェックの例(続き)を示す図である。10時00分09秒に、通知制御部111は、サーバ300からの更新要求に応じて、サーバ300に対してフィルター番号“7”(フィルター7)の登録を行う。この場合、通知制御部111は、更新管理情報126fにおいて、サーバ300のリスナー名“Listener2”に対し、最終更新時刻“10:00:09.000”および更新間隔“3000”(msec)を登録する。更新管理情報126gは、当該登録後の状態を示す。
【0162】
10時00分10秒のタイミングで、BUD制御部112は、ポーリングチェックを実行する。更新管理情報126gによれば、リポジトリ更新フラグ=TRUEである(ステップS41 Yes)。また、最終更新時刻から5分以上経過しているリスナーはない(ステップS42 No)。更に、サーバ200(Listener1)は、最終更新時刻(10:00:04.0000)から更新間隔(2000msec)以上経過している。
【0163】
ただし、サーバ300(Listener2)は、最終更新時刻(10:00:09.000)から更新間隔分(3000msec)が経過していない(ステップS43 Yes)。このため、BUD制御部112は、今回タイミングでのバックアップを延期する。
【0164】
10時00分15秒のタイミングで、BUD制御部112は、ポーリングチェックを実行する。更新管理情報126gによれば、リポジトリ更新フラグ=TRUEである(ステップS41 Yes)。また、最終更新時刻から5分以上経過しているリスナーはない(ステップS42 No)。更に、サーバ200(Listener1)は、最終更新時刻(10:00:04.000)から更新間隔(2000msec)以上経過している。また、サーバ300(Listener2)は、最終更新時刻(10:00:09.000)から更新間隔(3000msec)以上経過している(ステップS43 No)。
【0165】
このため、BUD制御部112は、Indication情報のバックアップを開始する(ステップS44)。そして、BUD制御部112は、バックアップが完了すると、更新管理情報126gにおけるリポジトリ更新フラグをFALSEに設定する(ステップS45)。更新管理情報126hは、当該設定後の状態を示す。
【0166】
こうして、CM100は、サーバ200,300,400による更新が完了したと推定されるタイミングに絞ってバックアップを実行することで、バックアップの頻度を低減できる。
【0167】
ところで、バックアップの頻度が過多または過少であると、好ましくない影響をシステムに及ぼし得る。例えば、サーバ200,300,400それぞれによる更新が行われるたびに、Indication情報のバックアップを取得することも考えられる。しかし、この方法では、バックアップの頻度が増えやすい。このため、バックアップに伴うCM100やBUD103などの負荷により、他の処理(例えば、CM100やサーバ200,300,400などによる本来の業務処理)に影響を及ぼす可能性がある。
【0168】
より具体的には、CM100が更新要求に対する更新およびバックアップの実行後に更新要求に応答していると、バックアップ時間が要因となって更新要求に対する応答遅延が増し、CM100やサーバ200,300,400による次の処理の実行が遅延し得る。あるいは、バックアップデータの書き込み先のBUD103でリソースがロックされ、BUD103にログ書き込みなどを行うサーバ200,300,400上の業務処理で待ちが発生する可能性もある。
【0169】
一方、例えば、スケジュールされた時刻に、Indication情報のバックアップを実行することも考えられる。この方法では、更新要求のたびにバックアップを実行するよりもバックアップの頻度を減らせる。しかし、その反面、現在取得済のバックアップデータが、最新の状態のIndication情報に対応するバックアップデータでない可能性が高まる。この場合、バックアップデータからIndication情報を復旧しようとしたときに、Indication情報を最新の状態に戻せない可能性が高まり、Indication情報を適切に保全できないおそれがある。
【0170】
そこで、CM100は、サーバ200,300,400により発行される一連の更新要求の受信間隔(更新間隔)と最終の受信時刻(最終更新時刻)とを記録する。そして、CM100は、サーバ200,300,400それぞれによる一連の更新要求の発行が完了したと推定されるタイミングで、Indication情報のバックアップを開始する。
【0171】
これにより、バックアップの頻度を減らしながら、Indication情報の最新の状態に対応するバックアップデータを効率的に取得可能になる。CM100は、複数のサーバのうち少なくとも1つのサーバによりIndication情報が更新中であると判断される間は、Indication情報のバックアップを保留する(バックアップを開始しない)。理由は次の通りである。
【0172】
例えば、サーバ300によりIndication情報が更新中であるにも拘わらずバックアップデータを取得してしまうと、サーバ300による、その後の更新が今回のバックアップデータに反映されない。ここで、あるサーバによる一連の更新要求のうち、最初の更新要求の受信時刻と最後の更新要求の受信時刻との時間差は、比較的短いことが多く、その短い間に停電などによりIndication情報が喪失される可能性は比較的低いと考えられる。このため、CM100は、何れかのサーバがIndication情報を更新中である間は、バックアップデータの取得を控える。
【0173】
ただし、複数のサーバによるIndication情報の更新が重なると、各サーバによる更新が完了するまでの時間が長引く。このため、CM100は、Indication情報に対する更新要求を同時に発行していた各サーバによるIndication情報の更新が完了したことを検出すると、直ちにIndication情報のバックアップを開始する。これにより、各サーバの更新に対し、より新しい状態のバックアップデータを比較的早いタイミングで取得できる。その結果、当該バックアップデータを用いて、各サーバにとって最新の状態で、Indicationを復元できる可能性を高められる。すなわち、バックアップの頻度の低減とバックアップによるデータ保全との両立を図れる。
【0174】
また、更新要求によるデータ更新とは非同期に決定されるタイミングでバックアップを実行することで、更新要求に対する応答時間を高速化できる。
なお、通知制御部111は、ユーザによる指示に応じて、リスナー毎のサブスクリプションを出力することもできる。
【0175】
図23は、サブスクリプションの出力例を示す図である。
図23(A)は、サーバ200(Listener1)に対して出力されるサブスクリプション122aを例示している。
図23(B)は、サーバ300(Listener2)に対して出力されるサブスクリプション122bを例示している。
【0176】
例えば、通知制御部111は、サーバ200への通知対象の事象に関するサブスクリプションの出力指示をサーバ200から受信する。すると、通知制御部111は、Listener1に対応するビットマップ125aを参照して、サーバ200への通知対象のフィルター番号を特定する。そして、通知制御部111は、特定したフィルター番号に対応するダミーサブスクリプションを特定する。通知制御部111は、該当のダミーサブスクリプションのキーワードを、サブスクリプション個別情報124に登録された値により置換することで、サブスクリプションを生成する。例えば、通知制御部111は、ダミーサブスクリプション122に対して、サブスクリプション122aを生成し、サーバ200に送信する。
【0177】
通知制御部111は、サーバ300に対しても同様にして、サブスクリプション122bを生成し、サーバ300に送信することができる。
図24は、BUDへの書き込み量の例を示す図である。ここで、一例として、リスナー数を30、フィルター数を50、リスナー情報123およびサブスクリプション個別情報124の1リスナー当たりのデータ量を60バイト(Bytes)とした場合を考える。この場合、BUD制御部112により、1回のバックアップ実行当たりにBUD103に書き込まれるデータ量は、60Bytes×(30×50)=90,000Bytes程度である。なお、フィルター情報121やサブスクリプションビットマップ125のサイズは、リスナー情報123やサブスクリプション個別情報124の合計サイズに比べて小さいので、ここでは無視している。
【0178】
図25は、BUDへの書き込み量の比較例を示す図である。ダミーサブスクリプション122、サブスクリプション個別情報124およびサブスクリプションビットマップ125を用いずに、CM100が、サブスクリプションをリスナー毎に個別に保持する運用も考えられる。この場合、1リスナー当たりのサブスクリプションのデータ量は、例えば、1200Bytes程度に達する。ここで、
図24と同様に、管理対象のリスナー数を30、フィルター数を50とした場合を考える。この場合、全リスナーのサブスクリプションのバックアップデータのサイズは、1200Bytes×(30×50)=1,800,000Bytes程度となる。
【0179】
すなわち、第2の実施の形態のCM100によれば、BUD103に書き込むバックアップデータのサイズを、
図25に示す比較例に比べて、1/20程度に削減できることになる。このように、BUD103に書き込むデータ量を削減することで、BUD103として用いられるSSDの長寿命化を図れる。また、更新要求のたびにバックアップデータをBUD103に書き込むよりも、書き込み回数を減らせるので、この点でもBUD103として用いられるSSDの長寿命化に寄与する。
【0180】
更に、
図25に示す比較例の場合、書き込みデータ量が多く、リポジトリ内に分散して配置された各サブスクリプション(例では合計1500個)をBUD103の連続域に書き込むためのシリアライズ処理や、BUD103への書き込み処理に時間がかかる。これは、バックアップ処理の遅延要因になり得る。
【0181】
一方、第2の実施の形態では、BUD制御部112は、サブスクリプションにおけるリスナー毎の固有情報をバックアップの対象とフィルター情報から生成可能な固定情報(ダミーサブスクリプション)をバックアップの対象から除外する。これにより、BUD103への総書き込み量を抑えることができ、バックアップ処理の高速化も図れる。
【0182】
なお、第1の実施の形態の情報処理は、処理部1bにプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体11に記録できる。
【0183】
例えば、プログラムを記録した記録媒体11を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体11に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やBUD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【0184】
以上の第1,第2の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
(付記1) 複数の上位装置により発行される更新要求に応じて更新されるデータのバックアップを行う制御装置であって、
前記更新要求の受信間隔と最終の受信時刻とを上位装置毎に記憶する記憶部と、
前記受信間隔と前記最終の受信時刻とを上位装置毎に前記記憶部に記録し、所定のタイミングで、前記最終の受信時刻から前記タイミングまでの経過時間と前記受信間隔とを上位装置毎に比較し、上位装置毎の比較結果に応じて前記バックアップを開始する処理部と、
を有する制御装置。
【0185】
(付記2) 前記処理部は、前記複数の上位装置それぞれについて前記受信間隔よりも前記経過時間の方が長い場合に前記バックアップを開始し、少なくとも1つの上位装置について前記受信間隔より前記経過時間の方が長くない場合に前記バックアップの開始を延期する、付記1記載の制御装置。
【0186】
(付記3) 前記処理部は、少なくとも1つの上位装置について前記受信間隔より前記経過時間の方が長くない場合でも、他の上位装置に関する前記経過時間が所定時間以上である場合は前記バックアップを開始する、付記2記載の制御装置。
【0187】
(付記4) 前記データは、前記複数の上位装置それぞれの固有情報と、他の情報から生成可能な固定情報とを含み、
前記処理部は、前記データのうち、前記固有情報を前記バックアップの対象とし、前記固定情報を前記バックアップの対象から除外する、
付記1乃至3の何れか1つに記載の制御装置。
【0188】
(付記5) 前記タイミングは、受信した前記更新要求に応じた前記データの更新とは非同期に決定されるタイミングである、付記1乃至4の何れか1つに記載の制御装置。
(付記6) 前記処理部は、前記バックアップでは、第1の記憶装置に記憶された前記データを基にバックアップデータを生成し、書き込み回数に制限のある記憶素子を備える第2の記憶装置に前記バックアップデータを格納する、付記1乃至5の何れか1つに記載の制御装置。
【0189】
(付記7) 複数の上位装置により発行される更新要求に応じて更新されるデータのバックアップの制御に用いられる制御プログラムであって、
前記更新要求の受信間隔と最終の受信時刻とを上位装置毎に記憶部に記録し、
所定のタイミングで、前記最終の受信時刻から前記タイミングまでの経過時間と前記受信間隔とを上位装置毎に比較し、
上位装置毎の比較結果に応じて前記バックアップを開始する、
処理をコンピュータに実行させる制御プログラム。
【0190】
(付記8) 前記バックアップの開始では、前記複数の上位装置それぞれについて前記受信間隔よりも前記経過時間の方が長い場合に前記バックアップを開始し、少なくとも1つの上位装置について前記受信間隔より前記経過時間の方が長くない場合に前記バックアップの開始を延期する、付記7記載の制御プログラム。
【0191】
(付記9) 前記バックアップの開始では、少なくとも1つの上位装置について前記受信間隔より前記経過時間の方が長くない場合でも、他の上位装置に関する前記経過時間が所定時間以上である場合は前記バックアップを開始する、付記8記載の制御プログラム。
【0192】
(付記10) 前記データは、前記複数の上位装置それぞれの固有情報と、他の情報から生成可能な固定情報とを含み、
前記バックアップでは、前記データのうち、前記固有情報を前記バックアップの対象とし、前記固定情報を前記バックアップの対象から除外する、
付記7乃至9の何れか1つに記載の制御プログラム。
【0193】
(付記11) 前記タイミングは、受信した前記更新要求に応じた前記データの更新とは非同期に決定されるタイミングである、付記7乃至10の何れか1つに記載の制御プログラム。
【0194】
(付記12) 前記バックアップでは、第1の記憶装置に記憶された前記データを基にバックアップデータを生成し、書き込み回数に制限のある記憶素子を備える第2の記憶装置に前記バックアップデータを格納する、付記7乃至11の何れか1つに記載の制御プログラム。