JP2009037575A - 分散システム - Google Patents

分散システム Download PDF

Info

Publication number
JP2009037575A
JP2009037575A JP2007203755A JP2007203755A JP2009037575A JP 2009037575 A JP2009037575 A JP 2009037575A JP 2007203755 A JP2007203755 A JP 2007203755A JP 2007203755 A JP2007203755 A JP 2007203755A JP 2009037575 A JP2009037575 A JP 2009037575A
Authority
JP
Japan
Prior art keywords
node
failure
counter
nodes
synchronization
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2007203755A
Other languages
English (en)
Other versions
JP4512621B2 (ja
Inventor
Masahiro Matsubara
正裕 松原
Kohei Sakurai
康平 櫻井
Kotaro Shimamura
光太郎 島村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2007203755A priority Critical patent/JP4512621B2/ja
Priority to US12/184,447 priority patent/US20090040934A1/en
Publication of JP2009037575A publication Critical patent/JP2009037575A/ja
Application granted granted Critical
Publication of JP4512621B2 publication Critical patent/JP4512621B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0709Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a distributed system consisting of a plurality of standalone computer nodes, e.g. clusters, client-server systems
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B23/00Testing or monitoring of control systems or parts thereof
    • G05B23/02Electric testing or monitoring
    • G05B23/0205Electric testing or monitoring by means of a monitoring system capable of detecting and responding to faults
    • G05B23/0218Electric testing or monitoring by means of a monitoring system capable of detecting and responding to faults characterised by the fault detection method dealing with either existing or incipient faults
    • G05B23/0224Process history based detection method, e.g. whereby history implies the availability of large amounts of data
    • G05B23/0227Qualitative history assessment, whereby the type of data acted upon, e.g. waveforms, images or patterns, is not relevant, e.g. rule based assessment; if-then decisions
    • G05B23/0237Qualitative history assessment, whereby the type of data acted upon, e.g. waveforms, images or patterns, is not relevant, e.g. rule based assessment; if-then decisions based on parallel systems, e.g. comparing signals produced at the same time by same type systems and detect faulty ones by noticing differences among their responses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0736Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in functional embedded systems, i.e. in a data processing system designed as a combination of hardware and software dedicated to performing a certain function
    • G06F11/0739Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in functional embedded systems, i.e. in a data processing system designed as a combination of hardware and software dedicated to performing a certain function in a data processing system embedded in automotive or aircraft systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/076Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit

Abstract

【課題】
分散制御システムでは障害を特定し、障害発生状況に応じて、ノード間で足並みを揃えて状態遷移することがシステムの安全性を保つために重要である。ノード間相互監視を行うことで、障害発生数を管理するエラーカウンタの値はノード間で一致するが、障害発生状況に応じては、カウンタ値がノード間でずれてしまう。この為、ノード間でエラーカウンタ同期の実施が必要となる。
【解決手段】
複数ノードがネットワークを介して接続される分散システムにおいて、複数ノードの各々は、他ノードに対する障害監視を行う障害監視部と、ネットワークを介して他ノードの障害を検知するデータを送受信し、障害監視結果を交換する送受信部と、交換された障害監視結果に基づいて、ノード障害を特定する障害特定部と、障害があると特定されたノードのエラーの数をカウントするカウンタ部と、エラーカウンタ値をノード間で交換し同期を取るカウンタ同期部を備える。
【選択図】図1

Description

本発明は、ネットワークにより結合された複数の装置が協調動作して、制御を行う分散システムに関する。
近年、自動車の運転快適性や安全性の向上を目指して、機械的な結合ではなく、電子制御により、運転者のアクセル,ステアリング,ブレーキなどの操作を車両の駆動力,操舵力,制動力発生機構などに反映させる車両制御システムの開発が行われている。このようなシステムでは、自動車内に分散した複数の電子制御装置(ECU:Electronic Control Unit)がネットワークを介してデータをやり取りして協調動作を行う。この際、同一ネットワーク内のあるECUに障害が発生した際に、残りの正常なECUが、どのECUに障害が発生したかを正確に特定し、障害箇所に応じた適切なバックアップ制御を行うことが、フェールセーフ上必要不可欠となる。上記課題を解決するために、システムを構成する各ノード(ECUなどの処理主体)がネットワーク内の他ノードの状態を監視する技術がある(特許文献1参照)。
特開2000−47894号公報
特許文献1によれば、データベースアプリケーションの稼動状態などに関する監視情報を各ノードで相互に共有するための特別なノード(共有ディスク)が必要になり、この共有ディスクが故障するとシステム内の障害ノード監視を継続することができなくなってしまう。また、共有ディスクを設けることにより、システムのコストが増加することが懸念される。
その課題を解決するために、以下のような方法が考えられる。例えば、あるノードのある項目について、各ノードが単独で障害を検出するための監視を行い、その障害監視結果を、ネットワークを通してノード間で交換し、各ノードにて障害監視結果を集約し、最終的な障害の特定を行う。また、障害特定結果をネットワークで交換し、一致化を図ったり、矛盾を発見したりする方法も考えられる。障害発生数はエラーカウンタで把握し、カウンタ値が指定の閾値以上となった時点で、制御アプリケーションに障害発生の事実を通知する。障害通知を受けた制御アプリケーションは、障害発生の状況に応じてバックアップ制御への移行など、障害対策を実行する。
以上のようなノード間の相互監視を行えば、エラーカウンタ値はノード間で原則的に一致する。しかし、ノードリセットが発生した場合や、通信障害により障害監視結果や障害特定結果の交換を行えない場合に、ノード間でエラーカウンタ値がずれてしまう場合もある。
エラーカウンタ値がずれると、障害通知のタイミングがずれ、バックアップ制御への移行時機がノード間でバラバラになる。制御モードの遷移は、ノード間で足並みを揃えて行わないと、車両の安全性,安定性が確保できない恐れがある。例えばブレーキバイワイヤー(以下、BBWと称す)では、極端に不均衡な各輪のブレーキ力がスリップを引き起こす恐れがある。
このような問題を回避するために、エラーカウンタの同期を取る必要がある。その同期手段として、自ノードのカウンタがある値に到達した以降、他ノードにそのことを通知する方法がある。例えば、カウンタ値が10で障害通知をする設定時に、自ノードのカウンタ値が9になったら、次以降の通信サイクルでは他ノードへの送信データ中に特定ビットを立てることで、障害通知寸前であることを他ノードに通知する。この特定ビットを以降では「リーチフラグ」と呼び、リーチフラグを用いるエラーカウンタ同期を「リーチフラグ同期」と呼ぶことにする。
リーチフラグを受信してカウンタ値の同期を取ったノードは、その通信サイクル以降にてノード間相互監視によりカウンタ値が障害通知寸前のノードについて障害を特定すると、エラーカウンタ値が10になる。これにより、全ノードで同時に障害通知がなされ、バックアップ制御への移行を行うことが可能となる。
上記のように、リーチフラグ同期は簡便で使いやすい手法だが、一方でロバストでないという性質もある。障害により誤ってリーチフラグが立ってしまうと、それを受信したノードではカウンタ値が大幅に変化してしまう。これはカウンタ値が増加するので、安全サイドであると捉えることもできるが、システムのアベイラビリティを下げ、場合によっては信頼性も低下することにも繋がる。
本発明は、上記の問題を解決して、ネットワークにより結合された複数の装置が協調動作して、制御を行う分散システムを提供することにある。
これを解決するために、本発明では、相互監視を行いそれぞれのエラーカウンタを持つノード同士が、エラーカウンタにて管理するエラー発生数(以下「エラーカウンタ値」)の交換を行い、ある条件が成立した際に、他ノードのカウンタ値もしくはそれから導かれる値に、自ノードのカウンタ値を合せることにより、ノード間でカウンタ同期を取る構成を備えるものである。そして、この方法を、エラーカウンタ送信同期と呼ぶ。
そして、本発明では、エラーカウンタ送信同期を取るためのシステム構成は、複数のノードがネットワークを介して接続される分散システムであり、複数のノードの各々は、他ノードに対する障害監視を行う障害監視部と、ネットワークを介して他ノードの障害を検知するためのデータを送受信し、障害監視結果を交換する送受信部と、交換された障害監視結果に基づいて、ノード障害を特定する障害特定部と、障害があると特定されたノードのエラーの数をカウントするカウンタ部と、エラーカウンタ値をノード間で交換し同期を取るカウンタ同期部を備えるものである。
これにより、本願の発明では、リーチフラグ同期ではカウンタが特定の値のときだけしか同期をとれないが、エラーカウンタ同期では、その値でも同期が取れるため、よりロバストな分散システムを構築できる。
本発明によれば、ノード間でのエラーカウンタ同期がロバストになり、ノード間で同時機に制御アプリケーションへの障害通知を行うことができる。また不必要な障害通知とそれを受けたバックアップ制御への移行を避け、システムのアベイラビリティを向上することができ、システムの信頼性も高く保つことができる。
以下、本発明の実施例を図面を用いて説明する。
図1は、分散システムの構成図である。
分散システムは、複数のノード10(10−1,10―2,…,10−n)からなり、これらは、ネットワーク100を介して接続される。ここで、ノードとは、ネットワークを介して情報通信可能な処理装置であり、CPUを含む各種の電子制御装置,アクチュエータとそのドライバ,センサ等が含まれる。ネットワーク100は多重通信可能な通信ネットワークであり、あるノードから当該ネットワークに接続された他の全てのノードに対して、同一内容を同時に送信するブロードキャスト送信が可能である。
各ノードi(iはノード番号,i=1〜n)は、CPU11−i,主メモリ12−i,I/F13−i、及び、記憶装置14−iとからなり、これらは内部通信線等により接続されている。又、I/F13−iは、ネットワーク100と接続されている。
記憶装置14−iは、送受信処理部141−i,障害監視部142−i,障害特定部143−i、及び、カウンタ部144−i,カウンタ同期部145−i等のプログラム、並びに、障害特定結果146−iを格納する。障害特定結果146−iは、後述の監視結果集約表,障害特定結果表を含む。
CPU11−iは、これらのプログラムをメインメモリ12−iに読み込み、実行することにより、処理を行う。本稿で説明するプログラムやデータは、予め記憶装置に格納しておいてもよいし、メモリカード等の記憶媒体から入力してもよいし、ネットワーク経由で他の装置からダウンロードしてもよい。又、当該プログラムにより実現される機能を、専用のハードウェアにより実現してもよい。以下では、プログラムを主体として記載するが、実際の主体はCPUである。
送受信処理部141−iは、ネットワーク100を介して、ノード障害を検知するためのデータ、並びに障害監視結果などを送受信する。障害監視部142−iは、ノードの障害を検知するためのデータに基づいて、どのノードに障害があるかの障害監視(MON)を行い、その結果を送受信処理部141−iを用いて他ノードに送信する。障害特定部143−iは、自ノード及び送受信処理部141−iにて受信する他ノードによる障害監視結果に基づき、障害特定を行う。カウンタ部144−iは、障害特定にて障害があると特定されたノードのエラーの数を、障害種類毎にカウントする。カウンタ同期部145−iは、自ノードのエラーカウンタ値を送受信処理部141−iを用いて他ノードへ送信し、送受信処理部141−iにて受信する他ノードのエラーカウンタ値に、後述する条件が成立するときのみ自ノードのカウンタ値を合せることにより、ノード間でエラーカウンタの同期を取る。
図2は、エラーカウンタ送信同期の処理フローを示す。これらの処理は、各ノード(具体的にはカウンタ同期部145−i)が、ネットワーク100を介して互いに通信しながら、通信サイクル毎などの時間的な同期を取りつつ行う。
ステップ210では、障害特定などの結果として判明する、ノード毎・障害種類毎の障害有無に応じて、エラーカウンタ値を変更し、仮のカウンタ値とする。カウンタ値変更の判断材料とする障害有無の判定結果として何を用いるか、またカウンタ値変更の実施時機については、相互監視の方法により異なるので後述する。カウンタ値が仮である理由は、ステップ240にてカウンタ値のノード間同期が済むまで、確定できないからである。
ステップ220では、他ノードに送信するエラーカウンタ値を選択する。すなわち、どのノードの、どのエラー種類のカウンタ値を送信データに含めるかを選択する。選択方法は相互監視方法により異なるので後述する。
ステップ230では、送受信処理部141−iがネットワーク100を介して、ステップ210にて得る仮のエラーカウンタ値を送受信しあい、交換する。
ステップ240では、ステップ230にて他ノードから受信したカウンタ値、および自ノードのカウンタ値から、エラーカウンタ同期の条件が成立するかを判断し、条件が成立する場合には、交換したカウンタ値から導かれる値(以下「同期カウンタ値」)に自ノードのカウンタ値を合せることにより、エラーカウンタをノード間で同期させる。エラーカウンタ同期条件や同期カウンタ値の導き方は各種あるため、後述する。
図3は、図2のステップ240である「エラーカウンタ同期条件判定・実行」の詳細を示した処理フローである。この処理はエラーカウンタ毎、すなわちエラーカウンタが管理する対象ノード毎・通信チャンネル毎・エラー種類毎に行う。
ステップ300では、ステップ230にて他ノードから受信したカウンタ値、および自ノードのカウンタ値から、同期カウンタ値を計算する。
ステップ310では、ステップ230にて他ノードから受信したカウンタ値、および自ノードのカウンタ値や、ステップ300にて計算した同期カウンタ値から、エラーカウンタ同期条件が成立するか否かを判断する。同期条件が成立する場合にはステップ320へ、成立しない場合にはステップ350へ進む。
ステップ320では、自ノードのエラーカウンタ値を、ステップ300にて計算した同期カウンタ値に修正して合わせる。同期カウンタ値と自ノードのカウンタ値とが同じであれば、修正しなくてもよい。
ステップ330では、自ノードのエラーカウンタ値が仮同期状態であるかを判断する。仮同期とは、同期カウンタ値に自ノードのカウンタ値を合わせているが、まだ確定していない状態のことを言う。仮同期状態であればステップ335へ、そうでなければ処理を終了する。
ステップ335では、同期処理の対象としているエラーカウンタ(以下「同期対象エラーカウンタ」)について、指定回数だけ連続してエラーカウンタ同期に成功しているか、すなわちステップ310の同期条件が成立したか否かを判断する。成功していれば、ステップ340へ進んで同期を確定し、仮同期状態を解く。その後、処理を終了する。連続同期成功回数が指定回数に到達していなければ、仮同期状態のままとし、処理を終了する。この指定回数は、ソフトウェアにて設計者が事前に設定しておく。
ステップ350では、同期対象エラーカウンタについて、カウンタリセット状態であるか否かを判断する。カウンタリセット状態か否かの判断方法としては、次の2つが考えられる。
(1)カウンタ値が0
(2)リセットフラグが有効(ビットが立っている)
カウンタリセット状態になるのは、ノードが自己診断や相互監視により自ノードに異常があるのを発見し、自ノードをリセットすることにより、カウンタがクリアされる場合などがある。カウンタリセット状態であればステップ360へ、そうでなければステップ370へ進む。
ステップ360では、自ノードのカウンタ値を同期カウンタ値に仮同期する、すなわち仮に合わせる。これにより、ノードリセット後などのカウンタリセット状態にてエラーカウンタ同期条件が成立しない状況でも、カウンタ同期を取ることができる。その後、処理を終了する。
ステップ370では、ステップ335とは逆に、指定回数だけ連続してエラーカウンタ同期に失敗しているか、すなわちステップ310の同期条件が成立していないかを判断する。失敗していればステップ380へ、失敗していなければステップ385へ進む。
ステップ380では、カウンタ同期に連続失敗しているのは自ノードのエラーカウンタに間違いがあるという理由付けのもと、自ノードのカウンタ値を修正し、同期カウンタ値に仮同期する。その後、処理を終了する。
ステップ385では、同期対象エラーカウンタについて、仮同期状態であるかを判断する。仮同期状態であればステップ390へ、そうでなければ処理を終了する。
ステップ390では、仮同期しているカウンタ値が間違いであるという理由付けのもと、同期対象エラーカウンタをカウンタリセット状態にする。
同期カウンタ値の計算方法としては、次のものが考えられる。1つは、あるノード・エラー種類についてのエラーカウンタ値を送信するノードが1つだけの場合、そのノードが送信するカウンタ値とする方法である。自ノードが送信ノードである場合には、自ノードのカウンタ値とする。1つは、あるノード・エラー種類についてのエラーカウンタ値を送信するノードが複数ある場合、それらノードが送信するカウンタ値から、多数決や中央値を取るとか、平均した値を四捨五入により整数化する方法である。1つは、受信したカウンタ値の最大数を取る方法である。
エラーカウンタ同期条件としては、次のものが考えられる。1つは、同期カウンタ値が自ノードのカウンタ値と比較して、差が小さいことである。具体的には、「<エラーカウンタ同期条件1>計算した同期カウンタ値が、自ノードのカウンタ値から+k〜−m(k=1,2,3…,m=0,1,2…)の範囲内にあること」である。1つは、「<エラーカウンタ同期条件2>同期カウンタ値が前回の同期処理の際に計算した同期カウンタ値と比較して、差が小さい、すなわち+k’〜−m’(k’=1,2,3…m’=0,1,2…)の範囲内にあること」である。kやm,k’,m’は、ソフトウェアにて設計者が事前に設定しておく。
1つは、同期カウンタ値の計算方法として、受信した複数のカウンタ値から多数決や中央値を取るとき、「<エラーカウンタ同期条件3>同期カウンタ値の計算が成立すること」である。すなわち、同期カウンタ値が計算できれば、エラーカウンタ同期条件が成立する、とする。これらエラーカウンタ同期条件は、1つでも成立すればエラーカウンタ同期可としても良いし、複数条件の成立を要求してもよい。
相互監視の障害監視(MON)では、自ノードや他ノードについての異常を検知するが、図2や図3のエラーカウンタ同期処理のなかでの異常を障害監視(MON)の監視項目としてもよい。
例えばステップ310にてエラーカウンタ同期条件が不成立の場合には、同期対象エラーカウンタについてカウンタ値を送信しているノードについて、障害監視部142−iは「異常あり」と判定してもよい。この障害監視結果を用いた障害特定にて「異常あり」と判定されたノードは、同期対象エラーカウンタをカウンタリセット状態にすることで、エラーカウンタの同期を取りやすくなる。
また、例えばステップ370にて指定回数だけ連続的に同期失敗している場合には、自ノードについて「異常あり」としてもよい。
図4は、ノード間相互監視による障害特定処理のフロー図を示す。これらの処理は、各ノードが、ネットワーク100を介して互いに通信しながら、通信サイクル毎などの時間的な同期を取りつつ行う。
ステップ410にて、障害監視部141−iは、他ノードに対する障害監視(MONとする)を行う。受信データや受信時の状況から、送信ノードについての障害有無を、自ノード単独で判断する。また、自ノードの自己診断による障害監視も行う。
障害監視(MON)の対象項目(以下「障害監視項目」)は、複数設定してもよい。例えば「受信異常」という項目では、未受信や誤り検出符号による誤り検出を発見するなど、データ受信関係でエラーのあるときに、送信ノードについて異常ありとする。「通番異常」という項目では、送信ノードはアプリケーションが通信サイクル毎にインクリメントする通番を送受信データに付加し、受信ノードが通番のインクリメントを確認し、インクリメントされていないときに、送信ノードに異常ありとする。通番は送信ノードのアプリケーション異常を確認するための番号である。「自己診断異常」という項目では、各ノードが自ノードの異常有無について自ら診断した結果(以下「自己診断結果」)を、他ノードに対して送信し、受信ノードが自己診断結果から、送信ノードについての異常を検知する。「自己診断異常」と「通番異常」を合わせて一つの障害監視項目に統合し、どちらかの項目で異常があれば、統合した障害監視項目にて「異常あり」としてもよい。
次にステップ420では、送受信処理部142−iは、ステップ410で得られた障害監視(MON)結果を、ネットワーク100を介して送受信し合い、ノード間で交換する(EXD1とする)。各ノードは自ノード分を含む全ノードからの障害監視結果を保持することになる。集約された障害監視結果は、障害監視結果表に書き込まれる。
次にステップ430では、障害特定部143−iは、ステップ420で各ノードに集約された障害監視(MON)結果から、障害特定(ID1とする)を行う。障害特定の対象とするノードは、相互監視に参加しているノードのうち自ノード以外の1つとし、これを自ノードが障害特定の責任を持つノードとして定める。また、対象ノードはノード間で重複がないようにし、さらに通信サイクル毎にローテーションする。これにより、障害特定処理の負荷をノード間で分散して低減する。
障害特定(ID1)の方法は、各障害監視項目について、集約された障害監視(MON)結果から異常有無の多数決を取り、「異常あり」が過半数であれば、当該ノードの当該障害監視項目に障害ありとする。多数決では閾値が過半数であるが、閾値を指定し、「異常あり」とするノード数(障害監視結果数)がその閾値以上であるかを見てもよい。
次にステップ440では、送受信処理部142−iは、ステップ430で得られた1ノードについての障害特定(ID1)結果を、ネットワーク100を介して送受信し合い、ノード間で交換する(EXD2とする)。これにより各ノードは、自ノード分を含む全ノードについての障害特定結果を保持することになる。
次にステップ450では、障害特定部143−iは、ステップ440で各ノードに集約された障害特定(ID1)結果から、障害特定(ID2とする)を行う。これは、特定された障害を確定するものである。障害特定結果は、障害特定結果表に書き込まれる。
次にステップ460では、カウンタ同期部145−iは、エラーカウンタ同期を行う。同期方法としてエラーカウンタ送信同期を用いる場合には、図2の処理フローがステップ470の処理内容となる。またカウンタ部144−iは、エラーカウンタ同期処理を行った後のカウンタ値を、本来のエラーカウンタに反映する。
エラーカウンタ送信同期処理では、まずエラーカウンタ仮操作(ステップ210)を行う。ここでは、ステップ450の障害特定(ID2)結果から、エラーカウンタを操作する。操作したカウンタ値は、本来のエラーカウンタとは別の領域に保存する。
エラーカウンタの操作方法として、障害特定(ID2)にて「異常あり」と判定された場合、障害特定の対象ノード・監視項目に対応するエラーカウンタ値をインクリメントする。逆に「異常なし」と判定された場合には、該当エラーカウンタ値をデクリメントしたり、リセットしたりしてもよい。異常なし時の動作として、デクリメント,リセット,何もしない、のいずれにするかは、事前にソフトウェアにて設定しておく。
次にステップ470では、カウンタ部144−iは、エラーカウンタ値が指定の閾値以上となった場合、障害発生の事実を制御アプリケーションに通知する。通知手段の1つには、障害特定の対象ノード・監視項目に対応するノード障害フラグを立てる方法がある。アプリケーションはノード障害フラグを参照することにより、障害発生状況を知ることができる。また、ノード障害フラグを立てた後、制御アプリケーションに対して割込みを掛けたり、コールバック関数を呼ぶことにより、通知が即座になされるようにしてもよい。
ステップ470で障害の通知を全て終えるか、通知が無ければ、処理を終了する。
障害特定(ID1)では、上記のような多数決型の障害特定方法を取っている。この方法では、障害ありと判断する条件(以下「障害特定条件」)として、次の2つを挙げることができる。
あるノードjについての各ノードによる障害監視(MON)結果から障害特定するとき、異常を検出したノード数(障害監視結果数)が、「<障害特定条件1>閾値以上ならば、ノードjに障害ありと判断」し、「<障害特定条件2>閾値未満ならば、障害を検出したノードに障害ありと判断」する。尚、障害ありと判断されなかったノードについては障害なしと判断する。
エラーカウンタは、障害特定条件毎に用意してもよい。その場合、障害特定結果表も障害特定条件毎に用意する。ステップ460では障害特定条件に対応するエラーカウンタを操作し、カウンタ同期も障害特定条件毎に取る。以下では便宜的に、障害特定条件1に対応するエラーカウンタを「多数派異常カウンタ」、障害特定条件2に対応するエラーカウンタを「少数派異常カウンタ」と呼ぶ。
同様に、ステップ470では制御アプリケーションへのノード障害通知時に、障害特定条件も合わせて通知する。すなわちノード障害フラグをノード番号,障害監視項目の他に、障害特定条件で分ける。以下では便宜的に、多数派異常カウンタが閾値以上になることでノード障害フラグが立つ状態を「多数派異常」といい、少数派異常カウンタが閾値以上になることでノード障害フラグが立つ状態を、「少数派異常」という。
この他の障害特定方法として、障害監視(MON)結果のORを取る(1つでも「異常あり」という結果があれば、障害ありとする)、ANDを取る(全結果で「異常あり」という結果であれば、障害ありとする)などを用いてもよい。
図4のフロー内で行う障害特定(ID1)やカウンタ値送信対象選択では、処理対象ノードをローテーションする方が、ノード障害発生時にその影響を局所的にすることができる。
図5は対象ノードの変更スケジュールの一例を示している。スケジュール500にて、ノード1を処理対象とするノードは、通信サイクルiにてノード2、通信サイクルi+1にてノード3と変わり、通信サイクルi+n−1にてノードn、通信サイクルi+nにてノード2と一周し、以下繰り返す。
スケジュール500では、ある通信サイクルにて全てのノードが障害特定(ID1)やカウンタ値送信対象選択の処理対象となるように振り分けられている。ノード2の対象は、通信サイクルiにてノード3、通信サイクルi+1にてノード4、通信サイクルi+n−1にてノード1と変わり、ノードnの対象は、通信サイクルiにてノード1、通信サイクルi+1にてノード2、通信サイクルi+n−1にてノードn−1と変わる。これにより、1つのノードが障害特定(ID1)で対象とするノード数が1つだけであっても、毎通信サイクルに全てのノードについて障害特定を行うことが可能となる。
スケジュール500は、メモリなどの記憶装置にテーブルとして保持しておいてもよいし、このように規則性のあるスケジュールは簡単な数式で計算することも可能である。数式を用いる場合、例えばスケジュール500のノード1を処理対象とするノード番号は、通信サイクルをn−1で除した余りに1を加えれば求まる。
図6に、相互監視のアルゴリズムとして図4のものを用い、エラーカウンタ送信同期を併用したノード間相互監視処理の動作例を示す。
ノード1〜4は順にスロット1〜4にて送信を行い、障害監視処理(MON)と障害特定(ID1,ID2)処理は、各ノードの送受信終了後、通信サイクルの最後に行われるものとする。障害監視項目としては上記の「通番異常」と「受信異常」を用意している。エラーカウンタは多数派異常と少数派異常に分けている。
また、エラーカウンタ送信同期処理(ステップ460)において、カウンタ値送信対象選択(ステップ220)では、障害特定(ID1,ステップ430)にて対象としたノードを選択し、エラーカウンタ同期条件(ステップ240)としては、エラーカウンタ同期条件1、もしくはエラーカウンタ同期条件1とエラーカウンタ同期条件2のいずれかが成立すること、としている。障害特定結果交換(EXD2,ステップ440)は、障害特定(ID1)の結果から操作したエラーカウンタ値を交換すること(ステップ230)にて代用し、障害特定(ID2,ステップ450)はエラーカウンタ同期(ステップ460)と統合している。これにより、障害特定とエラーカウンタ送信同期とを合理的に、また処理資源(CPU能力やメモリなど)の必要量を抑え、かつ高信頼に実行できる。
通信サイクルiでは、各ノードは前サイクル分の障害監視結果及びカウンタ仮値を送信し(601−0〜604−0,16進数表示)、他ノードが受信して保持する(621−0〜624−0、表記は送信データと同じ)。これは障害監視結果交換(EXD1)に該当する。送信データは、ノード1〜4についての前サイクルに実施した障害監視(MON)結果が順に並び、次に各通信サイクルにおける障害特定対象ノードについての、前サイクルに求めた仮のエラーカウンタ値(以下「カウンタ仮値」)が含まれる。送信データにはこの他、ヘッダや制御用データ等も含まれるが、図では省略している。障害監視結果は、通番異常を示すビット(E1)と、受信異常を示すビット(E2)からなる。但し、自ノード分の領域には、自ノードについての診断結果が入っている。カウンタ仮値は各々4ビットで表現され、通番異常に関する多数派異常のカウンタ値(EC1)、受信異常に関する多数派異常のカウンタ値(EC2)、通番異常に関する少数派異常のカウンタ値(FC1)、受信異常に関する少数派異常のカウンタ値(FC2)とからなる。
このとき、ノード3は送信前にCPU障害を起こしており、これによりノード3が送信する通番は前サイクルからインクリメントされていない。このため、ノード3以外のノードでは、障害監視(MON)にてノード3について通番異常を検出している(611−0,612−0,614−0、表記は送信データと同じ)。ノード3は自ノードについて異常を検出していない(613−0)。
各ノードは通信サイクルiの最後に、通信サイクルi−1分(通信サイクルi−1の障害監視にて検出される分)の障害特定(ID1)処理を行うが、集約した通信サイクルi−1での障害監視結果(621−0〜624−0)に過半数を超える異常検出項目がないので、特定される障害は無い(631−0〜634−0、内容は後述のノード障害フラグ1ノード分と同じで、2進表示)。尚、通信サイクルiにおける各ノードの処理対象ノードは、ノード1がノード4、ノード2がノード1、ノード3がノード2、ノード4がノード3である。
エラーカウンタについては、各ノードは通番異常の多数派異常カウンタE1_j、受信異常の多数派異常カウンタE2_j、通番異常の少数派異常カウンタF1_j、受信異常の少数派異常カウンタF2_j(jは対象ノード番号、1〜4)を持っている。各カウンタは異常が特定されないときは値が保持される。
また、送信されるカウンタ仮値を各ノードが受信すると、自ノードの保持するカウンタ値と比較し、受信したカウンタ仮値が自ノードの値に対し+1〜−1であれば、カウンタ仮値に自ノードのカウンタ値を合わせる、と設定している(エラーカウンタ同期条件1)。また、その条件に合致しない場合も、前サイクルにて受信したカウンタ仮値と比較して、現サイクルにて受信したカウンタ仮値が+1〜−1の範囲にあれば、現サイクルにて受信したカウンタ仮値に自ノードのカウンタ値を合わせるように設定している(エラーカウンタ同期条件2)。
各ノードの送信データにおいて、ノード1がノード2分の、ノード2がノード3分の、ノード3がノード4分の、ノード4がノード1分のカウンタ仮値を送信しており、ノード3分のEC1だけが8、ほかは0となっている。このため、各ノードのエラーカウンタは、ノード3についての通番異常を管理する多数派異常カウンタE1_3だけが8となり、それ以外のカウンタは0になる(641−0〜644−0,16進表示)。
ノード障害通知の閾値は10(10になったら通知)としており、この時点ではノード障害フラグは立っていない(651−0〜654−0,8進表示)。
ノード障害フラグは、1ノードについて、障害特定条件1による多数派異常での通番異常を示すビット、多数派異常での受信異常を示すビット、障害特定条件2による少数派異常での通番異常を示すビット、少数派異常での受信異常を示すビットの4ビットで表され、それがノード1〜4まで順に並んでいるものとする。
通信サイクルi+1では、各ノードは前サイクルの障害監視結果を送信するため、ノード1,2,4の送信データでは、ノード3についてのエラービットE1が立っている(601−1,602−1,604−1)。ノード3の送信データでは、どのエラービットも立っていない(603−1)。
このサイクルでもノード3は送信前にCPU障害を起こしており、これによりノード3が送信する通番は前サイクルからインクリメントされず、ノード3以外のノードでは、障害監視(MON)にてノード3について通番異常を検出している(611−1,612−1,614−1)。ノード3は自ノードについて異常を検出していない(613−1)。
通信サイクルi+1の最後に行われる通信サイクルi分の障害特定(ID1)処理では、集約した障害監視結果(621−1〜624−1)にてノード3の通番異常を示すデータが過半数となるため、ノード3の多数派異常での通番異常が特定される。通信サイクルi+1における各ノードの処理対象ノードは、ノード1がノード3、ノード2がノード4、ノード3がノード1、ノード4がノード2であるため、ノード1が障害を特定し(631−1)、それ以外のノードは障害を特定していない(632−1〜634−1)。
エラーカウンタについては、各ノードは前通信サイクルにて障害特定(ID1)の対象としたノードについてのカウンタ仮値を送信しており、特定された障害は無かったため、カウンタ仮値も、カウンタ同期処理後のカウンタ値(641−1〜644−1)も前通信サイクルと同じである。ノード障害フラグはまだ立たない(651−1〜654−1)。
通信サイクルi+2では、通信サイクルi+1と同様、ノード1,2,4の送信データでは、ノード3についてのエラービットE1が立っている(601−2,602−2,604−2)。ノード3の送信データでは、どのエラービットも立っていない(603−2)。
このサイクルでは、ノード4がスロット1にて受信障害を起こしており、ノード4のみが障害監視(MON)にてノード1について受信異常を検出している(614−2)。ノード1〜3は異常を検出していない(611−2,612−2,613−2)。
通信サイクルi+2の最後に行われる通信サイクルi+1分の障害特定(ID1)処理では、通信サイクルi+1と同様、ノード3の多数派異常での通番異常が特定される。通信サイクルi+1における各ノードの処理対象ノードは、ノード1がノード2、ノード2がノード3、ノード3がノード4、ノード4がノード1であるため、ノード2が障害を特定し(631−2)、それ以外のノードは障害を特定していない(632−2〜634−2)。
エラーカウンタについては、前通信サイクルにおける障害特定(ID1)結果から、ノード1がノード3分のEC1をインクリメントして9にして送信しており(601−2)、それ以外のカウンタ仮値は0で送信されている(601−2〜604−2)。これにより、受信障害を起こしたノード4以外では、エラーカウンタ同期処理によってE1_3が8から9に更新され(641−2〜643−2)、ノード4では8のままである(644−2)。ノード障害フラグはまだ立たない(651−2〜654−2)。
通信サイクルi+3では、通信サイクルの最後に行われる通信サイクルi+2分の障害特定(ID1)にて、集約した障害監視結果(621−3〜624−3)から、ノード4の少数派異常での受信異常を、ノード1が特定している。
またエラーカウンタについては、前通信サイクルにおける障害特定(ID1)結果から、ノード2がノード3分のEC1をインクリメントして10(0xa)にして送信しており(602−3)、これにより、全ノードがエラーカウンタ同期処理によってE1_3を9から10(0xa)に更新し(641−3〜643−3)、ノード3の多数派異常での通番異常を示すノード障害フラグが立ち、制御アプリケーションに障害通知がなされる(651−3〜654−3)。
以上により、障害監視を高信頼に行った上で、エラーカウンタ同期をロバストに行い、全ノード同時に障害通知できる。これに対しリーチフラグ同期では、通信サイクルi+3にてフラグが立ち、ノード4のE1_3は9になるが、その間にノード1〜3のE1_3は10になり、障害通知される。ノード4は自ノードにて障害特定するまでは、その後もカウンタが9のままとなる。
図7は、図6と同様のルールに基づいて行うノード間相互監視処理の動作例である。この例では、あるノードが自己診断により自ノードに障害を特定したことにより自ノードをリセットした、などの理由でエラーカウンタがリセット状態にある場合に、エラーカウンタを他ノードと同期させる手順を示している。尚、この例ではリセット状態を示すフラグがカウンタ毎にあるものとし、リセット状態にするとは、このフラグを有効にする(立てる)ことを、リセット状態を解くとは、このフラグを無効(降ろす)ことを意味する。
通信サイクルiの前に、ノード4は自ノードをリセットして、エラーカウンタがリセット状態で0になっている。ノード1〜3では、E1_3が8、それ以外のカウンタは0になっている。ノード4は通信サイクルiから通信及び相互監視に参加する。
通信サイクルiにて各ノードが送信する、前サイクル分の障害監視結果では、報告される障害はなく、カウンタ仮値は0になっている(701−0〜704−0)。ノード3分のEC1を送信するのはノード4であるが、0になっているため、他ノードはこのカウンタ仮値に同期せず、E1_3は8のままになっている(741−0〜743−0)。ノード4のE1_3は0のままである(744−0)。
交換された障害監視結果に検知された障害がないため(721−0〜724−0)、障害特定(ID1)でも特定される障害はない(731−0〜734−0)。また、障害監視(MON)でも検知される障害はない(711−0〜714−0)。ノード障害フラグは立たない(751−0〜754−0)。
通信サイクルi+1では、ノード3は送信前にCPU障害を起こしており、送信データ中の通番がインクリメントされず、ノード3以外のノードでは、障害監視(MON)にてノード3について通番異常を検出する(711−1,712−1,714−1)。ノード3は自ノードについて異常を検出していない(713−1)。集約した通信サイクルi分の障害監視結果(721−1〜724−1)に過半数を超える異常検出項目がないので、特定される障害は無い(731−1〜734−1)。
エラーカウンタについては、ノード1がノード3分のEC1として8を送信しており(701−1)、ノード2,ノード3のE1_3はもとからが8であるため、そのままとなる(742−1,743−1)。一方、ノード4のE1_3はリセット状態であるため、8に更新し、リセット状態を解く(744−1)。この時点ではE1_3は仮同期であり、それを示すものとして、仮同期フラグを用意し、有効にする。
通信サイクルi+2では、ノード3以外は前サイクルの障害監視結果として、ノード3の通番異常(E1)を送信データにて報告する(701−2,702−2,704−2)。障害特定(ID1)処理では、集約した障害監視結果(721−2〜724−2)にてノード3の通番異常を示すデータが過半数となるため、ノード3の多数派異常での通番異常が特定される。本通信サイクルにおいてはノード4がノード3を処理対象ノードとするため、ノード4が障害を特定し(734−2)、それ以外のノードは障害を特定していない(731−2〜733−1)。
エラーカウンタについては、ノード2がノード3分のEC1を送信している(702−2)。ノード1,ノード3のE1_3は同期して8のままとなる。ノード4もそうなるところであるが、ノード内部でソフトエラーを起こし、ノード2から受信したノード3分のEC1を4と勘違いしたとする。ノード4はE1_3の連続同期に失敗するため、E1_3をリセット状態に戻し、仮同期フラグを無効にする。カウンタ値も0にする方法を取っても良いが、本実施例では値を保留して8のままとする(744−2)。
通信サイクルi+3では、ノード4がノード3分のEC1を送信する。ノード4のE1_3はリセット状態なので、無効値(例えばノード障害通知の閾値である10より大きい0xF)を送信しても良いが、本実施例では仮の値である8をベースに、前通信サイクルの障害特定(ID1)結果から1つインクリメントした9を送信する(704−3)。これにより、ノード1〜3はE1_3を9に同期させる(741−3〜743−3)。ノード4のE1_3は、次通信サイクルにてノード3分のEC1として8〜10を受信した場合には、前回受信値である8に対してエラーカウンタ同期条件2が成立するため、受信したEC1に同期する。この同期は、仮同期としても良いし、同期確定としてもよい。次通信サイクルでのノード3分のEC1が上記以外の場合には、その受信値に仮同期する。
以上のようにして、リセット状態からも図2の処理フローでエラーカウンタ同期を取ることができる。
図8は、図6と同様のルールに基づいて行うノード間相互監視処理の動作例である。この例では、あるノードのエラーカウンタがソフトエラー等により誤った値になってしまった状態から、他ノードとエラーカウンタを同期させる手順を示している。
通信サイクルiにおける各ノードの送信データでは、前サイクル分の障害監視結果に報告される障害はなく、カウンタ仮値は、ノード4が送信するノード3分のEC1は8、それ以外は0になっている(701−0〜704−0)。エラーカウンタ同期処理によって、各ノードのE1_3は8、それ以外のカウンタ値は0になる(841−0〜843−0)。ただしノード4ではソフトエラーを起こし、E1_3が4になってしまうとする(844−0)。ノード障害フラグは立たない(851−0〜854−0)。
通信サイクルi+1では、ノード3は送信前にCPU障害を起こしており、送信データ中の通番がインクリメントされず、ノード3以外のノードでは、障害監視(MON)にてノード3について通番異常を検出する(811−1,812−1,814−1)。ノード3は自ノードについて異常を検出していない(813−1)。集約した通信サイクルi分の障害監視結果(821−1〜824−1)に過半数を超える異常検出項目がないので、特定される障害は無い(831−1〜834−1)。
エラーカウンタについては、ノード3についてのEC1をノード1が送信している(801−1)。エラーカウンタ同期処理により、ノード1〜3のE1_3は8のままとなる(841−1〜843−1)。一方、ノード4のE1_3はエラーカウンタ同期に失敗し、4のままとなる(844−1)。
通信サイクルi+2では、ノード3以外は前サイクルの障害監視結果として、ノード3の通番異常(E1)を送信データにて報告する(801−2,802−2,804−2)。障害特定(ID1)処理では、集約した障害監視結果(821−2〜824−2)にてノード3の通番異常を示すデータが過半数となるため、ノード3の多数派異常での通番異常が特定される。本通信サイクルにおいてはノード4がノード3を処理対象ノードとするため、ノード4が障害を特定し(834−2)、それ以外のノードは障害を特定していない(831−2〜733−1)。
エラーカウンタについては、ノード3についてのEC1をノード2が送信している(802−2)。エラーカウンタ同期処理により、ノード1〜3のE1_3は8のままとなる(841−2〜843−2)。一方、ノード4のE1_3はエラーカウンタ同期に失敗するが、連続的に同期に失敗したため、8に仮同期する(844−2、連続失敗回数を2回までとしたとき)。
通信サイクルi+3でのエラーカウンタについては、ノード3についてのEC1の送信をノード4が担当している。前通信サイクルにおける障害特定(ID1)結果から、仮同期中の値である8をインクリメントした9を送信する(802−3)。エラーカウンタ同期処理により、ノード1〜3のE1_3は9となる(841−3〜843−3)。一方、ノード4のE1_3も9になる(844−3)が、状態は仮同期のままであり、同期確定は次サイクル以降になされる。ただし、仮同期でもカウンタ値が閾値である10以上になれば、障害通知を行う設定としてもよい。
以上のようにして、エラーカウンタ値が障害により誤った(他ノードと同期の取れていない)値になってしまった状態からも、図2の処理フローでエラーカウンタ同期を取ることができる。
図9は、ノード間相互監視による障害特定処理の処理フローを示す。これらの処理は、各ノードが、ネットワーク100を介して互いに通信しながら、通信サイクル毎などの時間的な同期を取りつつ行う。
まずステップ910の障害監視は、ステップ410の障害監視と同じである。また、次のステップ920では、送受信処理部142−iは、ステップ420の障害監視結果交換と同様に、ステップ910の障害監視結果をネットワーク100を介してノード間で交換する。
次に、ステップ930では、障害特定部143−iは、ステップ920で各ノードに集約された障害監視(MON)結果から、障害特定(IDとする)を行う。障害特定方法はステップ430と同じである。ステップ430では、自ノードの担当する1ノード分の障害特定しか行わなかったが、ここでは全ノード分の障害特定を行う点が、図4の処理フローとは異なる。全ノード分行うため、処理対象ノードのローテーションも行われない。
次に、ステップ940では、カウンタ同期部145−iは、エラーカウンタ同期を行う。同期方法としてエラーカウンタ送信同期を用いる場合には、図2の処理フローがステップ470の処理内容となる。またカウンタ部144−iは、エラーカウンタ同期処理を行った後のカウンタ値を、本来のエラーカウンタに反映する。エラーカウンタは図4の処理フローと同様、多数派異常と少数派異常で分けても良い。
エラーカウンタ送信同期処理では、ますエラーカウンタ仮操作(ステップ210)を行う。ここでは、ステップ930の障害特定(ID)結果から、エラーカウンタを操作する。操作したカウンタ値は、本来のエラーカウンタとは別の領域に保存する。エラーカウンタの操作方法は、ステップ450と同様である。
次のステップ950は、ステップ470のノード障害通知と同様である。ノード障害通知を終えると、処理を終了する。
図9のフロー内で行うカウンタ値送信対象選択では、処理対象ノードをローテーションする方が、ノード障害発生時にその影響を局所的にすることができる。図10は処理対象ノードの変更スケジュールの一例を示している。スケジュール1000にて、ノード1を処理対象とするノードは、通信サイクルiにてノード2,ノード3,ノード4,通信サイクルi+1にてノード3,ノード4,ノード5と変わり、通信サイクルi+n−1にてノードn,ノード2,ノード3、通信サイクルi+nにてノード2,ノード3,ノード4と一周し、以下繰り返す。
スケジュール1000では、ある通信サイクルにて全てのノードが、3ノードからカウンタ値送信対象選択の処理対象となるように振り分けられている。これにより、同期カウンタ値の計算方法として、多数決を用いることができる。スケジュール1000は、メモリなどの記憶装置にテーブルとして保持しておいてもよいし、簡単な数式で計算することも可能である。
図11は、相互監視のアルゴリズムとして図4の処理フローを用い、エラーカウンタ送信同期を併用したノード間相互監視処理の動作例を示す。
エラーカウンタ送信同期処理(ステップ940)において、カウンタ値送信対象選択(ステップ220)では、図10のように複数ノードを通信サイクルごとにローテーションして選択し、エラーカウンタ同期条件(ステップ240)としては、エラーカウンタ同期条件3が成立することとし、同期カウンタ値計算(ステップ240)の方法としては、受信したカウンタ値から多数決を取る、としている。これにより、障害特定とエラーカウンタ送信同期とを合理的に、また非常に高信頼に実行できる。
それ以外の障害監視項目などの設定は、特記がない限り、実施例1と同じである。ただしエラーカウンタは多数派異常と少数派異常とに分けておらず、エラーカウンタE1_j、E2_jは多数派異常と少数派異常のどちらかが特定されれば、インクリメントされ、どちらも特定されないと、値が保持されるとする。
通信サイクルiでは、ノード1〜4は順にスロット1〜4にて、前サイクル分の障害監視結果及びカウンタ仮値を送信し(1101−1〜1104−1,16進数表示)、他ノードが受信して保持する(1121−0〜1124−0,16進数表示)。カウンタ仮値に関しては、自ノード以外の3ノードを対象とし、1ノードについて通番異常の値(EC1)と受信異常の値(EC2)とを用意し、送信データにおいて障害監視結果の後ろに、ノード番号順に並べている。例えば、ノード2が送信するデータでは、ノード1分,ノード3分,ノード4分の順で並んでいる。
各ノードともノード3分のEC1を9、それ以外を0としている。このため、エラーカウンタ同期処理にて、各ノードのE1_3は9のままとなり、それ以外のカウンタ値は0のままとなる(1141−0〜1144−0)。
また、本通信サイクルにおいては、ノード3は送信前にCPU障害を起こしており、送信データ中の通番がインクリメントされず、ノード3以外のノードでは、障害監視(MON)にてノード3について通番異常を検出する(1111−0,1112−0,1114−0)。ノード3は自ノードについて異常を検出していない(1113−0)。集約した通信サイクルi分の障害監視結果(1121−0〜1124−0)に過半数を超える異常検出項目がないので、特定される障害は無い(1131−1〜1134−1、表記方法は障害監視結果と同じ)。ノード障害フラグは立たない(1151−0〜1154−0,3進数表記)。
ノード障害フラグは、1ノードについて、障害特定条件1による通番異常を示すビット、受信異常を示すビット、の2ビットで表され、それがノード1〜4まで順に並んでいるものとする。
通信サイクルi+1では、ノード4がスロット1〜3に渡って受信障害を起こしている。ノード4は障害監視(MON)にてノード1〜3についての受信障害を検知する(1114−1)が、それ以外のノードは障害を検知していない(1111−1〜1113−1)。
本通信サイクルにおける障害特定(ID)処理については、ノード1〜3にて、集約した障害監視結果(1121−1〜1123−1)のうちノード3の通番異常を示すデータが過半数となるため、ノード3の通番異常(多数派異常)が特定される。ノード4は他ノードからデータを受信できていないため、障害特定(ID)の多数決処理が実行できず、障害を特定できていない(1124−1)。
エラーカウンタについては、各ノードともノード3分のEC1を9、それ以外を0としている。このためエラーカウンタ同期処理にて、ノード1〜3では、E1_3は9のままとなり、それ以外のカウンタ値は0のままとなる(1141−1〜1143−1)。ノード4ではエラーカウンタ同期が取れないので、E1_3は9のまま、それ以外のカウンタ値は0のままとなる(1144−1)。
通信サイクルi+2での各ノードの送信データは、障害監視結果については、ノード1〜3は障害を報告していない(1101−2〜1103−2)が、ノード4はノード1〜3の受信異常を報告している(1104−2)。また、送信データに含まれるカウンタ仮値については、ノード1,2ではノード3分のEC1を、前通信サイクルにおける障害特定(ID)結果を反映してインクリメントした10(0xa)としている(1101−2,1102−2)。一方、ノード4ではノード3分のEC1が、前通信サイクルにて障害特定(ID)ができなかったので、前通信サイクルの値である9のままとなっている(1104−2)。ノード3の送信データのカウンタ仮値には、ノード3分が含まれないので、すべて0となっている(1103−2)。
本通信サイクルにおける障害特定(ID)処理では、各ノードにて、集約した障害監視結果(1121−2〜1124−2)から、ノード4の受信異常(少数派異常)が特定される(1131−2〜1134−2)。この障害特定結果は、次通信サイクルに送信されるカウンタ仮値に反映される。
エラーカウンタについては、ノード3分のEC1について、2つのノードが10、1つのノードが9というデータが集約されるため(図11にデータ構造の描写なし)、多数決により各ノードのE1_3は10(0xa)に同期される(1141−2〜1144−2)。各ノードにてカウンタ値E1_3が閾値である10以上となったため、これを受けノード3の通番異常を示すノードフラグが有効となり、制御アプリケーションに障害通知がなされる(1151−2〜1154−2)。
以上により、非常にロバスト性,信頼性の高い障害特定とエラーカウンタ同期とを同時に実現することができる。
図9のフローは、各ステップの処理内容を変更して実施することも可能である。以下では本実施例における、各ステップの処理の修正内容を説明する。
ステップ920では、各ノードは自ノードの障害監視(MON)結果から、ステップ210のエラーカウンタ仮操作を先に行ってしまい、そのカウンタ仮値をステップ930にて障害監視結果として交換する。このステップ930は、ステップ230のエラーカウンタ交換を兼ねている。ステップ930の障害特定(ID)と、ステップ940のエラーカウンタ同期を、各ノードから受信するカウンタ仮値の多数決(もしくは中央値を取るなど)によって纏めて実行する。すなわち、エラーカウンタ同期によるカウンタ値のインクリメントは、障害が特定されたことを意味し、カウンタ値のデクリメントや保持は障害が特定されなかったことを意味する。ステップ940では、図2のフローのうち、ステップ240のエラーカウンタ同期条件判断・実行だけが行われることになる。
以上のような処理を行うことで、エラーカウンタ同期までのサイクルを、実施例2より1つ短くすることができる。
以下では、上記の図9の修正フローを用いたノード間相互監視処理の動作例を、図12に示し、解説する。障害監視項目などの設定は、特記がない限り、実施例2と同じである。
通信サイクルiでは、ノード1〜4は順にスロット1〜4にて、前サイクル分の障害監視(MON)結果を反映したカウンタ仮値を送信し(1201−1〜1204−1,16進数表示)、他ノードが受信して保持する(1221−0〜1224−0,16進数表示)。カウンタ仮値に関しては、自ノード以外の3ノードを対象とし、1ノードについて通番異常の値(EC1)と受信異常の値(EC2)とを用意し、送信データにおいてノード番号順に並べている。例えば、ノード2が送信するデータでは、ノード1分,ノード3分,ノード4分の順で並んでいる。他ノードから受信するカウンタ仮値(1221−0〜1224−0)では、これに自ノードを分を加え(xxで表示)、ノード順に並べている。
各ノードともノード3分のEC1を8、それ以外を0としている。このため、エラーカウンタ同期処理にて多数決を取ると(1231−0〜1234−0)、各ノードのE1_3は8のままとなり、それ以外のカウンタ値は0のままとなる(1241−0〜1244−0)。ノード障害フラグは立たない(1251−0〜1254−0,3進数表記)。
また、本通信サイクルにおいては、ノード3は送信前にCPU障害を起こしており、送信データ中の通番がインクリメントされず、ノード3以外のノードでは、障害監視(MON)にてノード3について通番異常を検出する(1211−0,1212−0,1214−0)。ノード3は自ノードについて異常を検出していない(1213−0)。
通信サイクルi+1での送信データでは、ノード1,2,4については、前通信サイクルでの障害監視(MON)におけるノード3に対しての通番異常検出をノード3分のEC1に反映し、インクリメントして9としている(1201−1,1202−1,1204−1)。それ以外のカウンタ仮値は0であり、ノード3が送信するカウンタ仮値もすべて0となっている(1203−1)。ただしノード4はスロット1〜3にて受信障害を起こしており、ノード1〜3に対して受信異常を検出する(1214−1)。また、ノード3はデータ送信前再びCPU障害を起こし、ノード1,2はノード3に対して通番異常を検出する(1211−1,1212−1)。
本通信サイクルのエラーカウンタ同期処理にて多数決を取ると(1231−1,1232−1,1234−1)、受信障害のノード3を除いて、各ノードのE1_3は9となり、それ以外のカウンタ値は0のままとなる(1241−1,1242−1,1244−1)。ノード3ではカウンタ仮値の多数決を取れず(1233−1)、E1_3は8のままである(1243−1)。
通信サイクルi+2での送信データでは、ノード1,2については、前通信サイクルでの障害監視(MON)におけるノード3に対しての通番異常検出をノード3分のEC1に反映し、インクリメントして10(0xa)としている(1201−2,1202−2)。ノード4については、ノード1とノード2分のEC2をインクリメントして1とし、ノード3分のEC1は9のままとしている(1204−2)。ノード3については全カウンタ仮値が0である(1203−2)。障害は発生していないので、障害監視(MON)にて障害は検知されていない(1211−2〜1214−2)。
本通信サイクルのエラーカウンタ同期処理にて多数決を取ると(1231−2〜1234−2)、各ノードのE1_3は10(0xa)となる。ノード4についてのカウンタ値は、単純な多数決では0と計算される。しかし、ノード4だけがノード1,2について受信異常を検出していることが、ノード4が送信するカウンタ仮値と多数決での0との比較から判定できるので、ノード4は少数派異常での受信異常とみなされ、E2_4は多数決での0をベースに、インクリメントされた1となる。それ以外のカウンタ値は0のままとなる(1241−2〜1244−2)。
各ノードにてE1_3が閾値である10以上となったため、これを受けノード3の通番異常を示すノードフラグが有効となり、制御アプリケーションに障害通知がなされる(1251−2〜1254−2)。
以上により、非常にロバスト性,信頼性の高い障害特定とエラーカウンタ同期とを同時に実現することができる。また、それらを短周期にて実行可能となる。
分散システムを応用した制御システムは、自動車や建機、FA(Factory Automation)などの幅広い工業分野に関して、それらの分散型制御システムに本発明を適用することで、システムの信頼性を高く維持しつつ、可用性を高めることができるようになる。
分散システムの構成図。 エラーカウンタ送信同期のフロー図。 エラーカウンタ同期条件判定・実行処理の詳細フロー図。 ノード間相互監視による障害特定処理のフロー図。 処理対象ノードのスケジュール表。 ノード間相互監視処理の動作例。 ノード間相互監視処理の動作例。 ノード間相互監視処理の動作例。 ノード間相互監視による障害特定処理のフロー図。 処理対象ノードのスケジュール表。 ノード間相互監視処理の動作例。 ノード間相互監視処理の動作例。
符号の説明
10 ノード
11 CPU
12 メインメモリ
13 I/F
14 記憶装置
100 ネットワーク

Claims (7)

  1. 複数のノードがネットワークを介して接続される分散システムにおいて、
    前記複数のノードの各々は、
    他ノードに対する障害監視を行う障害監視部と、
    前記ネットワークを介して、他ノードの障害を検知するためのデータを送受信し、障害監視結果を交換する送受信部と、
    交換された前記障害監視結果に基づいて、どのノードに障害があるかを特定する障害特定部と、
    障害があると特定されたノードのエラーの数をカウントするカウンタ部と、
    エラーカウンタ値をノード間で交換し、エラーカウンタ同期条件が成立するときに同期を取るカウンタ同期部を備えることを特徴とする分散システム。
  2. 請求項1のエラーカウンタ同期条件は、
    受信したエラーカウンタ値が、自ノードのカウンタ値と比較して差が指定範囲内にあることを特徴とする分散システム。
  3. 請求項2の分散システムは、
    交換するエラーカウンタ値の対象ノードを障害特定のサイクルに合わせてローテーションすることを特徴とする分散システム。
  4. 請求項1の分散システムは、
    エラーカウンタがリセット状態のときに、エラーカウンタ同期条件が不成立であっても、エラーカウンタを仮同期し、その後、エラーカウンタ同期条件が指定回数連続して成功すれば同期を確定することを特徴とする分散システム。
  5. 請求項1の分散システムは、
    エラーカウンタ同期条件が指定回数連続して不成立となる場合には、エラーカウンタをリセット状態にすることを特徴とする分散システム。
  6. 請求項1の分散システムは、
    エラーカウンタを同期させる値として受信するカウンタ値の多数決結果とし、エラーカウンタ同期条件として前記多数決が成立することを特徴とする分散システム。
  7. 請求項1の分散システムは、
    前記カウンタ同期部の交換するカウンタ値が、前記障害特定結果ではなく、前記障害監
    視結果を反映したエラーカウンタ値であることを特徴とする分散システム。
JP2007203755A 2007-08-06 2007-08-06 分散システム Active JP4512621B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007203755A JP4512621B2 (ja) 2007-08-06 2007-08-06 分散システム
US12/184,447 US20090040934A1 (en) 2007-08-06 2008-08-01 Distributed System

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007203755A JP4512621B2 (ja) 2007-08-06 2007-08-06 分散システム

Publications (2)

Publication Number Publication Date
JP2009037575A true JP2009037575A (ja) 2009-02-19
JP4512621B2 JP4512621B2 (ja) 2010-07-28

Family

ID=40346415

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007203755A Active JP4512621B2 (ja) 2007-08-06 2007-08-06 分散システム

Country Status (2)

Country Link
US (1) US20090040934A1 (ja)
JP (1) JP4512621B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013130977A (ja) * 2011-12-20 2013-07-04 Fujitsu Ltd 情報処理装置及び動作状態監視方法
CN113704026A (zh) * 2021-10-28 2021-11-26 北京时代正邦科技股份有限公司 一种分布式金融内存数据库安全同步方法、装置、介质

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5421152B2 (ja) * 2010-03-08 2014-02-19 ルネサスエレクトロニクス株式会社 半導体集積回路
JP2012257122A (ja) * 2011-06-09 2012-12-27 Hitachi Automotive Systems Ltd 車両制御装置、車両制御システム
US10063439B2 (en) 2014-09-09 2018-08-28 Belkin International Inc. Coordinated and device-distributed detection of abnormal network device operation
US9026841B1 (en) * 2014-09-09 2015-05-05 Belkin International, Inc. Coordinated and device-distributed detection of abnormal network device operation
CN106571852A (zh) * 2016-11-03 2017-04-19 国网辽宁省电力有限公司检修分公司 与时钟系统无关的直流输电监控系统数据链路通断判定法
US11604440B2 (en) * 2017-03-29 2023-03-14 Hitachi, Ltd. Control switching device for abnormality prevention in multiple terminals
CN109461078B (zh) * 2018-10-22 2020-09-11 中信网络科技股份有限公司 一种基于资金交易网络的异常交易识别方法及系统
EP3898373A4 (en) * 2018-12-19 2023-01-11 Zoox, Inc. SAFE SYSTEM OPERATION USING LATENCY DETERMINATIONS AND CPU UTILIZATION DETERMINATIONS
JP7221070B2 (ja) * 2019-02-07 2023-02-13 日立Astemo株式会社 電子制御装置、制御方法
CN111475386B (zh) * 2020-06-05 2024-01-23 中国银行股份有限公司 一种故障预警方法及相关装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05216854A (ja) * 1992-02-05 1993-08-27 Nec Corp ホストコンピュータ装置
JPH08305611A (ja) * 1995-04-28 1996-11-22 Nec Home Electron Ltd Cpu監視方法及びcpu監視装置
JP2004326775A (ja) * 2003-04-28 2004-11-18 Internatl Business Mach Corp <Ibm> 分散ノード環境におけるfru障害分離のための機構

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005306124A (ja) * 2004-04-20 2005-11-04 Hitachi Ltd 車両制御装置
EP2177413B1 (en) * 2004-07-15 2015-02-25 Hitachi, Ltd. Vehicle control system
JP4871687B2 (ja) * 2005-10-03 2012-02-08 日立オートモティブシステムズ株式会社 車両制御システム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05216854A (ja) * 1992-02-05 1993-08-27 Nec Corp ホストコンピュータ装置
JPH08305611A (ja) * 1995-04-28 1996-11-22 Nec Home Electron Ltd Cpu監視方法及びcpu監視装置
JP2004326775A (ja) * 2003-04-28 2004-11-18 Internatl Business Mach Corp <Ibm> 分散ノード環境におけるfru障害分離のための機構

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013130977A (ja) * 2011-12-20 2013-07-04 Fujitsu Ltd 情報処理装置及び動作状態監視方法
CN113704026A (zh) * 2021-10-28 2021-11-26 北京时代正邦科技股份有限公司 一种分布式金融内存数据库安全同步方法、装置、介质

Also Published As

Publication number Publication date
JP4512621B2 (ja) 2010-07-28
US20090040934A1 (en) 2009-02-12

Similar Documents

Publication Publication Date Title
JP4512621B2 (ja) 分散システム
JP4871687B2 (ja) 車両制御システム
JP2009009557A (ja) 分散システム
US9256489B2 (en) Synchronized debug information generation
Keroglou et al. Distributed fault diagnosis in discrete event systems via set intersection refinements
JP2010011093A (ja) 分散システム
US8041993B2 (en) Distributed control system
AU2021286376A1 (en) Detecting path faults in parallel redundancy protocol communications
CN108388108B (zh) 一种多重冗余控制系统中同步数据的方法及装置
JP2012080181A (ja) 障害情報管理方法および障害情報管理プログラム
CN104488227A (zh) 用于在大型数据处理系统中进行孤立异常检测的方法
CN113965494A (zh) 用于冗余进程网络中的故障检测和角色选择的方法
US10860400B2 (en) Intelligent monitoring and diagnostics for application support
Keroglou et al. Distributed diagnosis using predetermined synchronization strategies in the presence of communication constraints
JP2011023983A (ja) ネットワークノード
JP2019079263A (ja) 冗長系ストレージシステム及び冗長系ストレージシステムにおける障害復旧方法
de Moraes Rossetto et al. A failure detector that gives information on the degree of confidence in the system
CN117155938B (zh) 集群节点故障上报方法、装置、设备及存储介质
WO2017099062A1 (ja) 診断装置、診断方法、及び、診断プログラムが記録された記録媒体
JP6492885B2 (ja) 診断装置
JP7298412B2 (ja) 異常判定装置、異常判定方法およびプログラム
WO2023276350A1 (ja) 通信装置、通信制御方法、および通信制御プログラム
WO2009017407A2 (en) Restarting networks
Jiang et al. A Novel Equivalence Proof of Clock and Network Synchronization Model Towards Distributed Clouds
JP3663571B2 (ja) 監視システム及び監視装置及び監視方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090526

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090915

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091116

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100420

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100510

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130514

Year of fee payment: 3

R151 Written notification of patent or utility model registration

Ref document number: 4512621

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130514

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130514

Year of fee payment: 3