(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-22
(45)【発行日】2022-12-01
(54)【発明の名称】制御方法、制御プログラム、および情報処理装置
(51)【国際特許分類】
G06F 11/07 20060101AFI20221124BHJP
【FI】
G06F11/07 193
G06F11/07 140C
(21)【出願番号】P 2019079876
(22)【出願日】2019-04-19
【審査請求日】2022-01-11
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】吉富 剛
(72)【発明者】
【氏名】大石 惠子
【審査官】金田 孝之
(56)【参考文献】
【文献】特開2012-256227(JP,A)
【文献】特表2013-535745(JP,A)
【文献】特開平9-305440(JP,A)
【文献】荒井大輔 ほか,”Androidアプリ可用率の調査と安定化手法の提案”,電子情報通信学会技術研究報告,社団法人電子情報通信学会,2012年,第111巻, 第469号,pp. 103-108,ISSN 0913-5685
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/07
G06F 11/30-11/34
(57)【特許請求の範囲】
【請求項1】
コンピュータが、
ソフトウェア実行環境において動作する第1プロセスの動作状態を示す第1監視情報と、前記ソフトウェア実行環境において前記第1プロセスを監視する第2プロセスの動作状態を示す第2監視情報とを取得し、
前記第1監視情報および前記第2監視情報に基づき、前記第1プロセスおよび前記第2プロセスそれぞれが異常であるか否かを判定し、
前記判定の結果、前記第1プロセスが異常である場合、前記第2プロセスが異常であるか否かにより、前記ソフトウェア実行環境の再起動を生じさせる情報を出力するか否かを判定し、前記第1プロセスが異常でない場合、前記第2のプロセスが異常であるか否かによらず、前記情報の出力を抑制する、
制御方法。
【請求項2】
前記情報の出力では、複数の前記第1プロセスのうちの少なくとも1つが異常であり、かつ前記第2プロセスが異常である場合、前記情報を出力し、複数の前記第1プロセスのいずれもが異常でない場合または前記第2プロセスが異常でない場合、前記情報の出力を抑制する、
請求項1記載の制御方法。
【請求項3】
前記コンピュータには、前記第1プロセスおよび前記第2プロセスが動作する第1ソフトウェア実行環境と、前記第1ソフトウェア実行環境とは別の第2ソフトウェア実行環境とが構築されており、前記第2ソフトウェア実行環境で動作する第3プロセスが、前記第1監視情報と前記第2監視情報との取得、前記第1プロセスおよび前記第2プロセスそれぞれが異常であるか否かの判定、および前記情報の出力または抑制を行う、
請求項1または2記載の制御方法。
【請求項4】
前記第2プロセスは、前記第1プロセスの監視により前記第1プロセスが異常であると判断した場合、前記第1プロセスを再起動させる、
請求項1ないし3のいずれかに記載の制御方法。
【請求項5】
前記第1監視情報および前記第2監視情報の取得では、前記第1監視情報と前記第2監視情報との一方を取得し、前記第1プロセスまたは前記第2プロセスに異常が検出された後に、未取得の前記第1監視情報または前記第2監視情報を取得する、
請求項1ないし4のいずれかに記載の制御方法。
【請求項6】
コンピュータに、
ソフトウェア実行環境において動作する第1プロセスの動作状態を示す第1監視情報と、前記ソフトウェア実行環境において前記第1プロセスを監視する第2プロセスの動作状態を示す第2監視情報とを取得し、
前記第1監視情報および前記第2監視情報に基づき、前記第1プロセスおよび前記第2プロセスそれぞれが異常であるか否かを判定し、
前記判定の結果、前記第1プロセスが異常である場合、前記第2プロセスが異常であるか否かにより、前記ソフトウェア実行環境の再起動を生じさせる情報を出力するか否かを判定し、前記第1プロセスが異常でない場合、前記第2のプロセスが異常であるか否かによらず、前記情報の出力を抑制する、
処理を実行させる制御プログラム。
【請求項7】
ソフトウェア実行環境において動作する第1プロセスの動作状態を示す第1監視情報と、前記ソフトウェア実行環境において前記第1プロセスを監視する第2プロセスの動作状態を示す第2監視情報とを取得し、前記第1監視情報および前記第2監視情報に基づき、前記第1プロセスおよび前記第2プロセスそれぞれが異常であるか否かを判定し、前記判定の結果、前記第1プロセスが異常である場合、前記第2プロセスが異常であるか否かにより、前記ソフトウェア実行環境の再起動を生じさせる情報を出力するか否かを判定し、前記第1プロセスが異常でない場合、前記第2のプロセスが異常であるか否かによらず、前記情報の出力を抑制する処理部、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、制御方法、制御プログラム、および情報処理装置に関する。
【背景技術】
【0002】
コンピュータにおける仮想化技術の1つにコンテナ型仮想化と呼ばれる技術がある。コンテナ型仮想化では、アプリケーションの起動に用いるライブラリなどの資源を纏めたコンテナが、ソフトウェアの実行環境として定義される。コンピュータは、OS(Operating System)のカーネル上でコンテナを起動し、コンテナを用いてソフトウェアを実行する。コンテナ型仮想化では、仮想マシンを用いた仮想化に用いられるゲストOSが不要であり、仮想マシンを用いた仮想化に比べコンピュータの処理負荷が少なくてすむ。
【0003】
コンテナは、コンテナ基盤によって管理される。コンテナ基盤は、例えばコンテナの起動、および停止を行うことができる。コンテナ基盤は、コンテナの動作状況を監視して、異常があるコンテナを再起動させることもできる。例えばコンテナ基盤は、異常な状態のコンテナを検出するために、コンテナで実行されるプロセスとの定期的なHTTP(HyperText Transfer Protocol)通信による異常な応答の有無の監視を行う。コンテナ基盤は、コンテナの異常を検出すると、そのコンテナを再起動する。これにより、コンテナの異常な状態が解消し、コンテナを用いて実行されているプロセスの正常動作が復旧する。例えばコンテナ内に複数のプロセスが存在する場合、コンテナ基盤は、コンテナ内のinitプロセスと呼ばれるプロセスID(pid)=1のデーモンプロセスの動作を監視し、そのプロセスに異常があれば、コンテナを再起動する。
【0004】
プロセスの再起動に関する技術としては、例えばシステム内で稼動するプロセスの優先度を判断し、プロセス障害復旧の1手段であるプロセスの再起動、プロセスが稼動しているOSの再起動を自動的に行うプロセス障害判定復旧装置が開示されている。仮想化に関する技術としては、例えば高可用性仮想機械環境において稼働するアプリケーションの高可用性を提供するための様々なシステムが提案されている。また複数の仮想サーバの適切な識別及びID情報管理などにより、複数の仮想サーバに関する詳細な監視などを実現することができる技術も提案されている。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2012-256227号公報
【文献】特表2013-535745号公報
【文献】特開2012-208605号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
コンテナ内に複数のプロセスが存在する場合、監視対象のプロセスに異常が発生しても、他のプロセスが正常に動作していれば、コンテナで実行するソフトウェアとしては正常に動作している場合がある。例えばコンテナ基盤が監視対象とするpid=1のデーモンプロセスは、ユーザが使用するソフトウェアに関連する実質的な処理を行っていない。そのため監視対象のプロセスに異常があっても、他のプロセスが正常に動作している限り、コンテナを用いて実行されているソフトウェアの機能は正しく動作する。それにもかかわらず、従来は、監視対象のプロセスに異常があれば、コンテナの再起動によりコンテナ内の全プロセスの再起動が行われ、正常に動作していたソフトウェアの処理が中断されてしまう。その結果、仮想環境で動作するプロセスによる処理の可用性(処理を継続して実行できる能力)が低下してしまう。
【0007】
1つの側面では、本件は、仮想環境で動作するプロセスの不要な再起動を抑止することを目的とする。
【課題を解決するための手段】
【0008】
1つの案では、コンピュータが以下の処理を実行する制御方法が提供される。
当該制御方法では、コンピュータは、ソフトウェア実行環境において動作する第1プロセスの動作状態を示す第1監視情報と、ソフトウェア実行環境において第1プロセスを監視する第2プロセスの動作状態を示す第2監視情報とを取得する。次にコンピュータは、第1監視情報および第2監視情報に基づき、第1プロセスおよび第2プロセスそれぞれが異常であるか否かを判定する。そしてコンピュータは、判定の結果、第1プロセスが異常である場合、第2プロセスが異常であるか否かにより、ソフトウェア実行環境の再起動を生じさせる情報を出力するか否かを判定し、第1プロセスが異常でない場合、第2のプロセスが異常であるか否かによらず、情報の出力を抑制する。
【発明の効果】
【0009】
1態様によれば、仮想環境で動作するプロセスの不要な再起動を抑止することができる。
【図面の簡単な説明】
【0010】
【
図1】第1の実施の形態に係る制御方法の一例を示す図である。
【
図2】第2の実施の形態のシステム構成例を示す図である。
【
図3】サーバのハードウェアの一構成例を示す図である。
【
図7】被監視プロセスレジストリの一例を示す図である。
【
図8】代表プロセス正常動作中の監視処理の一例を示す図である。
【
図9】代表プロセスの状態が異常となった場合の監視処理の一例を示す図である。
【
図10】復旧処理を実施すると判断する場合の一例を示す図である。
【
図11】代表プロセスの処理手順の一例を示すフローチャートである。
【
図12】被監視プロセスの処理手順の一例を示すフローチャートである。
【
図13】代理監視プロセスの正常通知受信処理の手順の一例を示すフローチャートである。
【
図14】代理監視プロセスの復旧判断処理の手順の一例を示すフローチャートである。
【
図15】第3の実施の形態における被監視プロセスの処理手順の一例を示すフローチャートである。
【
図16】第3の実施の形態における代理監視プロセスの復旧判断処理の手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る制御方法の一例を示す図である。
図1には、制御方法を情報処理装置10により実施した場合の例を示している。情報処理装置10は、制御方法の処理手順が記述された制御プログラムを実行することにより、制御方法を実施することができる。
【0012】
情報処理装置10は、制御方法を実現するために、記憶部11と処理部12とを有する。記憶部11は、例えば情報処理装置10が有するメモリ、またはストレージ装置である。処理部12は、例えば情報処理装置10が有するプロセッサ、または演算回路である。
【0013】
記憶部11は、処理部12によるソフトウェアの実行環境の管理に用いる情報を記憶する。
処理部12は、OSのカーネル上で仮想化技術によって隔離されたソフトウェア実行環境を構築するソフトウェア実行環境構築部1を有する。構築されるソフトウェア実行環境には、仮想マシンにおけるゲストOSのような、基礎となるカーネル以外のOSは含まれない。ソフトウェア実行環境は、例えばコンテナ型仮想化技術によって生成されるコンテナである。ソフトウェア実行環境構築部1は、例えば第1ソフトウェア実行環境2と第2ソフトウェア実行環境3とを構築する。
【0014】
第1ソフトウェア実行環境2は、1または複数の第1プロセス2a,2bと第2プロセス2cとを動作させるためのソフトウェア実行環境である。第1プロセス2a,2bは、例えばアプリケーションソフトウェアなどのソフトウェアを実行するプロセスである。第2プロセス2cは、第1プロセス2a,2bの動作状態を監視するプロセスである。
【0015】
第2ソフトウェア実行環境3は、第1ソフトウェア実行環境2で動作している第1プロセス2a,2bおよび第2プロセス2cの動作状態を監視する第3プロセス3aを動作させるための実行環境である。例えば記憶部11に、第3プロセス3aで監視する第1プロセスの識別子を格納しておき、第3プロセス3aは、記憶部11を参照して、監視する第1プロセス2a,2bを認識する。
【0016】
処理部12は、第3プロセス3aを用いて以下の処理を実行する。
処理部12は、まず、第1プロセス2a,2bの動作状態を示す第1監視情報と、第2プロセス2cの動作状態を示す第2監視情報とを、第1プロセス2a,2bおよび第2プロセス2cから取得する(ステップS1)。次に処理部12は、第1監視情報および第2監視情報に基づき、第1プロセス2a,2bおよび第2プロセス2cそれぞれが異常であるか否かを判定する(ステップS2)。そして処理部12は、判定の結果に基づいて、第1プロセス2a,2bおよび第2プロセス2cの再起動を生じさせる情報(再起動情報)を出力、またはその情報の出力の抑制を行う(ステップS3)。例えば処理部12は、第1プロセス2a,2bが異常である場合、第2プロセス2cが異常であるか否かにより、再起動情報を出力するか否かを判定する。また処理部12は、第1プロセス2a,2bが異常でない場合、第2のプロセスが異常であるか否かによらず、再起動情報の出力を抑制する。
【0017】
なお複数の第1プロセス2a,2bがある場合、処理部12は、第1プロセス2a,2bのうちの少なくとも1つが異常であり、かつ第2プロセス2cが異常である場合、再起動情報を出力する。また処理部12は、複数の第1プロセス2a,2bのいずれもが異常でない場合または第2プロセス2cが異常でない場合、再起動情報の出力を抑制する。
【0018】
再起動情報は、例えば第1ソフトウェア実行環境2の異常を示す情報である。例えば再起動情報が出力されると、ソフトウェア実行環境構築部1が、第1ソフトウェア実行環境2を再起動する(ステップS4)。第1ソフトウェア実行環境2を再起動する場合、ソフトウェア実行環境構築部1は、第1ソフトウェア実行環境2で動作している第1プロセス2a,2bおよび第2プロセス2cを一旦終了させる。そしてソフトウェア実行環境構築部1は、第1ソフトウェア実行環境2の再起動が完了後、第1プロセス2a,2bおよび第2プロセス2cの実行を再開させる。すなわちソフトウェア実行環境構築部1により、第1プロセス2a,2bおよび第2プロセス2cの再起動が行われる。
【0019】
このような情報処理装置10によれば、第1プロセス2a,2bを監視している第2プロセス2cに異常が発生しても、第1プロセス2a,2bが正常に動作している限り、第1プロセス2a,2bおよび第2プロセス2cの再起動は行われない。その結果、第1プロセス2a,2bの不要な再起動が行われず、第1プロセス2a,2bによって実行されている処理の可用性が向上する。すなわち何らかの異常が発生したときに、第1ソフトウェア実行環境2の再起動によって第1プロセス2a,2bが実行している処理が停止する可能性が低減される。
【0020】
例えばユーザへのサービス提供のためのソフトウェアは第1プロセス2a,2bによって実行される。第1プロセス2a,2bが正常に実行されていれば、第2プロセス2cに異常が発生しても、ユーザへのサービス提供は正常に行われる。そのため第2プロセス2cに異常が発生しても、第1プロセス2a,2bを停止してまで、第1ソフトウェア実行環境2を再起動しなくてもよい場合が多い。例えば第1ソフトウェア実行環境2を定期的に再起動するようにスケジュールが組まれている場合がある。このような場合、第2プロセス2cに異常が発生しても、第1ソフトウェア実行環境2の次の再起動時期まで第1プロセス2a,2bが正常に動作し続ければ、第1プロセス2a,2bで実行するソフトウェアによるサービス提供への影響はない。したがって、すべての第1プロセス2a,2bが正常に動作している間は再起動情報の出力を抑止することで、第1プロセス2a,2bによって実行されている処理の可用性が向上する。
【0021】
また第2プロセス2cが正常に動作しており、第1プロセス2a,2bのうちの少なくとも1つに異常が発生した場合、第1ソフトウェア実行環境2内で異常に対する対処が可能である。例えば第2プロセス2cは、第1プロセス2a,2bの監視により第1プロセス2a,2bが異常であると判断した場合、第1プロセス2a,2bを再起動させることができる。このように第2プロセス2cが正常に動作していれば、第1プロセス2a,2bの異常が発生しても、異常状態が自動で解消する可能性があり、第1ソフトウェア実行環境2の再起動までせずにすむ場合が多い。したがって、第2プロセス2cが正常に動作している間は再起動情報の出力を抑止することで、第1プロセス2a,2bによって実行されている処理の可用性が向上する。
【0022】
なお、処理部12は、異常が未検出の間は、第1監視情報と第2監視情報との一方のみを取得し、異常検出後に他方(未取得の監視情報)を取得してもよい。例えば処理部12は、異常検出前は、第1プロセス2a,2bそれぞれから第1監視情報を取得する。処理部12は、第1プロセス2a,2bのいずれかの異常を検出すると、第2プロセス2cから第2監視情報を取得する。また処理部12は、異常検出前は、第2プロセス2cから第2監視情報を取得する。そして処理部12は、第2プロセス2cの異常を検出すると、第1プロセス2a,2bから第1監視情報を取得する。これにより、第3プロセス3aが第1監視情報または第2監視情報を取得するための通信量を削減することができる。
【0023】
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、オンプレミス(企業などの使用者が有する設備による情報システムの運用形態)で動作していたソフトウェアを、クライアントコンピューティング上のコンテナに移行した場合における、システムの可用性を向上させるものである。
【0024】
コンテナ型仮想化では、1つのコンテナでは1つのプロセスを実行することが推奨されているものの、1つのコンテナで複数のプロセスを実行することも可能である。
ここで、1つのコンテナに1つのプロセスのみが実行されているのであれば、コンテナ基盤によるコンテナの監視に問題は生じない。すなわち、コンテナで実行されるプロセスが1つの場合、コンテナで実行されているプロセスが異常終了するとコンテナも異常終了する。またコンテナで実行されているプロセスにスローダウンなどの異常な状態が発生すると、コンテナ基盤によるコンテナ内のプロセスのヘルスチェックに異常な応答が返される。コンテナ基盤は、ヘルスチェックで異常を検出するとコンテナを再起動する。
【0025】
コンテナの再起動は、コンテナで実行中のプロセスをすべて終了させ、改めてプロセスの生成、および生成したプロセスによるソフトウェアの実行を開始させる処理である。コンテナ基盤がコンテナを再起動することで、プロセスの異常な状態が解消される。
【0026】
それに対して、1つのコンテナにおいて、複数のプロセスが実行される場合、コンテナ基盤は、pid=1のプロセスのみを監視する。そのプロセスの状態が正常なとき、コンテナ基盤は、それ以外のプロセスが異常終了しても、コンテナの再起動を行わない。ここで、コンテナ内にpidのプロセス以外の代表プロセスを設け、コンテナ基盤が代表プロセスを監視することが考えられる。
【0027】
代表プロセスを用いる場合、代表プロセスが、コンテナで実行されているプロセスのいずれかに異常を検出したときに、コンテナ基盤からのヘルスチェックに対して異常を通知するようにすると、不要なコンテナの再起動が発生する。このようなコンテナの再起動は、システムの可用性を低下させる。
【0028】
すなわち、コンテナ内でユーザへのサービスを提供するソフトウェアを実行するのは、代表プロセス以外のプロセスである。代表プロセス以外のプロセスが正常に動作していれば、コンテナ内のプロセスによるユーザへのサービス提供処理は正常に実行可能である。このような場合にまでコンテナを再起動すると、コンテナを用いたサービスの稼働率が低下する。すなわち、該当サービスの可用性が低下する。
【0029】
このように、コンテナ内で複数のプロセスが実行されている場合、コンテナ基盤からのヘルスチェックのみでは、コンテナ内の異常に対して適切に対応することができない。しかも、オンプレミスで実行している既存のソフトウェアをコンテナ基盤に移行する場合、元のソフトウェアを修正せずにコンテナで動作させることが望まれる。そのため既存のソフトウェアのコンテナ基盤への移行では、1つのコンテナで複数のプロセスを起動する構成のソフトウェアとなる場合が多い。したがって、オンプレミスで実行していたソフトウェアのコンテナ基盤への移行後のシステムの可用性低下を抑止するためにも、1つのコンテナで複数のプロセスが実行される場合における無駄なコンテナの再起動を抑止することが重要となる。
【0030】
図2は、第2の実施の形態のシステム構成例を示す図である。ネットワーク20には、サーバ100と端末装置31とが接続されている。サーバ100は、コンテナ型仮想化技術によって複数のコンテナを構築し、コンテナを用いてソフトウェアを実行することにより、端末装置31に対するサービスを提供する。
【0031】
図3は、サーバのハードウェアの一構成例を示す図である。サーバは、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101がプログラムを実行することで実現する機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
【0032】
メモリ102は、サーバ100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOSのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に利用する各種データが格納される。メモリ102としては、例えばRAM(Random Access Memory)などの揮発性の半導体記憶装置が使用される。
【0033】
バス109に接続されている周辺機器としては、ストレージ装置103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
【0034】
ストレージ装置103は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置103は、コンピュータの補助記憶装置として使用される。ストレージ装置103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置103としては、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)を使用することができる。
【0035】
グラフィック処理装置104には、モニタ21が接続されている。グラフィック処理装置104は、プロセッサ101からの命令に従って、画像をモニタ21の画面に表示させる。モニタ21としては、有機EL(Electro Luminescence)を用いた表示装置や液晶表示装置などがある。
【0036】
入力インタフェース105には、キーボード22とマウス23とが接続されている。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をプロセッサ101に送信する。なお、マウス23は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【0037】
光学ドライブ装置106は、レーザ光などを利用して、光ディスク24に記録されたデータの読み取りを行う。光ディスク24は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク24には、DVD(Digital Versatile Disc)、DVD-RAM、CD-ROM(Compact Disc Read Only Memory)、CD-R(Recordable)/RW(ReWritable)などがある。
【0038】
機器接続インタフェース107は、サーバ100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置25やメモリリーダライタ26を接続することができる。メモリ装置25は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ26は、メモリカード27へのデータの書き込み、またはメモリカード27からのデータの読み出しを行う装置である。メモリカード27は、カード型の記録媒体である。
【0039】
ネットワークインタフェース108は、ネットワーク20に接続されている。ネットワークインタフェース108は、ネットワーク20を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【0040】
サーバ100は、以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。なお、第1の実施の形態に示した情報処理装置10も、
図3に示したサーバ100と同様のハードウェアにより実現することができる。
【0041】
サーバ100は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態の処理機能を実現する。サーバ100に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、サーバ100に実行させるプログラムをストレージ装置103に格納しておくことができる。プロセッサ101は、ストレージ装置103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。またサーバ100に実行させるプログラムを、光ディスク24、メモリ装置25、メモリカード27などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、ストレージ装置103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【0042】
図4は、サーバの機能を示すブロック図である。サーバ100のハードウェア110上で、コンテナを実行するためのOS120が実装されている。コンテナ型仮想化におけるOS120は、システムのカーネルのみを有する。OS120上で、コンテナ基盤130、代理監視コンテナ140、および監視対象となるコンテナ150が実行されている。
【0043】
コンテナ基盤130は、コンテナの起動や停止を制御する。またコンテナ基盤130は、代理監視コンテナ140と監視対象となるコンテナ150とを監視し、異常を検出したときに、代理監視コンテナ140と監視対象となるコンテナ150とを再起動する。例えばコンテナ基盤130は、代理監視コンテナ140とコンテナ150を1つのグループとして管理する。そしてコンテナ基盤130は、代理監視コンテナ140から異常発生の通知を受け取ると、同じグループとなっている代理監視コンテナ140とコンテナ150との再起動を行う。なおコンテナ基盤130は、
図1に示した第1の実施の形態のソフトウェア実行環境構築部1の一例である。
【0044】
代理監視コンテナ140は、コンテナ150内のプロセスを監視する。代理監視コンテナ140は、コンテナ150内のプロセスの異常を検知したとき、その異常の内容に応じてコンテナ150を再起動させるか否かを判断する。代理監視コンテナ140は、コンテナ150を再起動させると判断した場合、コンテナ150を再起動させるための処理を行う。例えば代理監視コンテナ140は、コンテナ基盤130に異常の発生を通知することで、コンテナ基盤130にコンテナ150を再起動させることができる。なお代理監視コンテナ140は、
図1に示した第1の実施の形態の第2ソフトウェア実行環境3の一例である。
【0045】
コンテナ150は、ユーザが利用するアプリケーションソフトウェアなどのソフトウェアを実行するための環境である。コンテナ150には、OSにおけるカーネル以外の機能が含まれる。例えばファイルシステム、コマンドや関数の実行機能がコンテナ150に含まれる。コンテナ150は、例えばオンプレミスで実行されていたソフトウェアを変更せずに、そのまま実行することができる。コンテナ150で実行するソフトウェアが、オンプレミス上で複数のプロセスで処理を実行するソフトウェアであった場合、コンテナ150は、複数のプロセスを生成してそのソフトウェアを実行する。なおコンテナ150は、
図1に示した第1の実施の形態の第1ソフトウェア実行環境2の一例である。
【0046】
図4に示したOS120、コンテナ基盤130、代理監視コンテナ140、およびコンテナ150は、例えば該当要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【0047】
上記のように、コンテナ基盤130が代理監視コンテナ140とコンテナ150を監視し、代理監視コンテナ140内のプロセスがコンテナ150内のプロセスを監視する。
図5は、コンテナの監視状況の一例を示す図である。コンテナ基盤130は、代理監視コンテナ140と監視対象のコンテナ150とを1つのグループ40として管理している。コンテナ基盤130は、代理監視コンテナ140で実行されている代理監視プロセス141の動作状況を監視することで、代理監視コンテナ140の異常の有無を監視する。
【0048】
例えばコンテナ基盤130は、代理監視プロセス141のヘルスチェック(Healthcheck)を行い、代理監視プロセス141の異常の有無を確認する。ヘルスチェックにおいて、コンテナ基盤130は、代理監視コンテナ140に対してHTTPステータスコードの問い合わせを行い、問い合わせに対する応答を取得する。コンテナ基盤130は、応答が受信できない場合や、異常を示す値が応答された場合に、代理監視コンテナ140が異常であると判断する。
【0049】
コンテナ基盤130は、代理監視コンテナ140またはコンテナ150で異常を検知した場合、代理監視コンテナ140とコンテナ150との両方を再起動する。
代理監視コンテナ140内の代理監視プロセス141はコンテナ150内のプロセスを監視する。例えばコンテナ150では、pid=1のプロセス151以外に、代表プロセス152と被監視プロセス153,154とが実行されている。代理監視コンテナ140は、代表プロセス152のヘルスチェックを行うことで、代表プロセス152の異常の有無を監視する。
【0050】
代理監視プロセス141は、ヘルスチェックによる代表プロセス152の監視の結果と、被監視プロセス153,154からの通知の有無の監視(通知監視)の結果とに基づいて、コンテナ150の復旧処理の実施の有無を判断する。ヘルスチェックの結果と通知監視の結果との組合せは、
図5に示すように4つのパターンが考えられる。1つ目は、ヘルスチェックと通知監視とがいずれも正常となるパターン(パターンA)である。この場合、代理監視プロセス141は、復旧処理を実施しないと判断する。2つ目は、ヘルスチェックは正常であるが、通知監視で異常が検知されるパターン(パターンB)である。この場合、代理監視プロセス141は、復旧処理を実施しないと判断する。3つ目は、ヘルスチェックで異常が検知されるが、通知監視は正常であるパターン(パターンC)である。この場合、代理監視プロセス141は、復旧処理を実施しないと判断する。4つ目は、ヘルスチェックと通常監視との情報で異常が検知されるパターン(パターンD)である。この場合、代理監視プロセス141は、復旧処理を実施すると判断する。
【0051】
なお代理監視プロセス141は、代表プロセス152のヘルスチェックと被監視プロセス153,154からの通知監視との情報を常時行っていてもよいが、一方で異常を検出した場合に、他方の監視を開始してもよい。例えば代理監視プロセス141は、代表プロセス152のヘルスチェックで異常を検知した場合、被監視プロセス153,154からの通知監視を開始する。代理監視プロセス141は、被監視プロセス153,154の通知監視において正常通知が定期的に受信できていることを監視する。代理監視プロセス141は、代表プロセス152に異常があり、かつ被監視プロセス153,154のいずれか1つについて異常を検知した場合、復旧処理を実施すると判断し、コンテナ基盤130に対して異常を通知する。
【0052】
以下、
図6~
図10を参照し、代理監視コンテナ140およびコンテナ150での監視機能の起動から復旧処理実施までの処理について具体的に説明する。
図6は、初期化処理の一例を示す図である。代理監視コンテナ140は、まず代理監視プロセス141を起動する(ステップS11)。またコンテナ150は、pid=1のプロセス151を起動する(ステップS12)。次にコンテナ150は、代表プロセス152を起動する(ステップS13)。起動された代表プロセス152は、被監視プロセス153,154を起動する(ステップS14,ステップS15)。
【0053】
さらに代表プロセス152は、起動完了通知を代理監視プロセス141に送信する(ステップS16)。起動完了通知を受信した代理監視プロセス141は、代表プロセス152のヘルスチェックを開始する(ステップS17)。
【0054】
起動された被監視プロセス153,154は、起動完了通知を代理監視プロセス141に送信する(ステップS18、ステップS19)。代理監視プロセス141は、起動完了通知に基づいて被監視プロセス153,154の存在を認識し、被監視プロセスレジストリ142に被監視プロセス153,154の情報を格納する。
【0055】
図7は、被監視プロセスレジストリの一例を示す図である。被監視プロセスレジストリ142には、被監視プロセスの識別子(被監視プロセスID)に対応付けて、該当被監視プロセスから正常通知を受信した最新の時刻(最新正常通知時刻)が設定されている。代理監視プロセス141は、被監視プロセスレジストリ142を参照することで、正常通知が途絶えた被監視プロセスの有無を判断することができる。
【0056】
初期化が完了すると、代理監視プロセス141は、代表プロセス152が正常に動作している限り、代表プロセス152のみを監視する。
図8は、代表プロセス正常動作中の監視処理の一例を示す図である。代理監視プロセス141は、代表プロセス152にHTTPステータスコードの問い合わせを、定期的に送信する(ステップS21)。代表プロセス152は、自身が正常に動作していれば、正常を示すステータスコード(例えば「200」)を、代理監視プロセス141に応答する(ステップS22)。また代表プロセス152は、被監視プロセス153,154それぞれを定期的に監視する(ステップS23、ステップS24)。例えば代表プロセス152は、被監視プロセス153,154それぞれに対して正常確認要求を送信し、正常の応答を受信できれば被監視プロセス153,154が正常であると判断する。
【0057】
被監視プロセス153,154は、代表プロセス152からの正常確認が定期的に実施されているか否かにより、代表プロセス152が正常に動作しているか否かを確認している。そのため、代表プロセス152に異常が発生すると、代理監視プロセス141と被監視プロセス153,154とが、それぞれ個別に異常を検知する。
【0058】
図9は、代表プロセスの状態が異常となった場合の監視処理の一例を示す図である。代表プロセス152に異常が発生した場合、例えば代理監視プロセス141が代表プロセス152にHTTPステータスコードの問い合わせを行っても、応答が返されない(ステップS31)。代理監視プロセス141は、応答を受信できないことにより、代表プロセス152の異常を検知する(ステップS32)。なお、代表プロセス152が、正常のステータスコード「200」以外のステータスコードを応答する場合もある。この場合、代理監視プロセス141は、ステータスコードが正常以外であることにより、代表プロセス152の異常を検知する。
【0059】
また、被監視プロセス153,154は、代表プロセス152からの定期的な監視のアクセスが途絶えたことにより、代表プロセス152の異常を検知する。例えば被監視プロセス153,154は、代表プロセス152からの正常確認要求を所定時間以上受信していない場合に、代表プロセス152に異常が発生したと判断する。被監視プロセス153,154は、代表プロセス152の異常を検知すると、その後、代理監視プロセス141に対して正常通知を定期的に送信する(ステップS33、ステップS34)。
【0060】
代理監視プロセス141は、代表プロセス152の異常を検知すると、被監視プロセス153,154からの正常通知の監視を開始する(ステップS35)。例えば代理監視プロセス141は、被監視プロセス153から正常通知を受信すると、受信時刻と、被監視プロセス153の識別子に対応付けて被監視プロセスレジストリ142に設定されている最新正常通知時刻とを比較する。代理監視プロセス141は、正常通知の受信時刻と最新正常通知時刻との差が、所定値以下であれば、被監視プロセス153が正常であると判断し、被監視プロセスレジストリ142内の最新正常通知時刻を更新する。
【0061】
代理監視プロセス141は、代表プロセス152の異常を検知しても、起動されている被監視プロセス153,154それぞれからの定期的な正常通知の受信が確認できている間は、復旧処理の実施は不要と判断する。他方、代理監視プロセス141は、起動されている被監視プロセス153,154のうちの少なくとも1つについて、正常通知が受信できなくなった場合、復旧処理を実施すると判断する。
【0062】
図10は、復旧処理を実施すると判断する場合の一例を示す図である。
図10の例では、被監視プロセス153は正常に動作しており、定期的な正常通知を行っている(ステップS41)。他方、被監視プロセス154に異常が発生し、被監視プロセス154は正常通知を行うことができない。代理監視プロセス141は、被監視プロセスレジストリ142を参照し、被監視プロセス154の最新正常通知時刻から所定時間以上、被監視プロセス154から正常通知を受信できない場合、被監視プロセス154に異常が発生したと判断する(ステップS42)。
【0063】
代理監視プロセス141は、被監視プロセス154の異常を検知すると、コンテナ基盤130への異常通知を行う(ステップS43)。例えばコンテナ基盤130は、代理監視プロセス141に対して、HTTPステータスコードの問い合わせを行う(ステップS44)。代理監視プロセス141は、問い合わせに対して、異常を表すステータスコード(例えば「500」)を応答する(ステップS45)。なお代理監視プロセス141は、HTTPステータスコードの問い合わせに対して何も応答しないことで、コンテナ基盤130に異常を通知することもできる。
【0064】
コンテナ基盤130は、代理監視プロセス141からの異常通知を受けて、例えば代理監視コンテナ140、および代理監視コンテナ140と同じグループに属しているコンテナ150の再起動処理を行う(ステップS46、ステップS47)。
【0065】
このようにして代表プロセス152と少なくとも一部の被監視プロセス154とに異常が発生した場合に、コンテナ150が再起動される。換言すると、代表プロセス152に異常が発生しても、被監視プロセス153,154が正常に動作している間は、コンテナ150の再起動は行われない。これにより、被監視プロセス153,154による処理が無駄に停止してしまうことを抑止できる。
【0066】
以下、代表プロセス152、被監視プロセス153,154、および代理監視プロセス141それぞれの処理について、フローチャートを参照して詳細に説明する。
図11は、代表プロセスの処理手順の一例を示すフローチャートである。以下、
図11に示す処理をステップ番号に沿って説明する。
【0067】
[ステップS101]代表プロセス152は、起動されると、コンテナ150で実行するソフトウェアに定義済みの被監視プロセス153,154ごとにステップS102の処理を実行する。
【0068】
[ステップS102]代表プロセス152は、被監視プロセス153,154を起動する。
[ステップS103]代表プロセス152は、定義済みの被監視プロセス153,154の起動が完了すると、処理をステップS104に進める。
【0069】
[ステップS104]代表プロセス152は、代理監視プロセス141へ代表プロセス152の起動完了を通知する。
[ステップS105]代表プロセス152は、コンテナ150が停止するまで、ステップS106~S109の処理を無限にループする。
【0070】
[ステップS106]代表プロセス152は、定義済みの被監視プロセス153,154ごとにステップS107~S108の処理を実行する。
[ステップS107]代表プロセス152は、被監視プロセス153,154の状態が正常か異常かを判断する。例えば代表プロセス152は、被監視プロセス153,154に対して正常確認要求を送信し、正常の応答があった場合、正常であると判断する。また代表プロセス152は、正常確認要求に応答がない場合、異常であると判断する。代表プロセス152は、被監視プロセスの状態が正常であれば、処理をステップS109に進める。また代表プロセス152は、被監視プロセスの状態が異常であれば、処理をステップS108に進める。
【0071】
[ステップS108]代表プロセス152は、異常が発生した被監視プロセスを再起動する。
[ステップS109]代表プロセス152は、定義済みのすべての被監視プロセスについてステップS107~S108の処理が終了したら、処理をステップS110に進める。
【0072】
[ステップS110]代表プロセス152は、コンテナが停止する場合、処理を終了する。
このようにして、代表プロセス152は、被監視プロセス153,154の状態を監視し、異常を検知した場合には、異常となった被監視プロセスを再起動することができる。これにより、代表プロセス152が正常に動作している間は、被監視プロセス153,154のいずれかに異常が発生しても、コンテナ150内の処理で正常な状態に復旧させることができる。
【0073】
次に被監視プロセス153,154が実行する処理について説明する。
図12は、被監視プロセスの処理手順の一例を示すフローチャートである。以下、被監視プロセス153が実行する場合を想定し、
図12に示す処理をステップ番号に沿って説明する。
【0074】
[ステップS121]被監視プロセス153は、代理監視プロセスへ起動完了通知を送信する。起動完了通知には、被監視プロセス153の識別子(被監視プロセスID)が含まれる。
【0075】
[ステップS122]被監視プロセス153は、被監視プロセスが停止するまで、ステップS123~S124の処理を無限ループする。
[ステップS123]被監視プロセス153は、代表プロセスによる最後の正常確認時刻からの経過時間が「X秒」(Xは0より大きい実数)以上か否かを判断する。被監視プロセス153は、正常確認時刻からの経過時間が「X秒」以上であれば処理をステップS124に進める。また被監視プロセス153は、正常確認時刻からの経過時間が「X秒」未満であれば処理をステップS125に進める。
【0076】
[ステップS124]被監視プロセス153は、代理監視プロセス141に正常通知を送信する。正常通知には、被監視プロセス153の識別子(被監視プロセスID)が含まれる。
【0077】
[ステップS125]被監視プロセス153は、代表プロセス152からの再起動またはコンテナ150の再起動などにより被監視プロセス153が停止する場合、処理を終了する。
【0078】
このように被監視プロセス153は、代表プロセス152からの正常確認がX秒以上途絶えた場合、代表プロセス152に異常が発生したものと判断し、代理監視プロセス141への正常通知の送信を開始する。
【0079】
なお
図12の処理を被監視プロセス153が実行するものとして説明したが、他の被監視プロセス154も被監視プロセス153と同様の処理を実行する。また被監視プロセス153,154は、
図12に示した処理以外に、例えば端末装置31からの要求に応じたサービス提供処理も実行する。
【0080】
次に代理監視プロセス141が実行する処理について説明する。代理監視プロセス141が実行する処理には、正常通知受信処理と復旧判断処理とがある。
図13は、代理監視プロセスの正常通知受信処理の手順の一例を示すフローチャートである。以下、
図13に示す処理をステップ番号に沿って説明する。
【0081】
[ステップS131]代理監視プロセス141は、代理監視プロセス141が停止するまで、ステップS132~S136の処理を無限ループする。
[ステップS132]代理監視プロセス141は、被監視プロセス153,154の起動完了通知を受信したか否かを判断する。代理監視プロセス141は、起動完了通知を受信した場合、処理をステップS133に進める。また代理監視プロセス141は、起動完了通知を受信していなければ、処理をステップS135に進める。
【0082】
[ステップS133]代理監視プロセス141は、起動完了通知の送信元の被監視プロセスの被監視プロセスIDが、被監視プロセスレジストリ142に登録済みか否かを判断する。代理監視プロセス141は、被監視プロセスIDが登録済みであれば、処理をステップS135に進める。また代理監視プロセス141は、被監視プロセスIDが未登録であれば、処理をステップS134に進める。
【0083】
[ステップS134]代理監視プロセス141は、被監視プロセスレジストリ142に、起動完了通知の送信元の被監視プロセスの被監視プロセスIDを、被監視プロセスレジストリ142に追加する。
【0084】
[ステップS135]代理監視プロセス141は、いずれかの被監視プロセスの正常通知を受信したか否かを判断する。代理監視プロセス141は、正常通知を受信した場合、処理をステップS136に進める。また代理監視プロセス141は、正常通知を受信していなければ、処理をステップS137に進める。
【0085】
[ステップS136]代理監視プロセス141は、被監視プロセスレジストリ142における、正常通知の送信元の被監視プロセスの被監視プロセスIDに対応する最新正常通知時刻に、現在の時刻を設定する。
【0086】
[ステップS137]代理監視プロセス141は、コンテナ基盤130による代理監視コンテナ140の再起動処理などにより代理監視プロセス141が停止する場合、正常通知受信処理を終了する。
【0087】
このようにして、代理監視プロセス141は、被監視プロセスレジストリ142に設定されている、被監視プロセス153,154それぞれの最新正常通知時刻を更新することができる。そして代理監視プロセス141は、被監視プロセスレジストリ142を参照して、コンテナ150の復旧処理を行うか否かを判断する。
【0088】
図14は、代理監視プロセスの復旧判断処理の手順の一例を示すフローチャートである。以下、
図14に示す処理をステップ番号に沿って説明する。
[ステップS141]代理監視プロセス141は、代表プロセス152のヘルスチェックを行い、代表プロセス152が正常か否かを判断する。代理監視プロセス141は、代表プロセスが正常であれば、ステップS141の処理を繰り返す。また代理監視プロセス141は、代表プロセス152の異常を検出した場合、処理をステップS142に進める。
【0089】
[ステップS142]代理監視プロセス141は、コンテナ150で実行するソフトウェアに定義済みの被監視プロセス153,154ごとにステップS143の処理を実行する。
【0090】
[ステップS143]代理監視プロセス141は、処理対象の被監視プロセスの最新正常通知時刻からの経過時間を算出する。例えば代理監視プロセス141は、被監視プロセスレジストリ142を参照し、処理対象の被監視プロセスの被監視プロセスIDに対応付けて登録された最新正常通知時刻と現在時刻との差を計算し、経過時間とする。
【0091】
[ステップS144]代理監視プロセス141は、定義済みのすべての被監視プロセス153,154について経過時間の算出が終了したら、処理をステップS145に進める。
【0092】
[ステップS145]代理監視プロセス141は、経過時間が「Y秒」(Yは0より大きな実数)以上となった被監視プロセスが少なくとも1つあるか否かを判断する。代理監視プロセス141は、該当する被監視プロセスがある場合、その被監視プロセスに異常が発生したと判断し、処理をステップS146に進める。また代理監視プロセス141は、該当する被監視プロセスがなければ、すべての被監視プロセス153,154が正常であると判断し、処理をステップS141に進める。
【0093】
[ステップS146]代理監視プロセス141は、コンテナ150の復旧処理を行う。例えば代理監視プロセス141は、コンテナ基盤130に対して異常の発生を通知する。するとコンテナ基盤130が、代理監視コンテナ140とコンテナ150とを再起動する。これにより、代理監視コンテナ140とコンテナ150とが初期化され、正常な状態から処理が開始される。
【0094】
なお
図14に示す処理のうち、ステップS142~S145の処理が、被監視プロセス153,154からの正常通知を監視する通知監視処理である。
このように代理監視プロセス141は、ヘルスチェックが正常であれば、異常な被監視プロセスは代表プロセス152によって復旧されるため、コンテナ基盤130によるコンテナ150の再起動は不要と判断する(
図5に示す「パターンA」と「パターンB」)。
図14の例では、被監視プロセス153,154からの通知監視の前にヘルスチェックを行っているため、代理監視プロセス141は、
図5に示す「パターンA」と「パターンB」とを区別していない。
【0095】
また代理監視プロセス141は、ヘルスチェックが異常であっても、被監視プロセス153,154からの正常通知の定期受信に異常がなければ、すべての被監視プロセス153,154は正常であるため、コンテナ150の再起動は不要と判断する(
図5に示す「パターンC」)。これにより、コンテナ150を用いたサービスなどの実質的な処理が正常に動作しているにもかかわらず、コンテナ150が再起動されることが抑止される。その結果、システムの安定性が向上する。
【0096】
さらにヘルスチェックと、被監視プロセス153,154の少なくとも一方からの正常通知とに異常であれば、代表プロセス152による異常な被監視プロセスの復旧は期待できない。この場合、代理監視プロセス141は、復旧処理(コンテナ基盤130によるコンテナ150の再起動)を行うと判断する(
図5に示す「パターンD」)。これにより、被監視プロセスによるサービスの提供に異常が発生すると、自動でコンテナ150の再起動が行われ、正常状態に復旧される。これにより、サービスの異常状態の長期化が抑止され、運用効率が向上する。
【0097】
なおサーバ100では、被監視プロセス153,154の動作の監視機能を、代表プロセス152と代理監視プロセス141との両方が有している。このように代表プロセス152と代理監視プロセス141とのそれぞれが被監視プロセス153,154を監視できるようにしたのは、代表プロセス152と代理監視プロセス141とで実施できる復旧処理が異なるためである。
【0098】
すなわち代表プロセス152は、被監視プロセス153,154と同じコンテナ150内に存在するため、被監視プロセス153,154のいずれかに異常が発生すれば、異常な被監視プロセスのみを再起動させることができる。それに対して、代理監視プロセス141は、被監視プロセス153,154とは別の代理監視コンテナ140内に存在する。代理監視コンテナ140とコンテナ150とは、HTTPなどによりプロセス間の通信は可能であるものの、それぞれは隔離された環境である。そのため代理監視プロセス141は、被監視プロセス153,154のいずれかに異常が発生しても、異常な被監視プロセスのみを再起動させることはできない。
【0099】
また代理監視プロセス141は、コンテナ150内の代表プロセス152および被監視プロセス153,154の動作を外部から監視することができ、コンテナ150内の異常状態を正確に把握することができる。これにより代理監視プロセス141は、コンテナ150内で復旧可能な異常またはサービスの実行に影響のない異常を検出しても、コンテナ基盤130に異常通知を行わないことで、コンテナ150の不要な再起動を抑止できる。
【0100】
このように、代理監視プロセス141と代表プロセス152との両方が存在することにより、コンテナ150内での異常の復旧の可能性を高めることができると共に、コンテナ150内の状況を正確に把握した、コンテナ150の再起動の適切な判断とが両立できる。その結果、コンテナ150の再起動が最小限に抑えられ、被監視プロセス153,154が実行する処理の可用性が向上する。
【0101】
〔第3の実施の形態〕
次に第3の実施の形態について説明する。第3の実施の形態は、被監視プロセス153,154からの正常通知の監視を、代表プロセス152のヘルスチェックより優先して実行するものである。この場合、被監視プロセス153,154は、代表プロセス152の異常の有無に関係無く、正常通知の定期送信を行う。
【0102】
図15は、第3の実施の形態における被監視プロセスの処理手順の一例を示すフローチャートである。以下、被監視プロセス153が実行する場合を想定し、
図15に示す処理をステップ番号に沿って説明する。
【0103】
[ステップS201]被監視プロセス153は、代理監視プロセス141へ起動完了通知を送信する。起動完了通知には、被監視プロセス153の識別子(被監視プロセスID)が含まれる。
【0104】
[ステップS202]被監視プロセス153は、被監視プロセス153が停止するまで、ステップS203~S204の処理を無限ループする。
[ステップS203]被監視プロセス153は、代理監視プロセス141に正常通知を送信する。正常通知には、被監視プロセス153の識別子(被監視プロセスID)が含まれる。
【0105】
[ステップS204]被監視プロセス153は、代表プロセス152からの再起動またはコンテナ150の再起動などにより被監視プロセス153が停止する場合、処理を終了する。
【0106】
このように被監視プロセス153は、代表プロセス152からの正常確認が途絶えているか否かを判断せずに、代理監視プロセス141への正常通知の定期送信を行う。なお
図15の処理を被監視プロセス153が実行するものとして説明したが、他の被監視プロセス154も被監視プロセス153と同様の処理を実行する。
【0107】
図16は、第3の実施の形態における代理監視プロセスの復旧判断処理の手順の一例を示すフローチャートである。以下、
図16に示す処理をステップ番号に沿って説明する。
[ステップS211]代理監視プロセス141は、コンテナ150で実行するソフトウェアに定義済みの被監視プロセス153,154ごとにステップS212の処理を実行する。
【0108】
[ステップS212]代理監視プロセス141は、処理対象の被監視プロセスの最新正常通知時刻からの経過時間を算出する。
[ステップS213]代理監視プロセス141は、定義済みのすべての被監視プロセス153,154について経過時間の算出が終了したら、処理をステップS214に進める。
【0109】
[ステップS214]代理監視プロセス141は、経過時間が「Y秒」(Yは0より大きな実数)以上となった被監視プロセスが少なくとも1つあるか否かを判断する。代理監視プロセス141は、該当する被監視プロセスがある場合、その被監視プロセスに異常が発生したと判断し、処理をステップS215に進める。また代理監視プロセス141は、該当する被監視プロセスがなければ、すべての被監視プロセス153,154が正常であると判断し、処理をステップS211に進める。
【0110】
[ステップS215]代理監視プロセス141は、代表プロセス152のヘルスチェックを行い、代表プロセス152が正常か否かを判断する。代理監視プロセス141は、代表プロセスが正常であれば、処理をステップS211に進める。また代理監視プロセス141は、代表プロセス152の異常を検出した場合、処理をステップS216に進める。
【0111】
[ステップS216]代理監視プロセス141は、コンテナ150の復旧処理を行う。例えば代理監視プロセス141は、コンテナ基盤130に対して異常の発生を通知する。するとコンテナ基盤130が、代理監視コンテナ140とコンテナ150とを再起動する。これにより、代理監視コンテナ140とコンテナ150とが初期化され、正常な状態から処理が開始される。
【0112】
なお
図16に示す処理のうち、ステップS211~S214の処理が、被監視プロセス153,154からの正常通知を監視する通知監視処理である。
図14に示した第2の実施の形態における復旧判断処理と比較すれば分かるように、第3の実施の形態では、代理監視プロセス141は、ヘルスチェック処理の前に通知監視処理を行っている。
【0113】
このように代理監視プロセス141は、通知監視が正常であれば、すべて被監視プロセス153,154は正常であるため、コンテナ基盤130によるコンテナの再起動は不要と判断する(
図5に示す「パターンA」と「パターンC」)。
図16の例では、ヘルスチェックの前に被監視プロセス153,154からの通知監視を行っているため、代理監視プロセス141は、
図5に示す「パターンA」と「パターンC」とを区別していない。
【0114】
また被監視プロセス153,154のいずれかに異常があっても、ヘルスチェックに異常がなければ、異常な被監視プロセスは代表プロセス152によって復旧される。この場合、代理監視プロセス141は、コンテナ150の再起動は不要と判断する(
図5に示す「パターンB」)。
【0115】
さらに代理監視プロセス141は、ヘルスチェックも通知監視も異常であれば、異常な被監視プロセスが代表プロセス152によって復旧されないため、コンテナ基盤130によるコンテナ150の再起動を実行すると判断する(
図5に示す「パターンD」)。
【0116】
〔その他の実施の形態〕
代理監視プロセス141は、被監視プロセスレジストリ142に記録した各被監視プロセス153,154の最新正常通知時刻に基づいて、被監視プロセス153,154から正常通知の途絶を監視しているが、他の手段で正常通知の途絶を監視することもできる。例えば代理監視プロセス141は、被監視プロセス153,154ごとのタイマを用いて、正常通知の途絶を監視することが可能である。その場合、代理監視プロセス141は、被監視プロセス153,154のいずれかから正常通知を受信すると、その被監視プロセスのタイマによる時間計測を開始する。そして代理監視プロセス141は、タイマの計測時間が所定値(例えば「Y秒」)以上となった被監視プロセスがある場合、通知監視における被監視プロセスの異常が発生したと判断する。
【0117】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
【符号の説明】
【0118】
1 ソフトウェア実行環境構築部
2 第1ソフトウェア実行環境
2a,2b 第1プロセス
2c 第2プロセス
3 第2ソフトウェア実行環境
3a 第3プロセス
10 情報処理装置
11 記憶部
12 処理部