(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024148281
(43)【公開日】2024-10-18
(54)【発明の名称】プログラム、情報処理方法およびクラスタシステム
(51)【国際特許分類】
G06F 11/20 20060101AFI20241010BHJP
H04L 43/10 20220101ALI20241010BHJP
【FI】
G06F11/20 623
H04L43/10
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023061289
(22)【出願日】2023-04-05
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】片岡 叡
(72)【発明者】
【氏名】金子 勉
(72)【発明者】
【氏名】川北 優
(72)【発明者】
【氏名】西澤 宏幸
【テーマコード(参考)】
5B034
【Fターム(参考)】
5B034BB02
5B034CC01
5B034DD01
(57)【要約】
【課題】ゾーン障害の発生を特定可能にする。
【解決手段】クラスタシステム1は、運用系ノード10と待機系ノード20とを有する。運用系ノード10は、1以上の第1データセンタを有する第1ゾーンZ1で動作する。待機系ノード20は、1以上の第2データセンタを有する第2ゾーンZ2で動作する。待機系ノード20は、運用系ノード10とのハートビートが遮断されると、運用系ノード10の強制停止を行う。待機系ノード20は、運用系ノード10の強制停止に失敗すると、運用系ノード10および待機系ノード20それぞれへタグを付与するコマンドを発行する。待機系ノード20は、当該コマンドの実行結果に基づいて、第1ゾーンZ1の障害が発生していることを特定する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
1以上の第1データセンタを有する第1ゾーンで動作する運用系ノードと、1以上の第2データセンタを有する第2ゾーンで動作する待機系ノードとを含むクラスタシステムのうちの前記待機系ノードとして動作するコンピュータに、
前記運用系ノードとのハートビートが遮断されると、前記運用系ノードの強制停止を行い、前記運用系ノードの強制停止に失敗すると、前記運用系ノードおよび前記待機系ノードそれぞれへタグを付与するコマンドを発行し、
前記コマンドの実行結果に基づいて、前記第1ゾーンの障害が発生していることを特定する、
処理を実行させるプログラム。
【請求項2】
前記特定では、前記運用系ノードに対するタグの付与を正常に行えず、かつ、前記待機系ノードに対するタグの付与を正常に行えるか否かを判定し、判定の結果が真の場合、前記第1ゾーンの障害が発生していると判断する、
処理を前記コンピュータに実行させる請求項1記載のプログラム。
【請求項3】
前記特定では、前記運用系ノードに対するタグの付与を正常に行える場合、前記第1ゾーンの障害ではなく、前記運用系ノード単体の障害が発生していると判断する、
処理を前記コンピュータに実行させる請求項2記載のプログラム。
【請求項4】
前記運用系ノードの強制停止に失敗すると、前記コマンドを発行する前に、前記第1ゾーンにおける、前記運用系ノードが属するネットワークに対して疎通確認を行い、前記疎通確認に対する応答があるか否かを判定し、前記疎通確認に対する応答がある場合、前記第1ゾーンの障害が発生していないと判断する、
処理を前記コンピュータに実行させる請求項1記載のプログラム。
【請求項5】
前記疎通確認に対する応答がある場合、前記運用系ノードの強制停止の実行指示を受け付けるAPI(Application Programming Interface)エンドポイントの障害が発生したと判断する、
処理を前記コンピュータに実行させる請求項4記載のプログラム。
【請求項6】
前記疎通確認に対する応答がない場合、所定の外部ネットワークサービスにアクセスできるか否かを判定し、前記外部ネットワークサービスにアクセスできない場合、前記第2ゾーンにおける、前記待機系ノードが属するネットワークの障害が発生していると判断する、
処理を前記コンピュータに実行させる請求項4記載のプログラム。
【請求項7】
前記外部ネットワークサービスにアクセスできる場合に前記コマンドを発行し、
前記特定では、前記運用系ノードに対するタグの付与を正常に行えず、かつ、前記待機系ノードに対するタグの付与を正常に行えない場合、前記コマンドを受け付けるAPIエンドポイントの障害が発生したと判断する、
処理を前記コンピュータに実行させる請求項6記載のプログラム。
【請求項8】
前記運用系ノードの強制停止に成功すると、前記第1ゾーンの障害が発生していないと判断する、
処理を前記コンピュータに実行させる請求項1記載のプログラム。
【請求項9】
1以上の第1データセンタを有する第1ゾーンで動作する運用系ノードと、1以上の第2データセンタを有する第2ゾーンで動作する待機系ノードとを含むクラスタシステムのうちの前記待機系ノードが、
前記運用系ノードとのハートビートが遮断されると、前記運用系ノードの強制停止を行い、前記運用系ノードの強制停止に失敗すると、前記運用系ノードおよび前記待機系ノードそれぞれへタグを付与するコマンドを発行し、
前記コマンドの実行結果に基づいて、前記第1ゾーンの障害が発生していることを特定する、
情報処理方法。
【請求項10】
1以上の第1データセンタを有する第1ゾーンで動作する運用系ノードと、1以上の第2データセンタを有する第2ゾーンで動作する待機系ノードとを有し、
前記待機系ノードは、前記運用系ノードとのハートビートが遮断されると、前記運用系ノードの強制停止を行い、前記運用系ノードの強制停止に失敗すると、前記運用系ノードおよび前記待機系ノードそれぞれへタグを付与するコマンドを発行し、前記コマンドの実行結果に基づいて、前記第1ゾーンの障害が発生していることを特定する、
クラスタシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はプログラム、情報処理方法およびクラスタシステムに関する。
【背景技術】
【0002】
近年、アプリケーションプログラムを実行する情報処理環境をユーザが自ら所有する代わりに、サービス事業者のもつ情報処理環境をネットワーク経由で利用することが増えている。ネットワーク経由で情報処理環境を利用させる情報処理システムはクラウドシステムと言われることがある。クラウドシステムは、物理マシンや仮想マシンなどの単位計算リソースをユーザに貸し出し、ユーザが作成したアプリケーションプログラムをその単位計算リソース上で実行する。物理マシンや仮想マシンで実現される処理主体はノードと言われてもよい。
【0003】
例えば、クラウドシステムは、ユーザのアプリケーションプログラムで利用可能な種々のサービスを実行する。ユーザのアプリケーションプログラムは、サービスが提供するAPI(Application Programming Interface)を呼び出すことで、当該サービスを利用する。例えば、クラウドシステムは、アプリケーションプログラムによるAPIエンドポイントと呼ばれる識別子の指定により、バックエンドのサービスが提供するAPIの呼び出しを可能にすることがある。
【0004】
ところで、情報処理システムでは可用性の向上が図られることがある。例えば、アプリケーションを稼働系のサーバにおいて処理し、アプリケーションが異常となった場合に、異常となったアプリケーションを待機系のサーバにて処理するクラスタシステムの提案がある。提案のクラスタシステムでは、待機系のサーバは、稼働系のサーバとの間におけるハートビートにより、稼働系のサーバのアプリケーションの異常を検出する。
【0005】
また、待機系サーバが、クライアント装置がアクセスに用いるのと同じネットワーク経由で現用系サーバが提供するサービスにアクセスし、現用系サーバによるサービス提供を監視するクラスタシステムの提案もある。
【0006】
更に、異なる場所で実行しているアプリケーションのインスタンスの実行のため、データセンタを跨いで通信するインフラストラクチャーを提供するシステムの提案もある。提案のシステムは、複数のクラウドに跨って拡げられたアプリケーションを監視し、管理し、デバッグする。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2010-103695号公報
【特許文献2】国際公開第2019/049433号
【特許文献3】国際公開第2012/162171号
【発明の概要】
【発明が解決しようとする課題】
【0008】
クラウドシステムでは、1以上のデータセンタを1つのゾーンとして管理することがある。当該ゾーンは、1以上のデータをまとめた1つの論理的な管理単位である。この場合、クラスタの要素となる運用系/待機系の各ノードを互いに異なるゾーンで動作させることが考えられる。これにより、災害やゾーン管理用のソフトウェアの不具合など、該当のゾーン全体に及ぶゾーン単位の障害(ゾーン障害)に対し、クラスタにより提供されるアプリケーションの可用性が向上され得る。
【0009】
一方、待機系ノードは、ハートビートによる運用系ノードの死活監視において、ゾーン障害以外の理由でも異常を検知し得る。運用系ノードの死活監視がゾーン障害以外の理由で異常となる場合、当該異常が一時的なものであり、比較的短時間で復旧することもある。すなわち、待機系ノードが運用系ノードとのハートビート断を検知したとしても、実際には運用系ノードのアプリケーションの稼働が継続していることもあり得る。
【0010】
したがって、待機系ノードで、単純にハートビート断に応じて該当のアプリケーションを起動してしまうと、運用系/待機系の両ノードでアプリケーションが実行される可能性がある。この場合、例えば両ノードからストレージへの同時アクセスに起因するデータ破壊などのリスクが生じ得る。
【0011】
そこで、運用系ノードから待機系ノードへの切り替えのために、待機系ノードで、運用系ノード側でのゾーン障害の発生を判断する仕組みが問題となる。
1つの側面では、本発明は、ゾーン障害の発生を特定可能にすることを目的とする。
【課題を解決するための手段】
【0012】
1つの態様では、プログラムが提供される。このプログラムは、1以上の第1データセンタを有する第1ゾーンで動作する運用系ノードと、1以上の第2データセンタを有する第2ゾーンで動作する待機系ノードとを含むクラスタシステムのうちの待機系ノードとして動作するコンピュータに、運用系ノードとのハートビートが遮断されると、運用系ノードの強制停止を行い、運用系ノードの強制停止に失敗すると、運用系ノードおよび待機系ノードそれぞれへタグを付与するコマンドを発行し、コマンドの実行結果に基づいて、第1ゾーンの障害が発生していることを特定する、処理を実行させる。
【0013】
また、1つの態様では、情報処理方法が提供される。また、1つの態様では、クラスタシステムが提供される。
【発明の効果】
【0014】
1つの側面では、ゾーン障害の発生を特定可能にする。
【図面の簡単な説明】
【0015】
【
図1】第1の実施の形態のクラスタシステムを説明する図である。
【
図2】待機系ノードの処理例を示すフローチャートである。
【
図3】待機系ノードの処理例(続き)を示すフローチャートである。
【
図4】第2の実施の形態の情報処理システムの例を示す図である。
【
図5】物理マシンのハードウェア例を示す図である。
【
図8】待機系ノードが保持するデータの例を示す図である。
【
図9】待機系インスタンスの処理例を示す図である。
【
図10】運用系強制停止処理の例を示すフローチャートである。
【
図11】ネットワーク状態確認処理の例を示すフローチャートである。
【
図12】運用系状態確認処理の例を示すフローチャートである。
【
図13】待機系状態確認処理の例を示すフローチャートである。
【発明を実施するための形態】
【0016】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0017】
図1は、第1の実施の形態のクラスタシステムを説明する図である。
クラスタシステム1は、クラウドシステムなどの情報処理システムにおけるサブシステムとして運用される。クラスタシステム1は、運用系ノード10および待機系ノード20を有する。運用系ノード10および待機系ノード20は、物理的なコンピュータ(物理マシン)でもよいし、物理マシンのハードウェアリソースを用いて動作する仮想的なコンピュータ(仮想マシン)でもよい。運用系ノード10は、アプリケーションの実行に用いられるノードである。待機系ノード20は、運用系ノード10に対する待機系のノードである。待機系ノード20は、運用系ノード10の異常時に当該アプリケーションを、運用系ノード10の代わりに実行するために設けられる。
【0018】
運用系ノード10は、第1ゾーンZ1で動作する。待機系ノード20は、第2ゾーンZ2で動作する。第1ゾーンZ1は、1以上の第1データセンタを有する。第2ゾーンZ2は、1以上の第2データセンタを有する。データセンタは、物理マシン、ネットワーク機器およびストレージ装置などを多数収容し、稼働させる施設である。第1ゾーンZ1および第2ゾーンZ2は、AZ(Availability Zone)や可用性ゾーンと言われてもよい。なお、
図1では、データセンタの図示は省略されている。
【0019】
運用系ノード10は、記憶部11および処理部12を有する。待機系ノード20は、記憶部21および処理部22を有する。記憶部11,21は、RAM(Random Access Memory)などの揮発性の半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。記憶部11,21は、それぞれ処理部12,22の処理に用いられるデータを記憶する。
【0020】
処理部12,22は、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12,22は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリ(記憶部11,21でもよい)に記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。運用系ノード10および待機系ノード20が仮想マシンで実現される場合、当該仮想マシンを動作させる物理マシンのCPUやRAMなどのハードウェアリソースの一部が当該仮想マシンに割り当てられる。
【0021】
運用系ノード10および待機系ノード20は、第1ネットワークN1および第2ネットワークN2に接続される。第1ネットワークN1は、クラスタシステム1が属する情報処理システムの管理ネットワークである。第1ネットワークN1には、API管理ノード30が接続される。API管理ノード30は、運用系ノード10および待機系ノード20によるAPIの呼び出しを受け付けるAPIエンドポイントとして機能する。API管理ノード30は、APIの呼び出しに対して、バックエンドで提供されるサービスを実行し、その結果を呼び出し元である運用系ノード10または待機系ノード20に応答する。API管理ノード30は、APIに応じて複数存在してもよい。API管理ノード30は、物理マシンまたは仮想マシンにより実現される。API管理ノード30は、APIホストと言われてもよい。
【0022】
ここで、APIの呼び出しに対して実行可能な処理には、例えば次のものがある。1つ目の処理は、ノードの強制停止である。2つ目の処理は、ノードの状態確認である。3つ目の処理は、ノードへのタグ付けである。タグは、ユーザにより定義されるキー(タグキー)と、値(タグ値)とで構成されるメタデータである。タグはラベルと言われてもよい。
【0023】
第2ネットワークN2は、運用系ノード10および待機系ノード20の間のハートビート用のネットワークである。第2ネットワークN2は、インタコネクトネットワークと言われてもよい。ハートビートは、運用系ノード10および待機系ノード20が相互に死活監視を行うための定期的な通信、あるいは、当該通信で送受信される信号である。
【0024】
また、運用系ノード10および待機系ノード20は、所定のネットワークを介してストレージ40に接続される。ストレージ40は、運用系ノード10および待機系ノード20で実行されるアプリケーションの処理に用いられるデータを記憶する。ストレージ40は、HDDやフラッシュメモリなどにより実現される。例えば、待機系ノード20は、運用系ノード10に代替してアプリケーションを実行する場合、ストレージ40にアクセスすることで、運用系ノード10での当該アプリケーションの処理で生成されたデータを引き継げる。
【0025】
待機系ノード20は、運用系ノード10とのハートビートの遮断を検知すると、次のようにして、第1ゾーンZ1の障害を特定する。第1ゾーンZ1の障害とは、例えば、災害やゾーン管理用のソフトウェアの不具合など、第1ゾーンZ1全体が利用できなくなるような当該ゾーン全体に関わる障害である。
【0026】
処理部22は、運用系ノード10とのハートビートが遮断されると、運用系ノード10の強制停止を行う。具体的には、処理部22は、運用系ノード10を強制停止させるAPIのコマンドを、第1ネットワークN1を介し、API管理ノード30に対して発行する。
【0027】
API管理ノード30は、当該強制停止のコマンドを受け付けると、運用系ノード10の強制停止を試みる。API管理ノード30は、強制停止の成功または失敗を待機系ノード20に応答する。
【0028】
処理部22は、強制停止の成功または失敗の応答をAPI管理ノード30から受信する。運用系ノード10の強制停止に成功した場合、API管理ノード30により運用系ノード10との通信を正常に行えたことになる。よって、この場合、処理部22は、ハートビートの遮断が第1ゾーンZ1の障害ではないと特定する。なお、処理部22は、運用系ノード10の強制停止に成功した場合、待機系ノード20において引継ぎ対象のアプリケーションを起動し、当該アプリケーションの処理を引き継いでもよい。
【0029】
一方、運用系ノード10の強制停止に失敗した場合、API管理ノード30により運用系ノード10との通信を正常に行えなかったことになる。このため、処理部22は、次の処理を行う。処理部22は、運用系ノード10および待機系ノード20それぞれへタグを付与するコマンドを発行する。具体的には、処理部22は、運用系ノード10へタグを付与するAPIのコマンド、および、待機系ノード20へタグを付与するAPIのコマンドを、第1ネットワークN1を介し、API管理ノード30に対して発行する。
【0030】
API管理ノード30は、運用系ノード10へタグを付与するコマンドを受け付けると、運用系ノード10へのタグの付与を試みる。API管理ノード30は、運用系ノード10へタグを付与するコマンドの実行結果を待機系ノード20に応答する。また、API管理ノード30は、待機系ノード20へタグを付与するコマンドを受け付けると、待機系ノード20へのタグの付与を試みる。API管理ノード30は、待機系ノード20へタグを付与するコマンドの実行結果を待機系ノード20に応答する。
【0031】
処理部22は、運用系ノード10および待機系ノード20それぞれへタグを付与するコマンドの実行結果に基づいて、第1ゾーンZ1の障害が発生していることを特定する。具体的には、処理部22は、運用系ノード10へのタグの付与を正常に行えるか否かの判定、および、待機系ノード20へのタグの付与を正常に行えるか否かを判定する。そして、処理部22は、運用系ノード10へのタグの付与を正常に行えず、かつ、待機系ノード20へのタグの付与を正常に行える場合、第1ゾーンZ1の障害が発生していると特定する。
【0032】
処理部22は、運用系ノード10へのタグの付与を正常に行える場合、待機系ノード20へのタグ付与の実行結果に関わらず、第1ゾーンZ1の障害が発生していないと特定する。また、処理部22は、運用系ノード10へのタグの付与を正常に行えず、かつ、待機系ノード20へのタグの付与を正常に行えない場合、API管理ノード30が提供するAPIエンドポイントの障害と特定する。
【0033】
なお、処理部22は、第1ゾーンZ1の障害が発生していると特定した場合、待機系ノード20において引継ぎ対象のアプリケーションを起動し、当該アプリケーションの処理を引き継いでもよい。
【0034】
このように第1の実施の形態の待機系ノード20によれば、運用系ノード10とのハートビートが遮断されると、運用系ノード10の強制停止が行われる。運用系ノード10の強制停止に失敗すると、運用系ノード10および待機系ノード20それぞれへタグを付与するコマンドが発行される。コマンドの実行結果に基づいて、第1ゾーンZ1の障害が発生していることが特定される。これにより、待機系ノード20は、運用系ノード10側のゾーン障害の発生を特定可能になる。
【0035】
例えば、待機系ノード20へのタグの付与を正常に行える場合、API管理ノード30が提供するAPIエンドポイントは正常である。よって、この場合に、運用系ノード10へのタグの付与を正常に行えないならば、処理部22は、その原因を第1ゾーンZ1の障害であると絞り込める。
【0036】
また、運用系ノード10へのタグの付与を正常に行える場合、API管理ノード30により運用系ノード10との通信を正常に行えたことになる。よって、この場合、処理部22は、待機系ノード20へのタグの付与結果に関わらず、第1ゾーンZ1の障害が発生していないと特定できる。
【0037】
更に、運用系ノード10へのタグの付与を正常に行えず、かつ、待機系ノード20へのタグの付与を正常に行えない場合、処理部12は、API管理ノード30が提供するAPIエンドポイントの障害であると特定する。
【0038】
次に、待機系ノード20の処理手順の例を説明する。
図2は、待機系ノードの処理例を示すフローチャートである。
(S10)処理部22は、運用系ノード10とのハートビート断を検知する。
【0039】
(S11)処理部22は、運用系ノード10の強制停止を行う。前述のように、運用系ノード10の強制停止は、API管理ノード30を介して行われる。
(S12)処理部22は、運用系ノード10の強制停止に成功したか否かを判定する。強制停止に成功した場合、ステップS13に処理が進む。強制停止に失敗した場合、ステップS14に処理が進む。運用系ノード10の強制停止が成功する場合、異常が発生している運用系ノード10からのストレージ40へのデータアクセスが阻止され、ストレージ40に格納されたデータが保護される。
【0040】
(S13)処理部22は、ハートビート用の第2ネットワークN2の故障と判定する。この場合、API管理ノード30と運用系ノード10とが通信を行えたことになるため、処理部22は、第1ゾーンZ1の障害ではないと特定する。そして、待機系ノード20の処理が終了する。なお、この場合、処理部22は、待機系ノード20に切り替えて、アプリケーションの運用を継続する。
【0041】
(S14)処理部22は、運用系ノード10が属する管理ネットワーク宛に疎通確認を行う。運用系ノード10が属する管理ネットワークは、第1ゾーンZ1に存在するネットワークである。例えば、処理部22は、運用系ノード10が属する管理ネットワークに存在するIP(Internet Protocol)アドレス宛にpingを発行することで、疎通確認を行える。当該疎通確認は、例えば第1ネットワークN1を介して行われる。
【0042】
(S15)処理部22は、ステップS14の疎通確認に対する応答があるか否かを判定する。応答がある場合、ステップS16に処理が進む。応答がない場合、ステップS17に処理が進む。
【0043】
(S16)処理部22は、API管理ノード30により提供されるAPIエンドポイントの障害であると判定する。この場合、運用系ノード10側の管理ネットワークは稼働しているため、処理部22は、第1ゾーンZ1の障害ではないと特定する。そして、待機系ノード20の処理が終了する。なお、ステップS16では、処理部22は、ハートビート断の原因が第2ネットワークN2の障害であると判定してもよい。
【0044】
(S17)処理部22は、待機系ノード20から外部(例えばインターネット)へアクセス可能であるか否かを判定する。待機系ノード20から外部へアクセス可能である場合、
図3のステップS19に処理が進む。待機系ノード20から外部へアクセス不可能である場合、ステップS18に処理が進む。例えば、処理部22は、インターネット上の所定Webサイトにアクセスできるか否かにより、外部へのアクセス可否を判定することができる。
【0045】
(S18)処理部22は、待機系側のネットワーク障害と判定する。待機系側のネットワーク障害とは、待機系ノード20が属する管理ネットワークやVPC(Virtual Private Cloud)などのネットワークの障害である。そして、待機系ノード20の処理が終了する。
【0046】
図3は、待機系ノードの処理例(続き)を示すフローチャートである。
(S19)処理部22は、運用系ノード10にタグを付与するAPIを実行する。前述のように当該APIは、API管理ノード30を介して実行される。運用系ノード10に対して付与されるタグの情報は例えばAPI管理ノード30により管理される。
【0047】
(S20)処理部22は、運用系ノード10へのタグの付与が正常に完了したか否かを判定する。運用系ノード10へのタグの付与が正常に完了した場合、ステップS21に処理が進む。運用系ノード10へのタグの付与が正常に完了しなかった場合、ステップS22に処理が進む。例えば、処理部22は、運用系ノード10の状態確認を行うAPIのコマンドを発行することで、タグの付与結果をAPI管理ノード30から取得し、タグの付与結果に基づいて、タグの付与が正常に完了したか否かを判定することができる。
【0048】
(S21)処理部22は、API管理ノード30と運用系ノード10とが通信を行えたことになるため、第1ゾーンZ1のゾーン障害ではないことを特定する。そして、待機系ノード20の処理が終了する。
【0049】
(S22)処理部22は、待機系ノード20にタグを付与するAPIを実行する。前述のように当該APIは、API管理ノード30を介して実行される。待機系ノード20に対して付与されるタグの情報は例えばAPI管理ノード30により管理される。
【0050】
(S23)処理部22は、待機系ノード20へのタグの付与が正常に完了したか否かを判定する。待機系ノード20へのタグの付与が正常に完了しなかった場合、ステップS24に処理が進む。待機系ノード20へのタグの付与が正常に完了した場合、ステップS25に処理が進む。例えば、処理部22は、待機系ノード20の状態確認を行うAPIのコマンドを発行することで、タグの付与結果をAPI管理ノード30から取得し、タグの付与結果に基づいて、タグの付与が正常に完了したか否かを判定することができる。
【0051】
(S24)処理部22は、API管理ノード30により提供されるAPIエンドポイントの障害であると判定する。そして、待機系ノード20の処理が終了する。
(S25)処理部22は、運用系ノード10側のゾーン障害、すなわち、第1ゾーンZ1の障害であると判定する。そして、待機系ノード20の処理が終了する。
【0052】
上記の手順により第1ゾーンZ1の障害が発生していることが特定された場合、処理部22は、待機系ノード20によりアプリケーションを起動し、運用系ノード10に代替して、当該アプリケーションを実行することができる。
【0053】
上記の手順がステップS18またはステップS24で終了する場合、処理部22は、第1ゾーンZ1の障害が発生していないと特定してもよい。この場合、処理部22は、待機系ノード20へのアプリケーションの運用の切り替えを行わない。
【0054】
あるいは、上記の手順がステップS18またはステップS24で終了する場合、処理部22は、第1ゾーンZ1の障害が発生している可能性が残ると判断し、例えば第1ゾーンZ1で障害が発生している可能性があることをユーザに通知してもよい。ユーザは当該通知に応じて、クラスタシステム1が属する情報処理システムを提供する事業者により公表される情報などから第1ゾーンZ1の障害有無を確認し、待機系ノード20への切り替えを行える。また、上記の手順がステップS18またはステップS24で終了する場合、処理部22は、更に他の判定処理を行うことで第1ゾーンZ1の障害が発生していることを特定してもよい。
【0055】
このようにして、待機系ノード20は、運用系ノード10における障害原因を迅速に特定することができる。例えば、待機系ノード20は、運用系ノード10が第1ゾーンZ1の障害により確実に停止していることを迅速に特定することができる。また、待機系ノード20は、運用系ノード10が確実に停止していることが確認されない限り、運用系ノード10から待機系ノード20へのアプリケーションの切り替えを行わないように制御可能になる。これにより、待機系ノード20は、ストレージ40におけるデータ破壊のリスクを抑えて、運用系ノード10から待機系ノード20への切り替えを安全に行えるようになる。
【0056】
また、上記の手順は、待機系ノード20により実行される処理であるため、運用系ノード10および運用系ノード10が存在する第1ゾーンZ1の状態に関わらず実行可能である。更に、待機系ノード20によりAZ障害発生の特定を自動で行うことができる。このため、クラスタシステム1が同期強制停止方式をとる場合でも、AZ障害発生時にアプリケーションの運用の継続が可能となる。ここで、同期強制停止方式とは、異常発生ノードが確実に停止したことを確認してからノードの切り替えを行う手法である。同期強制停止方式を用いることで、ストレージ40のデータに対して運用系のみからのアクセスを保証できる。このため、データ保護の観点で優れるとともに、3ノードクラスタの構成をとれるなど、幅広い運用形態が可能になる利点がある。
【0057】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図4は、第2の実施の形態の情報処理システムの例を示す図である。
【0058】
情報処理システム2は、クラウドサービスを提供する。情報処理システム2は、クラウドシステムと呼ばれてもよい。クラウドサービスの一例として、AWS(Amazon Web Services)がある。AWSは登録商標である。Amazonは登録商標である。ただし、情報処理システム2は、他のクラウドサービスを提供してもよい。情報処理システム2は、物理マシン100,100a,…を有する。物理マシン100,100a,…は、ユーザに提供される演算リソースを有するサーバコンピュータである。図示を省略しているが、情報処理システム2は、更に、ネットワーク機器やストレージ装置などのハードウェアを多数含む。情報処理システム2は、物理マシン100,100a,…、ネットワーク機器およびストレージ装置などのリソースをユーザに貸し出し、ユーザにより利用可能にする。
【0059】
情報処理システム2は、インターネット3に接続される。また、インターネット3には、端末装置4が接続される。端末装置4は、ユーザが操作するクライアントコンピュータである。ユーザは端末装置4を操作して、情報処理システム2のサービスを利用することができる。
【0060】
図5は、物理マシンのハードウェア例を示す図である。
物理マシン100は、プロセッサ101、RAM102、HDD103、GPU104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。物理マシン100が有するこれらのユニットは、物理マシン100の内部でバスに接続されている。プロセッサ101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
【0061】
プロセッサ101は、プログラムの命令を実行する演算装置である。プロセッサ101は、例えばCPUである。プロセッサ101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、プロセッサ101は複数のプロセッサコアを含んでもよい。また、物理マシン100は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0062】
RAM102は、プロセッサ101が実行するプログラムやプロセッサ101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、物理マシン100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0063】
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、物理マシン100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0064】
GPU104は、プロセッサ101からの命令に従って、物理マシン100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
【0065】
入力インタフェース105は、物理マシン100に接続された入力デバイス112から入力信号を取得し、プロセッサ101に出力する。入力デバイス112としては、マウス、タッチパネル、タッチパッド、トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、物理マシン100に、複数の種類の入力デバイスが接続されていてもよい。
【0066】
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0067】
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、プロセッサ101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0068】
通信インタフェース107は、ネットワーク114に接続され、ネットワーク114を介して他の情報処理装置と通信する。通信インタフェース107は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、無線通信インタフェースでもよい。なお、ネットワーク114は、情報処理システム2の内部ネットワークである。
【0069】
物理マシン100aを含む他の物理マシンおよび端末装置4も物理マシン100と同様のハードウェアにより実現される。情報処理システム2は、物理マシン100,100a,…のハードウェアリソースを用いて、複数の仮想マシンを動作させることができる。
【0070】
図6は、AZの例を示す図である。
情報処理システム2は、リージョン2aおよびAZ2a1,2a2を有する。リージョン2aは、ある地域に対応するネットワークの管理単位である。AZ2a1,2a2は、リージョン2a内に立地する1以上のデータセンタを一纏めにした管理単位である。AZ2a1,2a2は、地理的に離れた場所に存在する。例えば、AZ2a1は、データセンタ50,51,…を有する。AZ2a2は、データセンタ60,61,…を有する。
【0071】
データセンタ50は、物理マシン100,100a,…を有する。図示を省略しているが、データセンタ50は、ネットワーク機器やストレージ装置などのハードウェアを多数含む。データセンタ51,60,61を含む他のデータセンタも、データセンタ50と同様に物理マシン、ネットワーク機器およびストレージ装置などのハードウェアを多数有する。
【0072】
更に、図示を省略しているが、リージョン2aにも、AZ2a1,2a2より上位のネットワークシステムが存在する。当該ネットワークシステムにも、複数の物理マシン、ネットワーク機器およびストレージ装置などが設けられる。
【0073】
図7は、情報処理システムの機能例を示す図である。
情報処理システム2は、運用系インスタンス200、待機系インスタンス300、ストレージ400,500およびAPIエンドポイント600を有する。
【0074】
運用系インスタンス200は、AZ2a1のサブネットsn1で動作する仮想マシンである。待機系インスタンス300は、AZ2a2のサブネットsn2で動作する仮想マシンである。サブネットsn1,sn2は、運用系インスタンス200および待機系インスタンス300を使用するユーザのVPCにおけるネットワークである。ここで、VPCは、リージョン2a内でユーザに割り当てられるネットワークの管理単位である。
【0075】
運用系インスタンス200および待機系インスタンス300は、クラスタシステムを形成し、運用系インスタンス200により実行されるアプリケーションの可用性を向上する。待機系インスタンス300は、運用系インスタンス200の稼働時には、当該アプリケーションを実行しない。待機系インスタンス300は、運用系インスタンス200の異常に応じて当該アプリケーションを起動し、運用系インスタンス200の代わりに当該アプリケーションの処理を実行する。運用系インスタンス200は、運用系マシンと言われてもよい。待機系インスタンス300は、待機系マシンと言われてもよい。運用系インスタンス200で実行されるアプリケーションは、端末装置4を操作するユーザにより使用されるものでもよい。
【0076】
運用系インスタンス200、待機系インスタンス300およびAPIエンドポイント600は、管理ネットワークN11に接続される。管理ネットワークN11は、リージョン2a内におけるAZ2a1,2a2のネットワークよりも上位のネットワークである。運用系インスタンス200および待機系インスタンス300は、管理ネットワークN11を介して、APIエンドポイント600により提供されるAPIの呼び出しを行える。APIの呼び出しは、APIに対応するAPIエンドポイント600のURI(Uniform Resource Identifier)などの識別子の指定により行われる。当該URIを「APIエンドポイント」と言うこともある。APIエンドポイント600は、APIを実行する物理マシンまたは仮想マシンにより実現される。APIエンドポイント600として機能する物理マシンまたは仮想マシンといったノードはAPIホストと言われてもよい。APIエンドポイント600は、各インスタンスにタグを付与することができ、各インスタンスに付与したタグの情報を保持する。
【0077】
運用系インスタンス200は、記憶部210およびクラスタ監視部220を有する。記憶部210には、運用系インスタンス200を動作させる物理マシンのRAMやHDDの記憶領域が用いられる。記憶部210は、クラスタ監視部220の処理に用いられるデータを記憶する。クラスタ監視部220は、運用系インスタンス200を動作させる物理マシンのプロセッサが、当該物理マシンのRAMに記憶されたプログラムを実行することで実現される。
【0078】
待機系インスタンス300は、記憶部310およびクラスタ監視部320を有する。記憶部310には、待機系インスタンス300を動作させる物理マシンのRAMやHDDの記憶領域が用いられる。記憶部310は、クラスタ監視部320の処理に用いられるデータを記憶する。クラスタ監視部320は、待機系インスタンス300を動作させる物理マシンのプロセッサが、当該物理マシンのRAMに記憶されたプログラムを実行することで実現される。
【0079】
ストレージ400は、サブネットsn1に接続される。ストレージ400は、運用系インスタンス200の処理に用いられるデータを記憶する。
ストレージ500は、サブネットsn2に接続される。ストレージ500は、待機系インスタンス300の処理に用いられるデータを記憶する。
【0080】
ここで、ストレージ400のデータは、運用系インスタンス200におけるアプリケーションの実行に応じて更新される。ストレージ400におけるデータの更新内容は、ストレージ500にも同期される。例えば、情報処理システム2は、ストレージ400のデータ更新をストレージ500にも反映させるディスクミラーリングのサービスを提供する。
【0081】
クラスタ監視部220,320は、運用系インスタンス200および待機系インスタンス300におけるアプリケーションやディスクなどの各リソースの状態を監視し、異常発生時に該当のインスタンスの停止やアプリケーションの実行主体の切り替えを行う。クラスタ監視部220,320は、インタコネクトネットワークN12を介した定期的なハートビートの通信により、相手インスタンスの死活監視を行う。インタコネクトネットワークN12は、情報処理システム2においてAZ2a1,2a2間を繋ぐネットワークである。
【0082】
クラスタ監視部320は、ハートビートの遮断を検知すると、異常内容の絞り込みを行い、AZ2a1においてAZ障害が発生していることを特定する。クラスタ監視部320は、AZ2a1においてAZ障害が発生していることを特定すると、運用系インスタンス200で実行されていたアプリケーションを、待機系インスタンス300上で起動し、当該アプリケーションの処理を引き継ぐ。
【0083】
ここで、クラスタ監視部320は、ハートビート断の発生時に、障害要因として次の障害を順に切り分ける。1つ目は、AZ障害である。AZ障害は、前述のように災害やAZ管理用のソフトウェアの不具合などで、該当のAZにおけるデータセンタ全体が使用不能になる障害である。2つ目は運用系インスタンス200のゲストOSまたはホストとなる物理マシンの障害、すなわち、インスタンス障害である。3つ目はサブネットsn1,sn2におけるネットワーク障害である。4つ目は、インタコネクトネットワークN12の障害である。
【0084】
クラスタ監視部320は、ハートビート断を検知すると、これらの障害要因の切り分けを行い、障害要因の切り分け結果を示すデータを生成して、記憶部310に格納する。
図8は、待機系ノードが保持するデータの例を示す図である。
【0085】
チェック結果ログ311およびフラグファイル312は、クラスタ監視部320により生成され、記憶部310に格納される。
チェック結果ログ311は、クラスタ監視部320による障害の切り分け結果が記録されるログファイルである。チェック結果ログ311は、ユーザによる異常原因の特定に使用される。
【0086】
フラグファイル312は、クラスタ監視部320により障害内容が特定された際に作成されるファイルであり、クラスタ監視部320による障害の切り分け処理の制御に用いられる。障害の切り分け処理の制御は、フラグファイル312の有無の判定に基づいて行われる。このため、フラグファイル312の中身は空でもよいし、任意の情報を含んでもよい。
【0087】
次に、待機系インスタンス300の処理手順を説明する。
図9は、待機系インスタンスの処理例を示す図である。
(S30)クラスタ監視部320は、運用系インスタンス200とのハートビート断を検出する。
【0088】
(S31)クラスタ監視部320は、記憶部310に格納されているフラグファイル312を削除する。
(S32)クラスタ監視部320は、運用系強制停止処理を行う。運用系強制停止処理の詳細は後述される。
【0089】
(S33)クラスタ監視部320は、記憶部310にフラグファイル312が存在するか否かを判定する。フラグファイル312が存在する場合、クラスタ監視部320は処理を終了する。フラグファイル312が存在しない場合、ステップS34に処理が進む。
【0090】
(S34)クラスタ監視部320は、ネットワーク状態確認処理を行う。ネットワーク状態確認処理の詳細は後述される。
(S35)クラスタ監視部320は、記憶部310にフラグファイル312が存在するか否かを判定する。フラグファイル312が存在する場合、クラスタ監視部320は処理を終了する。フラグファイル312が存在しない場合、ステップS36に処理が進む。
【0091】
(S36)クラスタ監視部320は、運用系状態確認処理を行う。運用系状態確認処理の詳細は後述される。
(S37)クラスタ監視部320は、記憶部310にフラグファイル312が存在するか否かを判定する。フラグファイル312が存在する場合、クラスタ監視部320は処理を終了する。フラグファイル312が存在しない場合、ステップS38に処理が進む。
【0092】
(S38)クラスタ監視部320は、待機系状態確認処理を行う。待機系状態確認処理の詳細は後述される。
(S39)クラスタ監視部320は、記憶部310にフラグファイル312が存在するか否かを判定する。フラグファイル312が存在する場合、クラスタ監視部320は処理を終了する。フラグファイル312が存在しない場合、ステップS40に処理が進む。
【0093】
(S40)クラスタ監視部320は、運用系側AZ障害と判断する。すなわち、クラスタ監視部320は、運用系インスタンス200のAZ2a1の障害が発生していると特定する。
【0094】
(S41)クラスタ監視部320は、運用系側AZ障害と判断した旨をチェック結果ログ311に出力する。この場合、クラスタ監視部320は、待機系インスタンス300により引継ぎ対象のアプリケーションを起動し、運用系インスタンス200の代わりに当該アプリケーションの処理を実行してもよい。すなわち、待機系インスタンス300への切り替えが可能である。
【0095】
(S42)クラスタ監視部320は、フラグファイル312を作成し、記憶部310に格納する。そして、クラスタ監視部320は処理を終了する。
なお、クラスタ監視部320は、フラグファイル312が存在することにより、または、ステップS42の後に、上記の処理を終了する場合、チェック結果ログ311に記載されている障害内容を、端末装置4に通知し、ユーザに対して障害内容を提供してもよい。
【0096】
図10は、運用系強制停止処理の例を示すフローチャートである。
運用系強制停止処理はステップS32に相当する。
(S50)クラスタ監視部320は、運用系インスタンス200を強制停止するAPIを実行する。例えばAmazon EC2(Amazon Elastic Compute Cloud)と呼ばれるサービスでは、クラスタ監視部320は、API「StopInstances」のコマンドを発行することで、APIエンドポイント600を介して、運用系インスタンス200の強制停止を行える。
【0097】
(S51)クラスタ監視部320は、運用系インスタンス200の強制停止に成功したか否かを示す応答をAPIエンドポイント600から取得し、強制停止に成功したか否かを判定する。運用系インスタンス200の強制停止に成功した場合、ステップS52に処理が進む。運用系インスタンス200の強制停止に成功しなかった場合、運用系強制停止処理が終了する。
【0098】
(S52)クラスタ監視部320は、インタコネクトネットワークN12の障害と判断する。この場合、クラスタ監視部320は、待機系インスタンス300により引継ぎ対象のアプリケーションを起動し、運用系インスタンス200の代わりに当該アプリケーションの処理を実行してもよい。すなわち、待機系インスタンス300への切り替えが可能である。
【0099】
(S53)クラスタ監視部320は、インタコネクトネットワークN12の障害と判断した旨をチェック結果ログ311に出力する。
(S54)クラスタ監視部320は、フラグファイル312を作成し、記憶部310に格納する。そして、運用系強制停止処理が終了する。
【0100】
図11は、ネットワーク状態確認処理の例を示すフローチャートである。
ネットワーク状態確認処理はステップS34に相当する。
(S60)クラスタ監視部320は、待機系管理ネットワークから運用系管理ネットワーク宛にpingを実行する。ここで、待機系管理ネットワークは、AZ2a2に存在する、待機系インスタンス300が属するネットワーク(例えばサブネットsn2)である。運用系管理ネットワークは、AZ2a1に存在する、運用系インスタンス200が属するネットワーク(例えばサブネットsn1)である。ping実行により待機系管理ネットワークから送信されるICMP(Internet Control Message Protocol)パケットは、例えば管理ネットワークN11を経由して運用系管理ネットワークへ到達する。
【0101】
(S61)クラスタ監視部320は、pingの応答があるか否かを判定する。pingの応答がある場合、ステップS62に処理が進む。pingの応答がない場合、ステップS65に処理が進む。
【0102】
(S62)クラスタ監視部320は、APIエンドポイント600の障害、すなわち、APIエンドポイント障害と判断する。
(S63)クラスタ監視部320は、APIエンドポイント障害と判断した旨をチェック結果ログ311に出力する。
【0103】
(S64)クラスタ監視部320は、フラグファイル312を作成し、記憶部310に格納する。そして、ネットワーク状態確認処理が終了する。
(S65)クラスタ監視部320は、待機系管理ネットワークから外部ネットワークサービスにアクセスする。外部ネットワークサービスへのアクセスは、例えば、インターネット上で提供されるサービスのURL(Uniform Resource Locator)など(例えば特定のWebサイトのURL)を指定して行われる。
【0104】
(S66)クラスタ監視部320は、外部ネットワークサービスへのアクセスに成功したか否かを判定する。成功した場合、ネットワーク状態確認処理が終了する。成功しなかった場合、ステップS67に処理が進む。
【0105】
(S67)クラスタ監視部320は、待機系側のネットワーク障害と判断する。
(S68)クラスタ監視部320は、待機系側のネットワーク障害と判断した旨をチェック結果ログ311に出力する。
【0106】
(S69)クラスタ監視部320は、フラグファイル312を作成し、記憶部310に格納する。そして、ネットワーク状態確認処理が終了する。
図12は、運用系状態確認処理の例を示すフローチャートである。
【0107】
運用系状態確認処理はステップS36に相当する。
(S70)クラスタ監視部320は、運用系インスタンス200の状態を確認するAPIを実行する。例えばAmazon EC2では、クラスタ監視部320は、API「DescribeInstances」のコマンドを発行することで、APIエンドポイント600を介して、運用系インスタンス200の状態確認を行える。
【0108】
(S71)クラスタ監視部320は、APIエンドポイント600による運用系インスタンス200の状態確認の結果を取得し、状態確認の結果に基づいて当該APIにより運用系インスタンス200の状態を取得可能であるか否かを判定する。運用系インスタンス200の状態を取得可能である場合、ステップS72に処理が進む。運用系インスタンス200の状態を取得不可能である場合、運用系状態確認処理が終了する。ここで、運用系インスタンス200の状態確認が正常に行えた場合、状態確認の結果は、運用系インスタンス200に対して付与済のタグの情報(タグキーおよびタグ値)を含む。当該タグのタグキーは例えば「AZFailureTest」である。タグ値は、運用系インスタンス200への前回タグ付与時のタイムスタンプである。ここで、APIエンドポイント600は、API「DescribeInstances」のコマンドに対して、運用系インスタンス200が停止していたとしても、運用系インスタンス200のキャッシュされた状態(過去に付与されたタグの情報を含む)を応答することがある。
【0109】
(S72)クラスタ監視部320は、運用系インスタンス200にタグ付けを行うAPIを実行する。例えばAmazon EC2では、クラスタ監視部320は、API「CreateTags」のコマンドを発行することで、APIエンドポイント600を介して、運用系インスタンス200へのタグ付けを行える。ここで、クラスタ監視部320は、タグ付けの際、例えばタグキーを「AZFailureTest」とし、タグ値を現在のタイムスタンプとする。運用系インスタンス200がAZ障害により停止している場合、運用系インスタンス200へのタグ付けを行えず、前回タグ付与時のタグの情報は更新されないことになる。
【0110】
(S73)クラスタ監視部320は、運用系インスタンス200の状態を確認するAPIを実行する。例えば、クラスタ監視部320は、前述のAPI「DescribeInstances」のコマンドを発行することで、APIエンドポイント600を介して、運用系インスタンス200の状態確認を行える。
【0111】
(S74)クラスタ監視部320は、APIにより運用系インスタンス200の状態を取得可能、かつ、APIにより運用系インスタンス200に正常にタグ付けを行えたか否かを判定する。APIにより運用系インスタンス200の状態を取得可能、かつ、APIにより運用系インスタンス200に正常にタグ付けを行えた場合、ステップS75に処理が進む。APIにより運用系インスタンス200の状態を取得可能でない場合、または、APIにより運用系インスタンス200の状態を取得可能であってもタグ付けを正常に行えなかった場合、運用系状態確認処理が終了する。
【0112】
ここで、クラスタ監視部320は、ステップS70の状態確認の結果として取得されたタグのタイムスタンプt1とステップS73の状態確認の結果として取得されたタグのタイムスタンプt2との比較に応じて、タグ付けを正常に行えたか否かを判定する。すなわち、クラスタ監視部320は、タイムスタンプt1に対してタイムスタンプt2が更新されている場合、正常にタグ付けを行えたと判定する。一方、クラスタ監視部320は、タイムスタンプt1に対してタイムスタンプt2が更新されていなかった場合、正常にタグ付けを行えなかったと判定する。
【0113】
(S75)クラスタ監視部320は、運用系インスタンス200の障害(インスタンス障害)であると判断する。
(S76)クラスタ監視部320は、運用系インスタンス200の障害と判断した旨をチェック結果ログ311に出力する。
【0114】
(S77)クラスタ監視部320は、フラグファイル312を作成し、記憶部310に格納する。そして、運用系状態確認処理が終了する。
図13は、待機系状態確認処理の例を示すフローチャートである。
【0115】
待機系状態確認処理はステップS38に相当する。
(S80)クラスタ監視部320は、待機系インスタンス300の状態を確認するAPIを実行する。例えばクラスタ監視部320は、前述のAPI「DescribeInstances」のコマンドを発行することで、APIエンドポイント600を介して、待機系インスタンス300の状態確認を行える。
【0116】
(S81)クラスタ監視部320は、APIエンドポイント600による待機系インスタンス300の状態確認の結果を取得し、状態確認の結果に基づいて当該APIにより待機系インスタンス300の状態を取得可能であるか否かを判定する。待機系インスタンス300の状態を取得可能である場合、ステップS82に処理が進む。待機系インスタンス300の状態を取得不可能である場合、ステップS85に処理が進む。ここで、待機系インスタンス300の状態確認が正常に行えた場合、状態確認の結果は、待機系インスタンス300に対して付与済のタグの情報(タグキーおよびタグ値)を含む。当該タグのタグキーは例えば「AZFailureTest」である。タグ値は、待機系インスタンス300への前回タグ付与時のタイムスタンプである。
【0117】
(S82)クラスタ監視部320は、待機系インスタンス300にタグ付けを行うAPIを実行する。例えばクラスタ監視部320は、前述のAPI「CreateTags」のコマンドを発行することで、APIエンドポイント600を介して、待機系インスタンス300へのタグ付けを行える。ここで、クラスタ監視部320は、タグ付けの際、例えばタグキーを「AZFailureTest」とし、タグ値を現在のタイムスタンプとする。
【0118】
(S83)クラスタ監視部320は、待機系インスタンス300の状態を確認するAPIを実行する。例えば、クラスタ監視部320は、前述のAPI「DescribeInstances」のコマンドを発行することで、APIエンドポイント600を介して、待機系インスタンス300の状態確認を行える。
【0119】
(S84)クラスタ監視部320は、APIにより待機系インスタンス300の状態を取得可能、かつ、APIにより待機系インスタンス300に正常にタグ付けを行えたか否かを判定する。APIにより待機系インスタンス300の状態を取得可能、かつ、APIにより待機系インスタンス300に正常にタグ付けを行えた場合、ステップS85に処理が進む。APIにより待機系インスタンス300の状態を取得可能でない場合、または、APIにより待機系インスタンス300の状態を取得可能であってもタグ付けを正常に行えなかった場合、待機系状態確認処理が終了する。
【0120】
ここで、クラスタ監視部320は、ステップS80の状態確認の結果として取得されたタグのタイムスタンプt3とステップS83の状態確認の結果として取得されたタグのタイムスタンプt4との比較に応じて、タグ付けを正常に行えたか否かを判定する。すなわち、クラスタ監視部320は、タイムスタンプt3に対してタイムスタンプt4が更新されている場合、正常にタグ付けを行えたと判定する。一方、クラスタ監視部320は、タイムスタンプt3に対してタイムスタンプt4が更新されていなかった場合、正常にタグ付けを行えなかったと判定する。
【0121】
(S85)クラスタ監視部320は、APIエンドポイント障害と判断する。
(S86)クラスタ監視部320は、APIエンドポイント障害と判断した旨をチェック結果ログ311に出力する。
【0122】
(S87)クラスタ監視部320は、フラグファイル312を作成し、記憶部310に格納する。そして、待機系状態確認処理が終了する。
このようにして、待機系インスタンス300は、運用系インスタンス200における障害原因を迅速に特定することができる。例えば、待機系インスタンス300は、運用系インスタンス200がAZ2a1の障害により確実に停止していることを迅速に特定することができる。また、待機系インスタンス300は、運用系インスタンス200が確実に停止していることが確認されない限り、運用系インスタンス200から待機系インスタンス300へのアプリケーションの切り替えを行わないように制御可能になる。これにより、待機系インスタンス300は、ストレージ400,500におけるデータ破壊のリスクを抑えて、運用系インスタンス200から待機系インスタンス300への切り替えを安全に行えるようになる。
【0123】
また、上記の手順は、待機系インスタンス300により実行される処理であるため、運用系インスタンス200およびAZ2a1の状態に関わらず実行可能である。更に、待機系インスタンス300によりAZ障害発生の特定を自動で行うことができる。
【0124】
ここで、AZ障害を特定する第1の比較例の方法として、ユーザがクラウドサービスの公式情報を定期的に確認してAZ障害を特定することも考えられる。しかし、第1の比較例の方法では、公式情報が発表されるまでの時間を考慮しなければならず、障害発生直後に即座に対応できるとは限らない。さらにこの場合の業務復旧はユーザが手動で行うこととなる。したがってミッションクリティカルなシステムでは現実的ではない。また、定期的に公式情報にアクセスして確認するなどユーザの手間もかかる。
【0125】
一方、待機系インスタンス300は、AZ障害を自動で検出することができるため、ユーザがクラウドサービスの公式情報を確認してAZ障害を特定する手間を省くことができる。このように、待機系インスタンス300は、ユーザの負担を軽減できるとともに、AZ障害を即座に検出可能となる。
【0126】
また、第2の比較例の方法として、クラスタ構成の2つのノード間の死活監視をハートビートで行い、ハートビートの遮断のみで異常を検知して、待機系へ切り替える方法も考えられる。しかし、ハートビート断はAZ障害のみならず、OSの障害やネットワークの障害でも発生するため、これらの事象とAZ障害との区別ができないことがある。更に、AZ障害であった場合、APIとの疎通が途絶えるため電源断による強制停止を実行できず、異常があった系のインスタンス状態を確認することができなくなる。このため、待機系でアプリケーションを実行してしまうと、運用系/待機系の両方からのデータアクセスによるデータ破壊のリスクが生じ、待機系への切り替えを行うことができない。
【0127】
一方、待機系インスタンス300は、運用系インスタンス200の状態をAPIで確認できない場合でもAZ障害による異常発生を検出できる。このため、待機系インスタンス300は、AZ障害で運用系インスタンス200の電源断が確認できない場合や同期型強制停止方式の場合でも待機系インスタンス300への切り替えを安全に行える。
【0128】
以上説明したように、待機系インスタンス300は次の処理を実行する。なお、クラスタ監視部320の処理は、クラスタ監視部320として機能するプロセッサにより実行される処理であると言える。
【0129】
クラスタ監視部320は、運用系インスタンス200とのハートビートが遮断されると、運用系インスタンス200の強制停止を行う。クラスタ監視部320は、運用系インスタンス200の強制停止に失敗すると、運用系インスタンス200および待機系インスタンス300それぞれへタグを付与するコマンドを発行する。クラスタ監視部320は、当該コマンドの実行結果に基づいて、AZ2a1の障害が発生していることを特定する。これにより、待機系インスタンス300は、運用系側のAZ障害、すなわち、ゾーン障害の発生を迅速に特定可能になる。ここで、運用系インスタンス200は、運用系ノード10の一例である。待機系インスタンス300は、待機系ノード20の一例である。AZ2a1は第1ゾーンZ1の一例である。
【0130】
具体的には、クラスタ監視部320は、運用系インスタンス200に対するタグの付与を正常に行えず、かつ、待機系インスタンス300に対するタグの付与を正常に行えるか否かを判定する。クラスタ監視部320は、当該判定の結果が真の場合、AZ2a1の障害が発生していると判断する、これにより、待機系インスタンス300は、運用系側のAZ障害の発生を適切に特定可能になる。
【0131】
また、クラスタ監視部320は、運用系インスタンス200に対するタグの付与を正常に行える場合、AZ2a1の障害ではなく、運用系インスタンス200単体の障害、すなわち、インスタンス障害が発生していると判断する。これにより、待機系インスタンス300は、運用系側のAZ障害と運用系インスタンス200のインスタンス障害との切り分けを行うことができる。
【0132】
また、クラスタ監視部320は、運用系インスタンス200の強制停止に失敗すると、タグ付与のコマンドを発行する前に、AZ2a1における、運用系インスタンス200が属するネットワークに対してpingなどの疎通確認を行ってもよい。クラスタ監視部320は、当該疎通確認に対する応答があるか否かを判定し、疎通確認に対する応答がある場合、AZ2a1の障害が発生していないと判断してもよい。これにより、待機系インスタンス300は、運用系側のAZ障害が発生していないことを適切に特定可能になる。
【0133】
また、クラスタ監視部320は、上記の疎通確認に対する応答がある場合、運用系インスタンス200の強制停止の実行指示を受け付けるAPIエンドポイント600の障害が発生したと判断してもよい。これにより、クラスタ監視部320は、APIエンドポイント600の障害を特定可能になる。
【0134】
また、クラスタ監視部320は、上記の疎通確認に対する応答がない場合、所定の外部ネットワークサービスにアクセスできるか否かを判定する。クラスタ監視部320は、当該外部ネットワークサービスにアクセスできない場合、AZ2a2における、待機系インスタンス300が属するネットワークの障害が発生していると判断する。これにより、待機系インスタンス300は、待機系側ネットワークの障害を特定可能になる。ここで、AZ2a2は第2ゾーンZ2の一例である。
【0135】
また、クラスタ監視部320は、上記の外部ネットワークサービスにアクセスできる場合に、運用系インスタンス200および待機系インスタンス300それぞれへのタグ付与のコマンドを発行してもよい。クラスタ監視部320は、運用系インスタンス200に対するタグの付与を正常に行えず、かつ、待機系インスタンス300に対するタグの付与を正常に行えない場合、当該コマンドを受け付けるAPIエンドポイント600の障害が発生したと判断してもよい。これにより、待機系インスタンス300は、APIエンドポイント600の障害を特定可能になる。
【0136】
更に、クラスタ監視部320は、運用系インスタンス200の強制停止に成功すると、AZ2a1の障害が発生していないと判断する。これにより、待機系インスタンス300は、運用系側のAZ障害が発生していないことを適切に特定可能になる。例えば、クラスタ監視部320は、運用系インスタンス200の強制停止に成功した場合、ハートビート用のネットワークであるインタコネクトネットワークN12の障害が発生したと判断してもよい。これにより、クラスタ監視部320は、ハートビート断の原因を適切に切り分けることができる。
【0137】
また、クラスタ監視部320は、特定した障害の原因を示す情報を出力してもよい。例えば、クラスタ監視部320は、特定した障害の原因を示す情報を端末装置4に送信し、当該情報をユーザに提示してもよい。これにより、待機系インスタンス300は、ユーザによる障害原因の迅速な把握を支援できる。
【0138】
更に、クラスタ監視部320は、AZ2a1のAZ障害を特定した場合、運用系インスタンス200が停止していることから、運用系インスタンス200におけるアプリケーションの実行を引き継いでもよい。これにより、待機系インスタンス300は、当該アプリケーションの運用の可用性を向上できる。
【0139】
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体113に記録できる。
【0140】
例えば、プログラムを記録した記録媒体113を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体113に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【0141】
1 クラスタシステム
10 運用系ノード
11,21 記憶部
12,22 処理部
20 待機系ノード
30 API管理ノード
40 ストレージ
N1 第1ネットワーク
N2 第2ネットワーク
Z1 第1ゾーン
Z2 第2ゾーン