(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-18
(45)【発行日】2024-01-26
(54)【発明の名称】冗長システム及びデータ同期方法
(51)【国際特許分類】
G06F 11/20 20060101AFI20240119BHJP
G06F 16/178 20190101ALI20240119BHJP
G06F 3/06 20060101ALI20240119BHJP
【FI】
G06F11/20 628
G06F16/178
G06F3/06 304E
G06F11/20 671
(21)【出願番号】P 2019097811
(22)【出願日】2019-05-24
【審査請求日】2022-03-24
(73)【特許権者】
【識別番号】000006666
【氏名又は名称】アズビル株式会社
(74)【代理人】
【識別番号】110003166
【氏名又は名称】弁理士法人山王内外特許事務所
(74)【代理人】
【識別番号】100101133
【氏名又は名称】濱田 初音
(74)【代理人】
【識別番号】100199749
【氏名又は名称】中島 成
(74)【代理人】
【識別番号】100197767
【氏名又は名称】辻岡 将昭
(74)【代理人】
【識別番号】100201743
【氏名又は名称】井上 和真
(72)【発明者】
【氏名】新海 庸平
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2006-146299(JP,A)
【文献】特開2002-116920(JP,A)
【文献】特開2009-223519(JP,A)
【文献】特開2009-157662(JP,A)
【文献】特開2010-244463(JP,A)
【文献】特開2007-086972(JP,A)
【文献】特開2018-055197(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/20
G06F 16/178
G06F 3/06
(57)【特許請求の範囲】
【請求項1】
複数のコントローラを含んで構成される冗長システムであって、
前記各コントローラは、
自機が現用系の場合に、自機のデータベースに異常が発生しているか否かを判断する判断部と、
自機が現用系の場合に、前記冗長システムを構成する2台以上のコントローラが現用系となったか否かを検知する検知部と、
前記検知部が、2台以上のコントローラが現用系となったことを検知し、かつ、前記判断部が、自機のデータベースに異常が発生していると判断した場合に、自機を再起動して待機系とする起動部と、
前記検知部が、2台以上のコントローラが現用系となっていないことを検知し、かつ、前記判断部が、自機のデータベースに異常が発生していないと判断した場合に、自機のデータベースに保持するデータを待機系のコントローラに同期させる同期部と、
前記判断部が前記データベースに異常が発生していないと判断した場合に、異常が発生していない旨を他のコントローラに通知する通知部と、を備え、
前記起動部は、
前記検知部が、2台以上のコントローラが現用系となったことを検知し、かつ、前記判断部が、前記データベースに異常が発生していないと判断した場合であっても、前記通知部による通知を受信し、当該通知元のコントローラのデータベースに保持しているデータ数よりも、自機のデータベースに保持しているデータ数が少ない場合には、自機を再起動して待機系とすることを特徴とする冗長システム。
【請求項2】
前記判断部は、前記データベースに対して所定の信号を送信し、当該信号に対して所定時間以内に応答がない場合に、当該データベースに異常が発生していると判断することを特徴とする請求項
1記載の冗長システム。
【請求項3】
冗長システムを構成する複数のコントローラによるデータ同期方法であって、
前記各コントローラは、
判断部が、自機が現用系の場合に、自機のデータベースに異常が発生しているか否かを判断するステップと、
検知部が、自機が現用系の場合に、前記冗長システムを構成する2台以上のコントローラが現用系となったことを検知するステップと、
前記検知部が、2台以上のコントローラが現用系となったことを検知し、かつ、前記判断部が、自機のデータベースに異常が発生していると判断した場合に、起動部が、自機を再起動して待機系とするステップと、
前記検知部が、2台以上のコントローラが現用系となっていないことを検知し、かつ、前記判断部が、自機のデータベースに異常が発生していないと判断した場合に、同期部が、自機のデータベースに保持するデータを待機系のコントローラに同期させるステップと、
通知部が、前記判断部が前記データベースに異常が発生していないと判断した場合に、異常が発生していない旨を他のコントローラに通知するステップと、を備え、
前記起動部は、
前記検知部が、2台以上のコントローラが現用系となったことを検知し、かつ、前記判断部が、前記データベースに異常が発生していないと判断した場合であっても、前記通知部による通知を受信し、当該通知元のコントローラのデータベースに保持しているデータ数よりも、自機のデータベースに保持しているデータ数が少ない場合には、自機を再起動して待機系とすることを特徴とするデータ同期方法。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、冗長システムを構成する複数のコントローラ間でデータを同期させる技術に関する。
【背景技術】
【0002】
従来、プラントなどのプロセス制御に用いるプロセス制御システムにおいて、高信頼性を要求される場合には、複数のコントローラを設ける冗長構造をもつ構成が用いられている。このように、コントローラを多重化してシステムを冗長させることで、システムはより安定した運用を行える。このような冗長構造をもつ従来のプラント制御システムは、例えば、現用系として稼働する第1のコントローラと、待機系として稼働する第2のコントローラを備え、第1のコントローラに異常が発生すると、待機系だった第2のコントローラを現用系に切り替える。
【0003】
ところで、このような冗長システムにおいて、現用系のノードが複数存在する状態を「スプリットブレイン」という。一般的に、冗長システムでは、現用系のノードと待機系のノードとを繋ぐネットワークが障害等により遮断され、現用系のノードと待機系のノードとが独立して動作する場合にスプリットブレインとなる。
【0004】
スプリットブレインでは、現用系のノードと待機系のノードとが独立して動作するため、それぞれのノードで異なるデータを保持することとなる。したがって、この状態でシステムがスプリットブレインから復旧すると、現用系のノードと待機系のノードとの間でデータの整合性が取れない状態となる。そこで、現用系のノードと待機系のノードとの間でデータの差異が生じないように、システムをスプリットブレインから復旧させる技術が提案されている。
【0005】
例えば、特許文献1に記載された遠隔クラスタシステムでは、スプリットブレインから復旧する際、現用系のノード(プライマリサーバ)が、通信遮断中に自サーバで更新された差分データを待機系のノード(セカンダリサーバ)に送信する。セカンダリサーバは、プライマリサーバから受信した差分データと、通信遮断中に自サーバで更新された差分データとをマージして、プライマリサーバに送信する送信データと、自サーバに反映させる反映データとを作成する。そして、セカンダリサーバは、反映データを自サーバに反映させるとともに、送信データをプライマリサーバに送信する。プライマリサーバは、セカンダリサーバから送られた送信データを自サーバに反映させる。この遠隔クラスタシステムは、このようにして、双方のサーバで保持するデータに差異が生じないようにシステムをスプリットブレインから復旧させる。
【先行技術文献】
【特許文献】
【0006】
【発明の概要】
【発明が解決しようとする課題】
【0007】
ところで、スプリットブレインは、ビル等の施設内に設置されている複数の監視対象機器を監視する施設監視システムにおいても発生することがある。例えば、施設監視システムは、一般的に現用系と待機系の2台のコントローラによる二重化構成とされるが、双方のコントローラを繋ぐネットワークが障害等により遮断するとスプリットブレインとなる。この場合、現用系のコントローラと待機系のコントローラとは、独立して動作するため、それぞれのコントローラで異なるデータを保持することとなる。ところが、従来の施設監視システムでは、スプリットブレインから復旧するとき、両コントローラの間でデータの整合性を取るための処理は行われておらず、改善が求められていた。
【0008】
また、特許文献1に記載の遠隔クラスタシステムでは、プライマリサーバとセカンダリサーバのそれぞれが保持するデータに異常があるかどうかの確認は行っていない。したがって、仮にプライマリサーバの保持するデータに何らかの異常があった場合、当該異常のあるデータがセカンダリサーバに同期されて、システムがダウンするなどの不具合が発生するおそれがあった。
【0009】
この発明は、上記のような課題を解決するためになされたもので、スプリットブレインからの復旧時に、複数のコントローラ間で異常なデータが同期されることによる不具合の発生を回避しつつデータの整合性を保つことを目的としている。
【課題を解決するための手段】
【0010】
この発明に係る冗長システムは、複数のコントローラを含んで構成され、各コントローラは、自機が現用系の場合に、自機のデータベースに異常が発生しているか否かを判断する判断部と、自機が現用系の場合に、冗長システムを構成する2台以上のコントローラが現用系となったか否かを検知する検知部と、検知部が、2台以上のコントローラが現用系となったことを検知し、かつ、判断部が、自機のデータベースに異常が発生していると判断した場合に、自機を再起動して待機系とする起動部と、検知部が、2台以上のコントローラが現用系となっていないことを検知し、かつ、判断部が、自機のデータベースに異常が発生していないと判断した場合に、自機のデータベースに保持するデータを待機系のコントローラに同期させる同期部と、判断部がデータベースに異常が発生していないと判断した場合に、異常が発生していない旨を他のコントローラに通知する通知部と、を備え、起動部は、検知部が、2台以上のコントローラが現用系となったことを検知し、かつ、判断部が、データベースに異常が発生していないと判断した場合であっても、通知部による通知を受信し、当該通知元のコントローラのデータベースに保持しているデータ数よりも、自機のデータベースに保持しているデータ数が少ない場合には、自機を再起動して待機系とすることを特徴とする。
【発明の効果】
【0011】
この発明によれば、上記のように構成したので、スプリットブレインからの復旧時に、複数のコントローラ間で異常なデータが同期されることによる不具合の発生を回避しつつデータの整合性を保つことができる。
【図面の簡単な説明】
【0012】
【
図1】実施の形態1に係る冗長システム(二重化システム)の構成例を示す図である。
【
図2】実施の形態1におけるコントローラのSSDに記憶されるデータのイメージを示す図である。
【
図3】
図3Aは、実施の形態1における現用系のコントローラの構成例を示す図であり、
図3Bは、実施の形態1における待機系のコントローラの構成例を示す図である。
【
図4】実施の形態1に係る二重化システムにおいて、スプリットブレインが発生した場合の動作例を示すフローチャートである。
【
図5】実施の形態1に係る二重化システムにおいて、スプリットブレインが発生した場合の動作例を示すタイミングチャートである。
【
図6】実施の形態1におけるコントローラが自機のデータベースに異常が発生しているか否かを判断する処理の流れを示すフローチャートである。
【発明を実施するための形態】
【0013】
以下、この発明の実施の形態について図面を参照しながら詳細に説明する。
実施の形態1.
図1は、この発明の実施の形態1に係る冗長システムの構成例を示している。冗長システム1は、複数(ここでは2台)のコントローラ10(10A、10B)と、複数の監視ポイント200と、不図示の監視装置とを含んで構成されている。コントローラ10A、10Bと、各監視ポイント200と、監視装置とは、システムバス150を介して相互に通信可能に接続されている。ここでは、コントローラが2台で構成されているため、冗長システム1を二重化システム1として説明する。しかしながら、コントローラの台数は必ずしも2台でなくともよく、いずれか1台のコントローラが現用系(アクティブ)として稼働できる構成であれば、3台以上であってもよい。
【0014】
二重化システム1は、二重化機能を備えている。二重化機能は、2台のコントローラ10A、10Bで監視ポイント200の監視、制御を行う機能である。すなわち、二重化システム1は、通常時はコントローラ10Aを現用系、コントローラ10Bを待機系(スタンバイ)として稼働させ、現用系のコントローラ10Aが監視ポイント200の監視、制御、及びデータの収集等の処理を行う。コントローラ10Aは、データベース25Aが構築されたSSD(Solid State Drive)20Aを備えており、コントローラ10Aは、監視ポイント200から収集したデータを、SSD20A内のデータベース25Aに格納する。
【0015】
また、二重化機能は、データベースの同期も管理する。例えば、二重化システム1では、現用系のコントローラ10Aが起動した状態で、待機系のコントローラ10Bが起動すると、待機系のコントローラ10Bは、現用系のコントローラ10Aに対し、データベース25Aのコピーを要求する。この要求を受け付けたコントローラ10Aは、コントローラ10Bに対し、データベース25Aのコピーを送信する。コントローラ10Bは、コントローラ10Aからデータベース25Aのコピーを受信すると、当該コピーを用いて、自機が備えるSSD20B内にデータベース25Bを構築する。
【0016】
その後、コントローラ10Aは、データベース25Aの更新を完了する度に、当該データベース25Aを更新したデータのコピーをコントローラ10Bに送信する。コントローラ10Bは、コントローラ10Aから受信した更新データのコピーをデータベース25Bに書き込み、データベース25Bの更新を完了する。このようにして、二重化システム1は、データベース25A、25Bの同期を行う。
【0017】
また、二重化システム1は、現用系のコントローラ10Aに障害などの問題が発生した場合、待機系のコントローラ10Bを現用系に切り替える。現用系に切り替わったコントローラ10Bは、監視ポイント200の監視、制御、及びデータの収集等の処理を継続し、監視ポイント200から収集したデータを、SSD20B内のデータベース25Bに格納する。
【0018】
なお、実施の形態1では、コントローラ10A、10Bは、
図2に示すように、データベース25A、25Bに格納されるデータのほかに、データベース25A、25Bには格納されないが他方のコントローラとの間で同期するデータ26A、26Bを、SSD20A、SSD20Bに記憶している。
【0019】
<コントローラ10A、10Bの構成例>
次に、コントローラ10A、10Bの構成例について、
図3を参照して説明する。
図3Aは、コントローラ10Aの構成例を示し、
図3Bは、コントローラ10Bの構成例を示している。
【0020】
図3Aに示すように、コントローラ10Aは、SSD(Solid State Drive)20A、及びCPU(Central Processing Unit)30Aを備えている。SSD20Aには、前述したデータベース25Aが構築されている。
【0021】
CPU30Aは、予めSSD20Aに記憶されている所定のプログラムを実行することにより、判断部31A、検知部32A、起動部33A、通知部34A、及び同期部35Aとして機能する。
【0022】
判断部31Aは、自機(コントローラ10A)が現用系の場合に、自機のデータベース25Aに異常が発生しているか否かを判断する。例えば、判断部31Aは、自機のデータベース25Aに対して所定の信号(例えばPing)を送信し、所定時間(例えば1分)以内に応答があればデータベース25Aに接続できた(正常)と判断する。一方、判断部31Aは、所定時間以内に応答がなければ、データベース25Aに異常が発生したと判断する。判断部31Aは、少なくともコントローラ10Aが現用系として起動するときに、データベース25AにPingを送信してデータベース25Aの異常判断を実行する。
【0023】
検知部32Aは、自機(コントローラ10A)が現用系の場合に、二重化システム1を構成する2台のコントローラの双方が現用系となったか否か、すなわちスプリットブレインとなったか否かを検知する。例えば、検知部32Aは、コントローラ10Bと信号を送受信し合うことで互いの稼働状態を随時監視し、自機(コントローラ10A)が現用系として稼働している際に、コントローラ10Bが待機系から現用系に切り替わった場合に、スプリットブレインを検知する。検知部32Aがスプリットブレインを検知する具体例については後述する。
【0024】
起動部33Aは、前述の検知部32Aが、2台のコントローラの双方が現用系となったこと(スプリットブレイン)を検知し、かつ、前述の判断部31Aが自機(コントローラ10A)のデータベース25Aに異常が発生していると判断した場合に、自機を再起動して現用系から待機系に切り替える。
【0025】
また、起動部33Aは、検知部32Aにより、2台のコントローラの双方が現用系となったことを検知し、かつ、判断部31Aにより、データベース25Aに異常が発生していないと判断した場合であっても、コントローラ10Bの後述する通知部34Bによる通知を受信し、当該通知元のコントローラ10Bとの間で自機の優先度が低い場合には、自機を再起動して待機系とする。
【0026】
なお、優先度とは、どのコントローラを現用系として優先的に稼働させるかを示す度合いを示すものであり、優先度が他のコントローラより低い場合、そのコントローラは現用系から待機系に切り替わる。優先度は、ユーザ(管理者)が各コントローラに予め設定しておけばよい。
【0027】
通知部34Aは、判断部31Aによりデータベース25Aに異常が発生していないと判断した場合に、異常が発生していない旨を他のコントローラ(ここではコントローラ10B)に通知する。
【0028】
同期部35Aは、判断部31Aにより、自機のデータベース25Aに異常が発生していないと判断し、かつ、検知部32Aにより、2台以上のコントローラが現用系となっていないことを検知した場合に、自機が保持するデータを待機系のコントローラに同期させる。
【0029】
次に、コントローラ10Bの構成例について、
図3Bを参照して説明する。
図3Bに示すように、コントローラ10Bは、SSD(Solid State Drive)20B、及びCPU(Central Processing Unit)30Bを備えている。SSD20Bには、前述したデータベース25Bが構築されている。
【0030】
CPU30Bは、予めSSD20Bに記憶されている所定のプログラムを実行することにより、判断部31B、検知部32B、起動部33B、通知部34B、及び同期部35Bとして機能する。なお、判断部31B、検知部32B、起動部33B、通知部34B、及び同期部35Bの各部の機能は、前述した判断部31A、検知部32A、起動部33A、通知部34A、及び同期部35Aと基本的に同じであるため、ここではその説明を省略する。
【0031】
<二重化システム1の動作例>
次に、実施の形態1に係る二重化システム1において、スプリットブレインが発生した場合の動作例について、
図4のフローチャート、
図5のタイミングチャートに基づき説明する。ここでは、具体例として、コントローラ10Aの電源がOFFであり、コントローラ10Bが現用系として稼働している状態からの動作例を説明する。また、ここでは、現用系として稼働しているコントローラ10Bのデータベース25Bは、判断部31Bにより既に正常であると判断されているものとする。
【0032】
また、ここでは、
図4において、コントローラ10Aを単に「A系」と記載し、コントローラ10Bを単に「B系」と記載する。また、
図5において、かっこ付きの数字は
図4のフローチャートにおけるステップ番号に対応し、「A」はコントローラが現用系であることを示し、「S」はコントローラが待機系であることを示す。
【0033】
まず、二重化システム1は、コントローラ10Aを待機系として起動する(ステップST11)。
【0034】
次に、コントローラ10Aは、現用系として稼働しているコントローラ10Bに対し、コントローラ10Bが保持しているデータ(データベース25B、及び同期するデータ26B(不図示))のコピーを要求する。この要求を受け付けたコントローラ10Bは、自機の保持するデータのコピーをコントローラ10Aに送信し、コントローラ10Bの保持するデータをコントローラ10Aのデータに同期する(ステップST12)。
【0035】
ここで、この同期中に、コントローラ10Aとコントローラ10Bとを接続するネットワークが障害等により切断したとする。すると、二重化システム1は、同期処理が中断され、コントローラ10Aのデータベース25Aには、同期途中の不完全なデータが残される(ステップST13)。なお、
図5において、データベース25Aの表示を一部破線としているのは、データベース25Aに不完全なデータが残されていることを示している。
【0036】
次に、二重化システム1は、ネットワークが切断したことに伴い、コントローラ10Aを独立して動作させるべく、コントローラ10Aの電源を一旦OFFにし、コントローラ10Aを現用系として起動する(ステップST14)。このとき、コントローラ10Aは、自機のデータベース25Aに異常が発生しているか否かを判断する。この場合の処理について、
図6のフローチャートを参照して説明する。
【0037】
図6は、コントローラ10Aが自機のデータベース25Aに異常が発生しているか否かを判断する処理の流れを示すフローチャートである。まず、コントローラ10Aは、起動を開始すると(ステップST41)、データベース25Aの立ち上げを開始する(ステップST42)。そして、コントローラ10Aは、判断部31Aにより、データベース25Aに対してPingを送信する(ステップST43)。
【0038】
次に、判断部31Aは、データベース25Aから所定時間(例えば1分)以内に応答があるか否かを確認する(ステップST44)。その結果、データベース25Aから所定時間以内に応答があれば(ステップST44;YES)、判断部31Aは、データベース25Aが正常に立ち上がったと判断する(ステップST45)。そして、コントローラ10Aは起動を正常に完了する(ステップST46)。
【0039】
一方、データベース25Aから所定時間以内に応答がなければ(ステップST44;NO)、判断部31Aは、データベース25Aに異常が発生していると判断する(ステップST47)。この場合、コントローラ10Aはエラー状態となって起動を停止する(ステップST48)。
【0040】
図4、
図5の例では、二重化システム1は、同期処理の途中でネットワークが切断したため、コントローラ10Aのデータベース25Aには、同期途中の不完全なデータが残されている。したがって、判断部31Aは、送信したPingに対するデータベース25Aからの応答を得ることができず、データベース25Aに異常が発生していると判断する。その結果、コントローラ10Aは、エラー状態となって起動を停止する(ステップST15)。
【0041】
その後、二重化システム1では、切断していたネットワークが復旧する(ステップST16)。これにより、二重化システム1は、コントローラ10Aとコントローラ10Bとの間の通信が再開する。
【0042】
その後、二重化システム1では、コントローラ10Aの検知部32Aがスプリットブレインを検知する。同様に、コントローラ10Bの検知部32Bもスプリットブレインを検知する(ステップST17)。
【0043】
次に、コントローラ10Aは、コントローラ10Bに対し、通信により、自機のデータベース25Aに異常が発生していることを通知する。これにより、コントローラ10Bは、コントローラ10Aのデータベース25Aに異常が発生していることを検知する(ステップST18)。なお、このステップST18の処理は、必ずしも実行されなくともよいが、コントローラ10Bが確実にデータベース25Aの異常を検知するために実行されるのが望ましい。
【0044】
その後、コントローラ10Aは、起動部33Aにより、自機を待機系として再起動する(ステップST19)。
【0045】
次いで、コントローラ10Bは、コントローラ10Aが待機系となったため、検知部32Bにより、2台のコントローラが現用系となっていないこと、すなわちスプリットブレインではないことを検知する(ステップST20)。そして、コントローラ10Bは、同期部35Bにより、コントローラ10Bの保持するデータ(データベース25B、及び同期するデータ26B)をコントローラ10Aの保持するデータ(データベース25A、及び同期するデータ26A)に上書きすることで、コントローラ10Bの保持するデータを
コントローラ10Aに同期させる(ステップST21)。これにより、二重化システム1は、コントローラ10Aとコントローラ10Bとの間でデータの整合性が保たれ、正常に二重化された状態に復旧する。
【0046】
なお、上記の例では、二重化システム1は、ステップST14において、判断部31Aがデータベース25Aに異常が発生していると判断した後に、ステップST17において、検知部32A、32Bがスプリットブレインを検知した。しかしながら、二重化システム1は、検知部32A、32Bによるスプリットブレインの検知を実行した後に、判断部31Aがデータベース25Aに異常が発生していると判断してもよく、あるいはこれらの処理を並行して実行してもよい。
【0047】
また、上記の例では、コントローラ10Aの電源がOFFとなっており、コントローラ10Bが現用系として稼働している状態からの動作例を説明した。しかしながら、これとは逆に、コントローラ10Aが現用系として稼働し、コントローラ10Bの電源がOFFである場合でも、各コントローラは上記と同様の流れでスプリットブレインからの復旧及びデータの同期を行えばよい。
【0048】
このように、二重化システム1では、スプリットブレインからシステムを復旧する際、コントローラ10A、10Bのデータベース25A、25Bに異常が発生しているか否かの判断を行い、データベースに異常が発生していると判断された場合、そのコントローラ(ここではコントローラ10A)を再起動して現用系から待機系に切り替える。そして、二重化システム1は、待機系に切り替わったコントローラ10Aの保持しているデータを破棄し、現用系として稼働を継続しているコントローラ10Bのデータを、待機系に切り替わったコントローラ10Aに同期するように構成した。
【0049】
特に、従来は、スプリットブレインからの復旧時に、現用系のコントローラと待機系のコントローラのそれぞれが保持するデータに異常があるかどうかの確認は行っていなかった。そのため、仮に同期するデータの提供元となるコントローラのデータに何らかの異常があった場合、当該異常のあるデータが同期されてシステムがダウンするなどの不具合が発生するおそれがあった。
【0050】
これに対し、二重化システム1は、スプリットブレインからの復旧に際し、まず現用系のコントローラと待機系のコントローラのそれぞれのデータベースに異常が発生しているか否かを判断し、データベースに異常が発生していると判断されたコントローラを現用系から待機系に切り替える。そして、待機系に切り替わったコントローラの保持しているデータを破棄するとともに、現用系として稼働を継続するコントローラの保持するデータを、待機系に切り替わったコントローラに同期させる。これにより、二重化システム1は、スプリットブレインからの復旧時に、コントローラ10Aとコントローラ10Bとの間で異常なデータが同期されることによりシステムに不具合が発生することを回避しつつ、データの整合性を保つことができる。
【0051】
なお、
図4、
図5では、コントローラ10Aのデータベース25Aに異常が発生したと判断された例を説明したが、例えばコントローラ10Aのデータベース25Aに異常がなく、コントローラ10Bのデータベース25Bにも異常がなかった場合も想定される。その場合、両コントローラ10A、10Bは、通知部34A、34Bにより、自機のデータベースに異常がないと判断された旨を相互に通知し合う。
【0052】
そして、コントローラ10A、10Bは、検知部32A、32Bが、2台以上のコントローラが現用系となったことを検知し、かつ、判断部31A、31Bが、データベース25A、25Bに異常が発生していないと判断した場合であっても、通知部34A、34Bによる通知を受信し、当該通知元のコントローラとの間で自機の優先度が低い場合には、起動部33A、33Bにより自機を再起動して待機系とする。
【0053】
例えば、
図4のステップST15において、コントローラ10Aは判断部31Aにより、データベース25Aに異常がないと判断したとする。この場合、通知部34Aは、データベース25Aに異常がないと判断した旨をコントローラ10Bに通知する。一方、コントローラ10Bでも、判断部31Bにより、データベース25Bに異常がないと判断されているので、通知部34Bは、データベース25Bに異常がないと判断された旨をコントローラ10Aに通知する。
【0054】
このとき、コントローラ10Aは、自機のデータベース25Aに異常が発生していないと判断した場合であっても、自機の優先度がコントローラ10Bの優先度よりも低ければ、起動部33Aにより自機を再起動して待機系とする。そして、コントローラ10Bは、判断部31Bにより、データベース25Bに異常が発生していないと判断し、かつ、検知部32Bにより、2台のコントローラが現用系となっていないことを検知すると、同期部35Bにより、自機のデータを待機系のコントローラ10Aに同期させる。
【0055】
なお、これとは逆に、例えばコントローラ10Bの優先度がコントローラ10Aの優先度よりも低い場合も、上記と同様の流れで、コントローラ10Bが待機系に切り替わり、コントローラ10Aのデータをコントローラ10Bに同期させればよい。
【0056】
また、冗長システムが例えば3台以上のコントローラで構成され、データベースに異常がないと判断されたコントローラが2台以上あった場合も、上記と同様の流れで待機系に切り替わるコントローラを決定すればよい。例えば、冗長システムが3台のコントローラで構成され、3台ともデータベースに異常がないと判断された場合、各コントローラは、通知部により、自機のデータベースに異常がないと判断された旨を相互に通知し合う。この場合、各コントローラは、自機と当該通知元のコントローラとの間で優先度を比較し、自機の優先度が低い場合には、起動部により自機を再起動して待機系とする。そして、最も優先度の高いコントローラ(すなわち現用系を維持するコントローラ)が、同期部により自機のデータを待機系のコントローラに同期させればよい。
【0057】
なお、待機系に切り替わるコントローラを優先度に基づいて決定する方法はあくまで一例であり、その他の方法で待機系に切り替わるコントローラを決定してもよい。例えば、各コントローラのデータベースに格納されているデータ数を比較し、データ数が最も多いコントローラ以外のコントローラを待機系に切り替えるようにしてもよい。
【0058】
以上のように、実施の形態1によれば、冗長システム1は、複数のコントローラ10A、10Bを含んで構成され、コントローラ10A、10Bは、自機が現用系の場合に、データベース25A、25Bに異常が発生しているか否かを判断する判断部31A、31Bと、自機が現用系の場合に、2台以上のコントローラが現用系となったか否かを検知する検知部32A、32Bと、判断部31A、31Bが、データベース25A、25Bに異常が発生していると判断し、かつ、検知部32A、32Bが、2台以上のコントローラが現用系となったことを検知した場合に、自機を再起動して待機系とする起動部33A、33Bと、検知部32A、32Bが、2台以上のコントローラが現用系となっていないことを検知し、かつ、判断部31A、31Bが、データベース25A、25Bに異常が発生していないと判断した場合に、自機のデータを待機系のコントローラに同期させる同期部35A、35Bと、を備える。これにより、冗長システム1は、スプリットブレインからの復旧時に、複数のコントローラ間で異常なデータが同期されることによりシステムに不具合が発生することを回避しつつ、データの整合性を保つことができる。
【0059】
また、実施の形態1によれば、冗長システム1は、判断部31A、31Bがデータベース25A、25Bに異常が発生していないと判断した場合に、異常が発生していない旨を他のコントローラに通知する通知部34A、34Bを備え、起動部33A、33Bは、検知部32A、32Bが、2台以上のコントローラが現用系となったことを検知し、かつ、判断部31A、31Bが、データベース25A、25Bに異常が発生していないと判断した場合であっても、通知部34A、34Bによる通知を受信し、当該通知元のコントローラとの間で自機の優先度が低い場合には、自機を再起動して待機系とする。これにより、冗長システム1は、同期するデータの提供元となり得るコントローラが複数あった場合でも、優先度が他より低いコントローラが待機系に切り替わるため、コントローラ間でデータの整合性を速やかに保つことができる。
【0060】
また、実施の形態1によれば、判断部は、データベースに対して所定の信号を送信し、当該信号に対して所定時間以内に応答がない場合に、当該データベースに異常が発生していると判断する。これにより、冗長システム1は、データベースに異常が発生しているか否かを容易に判断することができる。
【0061】
なお、本願発明はその発明の範囲内において、実施の形態の任意の構成要素の変形、もしくは実施の形態において任意の構成要素の省略が可能である。
【符号の説明】
【0062】
1 二重化システム(冗長システム)
10 コントローラ
10A 現用系のコントローラ
10B 待機系のコントローラ
20A、20B SSD
25A、25B データベース
26A、26B 同期するデータ
30A、30B CPU
31A、31B 判断部
32A、32B 検知部
33A、33B 起動部
34A、34B 通知部
35A、35B 同期部
150 システムバス
200 監視ポイント