(57)【要約】【課題】クラスタシステムにおけるスプリットブレイン状態を防止することができる、ノード装置及びフェイルオーバ制御方法を提供する。【解決手段】ノード装置１０−１において報告取得制御部１１Ｃ−１は、ノード装置１０−２から所定周期で送信されるハートビート信号を所定期間において受信しない場合、ノード装置１０−２の物理マシンに設けられた仮想マシン監視部１３−２に対してノード装置１０−２の稼働状態に関する報告を要求する報告要求信号を送信することにより、ノード装置１０−２の仮想マシンの稼働状態情報を含む報告を取得する。そして、フェイルオーバ制御部１１Ｂ−１は、報告取得制御部１１Ｃ−１によって取得された報告に含まれる稼働状態情報とノード装置１０−２の仮想マシンにおける無応答状態が一時的か否かについての判定基準とに基づいて、フェイルオーバを実行するか否かを判定する、フェイルオーバ実行判定処理を実行する。【選択図】図１
2019061507.tif 000002
【特許請求の範囲】
【請求項１】
複数のノード装置による連携構成を有するクラスタシステムにおけるノード装置であって、
自ノード装置の物理マシンに設けられて、前記自ノード装置の仮想マシンを制御する仮想マシン制御部と、
前記自ノード装置の物理マシンに設けられて、他ノード装置から送信され且つ前記自ノード装置の稼働状態に関する報告を要求する報告要求信号に応じて、前記自ノード装置の仮想マシンの稼働状態情報を前記仮想マシン制御部から取得すると共に、前記取得した自ノード装置の仮想マシンの稼働状態情報を含めた報告を前記他ノード装置へ送信する、仮想マシン監視部と、
前記自ノード装置の仮想マシンに設けられて、前記他ノード装置から所定周期で送信されるハートビート信号を所定期間において受信しない場合、前記他ノード装置の物理マシンに設けられた仮想マシン監視部に対して前記他ノード装置の稼働状態に関する報告を要求する報告要求信号を送信することにより、前記他ノード装置の仮想マシンの稼働状態情報を含む報告を取得する報告取得制御部と、
前記自ノード装置の仮想マシンに設けられて、前記報告取得制御部によって取得された報告に含まれる稼働状態情報と前記他ノード装置の仮想マシンにおける無応答状態が一時的か否かについての判定基準とに基づいて、フェイルオーバを実行するか否かを判定する、フェイルオーバ実行判定処理を実行する、フェイルオーバ制御部と、
を具備する、ノード装置。
【請求項２】
前記判定基準は、前記他ノード装置の仮想マシンが停止状態であるときには前記他ノード装置の仮想マシンにおける無応答状態が一時的ではない、という基準を含み、
前記フェイルオーバ制御部は、前記報告取得制御部によって取得された報告に含まれる稼働状態情報が前記他ノード装置の仮想マシンの停止状態を示す場合、フェイルオーバを実行すると判定する、
請求項１記載のノード装置。
【請求項３】
前記他ノード装置の稼働状態情報は、前記他ノード装置の仮想マシンの稼働経過時間を含み、
前記判定基準は、前記他ノード装置の仮想マシンが起動状態にあり且つ前記他ノード装置の仮想マシンの稼働経過時間が第１所定値以下であるときには前記他ノード装置の仮想マシンにおける無応答状態が一時的ではない、という基準を含み、
前記フェイルオーバ制御部は、前記報告取得制御部によって取得された報告に含まれる稼働状態情報が前記他ノード装置の仮想マシンの起動状態を示し且つ前記稼働経過時間が前記第１所定値以下である場合、フェイルオーバを実行すると判定する、
請求項２記載のノード装置。
【請求項４】
前記フェイルオーバ制御部は、前記フェイルオーバ実行判定処理においてフェイルオーバを実行しないと判定される度に、前記報告取得制御部に対して前記報告要求信号を送信させると共に、前記報告要求信号を送信させた回数をカウントする、
請求項３記載のノード装置。
【請求項５】
前記フェイルオーバ制御部は、前記報告取得制御部によって取得された報告に含まれる稼働状態情報が前記他ノード装置の仮想マシンの起動状態を示し且つ前記稼働経過時間が前記第１所定値よりも大きい場合、前記カウントされた回数と第２所定値との大小を判定し、
前記カウントされた回数が前記第２所定値よりも大きい場合、前記他ノード装置の仮想マシンにおける無応答状態が一時的ではないと判定して、前記フェイルオーバを実行すると判定する共に、前記他ノード装置の仮想マシンを停止する停止要求信号を前記他ノード装置へ送信し、
前記カウントされた回数が前記第２所定値以下である場合、前記フェイルオーバを実行しないと判定して、前記報告取得制御部に対して前記報告要求信号を送信させる、
請求項４記載のノード装置。
【請求項６】
第１ノード装置及び第２ノード装置による連携構成を有するクラスタシステムにおける前記第１ノード装置によって実行されるフェイルオーバ制御方法であって、
前記第１ノード装置は、前記第１ノード装置の物理マシンに設けられた、仮想マシン制御部及び仮想マシン監視部と、前記第１ノード装置の仮想マシンに設けられた、報告取得制御部及びフェイルオーバ制御部とを有し、
前記フェイルオーバ制御方法は、
前記仮想マシン制御部が、前記第１ノード装置の仮想マシンを制御し、
前記仮想マシン監視部が、前記第２ノード装置から送信され且つ前記第１ノード装置の稼働状態に関する報告を要求する報告要求信号に応じて、前記第１ノード装置の仮想マシンの稼働状態情報を前記仮想マシン制御部から取得すると共に、前記取得した第１ノード装置の仮想マシンの稼働状態情報を含めた報告を前記第２ノード装置へ送信し、
前記報告取得制御部が、前記第２ノード装置から所定周期で送信されるハートビート信号を所定期間において受信しない場合、前記第２ノード装置の物理マシンに設けられた仮想マシン監視部に対して前記第２ノード装置の稼働状態に関する報告を要求する報告要求信号を送信することにより、前記第２ノード装置の仮想マシンの稼働状態情報を含む報告を取得し、
前記フェイルオーバ制御部が、前記報告取得制御部によって取得された報告に含まれる稼働状態情報と前記第２ノード装置の仮想マシンにおける無応答状態が一時的か否かについての判定基準とに基づいて、フェイルオーバを実行するか否かをさらに判定するフェイルオーバ実行判定処理を実行する、
フェイルオーバ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ノード装置及びフェイルオーバ制御方法に関する。
【背景技術】
【０００２】
従来、継続的にサービスを提供するために、複数のノード装置（例えば、複数のコンピュータ）による連携構成を有するクラスタシステム（例えば、ＨＡ（High Availability）クラスタシステム）が提案されている（例えば、特許文献１−３）。特許文献１−３に開示されているクラスタシステムでは、第１ノード装置に異常を検出した場合、第１ノード以外の第２ノード装置に第１ノード装置の処理を引き継がせるために、フェイルオーバが実行される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１７−０８４３３３号公報
【特許文献２】特開２００９−０８０７０４号公報
【特許文献３】特開２００８−０５２４０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明者は、仮想マシン上のＯＳ（オペレーティングシステム）の「無応答状態（フリーズ状態）」は、物理マシンのＣＰＵ（Central Processing Unit）やメモリが一時的に占有されることによって発生することがあることに着目した。この仮想マシンの無応答状態は、物理マシン側で占有していたＣＰＵやメモリが解放されることで解消されるため、永続的なものではなく一時的なものである。
【０００５】
そして、本発明者は、クラスタソフトが仮想マシン上のＯＳで動作している場合、第１ノード装置の仮想マシン上のＯＳの一時的なフリーズ状態を、第２ノード装置の仮想マシンで動作しているクラスタソフトがＯＳの停止として検出してしまい、第１ノード装置の仮想マシンの業務を第２ノード装置の仮想マシンへ移動させるフェイルオーバが発生してしまうことを見出した。そして、本発明者は、フェイルオーバ発生後、第２ノード装置の仮想マシンのフリーズ状態が解消された場合、第１ノード装置の仮想マシン及び第２ノード装置の仮想マシンの両方で同一業務が動作している状態（スプリットブレイン（Split-Brain）状態）となり、業務データの一貫性が崩れてしまう可能性があることを見出した。
【０００６】
本発明の目的は、クラスタシステムにおけるスプリットブレイン状態を防止することができる、ノード装置及びフェイルオーバ制御方法を提供することにある。
【課題を解決するための手段】
【０００７】
本発明の第１の態様にかかるノード装置は、複数のノード装置による連携構成を有するクラスタシステムにおけるノード装置であって、自ノード装置の物理マシンに設けられて、前記自ノード装置の仮想マシンを制御する仮想マシン制御部と、前記自ノード装置の物理マシンに設けられて、他ノード装置から送信され且つ前記自ノード装置の稼働状態に関する報告を要求する報告要求信号に応じて、前記自ノード装置の仮想マシンの稼働状態情報を前記仮想マシン制御部から取得すると共に、前記取得した自ノード装置の仮想マシンの稼働状態情報を含めた報告を前記他ノード装置へ送信する、仮想マシン監視部と、前記自ノード装置の仮想マシンに設けられて、前記他ノード装置から所定周期で送信されるハートビート信号を所定期間において受信しない場合、前記他ノード装置の物理マシンに設けられた仮想マシン監視部に対して前記他ノード装置の稼働状態に関する報告を要求する報告要求信号を送信することにより、前記他ノード装置の仮想マシンの稼働状態情報を含む報告を取得する報告取得制御部と、前記自ノード装置の仮想マシンに設けられて、前記報告取得制御部によって取得された報告に含まれる稼働状態情報と前記他ノード装置の仮想マシンにおける無応答状態が一時的か否かについての判定基準とに基づいて、フェイルオーバを実行するか否かを判定する、フェイルオーバ実行判定処理を実行する、フェイルオーバ制御部と、を具備する。
【０００８】
本発明の第２の態様にかかるフェイルオーバ制御方法は、第１ノード装置及び第２ノード装置による連携構成を有するクラスタシステムにおける前記第１ノード装置によって実行されるフェイルオーバ制御方法であって、前記第１ノード装置は、前記第１ノード装置の物理マシンに設けられた、仮想マシン制御部及び仮想マシン監視部と、前記第１ノード装置の仮想マシンに設けられた、報告取得制御部及びフェイルオーバ制御部とを有し、前記フェイルオーバ制御方法は、前記仮想マシン制御部が、前記第１ノード装置の仮想マシンを制御し、前記仮想マシン監視部が、前記第２ノード装置から送信され且つ前記第１ノード装置の稼働状態に関する報告を要求する報告要求信号に応じて、前記第１ノード装置の仮想マシンの稼働状態情報を前記仮想マシン制御部から取得すると共に、前記取得した第１ノード装置の仮想マシンの稼働状態情報を含めた報告を前記第２ノード装置へ送信し、前記報告取得制御部が、前記第２ノード装置から所定周期で送信されるハートビート信号を所定期間において受信しない場合、前記第２ノード装置の物理マシンに設けられた仮想マシン監視部に対して前記第２ノード装置の稼働状態に関する報告を要求する報告要求信号を送信することにより、前記第２ノード装置の仮想マシンの稼働状態情報を含む報告を取得し、前記フェイルオーバ制御部が、前記報告取得制御部によって取得された報告に含まれる稼働状態情報と前記第２ノード装置の仮想マシンにおける無応答状態が一時的か否かについての判定基準とに基づいて、フェイルオーバを実行するか否かをさらに判定するフェイルオーバ実行判定処理を実行する。
【発明の効果】
【０００９】
本発明により、クラスタシステムにおけるスプリットブレイン状態を防止することができる、ノード装置及びフェイルオーバ制御方法を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態のクラスタシステムの一例を示す図である。
【図２】第１実施形態のノード装置の構成の一例を示す図である。
【図３】第２実施形態のノード装置の構成の一例を示す図である。
【図４】第２実施形態のノード装置のハートビート送信処理の一例を示すフローチャートである。
【図５】第２実施形態のノード装置の異常検出処理の一例を示すフローチャートである。
【図６】第２実施形態のノード装置の処理動作の一例を示すシーケンス図である。
【図７】第２実施形態のノード装置のフェイルオーバ実行判定処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面を参照しつつ、実施形態について説明する。なお、実施形態において、同一又は同等の要素には、同一の符号を付し、重複する説明は省略される。
【００１２】
＜第１実施形態＞
＜クラスタシステムの概要＞
図１は、第１実施形態のクラスタシステムの一例を示す図である。図１において、クラスタシステム１は、通信ネットワークＮ１を介して互いに接続されている、複数のノード装置１０を有している。ここでは、クラスタシステム１はノード装置１０−１，１０−２の２つを有しているが、クラスタシステム１に含まれるノード装置１０の数は、２つに限定されるものではない。ノード装置１０−１，１０−２は、互いに同じ構成を有している。以下では、ノード装置１０−１，１０−２を総称して、ノード装置１０と呼ぶことがある。
【００１３】
そして、ノード装置１０−１，１０−２は、継続的にサービスを提供するために、連携している。すなわち、例えばノード装置１０−２の異常をノード装置１０−１が検出した場合、ノード装置１０−１は、「所定の条件」が満たされたときに、ノード装置１０−２の処理を引き継ぐフェイルオーバを実行する。
【００１４】
＜ノード装置の構成例＞
図２は、第１実施形態のノード装置の構成の一例を示す図である。図２において、ノード装置（物理マシン）１０は、仮想マシン１１と、仮想マシン制御部１２と、仮想マシン監視部１３とを有している。仮想マシン１１、仮想マシン制御部（仮想化ソフト）１２、及び仮想マシン監視部（仮想マシン監視ソフト）１３は、物理マシンのＯＳ上で処理動作を実行する。すなわち、仮想マシン１１、仮想マシン制御部１２、及び仮想マシン監視部１３は、物理マシン上に設けられている。なお、図２においてノード装置１０−１の構成要素には、枝番が１である符号が付され、ノード装置１０−２の構成要素には、枝番が２である符号が付されている。すなわち、仮想マシン１１−１は、ノード装置１０−１の構成要素であり、仮想マシン１１−２は、ノード装置１０−２の構成要素である。
【００１５】
仮想マシン制御部１２は、仮想マシン１１を制御する共に、仮想マシン１１の稼働状態に関する情報（厳密には、仮想マシン１１のＯＳの稼働状態に関する情報）を保持する。この仮想マシン１１の稼働状態に関する情報は、例えば、仮想マシン１１（厳密には、仮想マシン１１のＯＳ）が起動状態にあるか又は停止状態にあるかを示す情報、及び、仮想マシン１１が起動してから現在までの経過時間に関する情報が含まれる。以下では、「仮想マシン１１の稼働状態に関する情報」を、「稼働状態情報」と呼ぶことがある。
【００１６】
仮想マシン監視部１３は、他ノード装置１０から送信された「報告要求信号」に応じて、自ノード装置１０の仮想マシンの稼働状態情報を仮想マシン制御部１２から取得する。他ノード装置１０から送信された「報告要求信号」は、自ノード装置１０の稼働状態に関する報告を他ノード装置１０が要求するための信号である。ここで、ノード装置１０−１の機能部（例えば、仮想マシン監視部１３）にとって、自ノード装置１０はノード装置１０−１を意味し、他ノード装置１０はノード装置１０−２を意味する。
【００１７】
そして、仮想マシン監視部１３は、仮想マシン制御部１２から取得した自ノード装置１０の仮想マシンの稼働状態情報を含めた報告を他ノード装置１０へ送信する。報告要求信号の伝送及び報告の伝送には、例えば、ＴＣＰ（Transmission Control Protocol）が用いられる。
【００１８】
仮想マシン１１は、ＨＡクラスタ制御部１１Ａを有している。そして、ＨＡクラスタ制御部１１Ａは、フェイルオーバ制御部１１Ｂと、報告取得制御部１１Ｃとを含んでいる。ＨＡクラスタ制御部１１Ａは、仮想マシン１１のＯＳ上で処理動作を実行する。すなわち、フェイルオーバ制御部１１Ｂ及び報告取得制御部１１Ｃは、仮想マシン１１上に設けられている。
【００１９】
報告取得制御部１１Ｃは、他ノード装置１０から所定周期で送信される「ハートビート信号」を「所定期間」において受信しない場合、他ノード装置１０の物理マシンに設けられた仮想マシン監視部１３に対して、他ノード装置１０の稼働状態に関する報告を要求する報告要求信号を送信する。これにより、報告取得制御部１１Ｃは、他ノード装置１０の仮想マシン１１の稼働状態情報を含む報告を取得することができる。ここで、「ハートビート信号」の伝送には、例えば、ＵＤＰ（User Diagram Protocol）が用いられる。また、「ハートビート信号」を「所定期間」において受信しないこと（つまり、ハートビートタイムアウト）とは、例えば、前回のハートビート信号を受信したタイミングからハートビート信号の送信間隔以上の時間が経過しても今回のハートビート信号を受信しないことである。ノード装置１０−１とノード装置１０−２との間で、周期的にハートビート信号を送り合うことにより、互いのＨＡクラスタ制御部１１Ａが動作していることを確認している。従って、「ハートビート信号」を「所定期間」において受信しない場合、他ノード装置１０の仮想マシン１１における「無応答状態」が生じたことになる。
【００２０】
フェイルオーバ制御部１１Ｂは、報告取得制御部１１Ｃによって取得された報告に含まれる「稼働状態情報」と「他ノード装置１０の仮想マシン１１における無応答状態が一時的か否かについての判定基準」とに基づいて、フェイルオーバを実行するか否かを判定する、フェイルオーバ実行判定処理を実行する。
【００２１】
以上のように第１実施形態によれば、ノード装置１０の物理マシンに仮想マシン制御部１２及び仮想マシン監視部１３を設けたことにより、仮想マシン１１の稼働状態を確実に取得することができる。そして、ノード装置１０は、他ノード装置１０から取得した他ノード装置１０の「稼働状態情報」と「他ノード装置の仮想マシン１１における無応答状態が一時的か否かについての判定基準」とに基づいて、フェイルオーバを実行するか否かを判定するので、「スプリットブレイン状態」が生じてしまうことを防止することができる。
【００２２】
＜第２実施形態＞
第２実施形態は、より具体的な実施形態に関する。なお、第２実施形態のクラスタシステムの基本構成は、第１実施形態のクラスタシステム１と同じなので、図１を参照して説明する。
【００２３】
＜ノード装置の構成例＞
図３は、第２実施形態のノード装置の構成の一例を示す図である。第２実施形態のノード装置１０においてＨＡクラスタ制御部１１Ａは、図３に示すように、フェイルオーバ制御部１１Ｂと、報告取得制御部１１Ｃと、ハートビート制御部１１Ｄとを有している。
【００２４】
ハートビート制御部１１Ｄは、ハートビート信号を周期的に他ノード装置１０のハートビート制御部１１Ｄに向けて送信する。また、ハートビート制御部１１Ｄは、他ノード装置１０から周期的に送信されるハートビート信号を受信する。そして、ハートビート制御部１１Ｄは、他ノード装置１０から所定周期で送信される「ハートビート信号」を「所定期間」において受信しない場合、報告取得制御部１１Ｃへ「通知信号」を出力する。
【００２５】
報告取得制御部１１Ｃは、ハートビート制御部１１Ｄから「通知信号」を受け取ると、他ノード装置１０の物理マシンに設けられた仮想マシン監視部１３に対して、他ノード装置１０の稼働状態に関する報告を要求する報告要求信号を送信する。これにより、報告取得制御部１１Ｃは、他ノード装置１０の仮想マシン１１の稼働状態情報を含む報告を取得することができる。
【００２６】
フェイルオーバ制御部１１Ｂは、報告取得制御部１１Ｃによって取得された報告に含まれる「稼働状態情報」と「他ノード装置１０の仮想マシン１１における無応答状態が一時的か否かについての判定基準」とに基づいて、フェイルオーバを実行するか否かを判定する、フェイルオーバ実行判定処理を実行する。特に、フェイルオーバ制御部１１Ｂは、他ノード装置１０の仮想マシン１１における無応答状態が一時的でない場合、フェイルオーバを実行すると判定する。
【００２７】
具体的には、上記判定基準は、他ノード装置１０の仮想マシン１１が停止状態であるときには他ノード装置１０の仮想マシン１１における無応答状態が一時的ではない、という基準を含んでいる。そして、フェイルオーバ制御部１１Ｂは、報告取得制御部１１Ｃによって取得された報告に含まれる稼働状態情報が他ノード装置１０の仮想マシン１１の停止状態を示す場合、フェイルオーバを実行すると判定する。
【００２８】
また、上記の判定基準は、他ノード装置１０の仮想マシン１１が起動状態にあり且つ他ノード装置１０の仮想マシン１１の稼働経過時間が「第１所定値」以下であるときには他ノード装置１０の仮想マシン１１における無応答状態が一時的ではない、という基準を含んでいる。そして、フェイルオーバ制御部１１Ｂは、報告取得制御部１１Ｃによって取得された報告に含まれる稼働状態情報が他ノード装置１０の仮想マシン１１の起動状態を示し且つ稼働経過時間が「第１所定値」以下である場合、フェイルオーバを実行すると判定する。ここで、「他ノード装置１０の仮想マシン１１の稼働経過時間」は、上記の他ノード装置１０の稼働状態情報に含まれている。
【００２９】
また、フェイルオーバ制御部１１Ｂは、上記のフェイルオーバ実行判定処理においてフェイルオーバを実行しないと判定される度に、報告取得制御部１１Ｃに対して報告要求信号を送信させると共に、報告要求信号を送信させた回数（つまり、リトライ回数）をカウント（インクリメント）する。
【００３０】
また、フェイルオーバ制御部１１Ｂは、報告取得制御部１１Ｃによって取得された報告に含まれる稼働状態情報が他ノード装置１０の仮想マシン１１の起動状態を示し且つ稼働経過時間が「第１所定値」よりも大きい場合、上記のカウント回数と「第２所定値」との大小を判定する。そして、フェイルオーバ制御部１１Ｂは、カウント回数が「第２所定値」より大きい場合、他ノード装置１０の仮想マシン１１における無応答状態が一時的ではないと判定して、フェイルオーバを実行すると判定する共に、他ノード装置１０の仮想マシン１１を停止する停止要求信号を他ノード装置１０へ送信する。一方、フェイルオーバ制御部１１Ｂは、カウント回数が「第２所定値」以下である場合、フェイルオーバをこのタイミングでは実行しないと判定して、報告取得制御部１１Ｃに対して報告要求信号を送信させる。
【００３１】
＜ノード装置の動作例＞
以上の構成を有するノード装置１０の処理動作の一例について説明する。図４から図７は、第２実施形態のノード装置の処理動作の一例を示す図である。
【００３２】
〈ハートビート送信処理〉
図４は、第２実施形態のノード装置のハートビート送信処理の一例を示すフローチャートである。
【００３３】
ハートビート制御部１１Ｄは、他ノード装置１０に向けてハートビート信号を送信すると共に、ハートビート制御部１１Ｄが有している送信タイマ（図示せず）をスタートさせる（ステップＳ１０１）。
【００３４】
ハートビート制御部１１Ｄは、ハートビート信号の送信タイミングからの経過時間がハートビート送信間隔値に到達するまで待つ（ステップＳ１０２ＮＯ）。
【００３５】
そして、経過時間がハートビート送信間隔値に到達すると（ステップＳ１０２ＹＥＳ）、処理ステップは、ステップＳ１０１に戻る。すなわち、ハートビート制御部１１Ｄは、他ノード装置１０に向けてハートビート信号を送信すると共に、ハートビート制御部１１Ｄが有している送信タイマ（図示せず）をリセットする。
【００３６】
以上のようにして、ハートビート制御部１１Ｄは、ハートビート信号を所定周期で送信する。
【００３７】
〈他ノード装置の異常検出処理〉
図５は、第２実施形態のノード装置の異常検出処理の一例を示すフローチャートである。この異常検出処理は、上記のハートビート送信処理と並行して実行される。
【００３８】
ハートビート制御部１１Ｄは、他ノード装置１０からのハートビート信号を受信するまで待つ（ステップＳ２０１ＮＯ）。
【００３９】
他ノード装置１０からのハートビート信号を受信すると（ステップＳ２０１ＹＥＳ）、ハートビート制御部１１Ｄは、ハートビート制御部１１Ｄが有している受信タイマ（図示せず）をスタートさせる（ステップＳ２０２）。
【００４０】
次いで、ハートビート制御部１１Ｄは、受信タイミングからの経過時間がハートビート送信間隔値よりも所定値以上超えたか否かを判定する（ステップＳ２０３）。なお、所定値は、ゼロ又は正の値である。
【００４１】
経過時間がハートビート送信間隔値よりも所定値以上超えていない場合（ステップＳ２０３ＮＯ）、ハートビート制御部１１Ｄは、他ノード装置１０からのハートビート信号を受信したか否かを判定する（ステップＳ２０４）。
【００４２】
他ノード装置１０からのハートビート信号を受信していない場合（ステップＳ２０４ＮＯ）、処理ステップは、ステップＳ２０３に戻る。
【００４３】
他ノード装置１０からのハートビート信号を受信した場合（ステップＳ２０４ＹＥＳ）、処理ステップは、ステップＳ２０２に戻る。
【００４４】
すなわち、ハートビート制御部１１Ｄは、受信タイミングからの経過時間がハートビート送信間隔値よりも所定値以上超えるまで他ノード装置１０からのハートビート信号の受信を待つ（ステップＳ２０３ＮＯ、ステップＳ２０４ＮＯ）。そして、ハートビート制御部１１Ｄは、経過時間がハートビート送信間隔値よりも所定値以上超える前に他ノード装置１０からのハートビート信号を受信すると（ステップＳ２０３ＮＯ、ステップＳ２０４ＹＥＳ）、受信タイマ（図示せず）をリセットする（ステップＳ２０２）。
【００４５】
経過時間がハートビート送信間隔値よりも所定値以上超える前に他ノード装置１０からのハートビート信号を受信することなしに、経過時間がハートビート送信間隔値よりも所定値以上超えた場合（ステップＳ２０３ＹＥＳ）、ハートビート制御部１１Ｄは、報告取得制御部１１Ｃへ「通知信号」を出力する（ステップＳ２０５）。
【００４６】
〈報告要求処理及び報告取得処理〉
図６は、第２実施形態のノード装置の処理動作の一例を示すシーケンス図である。ここでは、ノード装置１０−１のハートビート制御部１１Ｄが、経過時間がハートビート送信間隔値よりも所定値以上超える前にノード装置１０−２からのハートビート信号を受信することなしに、経過時間がハートビート送信間隔値よりも所定値以上超えたことを検出したものとする。
【００４７】
上記のステップＳ２０５のようにノード装置１０−１のハートビート制御部１１Ｄ−１は、報告取得制御部１１Ｃ−１へ「通知信号」を出力する（ステップＳ３０１）。
【００４８】
ノード装置１０−１の報告取得制御部１１Ｃ−１は、ハートビート制御部１１Ｄ−１から「通知信号」を受け取ると、ノード装置１０−２の物理マシンに設けられた仮想マシン監視部１３−２に対して、ノード装置１０−２の稼働状態に関する報告を要求する報告要求信号を送信する（ステップＳ３０２）。
【００４９】
ノード装置１０−２の仮想マシン監視部１３−２は、ノード装置１０−１からの報告要求信号を受け取ると、該報告要求信号を仮想マシン制御部１２−２へ出力する（ステップＳ３０３）。
【００５０】
ノード装置１０−２の仮想マシン制御部１２−２は、報告要求信号を受け取ると、ノード装置１０−２の仮想マシン１１−２の稼働状態情報を仮想マシン監視部１３−２へ出力する（ステップＳ３０４）。
【００５１】
ノード装置１０−２の仮想マシン監視部１３−２は、仮想マシン制御部１２−２から取得したノード装置１０−２の仮想マシン１１−２の稼働状態情報を含めた報告をノード装置１０−１へ送信する（ステップＳ３０５）。
【００５２】
ノード装置１０−１の報告取得制御部１１Ｃ−１は、ノード装置１０−２の仮想マシン１１−２の稼働状態情報を受け取ると、該稼働状態情報を含む報告をフェイルオーバ制御部１１Ｂ−１へ出力する（ステップＳ３０６）。
【００５３】
〈フェイルオーバ実行判定処理〉
ノード装置１０−１のフェイルオーバ制御部１１Ｂ−１は、ノード装置１０−２の仮想マシン１１−２の稼働状態情報を含む報告を受け取ると、フェイルオーバ実行判定処理を実行する（ステップＳ３０７）。
【００５４】
図７は、第２実施形態のノード装置のフェイルオーバ実行判定処理の一例を示すフローチャートである。
【００５５】
ノード装置１０−１のフェイルオーバ制御部１１Ｂ−１は、他ノード装置１０（つまり、ノード装置１０−２）からの報告を取得するまで待つ（ステップＳ４０１ＮＯ）。
【００５６】
ノード装置１０−１のフェイルオーバ制御部１１Ｂ−１は、ノード装置１０−２からの報告を取得すると（ステップＳ４０１ＹＥＳ）、取得した報告に含まれる稼働状態情報がノード１０−２の仮想マシン１１−２の停止状態を示しているか否かを判定する（ステップＳ４０２）。
【００５７】
取得した報告に含まれる稼働状態情報がノード１０−２の仮想マシン１１−２の停止状態を示している場合（ステップＳ４０２ＹＥＳ）、フェイルオーバ制御部１１Ｂ−１は、フェイルオーバを実行すると判定する（ステップＳ４０３）。
【００５８】
取得した報告に含まれる稼働状態情報がノード１０−２の仮想マシン１１−２の停止状態を示していない場合、つまり、取得した報告に含まれる稼働状態情報がノード１０−２の仮想マシン１１−２の起動状態を示している場合（ステップＳ４０２ＮＯ）、フェイルオーバ制御部１１Ｂ−１は、稼働状態情報に含まれる稼働経過時間が「第１所定値」以下であるか否かを判定する（ステップＳ４０４）。
【００５９】
稼働状態情報に含まれる稼働経過時間が「第１所定値」以下である場合（ステップＳ４０４ＹＥＳ）、フェイルオーバ制御部１１Ｂ−１は、フェイルオーバを実行すると判定する（ステップＳ４０３）。
【００６０】
稼働状態情報に含まれる稼働経過時間が「第１所定値」より大きい場合（ステップＳ４０４ＮＯ）、フェイルオーバ制御部１１Ｂ−１は、リトライ回数が「第２所定値」より大きいか否かを判定する（ステップＳ４０５）。初期段階では、リトライ回数が「第２所定値」より小さいので、処理ステップは、ステップＳ４０６へ進む。
【００６１】
リトライ回数が「第２所定値」以下である場合（ステップＳ４０５ＮＯ）、フェイルオーバ制御部１１Ｂ−１は、フェイルオーバをこのタイミングでは実行しないと判定して、報告取得制御部１１Ｃに対して報告要求信号を送信させると共に、報告要求信号を送信させた回数（つまり、リトライ回数）をカウント（インクリメント）する（ステップＳ４０６）。これにより、上記のステップＳ３０２からステップＳ３０６の処理動作が再度行われる。
【００６２】
リトライ回数が「第２所定値」より大きい場合（ステップＳ４０５ＹＥＳ）、フェイルオーバ制御部１１Ｂ−１は、ノード装置１０−２の仮想マシン１１−２における無応答状態が一時的ではないと判定して、フェイルオーバを実行すると判定する共に、ノード装置１０−２の仮想マシン１１−２を停止する停止要求信号をノード装置１０−２へ送信する（ステップＳ４０７，ステップＳ３０８）。
【００６３】
〈停止要求処理〉
ステップＳ３０８においてフェイルオーバ制御部１１Ｂ−１から送信された停止要求信号を受け取ると、ノード装置１０−２の仮想マシン監視部１３−２は、該停止要求信号を仮想マシン制御部１２−２へ出力する（ステップＳ３０９）。
【００６４】
仮想マシン制御部１２−２は、停止要求信号を受け取ると、ノード装置１０−２の仮想マシン１１−２を停止して、停止要求応答を仮想マシン監視部１３−２へ出力する（ステップＳ３１０）。
【００６５】
仮想マシン監視部１３−２は、停止要求応答を受け取ると、該停止要求応答をノード装置１０−１へ送信する（ステップＳ３１１）。
【００６６】
以上のように第２実施形態によれば、ノード装置１０−１は、ノード装置１０−１の物理マシンに設けられた、仮想マシン制御部１２−１及び仮想マシン監視部１３−１と、ノード装置１０−１の仮想マシンに設けられた、報告取得制御部１１Ｃ−１及びフェイルオーバ制御部１１Ｂ−１とを有している。仮想マシン制御部１２−１は、ノード装置１０−１の仮想マシン１１−１を制御する。仮想マシン監視部１３−１は、ノード装置１０−２から送信され且つノード装置１０−１の稼働状態に関する報告を要求する報告要求信号に応じて、ノード装置１０−１の仮想マシン１１−１の稼働状態情報を仮想マシン制御部１２−１から取得すると共に、取得したノード装置１０−１の仮想マシン１１−１の稼働状態情報を含めた報告をノード装置１０−２へ送信する。
【００６７】
このノード装置１０−１の構成により、仮想マシン１１−１の稼働状態を確実に取得することができる。
【００６８】
また、ノード装置１０−１において報告取得制御部１１Ｃ−１は、ノード装置１０−２から所定周期で送信されるハートビート信号を所定期間において受信しない場合、ノード装置１０−２の物理マシンに設けられた仮想マシン監視部１３−２に対してノード装置１０−２の稼働状態に関する報告を要求する報告要求信号を送信することにより、ノード装置１０−２の仮想マシン１１−２の稼働状態情報を含む報告を取得する。そして、フェイルオーバ制御部１１Ｂ−１は、報告取得制御部１１Ｃ−１によって取得された報告に含まれる稼働状態情報とノード装置１０−２の仮想マシン１１−２における無応答状態が一時的か否かについての判定基準とに基づいて、フェイルオーバを実行するか否かを判定する、フェイルオーバ実行判定処理を実行する。
【００６９】
このノード装置１０−１の構成により、「スプリットブレイン状態」が生じてしまうことを防止することができる。
【００７０】
上記の判定基準は、ノード装置１０−２の仮想マシン１１−２が停止状態であるときにはノード装置１０−２の仮想マシン１１−２における無応答状態が一時的ではない、という基準を含んでいる。そして、フェイルオーバ制御部１１Ｂ−１は、報告取得制御部１１Ｃ−１によって取得された報告に含まれる稼働状態情報がノード装置１０−２の仮想マシン１１−２の停止状態を示す場合、フェイルオーバを実行すると判定する。
【００７１】
このノード装置１０−１の構成により、ノード装置１０−２の稼働状態情報がノード装置１０−２の仮想マシン１１−２の停止状態を示しているためノード装置１０−２の仮想マシン１１−２における無応答状態が一時的ではないと判定できる場合には、即座にフェイルオーバを実行することができる。これにより、クラスタシステム１のサービスを滞り無く継続させることができるノード装置１０−１を実現することができる。
【００７２】
また、ノード装置１０−２の稼働状態情報は、ノード装置１０−２の仮想マシン１１−２の稼働経過時間を含んでいる。また、上記の判定基準は、ノード装置１０−２の仮想マシン１１−２が起動状態にあり且つノード装置１０−２の仮想マシン１１−２の稼働経過時間が「第１所定値」以下であるときにはノード装置１０−２の仮想マシン１１−２における無応答状態が一時的ではない、という基準を含んでいる。そして、フェイルオーバ制御部１１Ｂ−１は、報告取得制御部１１Ｃ−１によって取得された報告に含まれる稼働状態情報がノード装置１０−２の仮想マシン１１−２の起動状態を示し且つ稼働経過時間が第１所定値以下である場合、フェイルオーバを実行すると判定する。
【００７３】
このノード装置１０−１の構成により、ノード装置１０−２の仮想マシン１１−２の稼働経過時間が第１所定値以下であるため、つまりノード装置１０−２の仮想マシン１１−２の起動から時間が経っていないために、ノード装置１０−２の仮想マシン１１−２の無応答状態は一時的なものでない可能性が高いと判定できる場合には、即座にフェイルオーバを実行することができる。これにより、クラスタシステム１のサービスを滞り無く継続させることができるノード装置１０−１を実現することができる。
【００７４】
また、ノード装置１０−１においてフェイルオーバ制御部１１Ｂ−１は、フェイルオーバ実行判定処理においてフェイルオーバを実行しないと判定される度に、報告取得制御部１１Ｃ−１に対して報告要求信号を送信させると共に、報告要求信号を送信させた回数をカウントする。
【００７５】
このノード装置１０−１の構成により、ノード装置１０−２の仮想マシン１１−２における無応答状態が一時的か否かについての判定基準パラメータである、報告要求信号をノード装置１０−２へ送信した回数（つまり、リトライ回数）を取得することができる。
【００７６】
また、ノード装置１０−１においてフェイルオーバ制御部１１Ｂ−１は、報告取得制御部１１Ｃ−１によって取得された報告に含まれる稼働状態情報がノード装置１０−２の仮想マシン１１−２の起動状態を示し且つ稼働経過時間が第１所定値よりも大きい場合、リトライ回数と第２所定値との大小を判定する。そして、フェイルオーバ制御部１１Ｂ−１は、リトライ回数が第２所定値よりも大きい場合、ノード装置１０−２の仮想マシン１１−２における無応答状態が一時的ではないと判定して、フェイルオーバを実行すると判定する共に、ノード装置１０−２の仮想マシン１１−２を停止する停止要求信号をノード装置１０−２へ送信する。また、フェイルオーバ制御部１１Ｂ−１は、リトライ回数が第２所定値以下である場合、フェイルオーバを実行しないと判定して、報告取得制御部１１Ｃ−１に対して報告要求信号を送信させる。
【００７７】
このノード装置１０−１の構成により、報告要求信号をノード装置１０−２へ送信した回数（つまり、リトライ回数）が第２所定値よりも大きいために、ノード装置１０−２の仮想マシン１１−２の無応答状態は一時的なものでない可能性が高い、つまり永続的なストールの可能性が高いと判定できる場合には、即座にフェイルオーバを実行することができる。これにより、クラスタシステム１のサービスを滞り無く継続させることができるノード装置１０−１を実現することができる。また、報告要求信号をノード装置１０−２へ送信した回数（つまり、リトライ回数）が第２所定値以下であるために、ノード装置１０−２の仮想マシン１１−２における無応答状態が一時的である可能性が高い場合には、フェイルオーバの実行を見送る。これにより、スプリットブレイン状態が生じてしまうことを防止することができる。
【００７８】
なお、本発明は上記の実施形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【００７９】
１  クラスタシステム
１０  ノード装置
１１  仮想マシン
１１Ａ  クラスタ制御部
１１Ｂ  フェイルオーバ制御部
１１Ｃ  報告取得制御部
１１Ｄ  ハートビート制御部
１２  仮想マシン制御部
１３  仮想マシン監視部
Ｎ１  通信ネットワーク
【図１】
2019061507.tif 000003
【図２】
2019061507.tif 000004
【図３】
2019061507.tif 000005
【図４】
2019061507.tif 000006
【図５】
2019061507.tif 000007
【図６】
2019061507.tif 000008
【図７】
2019061507.tif 000009