JP3145236B2 - フォールトトレラントコンピューティング装置 - Google Patents

フォールトトレラントコンピューティング装置

Info

Publication number
JP3145236B2
JP3145236B2 JP26040093A JP26040093A JP3145236B2 JP 3145236 B2 JP3145236 B2 JP 3145236B2 JP 26040093 A JP26040093 A JP 26040093A JP 26040093 A JP26040093 A JP 26040093A JP 3145236 B2 JP3145236 B2 JP 3145236B2
Authority
JP
Japan
Prior art keywords
user
level
node
daemon
fault
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.)
Expired - Fee Related
Application number
JP26040093A
Other languages
English (en)
Other versions
JPH06202893A (ja
Inventor
フアン イェンヌン
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.)
AT&T Corp
Original Assignee
AT&T Corp
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 AT&T Corp filed Critical AT&T Corp
Publication of JPH06202893A publication Critical patent/JPH06202893A/ja
Application granted granted Critical
Publication of JP3145236B2 publication Critical patent/JP3145236B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

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/0793Remedial or corrective actions
    • 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/0715Error 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 system implementing multitasking
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2023Failover techniques
    • G06F11/203Failover techniques using migration
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2097Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Hardware Redundancy (AREA)
  • Retry When Errors Occur (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、一般的に、フォールト
トレラントコンピューティングに関し、特に、アプリケ
ーションプログラムのレベルでのフォールトトレラント
コンピューティングに関する。
【0002】
【従来の技術】現在のシステムは、以前よりも障害に耐
性がなければならない。フォールトトレランス(耐障害
性)は2つの次元を有する。それは、可用性と、データ
完全性(すなわち、システムの一貫性の状態)である。
交換システムは連続的可用性を必要とする。ほとんどの
その他のシステムでも同様に、可用性およびデータ完全
性の現在のレベルを増大させる必要がある。そうしたシ
ステムにおけるフォールトトレランスは、ハードウェア
層およびオペレーティングシステム層において提供され
ることが多い。
【0003】フォールトトレランスは、ハードウェアで
は、デュプレクス構成、三重モジュール冗長構成または
その他のハードウェア技術を使用して実現される。(例
えば、エス.ウェバー(S. Webber)、ジェイ.ベアン(J.
Beirne)「階層アーキテクチャ」、Proceedings of the
21st Fault-Tolerant Computing Symposium、第79〜
85ページ(1991年6月)参照。)フォールトトレ
ランスは、オペレーティングシステム内でも、複製ファ
イルシステム(エム.サティヤナラヤナン(M.Satyanara
yanan)「Coda:分散ワークステーション環境に対す
る高可用性ファイルシステム」、IEEE Transactions on
Computers、第C−39巻第447〜459ページ(1
990年4月)参照)、例外処理(エス.ケー.シュリ
ヴァスタヴァ(S. K. Shrivastava)編「高信頼性コンピ
ュータシステム(Reliable Computer Systems)」第3
章、シュプリンガー・フェアラーク(1985年)参
照)およびその他のシステムルーチンを使用して実現さ
れることがある。
【0004】フォールトトレランスの第3層は、アプリ
ケーションソフトウェア内で実現される。アプリケーシ
ョン層内のフォールトトレランスは、2つの下位層で処
理できないユーザ障害およびプログラミング障害を処理
することができる。ユーザレベルの障害は、アプリケー
ションをハングさせる(動かなくする)ことがある。下
位のハードウェアおよびオペレーティングシステムはこ
のような障害を処理することができない。すなわち、こ
のような障害を検出し、障害から自動的にアプリケーシ
ョンを再起動および回復することはユーザレベルでのみ
可能である。プログラミング障害は、同じ計算をする代
替アルゴリズムを提供することによって、または、多数
決法を使用することによって、アプリケーション内で処
理されることが必要になる場合がある。こうしたソフト
ウェアフォールトトレランス機能を使用するには、下位
のハードウェアまたはオペレーティングシステムでは不
適当である。
【0005】ソフトウェアフォールトトレランスは、下
位のハードウェアまたはオペレーティングシステムがフ
ォールトトレラントであるか否かにかかわらず、アプリ
ケーションにおいて実現される。実際には、フォールト
トレラントハードウェア上でフォールトトレランスを実
現するよりも、分散した非フォールトトレラントハード
ウェアで実行中のアプリケーションソフトウェアにおい
てフォールトトレランスを実現するほうが経済的である
こともある。これは、現在の非フォールトトレラント製
品をフォールトトレラントにする簡易な移行路でもあ
る。
【0006】ソフトウェアフォールトトレランスの上記
の利点は周知であるが、以前は、デーモンプロセスによ
ってプロセスの活性を監視すること、クリティカルデー
タの周期的チェックポイント、メッセージ/イベントの
ログ、回復ブロック(ビー.ランデル(B. Randell)「ソ
フトウェアフォールトトレランスのシステム構造」、IE
EE Transactions on Software Engineering、第SE−
1巻第2号第220〜232ページ(1975年6月)
参照)、Nバージョンプログラミング(エー.アヴィジ
エニス(A. Avizienis)「フォールトトレラントソフトウ
ェアへのNバージョンアプローチ」、IEEE Transaction
s on Software Engineering、第SE−11巻第12号
第1491〜1501ページ(1985年12月)参
照)、ログおよび回復機構を有するトランザクション処
理、ホット予備プロセッサ上での二重プロセスの実行、
などのような技術を含むように各アプリケーションをプ
ログラミングすることによって、アプリケーションはフ
ォールトトレラントにされて来た。
【0007】
【発明が解決しようとする課題】この分野に欠けてお
り、本発明によって提供されるのは、ハードウェアおよ
びオペレーティングシステムとはほとんど独立してお
り、アプリケーションプログラムによって容易に使用す
ることができるソフトウェアフォールトトレランスの要
素の標準的なセットである。
【0008】
【課題を解決するための手段】本発明の第1の実施例
は、フォールトトレラントコンピューティング装置であ
って、コンピュータシステム内にあり、コンピュータシ
ステムで実行中の第1のユーザプロセスを指定する登録
メッセージを提供する手段と、コンピュータシステムで
実行中の少なくとも1つの他のユーザプロセスからな
り、登録メッセージに応答して第1ユーザプロセスが続
行不能であるかどうかの観測を開始し、第1ユーザプロ
セスが続行不能であると観測された場合に第1ユーザプ
ロセスを再起動するデーモンとを有する。
【0009】本発明の第2の実施例は、フォールトトレ
ラントコンピューティング装置であって、それぞれ少な
くとも第1のユーザプロセスを含むユーザプロセスを実
行可能な複数のノードと、少なくとも1つのノードにお
いて、他のノードが故障しているかどうかを観測し、そ
のノードが故障していると観測された場合、デーモンが
属するノード上で、その故障しているノードからの第1
ユーザプロセスのうちの少なくとも1つを再起動する、
ノードにおいて実行される少なくとも1つのユーザプロ
セスからなるデーモンとを有する。
【0010】本発明の第3の実施例は、マルチノードシ
ステムにおいてノードの故障に応答する技術と、プロセ
スの保存すべき状態を定義し、その状態が保存され復元
されたかどうかを判定する技術と、故障時に利用可能な
ようにプロセスの状態を他のノードにコピーする技術
と、ノード間でプロセスの一貫性およびノード状態情報
の一貫性を維持する技術と、故障後にプロセスを再起動
する技術とを含む。
【0011】
【実施例】ここで説明するソフトウェアフォールトトレ
ランスのための要素の標準的なセットは、自動フォール
ト検出およびファシリティ再起動を提供するモニタと、
アプリケーションプログラムによって使用されるプログ
ラムのフォールトトレラントライブラリを含む。以下の
詳細な説明ではまずモニタ(以下では、watchdデ
ーモンまたは単にwatchdと呼ばれる)、およびフ
ォールトトレラントライブラリ(以下ではlibftと
呼ばれる)の概観と、それらが協力してアプリケーショ
ンレベルのフォールトトレラントコンピューティングを
可能にする方法について説明し、次に、好ましい実施例
におけるそれらの実現の詳細について説明する。
【0012】[単一ノードにおけるwatchdおよび
libftの概観:図1]watchdおよびlibf
tは、プロセッサおよびメモリを含む単一のノードのみ
からなるシステムにおいて、または、ネットワークに接
続された複数のこのようなノードからなるシステムにお
いて実現可能である。この概観は、単一ノードにおける
watchdおよびlibftの説明から開始し、その
後でノードのネットワークにおけるものの説明をするこ
とにする。好ましい実施例では、ノードは、同一のオペ
レーティングシステムが動作しているワークステーショ
ンである。オペレーティングシステムとしては例えば、
UNIXオペレーティングシステムの1つのバージョン
であるSUN OS 4.1がある(UNIXはAT&
Tの登録商標である)。watchdは、UNIXユー
ザプロセスを使用して実現され、libftは、プログ
ラミング言語Cで書かれたプログラムのライブラリとし
て実現される。
【0013】図1に、単一ノードにおけるアプリケーシ
ョンレベルのフォールトトレラントコンピューティング
のためのシステム101を示す。システム101は、1
以上のフォールトトレラントプロセス103を有する。
ノードで実行中のオペレーティングシステムの観点から
は、各フォールトトレラントプロセスはユーザプロセス
である。従って、各フォールトトレラントプロセス10
3は揮発性メモリ105を有する。メモリが揮発性であ
るとは、プロセス103が存在しなくなるとそのメモリ
が存在しなくなることをいう。フォールトトレラントプ
ロセス103は揮発性メモリ(VMEM)105からの
コード107を実行する。コード107には、フォール
トトレラントアプリケーション(FTA)コード111
およびlibftコード113が含まれる。libft
コード113は、コード111がコンパイルされる際に
コード111と結合される。アプリケーションコード1
11は、libftコード113内のルーチンを起動し
て、フォールトトレラントプロセス103がクラッシュ
またはハングした場合の回復を可能にするさまざまな動
作を実行する。フォールトトレラントプロセス103が
ノードのプロセッサ上で実行中の場合は、矢印102で
示すようにコード107内の命令を実行し、同じく揮発
性メモリ105に格納されているデータ109への作用
を実行する。
【0014】libftコード113内のルーチンは、
データ専用の揮発性メモリ105の一部をクリティカル
メモリ(CR MEM)115として指定することが可
能である。libftコード113内の他のルーチン
は、フォールトトレラントプロセス103がCR ME
M115内のデータを持続性メモリ123(一般にはフ
ァイルシステム)に書き込む(矢印119で示す)こと
を可能にする。これは、図1では、クリティカルメモリ
コピー(CR MEMC)125として現れている。こ
の操作をチェックポインティングという。プロセス10
3がハングまたはクラッシュした後に再起動されると、
libftコード113内のもう1つのルーチンによっ
て、プロセス103は、CR MEM115内のデータ
を125のコピーから復元する(矢印121で示す)こ
とができる。持続性メモリ123はまたログファイル1
27を含むことが可能である。ログファイル127は、
libft113によって提供される特殊I/Oリード
またはライトの結果のデータメッセージのログを含む。
これらの動作はそれぞれ矢印131および129として
示されている。プロセス103が再起動されると、他の
ファイルに対するI/Oの実行を開始する前にログファ
イル127内の全メッセージを消去する。
【0015】クラッシュまたはハングした場合のフォー
ルトトレラントプロセス103の再起動は、watch
dデーモン104によってなされる。watchdデー
モン104には2つのリストが付随する。第1のリスト
はフォールトトレラントプロセス(FTP)リスト13
9である。これは、デーモン104が監視すべきノード
におけるフォールトトレラントプロセスのリストであ
る。第2のリストはフォールトトレラントグループ(F
TPグループ)リスト141である。これは、そのグル
ープ内のいずれかのフォールトトレラントプロセス10
3がハングまたはクラッシュした場合にすべて再起動さ
れなければならないフォールトトレラントプロセス10
3のグループのリストである。後でさらに詳細に説明す
るように、リスト139におけるフォールトトレラント
プロセス103のエントリは、プロセス103がログフ
ァイル127とともにどのように監視されるべきかを示
す。
【0016】矢印133で示すように、デーモン104
は、プロセス103がハングまたはクラッシュしている
か否かを判定するために、フォールトトレラントリスト
139に指定された方法でフォールトトレラントプロセ
ッサリスト139に指定された各フォールトトレラント
プロセス103を連続的に監視する。この監視は、能動
的(すなわち、watchdデーモン104がプロセス
103の状態を判定するためにプロセス103をポーリ
ングする)でも、受動的(すなわち、libft113
内には、プロセス103によって実行されると、デーモ
ン104にシグナルを送り、時間区間を指定するルーチ
ンが存在する)でもよい。デーモン104が、その時間
区間の終了前にそのルーチンから他のシグナルを受信し
ない場合、デーモン104はプロセス103がハングま
たはクラッシュしていると仮定する。
【0017】デーモン104は、フォールトトレラント
プロセス103がクラッシュしていると判定した場合、
プロセス103、および、グループリスト141に指定
されているプロセス103を含むグループに属する他の
プロセス103を再起動する。再起動は以下のように実
行される。プロセスが再起動されると、クリティカルメ
モリ115がクリティカルメモリコピー125から復元
される。ログファイル127が存在する場合、再起動プ
ロセスはログファイル127内のメッセージを消去す
る。
【0018】フォールトトレラントコンピューティング
システム101には、ここで言及すべきいくつかの特性
が存在する。第1に、システム101は、ハードウェア
またはノード上で動作するオペレーティングシステムが
何であっても変更は不要である。フォールトトレラント
プロセス103は通常のユーザプロセスであり、デーモ
ン104はユーザプロセスを使用して実現される。さら
に、libft、および、watchdデーモンによっ
て実行されるコードはプログラミング言語Cで書かれて
おり、さまざまなオペレーティングシステムのもとで実
行するように容易に適合可能である。第2に、watc
hdデーモン104を有するノードでは、libft1
13からのルーチンをプロセスによって実行されるコー
ド内に単に組み込むことによって、プロセスをフォール
トトレラントプロセス103とすることが可能である。
アプリケーションプログラマは、アプリケーションコー
ド内でフォールトトレラント機能を再実現する必要はな
い。第3に、システム101は高度の柔軟性を提供す
る。libft113内のルーチンによって、アプリケ
ーションプログラマは、アプリケーションに要求される
フォールトトレランスの量を正確にプログラムに与える
ことができる。さまざまなオプションが可能である。一
方では、単に、watchdデーモン104にプロセス
を登録することができる。これによって、デーモン10
4はプロセスを監視し、必要な場合には、プロセスのメ
モリの一部をクリティカルメモリ115であると宣言
し、プロセスがデーモン104によって再起動された後
に復元可能なようにクリティカルメモリ115をクリテ
ィカルメモリコピー125に定期的に保存することによ
って、プロセスを再起動する。他方では、再起動したプ
ロセスがメッセージを消去することができるようにログ
ファイル127内のクリティカルメッセージのログを作
成する。
【0019】[1以上のノードを有するシステムにおけ
るwatchdおよびlibftの概観:図2]図1の
システムは、単一ノードのハードウェアまたはオペレー
ティングシステムが決して故障しない場合には完全に十
分であるが、ハードウェアまたはオペレーティングシス
テム故障の場合には役に立たない。この困難は、分散シ
ステムの自然な冗長性を利用することによって解決され
る。分散システム内のある与えられたノードが故障する
ことはあるが、システム内のすべてのまたは大部分のノ
ードが同時に故障することは極めてまれである。結果と
して、あるノード上のフォールトトレラントプロセス1
03が他のノード上で再起動されることが可能であれ
ば、プロセス103は最初のノード上のハードウェアお
よびオペレーティングシステムの故障に耐性があること
になる。
【0020】図2にこのような分散システムを示す。シ
ステム201は、A、B、およびCとラベルされた3つ
のノード203を有する。各ノードは少なくとも1つの
プロセッサおよびメモリを有するとともに、少なくとも
1つの他のノードと通信するための通信リンクを有す
る。各ノードはwatchdデーモン104を有し、従
って、フォールトトレラントプロセス103をも有する
ことが可能である。図2には3つのそのようなフォール
トトレラントプロセス103(103(0)、103
(1)、および103(2))が存在する。各ノードの
デーモン104は、プロセス103にローカルな状態の
みならず、他のノード203の状態をも監視する。好ま
しい実施例では、監視中のデーモン104と、それが監
視するノード203との関係は、システム201内のノ
ード203がフォールト診断のための適応リング211
を形成するようなものである。すなわち、デーモン10
4(A)はノード203(B)を監視し、デーモン10
4(B)はノード203(C)を監視し、デーモン10
4(C)はノード203(A)を監視する。デーモン1
04がどのノード203を監視するかは、ノードリスト
(NL)205によって決定される。ノードリスト20
5の同一コピーが各ノード内のデーモン104に利用可
能である。ノード203(i)が故障すると、この事実
は監視中のデーモン104によって注目され、監視中の
デーモン104は、ノード203(i)の損失を反映す
るようにノードリスト205を変更するよう、生き残っ
ているノードにメッセージを同報する。
【0021】もちろん、ノード内のwatchdデーモ
ン104が他のノードからのフォールトトレラントプロ
セス103を再起動する場合、そのプロセス103の状
態のコピーを有しなければならない。すなわち、システ
ム201におけるデーモン104のもう1つの機能は、
プロセス103の状態のコピーを維持することである。
状態はファイルに格納され、プロセスのクリティカルメ
モリコピー125およびログファイル127を含む。図
2では、プロセス状態のコピーはプロセス番号と′記号
によって指定されている。例えば、103(1)′は、
ノード203(A)からのノード203(C)上でのプ
ロセス103(1)の状態を示し、コピー103
(0)′は、ノード203(B)からのノード203
(A)上でのプロセス103(0)の状態を示す。図2
から分かるように、プロセス状態は、監視されているノ
ード203から監視中のwatchdデーモン104の
ノード203へコピーされる。コピーは監視されている
ノードのデーモン104によって作成され、プロセス1
03のクリティカルメモリコピー125またはログファ
イル127に大きな変化があるごとに監視中のデーモン
104に送られる。システム201では、単一のコピー
のみが作成されるため、システム201のリング211
内の隣接する2つのノードが故障しなければ再起動は可
能である。もちろん、複数のコピーを作成することが可
能である。例えば、デーモン104(A)は、プロセス
103(1)の状態のコピーをデーモン104(C)に
与えることができる。またデーモン104(C)はプロ
セスの状態のコピーをデーモン104(B)に与えるこ
とができる。その場合、プロセス103(1)の再起動
を不可能にするためには、システム201の全ノードが
故障しなければならない。
【0022】上記から明らかなように、各デーモン10
4は、各フォールトトレラントプロセス103がシステ
ム201内のどこで動作中であるかを知らなければなら
ない。この情報は状態テーブル207に含まれ、各デー
モン104はそれと同一のコピーを有する。以下で詳細
に説明するように、各watchdデーモン104がプ
ロセスを起動または再起動する際に他のすべてのデーモ
ン104へメッセージを送信し、各デーモン104がそ
のようなメッセージに応答してそのメッセージによって
要求されるとおりに状態テーブル207を更新すること
によって、状態テーブル207は一貫性が保持される。
【0023】ノード203(i)がサービスに復帰する
と、そのノード内のwatchdデーモン104(i)
は、デーモン104(i)によって監視されているノー
ド内のデーモン104から状態テーブル207のコピー
を取得する。状態テーブル207は、どのノード203
がノード203(i)にローカルなプロセス103を現
在実行中であるか、および、そのプロセスを再起動する
のに必要な状態を含むファイルを示す。デーモン104
(i)は、そのプロセスを現在実行中のノードからファ
イルのコピーを取得し、そのコピーを使用してプロセス
を再起動する。上記のように、デーモン104(i)
は、プロセスを再起動する際に、システム201内の他
のデーモン104にメッセージを送り、デーモン104
が再起動されたプロセスを実行中である場合、そのデー
モン104はそのプロセスの実行を中止し、プロセス1
03が現在ノード203(i)上で実行されていること
を示すように状態テーブル207を変更する。他のすべ
てのデーモン104は単にこのように状態テーブル20
7を変更する。
【0024】各デーモン104は、以下のアルゴリズム
に従って動作する。このアルゴリズムでは、各フォール
トトレラントプロセス103は識別子(iで示す)を有
する。さらに、プロトコルで使用される4個の補助変数
が存在する。 1.pi:プロセスiが実行されることになる基本ノー
ドの名前。この情報は状態テーブル207から分かる。 2.fi:プロセスiの連続故障の回数。 3.LocalHost:ローカルホスト名。 4.MyWard:監視することになるノードの名前。 5.MyOldWard:前に監視していたノードの名
前。
【0025】アルゴリズムのクリティカル状態ファイル
は、プロセスのクリティカルメモリコピー125および
ログファイル127を含む。このファイルは、プロセス
によって実行されるプログラムの開発者によって提供さ
れる機構によって維持される。または、libftフォ
ールトトレラントライブラリ113によって提供される
機構によって維持される。
【0026】1./* 初期化 */ (a)作業ノード203(ランダムに選択)から状態テ
ーブル207を取得する;他のノード203が生きてい
ない場合、その状態テーブルを初期化する; (b)ローカルに実行すべき各プロセスiに対して、 i.状態テーブルからpiを取得する; ii.ノードpiからプロセスの最新の状態を取得す
る; iii.プロセスiを再起動し、状態テーブルをグロー
バルに更新する; 2.永久ループ: BEGIN (a)各プロセスiに対してループ: BEGIN i.状態テーブルからpiを取得する; ii.pi=LocalHostである場合、 A.プロセスiが生きていてハングしていない場合、 fi=0; continue; B.fiをインクリメント; C.fi<maxiである場合、プロセスiを再起動し、
状態テーブルをグローバルに更新する; else fi=maxiである場合、プロセスiを回復
するよう、バックアップノードに通知する; else fi>maxiである場合、緊急警告メッセー
ジを印字する; iii.else ノードMyWardが故障した場
合、 A.MyOldWardをMyWardにセットする; B.新しい監視ノードを見つけ、それにMyWardを
セットする; C.pi=MyWardである場合、/* プロセスの
バックアップになる */ MyWardからプロセスiのすべてのクリティカル状
態ファイルをコピーする; D.else pi=MyOldWardである場合、
/* プロセスの基本ノードが故障した */ プロセスiを再起動し、状態テーブルをグローバルに更
新する;すべてのクリティカル状態ファイルをバックア
ップにコピーする; iv.else A.プロセスiがローカルに実行中である場合、そのプ
ロセスの実行を停止する; END; (b)イベント(時間切れまたはプロセスクラッシュ)
を待機する; END;
【0027】[1.ノード故障およびサービスへの復帰
の例]ノード故障およびサービスへの復帰がいかに動作
するかをさらに詳細に見るため、例として、上記のノー
ド203(A)、203(B)、および203(C)の
システムを考える。説明を簡単にするため、yeast
dという単一のプロセス103のみを考える。このプロ
セスは、yeastd.staというファイルにその状
態を定期的に保存し、ログファイルyeastd.lo
gを有すると仮定する。ノードAはノードBを監視し、
ノードBはノードCを監視し、ノードCはノードAを監
視する。最初に、すべてのノードは生きており、プロセ
スyeastdはノードAで実行されている。以下のシ
ナリオを考える。
【0028】1.ノードCがダウンする: ・ノードAは何もしない; ・ノードBはノードAからファイルyeastd.st
aおよびyeastd.logをコピーし、ノードAの
監視およびプロセスyeastdを開始する; 2.ノードCがシステムに再結合する: ・ノードAは何もしない; ・ノードCはノードAからファイルyeastd.st
aおよびyeastd.logをコピーし、ノードAの
監視およびプロセスyeastdを開始する; ・ノードBはノードAの監視を停止し、ノードCの監視
を開始する; 3.ノードAがダウンする: ・ノードCはプロセスyeastdを再起動し、状態テ
ーブル207およびノードリスト205をグローバルに
更新し、ノードBの監視を開始する; ・ノードBはノードCからファイルyeastd.st
aおよびyeastd.logをコピーし、ノードCの
監視およびプロセスyeastdを開始する; 4.ノードAがシステムに再結合する: ・ノードAはノードCからファイルyeastd.st
aおよびyeastd.logをコピーし、プロセスy
eastdを再起動し、状態テーブル207およびノー
ドリスト205をグローバルに更新し、ノードBの監視
を開始する; ・ノードCはyeastdプロセスの実行を停止し、ノ
ードBの監視を停止し、ノードAの監視を開始する; ・ノードBはプロセスyeastdの監視を停止する; 5.プロセスyeastdがクラッシュするがノードA
は生きている: ・ノードAはプロセスを再起動する;再起動が指定回数
失敗した場合、ノードAはこのプロセスを回復するよう
ノードCに通知する; ・ノードCは、何もしないか、または、ノードAによっ
て要求された場合、yeastdプロセスを再起動し、
状態テーブル207をグローバルに更新する; ・ノードBは、何もしないか、または、プロセスがノー
ドCによって再起動された場合、ノードCから状態ファ
イル(yeastd.staおよびyeastd.lo
g)をコピーし、ノードC上のプロセスyeastdの
監視を開始する;
【0029】各デーモン104は、状態テーブル207
を維持する。プロセスがノード上で再起動されると、そ
のノードのデーモン104は他のすべてのノードに更新
メッセージを送る。
【0030】ネットワークの一時的故障が生じた場合、
または、ノード203がシステムに再結合した場合、プ
ロセス103の複数のコピーが同時に実行されている可
能性がある。いつでもプロセスの1つのアクティブコピ
ーのみが実行されていることを保証するため、各wat
chdデーモン104は、他のノード203上で実行さ
れることになるプロセス103がローカルにも実行され
ているかどうかを常にチェックしなければならない。ロ
ーカルにも実行されている場合、デーモン104は、プ
ロセスに終了シグナルを送ることによってノード203
のそのプロセス103の実行を停止させなければならな
い。例えば、上記の例のシナリオ4を考える。ノードA
が故障した後、ノードA上で実行されていたプロセスy
eastdはノードC上で再起動される。しばらく後、
ノードAは修復されシステムに再結合する。ノードA上
のwatchdデーモンはフォールトトレラントプロセ
スリスト139を読み出し、ノードAはプロセスyea
stdを実行すべきであることを知る。ノードA上のw
atchdデーモンはまず作業ノード(例えばノード
B)から最新の状態テーブル207を読み出し、プロセ
スyeastdがノードC上で実行中であることを知
る。yeastdプロセスを実行する責任を引き継ぐた
め、ノードAはまずノードBからプロセスの状態ファイ
ルをコピーした後で、プロセスを再起動する。プロセス
の再起動が成功すると、ノードA上のwatchdデー
モンは他のすべてのノードに、それらの状態テーブル2
07を更新する更新メッセージを同報する。この更新
後、ノードCは、ノードAが立ち上がり、yeastd
プロセスがノードA上で実行されていることを知る。従
って、ノードCはもはやそのプロセスを実行する必要が
ない。この場合、デーモン104(C)は、ノード20
3(C)で実行中のプロセス103に終了シグナルを送
る。プロトコルによって、ノードAがシステムに再結合
する際にプロセスyeastdを引き継ぐことに注意す
べきである。このステップがないと、すべてのプロセス
103は最後に故障したノード203上のみで最終的に
実行されることになる。
【0031】[2.リング再構成の例]リング211が
(故障または修復によって)再構成される場合は、ノー
ド203間でクリティカル状態ファイルをコピーするこ
とが必要である。例えば、上記の例のシナリオ3を考え
る(複製度数は2であると仮定する)。ノードAが故障
する前は、ノードA上のプロセスyeastdはその状
態をノードC上にチェックポイントするが、ノードB上
にはしない。従って、ノードBはプロセスyeastd
の状態を有しない。ノードAが故障すると、ノードCは
以前の状態でそのプロセスを再起動し、同時に、ノード
BはノードCからそのプロセス(すなわちyeast
d)の状態ファイルをコピーする。ノードCからノード
Bへの状態ファイルのコピーは、回復中のノードCの故
障の可能性に対処するために必要である。そうでない
と、チェックポイントが確立可能となる前にノードCも
故障した場合、ノードBは、プロセスの状態を有しない
ため、プロセスを回復させることができない。
【0032】[watchdデーモン104の詳細]図
3に、いかにしてデーモン104が好ましい実施例を実
施するかを示す。図3では、実線矢印は情報の流れを、
破線矢印はプロセス間の親子関係を示す。watchd
デーモン104は、モニタ(MON)301および状態
サーバ(STATE SRVR)303という2つのユ
ーザプロセスによって実現される。この設計には2つの
理由がある。
【0033】・デーモン104の故障の可能性を最小に
するため、デーモン104は、不正確な実行の可能性が
非常に少なくなるように、十分単純な要素からなるもの
でなければならない。 ・デーモン104は、時間依存動作および非同期動作の
両方を実行することができなければならない。非同期動
作は、時間依存動作に干渉してはならない。
【0034】モニタ301から説明する。モニタ301
は以下のことを行う。 ・モニタ301は、動作を開始すると、初期化動作を実
行する。これには、UNIXオペレーティングシステム
のFORK関数を使用して状態サーバ303を作成する
ことが含まれる。 ・初期化後、モニタ301は以下のことを行う。 1.プロセス103をポーリングし、それらのプロセス
がクラッシュしているかどうか判定する。 2.クロック302を監視し、状態サーバ303にメッ
セージを送る時刻かどうか判定する。 3.プロセス103が死んでいることをポーリングが示
した場合、または、時刻メッセージが送られる必要があ
る場合、状態サーバ303にメッセージを送る。 4.状態サーバ303がクラッシュしている場合、モニ
タ301は状態サーバ303を再起動する。
【0035】デーモン104の他のすべての動作は、状
態サーバ303によって実行される。特に、状態サーバ
303は、ポーリング以外の方法によって、監視されて
いるノード203が生きているかどうか、および、プロ
セス103がクラッシュまたはハングしているかどうか
判定し、テーブル139、141、205、および20
7を維持し、プロセス状態のバックアップコピーを他の
ノードに提供する。
【0036】モニタ301によって実行される動作をさ
らに詳細に説明すれば、モニタ301は、UNIXオペ
レーティングシステムのkillシステムコールを使用
することによって、フォールトトレラントプロセス10
3がクラッシュしているかどうかを判定する。このシス
テムコールは、シグナル0とともに使用すると、チェッ
クされるプロセスの動作に影響を与えずに、プロセスが
死んでいる場合はエラー値を返す。このポーリングは、
図3では矢印310で表されている。モニタ301は、
プロセス103が死んでいることを検出すると、メッセ
ージ(矢印305で示す)を状態サーバ303へ送る。
これはそのプロセスを再起動する。モニタ301は、い
ずれの時刻がクリティカルであるかを示す状態サーバ3
03からのメッセージに応答して、クリティカル時刻を
記憶する。クリティカル時刻になると、モニタ301は
その時刻を示すメッセージを状態サーバ303に送る
(矢印305で示す)。モニタ301は、UNIXオペ
レーティングシステムのSIGCHLDシグナルによっ
て、状態サーバ303がクラッシュしていることを検出
する。このシグナルは、子プロセスが死んだ場合に親プ
ロセスが受け取るものである。
【0037】デーモン104の残りの動作は状態サーバ
303によって実行される。状態サーバ303は、他の
ノード203内のデーモン104と通信し、ローカルに
動作しているフォールトトレラントプロセス103の状
態を矢印306で示すようにポーリング以外の方法によ
って監視し、矢印209で示すように、リング211内
での隣接ノード203の状態を監視する。状態サーバ3
03は、次のノード203のデーモン104にメッセー
ジを送ることによってそのノードの状態を監視する。そ
のデーモン104が応答しない場合、その隣接ノード2
03はダウンしていると仮定される。隣接ノード203
がダウンしていることが検出されると、状態サーバ30
3は、そのノードがダウンしていることを示すメッセー
ジを他のデーモン104に送り、リング211を再構成
するのに必要な作業を自己のノード203内で行う。
【0038】ローカルフォールトトレラントプロセス1
03が死んでいるかまたはハングしているかどうか判定
するために状態サーバ303によって使用される方法
は、以下のことを含む。図3に示すように、モニタ30
1が属するノード203上で動作しているすべてのフォ
ールトトレラントプロセス103(ローカルフォールト
トレラントプロセス(図3のLFTPS317))は状
態サーバ303の子プロセスである。その結果、これら
のプロセス103のうちの1つが死ぬと、状態サーバ3
03は、UNIXオペレーティングシステムから、子プ
ロセスのうちの1つが死んだことを示すSIGCHLD
シグナルを受け取る。
【0039】さらに、状態サーバ303は、あるUNI
Xオペレーティングシステムファシリティを使用して、
フォールトトレラントプロセス103がハングしている
かどうか能動的に判定する。このファシリティは、他の
プロセスの指定ポートがメッセージを受け取ることがで
きない場合にビジービットをセットし、そのビジービッ
トがクリアされるとそのメッセージを送信したプロセス
に割り込みをかけるというものである。状態サーバ30
3はこのファシリティを使用して、プロセス103にメ
ッセージを送り、ある時間区間待機する(この時間区間
の終点は、モニタ301からのメッセージによって示さ
れる)。ビジービットがこの時間区間中にクリアされな
い場合、状態サーバ303は、プロセス103がハング
していると判定する。
【0040】最後に、状態サーバ303は、フォールト
トレラントプロセス103がlibft113によって
提供されるハートビート関数を実行しているときはいつ
でも、そのプロセスがモニタ301に送るメッセージを
監視することによって、そのプロセスがハングしている
かどうか判定することができる。この関数に送られるメ
ッセージは、プロセス103からの次のメッセージが到
着する前に超過してはならない時間を指定するものであ
り、その指定された時間を超過するまでに状態サーバ3
03が次のメッセージを受信しない場合、状態サーバ3
03はプロセス103がハングしていると判定する。こ
の場合も、タイミングはモニタ301によって実行され
る。
【0041】好ましい実施例では、モニタ301または
状態サーバ303が、ローカルフォールトトレラントプ
ロセス103がハングまたはクラッシュしていると判定
した場合、状態サーバ303がUNIXオペレーティン
グシステムのFORKシステムコールを使用することに
よってプロセス103を再起動して新しいプロセスを作
成する(矢印135)。この新しいプロセスは、クラッ
シュまたはハングしたプロセスと同じコードを実行し、
クラッシュまたはハングしたプロセス103のために存
在するクリティカルメモリコピー125やログファイル
127を使用する。再起動されたプロセス103が再び
クラッシュまたはハングした場合、状態サーバ303
は、監視中のデーモン104に対して、その監視中のデ
ーモン104のノードでプロセス103を再起動すべき
であることを示すメッセージをそのデーモンに送ること
ができる。もちろん、再起動されるプロセス103がク
リティカルメモリコピー125やログファイル127を
有する場合、そのコピーおよびログファイルをその監視
中のデーモン104のノードにコピーしておかなければ
ならない。
【0042】デーモン104が属するノード203がダ
ウンし、動作を再開しつつある場合、状態サーバ303
は、そのノード203が再起動されたことを示すメッセ
ージを他のすべてのデーモン104に送る。同様に、状
態サーバ303は、他のノード203上にコピーを有す
るフォールトトレラントプロセス103が状態サーバ3
03のノードで再起動されるときにはいつも、メッセー
ジを他のすべてのデーモン104に送る。さらに、プロ
セス103のクリティカルメモリコピー125またはロ
グファイル127のコピーが、モニタ103が属するノ
ードを監視するノード203に送られる必要がある場
合、状態サーバ303は、コピーされるべきデータを含
むメッセージを、監視中のノード内のデーモン104に
送る。
【0043】好ましい実施例では、状態サーバ303
は、さらに以下のような機能を有する。 ・フォールトトレラントプロセス103によって呼び出
されるいくつかのlibft関数に応答する(矢印30
7)。 ・モニタ301からの(矢印305)、他のデーモン1
04からの(矢印311)、およびローカルフォールト
トレラントプロセス103からの(矢印307)メッセ
ージに応答してテーブル139、141、205、およ
び207を維持する。 ・ローカルフォールトトレラントプロセス103、およ
び、ノードがバックアップノードとして働くフォールト
トレラントプロセス103のプロセス状態コピー315
を、そのようなコピーを他のノード203に提供し他の
ノード203のコピーを受け取ることによって、維持す
る。
【0044】これらの機能のほとんどは、フォールトト
レラントプロセステーブル139、フォールトトレラン
トプロセスグループテーブル141、ノードリスト20
5、および状態テーブル207に関連する。好ましい実
施例では、これらのすべてのテーブルはファイルに維持
される。以下で、これらのテーブルについてさらに説明
する。
【0045】[1.リスト205、139、および14
1の詳細:図4]図4は、これらのテーブルのうちの3
つ、すなわち、ノードリスト205、フォールトトレラ
ントプロセス139、およびフォールトトレラントプロ
セスグループ141を示す。ノードリスト205から説
明すると、システム201内の各ノード203はリスト
205中に単一のノードリストエントリ401を有す
る。各ノードのエントリは、ノード203の名前403
を単に含むだけである。リスト205中のエントリの順
序は、リング211の構成を決定する。すなわち、リス
ト205中のエントリ403(j)のノードのデーモン
104は、エントリ403(j−1)のノード203を
監視し、エントリ403(0)のノード203のデーモ
ン104は、エントリ403(n)のノード203を監
視する。
【0046】状態サーバ303は、監視中のノード20
3がダウンしていることを検出するか、または、ノード
203がダウンしていることを示すメッセージを他のデ
ーモン104から受信すると、ノードリスト205から
そのノードのエントリを削除する。その削除によって、
モニタ301が監視中であるべきノード203が影響を
受けると、状態サーバ303がそのノードの監視を開始
する。状態サーバ303は、デーモン104が動作中の
ノードがシステム201に再結合しつつあることを示す
メッセージをデーモン104から受信すると、必要に応
じてノードリスト205を更新し、更新によって必要と
なれば、異なるノード203の監視を開始する。上記の
ことから明らかなように、システム201内の各ノード
203はノードリスト205の同一のコピーを有する。
【0047】次に、フォールトトレラントプロセステー
ブル139に移ると、デーモン104が属するノード上
で現在アクティブであるか、または、アクティブとなる
可能性のある各フォールトトレラントプロセス103
は、テーブル139中にエントリ(FTPE)405を
有する。各エントリは、プロセス103に関する以下の
情報を含む。 ・フォールトトレラントプロセスの名前407。好まし
い実施例では、これは、そのプロセスによって実行中で
あるプログラムのパス名である。 ・モニタ301が、プロセス103がクラッシュまたは
ハングしているかどうか判定するためにメッセージを送
るポートのポート番号409。 ・ノード203が生きている場合にプロセス103が動
作するノードの基本ノード名411。 ・プロセス103のクリティカルメモリコピー125お
よびログファイル127を含むファイルのリストである
クリティカルファイル413、ならびに、状態サーバ3
03が、プロセス103がハングしていると結論するま
でに待機すべき最大時間であるタイムリミット(TL)
415。
【0048】フォールトトレラントプロセスエントリ4
05内の情報には2つの情報源がある。基本ノードがテ
ーブル139の属するノードであるようなプロセス10
3のエントリ405の場合、この情報は、プロセス10
3、および、クリティカルメモリコピー125やログフ
ァイル127をデーモン104に登録するlibft内
の関数によって提供される。このような場合、基本ノー
ド名411は、テーブル139が属するノードの名前で
ある。基本ノードが他の場所であるようなプロセス10
3のエントリ405の場合は、状態サーバ303は、基
本ノード203にエントリを作成する際に、基本ノード
をバックアップすることになる1以上のノード203内
のwatchdデーモン104にそのエントリの内容を
送り、関連するノード203内の状態サーバ303がそ
の情報をそのフォールトトレラントプロセステーブル1
39に加える。1つのバックアップノードが指定されて
いる場合、そのノードのwatchdデーモン104は
基本ノードを監視する。複数のバックアップノードが指
定されている場合、残りのバックアップノードは、その
デーモンが第1のバックアップノードを監視し、以下同
様、となる。
【0049】フォールトトレラントグループテーブル1
41に移ると、各エントリ417は、フォールトトレラ
ントプロセス名421、および、そのフォールトトレラ
ントプロセスが属するグループを示すグループ番号41
9を含む。あるグループに属するプロセス103が再起
動されなければならない場合、そのグループ内の全プロ
セス103が同時に再起動される。テーブル141の情
報源は、テーブル139と同じである。ローカルフォー
ルトトレラントプロセス103の場合、その情報はli
bft関数によって提供される。他のノードからコピー
されたプロセスの場合、その情報は、バックアップされ
ているノードのデーモン104によって提供される。
【0050】フォールトトレラントプロセステーブル1
39およびフォールトトレラントグループテーブル14
1の内容から明らかなように、システム201からノー
ド203が削除された場合またはこのようなノードがシ
ステムに復帰した場合にリング211が変化したときに
はいつでも、異なる非ローカルフォールトトレラントプ
ロセスに関する情報が状態サーバプロセス303が属す
るノード203に格納されなければならないような方法
で、状態サーバデーモン303はこれらのテーブルを更
新する。好ましい実施例では、状態サーバプロセス30
3は、リング211の変化を通知されると、ノードリス
ト205を更新し、リング211の新しい構成が与えら
れるとテーブル139および141にコピーされなけれ
ばならない情報を含むメッセージをノード203に中継
する。テーブル139および141の内容は、もちろ
ん、ノード内で動作中のローカルフォールトトレラント
プロセス103、および、リング211内でのそのノー
ドの位置に依存して、ノード203ごとに異なる。
【0051】[2.状態テーブル207の詳細:図5]
前記のように、システム201内のすべてのノードは状
態テーブル207の同一のコピーを有する。状態テーブ
ル207には、システム201内で動作中のすべてのフ
ォールトトレラントプロセス103のエントリがある。
各エントリは以下のフィールドを含む。 ・フィールド503はプロセス名である。 ・フィールド505は、プロセスが現在実行されている
ノードの名前である。 ・フィールド507は、現在のノード上のプロセスと通
信するために使用されるポート番号である。 ・フィールド509は、現在のノード上のプロセスのプ
ロセス識別子である。 ・フィールド511は、好ましい実施例が実現されるU
NIXオペレーティングシステムがプロセスを終了する
ことによって応答するシグナルの指定である。 ・フィールド513はプロセスのクリティカルファイル
のリストである。
【0052】上のテーブルの情報は以下のようにして取
得される。ノード203が(新しいノードとして、また
は、再開動作として)システム201に加えられると、
状態サーバ303は、既に動作中のノード203から状
態テーブル207のコピーを要求するメッセージを送
る。そのコピーが返されると、状態サーバ303は、そ
のテーブルから自己の状態テーブル207を作成する。
前記のように、ノード203上の状態サーバ303は、
フォールトトレラントプロセス103を起動または再起
動するときはいつでも、他のすべてのデーモン104に
メッセージを送る。このメッセージは、プロセス名、そ
のプロセスを起動しているノードの名前、ポート番号、
プロセスid、およびクリティカルファイルのリストを
指定する。ノード203の状態サーバ303は、そのメ
ッセージを受信すると、状態テーブル207にそのプロ
セスのエントリを作成する。状態テーブル207にその
プロセスの他のエントリがある場合、状態サーバ303
はそのエントリを削除する。また、状態サーバ303
は、メッセージに指定されたプロセス103を現在実行
中であるかどうか判定する。プロセス103のフォール
トトレラントプロセステーブルエントリ405があっ
て、そのエントリが、他のノード203を基本ノード4
11として示している場合、状態サーバ303はそのプ
ロセスのローカル実行を終了する。この手段によって、
2つの目的が達成される。第1に、システム201内の
状態テーブル207のすべてのコピーの一貫性が保たれ
る。第2に、フォールトトレラントプロセス103は、
基本ノードがダウンするか、そうでなければそのプロセ
スを実行できない場合でなければ、常に基本ノード20
3上で実行される。
【0053】[3.テーブル139、141、205、
および207の破壊の回避]好ましい実施例では、状態
サーバ303は、テーブルを照会するごとに、取得した
データの破壊をチェックする。破壊の証拠が発見された
場合、状態サーバ303は他のノード203から状態テ
ーブル207およびノードリスト205の新しいコピー
を取得し、これらのテーブルからすべてのテーブル13
9、141、205、および207を再構成する。同様
に、状態サーバ303は、テーブルを更新または置換す
るときはいつでも、テーブルを更新または置換してから
破壊をチェックする。何か発見された場合、テーブルの
新しいコピーを取得するか、または、上記と同様とな
る。
【0054】[フォールトトレラントシステム101お
よび201の動作]フォールトトレラントシステム10
1および201は、好ましい実施例では、UNIXオペ
レーティングシステムのシェルプロセスによって実行さ
れるコマンドによって、および、libft113ルー
チンによって、制御される。以下で、システム101お
よび201の動作を、コマンドおよびlibftルーチ
ンの説明を通して開示する。
【0055】[1.watchdデーモン104のコマ
ンド]ノード上でwatchdデーモン104を起動す
るには、 watchd [n] を使用する。ただし、n(複製度数)は、デーモン10
4が動作中のノード203上で動作しているプロセスの
状態コピー315を有するノード203の総数である。
デフォルトの複製度数は2である。nが大きくなると、
プロセスはより強固になる。例えば、nが2である場
合、2個のノードが同時に故障するとプロセスは回復で
きない。ところが、nが3であれば、2つの同時故障が
あってもプロセスは常に回復可能である。しかし、nが
大きくなると、チェックポイント動作のオーバヘッドが
多くなる。長い予想寿命および短いダウン時間をもつ実
際的なシステムでは、システムの可用性に関しては最適
の複製度数は2であることが示されている。(ワイ.フ
アン(Y. Huang)、ピー.ジャロート(P. Jalote)、「応
答時間に関するフォールトトレランスの効果−基本サイ
トアプローチの解析」IEEE Transactions on Computer
s、第41巻第4号第420〜428ページ(1992
年4月)参照。)
【0056】あるノードから他のノードへフォールトト
レラントプロセスを移動するには、 moveproc <proc> <node> を使用する。ただし、<node>は宛先ノードであ
る。ソースノードは、状態テーブル207から見つけら
れるため不要であることに注意すべきである。このコマ
ンドの目的は負荷均衡である。これによって、プロセス
はより軽負荷のノードに移動され、プロセスの応答時間
が改善される。もちろん、プロセスが移動される場合、
関連するノードのフォールトトレラントプロセステーブ
ル139およびフォールトトレラントグループテーブル
141もそれに従って更新され、移動されたプロセスが
新しいノードで実行を開始されると、システム内の状態
テーブル207は前記のように更新される。
【0057】システム内のフォールトトレラントプロセ
スをオンライン付加または削除するには、 addwatch <nameまたはpid> <pa
th> <port> <node> <time>
[<files>] delwatch <name> を使用する。ただし、<node>はプロセス<nam
e>が動作中の基本ノードである。<node>はノー
ドのシステム名またはlocalという名前である。後
者は、ローカルマシン名を表すキーワードである。<p
ort>はプロセスが使用中のソケットポート番号であ
る(ソケットがない場合は0)。<path>は、プロ
セス<name>または<pid>のバイナリが発見さ
れる場所へのフルパスを与える。この情報は、引数<f
iles>がプロセス状態コピー315を含むファイル
のリストである場合に必要となる。例えば、プロセスy
dがマシンgryphon上で動作中であるとする。w
atchdデーモンにこのプロセスを監視させるために
は、 addwatch yd /usr/local/bi
n/yd 0 gryphon 0 を使用することができる。また、これらのコマンドの実
行によって、テーブル139、141、および207が
変更される。
【0058】システムにノードをオンライン付加または
削除するには、 addnode <node> delnode <node> を使用する。これらのコマンドに応答して、すべてのデ
ーモン104はそのノードリスト205を修正し、リン
グ211の再構成によって直接影響を受けるデーモン
は、プロセス状態コピー315を転送し、フォールトト
レラントプロセステーブル139およびフォールトトレ
ラントグループテーブル141を、この再構成によって
要求されるように修正する。ノード203の削除の場
合、このノード上で動作しているプロセス103のエン
トリは状態リスト207から削除される。
【0059】[2.システム101および201で使用
されるlibft113関数]システム101および2
01で使用されるlibft113関数の以下の説明
は、まず、チェックポイントおよび回復動作で使用する
関数、続いて、watchdデーモン104との対話の
ために使用される関数、そして最後に、フォールトトレ
ラントソケット機構を提供する状態テーブル207にリ
ストされたプロセスポートを使用する関数の順で行う。
【0060】チェックポイントは、libftにおける
回復のための基本技術である。プログラムは、安全状態
にあるときに、その状態を安定な記憶域にチェックポイ
ントする。後で、プログラムの実行中に予想しない状態
が生じた場合、システムはその安全状態を復元し、エラ
ーから回復することができる。
【0061】従来のフォールトトレラントシステムで
は、チェックポイントは一般に、プロセスのアドレス空
間内のすべてのデータを安定記憶域に保存していた。チ
ェックポイント効率を改善するため、libftは、ユ
ーザがクリティカルデータ構造体およびクリティカル変
数を指定することができる機構を提供している。チェッ
クポイントが必要なとき、これらのクリティカルデータ
のみが保存される。
【0062】[3.クリティカルデータの指定]単純な
型の変数は、関数critical()を使用すること
によってクリティカルであると宣言することができる。
【0063】[3.1 クリティカル変数を宣言する関
数]
【表1】
【0064】関数critical()および関数t_
critical()は、引数addrによってポイン
タ参照される記憶域を、クリティカルメモリ115の一
部であリ、従って、チェックポイント動作が実行される
場合にクリティカルメモリコピー125にコピーされる
べきである記憶域として識別する。これら2つの関数の
引数は、ポインタ(変数をポインタ参照する)と整数
(そのポインタによってポインタ参照される変数のサイ
ズ)の0個以上の対からなる。引数リストは、対をなさ
ない0で終了する。関数t_critical()は、
プロセス内のスレッドのためにクリティカル変数を登録
する。threadidは、0から_FTMAXTHR
EAD(libftint.hで定義されるパラメー
タ)までの値をとる整数である。関数critical
(...)は関数t_critical(0,...)
と等価である。
【0065】関数uncritical()は、指定さ
れた記憶域をクリティカルメモリ115から削除する。
この関数の引数は、もはやクリティカルメモリ115の
一部ではなく、従ってもはやチェックポイント動作によ
ってコピーされるものではない変数のアドレスのリスト
からなる。この場合も、最後の引数は対をなさない0で
なければならない。関数t_uncritical()
は、プロセス103内のスレッドのクリティカルメモリ
115から記憶域を削除する。
【0066】関数all_critical()は、プ
ロセス103のすべての変数をクリティカルメモリ11
5に入れる。同様に、関数all_uncritica
l()は、クリティカルメモリ115からプロセス10
3のすべての変数を削除する。
【0067】関数save_all_global()
は、プロセス103のすべてのグローバル変数を保存す
るために使用される。この関数は、glbgenと呼ば
れるツールによって実現されている。このツールは、周
知のciaプログラム解析ツールによって生成されるc
データベースからグローバルデータのリストを作成す
る。
【0068】[3.2 クリティカルメモリを管理する
関数]libftはまた、メモリ105の領域を、クリ
ティカルメモリ115に属するものとして指定し、クリ
ティカルメモリ115に属する領域の一部の割り当てお
よび解放を行う関数を提供する。その関数は以下のとお
りである。
【表2】
【0069】関数ft_start()は、仮想メモリ
105の一部を、クリティカルアドレス空間115に属
するものとして指定するために使用される。指定される
メモリのサイズは、パラメータsizeによって与えら
れる。sizeが負の場合、デフォルトサイズの64k
バイトが与えられる。最初に指定したサイズが十分でな
い場合、クリティカルメモリ115のサイズは必要に応
じて自動的に増加される。クリティカルメモリ115か
ら空間を取得するには、関数ftmalloc()、f
tcalloc()またはftrealloc()を使
用する。これらの使用法は、UNIXオペレーティング
システム関数のmalloc()、calloc()お
よびrealloc()と同一である。空間をクリティ
カルメモリ115に返すには、関数ftfree()を
使用する。その使用法は、UNIXオペレーティングシ
ステム関数のfree()と同一である。
【0070】[4.チェックポイントおよび回復関数]
フォールトトレラントプロセス103によって実行され
ているプログラムは、クリティカルメモリ115をクリ
ティカルメモリコピー125にコピーするためにlib
ft関数であるcheckpoint()関数を使用
し、クリティカルメモリ115の内容をクリティカルメ
モリコピー125から復元するためにrecove
r()関数を使用する。
【0071】[4.1 概要]
【表3】
【0072】好ましい実施例では、クリティカルメモリ
コピー125は、ファイルに維持されるか、または、永
続性の仮想メモリ105の一部に維持される。整数fl
agは、どのオプションが使用されるかを示す。関数t
_checkpoint()が実行されると、全クリテ
ィカルメモリ115はクリティカルメモリコピー125
にコピーされる。チェックポイントが成功すると、関数
t_checkpoint()は1を返し、そうでない
場合は−1を返す。関数t_recover()が実行
されると、全クリティカルメモリ115はクリティカル
メモリコピー125から回復される。回復が成功する
と、関数recover()は1を返し、そうでない場
合は−1を返す。
【0073】一般に、ユーザが、クリティカルメモリコ
ピー125がファイル上に確保されるように指定した場
合、libftは実行時にそのファイルに名前を提供す
る。しかし、ユーザが、固有の名前を、関数ft_st
art()またはsetstafile()に対する引
数として与えることもできる。threadidパラメ
ータは、t_checkpointおよびt_reco
verにおいて、各スレッドに対してクリティカルメモ
リ115をチェックポイントし回復するために使用され
る。これは、チェックポイントファイルの履歴を保持す
る必要がある場合、または、マルチスレッド環境でチェ
ックポイント機構を使用する場合に有用である。マルチ
スレッドを使用しない場合、threadidには値0
を入れなければならない。関数rmcheckpoin
t()はチェックポイントファイルを削除する。これ
は、チェックポイント機構がセマフォとして使用される
場合に有用である。
【0074】関数checkpoint(flag)は
t_checkpoint(0,flag)と等価であ
る。同様に、関数recover(flag)はt_r
ecover(0,flag)と等価である。関数cr
iticalsize()は、スレッドに対してチェッ
クポイントされたクリティカルデータのサイズを返す。
これはthreadidをパラメータとしてとる。チェ
ックポイントされたクリティカルデータがない場合、こ
の関数は0を返す。
【0075】関数ftdup()は、データがクリティ
カルメモリ115からクリティカルメモリコピー125
へチェックポイントされるときはいつでも、クリティカ
ルメモリコピー125がバックアップノード203にコ
ピーされるべきことを指定するメッセージがプロセス1
03から状態サーバ303へ送られるよう指定する。f
tdup()関数がチェックポイントの前に呼び出され
ない場合、バックアップノード203へのコピーは行わ
れない。
【0076】[4.2 例]以下の例は、checkp
oint()関数およびrecover()関数がso
rt関数においていかにして使用されるかを示す。
【0077】
【表4】 sorted()は、引数リスト中の配列がソートされ
ている場合に1を返す関数である。
【0077】入力はソートされていない配列である。3
つのソートサブルーチン(supersort()、q
uicksort()およびbubblesor
t())がこの関数から呼び出されている。サブルーチ
ンを呼び出す前に、プログラムはcritical関数
を使用して、入力配列の記憶域をクリティカルメモリ1
15として確保してから、クリティカルメモリ125か
らクリティカルメモリコピー125へ未ソート配列をチ
ェックポイントする。次に、supersort()が
まず呼び出される。その終了時に、配列が検査される。
ソートされていれば、関数は正常復帰する。そうでない
場合、未ソート配列がクリティカルメモリコピー125
から復元され、quicksort()が呼び出され
る。quicksort()の結果が再び検査される。
結果が正しくない場合、配列が復元され、bubble
sort()が呼び出される。いずれのサブルーチンも
正しい答えを出さない場合、プログラムはエラーととも
に終了する。
【0078】[4.3 自動メッセージロギング]前記
のように、フォールトトレラントプロセス103のプロ
セス状態はログファイル127を有することができる。
好ましい実施例において、ログファイル127を設定し
使用するためのlibft関数は以下のとおりである。
【表5】
【0079】ログファイル関数は、fnameによって
指定されるファイルを、プロセス103のログファイル
127として確保する。プログラムが、ログファイル1
27上で読み出しているデータを記録したい場合、プロ
グラムはftread関数を使用する。この関数の使用
法は、プログラムによって読み出される全データがログ
ファイル上にもロギングされることを除いては、UNI
Xオペレーティングシステムのread関数と同一であ
る。ftreadによって作成されるログエントリは、
データおよびファイル記述子を含む。プログラムが回復
状態にある場合、プログラムは、ファイル記述子によっ
て指定されるファイルからの読み出しを開始する前に、
ログファイルからファイル記述子のエントリのデータを
読み出す。ログファイルは、checkpoint()
関数が実行されるたびに切り捨てられる。関数ftwr
ite()は、ftwrite関数を実行中のプロセス
103が回復モードにある場合には何も書き出さないこ
とを除いては、通常のUNIXオペレーティングシステ
ムのwrite関数と同様である。このようにして、f
twrite関数は、プロセス103の回復中には、既
に実行したwriteが重複しないようにする。
【0080】ftread()関数、ftwrit
e()関数およびcheckpoint()関数を組み
合わせると、定期的チェックポイントおよびデータ無損
失の効率的なフォールトトレラントプログラムを実現す
ることができる。本節で後で例を示す。
【0081】[5.watchdデーモン104を管理
するlibft関数]libft113は、watch
dデーモン104を管理するいくつかの関数を含む。そ
の中には、プロセス103をデーモン104に登録する
関数、プロセス103からデーモン104へハートビー
トシグナルを送る関数、および、プロセス状態コピー3
15を操作する関数がある。
【0082】[5.1 プロセス103のデーモン10
4への登録]関数regwatchはプロセス103を
デーモン104に登録する。登録後、デーモン104は
プロセス103の監視を開始する。
【表6】
【0083】この関数は3個のパラメータをとる。pr
ocはプロセス名である。portはプロセスがプロセ
ス間通信のために使用するポート番号である(プロセス
がポートを使用しない場合は0)。timeは最大タイ
ムアウトを定義するものである。この関数の実行によっ
て状態サーバ303にメッセージが送られる。状態サー
バ303は、これらのパラメータを使用して、フォール
トトレラントプロセスリスト139および状態テーブル
207中にプロセス103のエントリを作成し、他のデ
ーモン104が自己の状態テーブル207を更新するこ
とができるように他のデーモンにメッセージを送る。こ
れらのパラメータは、プロセス103に対するフォール
トトレラントプロセスリストエントリ405のフィール
ド407、409、および415に使用される。wat
chdデーモンが、プロセス103がハングしたかどう
か検出する必要がない場合、time=0とすることが
できる。
【0084】[5.2 watchdデーモンへのハー
トビートシグナルの送信]前記のように、状態サーバ3
03はプロセス103からの「ハートビート」シグナル
を受け取ることができる。このシグナルはlibft関
数hbeat()によって生成される。関数hbeat
()は引数として整数値をとる。その値は、状態サーバ
303がプロセス103からのハートビートシグナルを
待機すべき最大時間区間を指定する。状態サーバ303
がこの区間内にハートビートシグナルを受信しない場
合、状態サーバ303はプロセス103がハングしたと
考え、そのプロセスを再起動する。
【0085】[5.3 watchdデーモン104か
らの情報の取得]libft113は、プロセス103
がデーモン104から情報を取得することを可能にする
多くの関数を含む。その関数は以下のとおりである。
【表7】
【0086】関数getsvrloc()は、svr_
nameという名前のプロセス103が現在動作中のノ
ード203を返す。プロセス103がどのノード上でも
実行中でない場合、この関数はNULLポインタを返
す。
【0087】プロセスは、通常状態と回復状態という2
つの状態を有する。プロセスがwatchdデーモン1
04によって再起動されると、デーモン104は、プロ
セス103が回復状態にあることを示す値をセットす
る。このプロセスは、recover関数の実行が成功
するまでは回復状態のままである。実行を完了すると、
recover関数は、回復状態を示す値を通常状態を
示すようにセットするメッセージをデーモン104に送
る。関数in_recovery()によって、プロセ
ス103は、通常状態にあるかまたは回復状態にあるか
を判定することができる。この関数はデーモン104に
メッセージを送り、デーモン104は、プロセス103
の状態を示すことによって応答する。
【0088】関数copytobkp()は、ファイル
またはディレクトリをバックアップノード203に自動
的にコピーするように状態サーバ303にメッセージを
送る。引数がディレクトリである場合、そのディレクト
リの下のすべてのファイル(ディレクトリを含む)がバ
ックアップノードにコピーされる。この関数は、プロセ
ス103が、基本マシンとバックアップマシンの間で複
製されたファイルまたはディレクトリの一貫性を維持し
なければならないときに有用である。watchdデー
モン104は、ノードリストテーブル205に定義され
たリング211の構成から、プロセス103のバックア
ップマシンがどこにあるかを決定するため、バックアッ
プマシン名は不要であることに注意すべきである。
【0089】同様に、関数copyfromprima
ry()は、フォールトトレラントプロセステーブル1
39中のプロセス103のエントリに指定された基本ノ
ード203からローカルノード203にファイル(また
はディレクトリ)をコピーするために使用される。この
コピーは、関係するノード203内の状態サーバプロセ
ス303によって行われる。同様に、関数fastco
pys()は、ノードmachinenameからロー
カルノード203にファイル(またはディレクトリ)を
コピーする。両方の関数とも、コピーが成功した場合に
0を返し、そうでない場合は−1を返す。
【0090】プロセス103が第1のノード203上で
動作中であり、第2のノード203上で再起動されなけ
ればならない場合、プロセスは、第2ノード上で再起動
可能になる前に第1ノード203上で終了されなければ
ならない。終了シグナルは第1ノード203内のwat
chdデーモン104によって送られる。終了シグナル
を送るために、デーモン104は、プロセス103がど
のような終了シグナルを期待しているかを知らなければ
ならない。関数fttermsig()によって、プロ
セス103は、どのようなシグナルを期待しているかを
宣言することができる。例えば、プロセスが終了の際に
はシグナルSIGUSR1を受け取りたい場合、プログ
ラムの最初で文fttermsig(SIGUSR1)
を使用すればよい。この場合、watchdデーモン1
04はそのプロセスを終了するためにそのプロセスにシ
グナルSIGUSR1を送る。終了シグナルが宣言され
ていない場合、デフォルト終了シグナルSIGTERM
が送られる。
【0091】[5.4 フォールトトレラントソケット
機構]watchdデーモン104がフォールトトレラ
ントプロセス103と通信するために使用するポート
は、フォールトトレラントプロセス103へのフォール
トトレラントソケット接続を確立するためにも使用する
ことができる。以下のlibft関数は、フォールトト
レラントプロセス103のポートをこの目的に適合させ
る。
【表8】
【0092】関数ftconnect()は、クライア
ントプロセスを、フォールトトレラントプロセス103
であるサーバプロセスに接続する。この関数はまず、w
atchdデーモン104に問い合わせて、状態テーブ
ル207からプロセス103のポート番号を取得してか
ら、クライアントプロセスをプロセス103に接続す
る。ftconnect()の使用法は、UNIXオペ
レーティングシステムのconnect()関数と同一
である。関数ftbind()は、名前のないソケット
に名前を割り当てる。この関数は、デーモン104にメ
ッセージを送り、状態テーブル207からプロセス10
3のポート番号を取得した後、UNIXオペレーティン
グシステム関数を使用してその名前をデーモン104に
よって返されたポート番号に結合する。この関数の使用
法はbind()関数と同一である。関数ftsend
()は、プロセス103の状態テーブルエントリ501
のポート番号に対応するソケットにメッセージを送る。
送信が失敗した場合、この関数はソケットを自動的に再
接続し、メッセージを再送信する。この関数の使用法は
UNIXオペレーティングシステム関数send()と
同一である。
【0093】関数getsvrbyport()は、ソ
ケット通信にポート番号port_noを使用するプロ
セス103が現在動作中であるノードを返す。このポー
ト番号を使用しているプロセスがない場合、関数はNU
LL値を返す。関数getsvrport()は、プロ
セスの状態テーブルエントリ501のポート番号を返
す。watchdデーモン104がそのプロセスのポー
ト番号を発見できない場合、この関数は−1を返す。
【0094】[5.5 例]以下の例は、フォールトト
レラントプロセス103において動作し、チェックポイ
ントおよび回復にlibftを使用するサーバプログラ
ムを示す。このサーバプログラムは、クライアントから
入力を読み込み、スタックのトップにその数をプッシュ
する。スタックは連結リストとして実現される。
【表9】
【0095】上の例のクリティカルデータはスタックお
よびスタックのトップへのポインタ(pHead)であ
る。このポインタは、critical(&pHea
d,sizeof(pHead),0)の関数呼出によ
ってクリティカルメモリ115に入れられる。スタック
をクリティカルメモリ115に入れるためには、プログ
ラムはft_startを使用してクリティカルメモリ
115の領域を宣言し、ftmallocを使用してそ
こから割り当てなければならない。
【0096】ftdup()の実行によって、すべての
チェックポイントされたデータは、リング211の現在
の構成によって決定されるバックアップノード203に
送られる。関数in_recovery()は、プログ
ラムがデーモンwatchdによって再起動されると1
を返す。これは、関数recover()が実行されて
すべてのロギングされたデータが消去されるまでは1の
ままである。その後では、関数in_recovery
()は常に0を返す。プログラムは、200メッセージ
ごとにチェックポイントを実行する。すべての着信メッ
セージは、example.logと呼ぶファイルにロ
ギングされる。プログラムが回復モードにある場合、デ
ータは、ファイル記述子sからではなくロギングされた
ファイルから読み出される。プログラムは、関数ftt
ermsig(SIGTERM)を使用することによっ
て、SIGTERMを終了シグナルとして定義する。ハ
ートビートシグナルをwatchdデーモンに送るため
に、関数hbeat()が使用される。
【0097】[watchdおよびlibftを使用し
て、プログラムをフォールトトレラントにする]サーバ
プログラムを、フォールトトレラントプロセス103に
よって実行可能なように変換する一般的な方法は以下の
とおりである。 1.適当な場所にcheckpoint()およびre
cover()を挿入する。 2.クリティカル変数およびクリティカルデータ構造体
を定義する。 3.クリティカルメモリ割り当て用に、mallo
c()をftmalloc()に、realloc()
をftrealloc()に、free()をftfr
ee()に変更する。 4.サーバプログラムをlibftとともにコンパイル
およびリンクする。
【0098】以上の手順は、Yeastサーバプログラ
ムを変換するために使用された。Yeast(「さらに
もう1つのイベント−アクション指定ツール」(Yet ano
therEvent-Action Specification Tool))は、頻繁に実
行されるソフトウェア開発作業を自動化するためのサー
ビスを提供するツールであり、ディ.エス.ローゼンブ
ラム(D. S. Rosenblum)、ビー.クリシュナマーシー(B.
Krishnamurthy)「ソフトウェア設定管理のイベントベ
ースのモデル」、Proceedings of the 3rd Internation
al Workshop on Software Configuration Management、
第94〜97ページ、ACMプレス(1991年6月)
に記載されている。これは、ユーザからイベント−アク
ション指定を受け取り、指定されたイベントパターンの
発生を認識すると指定されたアクションを自動的に呼び
出す。
【0099】Yeastツールは、クライアントがイベ
ント−アクション指定を提示および操作し、yeast
dというサーバプロセスが指定照合および管理を実行す
るというクライアント−サーバモデルに基づく。サーバ
とクライアントの間の通信は、BSDのsocket機
構に基づく。これは、サーバが所定のホストに存在し、
周知のポートで要求を待機するものである。yeast
dの最初の実現はフォールトトレラントではなく、サー
バが動作中のノードが故障すると、yeastdは、ネ
ットワーク内に作業中の他のノードがあっても、もはや
サービスを提供することができない。故障したノードが
修復されると、yeastdは初期状態から再起動され
ることができるだけである。故障前に提示されたイベン
ト指定は失われる。
【0100】yeastdプロセスをフォールトトレラ
ントにするため、上記の手順を使用して、yeastd
プログラムをftyeastdプログラムに変換した。
Yeastはかなり複雑なシステムである。これは20
個以上のソースファイルと、4万行以上のCコードを有
する。最初のステップは、checkpoint()お
よびrecover()関数を挿入する正しい位置を識
別することであった。ソースプログラムを通読すること
により、サーバがアイドルになる位置をすぐに識別し
た。checkpoint()関数およびrecove
r()関数をその場所に挿入した。次のステップは、す
べてのクリティカルデータ構造体およびクリティカル変
数を見つけ出すことであった。はじめは、プログラムの
内部データ構造体に関してほとんど未知であったため、
このステップはより困難であった。注意深くソースプロ
グラムをトレースし、約25個のクリティカル変数を識
別した。これらの変数は、critical()関数を
使用することによってクリティカルであると宣言され
た。次のステップは、クリティカルデータ構造体のメモ
リ空間の割り当ておよび解放の際のmalloc()を
ftmalloc()に、および、free()をft
free()に変更することであった。これは、メイク
ファイル中でmalloc=ftmallocおよびf
ree=ftfreeと定義することによってなされ
た。クリティカルデータのためにクリティカルメモリ空
間を作成するために、サーバプログラムの最初にft_
start()関数を挿入した。最後に、この新しいソ
ースプログラムをlibftライブラリとともにコンパ
イルおよびリンクした。
【0101】完了後、ソースコードに追加された新しい
行の総数は約40であった。全手順は約4日間を要し
た。その時間のほとんどは、デバッグおよびテストに費
やされた。開始時にソースプログラムの十分な知識があ
れば変換はずっと早かったであろう。この新しいサーバ
ftyeastdは、システム内のノード故障に耐える
ことができ、サービスの提供を継続することが示され
た。
【0102】ftyeastdサーバの最初のプロトタ
イプでは、チェックポイントは、システム内の内部状態
変化があるところにはいつも挿入された。なんらかの最
適チェックポイント頻度に従ってサーバをチェックポイ
ントすれば、チェックポイントオーバヘッドは短縮する
ことができる。システムを解析し、最適チェックポイン
ト頻度を導出する方法は、上掲のイェンヌン・フアン(Y
ennun Huang)の論文にある。サーバの状態を回復するた
めに、バックアップノード上にメッセージログを保持す
ることができる。基本−コピー障害が発生した場合、こ
のメッセージログがバックアップノード(新しい基本ノ
ード)によって実行され、サーバの状態が再生成され
る。
【0103】この詳細な説明に記載した実施例は、本発
明を実施するのに、発明者によって知られている現在最
善のものであるが、本実施例の多くの変形が可能である
ことは当業者には明らかである。例えば、他の実施例の
libftは、より多い、または、より少ない関数を含
むことが可能であり、それらの関数は、本実施例とは異
なる意味を有することも可能である。さらに、watc
hdは異なるアーキテクチャを有することが可能であ
り、ノードおよびプロセスの状態を記録するために異な
るテーブルを使用することが可能である。さらに、リン
グ211以外のデーモンおよびノードの構成も使用可能
であり、ノード内のテーブルの一貫性を保持するために
他のプロトコルを使用することも可能である。
【0104】
【発明の効果】 [結論]以上の詳細な説明は、当業者に対して、特殊な
フォールトトレラントハードウェアやフォールトトレラ
ントオペレーティングシステムを必要とせずに、通常の
ユーザプロセスおよびフォールトトレラント関数のライ
ブラリを使用して実現されるデーモンに基づいたフォー
ルトトレラントコンピューティングシステムをいかにし
て構築することができるかを開示するものである。ここ
で開示した技術は、特殊ハードウェアやオペレーティン
グシステムを含むものよりも安価であるのみならず、従
来は知られていない一定の柔軟性をアプリケーションプ
ログラマに与えるものである。さらに、複数のノードを
持つシステムで使用した場合、これらの技術は、特殊ハ
ードウェアやオペレーティングシステムによって提供さ
れるのとしばしば同程度であるフォールトトレランスを
提供する。
【図面の簡単な説明】
【図1】単一のノードにおける本発明のソフトウェアフ
ォールトトレランスのシステムの概略図である。
【図2】複数のノードにおける本発明のソフトウェアフ
ォールトトレランスのシステムの概略図である。
【図3】本発明の好ましい実施例の図である。
【図4】好ましい実施例で使用されるテーブルの図であ
る。
【図5】好ましい実施例で使用されるテーブルの図であ
る。
【符号の説明】
101 フォールトトレラントコンピューティングシス
テム 103 フォールトトレラントプロセス 104 watchdデーモン 105 揮発性メモリ(VMEM) 107 コード 109 データ 111 フォールトトレラントアプリケーション(FT
A)コード 113 libftコード 115 クリティカルメモリ(CR MEM) 123 持続性メモリ 125 クリティカルメモリコピー(CR MEMC) 127 ログファイル 139 フォールトトレラントプロセス(FTP)リス
ト 141 フォールトトレラントグループ(FTPグルー
プ)リスト 201 分散システム 203 ノード 205 ノードリスト(NL) 207 状態テーブル 211 適応リング 301 モニタ(MON) 303 状態サーバ(STATE SRVR) 315 プロセス状態コピー 317 ローカルフォールトトレラントプロセス(LF
TPS) 401 ノードリストエントリ 403 ノード名 405 フォールトトレラントプロセスエントリ(FT
PE) 407 フォールトトレラントプロセス名 409 ポート番号 411 基本ノード名 413 クリティカルファイル 415 タイムリミット 417 フォールトトレラントグループエントリ 419 グループ番号 421 フォールトトレラントプロセス名
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 平1−197859(JP,A) 電子情報通信学会技術研究報告 社団 法人電子情報通信学会 1990/11/21 Vol.90 No.326 p.25−30 (58)調査した分野(Int.Cl.7,DB名) G06F 11/14 - 11/20 G06F 11/30 - 11/34 G06F 15/16 - 15/177

Claims (27)

    (57)【特許請求の範囲】
  1. 【請求項1】 コンピュータシステムで使用されるフォ
    ールトトレラントコンピューティング装置において、該
    装置は、 前記コンピュータシステム内のプロセッサ上で実行中の
    プロセスの状態を観測し、該プロセスが実行継続不能で
    あると観測されるときに該プロセスを再起動するモニタ
    と、 複数のフォールトトレラントライブラリルーチンとを有
    し、 前記複数のフォールトトレラントライブラリルーチンの
    うちの1つ以上の特定のフォールトトレラントライブラ
    リルーチンは、前記プロセスから呼出し可能であり、該
    呼出しにより、複数のフォールトトレランスの程度のう
    ちの対応する1つの程度のフォールトトレランスが前記
    プロセスに与えられ、前記モニタによる観測が該特定の
    フォールトトレラントライブラリルーチンに従って実行
    されることを特徴とするフォールトトレラントコンピュ
    ーティング装置。
  2. 【請求項2】 前記特定のフォールトトレラントライブ
    ラリルーチンの実行は、前記プロセスによる該ルーチン
    の呼出しに応じて行われることを特徴とする請求項1に
    記載の装置。
  3. 【請求項3】 前記特定のフォールトトレラントライブ
    ラリルーチンは、前記プロセスによって使用されるクリ
    ティカルメモリを定義し保存するルーチンと、前記プロ
    セスが再起動されるときに該クリティカルメモリを復元
    するルーチンとを含むことを特徴とする請求項1に記載
    の装置。
  4. 【請求項4】 前記特定のフォールトトレラントライブ
    ラリルーチンは、前記プロセスが再起動されるときに反
    復される前記プロセスの読出し動作のログファイルを定
    義し維持するルーチンを含むことを特徴とする請求項1
    に記載の装置。
  5. 【請求項5】 前記特定のフォールトトレラントライブ
    ラリルーチンは、前記プロセスを前記モニタに登録する
    ルーチンを含むことを特徴とする請求項1に記載の装
    置。
  6. 【請求項6】 前記特定のフォールトトレラントライブ
    ラリルーチンは、実行時に前記モニタにシグナルを送る
    ルーチンを含み、 前記モニタは、所定時間内に前記シグナルを受信しない
    場合、前記プロセスは継続不能であると判定することを
    特徴とする請求項1に記載の装置。
  7. 【請求項7】 前記シグナルを送るルーチンは、さら
    に、次のシグナルに対する所定時間を示す値を送ること
    を特徴とする請求項6に記載の装置。
  8. 【請求項8】 ユーザレベルプロセスを実行する少なく
    とも1つのプロセッサと、 前記少なくとも1つのプロセッサ上で実行される第1ユ
    ーザレベルプロセスと、 前記少なくとも1つのプロセッサ上で実行されるユーザ
    レベルデーモンプロセスと、 前記第1ユーザレベルプロセスを指定する登録メッセー
    ジを前記ユーザレベルデーモンプロセスに送る登録メッ
    セージ送信手段とを有する、フォールトトレラントコン
    ピューティングのためのコンピュータシステムにおい
    て、 前記ユーザレベルデーモンプロセスは、前記登録メッセ
    ージに応答して、前記第1ユーザレベルプロセスが実行
    継続不能であるかどうかを判定するために前記第1ユー
    ザレベルプロセスの観測を開始し、前記第1ユーザレベ
    ルプロセスが実行継続不能であると観測されるときに前
    記第1ユーザレベルプロセスを再起動することを特徴と
    する、フォールトトレラントコンピューティングのため
    のコンピュータシステム。
  9. 【請求項9】 前記第1ユーザレベルプロセスからそれ
    ぞれ実行可能な複数のフォールトトレラントライブラリ
    ルーチンをさらに有することを特徴とする請求項8に記
    載のコンピュータシステム。
  10. 【請求項10】 前記複数のフォールトトレラントライ
    ブラリルーチンは、前記第1ユーザレベルプロセスによ
    って使用されるメモリを定義し、保存し、復元するルー
    チンを含むことを特徴とする請求項9に記載のコンピュ
    ータシステム。
  11. 【請求項11】 前記複数のフォールトトレラントライ
    ブラリルーチンは、前記第1ユーザレベルプロセスが再
    起動されるときに反復される前記第1ユーザレベルプロ
    セスの読出し動作のログファイルを定義し維持するルー
    チンを含むことを特徴とする請求項9に記載のコンピュ
    ータシステム。
  12. 【請求項12】 前記登録メッセージ送信手段は、フォ
    ールトトレラントライブラリルーチンを含むことを特徴
    とする請求項9に記載のコンピュータシステム。
  13. 【請求項13】 前記複数のフォールトトレラントライ
    ブラリルーチンは、実行時に前記ユーザレベルデーモン
    プロセスにシグナルを送るルーチンを含み、 前記ユーザレベルデーモンプロセスは、所定時間内に前
    記シグナルを受信しない場合、前記第1ユーザレベルプ
    ロセスは継続不能であると判定することを特徴とする請
    求項9に記載のコンピュータシステム。
  14. 【請求項14】 前記シグナルを送るルーチンは、さら
    に、次のシグナルに対する所定時間を示す値を送ること
    を特徴とする請求項13に記載のコンピュータシステ
    ム。
  15. 【請求項15】 前記コンピュータシステムは、前記第
    1ユーザレベルプロセスが属するユーザレベルプロセス
    グループを指定するフォールトトレラントグループテー
    ブルをさらに有し、 前記ユーザレベルデーモンプロセスは、前記フォールト
    トレラントグループテーブルに従って、前記ユーザレベ
    ルデーモンプロセスが前記第1ユーザレベルプロセスを
    再起動するのと同時に前記フォールトトレラントグルー
    プテーブルで指定される各ユーザレベルプロセスを再起
    動することを特徴とする請求項8に記載のコンピュータ
    システム。
  16. 【請求項16】 前記ユーザレベルデーモンプロセス
    は、 ポーリングを使用して前記第1ユーザレベルプロセスが
    実行継続不能であるかどうかを判定する第1デーモンプ
    ロセスと、 前記第1ユーザレベルプロセスが実行継続不能であると
    前記第1デーモンプロセスが判定したときに前記第1ユ
    ーザレベルプロセスを再起動する第2デーモンプロセス
    とを有することを特徴とする請求項8に記載のコンピュ
    ータシステム。
  17. 【請求項17】 複数のノードを有する、フォールトト
    レラントコンピューティングのための分散コンピュータ
    システムにおいて、各ノードは、 ユーザレベルプロセスを実行する少なくとも1つのプロ
    セッサと、 前記少なくとも1つのプロセッサ上で実行されるユーザ
    レベルデーモンプロセスと、 ユーザレベルプロセスを指定する登録メッセージを前記
    ユーザレベルデーモンプロセスに送る登録メッセージ送
    信手段とを有し、 前記ユーザレベルデーモンプロセスは、前記登録メッセ
    ージに応答して、指定されたユーザレベルプロセスが実
    行継続不能であるかどうかを判定するために前記指定さ
    れたユーザレベルプロセスの観測を開始し、前記指定さ
    れたユーザレベルプロセスが実行継続不能であると観測
    されるときに前記指定されたユーザレベルプロセスを再
    起動し、 前記複数のノードのうちの第1ノードで実行される第1
    ユーザレベルデーモンプロセスは、さらに、前記複数の
    ノードのうちの第2ノードが動作中であるかどうかを観
    測することを特徴とする、フォールトトレラントコンピ
    ューティングのための分散コンピュータシステム。
  18. 【請求項18】 前記第2ノードは、第1ユーザレベル
    プロセスを実行し、 前記第1ユーザレベルデーモンプロセスは、前記第2ノ
    ードの障害に応答して、前記第1ノード上で、前記第1
    ユーザレベルプロセスと等価なプロセスの実行を開始す
    ることを特徴とする請求項17に記載の分散コンピュー
    タシステム。
  19. 【請求項19】 前記第2ノード上で実行される第2ユ
    ーザレベルデーモンプロセスが、前記第1ユーザレベル
    プロセスから前記第1ユーザレベルデーモンプロセスに
    プロセス状態情報をコピーし、 前記第1ユーザレベルデーモンプロセスは、前記第1ユ
    ーザレベルプロセスと等価なプロセスの実行を開始する
    際に前記プロセス状態情報を使用することを特徴とする
    請求項18に記載の分散コンピュータシステム。
  20. 【請求項20】 各ノードは、 実行時にユーザレベルプロセス状態情報を保存する第1
    フォールトトレラントライブラリルーチンを含む、前記
    ユーザレベルプロセスにより実行可能なコンピュータプ
    ログラムコードをさらに有することを特徴とする請求項
    19に記載の分散コンピュータシステム。
  21. 【請求項21】 各ノード内のユーザレベルデーモンプ
    ロセスは、 第1ユーザレベルプロセスが対応する基本ノード上で実
    行され、該第1ユーザレベルプロセスと等価な第2ユー
    ザレベルプロセスが該基本ノード以外のノード上で実行
    されていると、前記ユーザレベルデーモンプロセスが判
    定した場合に、該第2ユーザレベルプロセスを削除する
    手段をさらに有することを特徴とする請求項17に記載
    の分散コンピュータシステム。
  22. 【請求項22】 各ノードが1つのユーザレベルデーモ
    ンプロセスによって観測されるとともに、各ユーザレベ
    ルデーモンプロセスが1つのノードを観測するように、
    前記複数のノードは設定されていることを特徴とする請
    求項17、18または21に記載の分散コンピュータシ
    ステム。
  23. 【請求項23】 各ユーザレベルデーモンプロセスは、
    該ユーザレベルデーモンプロセスによって観測されるノ
    ードが故障したときに前記設定を維持する手段をさらに
    有することを特徴とする請求項22に記載の分散コンピ
    ュータシステム。
  24. 【請求項24】 ユーザレベルプロセスを実行する少な
    くとも1つのプロセッサを有するフォールトトレラント
    コンピュータシステムの動作方法において、該方法は、 プロセッサ上で実行されているユーザレベルプロセスを
    指定する登録メッセージをユーザレベルデーモンプロセ
    スに送る登録メッセージ送信ステップを有し、 前記ユーザレベルデーモンプロセスは、前記登録メッセ
    ージに応答して、 指定されたユーザレベルプロセスが実行継続不能である
    かどうかを判定するために該指定されたユーザレベルプ
    ロセスをモニタするステップと、 前記指定されたユーザレベルプロセスが実行継続不能で
    ある場合に前記指定されたユーザレベルプロセスを再起
    動するステップとを実行することを特徴とする、フォー
    ルトトレラントコンピュータシステムの動作方法。
  25. 【請求項25】 前記登録メッセージ送信ステップは、
    フォールトトレラントライブラリルーチンを実行するス
    テップを含むことを特徴とする請求項24に記載の方
    法。
  26. 【請求項26】 前記指定されたユーザレベルプロセス
    は、前記ユーザレベルデーモンプロセスにシグナルを送
    るステップを実行し、 前記モニタするステップは、 所定時間内に前記シグナルを受信しない場合、前記指定
    されたユーザレベルプロセスは継続不能であると判定す
    るステップを含むことを特徴とする請求項24に記載の
    方法。
  27. 【請求項27】 前記フォールトトレラントコンピュー
    タシステムは、前記指定されたユーザレベルプロセスが
    属するユーザレベルプロセスグループを指定するフォー
    ルトトレラントグループテーブルをさらに有し、前記ユ
    ーザレベルデーモンプロセスは、前記フォールトトレラ
    ントグループテーブルに従って、 前記ユーザレベルデーモンプロセスが前記指定されたユ
    ーザレベルプロセスを再起動するのと同時に前記フォー
    ルトトレラントグループテーブルで指定される各ユーザ
    レベルプロセスを再起動するステップを実行することを
    特徴とする請求項24に記載の方法。
JP26040093A 1992-09-30 1993-09-27 フォールトトレラントコンピューティング装置 Expired - Fee Related JP3145236B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US95454992A 1992-09-30 1992-09-30
US954549 1992-09-30

Publications (2)

Publication Number Publication Date
JPH06202893A JPH06202893A (ja) 1994-07-22
JP3145236B2 true JP3145236B2 (ja) 2001-03-12

Family

ID=25495593

Family Applications (1)

Application Number Title Priority Date Filing Date
JP26040093A Expired - Fee Related JP3145236B2 (ja) 1992-09-30 1993-09-27 フォールトトレラントコンピューティング装置

Country Status (5)

Country Link
US (1) US5748882A (ja)
EP (1) EP0590866B1 (ja)
JP (1) JP3145236B2 (ja)
CA (1) CA2106280C (ja)
DE (1) DE69330239T2 (ja)

Families Citing this family (131)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2152329C (en) 1994-09-08 1999-02-09 N Dudley Fulton Iii Apparatus and methods for software rejuvenation
IE74214B1 (en) * 1995-02-01 1997-07-16 Darragh Fanning Error prevention in computer systems
JP3448126B2 (ja) * 1995-03-13 2003-09-16 株式会社東芝 情報処理装置、コンピュータネットワーク及び情報処理方法
JPH08286779A (ja) * 1995-04-18 1996-11-01 Fuji Xerox Co Ltd アプリケーション自動再起動装置
FI102220B1 (fi) * 1995-10-30 1998-10-30 Nokia Telecommunications Oy Vikaantumistietojen keräys tietokoneyksikön uudelleenkäynnistyksen osana
JP2730534B2 (ja) * 1995-12-18 1998-03-25 日本電気株式会社 データ通信網端末のデータバックアップ方法とその装置
FR2745100B1 (fr) * 1996-02-19 1998-04-17 France Telecom Systeme informatique a transparence de panne pour les applications utilisateur
US5974414A (en) * 1996-07-03 1999-10-26 Open Port Technology, Inc. System and method for automated received message handling and distribution
US5958062A (en) * 1997-03-19 1999-09-28 Fujitsu Limited Client/server system and computer system
US5875291A (en) * 1997-04-11 1999-02-23 Tandem Computers Incorporated Method and apparatus for checking transactions in a computer system
US5987250A (en) * 1997-08-21 1999-11-16 Hewlett-Packard Company Transparent instrumentation for computer program behavior analysis
US5911060A (en) * 1997-09-26 1999-06-08 Symantec Corporation Computer method and apparatus for unfreezing an apparently frozen application program being executed under control of an operating system
US6009258A (en) * 1997-09-26 1999-12-28 Symantec Corporation Methods and devices for unwinding stack of frozen program and for restarting the program from unwound state
US5974566A (en) * 1997-10-07 1999-10-26 International Business Machines Corporation Method and apparatus for providing persistent fault-tolerant proxy login to a web-based distributed file service
US5926777A (en) * 1997-10-14 1999-07-20 Nematron Corporation Method and apparatus for monitoring computer system service life parameters
US6035416A (en) * 1997-10-15 2000-03-07 International Business Machines Corp. Method and apparatus for interface dual modular redundancy
JP3450177B2 (ja) * 1998-03-20 2003-09-22 富士通株式会社 ネットワーク監視システム及び被監視制御装置
US6304982B1 (en) * 1998-07-14 2001-10-16 Autodesk, Inc. Network distributed automated testing system
US6195760B1 (en) * 1998-07-20 2001-02-27 Lucent Technologies Inc Method and apparatus for providing failure detection and recovery with predetermined degree of replication for distributed applications in a network
US6266781B1 (en) 1998-07-20 2001-07-24 Academia Sinica Method and apparatus for providing failure detection and recovery with predetermined replication style for distributed applications in a network
US8631066B2 (en) 1998-09-10 2014-01-14 Vmware, Inc. Mechanism for providing virtual machines for use by multiple users
DE69907709T2 (de) * 1998-10-09 2004-03-25 Sun Microsystems, Inc., Santa Clara Prozessüberwachung in einem rechnersystem
US7516453B1 (en) * 1998-10-26 2009-04-07 Vmware, Inc. Binary translator with precise exception synchronization mechanism
US6393583B1 (en) 1998-10-29 2002-05-21 International Business Machines Corporation Method of performing checkpoint/restart of a parallel program
US6401216B1 (en) * 1998-10-29 2002-06-04 International Business Machines Corporation System of performing checkpoint/restart of a parallel program
FR2786285B1 (fr) * 1998-11-24 2001-02-02 Secap Dispositif et procede de protection contre le debordement de pile dans une memoire et machine a affranchir les mettant en oeuvre
US6718376B1 (en) * 1998-12-15 2004-04-06 Cisco Technology, Inc. Managing recovery of service components and notification of service errors and failures
US7370102B1 (en) * 1998-12-15 2008-05-06 Cisco Technology, Inc. Managing recovery of service components and notification of service errors and failures
US6871224B1 (en) 1999-01-04 2005-03-22 Cisco Technology, Inc. Facility to transmit network management data to an umbrella management system
US6654801B2 (en) 1999-01-04 2003-11-25 Cisco Technology, Inc. Remote system administration and seamless service integration of a data communication network management system
US6708224B1 (en) * 1999-01-19 2004-03-16 Netiq Corporation Methods, systems and computer program products for coordination of operations for interrelated tasks
US6453430B1 (en) 1999-05-06 2002-09-17 Cisco Technology, Inc. Apparatus and methods for controlling restart conditions of a faulted process
US6401215B1 (en) * 1999-06-03 2002-06-04 International Business Machines Corporation Resynchronization of mirrored logical data volumes subsequent to a failure in data processor storage systems with access to physical volume from multi-initiators at a plurality of nodes
US6718486B1 (en) * 2000-01-26 2004-04-06 David E. Lovejoy Fault monitor for restarting failed instances of the fault monitor
US6594774B1 (en) * 1999-09-07 2003-07-15 Microsoft Corporation Method and apparatus for monitoring computer system objects to improve system reliability
US6389370B1 (en) * 1999-09-14 2002-05-14 Hewlett-Packard Company System and method for determining which objects in a set of objects should be processed
US7010590B1 (en) * 1999-09-15 2006-03-07 Datawire Communications Networks, Inc. System and method for secure transactions over a network
US6480809B1 (en) * 1999-09-23 2002-11-12 Intel Corporation Computer system monitoring
US6735716B1 (en) * 1999-09-27 2004-05-11 Cisco Technology, Inc. Computerized diagnostics and failure recovery
KR100644572B1 (ko) * 1999-10-02 2006-11-13 삼성전자주식회사 디렉토리 서버에서 단말기 동작 판단장치 및 방법
US6891837B1 (en) * 1999-10-05 2005-05-10 Veritas Operating Corporation Virtual endpoint
US6421688B1 (en) 1999-10-20 2002-07-16 Parallel Computers Technology, Inc. Method and apparatus for database fault tolerance with instant transaction replication using off-the-shelf database servers and low bandwidth networks
US7039680B2 (en) 1999-10-20 2006-05-02 International Business Machines Corporation Apparatus and method for timeout-free waiting for an ordered message in a clustered computing environment
US6990668B1 (en) * 1999-10-20 2006-01-24 International Business Machines Corporation Apparatus and method for passively monitoring liveness of jobs in a clustered computing environment
US6505298B1 (en) * 1999-10-25 2003-01-07 International Business Machines Corporation System using an OS inaccessible interrupt handler to reset the OS when a device driver failed to set a register bit indicating OS hang condition
US6662310B2 (en) 1999-11-10 2003-12-09 Symantec Corporation Methods for automatically locating url-containing or other data-containing windows in frozen browser or other application program, saving contents, and relaunching application program with link to saved data
US6631480B2 (en) 1999-11-10 2003-10-07 Symantec Corporation Methods and systems for protecting data from potential corruption by a crashed computer program
US6630946B2 (en) 1999-11-10 2003-10-07 Symantec Corporation Methods for automatically locating data-containing windows in frozen applications program and saving contents
US6567937B1 (en) * 1999-11-17 2003-05-20 Isengard Corporation Technique for remote state notification and software fault recovery
US6594784B1 (en) * 1999-11-17 2003-07-15 International Business Machines Corporation Method and system for transparent time-based selective software rejuvenation
US6629266B1 (en) 1999-11-17 2003-09-30 International Business Machines Corporation Method and system for transparent symptom-based selective software rejuvenation
GB2359386B (en) 2000-02-16 2004-08-04 Data Connection Ltd Replicated control block handles for fault-tolerant computer systems
GB2359384B (en) 2000-02-16 2004-06-16 Data Connection Ltd Automatic reconnection of partner software processes in a fault-tolerant computer system
US7814309B1 (en) * 2000-02-29 2010-10-12 Cisco Technology, Inc. Method for checkpointing and reconstructing separated but interrelated data
US7225244B2 (en) * 2000-05-20 2007-05-29 Ciena Corporation Common command interface
US6715097B1 (en) 2000-05-20 2004-03-30 Equipe Communications Corporation Hierarchical fault management in computer systems
US6654903B1 (en) 2000-05-20 2003-11-25 Equipe Communications Corporation Vertical fault isolation in a computer system
US6983362B1 (en) 2000-05-20 2006-01-03 Ciena Corporation Configurable fault recovery policy for a computer system
US6691250B1 (en) 2000-06-29 2004-02-10 Cisco Technology, Inc. Fault handling process for enabling recovery, diagnosis, and self-testing of computer systems
US6687849B1 (en) 2000-06-30 2004-02-03 Cisco Technology, Inc. Method and apparatus for implementing fault-tolerant processing without duplicating working process
US6718538B1 (en) * 2000-08-31 2004-04-06 Sun Microsystems, Inc. Method and apparatus for hybrid checkpointing
US7587499B1 (en) 2000-09-14 2009-09-08 Joshua Haghpassand Web-based security and filtering system with proxy chaining
US8972590B2 (en) * 2000-09-14 2015-03-03 Kirsten Aldrich Highly accurate security and filtering software
DE10101754C2 (de) 2001-01-16 2003-02-20 Siemens Ag Verfahren zur automatischen Wiederherstellung von Daten in einer Datenbasis
US7225361B2 (en) * 2001-02-28 2007-05-29 Wily Technology, Inc. Detecting a stalled routine
US6952766B2 (en) * 2001-03-15 2005-10-04 International Business Machines Corporation Automated node restart in clustered computer system
US6810495B2 (en) 2001-03-30 2004-10-26 International Business Machines Corporation Method and system for software rejuvenation via flexible resource exhaustion prediction
US6918051B2 (en) * 2001-04-06 2005-07-12 International Business Machines Corporation Node shutdown in clustered computer system
US6922796B1 (en) 2001-04-11 2005-07-26 Sun Microsystems, Inc. Method and apparatus for performing failure recovery in a Java platform
US6928585B2 (en) * 2001-05-24 2005-08-09 International Business Machines Corporation Method for mutual computer process monitoring and restart
US7000100B2 (en) * 2001-05-31 2006-02-14 Hewlett-Packard Development Company, L.P. Application-level software watchdog timer
US8423674B2 (en) * 2001-06-02 2013-04-16 Ericsson Ab Method and apparatus for process sync restart
US7702791B2 (en) * 2001-07-16 2010-04-20 Bea Systems, Inc. Hardware load-balancing apparatus for session replication
US7409420B2 (en) * 2001-07-16 2008-08-05 Bea Systems, Inc. Method and apparatus for session replication and failover
US6925582B2 (en) * 2001-08-01 2005-08-02 International Business Machines Corporation Forwarding of diagnostic messages in a group
US7003775B2 (en) * 2001-08-17 2006-02-21 Hewlett-Packard Development Company, L.P. Hardware implementation of an application-level watchdog timer
US20030065970A1 (en) * 2001-09-28 2003-04-03 Kadam Akshay R. System and method for creating fault tolerant applications
US7051331B2 (en) * 2002-01-02 2006-05-23 International Business Machines Corporation Methods and apparatus for monitoring a lower priority process by a higher priority process
AU2003205209A1 (en) * 2002-01-18 2003-09-02 Idetic, Inc. Method and computer system for protecting software components of an application against faults
US7168008B2 (en) * 2002-01-18 2007-01-23 Mobitv, Inc. Method and system for isolating and protecting software components
US7403996B2 (en) * 2002-02-21 2008-07-22 Bea Systems, Inc. Systems and methods for migratable services
US7124320B1 (en) * 2002-08-06 2006-10-17 Novell, Inc. Cluster failover via distributed configuration repository
JP3749208B2 (ja) 2002-08-14 2006-02-22 株式会社東芝 プロセスマイグレーション方法、計算機
US7096383B2 (en) * 2002-08-29 2006-08-22 Cosine Communications, Inc. System and method for virtual router failover in a network routing system
US7089450B2 (en) * 2003-04-24 2006-08-08 International Business Machines Corporation Apparatus and method for process recovery in an embedded processor system
US7287179B2 (en) * 2003-05-15 2007-10-23 International Business Machines Corporation Autonomic failover of grid-based services
KR100435985B1 (ko) * 2004-02-25 2004-06-12 엔에이치엔(주) 투표를 활용한 무정지 서비스 시스템 및 그 시스템에서의정보 갱신 및 제공 방법
US8190714B2 (en) * 2004-04-15 2012-05-29 Raytheon Company System and method for computer cluster virtualization using dynamic boot images and virtual disk
US7711977B2 (en) * 2004-04-15 2010-05-04 Raytheon Company System and method for detecting and managing HPC node failure
US8336040B2 (en) 2004-04-15 2012-12-18 Raytheon Company System and method for topology-aware job scheduling and backfilling in an HPC environment
US9178784B2 (en) 2004-04-15 2015-11-03 Raytheon Company System and method for cluster management based on HPC architecture
US8335909B2 (en) 2004-04-15 2012-12-18 Raytheon Company Coupling processors to each other for high performance computing (HPC)
US20050235055A1 (en) * 2004-04-15 2005-10-20 Raytheon Company Graphical user interface for managing HPC clusters
US7386761B2 (en) * 2004-04-16 2008-06-10 International Business Machines Corporation Diagnostic repair system and method for computing systems
US8140653B1 (en) * 2004-06-25 2012-03-20 Avaya Inc. Management of a multi-process system
FR2872605B1 (fr) * 2004-06-30 2006-10-06 Meiosys Sa Procede de gestion d'un processus logiciel, procede et systeme de redistribution ou de continuite de fonctionnement dans une architecture multi-ordinateurs
US7360123B1 (en) * 2004-06-30 2008-04-15 Symantec Operating Corporation Conveying causal relationships between at least three dimensions of recovery management
WO2006026402A2 (en) 2004-08-26 2006-03-09 Availigent, Inc. Method and system for providing high availability to computer applications
US7925932B1 (en) * 2004-09-20 2011-04-12 Symantec Operating Corporation Method and appartus for detecting an application process failure
DE102004050350B4 (de) * 2004-10-15 2006-11-23 Siemens Ag Verfahren und Vorrichtung zur Redundanzkontrolle von elektrischen Einrichtungen
US8244882B2 (en) * 2004-11-17 2012-08-14 Raytheon Company On-demand instantiation in a high-performance computing (HPC) system
US7475274B2 (en) * 2004-11-17 2009-01-06 Raytheon Company Fault tolerance and recovery in a high-performance computing (HPC) system
US7433931B2 (en) * 2004-11-17 2008-10-07 Raytheon Company Scheduling in a high-performance computing (HPC) system
US7549087B2 (en) * 2005-03-29 2009-06-16 Microsoft Corporation User interface panel for hung applications
US7613957B2 (en) * 2005-04-06 2009-11-03 Microsoft Corporation Visual indication for hung applications
US8078919B2 (en) * 2005-06-14 2011-12-13 Hitachi Global Storage Technologies Netherlands B.V. Method, apparatus and program storage device for managing multiple step processes triggered by a signal
WO2007064781A2 (en) * 2005-11-30 2007-06-07 Kelsey-Hayes Company Microprocessor memory management
US7574591B2 (en) * 2006-01-12 2009-08-11 Microsoft Corporation Capturing and restoring application state after unexpected application shutdown
US7716461B2 (en) * 2006-01-12 2010-05-11 Microsoft Corporation Capturing and restoring application state after unexpected application shutdown
JP2007265137A (ja) * 2006-03-29 2007-10-11 Oki Electric Ind Co Ltd マルチタスク処理方法及びマルチタスク処理装置
US7657787B2 (en) * 2006-04-11 2010-02-02 Hewlett-Packard Development Company, L.P. Method of restoring communication state of process
WO2008018969A1 (en) * 2006-08-04 2008-02-14 Parallel Computers Technology, Inc. Apparatus and method of optimizing database clustering with zero transaction loss
US9384159B2 (en) * 2007-05-24 2016-07-05 International Business Machines Corporation Creating a checkpoint for a software partition in an asynchronous input/output environment
US7934129B2 (en) * 2008-09-05 2011-04-26 Microsoft Corporation Network hang recovery
US7996722B2 (en) * 2009-01-02 2011-08-09 International Business Machines Corporation Method for debugging a hang condition in a process without affecting the process state
US8352788B2 (en) * 2009-07-20 2013-01-08 International Business Machines Corporation Predictive monitoring with wavelet analysis
US8566634B2 (en) * 2009-12-18 2013-10-22 Fujitsu Limited Method and system for masking defects within a network
US10191796B1 (en) * 2011-01-31 2019-01-29 Open Invention Network, Llc System and method for statistical application-agnostic fault detection in environments with data trend
JP5761331B2 (ja) * 2011-03-22 2015-08-12 富士通株式会社 入出力制御装置,情報処理システム,及びログ採取プログラム
US20130246363A1 (en) * 2012-03-15 2013-09-19 Ellen L. Sorenson Idle point auditing for databases
US8843930B2 (en) * 2012-07-10 2014-09-23 Sap Ag Thread scheduling and control framework
US9390034B1 (en) 2013-06-27 2016-07-12 Emc Corporation Unified SCSI target management for performing a delayed shutdown of a service daemon in a deduplication appliance
US9378160B1 (en) 2013-06-27 2016-06-28 Emc Corporation Unified SCSI target management for shutting down and de-configuring a service daemon in a deduplication appliance
US9384151B1 (en) * 2013-06-27 2016-07-05 Emc Corporation Unified SCSI target management for managing a crashed service daemon in a deduplication appliance
US9378180B1 (en) 2013-06-27 2016-06-28 Emc Corporation Unified SCSI target management for starting and configuring a service daemon in a deduplication appliance
US9910697B2 (en) * 2015-10-13 2018-03-06 Palantir Technologies Inc. Fault-tolerant and highly-available configuration of distributed services
CN106445721B (zh) * 2016-10-11 2019-07-12 Oppo广东移动通信有限公司 看门狗容错处理的方法及移动终端
US11153317B2 (en) 2017-10-30 2021-10-19 Dexcom, Inc. Diabetes management partner interface for wireless communication of analyte data
CN109634769B (zh) * 2018-12-13 2021-11-09 郑州云海信息技术有限公司 一种数据存储中的容错处理方法、装置、设备及存储介质
CN111124678A (zh) * 2019-12-18 2020-05-08 青岛海尔科技有限公司 内存调度处理方法及装置
JP2022131846A (ja) * 2021-02-26 2022-09-07 ミネベアミツミ株式会社 モータ

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB1434186A (en) * 1972-04-26 1976-05-05 Gen Electric Co Ltd Multiprocessor computer systems
US4539655A (en) * 1982-03-16 1985-09-03 Phoenix Digital Corporation Microcomputer based distributed control network
US4635258A (en) * 1984-10-22 1987-01-06 Westinghouse Electric Corp. System for detecting a program execution fault
US4989133A (en) * 1984-11-30 1991-01-29 Inmos Limited System for executing, scheduling, and selectively linking time dependent processes based upon scheduling time thereof
US4852092A (en) * 1986-08-18 1989-07-25 Nec Corporation Error recovery system of a multiprocessor system for recovering an error in a processor by making the processor into a checking condition after completion of microprogram restart from a checkpoint
US4819159A (en) * 1986-08-29 1989-04-04 Tolerant Systems, Inc. Distributed multiprocess transaction processing system and method
US5003466A (en) * 1987-02-06 1991-03-26 At&T Bell Laboratories Multiprocessing method and arrangement
US5109329A (en) * 1987-02-06 1992-04-28 At&T Bell Laboratories Multiprocessing method and arrangement
US4816989A (en) * 1987-04-15 1989-03-28 Allied-Signal Inc. Synchronizer for a fault tolerant multiple node processing system
US4868818A (en) * 1987-10-29 1989-09-19 The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration Fault tolerant hypercube computer system architecture
JPH0642215B2 (ja) * 1988-01-28 1994-06-01 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン 分散式監視サブシステム
US5050070A (en) * 1988-02-29 1991-09-17 Convex Computer Corporation Multi-processor computer system having self-allocating processors
US4979105A (en) * 1988-07-19 1990-12-18 International Business Machines Method and apparatus for automatic recovery from excessive spin loops in an N-way multiprocessing system
DE69031233T2 (de) * 1989-02-24 1997-12-04 At & T Corp Adaptive Arbeitsfolgeplanung für Mehrfachverarbeitungssysteme
US5257369A (en) * 1990-10-22 1993-10-26 Skeen Marion D Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes
US5295258A (en) * 1989-12-22 1994-03-15 Tandem Computers Incorporated Fault-tolerant computer system with online recovery and reintegration of redundant components
JP2752764B2 (ja) * 1990-03-08 1998-05-18 日本電気株式会社 障害処理方式
US5363502A (en) * 1990-06-08 1994-11-08 Hitachi, Ltd. Hot stand-by method and computer system for implementing hot stand-by method
DE69026379T2 (de) * 1990-08-07 1996-08-29 Bull Hn Information Syst Nachrichtenorientierte Fehlerbeseitigungsverfahren
US5157663A (en) * 1990-09-24 1992-10-20 Novell, Inc. Fault tolerant computer system
JP3189903B2 (ja) * 1991-06-03 2001-07-16 富士通株式会社 ケーパビリティの退避・復元機構を持つ装置
JPH05128080A (ja) * 1991-10-14 1993-05-25 Mitsubishi Electric Corp 情報処理装置
US5363503A (en) * 1992-01-22 1994-11-08 Unisys Corporation Fault tolerant computer system with provision for handling external events

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
電子情報通信学会技術研究報告 社団法人電子情報通信学会 1990/11/21 Vol.90 No.326 p.25−30

Also Published As

Publication number Publication date
EP0590866B1 (en) 2001-05-23
DE69330239T2 (de) 2001-11-29
EP0590866A2 (en) 1994-04-06
JPH06202893A (ja) 1994-07-22
CA2106280C (en) 2000-01-18
US5748882A (en) 1998-05-05
EP0590866A3 (en) 1997-01-22
CA2106280A1 (en) 1994-03-31
DE69330239D1 (de) 2001-06-28

Similar Documents

Publication Publication Date Title
JP3145236B2 (ja) フォールトトレラントコンピューティング装置
US6014669A (en) Highly-available distributed cluster configuration database
US6195760B1 (en) Method and apparatus for providing failure detection and recovery with predetermined degree of replication for distributed applications in a network
Richard et al. Using logging and asynchronous checkpointing to implement recoverable distributed shared memory
JP3675802B2 (ja) 計算の状態を再構成する方法ならびにシステム
US6266781B1 (en) Method and apparatus for providing failure detection and recovery with predetermined replication style for distributed applications in a network
EP1024430B1 (en) Fault-tolerant Java virtual machine
US6105148A (en) Persistent state checkpoint and restoration systems
JP4570312B2 (ja) コンピュータシステムにおいてボリュームスナップショット依存関係を提供する方法および装置
US6332200B1 (en) Capturing and identifying a complete and consistent set of checkpoint files
US6401216B1 (en) System of performing checkpoint/restart of a parallel program
US7472129B2 (en) Lossless recovery for computer systems with map assisted state transfer
US6393583B1 (en) Method of performing checkpoint/restart of a parallel program
US6338147B1 (en) Program products for performing checkpoint/restart of a parallel program
EP0629950A1 (en) File backup file system
JPH02228744A (ja) データ処理システム
EP1001343B1 (en) Highly available asynchronous I/O for clustered computer systems
EP0701209B1 (en) Apparatus and method for software rejuvenation
Ng The design and implementation of a reliable distributed operating system-ROSE
Maier Fault tolerance lessons applied to parallel computing
WO1997000476A1 (en) Persistent state checkpoint and restoration systems
Sens et al. The star fault manager for distributed operating environments. design, implementation and performance
Weiler et al. Speed Log: A Generic Log Service Supporting Efficient Node-Crash Recovery
Tripathi et al. Configuration management in the Nexus distributed operating system
Duska Enforcing crash failure semantics in distributed systems with fine-grained object mobility

Legal Events

Date Code Title Description
R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

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

Free format text: PAYMENT UNTIL: 20080105

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20090105

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees