(57)【要約】【課題】スプリットブレインからの復旧時に、複数のコントローラ間で異常なデータが同期されることによる不具合の発生を回避しつつデータの整合性を保つ。【解決手段】  冗長システム１は、２台のコントローラ１０Ａ、１０Ｂにより構成され、コントローラ１０Ａ、１０Ｂは、自機が現用系の場合に、データベース２５Ａ、２５Ｂに異常が発生しているか否かを判断する判断部３１Ａ、３１Ｂと、自機が現用系の場合に、２台以上のコントローラが現用系となったか否かを検知する検知部３２Ａ、３２Ｂと、検知部が、２台以上のコントローラが現用系となったことを検知し、かつ、判断部が、データベースに異常が発生していると判断した場合に、自機を再起動して待機系とする起動部３３Ａ、３３Ｂと、検知部が、２台以上のコントローラが現用系となっていないことを検知し、かつ、判断部が、データベースに異常が発生していないと判断した場合に、自機のデータを待機系のコントローラに同期させる同期部３５Ａ、３５Ｂと、を備える。【選択図】図３
2020194217.tif 000002
【特許請求の範囲】
【請求項１】
複数のコントローラを含んで構成される冗長システムであって、
前記各コントローラは、
自機が現用系の場合に、データベースに異常が発生しているか否かを判断する判断部と、
自機が現用系の場合に、２台以上のコントローラが現用系となったか否かを検知する検知部と、
前記検知部が、２台以上のコントローラが現用系となったことを検知し、かつ、前記判断部が、前記データベースに異常が発生していると判断した場合に、自機を再起動して待機系とする起動部と、
前記検知部が、２台以上のコントローラが現用系となっていないことを検知し、かつ、前記判断部が、前記データベースに異常が発生していないと判断した場合に、自機のデータを待機系のコントローラに同期させる同期部と、
を備えたことを特徴とする冗長システム。
【請求項２】
前記判断部が前記データベースに異常が発生していないと判断した場合に、異常が発生していない旨を他のコントローラに通知する通知部を備え、
前記起動部は、
前記検知部が、２台以上のコントローラが現用系となったことを検知し、かつ、前記判断部が、前記データベースに異常が発生していないと判断した場合であっても、前記通知部による通知を受信し、当該通知元のコントローラとの間で自機の優先度が低い場合には、自機を再起動して待機系とすることを特徴とする請求項１記載の冗長システム。
【請求項３】
前記判断部は、前記データベースに対して所定の信号を送信し、当該信号に対して所定時間以内に応答がない場合に、当該データベースに異常が発生していると判断することを特徴とする請求項１又は請求項２に記載の冗長システム。
【請求項４】
冗長システムを構成する複数のコントローラによるデータ同期方法であって、
前記各コントローラは、
判断部が、自機が現用系の場合に、データベースに異常が発生しているか否かを判断するステップと、
検知部が、自機が現用系の場合に、２台以上のコントローラが現用系となったことを検知するステップと、
前記検知部が、２台以上のコントローラが現用系となったことを検知し、かつ、前記判断部が、前記データベースに異常が発生していると判断した場合に、起動部が、自機を再起動して待機系とするステップと、
前記検知部が、２台以上のコントローラが現用系となっていないことを検知し、かつ、前記判断部が、前記データベースに異常が発生していないと判断した場合に、同期部が、自機のデータを待機系のコントローラに同期させるステップと、
を備えたことを特徴とするデータ同期方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、冗長システムを構成する複数のコントローラ間でデータを同期させる技術に関する。
【背景技術】
【０００２】
従来、プラントなどのプロセス制御に用いるプロセス制御システムにおいて、高信頼性を要求される場合には、複数のコントローラを設ける冗長構造をもつ構成が用いられている。このように、コントローラを多重化してシステムを冗長させることで、システムはより安定した運用を行える。このような冗長構造をもつ従来のプラント制御システムは、例えば、現用系として稼働する第１のコントローラと、待機系として稼働する第２のコントローラを備え、第１のコントローラに異常が発生すると、待機系だった第２のコントローラを現用系に切り替える。
【０００３】
ところで、このような冗長システムにおいて、現用系のノードが複数存在する状態を「スプリットブレイン」という。一般的に、冗長システムでは、現用系のノードと待機系のノードとを繋ぐネットワークが障害等により遮断され、現用系のノードと待機系のノードとが独立して動作する場合にスプリットブレインとなる。
【０００４】
スプリットブレインでは、現用系のノードと待機系のノードとが独立して動作するため、それぞれのノードで異なるデータを保持することとなる。したがって、この状態でシステムがスプリットブレインから復旧すると、現用系のノードと待機系のノードとの間でデータの整合性が取れない状態となる。そこで、現用系のノードと待機系のノードとの間でデータの差異が生じないように、システムをスプリットブレインから復旧させる技術が提案されている。
【０００５】
例えば、特許文献１に記載された遠隔クラスタシステムでは、スプリットブレインから復旧する際、現用系のノード（プライマリサーバ）が、通信遮断中に自サーバで更新された差分データを待機系のノード（セカンダリサーバ）に送信する。セカンダリサーバは、プライマリサーバから受信した差分データと、通信遮断中に自サーバで更新された差分データとをマージして、プライマリサーバに送信する送信データと、自サーバに反映させる反映データとを作成する。そして、セカンダリサーバは、反映データを自サーバに反映させるとともに、送信データをプライマリサーバに送信する。プライマリサーバは、セカンダリサーバから送られた送信データを自サーバに反映させる。この遠隔クラスタシステムは、このようにして、双方のサーバで保持するデータに差異が生じないようにシステムをスプリットブレインから復旧させる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−１４６２９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、スプリットブレインは、ビル等の施設内に設置されている複数の監視対象機器を監視する施設監視システムにおいても発生することがある。例えば、施設監視システムは、一般的に現用系と待機系の２台のコントローラによる二重化構成とされるが、双方のコントローラを繋ぐネットワークが障害等により遮断するとスプリットブレインとなる。この場合、現用系のコントローラと待機系のコントローラとは、独立して動作するため、それぞれのコントローラで異なるデータを保持することとなる。ところが、従来の施設監視システムでは、スプリットブレインから復旧するとき、両コントローラの間でデータの整合性を取るための処理は行われておらず、改善が求められていた。
【０００８】
また、特許文献１に記載の遠隔クラスタシステムでは、プライマリサーバとセカンダリサーバのそれぞれが保持するデータに異常があるかどうかの確認は行っていない。したがって、仮にプライマリサーバの保持するデータに何らかの異常があった場合、当該異常のあるデータがセカンダリサーバに同期されて、システムがダウンするなどの不具合が発生するおそれがあった。
【０００９】
この発明は、上記のような課題を解決するためになされたもので、スプリットブレインからの復旧時に、複数のコントローラ間で異常なデータが同期されることによる不具合の発生を回避しつつデータの整合性を保つことを目的としている。
【課題を解決するための手段】
【００１０】
この発明に係る冗長システムは、複数のコントローラを含んで構成され、各コントローラは、自機が現用系の場合に、データベースに異常が発生しているか否かを判断する判断部と、自機が現用系の場合に、２台以上のコントローラが現用系となったか否かを検知する検知部と、検知部が、２台以上のコントローラが現用系となったことを検知し、かつ、判断部が、データベースに異常が発生していると判断した場合に、自機を再起動して待機系とする起動部と、検知部が、２台以上のコントローラが現用系となっていないことを検知し、かつ、判断部が、データベースに異常が発生していないと判断した場合に、自機のデータを待機系のコントローラに同期させる同期部と、を備えたことを特徴とする。
【発明の効果】
【００１１】
この発明によれば、上記のように構成したので、スプリットブレインからの復旧時に、複数のコントローラ間で異常なデータが同期されることによる不具合の発生を回避しつつデータの整合性を保つことができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係る冗長システム（二重化システム）の構成例を示す図である。
【図２】実施の形態１におけるコントローラのＳＳＤに記憶されるデータのイメージを示す図である。
【図３】図３Ａは、実施の形態１における現用系のコントローラの構成例を示す図であり、図３Ｂは、実施の形態１における待機系のコントローラの構成例を示す図である。
【図４】実施の形態１に係る二重化システムにおいて、スプリットブレインが発生した場合の動作例を示すフローチャートである。
【図５】実施の形態１に係る二重化システムにおいて、スプリットブレインが発生した場合の動作例を示すタイミングチャートである。
【図６】実施の形態１におけるコントローラが自機のデータベースに異常が発生しているか否かを判断する処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、この発明の実施の形態について図面を参照しながら詳細に説明する。
実施の形態１．
図１は、この発明の実施の形態１に係る冗長システムの構成例を示している。冗長システム１は、複数（ここでは２台）のコントローラ１０（１０Ａ、１０Ｂ）と、複数の監視ポイント２００と、不図示の監視装置とを含んで構成されている。コントローラ１０Ａ、１０Ｂと、各監視ポイント２００と、監視装置とは、システムバス１５０を介して相互に通信可能に接続されている。ここでは、コントローラが２台で構成されているため、冗長システム１を二重化システム１として説明する。しかしながら、コントローラの台数は必ずしも２台でなくともよく、いずれか１台のコントローラが現用系（アクティブ）として稼働できる構成であれば、３台以上であってもよい。
【００１４】
二重化システム１は、二重化機能を備えている。二重化機能は、２台のコントローラ１０Ａ、１０Ｂで監視ポイント２００の監視、制御を行う機能である。すなわち、二重化システム１は、通常時はコントローラ１０Ａを現用系、コントローラ１０Ｂを待機系（スタンバイ）として稼働させ、現用系のコントローラ１０Ａが監視ポイント２００の監視、制御、及びデータの収集等の処理を行う。コントローラ１０Ａは、データベース２５Ａが構築されたＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）２０Ａを備えており、コントローラ１０Ａは、監視ポイント２００から収集したデータを、ＳＳＤ２０Ａ内のデータベース２５Ａに格納する。
【００１５】
また、二重化機能は、データベースの同期も管理する。例えば、二重化システム１では、現用系のコントローラ１０Ａが起動した状態で、待機系のコントローラ１０Ｂが起動すると、待機系のコントローラ１０Ｂは、現用系のコントローラ１０Ａに対し、データベース２５Ａのコピーを要求する。この要求を受け付けたコントローラ１０Ａは、コントローラ１０Ｂに対し、データベース２５Ａのコピーを送信する。コントローラ１０Ｂは、コントローラ１０Ａからデータベース２５Ａのコピーを受信すると、当該コピーを用いて、自機が備えるＳＳＤ２０Ｂ内にデータベース２５Ｂを構築する。
【００１６】
その後、コントローラ１０Ａは、データベース２５Ａの更新を完了する度に、当該データベース２５Ａを更新したデータのコピーをコントローラ１０Ｂに送信する。コントローラ１０Ｂは、コントローラ１０Ａから受信した更新データのコピーをデータベース２５Ｂに書き込み、データベース２５Ｂの更新を完了する。このようにして、二重化システム１は、データベース２５Ａ、２５Ｂの同期を行う。
【００１７】
また、二重化システム１は、現用系のコントローラ１０Ａに障害などの問題が発生した場合、待機系のコントローラ１０Ｂを現用系に切り替える。現用系に切り替わったコントローラ１０Ｂは、監視ポイント２００の監視、制御、及びデータの収集等の処理を継続し、監視ポイント２００から収集したデータを、ＳＳＤ２０Ｂ内のデータベース２５Ｂに格納する。
【００１８】
なお、実施の形態１では、コントローラ１０Ａ、１０Ｂは、図２に示すように、データベース２５Ａ、２５Ｂに格納されるデータのほかに、データベース２５Ａ、２５Ｂには格納されないが他方のコントローラとの間で同期するデータ２６Ａ、２６Ｂを、ＳＳＤ２０Ａ、ＳＳＤ２０Ｂに記憶している。
【００１９】
＜コントローラ１０Ａ、１０Ｂの構成例＞
次に、コントローラ１０Ａ、１０Ｂの構成例について、図３を参照して説明する。図３Ａは、コントローラ１０Ａの構成例を示し、図３Ｂは、コントローラ１０Ｂの構成例を示している。
【００２０】
図３Ａに示すように、コントローラ１０Ａは、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）２０Ａ、及びＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０Ａを備えている。ＳＳＤ２０Ａには、前述したデータベース２５Ａが構築されている。
【００２１】
ＣＰＵ３０Ａは、予めＳＳＤ２０Ａに記憶されている所定のプログラムを実行することにより、判断部３１Ａ、検知部３２Ａ、起動部３３Ａ、通知部３４Ａ、及び同期部３５Ａとして機能する。
【００２２】
判断部３１Ａは、自機（コントローラ１０Ａ）が現用系の場合に、自機のデータベース２５Ａに異常が発生しているか否かを判断する。例えば、判断部３１Ａは、自機のデータベース２５Ａに対して所定の信号（例えばＰｉｎｇ）を送信し、所定時間（例えば１分）以内に応答があればデータベース２５Ａに接続できた（正常）と判断する。一方、判断部３１Ａは、所定時間以内に応答がなければ、データベース２５Ａに異常が発生したと判断する。判断部３１Ａは、少なくともコントローラ１０Ａが現用系として起動するときに、データベース２５ＡにＰｉｎｇを送信してデータベース２５Ａの異常判断を実行する。
【００２３】
検知部３２Ａは、自機（コントローラ１０Ａ）が現用系の場合に、二重化システム１を構成する２台のコントローラの双方が現用系となったか否か、すなわちスプリットブレインとなったか否かを検知する。例えば、検知部３２Ａは、コントローラ１０Ｂと信号を送受信し合うことで互いの稼働状態を随時監視し、自機（コントローラ１０Ａ）が現用系として稼働している際に、コントローラ１０Ｂが待機系から現用系に切り替わった場合に、スプリットブレインを検知する。検知部３２Ａがスプリットブレインを検知する具体例については後述する。
【００２４】
起動部３３Ａは、前述の検知部３２Ａが、２台のコントローラの双方が現用系となったこと（スプリットブレイン）を検知し、かつ、前述の判断部３１Ａが自機（コントローラ１０Ａ）のデータベース２５Ａに異常が発生していると判断した場合に、自機を再起動して現用系から待機系に切り替える。
【００２５】
また、起動部３３Ａは、検知部３２Ａにより、２台のコントローラの双方が現用系となったことを検知し、かつ、判断部３１Ａにより、データベース２５Ａに異常が発生していないと判断した場合であっても、コントローラ１０Ｂの後述する通知部３４Ｂによる通知を受信し、当該通知元のコントローラ１０Ｂとの間で自機の優先度が低い場合には、自機を再起動して待機系とする。
【００２６】
なお、優先度とは、どのコントローラを現用系として優先的に稼働させるかを示す度合いを示すものであり、優先度が他のコントローラより低い場合、そのコントローラは現用系から待機系に切り替わる。優先度は、ユーザ（管理者）が各コントローラに予め設定しておけばよい。
【００２７】
通知部３４Ａは、判断部３１Ａによりデータベース２５Ａに異常が発生していないと判断した場合に、異常が発生していない旨を他のコントローラ（ここではコントローラ１０Ｂ）に通知する。
【００２８】
同期部３５Ａは、判断部３１Ａにより、自機のデータベース２５Ａに異常が発生していないと判断し、かつ、検知部３２Ａにより、２台以上のコントローラが現用系となっていないことを検知した場合に、自機が保持するデータを待機系のコントローラに同期させる。
【００２９】
次に、コントローラ１０Ｂの構成例について、図３Ｂを参照して説明する。図３Ｂに示すように、コントローラ１０Ｂは、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）２０Ｂ、及びＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０Ｂを備えている。ＳＳＤ２０Ｂには、前述したデータベース２５Ｂが構築されている。
【００３０】
ＣＰＵ３０Ｂは、予めＳＳＤ２０Ｂに記憶されている所定のプログラムを実行することにより、判断部３１Ｂ、検知部３２Ｂ、起動部３３Ｂ、通知部３４Ｂ、及び同期部３５Ｂとして機能する。なお、判断部３１Ｂ、検知部３２Ｂ、起動部３３Ｂ、通知部３４Ｂ、及び同期部３５Ｂの各部の機能は、前述した判断部３１Ａ、検知部３２Ａ、起動部３３Ａ、通知部３４Ａ、及び同期部３５Ａと基本的に同じであるため、ここではその説明を省略する。
【００３１】
＜二重化システム１の動作例＞
次に、実施の形態１に係る二重化システム１において、スプリットブレインが発生した場合の動作例について、図４のフローチャート、図５のタイミングチャートに基づき説明する。ここでは、具体例として、コントローラ１０Ａの電源がＯＦＦであり、コントローラ１０Ｂが現用系として稼働している状態からの動作例を説明する。また、ここでは、現用系として稼働しているコントローラ１０Ｂのデータベース２５Ｂは、判断部３１Ｂにより既に正常であると判断されているものとする。
【００３２】
また、ここでは、図４において、コントローラ１０Ａを単に「Ａ系」と記載し、コントローラ１０Ｂを単に「Ｂ系」と記載する。また、図５において、かっこ付きの数字は図４のフローチャートにおけるステップ番号に対応し、「Ａ」はコントローラが現用系であることを示し、「Ｓ」はコントローラが待機系であることを示す。
【００３３】
まず、二重化システム１は、コントローラ１０Ａを待機系として起動する（ステップＳＴ１１）。
【００３４】
次に、コントローラ１０Ａは、現用系として稼働しているコントローラ１０Ｂに対し、コントローラ１０Ｂが保持しているデータ（データベース２５Ｂ、及び同期するデータ２６Ｂ（不図示））のコピーを要求する。この要求を受け付けたコントローラ１０Ｂは、自機の保持するデータのコピーをコントローラ１０Ａに送信し、コントローラ１０Ｂの保持するデータをコントローラ１０Ａのデータに同期する（ステップＳＴ１２）。
【００３５】
ここで、この同期中に、コントローラ１０Ａとコントローラ１０Ｂとを接続するネットワークが障害等により切断したとする。すると、二重化システム１は、同期処理が中断され、コントローラ１０Ａのデータベース２５Ａには、同期途中の不完全なデータが残される（ステップＳＴ１３）。なお、図５において、データベース２５Ａの表示を一部破線としているのは、データベース２５Ａに不完全なデータが残されていることを示している。
【００３６】
次に、二重化システム１は、ネットワークが切断したことに伴い、コントローラ１０Ａを独立して動作させるべく、コントローラ１０Ａの電源を一旦ＯＦＦにし、コントローラ１０Ａを現用系として起動する（ステップＳＴ１４）。このとき、コントローラ１０Ａは、自機のデータベース２５Ａに異常が発生しているか否かを判断する。この場合の処理について、図６のフローチャートを参照して説明する。
【００３７】
図６は、コントローラ１０Ａが自機のデータベース２５Ａに異常が発生しているか否かを判断する処理の流れを示すフローチャートである。まず、コントローラ１０Ａは、起動を開始すると（ステップＳＴ４１）、データベース２５Ａの立ち上げを開始する（ステップＳＴ４２）。そして、コントローラ１０Ａは、判断部３１Ａにより、データベース２５Ａに対してＰｉｎｇを送信する（ステップＳＴ４３）。
【００３８】
次に、判断部３１Ａは、データベース２５Ａから所定時間（例えば１分）以内に応答があるか否かを確認する（ステップＳＴ４４）。その結果、データベース２５Ａから所定時間以内に応答があれば（ステップＳＴ４４；ＹＥＳ）、判断部３１Ａは、データベース２５Ａが正常に立ち上がったと判断する（ステップＳＴ４５）。そして、コントローラ１０Ａは起動を正常に完了する（ステップＳＴ４６）。
【００３９】
一方、データベース２５Ａから所定時間以内に応答がなければ（ステップＳＴ４４；ＮＯ）、判断部３１Ａは、データベース２５Ａに異常が発生していると判断する（ステップＳＴ４７）。この場合、コントローラ１０Ａはエラー状態となって起動を停止する（ステップＳＴ４８）。
【００４０】
図４、図５の例では、二重化システム１は、同期処理の途中でネットワークが切断したため、コントローラ１０Ａのデータベース２５Ａには、同期途中の不完全なデータが残されている。したがって、判断部３１Ａは、送信したＰｉｎｇに対するデータベース２５Ａからの応答を得ることができず、データベース２５Ａに異常が発生していると判断する。その結果、コントローラ１０Ａは、エラー状態となって起動を停止する（ステップＳＴ１５）。
【００４１】
その後、二重化システム１では、切断していたネットワークが復旧する（ステップＳＴ１６）。これにより、二重化システム１は、コントローラ１０Ａとコントローラ１０Ｂとの間の通信が再開する。
【００４２】
その後、二重化システム１では、コントローラ１０Ａの検知部３２Ａがスプリットブレインを検知する。同様に、コントローラ１０Ｂの検知部３２Ｂもスプリットブレインを検知する（ステップＳＴ１７）。
【００４３】
次に、コントローラ１０Ａは、コントローラ１０Ｂに対し、通信により、自機のデータベース２５Ａに異常が発生していることを通知する。これにより、コントローラ１０Ｂは、コントローラ１０Ａのデータベース２５Ａに異常が発生していることを検知する（ステップＳＴ１８）。なお、このステップＳＴ１８の処理は、必ずしも実行されなくともよいが、コントローラ１０Ｂが確実にデータベース２５Ａの異常を検知するために実行されるのが望ましい。
【００４４】
その後、コントローラ１０Ａは、起動部３３Ａにより、自機を待機系として再起動する（ステップＳＴ１９）。
【００４５】
次いで、コントローラ１０Ｂは、コントローラ１０Ａが待機系となったため、検知部３２Ｂにより、２台のコントローラが現用系となっていないこと、すなわちスプリットブレインではないことを検知する（ステップＳＴ２０）。そして、コントローラ１０Ｂは、同期部３５Ｂにより、コントローラ１０Ｂの保持するデータ（データベース２５Ｂ、及び同期するデータ２６Ｂ）をコントローラ１０Ａの保持するデータ（データベース２５Ａ、及び同期するデータ２６Ａ）に上書きすることで、コントローラ１０Ｂの保持するデータを
コントローラ１０Ａに同期させる（ステップＳＴ２１）。これにより、二重化システム１は、コントローラ１０Ａとコントローラ１０Ｂとの間でデータの整合性が保たれ、正常に二重化された状態に復旧する。
【００４６】
なお、上記の例では、二重化システム１は、ステップＳＴ１４において、判断部３１Ａがデータベース２５Ａに異常が発生していると判断した後に、ステップＳＴ１７において、検知部３２Ａ、３２Ｂがスプリットブレインを検知した。しかしながら、二重化システム１は、検知部３２Ａ、３２Ｂによるスプリットブレインの検知を実行した後に、判断部３１Ａがデータベース２５Ａに異常が発生していると判断してもよく、あるいはこれらの処理を並行して実行してもよい。
【００４７】
また、上記の例では、コントローラ１０Ａの電源がＯＦＦとなっており、コントローラ１０Ｂが現用系として稼働している状態からの動作例を説明した。しかしながら、これとは逆に、コントローラ１０Ａが現用系として稼働し、コントローラ１０Ｂの電源がＯＦＦである場合でも、各コントローラは上記と同様の流れでスプリットブレインからの復旧及びデータの同期を行えばよい。
【００４８】
このように、二重化システム１では、スプリットブレインからシステムを復旧する際、コントローラ１０Ａ、１０Ｂのデータベース２５Ａ、２５Ｂに異常が発生しているか否かの判断を行い、データベースに異常が発生していると判断された場合、そのコントローラ（ここではコントローラ１０Ａ）を再起動して現用系から待機系に切り替える。そして、二重化システム１は、待機系に切り替わったコントローラ１０Ａの保持しているデータを破棄し、現用系として稼働を継続しているコントローラ１０Ｂのデータを、待機系に切り替わったコントローラ１０Ａに同期するように構成した。
【００４９】
特に、従来は、スプリットブレインからの復旧時に、現用系のコントローラと待機系のコントローラのそれぞれが保持するデータに異常があるかどうかの確認は行っていなかった。そのため、仮に同期するデータの提供元となるコントローラのデータに何らかの異常があった場合、当該異常のあるデータが同期されてシステムがダウンするなどの不具合が発生するおそれがあった。
【００５０】
これに対し、二重化システム１は、スプリットブレインからの復旧に際し、まず現用系のコントローラと待機系のコントローラのそれぞれのデータベースに異常が発生しているか否かを判断し、データベースに異常が発生していると判断されたコントローラを現用系から待機系に切り替える。そして、待機系に切り替わったコントローラの保持しているデータを破棄するとともに、現用系として稼働を継続するコントローラの保持するデータを、待機系に切り替わったコントローラに同期させる。これにより、二重化システム１は、スプリットブレインからの復旧時に、コントローラ１０Ａとコントローラ１０Ｂとの間で異常なデータが同期されることによりシステムに不具合が発生することを回避しつつ、データの整合性を保つことができる。
【００５１】
なお、図４、図５では、コントローラ１０Ａのデータベース２５Ａに異常が発生したと判断された例を説明したが、例えばコントローラ１０Ａのデータベース２５Ａに異常がなく、コントローラ１０Ｂのデータベース２５Ｂにも異常がなかった場合も想定される。その場合、両コントローラ１０Ａ、１０Ｂは、通知部３４Ａ、３４Ｂにより、自機のデータベースに異常がないと判断された旨を相互に通知し合う。
【００５２】
そして、コントローラ１０Ａ、１０Ｂは、検知部３２Ａ、３２Ｂが、２台以上のコントローラが現用系となったことを検知し、かつ、判断部３１Ａ、３１Ｂが、データベース２５Ａ、２５Ｂに異常が発生していないと判断した場合であっても、通知部３４Ａ、３４Ｂによる通知を受信し、当該通知元のコントローラとの間で自機の優先度が低い場合には、起動部３３Ａ、３３Ｂにより自機を再起動して待機系とする。
【００５３】
例えば、図４のステップＳＴ１５において、コントローラ１０Ａは判断部３１Ａにより、データベース２５Ａに異常がないと判断したとする。この場合、通知部３４Ａは、データベース２５Ａに異常がないと判断した旨をコントローラ１０Ｂに通知する。一方、コントローラ１０Ｂでも、判断部３１Ｂにより、データベース２５Ｂに異常がないと判断されているので、通知部３４Ｂは、データベース２５Ｂに異常がないと判断された旨をコントローラ１０Ａに通知する。
【００５４】
このとき、コントローラ１０Ａは、自機のデータベース２５Ａに異常が発生していないと判断した場合であっても、自機の優先度がコントローラ１０Ｂの優先度よりも低ければ、起動部３３Ａにより自機を再起動して待機系とする。そして、コントローラ１０Ｂは、判断部３１Ｂにより、データベース２５Ｂに異常が発生していないと判断し、かつ、検知部３２Ｂにより、２台のコントローラが現用系となっていないことを検知すると、同期部３５Ｂにより、自機のデータを待機系のコントローラ１０Ａに同期させる。
【００５５】
なお、これとは逆に、例えばコントローラ１０Ｂの優先度がコントローラ１０Ａの優先度よりも低い場合も、上記と同様の流れで、コントローラ１０Ｂが待機系に切り替わり、コントローラ１０Ａのデータをコントローラ１０Ｂに同期させればよい。
【００５６】
また、冗長システムが例えば３台以上のコントローラで構成され、データベースに異常がないと判断されたコントローラが２台以上あった場合も、上記と同様の流れで待機系に切り替わるコントローラを決定すればよい。例えば、冗長システムが３台のコントローラで構成され、３台ともデータベースに異常がないと判断された場合、各コントローラは、通知部により、自機のデータベースに異常がないと判断された旨を相互に通知し合う。この場合、各コントローラは、自機と当該通知元のコントローラとの間で優先度を比較し、自機の優先度が低い場合には、起動部により自機を再起動して待機系とする。そして、最も優先度の高いコントローラ（すなわち現用系を維持するコントローラ）が、同期部により自機のデータを待機系のコントローラに同期させればよい。
【００５７】
なお、待機系に切り替わるコントローラを優先度に基づいて決定する方法はあくまで一例であり、その他の方法で待機系に切り替わるコントローラを決定してもよい。例えば、各コントローラのデータベースに格納されているデータ数を比較し、データ数が最も多いコントローラ以外のコントローラを待機系に切り替えるようにしてもよい。
【００５８】
以上のように、実施の形態１によれば、冗長システム１は、複数のコントローラ１０Ａ、１０Ｂを含んで構成され、コントローラ１０Ａ、１０Ｂは、自機が現用系の場合に、データベース２５Ａ、２５Ｂに異常が発生しているか否かを判断する判断部３１Ａ、３１Ｂと、自機が現用系の場合に、２台以上のコントローラが現用系となったか否かを検知する検知部３２Ａ、３２Ｂと、判断部３１Ａ、３１Ｂが、データベース２５Ａ、２５Ｂに異常が発生していると判断し、かつ、検知部３２Ａ、３２Ｂが、２台以上のコントローラが現用系となったことを検知した場合に、自機を再起動して待機系とする起動部３３Ａ、３３Ｂと、検知部３２Ａ、３２Ｂが、２台以上のコントローラが現用系となっていないことを検知し、かつ、判断部３１Ａ、３１Ｂが、データベース２５Ａ、２５Ｂに異常が発生していないと判断した場合に、自機のデータを待機系のコントローラに同期させる同期部３５Ａ、３５Ｂと、を備える。これにより、冗長システム１は、スプリットブレインからの復旧時に、複数のコントローラ間で異常なデータが同期されることによりシステムに不具合が発生することを回避しつつ、データの整合性を保つことができる。
【００５９】
また、実施の形態１によれば、冗長システム１は、判断部３１Ａ、３１Ｂがデータベース２５Ａ、２５Ｂに異常が発生していないと判断した場合に、異常が発生していない旨を他のコントローラに通知する通知部３４Ａ、３４Ｂを備え、起動部３３Ａ、３３Ｂは、検知部３２Ａ、３２Ｂが、２台以上のコントローラが現用系となったことを検知し、かつ、判断部３１Ａ、３１Ｂが、データベース２５Ａ、２５Ｂに異常が発生していないと判断した場合であっても、通知部３４Ａ、３４Ｂによる通知を受信し、当該通知元のコントローラとの間で自機の優先度が低い場合には、自機を再起動して待機系とする。これにより、冗長システム１は、同期するデータの提供元となり得るコントローラが複数あった場合でも、優先度が他より低いコントローラが待機系に切り替わるため、コントローラ間でデータの整合性を速やかに保つことができる。
【００６０】
また、実施の形態１によれば、判断部は、データベースに対して所定の信号を送信し、当該信号に対して所定時間以内に応答がない場合に、当該データベースに異常が発生していると判断する。これにより、冗長システム１は、データベースに異常が発生しているか否かを容易に判断することができる。
【００６１】
なお、本願発明はその発明の範囲内において、実施の形態の任意の構成要素の変形、もしくは実施の形態において任意の構成要素の省略が可能である。
【符号の説明】
【００６２】
１  二重化システム（冗長システム）
１０  コントローラ
１０Ａ  現用系のコントローラ
１０Ｂ  待機系のコントローラ
２０Ａ、２０Ｂ  ＳＳＤ
２５Ａ、２５Ｂ  データベース
２６Ａ、２６Ｂ  同期するデータ
３０Ａ、３０Ｂ  ＣＰＵ
３１Ａ、３１Ｂ  判断部
３２Ａ、３２Ｂ  検知部
３３Ａ、３３Ｂ  起動部
３４Ａ、３４Ｂ  通知部
３５Ａ、３５Ｂ  同期部
１５０  システムバス
２００  監視ポイント
【図１】
2020194217.tif 000003
【図２】
2020194217.tif 000004
【図３】
2020194217.tif 000005
【図４】
2020194217.tif 000006
【図５】
2020194217.tif 000007
【図６】
2020194217.tif 000008