【実施例】
【0018】
まず、クラスタグループの優先度について説明する。ここで、クラスタグループとは、クラスタシステムに含まれるノードのグループである。クラスタシステムは、異常が検出されると、複数のクラスタグループに分けられる。各クラスタグループには1つ以上のノードが属する。クラスタグループ内ではノード間の通信が可能であるが、異なるクラスタグループ間では通信は可能でない。クラスタシステムの初期状態では、クラスタシステムに含まれる全ノードが属するクラスタグループが1つある。
【0019】
図1は、クラスタグループの優先度を説明するための図である。
図1において、「運」で示されるノード2は運用ノードであり、「待」で示されるノード2は待機ノードである。各ノード2の上に付加された10s(秒)〜70sは、各ノード2のハンデを表す。ハンデは、各ノード2がフェンシングを開始するまでの秒数である。運用ノードのハンデは待機ノードのハンデよりも小さい。
【0020】
図1(a)では、クラスタシステムを構成する5台のノード2が、2台(ノード#1及びノード#2)のクラスタグループ21と3台(ノード#3〜ノード#5)のクラスタグループ22に分けられる。クラスタグループ22は、構成ノード数が過半数のクラスタグループであり、第1優先(優先度が1)でクラスタシステムを引き継ぐ。クラスタシステムを引き継いだクラスタグループ22のハンデは0sと決定される。クラスタグループ22には運用ノードが含まれないので、待機ノードのうち最もハンデが少ないノード#3がリーダとなって、クラスタグループ21に属するノード2に対して0s後にフェンシングを開始する。
【0021】
一方、クラスタグループ21は、過半数のクラスタグループではない。このため、クラスタグループ21のハンデは、2台のノード2のハンデの最小値10sと決定される。2台のノード2のうち最もハンデが少ないノード#1がリーダとなり、10s後にフェンシングを開始しようとするが、その前にクラスタグループ22のリーダにフェンシングされる。
【0022】
図1(b)では、クラスタシステムを構成する7台のノード2が、2台(ノード#11及びノード#12)のクラスタグループ23と3台(ノード#13〜ノード#15)のクラスタグループ24と残りの2台のノード2に分けられる。構成ノード数が過半数のクラスタグループはなく、運用ノードを含むクラスタグループ23が第2優先でクラスタシステムを引き継ぐ。クラスタシステムを引き継いだクラスタグループ23のハンデは、クラスタグループ23における最小値10sと決定される。クラスタグループ23には運用ノードが含まれるで、運用ノードがリーダとなって、クラスタグループ24に属するノード2及び残りの2台のノード2に対して10s後にフェンシングを開始する。
【0023】
一方、クラスタグループ24は、過半数のクラスタグループでなく運用ノードを含まない。このため、クラスタグループ24のハンデは、3台のノード2のハンデの最小値20sと決定される。3台のノード2のうち最もハンデが少ないノード#13がリーダとなり、20s後にフェンシングを開始しようとするが、その前にクラスタグループ23のリーダにフェンシングされる。
【0024】
図1(c)では、クラスタシステムを構成する7台のノード2が、3台(ノード#21〜ノード#23)のクラスタグループ25と2台(ノード#24及びノード#25)のクラスタグループ26と残りの2台のノード2に分けられる。構成ノード数が過半数のクラスタグループはなく、運用ノードを含むクラスタグループもない。このため、ハンデが最小のノード#21を含むクラスタグループ25が第3優先でクラスタシステムを引き継ぐ。クラスタシステムを引き継いだクラスタグループ25のハンデは、クラスタグループ25における最小値20sと決定される。クラスタグループ25においてハンデが最小のノード#21がリーダとなって、クラスタグループ26に属するノード2及び残りの2台のノード2に対して20s後にフェンシングを開始する。
【0025】
一方、クラスタグループ26は、過半数のクラスタグループでなく運用ノードを含まない。このため、クラスタグループ26のハンデは、2台のノード2のハンデの最小値30sと決定される。2台のノード2のうち最もハンデが少ないノード#24がリーダとなり、30s後にフェンシングを開始しようとするが、その前にクラスタグループ25のリーダにフェンシングされる。
【0026】
このように、各クラスタグループが、構成ノード数が過半数であるか否か、及び、運用ノードを含むか否かに基づいてクラスタグループの優先度を特定し、特定した優先度に基づいてフェンシングを行う、あるいは行おうとする。したがって、クラスタシステムは、異常が発生して過半数のノード2を含むクラスタグループがない場合にも、クラスタ機能の停止を防ぐことができる。なお、クラスタグループの構成ノード数が、過半数ではないが半数である場合、あるいは、1である場合については後述する。
【0027】
次に、実施例に係るクラスタシステムの構成について説明する。
図2は、実施例に係るクラスタシステムの構成を示す図である。
図2に示すように、実施例に係るクラスタシステム1は、5台のノード2を有する。なお、クラスタシステム1は、3台以上であれば5台以外のノード2を有してよい。
【0028】
5台のノード2のうち1台のノード2が運用ノードであり、他の4台のノード2は待機ノードである。運用ノードは、データベースの更新を行う情報処理装置であり、待機ノードは、データベースの複製を有し、運用ノードからデータベースの更新差分を受け取って自身のデータベースを更新する情報処理装置である。
【0029】
各ノード2は、他のノード2とネットワークで接続される。ネットワークには、データベースに関する通信及びハートビートのための通信に用いられるネットワークと、フェンシングのための通信に用いられるネットワークがある。
【0030】
各ノード2は、クラスタシステム1の構築に関する処理を行うクラスタ構築部3と、データベース4と、データベース4を管理するデータベース管理システム4aとを有する。クラスタ構築部3は、引継ぎ部3aとハンデ決定部3bとを有する。
【0031】
引継ぎ部3aは、クラスタシステム1に異常が発生した場合に、クラスタ機能の停止を防ぐ処理を行う。具体的には、引継ぎ部3aは、クラスタシステム1に異常が発生した場合に、他のノード2の引継ぎ部3aとの間でハンデの交換を行う。そして、引継ぎ部3aは、ハンデの交換が行えたノード2の数を自ノードが属するクラスタグループのノード数として特定する。また、引継ぎ部3aは、自ノードが属するクラスタグループに運用ノードが含まれるか否かを特定する。
【0032】
そして、引継ぎ部3aは、自ノードが属するクラスタグループのノード数と自ノードが属するクラスタグループに運用ノードが含まれるか否かに基づいて、自ノードが属するクラスタグループの優先度を特定する。そして、引継ぎ部3aは、特定した優先度に基づいて、自ノードが属するクラスタグループのハンデとリーダを特定する。
【0033】
図3は、クラスタグループの優先度及びハンデを示す図である。
図3に示すように、クラスタグループの構成ノード数が過半数、又は運用ノードが存在する半数である場合には、優先度は1であり、ハンデはなし、すなわち0sである。また、クラスタグループの構成ノード数が運用ノードが存在する半数未満である場合には、優先度は2であり、ハンデはクラスタグループ内のノード2のハンデの最小値である。また、クラスタグループの構成ノード数が運用ノードが存在しない半数以下である場合には、優先度は3であり、ハンデはクラスタグループ内のノード2のハンデの最小値である。
【0034】
そして、リーダとして特定されたノード2の引継ぎ部3aは、自ノードが属するクラスタグループのハンデに基づいてフェンシングを行うか、あるいは、フェンシングを行おうとする。そして、他のノード2によりフェンシングされなければ、リーダとして特定されたノード2の引継ぎ部3aは、自ノードを運用ノードとする。
【0035】
ハンデ決定部3bは、自ノードのハンデを決定する。具体的には、自ノードが運用ノードである場合には、ハンデ決定部3bは、各待機ノードからデータベース4への書込性能を取得し、書込性能に基づいてハンデを決定して各待機ノードに送信する。書込性能が悪いほどハンデは大きくなる。
【0036】
また、自ノードが待機ノードである場合には、ハンデ決定部3bは、データベース4の更新差分を蓄積する一時ファイルの書込性能を測定し、測定値の平均値を算出して運用ノードへ送信する。そして、ハンデ決定部3bは、運用ノードからハンデを受信して記憶する。
【0037】
図4は、ハンデの一例を示す図である。
図4では、待機ノード毎に書込性能とノード優先度とハンデが対応付けられる。例えば、待機ノードAについては、書込性能は54M/sec(54メガバイト/秒)であり、書込性能が3番目に速いのでノード優先度は3であり、ハンデは30sである。
【0038】
次に、引継ぎ部3aによる処理のフローについて説明する。
図5は、引継ぎ部3aによる処理のフローを示すフローチャートである。なお、ハートビートの応答が途絶えて異常が発生すると、
図5に示す処理が起動される。
【0039】
図5に示すように、引継ぎ部3aは、異常発生直前のクラスタグループ内の全ノード2に対して、ハンデを送信する(ステップS1)。また、引継ぎ部3aは、他のノード2からハンデを受信し(ステップS2)、自ノードが属するクラスタグループのノード数を特定する(ステップS3)。自ノードが属するクラスタグループのノード数は、ハンデを受信したノード2の数に1を加えた値である。
【0040】
そして、引継ぎ部3aは、クラスタグループのノード数が1であるか否かを判定し(ステップS4)、1でない場合には、クラスタグループのノード数が過半数である又は運用ノードを含む半数であるか否かを判定する(ステップS5)。
【0041】
そして、クラスタグループのノード数が過半数である又は運用ノードを含む半数である場合には、引継ぎ部3aは、クラスタグループの優先度を1と特定する(ステップS6)。そして、引継ぎ部3aは、クラスタグループのリーダを運用ノード、又は、運用ノードが含まれない場合にはハンデの最も小さい待機ノードとし、クラスタグループのハンデを0sとする(ステップS7)。そして、引継ぎ部3aは、ステップS14へ移動する。
【0042】
一方、クラスタグループのノード数が過半数でもなく、かつ、運用ノードを含む半数でもない場合には、引継ぎ部3aは、クラスタグループ内に運用ノードが存在するか否かを判定する(ステップS8)。そして、クラスタグループ内に運用ノードが存在する場合には、引継ぎ部3aは、クラスタグループの優先度を2と特定する(ステップS9)。そして、引継ぎ部3aは、クラスタグループのリーダを運用ノードとし、クラスタグループのハンデをクラスタグループ内のノード2のハンデの最小値とする(ステップS10)。そして、引継ぎ部3aは、ステップS14へ移動する。
【0043】
一方、クラスタグループ内に運用ノードが存在しない場合には、引継ぎ部3aは、運用ノードが存在せず、かつ、クラスタグループのノード数が過半数未満であると判定し(ステップS11)、クラスタグループの優先度を3と特定する(ステップS12)。そして、引継ぎ部3aは、リーダをクラスタグループ内でハンデが最小の待機ノードとし、クラスタグループのハンデをクラスタグループ内のノード2のハンデの最小値とする(ステップS13)。
【0044】
そして、リーダの引継ぎ部3aが、フェンシング処理を実行し(ステップS14)、自ノードは運用ノードであるか否かを判定する(ステップS15)。そして、自ノードは運用ノードでない場合には、リーダの引継ぎ部3aは、自ノードを運用ノードへ昇格する(ステップS16)。そして、リーダの引継ぎ部3aは、縮退を完了する(ステップS17)。
【0045】
また、ステップS4において、クラスタグループのノード数が1である場合には、引継ぎ部3aは、縮退不可と判定し(ステップS18)、処理を終了する。
【0046】
このように、引継ぎ部3aは、クラスタグループのノード数と運用ノードの有無に基づいて優先度を特定するので、クラスタグループのノード数が過半数未満である場合にも、クラスタシステム1を縮退することができる。ここで、クラスタシステム1を縮退するとは、ノード数が減った状態でクラスタ機能を引き継ぐことである。
【0047】
次に、ハンデを決定する処理のフローについて説明する。
図6Aは、ハンデを決定する処理において待機ノードが行う処理のフローを示すフローチャートであり、
図6Bは、ハンデを決定する処理において運用ノードが行う処理のフローを示すフローチャートである。
【0048】
図6Aに示すように、待機ノードのハンデ決定部3bは、クラスタグループ内のノード2の更新差分を蓄積する一時ファイルへの書込性能を測定し(ステップS21)、一定間隔待機する(ステップS22)処理を定数回実行する。
【0049】
そして、待機ノードのハンデ決定部3bは、測定した書込性能の平均値を性能値として算出し(ステップS23)、算出した性能値を運用ノードへ送信する(ステップS24)。そして、待機ノードのハンデ決定部3bは、運用ノードにより算出されたハンデを運用ノードから受信する(ステップS25)。
【0050】
また、
図6Bに示すように、運用ノードのハンデ決定部3bは、クラスタグループ内の全ての待機ノードの性能値を収集し(ステップS31)、性能値をハンデに変換する(ステップS32)。そして、運用ノードのハンデ決定部3bは、ハンデを待機ノードに返信する(ステップS33)。
【0051】
このように、待機ノードのハンデ決定部3bと運用ノードのハンデ決定部3bが連携して各ノード2のハンデを決定するので、引継ぎ部3aは、各ノード2のハンデを用いてクラスタグループのハンデを特定することができる。
【0052】
次に、実施例に係るクラスタシステム1の効果について説明する。
図7は、実施例に係るクラスタシステム1の効果を説明するための図である。
図7に示すように、クラスタグループに運用ノードが含まれる場合には、クラスタグループのノード数が過半数でないと、従来技術では縮退不可であるが、実施例に係るクラスタシステム1では第1優先又は第2優先のクラスタグループが特定され縮退が可能である。また、クラスタグループに運用ノードが含まれない場合には、クラスタグループのノード数が過半数でないと、従来技術では縮退不可であるが、実施例に係るクラスタシステム1では第3優先のクラスタグループが特定され縮退が可能である。
【0053】
上述してきたように、実施例では、他のクラスタグループとの間で通信障害が発生すると、引継ぎ部3aは、自ノードが属するクラスタグループのノード数が半数を超える場合には、該クラスタグループを第1優先とする。また、引継ぎ部3aは、自ノードが属するクラスタグループのノード数が1ではないが半数を超えず、該クラスタグループが運用ノードを含む場合には、該クラスタグループを第2優先とする。また、引継ぎ部3aは、自ノードが属するクラスタグループのノード数が1ではないが半数を超えず、該クラスタグループが運用ノードを含まない場合には、該クラスタグループを第3優先とする。したがって、通信障害が発生してクラスタグループの構成ノード数が過半数未満になった場合にもクラスタ機能の停止を防ぐことができる。
【0054】
また、実施例では、引継ぎ部3aは、第2優先及び第3優先のクラスタグループのハンデをクラスタグループに含まれるノード2のハンデの最小値とする。また、第2優先のクラスタグループには運用ノードが含まれるため、第2優先のクラスタグループのハンデは第3優先のクラスタグループのハンデより小さい。したがって、第2優先のクラスタグループは、第3優先のクラスタグループをフェンシングすることができる。
【0055】
また、実施例では、ハンデ決定部3bは、更新差分を蓄積する一時ファイルへの書込性能を測定し、測定した書込性能の平均値に基づいて各ノード2のハンデを決定する。したがって、実施例に係るクラスタシステム1は、クラスタ機能の引継ぎの際に書込性能が高いノード2を運用ノードとすることができる。
【0056】
また、実施例では、リーダの引継ぎ部3aがクラスタグループのハンデに基づいてフェンシング処理を実行するので、スプリットブレインを防ぐことができる。
【0057】
なお、実施例では、クラスタ構築部3について説明したが、クラスタ構築部3をソフトウェアによって実現することで、同様の機能を有するクラスタ構築プログラムを得ることができる。そこで、クラスタ構築プログラムを実行するコンピュータについて説明する。
【0058】
図8は、実施例に係るクラスタ構築プログラムを実行するコンピュータのハードウェア構成を示す図である。
図8に示すように、コンピュータ50は、メインメモリ51と、CPU(Central Processing Unit)52と、LAN(Local Area Network)インタフェース53と、HDD(Hard Disk Drive)54とを有する。また、コンピュータ50は、スーパーIO(Input Output)55と、DVI(Digital Visual Interface)56と、ODD(Optical Disk Drive)57とを有する。
【0059】
メインメモリ51は、プログラムやプログラムの実行途中結果などを記憶するメモリである。CPU52は、メインメモリ51からプログラムを読み出して実行する中央処理装置である。CPU52は、メモリコントローラを有するチップセットを含む。
【0060】
LANインタフェース53は、コンピュータ50をLAN経由で他のコンピュータに接続するためのインタフェースである。HDD54は、プログラムやデータを格納するディスク装置であり、スーパーIO55は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。DVI56は、液晶表示装置を接続するインタフェースであり、ODD57は、DVDの読み書きを行う装置である。
【0061】
LANインタフェース53は、PCIエクスプレス(PCIe)によりCPU52に接続され、HDD54及びODD57は、SATA(Serial Advanced Technology Attachment)によりCPU52に接続される。スーパーIO55は、LPC(Low Pin Count)によりCPU52に接続される。
【0062】
そして、コンピュータ50において実行されるクラスタ構築プログラムは、コンピュータ50により読み出し可能な記録媒体の一例であるDVDに記憶され、ODD57によってDVDから読み出されてコンピュータ50にインストールされる。あるいは、クラスタ構築プログラムは、LANインタフェース53を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ50にインストールされる。そして、インストールされたクラスタ構築プログラムは、HDD54に記憶され、メインメモリ51に読み出されてCPU52によって実行される。
【0063】
また、実施例では、ノード2がデータベース4を更新する情報処理装置である場合について説明したが、ノード2は他の情報処理を行う情報処理装置でもよい。また、実施例では、ハンデ決定部3bは、更新差分を蓄積する一時ファイルへの書込性能に基づいてノード2のハンデを決定するが、ノード2の他の性能に基づいてハンデを決定してもよい。