(57)【要約】【課題】  他のプロセスの干渉を受けずに、新たな複製プロセスを作成することのできる複製管理システムを提供する。【解決手段】  ネットワーク２００を介して接続された、それぞれが１つ以上の資源を備える複数のノード１００−１〜１００−４を有する。各ノード１００−１〜１００−４のそれぞれは、ユーザプログラムの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のノードの少なくとも１つに作成する複製管理部と、他のノードのうち、上記複製プロセスが作成されたノードを除くノードの少なくとも１つに、上記実体プロセスによって取得された資源を予約する資源予約部とを有する。複製管理部は、予約がなされたノードに、上記複製プロセスに代わる新たな複製プロセスを作成する。【選択図】  図１
2005190162.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して接続された、それぞれが１つ以上の資源を備える複数のノードを有し、
前記複数のノードのそれぞれは、
前記複数のノード上で動作するユーザプログラムの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のノードの少なくとも１つに作成する複製管理部と、
前記他のノードのうち、前記複製プロセスが作成されたノードを除くノードの少なくとも１つに、前記実体プロセスによって取得された資源を予約する資源予約部と、を有し、
前記複製管理部が、前記資源予約部により資源の予約がなされたノードに、前記複製プロセスに代わる新たな複製プロセスを作成することを特徴とする複製管理システム。
【請求項２】
各資源予約部は、予約された資源に関する情報を格納した予約管理テーブルを有し、該管理テーブルを参照して、自ノード内の複製管理部に対して、複製プロセスに代わる新たな複製プロセスを作成するのに必要な資源の予約がなされているノードの情報を送信する、請求項１に記載の複製管理システム。
【請求項３】
複製管理部は、自ノード内に保有されている複製プロセスを実体プロセスに昇格させた場合は、昇格前の前記複製プロセスに代わる新たな複製プロセスを作成するのに必要な資源の予約がなされているノードを自ノード内の資源予約部から取得する、請求項２に記載の複製管理システム。
【請求項４】
複数のノードの少なくとも１つは、いずれかのノードに故障が生じると、該故障したノードの識別子を含むノード故障情報を全ノードに通知する故障検出部をさらに有し、
複製管理部は、ユーザプログラム別に、当該ユーザプログラムの実体プロセスの識別子およびその保有先ノードの識別子と、当該ユーザプログラムの複製プロセスの識別子およびその保有先ノードからなる複製先リストとを含む情報が格納された複製管理テーブルを有し、該複製管理テーブルと前記故障検出部からのノード故障情報とに基づいて、前記故障したノード内に前記実体プロセスおよび複製プロセスのいずれかのプロセスが保有されているか否かを判断する、請求項３に記載の複製管理システム。
【請求項５】
複製管理部は、故障したノード内に実体プロセスが保有されていると判断した場合は、複製管理テーブルの複製先リストの所定の位置に格納されている複製プロセスが自ノード内に保有されているか否かを判断し、保有されている場合にのみ、その複製プロセスを実体プロセスに昇格させ、該昇格させた実体プロセスの複製先となるノードの情報を自ノード内の資源予約部から取得する、請求項４に記載の複製管理システム。
【請求項６】
複製管理部は、故障したノード内に複製プロセスが保有されていると判断した場合は、その複製プロセスを複製管理テーブルの複製先リストから削除するとともに、その複製プロセスの実体プロセスが自ノード内に保有されているか否かを判断し、保有されている場合にのみ、その実体プロセスの複製先となるノードの情報を自ノード内の資源予約部から取得する、請求項４に記載の複製管理システム。
【請求項７】
複数のノードの少なくとも１つは、ユーザプログラムのプロセスに故障が生じると、該故障したプロセスの識別子を含むプログラム故障情報を全ノードに通知する故障検出部をさらに有し、
複製管理部は、前記ユーザプログラム別に、当該ユーザプログラムの実体プロセスの識別子およびその保有先ノードの識別子と、当該ユーザプログラムの複製プロセスの識別子およびその保有先ノードからなる複製先リストとを含む情報が格納された複製管理テーブルを有し、前記故障検出部からのプログラム故障情報に基づいて故障した前記プロセスが前記実体プロセスと前記複製プロセスのいずれであるかを判断し、前記実体プロセスと判断した場合は、前記ユーザプログラムに対応するエントリが前記複製管理テーブルに格納されているか否かを調べ、格納されている場合は、該当するエントリの複製先リストの所定の位置に格納されている複製プロセスが自ノード内に保有されているか否かを判断し、保有されている場合にのみ、その複製プロセスを実体プロセスに昇格させ、前記複製プロセスと判断した場合は、前記複製管理テーブルから対応する複製プロセスの情報を削除する、請求項３に記載の複製管理システム。
【請求項８】
資源予約部は、他の複数のノードの資源予約部からの同一資源の予約を許可するとともに、該許可した資源が、前記他の複数のノードのいずれかによって自ノード上に作成された複製プロセスによって使用されると、前記許可した資源を共有する残りのノードの予約を取り消す、請求項１から７のいずれか１項に記載の複製管理システム。
【請求項９】
複製管理部は、同一ノード内に、同一資源を保有する、複数の異なるユーザプログラムの複製プロセスを作成するとともに、該複数の複製プロセスの一つが実体プロセスに昇格すると、他の複製プロセスを削除する、請求項１から７のいずれか１項に記載の複製管理システム。
【請求項１０】
ネットワークを介して接続された、それぞれが１つ以上の資源を備える複数のノードを有し、
前記複数のノードのそれぞれは、
前記複数のノード上で動作する複数のユーザプログラムのいずれかの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のノードの少なくとも１つに作成する複製管理部を有し、
前記複製管理部が、同一ノード内に、同一資源を保有する、前記複数のユーザプログラムの複製プロセスを作成するとともに、該複製プロセスの一つが実体プロセスに昇格すると、他の複製プロセスを削除することを特徴とする複製管理システム。
【請求項１１】
ネットワークに接続された外部記憶装置をさらに有し、
複製管理部は、自ノードに存在する実体プロセスのメモリ領域の一部を前記外部記憶装置内に書き出すとともに、他のノード上の、対応する複製プロセスの状態を前記実体プロセスの状態に更新する際に、前記書き出されたメモリ領域を除く状態で更新させ、
前記更新がなされた他のノード上の複製管理部は、自ノード内の前記対応する複製プロセスを実体プロセスに昇格させる場合は、該複製プロセスの対応する領域に、前記外部記憶装置に格納したメモリ領域の一部を書き込む、請求項１から１０のいずれか１項に記載の複製管理システム。
【請求項１２】
それぞれが１つ以上の資源を備える複数のコンピュータがネットワークを介して接続されたシステムにおいて行われる複製管理方法であって、
前記複数のコンピュータ上で動作するユーザプログラムの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のコンピュータの少なくとも１つに作成する第１のステップと、
前記他のコンピュータのうち、前記複製プロセスが作成されたコンピュータを除くコンピュータの少なくとも１つに、前記実体プロセスによって取得された資源を予約する第２のステップと、
前記資源の予約がなされたコンピュータに、前記複製プロセスに代わる新たな複製プロセスを作成する第３のステップと、を含む複製管理方法。
【請求項１３】
第３のステップは、自コンピュータ内に格納されている、第２のステップで予約された資源に関する情報を格納した予約管理テーブルを参照して、複製プロセスに代わる新たな複製プロセスを作成するのに必要な資源の予約がなされている他のコンピュータの情報を取得するステップを含む、請求項１２に記載の複製管理方法。
【請求項１４】
第３のステップは、自コンピュータ内に保有されている複製プロセスを実体プロセスに昇格させた場合に、予約管理テーブルを参照して、昇格前の前記複製プロセスに代わる新たな複製プロセスを作成するのに必要な資源の予約がなされている他のコンピュータの情報を取得するステップを含む、請求項１３に記載の複製管理方法。
【請求項１５】
いずれかのコンピュータに故障が生じると、該故障したコンピュータの識別子を含む故障情報を全コンピュータに通知するステップをさらに含み、
第３のステップは、ユーザプログラム別に、当該ユーザプログラムの実体プロセスの識別子およびその保有先コンピュータの識別子と、当該ユーザプログラムの複製プロセスの識別子およびその保有先コンピュータからなる複製先リストとを含む情報が格納された複製管理テーブルを参照し、前記故障情報に基づいて、前記故障したコンピュータ内に前記実体プロセスおよび複製プロセスのいずれかのプロセスが保有されているか否かを判断するステップを含む、請求項１４に記載の複製管理方法。
【請求項１６】
第３のステップは、故障したコンピュータ内に実体プロセスが保有されていると判断した場合は、複製管理テーブルの複製先リストの所定の位置に格納されている複製プロセスが自コンピュータ内に保有されているか否かを判断し、保有されている場合にのみ、その複製プロセスを実体プロセスに昇格させ、該昇格させた実体プロセスの複製先となるコンピュータの情報を予約管理テーブルから取得するステップを含む、請求項１５に記載の複製管理方法。
【請求項１７】
第３のステップは、故障したコンピュータ内に複製プロセスが保有されていると判断した場合は、その複製プロセスを複製管理テーブルの複製先リストから削除するとともに、その複製プロセスの実体プロセスが自コンピュータ内に保有されているか否かを判断し、保有されている場合にのみ、その実体プロセスの複製先となるコンピュータの情報を予約管理テーブルから取得する、請求項１５に記載の複製管理方法。
【請求項１８】
ユーザプログラムのプロセスに故障が生じると、該故障したプロセスの識別子を含むプログラム故障情報を全コンピュータに通知するステップをさらに含み、
第３のステップは、前記ユーザプログラム別に、当該ユーザプログラムの実体プロセスの識別子およびその保有先コンピュータの識別子と、当該ユーザプログラムの複製プロセスの識別子およびその保有先コンピュータからなる複製先リストとを含む情報が格納された複製管理テーブルを有し、前記故障検出部からのプログラム故障情報に基づいて故障した前記プロセスが前記実体プロセスと前記複製プロセスのいずれであるかを判断し、前記実体プロセスと判断した場合は、前記ユーザプログラムに対応するエントリが前記複製管理テーブルに格納されているか否かを調べ、格納されている場合は、該当するエントリの複製先リストの所定の位置に格納されている複製プロセスが自コンピュータ内に保有されているか否かを判断し、保有されている場合にのみ、その複製プロセスを実体プロセスに昇格させ、前記複製プロセスと判断した場合は、前記複製管理テーブルから対応する複製プロセスの情報を削除するステップを含む、請求項１４に記載の複製管理方法。
【請求項１９】
他の複数のコンピュータからの同一資源の予約を許可するとともに、該許可した資源が、前記他の複数のコンピュータのいずれかによって自コンピュータ上に作成された複製プロセスによって使用されると、前記許可した資源を共有する残りのコンピュータの予約を取り消すステップをさらに含む、請求項１２から１８のいずれか１項に記載の複製管理方法。
【請求項２０】
同一コンピュータ内に、同一資源を保有する、複数の異なるユーザプログラムの複製プロセスを作成するとともに、該複数の複製プロセスの一つが実体プロセスに昇格すると、他の複製プロセスを削除するステップをさらに含む、請求項１２から１８のいずれか１項に記載の複製管理方法。
【請求項２１】
それぞれが１つ以上の資源を備える複数のコンピュータがネットワークを介して接続されたシステムにおいて行われる複製管理方法であって、
前記複数のコンピュータ上で動作する複数のユーザプログラムのいずれかの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のコンピュータの少なくとも１つに作成するステップと、
同一コンピュータ内に、同一資源を保有する、前記複数のユーザプログラムのうちの少なくとも２つの複製プロセスを作成した場合に、該複製プロセスの一つが実体プロセスに昇格すると、他の複製プロセスを削除するステップと、を含む複製管理方法。
【請求項２２】
自コンピュータに存在する実体プロセスのメモリ領域の一部をネットワークに接続された外部記憶装置内に書き出すとともに、他のコンピュータ上の、対応する複製プロセスの状態を前記実体プロセスの状態に更新する際に、前記書き出されたメモリ領域を除く状態で更新させるステップと、
前記更新がなされた他のコンピュータ内の前記対応する複製プロセスを実体プロセスに昇格させる場合は、該複製プロセスの対応する領域に、前記外部記憶装置に格納したメモリ領域の一部を書き込むステップと、をさらに含む、請求項１２から２１のいずれか１項に記載の複製管理方法。
【請求項２３】
ネットワークを介して接続された、それぞれが１つ以上の資源を備える複数のコンピュータのそれぞれに、
前記複数のコンピュータ上で動作するユーザプログラムの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のコンピュータの少なくとも１つに作成する第１の処理と、
前記他のコンピュータのうち、前記複製プロセスが作成されたコンピュータを除くコンピュータの少なくとも１つに、前記実体プロセスによって取得された資源を予約する第２の処理と、
前記資源の予約がなされたコンピュータに、前記複製プロセスに代わる新たな複製プロセスを作成する第３の処理と、を実行させるプログラム。
【請求項２４】
第３の処理は、自コンピュータ内に格納されている、第２の処理で予約された資源に関する情報を格納した予約管理テーブルを参照して、複製プロセスに代わる新たな複製プロセスを作成するのに必要な資源の予約がなされている他のコンピュータの情報を取得する処理を含む、請求項２３に記載のプログラム。
【請求項２５】
第３の処理は、自コンピュータ内に保有されている複製プロセスを実体プロセスに昇格させた場合に、予約管理テーブルを参照して、昇格前の前記複製プロセスに代わる新たな複製プロセスを作成するのに必要な資源の予約がなされている他のコンピュータの情報を取得する処理を含む、請求項２４に記載のプログラム。
【請求項２６】
いずれかのコンピュータに故障が生じると、該故障したコンピュータの識別子を含む故障情報を全コンピュータに通知する処理をさらに含み、
第３の処理は、ユーザプログラム別に、当該ユーザプログラムの実体プロセスの識別子およびその保有先コンピュータの識別子と、当該ユーザプログラムの複製プロセスの識別子およびその保有先コンピュータからなる複製先リストとを含む情報が格納された複製管理テーブルを参照し、前記故障情報に基づいて、前記故障したコンピュータ内に前記実体プロセスおよび複製プロセスのいずれかのプロセスが保有されているか否かを判断する処理を含む、請求項２５に記載のプログラム。
【請求項２７】
第３の処理は、故障したコンピュータ内に実体プロセスが保有されていると判断した場合は、複製管理テーブルの複製先リストの所定の位置に格納されている複製プロセスが自コンピュータ内に保有されているか否かを判断し、保有されている場合にのみ、その複製プロセスを実体プロセスに昇格させ、該昇格させた実体プロセスの複製先となるコンピュータの情報を予約管理テーブルから取得する処理を含む、請求項２６に記載のプログラム。
【請求項２８】
第３の処理は、故障したコンピュータ内に複製プロセスが保有されていると判断した場合は、その複製プロセスを複製管理テーブルの複製先リストから削除するとともに、その複製プロセスの実体プロセスが自コンピュータ内に保有されているか否かを判断し、保有されている場合にのみ、その実体プロセスの複製先となるコンピュータの情報を予約管理テーブルから取得する、請求項２６に記載のプログラム。
【請求項２９】
ユーザプログラムのプロセスに故障が生じると、該故障したプロセスの識別子を含むプログラム故障情報を全コンピュータに通知する処理をさらに含み、
第３の処理は、前記ユーザプログラム別に、当該ユーザプログラムの実体プロセスの識別子およびその保有先コンピュータの識別子と、当該ユーザプログラムの複製プロセスの識別子およびその保有先コンピュータからなる複製先リストとを含む情報が格納された複製管理テーブルを有し、前記故障検出部からのプログラム故障情報に基づいて故障した前記プロセスが前記実体プロセスと前記複製プロセスのいずれであるかを判断し、前記実体プロセスと判断した場合は、前記ユーザプログラムに対応するエントリが前記複製管理テーブルに格納されているか否かを調べ、格納されている場合は、該当するエントリの複製先リストの所定の位置に格納されている複製プロセスが自コンピュータ内に保有されているか否かを判断し、保有されている場合にのみ、その複製プロセスを実体プロセスに昇格させ、前記複製プロセスと判断した場合は、前記複製管理テーブルから対応する複製プロセスの情報を削除する処理を含む、請求項２５に記載のプログラム。
【請求項３０】
他の複数のコンピュータからの同一資源の予約を許可するとともに、該許可した資源が、前記他の複数のコンピュータのいずれかによって自コンピュータ上に作成された複製プロセスによって使用されると、前記許可した資源を共有する残りのコンピュータの予約を取り消す処理をさらに含む、請求項２３から２９のいずれか１項に記載のプログラム。
【請求項３１】
同一コンピュータ内に、同一資源を保有する、複数の異なるユーザプログラムの複製プロセスを作成するとともに、該複数の複製プロセスの一つが実体プロセスに昇格すると、他の複製プロセスを削除する処理をさらに含む、請求項２３から２９のいずれか１項に記載のプログラム。
【請求項３２】
ネットワークを介して接続された、それぞれが１つ以上の資源を備える複数のコンピュータのそれぞれに、
前記複数のコンピュータ上で動作する複数のユーザプログラムのいずれかの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のコンピュータの少なくとも１つに作成する処理と、
同一コンピュータ内に、同一資源を保有する、前記複数のユーザプログラムのうちの少なくとも２つの複製プロセスを作成した場合に、該複製プロセスの一つが実体プロセスに昇格すると、他の複製プロセスを削除する処理と、を実行させるプログラム。
【請求項３３】
自コンピュータに存在する実体プロセスのメモリ領域の一部をネットワークに接続された外部記憶装置内に書き出すとともに、他のコンピュータ上の、対応する複製プロセスの状態を前記実体プロセスの状態に更新する際に、前記書き出されたメモリ領域を除く状態で更新させる処理と、
前記更新がなされた他のコンピュータ内の前記対応する複製プロセスを実体プロセスに昇格させる場合は、該複製プロセスの対応する領域に、前記外部記憶装置に格納したメモリ領域の一部を書き込む処理と、をさらに含む、請求項２３から３２のいずれか１項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複製管理システム、複製管理方法および複製管理プログラムに関し、特にネットワークで結合された分散コンピュータにおけるプロセスの複製を管理する、複製管理システム、複製管理方法および複製管理プログラムに関する。
【背景技術】
【０００２】
複数のコンピュータ（以下、ノードと呼ぶ）がネットワークで結合され一つのシステムとして利用されるようなシステムを分散コンピュータと呼ぶ。分散コンピュータでは、可用性を向上させるため、フェールオーバやレプリケーション、動的負荷分散などの手法が用いられてきた。フェールオーバは、あるサービスがノードの故障などの理由で停止した場合に、そのサービスを別のノードで実行させる技術である。動的負荷分散は、フラッシュピーク（一時的な過負荷状態）に対応するための技術であり、あるサービスに負荷が集中し、サービス不能状態に陥った場合に、待機系のノードでサービスを動作させることにより、サービスの負荷軽減を実現する。レプリケーションは、サービスを提供するプロセス（以下、実体プロセスと呼ぶ）の複製（以下、複製プロセスと呼ぶ）を別のノードに作成しておき、何らかの理由でサービスが停止したときには、複製プロセスが実体プロセスに替わってサービスを提供する技術である。なお、このレプリケーションは複製の方法により、（１）コールド、（２）ウォーム、（３）ホットの3つに分類される。コールドでは、複製プロセスは動作させない。ウォームでは、複製プロセスは動作させるが、同時にサービスを提供しない。ホットでは、複製プロセスも元のプロセスと同様にサービスを提供する。
【０００３】
従来のレプリケーション装置の一例として、特許文献１に記載されているものがある。このレプリケーション装置では、プログラム毎にレプリケーションの方法と複製数を登録し、常に一定数の複製プロセスがシステム内に存在するようにレプリケーションが行われる。複製プロセスが存在するノードの故障などが発生した場合には、別のノードに複製プロセスを作成することにより、複製プロセスの数を一定に保つ。ただし、このレプリケーション装置では、管理の対象は複製プロセスが存在するノードのみとされており、複製プロセスが存在しないノード（将来、複製プロセスが置かれるかもしれないノード）については管理の対象から外されている。
【特許文献１】特開２０００−１０５７５６号公報（第６−１１頁、図１、図２）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
複製プロセスを作成する場合、プロセスＩＤやソケットのポート番号などの資源が元のプロセスと同一でないと、作成した複製プロセスが正しく動作しないことがある。このため、新たに作成しようとしている複製プロセスのプロセスＩＤやポート番号などの資源が、すでに他のプロセスにより利用されている場合には、その複製プロセスの作成に失敗することとなる。このように、従来のレプリケーション装置には、新たに複製プロセスを作成しようとした際に失敗する可能性がある、という問題がある。
【０００５】
本発明の目的は、上記問題を解決し、他のプロセスの干渉を受けずに、新たな複製プロセスを作成することのできる、複製管理システム、複製管理方法および複製管理プログラムを提供することにある。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明の第１の複製管理システムは、ネットワークを介して接続された、それぞれが１つ以上の資源を備える複数のノードを有し、前記複数のノードのそれぞれは、前記複数のノード上で動作するユーザプログラムの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のノードの少なくとも１つに作成する複製管理部と、前記他のノードのうち、前記複製プロセスが作成されたノードを除くノードの少なくとも１つに、前記実体プロセスによって取得された資源を予約する資源予約部と、を有し、前記複製管理部が、前記資源予約部により資源の予約がなされたノードに、前記複製プロセスに代わる新たな複製プロセスを作成することを特徴とする。この構成によれば、新たな複製プロセスは予め資源が予約されているノードに作成されるので、その作製が失敗することはない。
【０００７】
上記の第１の複製管理システムにおいて、資源予約部が、他の複数のノードの資源予約部からの同一資源の予約を許可するとともに、該許可した資源が、前記他の複数のノードのいずれかによって自ノード上で作成された複製プロセスによって使用されると、前記許可した資源を共有する残りのノードの予約を取り消すように構成してもよい。このように構成することで、同一ノードにおける、資源の予約の競合が可能となり、より効率的な資源予約を行うことができる。
【０００８】
また、複製管理部が、同一ノード内に、同一資源を保有する、複数の異なるユーザプログラムの複製プロセスを作成するとともに、該複数の複製プロセスの一つが実体プロセスに昇格すると、他の複製プロセスを削除するように構成してもよい。このように構成することにより、同一ノード内に資源の競合する複数の複製プロセスを作成することが可能となり、より効率的な複製プロセスの作成が可能となる。
【０００９】
さらに、複製管理部が、自ノードに存在する実体プロセスのメモリ領域の一部をネットワークに接続された外部記憶装置内に書き出すとともに、他のノード上の、対応する複製プロセスの状態を前記メモリ領域の一部を書き出された実体プロセスの状態に更新し、前記更新がなされた他のノード上の複製管理部が、自ノード内の前記対応する複製プロセスを実体プロセスに昇格させる場合は、該複製プロセスの対応する領域に、前記外部記憶装置に格納したメモリ領域の一部を書き込むように構成してもよい。この構成によれば、例えば、実体プロセスの使用するメモリ領域のうち、一定時間アクセスされなかったメモリ領域を外部記憶装置に書き出し、複製プロセスでは、その外部記憶装置に書き出されたメモリを開放する、といった動作が可能となる。これにより、システム全体で使用されるメモリの量を削減することが可能となる。
【００１０】
本発明の第２の複製管理システムは、ネットワークを介して接続された、それぞれが１つ以上の資源を備える複数のノードを有し、前記複数のノードのそれぞれは、前記複数のノード上で動作する複数のユーザプログラムのいずれかの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のノードの少なくとも１つに作成する複製管理部を有し、前記複製管理部が、同一ノード内に、同一資源を保有する、前記複数のユーザプログラムのうちの少なくとも２つの複製プロセスを作成するとともに、該複製プロセスの一つが実体プロセスに昇格すると、他の複製プロセスを削除することを特徴とする。この構成によれば、同一ノード内に複数の異なるユーザプログラムの複製プロセスを作成することができるため、従来のように、資源の競合によって複製プロセスの作成が失敗することはない。
【００１１】
上記の場合も、ネットワークに接続された外部記憶装置をさらに有し、複製管理部は、自ノードに存在する実体プロセスのメモリ領域の一部を前記外部記憶装置内に書き出すとともに、他のノード上の、対応する複製プロセスの状態を前記実体プロセスの状態に更新する際に、前記書き出されたメモリ領域を除く状態で更新させ、前記更新がなされた他のノード上の複製管理部は、自ノード内の前記対応する複製プロセスを実体プロセスに昇格させる場合は、該複製プロセスの対応する領域に、前記外部記憶装置に格納したメモリ領域の一部を書き込むようにしてもよい。このように構成することで、上述したシステム全体で使用されるメモリの量の削減が可能となる。
【００１２】
本発明の第１の複製管理方法は、それぞれが１つ以上の資源を備える複数のコンピュータがネットワークを介して接続されたシステムにおいて行われる複製管理方法であって、前記複数のコンピュータ上で動作するユーザプログラムの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のコンピュータの少なくとも１つに作成する第１のステップと、前記他のコンピュータのうち、前記複製プロセスが作成されたノードを除くノードの少なくとも１つに、前記実体プロセスによって取得された資源を予約する第２のステップと、前記資源の予約がなされたコンピュータに、前記複製プロセスに代わる新たな複製プロセスを作成する第３のステップと、を含むことを特徴とする。この方法も、上記第１の複製管理システムと同様な作用を有する。
【００１３】
本発明の第２の複製管理方法は、それぞれが１つ以上の資源を備える複数のコンピュータがネットワークを介して接続されたシステムにおいて行われる複製管理方法であって、前記複数のコンピュータ上で動作する複数のユーザプログラムのいずれかの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のコンピュータの少なくとも１つに作成するステップと、同一コンピュータ内に、同一資源を保有する、前記複数のユーザプログラムのうちの少なくとも２つの複製プロセスを作成した場合に、該複製プロセスの一つが実体プロセスに昇格すると、他の複製プロセスを削除するステップと、を含むことを特徴とする。この方法も、上記第２の複製管理システムと同様な作用を有する。
【００１４】
本発明の第１のプログラムは、ネットワークを介して接続された、それぞれが１つ以上の資源を備える複数のコンピュータのそれぞれに、前記複数のコンピュータ上で動作するユーザプログラムの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のコンピュータの少なくとも１つに作成する第１の処理と、前記他のコンピュータのうち、前記複製プロセスが作成されたノードを除くノードの少なくとも１つに、前記実体プロセスによって取得された資源を予約する第２の処理と、前記資源の予約がなされたコンピュータに、前記複製プロセスに代わる新たな複製プロセスを作成する第３の処理と、を実行させることを特徴とする。この方法も、上記第１の複製管理システムと同様な作用を有する。
【００１５】
本発明の第２のプログラムは、ネットワークを介して接続された、それぞれが１つ以上の資源を備える複数のコンピュータのそれぞれに、前記複数のコンピュータ上で動作する複数のユーザプログラムのいずれかの実体プロセスの開始に応じて、該実体プロセスの複製プロセスを他のコンピュータの少なくとも１つに作成する処理と、同一コンピュータ内に、同一資源を保有する、前記複数のユーザプログラムのうちの少なくとも２つの複製プロセスを作成した場合に、該複製プロセスの一つが実体プロセスに昇格すると、他の複製プロセスを削除する処理と、を実行させることを特徴とする。この方法も、上記第２の複製管理システムと同様な作用を有する。
【発明の効果】
【００１６】
以上説明した本発明によれば、複製プロセスの作成に失敗することがないため、システムにおける信頼性が低くなる時間を短くできる。よって、従来にない、信頼性の高いシステムを提供することができる。
【発明を実施するための最良の形態】
【００１７】
次に、発明を実施するための最良の形態について図面を参照して詳細に説明する。
【００１８】
（実施形態１）
図１は、本発明の第１の実施形態である複製管理システムの主要部を示すブロック図である。図１を参照すると、本実施形態の複製管理システムは、プログラム制御により動作する複数のノード１００−１〜１００−４がそれぞれネットワーク２００を介して相互に通信可能に接続されている。なお、説明を簡略化するため、図１には、複製管理システムを４台のノードにより構成する例を示してあるが、ノードの台数は４台に限定されるものではない。本実施形態の複製管理システムは、基本的には２台以上の任意台数のノードからなる構成に適用することができる。
【００１９】
ノード１００−１〜１００−４のそれぞれが複製管理部および資源予約部を有し、また、ノード１００−１〜１００−４の少なくとも１つのノードが故障検出部を有する。ここでは、ノード１００−１、１００−２、１００−３、１００−４上で動作する複製管理部をそれぞれ１１１−１、１１１−２、１１１−３、１１１−４という符号で示し、資源予約部をそれぞれ１１２−１、１１２−２、１１２−３、１１２−４という符号で示す。そして、ノード１００−１のみが、故障検出部１１３を有するものとする。
【００２０】
また、各ノード１００−１〜１００−４は、ユーザプログラムの実行時形態であるユーザプロセス（以下、実体プロセス）と、当該複製管理システムにより作成されるユーザプロセスの複製（以下、複製プロセス）を有する。図１の例では、ユーザプログラムとして、Ａ，Ｂ，Ｃの３種類が存在し、Ａ１、Ｂ１、Ｃ１はそれぞれユーザプログラムＡ、Ｂ、Ｃの実体プロセスを示す。Ａ２，Ｂ２、Ｃ２は、当該複製管理システムにより作成されたユーザプログラムの複製プロセスであって、Ａ２はＡ１の複製プロセス、Ｂ２はＢ１の複製プロセス、Ｃ２はＣ１の複製プロセスをそれぞれ表す。
【００２１】
各ノード１００−１〜１００−４に設けられている複製管理部（１１１−１〜１１１−４）は、以下のような機能を有する。
【００２２】
複製管理部は、実体プロセスの複製プロセスを作成するとともに、その作成した複製プロセスの状態を定期的に更新する。ここで、複製プロセスを作成するとは、背景技術で示したウォーム・レプリケーションを作成することを意味する。すなわち、新規のプロセスを作成して休眠状態にしておき、実体プロセスのプロセス状態をその作成したプロセスに複製することである。複製プロセスの状態を定期的に更新するとは、実体プロセスのプロセス状態を、一定時間ごとに複製プロセスに複製することである。プロセス状態は、プロセスを構成する基本情報とプロセスが利用中の資源の情報を含む。例えば、Ｌｉｎｕｘ（Linus Torvalds氏、米国およびその他の国における登録商標あるいは商標）の場合、プロセス状態にはプロセス構造体、仮想アドレス管理情報、オープン済みファイル管理情報、シグナル設定情報、プロセス間通信管理情報が含まれる。なお、複製プロセスの更新の際には、実体プロセスと複製プロセスのプロセス状態の差分を取り、差分の部分だけを更新することで、更新処理を効率的に行うことができる。また、複製管理部は実体プロセスがノード故障やプログラムのエラーなどの理由で消滅した場合には、複製プロセスの一つを選択して、実行状態を休眠状態から実行可能状態へと移行させる（実体プロセスへ昇格させる）。
【００２３】
複製プロセスの数は、あらかじめ複製度として設定されており、複製管理部は、複製の数を複製度で指定された数に保つ。複製度は、自然数で与えられる値であって、当該複製管理システムの初期化時に全体で一つの数値が設定される。複製度は、例えば設定ファイルから読み込まれて、複製管理部に含まれるグローバル変数に保持される。複製管理部は、障害などにより複製プロセスの数が減少した時には、新たな複製先をシステム全体から探す。新たな複製先を探す際には、複製管理部は、自ノードに設けられている資源予約部に問い合わせて、複製プロセスを作成しても資源競合が起きないノードを取得し、そのノードに対して複製プロセスの作成を行う。
【００２４】
また、複製管理部は、自ノード上に存在する実体プロセスおよび複製プロセスに関する情報を格納した複製管理テーブルとして、例えば図２に示すような複製管理テーブル１１８を有する。複製管理テーブル１１８は、ユーザプログラム識別子、実体が存在するノードの識別子、実体プロセスの識別子、複製先ノードの識別子と複製プロセスの識別子の組みのリスト（複製先ノードリスト）を含む。例えば、Ｌｉｎｕｘの場合、ユーザプログラム識別子はパス名（文字列）、ノードの識別子はホスト名（文字列）、プロセスの識別子はプロセスＩＤ（自然数）で表される。複製管理テーブル１１８は、複製管理部が確保するメモリ中に配置されてもよく、また、ディスク装置や他の補助記憶装置に配置されてもよい。
【００２５】
各ノード１００−１〜１００−４に設けられている資源予約部（１１２−１〜１１２−４）は、以下のような機能を有する。
【００２６】
資源予約部は、自ノード上で動作するプロセス（実体プロセスおよび複製プロセスから昇格した実体プロセス）が取得した資源の、他のノードに対する予約を行う。この資源予約では、１つのプロセスに対して少なくとも１つの資源予約が他のノード上でなされるものとする。新規に予約先ノードを追加する場合は、資源予約部は、自ノード上で、指定されたプロセスが利用しているすべての資源を調べ、その調べた資源をすべて予約可能な他のノードをシステム内から探し出し、それを予約先ノードとして登録する。また、自ノード上で動作するユーザプログラム（実体プロセス）から資源取得要求が発行された場合は、資源予約部は、そのユーザプログラム（実体プロセス）によって取得された資源のうち予約が必要なものに関して、自動的に予約先ノードに予約する。資源予約の数は、あらかじめ予約数として設定されており、資源予約部は資源予約先ノードの数を予約数で指定された数に保つ。予約数は、自然数で与えられる値であって、当該複製管理システムの初期化時に全体で一つの数値が設定される。予約数は、例えば設定ファイルから読み込まれて、資源予約部に含まれるグローバル変数に保持される。
【００２７】
また、資源予約部は、図３に示すような予約管理テーブル１１９を用いた管理を行う。予約管理テーブル１１９は、実体プロセスが存在するノードの識別子、実体プロセスのプロセス識別子、実体プロセスが保有する資源のタイプと識別子のリスト、予約先のノードのリストを含む。資源は、例えばポート番号、セマフォなどであって、例えば、ポート番号にはＰＯＲＴ、セマフォにはＳＥＭという定義値が割り当てられる。予約管理テーブル１１９は、資源予約部が確保するメモリ中に配置されてもよく、また、ディスク装置や他の補助記憶装置に配置されてもよい。
【００２８】
故障検出部１１３は、全ノードにおける故障やユーザプログラム（あるいは、アプリケーションプログラム）の障害を監視し、故障が起こった場合には、その故障に関する情報をシステム内のすべてのノードに通知する機能を有する。
【００２９】
ノード１００−１〜１００−４は、いずれもＣＰＵ、メモリ（主記憶装置）、ディスク装置、通信装置（モデムやネットワークインタフェースカードなど）などのハードウェアを有するコンピュータであって、上述した複製管理部、資源予約部および故障検出部における各処理機能は、基本的には、予め用意されたプログラムにしたがってＣＰＵが必要な処理を実行することで実現される。また、ＣＰＵは、各処理機能の実行時に、主記憶装置または補助記憶装置から必要なデータ（複製管理テーブルや予約管理テーブルなどのデータを含む）を読み出して処理したり、必要なデータを主記憶装置また補助記憶装置に格納したりする。
【００３０】
次に、本実施形態の複製管理システムの基本動作について詳細に説明する。
【００３１】
（１）ノード故障発生時の動作：
まず、ノード故障が発生した場合の動作について説明する。ここで、ノード故障とはハードウェア的な故障と、ＯＳ故障の両方のことを指す。
【００３２】
故障検出部１１３は、全てのノードの状態を監視しており、いずれかのノードに故障が生じると、そのノード故障を検出してノード故障情報を全てのノード１１１−１〜１１１−４に通知する。ノード故障の検出としては、各ノードの状態を監視する方法の他に、いくつかの方法がある。例えば、ノードを構成するハードウェアにIPMI（Intelligent Platform Management Interface）のような故障検出機能が含まれる場合は、その故障検出機能により、ノード故障が故障検出部１１３に通知されてもよい。さらに、ノードを使用するユーザあるいはノードを管理する管理者により実行される、ノード故障通知コマンドにより、ノード故障が故障検出部１１３に通知されてもよい。ノード故障情報には、ノードの識別子が含まれる。ノードの識別子には、ＩＰアドレス、ホスト名などが利用できる。
【００３３】
故障検出部１１３からノード故障情報を受け取ったノード上の複製管理部（故障したノード以外のノードの複製管理部）のそれぞれは、その受け取ったノード故障情報に基づいて、自身が管理する複製管理テーブル１１８を検索し、故障したノードにプロセス（実体プロセスまたは複製プロセス）が含まれているかを判断する。故障したノードにプロセスが含まれる場合は、以降、検索されたプロセスに関して以下の処理を繰り返す。故障したノードにいずれのプロセスも含まれない場合は、何も処理は行わない。
【００３４】
図４は、ノード故障情報を受け取った複製管理部の動作を説明するためのフローチャートである。以下、図４を参照して複製管理部の動作を説明する。
【００３５】
複製管理部は、自身が管理する複製管理テーブルを参照して故障ノードに含まれていたプロセスに対応する複製プロセス、または、実体プロセスが自ノード上に存在するか否かを調べ、存在する場合には、故障ノードでに含まれていたプロセスが実体プロセスであるかどうかを判断する（ステップＳ１０１）。この判断で、「Ｙｅｓ」となった場合は、続いて、自身が管理する複製管理テーブルで、その実体プロセスに対応するエントリを調べ、そのエントリの複製先ノードリスト（複製先ノードの識別子と複製プロセスの識別子の組みのリスト）のフィールドに含まれるノード（組み）の先頭の一つを選択する（ステップＳ１０２）。ノード（組み）の選択方法としては、この他に、複製先ノードリストのフィールドに含まれるノード（組み）の最後の一つを選ぶ方法や、ノードの負荷が最も軽いノード（組み）を一つ選ぶ方法などがある。
【００３６】
次に、複製管理部は、ステップＳ１０２で選択したノード（組み）に含まれている複製プロセスの識別子から複製プロセスを特定するとともに、自身が管理する複製管理テーブルを参照して、その特定した複製プロセスが自ノードにあるかどうかを判断する（ステップＳ１０３）。この判断で「Ｎｏ」となった場合は、処理を終了する。「Ｙｅｓ」となった場合は、自ノードの該当する複製プロセスを実体プロセスへと昇格させる（ステップＳ１０４）。ここで、「複製プロセスを実体プロセスに昇格させる」とは、例えば、Ｌｉｎｕｘの場合であれば、シグナルを発行して休眠状態にあるプロセスを実行可能状態に移すことを意味する。
【００３７】
次に、複製管理部は、ステップＳ１０４で昇格させた実体プロセスの複製（昇格前の複製プロセスの代わりとなる新たな複製プロセス）を作成するために、予約済みノードの一つを取得する。この予約済みノードの取得では、自ノード内の資源予約部に対してノード取得要求をし、ノード取得応答を受け取る、といった処理が行われる。ここでは、予約済みノードとして受け取ったノードを「ノードＮ」とする。さらに、複製管理部は、ノードＮに対して昇格した実体プロセスに関する複製作成要求を送信し、ノードＮから複製作成応答を受信する。そして、自身が管理する複製管理テーブルの、昇格した実体プロセスに対応するエントリの複製先ノードリストの最後に、ノードＮに関する情報（組み）を追加する（ステップＳ１０５）。このノード（組み）の追加位置は、複製先ノードリストの最初や途中としてもよい。ノード取得要求には、実体プロセスが存在するノードの識別子と実体プロセスのプロセス識別子が含まれ、さらに、オプションとして、エントリの内容を置き換えるための実体プロセスが存在するノードの識別子と実体プロセスのプロセス識別子が含まれる。ノード取得応答には、予約済みノードの識別子が含まれる。複製作成要求には、複製対象のプログラムの識別子、実体プロセスの存在するノードの識別子と実体プロセスのプロセス識別子、実体プロセスのプロセス状態が含まれる。複製作成応答には、送信元のノードの識別子と実体プロセスのプロセス識別子、複製プロセスのプロセス識別子が含まれる。
【００３８】
ステップＳ１０５でノード取得要求を受けた資源予約部は、自身が管理する予約管理テーブルを検索し、指定された実体プロセスに対応するエントリのノードリストから最初の一つを選び、その選択したノードの識別子を含むノード取得応答を要求元の複製管理部に返す。このノードの選択方法としては、この他に、ノードリストの最後の一つを選ぶ方法や、ノードの負荷が最も軽いノードを一つ選ぶ方法などがある。この資源予約部の動作については、後で詳しく説明する。
【００３９】
また、ステップ１０５で送信された複製作成要求を受けたノードＮの複製管理部は、自ノードに、複製作成要求により指定された複製プロセスを作成する。さらに、複製プロセスが追加されたことを、自身が管理する複製管理テーブルに反映させる。複製プロセスの作成方法は、従来技術と同様である。例えば、Ｌｉｎｕｘの場合は、新規にプロセスを作成し、さらに、複製作成要求に含まれる実体プロセスのプロセス状態を新規に作成したプロセスに反映させる。
【００４０】
上述したステップＳ１０５の処理の後、複製管理部は、自身が管理する複製管理テーブルにおいて、ステップＳ１０２で選択したノード（組み）を複製先ノードリストのフィールドから削除するとともに、ステップＳ１０４で昇格させた実体プロセスに対応するエントリの、実体が存在するノードの識別子および実体プロセスの識別子の各フィールドにその削除したノード（組み）の情報をコピーする。そして、元の実体プロセス（故障したノードに含まれる実体プロセス）に関する複製管理テーブルのエントリを保有する他の全てのノードに対して複製テーブル変更要求を送信する（ステップＳ１０６）。複製テーブル変更要求は、元の実体プロセスが存在するノードの識別子と元の実体プロセスの識別子、新たな実体プロセスが存在するノードの識別子と新たな実体プロセスの識別子、複製プロセスの存在するノードと複製プロセスのプロセス識別子を含む。複製追加情報を受信した別のノードの複製管理部はそれぞれ、自身が管理する複製管理テーブルのエントリの更新を行う。
【００４１】
上述したステップＳ１０１の判断で「Ｎｏ」となった場合は、複製管理部は、検索されたプロセスが複製プロセスであると判断し、その複製プロセスに対応するエントリを自身が管理する複製管理テーブルから削除する（ステップＳ１０８）。そして、その複製プロセスに関する実体プロセスが自ノードに存在するかどうかを判断する（ステップＳ１０９）。この判断で「Ｙｅｓ」となった場合は、上述したステップＳ１０５、Ｓ１０６の処理を行う。「Ｎｏ」となった場合（自ノードが実体プロセスの存在するノードでない場合）は、処理を終了する。
【００４２】
次に、ステップＳ１０５でノード取得要求を受けた資源予約部における動作について説明する。図５は、ノード取得要求を受けた資源予約部の動作を説明するためのフローチャートである。以下、図５を参照して資源予約部の動作を説明する。
【００４３】
資源予約部は、ノード取得要求を受けると、まず、自身が管理する予約管理テーブルを検索し、そのノード取得要求で指定された実体プロセスに対応するエントリの予約先ノードリスト（予約が存在するノードの識別子のリスト）から一つのノードを選択し、その選択したノードをノード取得応答として要求元の複製管理部に返す（ステップＳ２０１）。そして、選択したエントリの予約先ノードリストに含まれるノードと指定された実体の存在するノードを除いた、残りのノードからノードを一つ選択し、その選択したノードに、指定された実体プロセスに関する資源予約要求を送信する（ステップＳ２０２）。この資源予約要求には、送信元ノードの識別子、実体プロセスの識別子、予約したい資源のリストが含まれる。この場合は、予約したい資源のリストとして予約管理テーブルに記録されている、「資源タイプと資源識別子のリスト」が含まれる。
【００４４】
資源予約要求を送信した先のノードから資源予約応答を受け取ると（ステップＳ２０３）、資源予約部は、その資源予約応答の結果が成功であるか否かを確認する（ステップＳ２０４）。この確認で「Ｎｏ」となった場合は、ステップＳ２０２に戻って別のノードに対する処理を行う。「Ｙｅｓ」となった場合は、資源予約応答を返したノードを自身が管理する予約管理テーブルの対応するエントリの予約先ノードリストの最後に追加する（ステップＳ２０５）。このノードの追加位置は、ノードリストの最初や途中であってもよい。資源予約応答には、送信元ノードの識別子、資源予約要求に含まれていた実体プロセスの識別子、資源予約の結果（成功か失敗か）が含まれる。
【００４５】
最後に、資源予約部は、自身が管理する予約管理テーブルの予約先ノードリストからステップＳ２０１で選択したノードを削除し、ノード取得要求で指定された実体プロセスに対応するエントリの最新の情報を全てのノードに送信する（ステップＳ２０６）。最新の情報を受信した各ノードの資源予約部は、その情報に基づいて自身が管理する予約管理テーブルを更新する。
【００４６】
次に、ステップＳ２０２で資源予約要求を受けた他のノードの資源予約部の動作について説明する。図６は、資源予約要求を受けた他ノードの資源予約部の資源予約応答動作を説明するためのフローチャートである。以下、図６を参照して資源予約部の動作を説明する。
【００４７】
資源予約要求を受けた資源予約部は、自身が管理する予約管理テーブルを検索して、要求された資源が利用されているかどうかを調べ（ステップＳ３０１）、要求された資源のすべてが予約可能であるか否かを確認する（ステップＳ３０２）。この確認で「Ｙｅｓ」となった場合は、自ノードに資源を予約して、成功の資源予約応答を要求元の資源予約部に返す（ステップＳ３０３）。「Ｎｏ」となった場合（要求された資源の一つでも予約不可能な場合）は、資源の予約は行わずに、失敗の資源予約応答を要求元の資源予約部に返す（ステップＳ３０４）。
【００４８】
（２）ユーザプログラムの故障発生時の動作：
次に、ユーザプログラムの故障が発生した場合の動作について説明する。ここでは、あるユーザプログラムの実体プロセスあるいは複製プロセス（このプロセスをＰと表す）が故障したと仮定して動作を説明する。
【００４９】
プロセスＰの故障が発生した場合は、故障検出部１１３によりそのプロセスＰの故障情報が各ノードの複製管理部に通知される。プロセス故障情報には、故障したプロセスに対応するユーザプログラムの識別子とそのプロセスが実行されていたノードの識別子とプロセスの識別子が含まれる。プロセス故障情報を受け取った複製管理部は、自身が管理する複製管理テーブルにプロセスＰに対応するエントリがあるかどうかを調べる。エントリがなければ、なにもせずに処理を終了する。エントリがあった場合は、前述した図４のステップＳ１０１〜Ｓ１０６の手順で処理が行われる。以下に、各処理を簡単に説明する。
【００５０】
複製管理部は、プロセスＰが実体プロセスであったか、複製プロセスであったかを判断する。プロセスＰが実体プロセスであった場合は、プロセスＰに対応する第２の複製管理テーブルのエントリを参照し、複製先ノードリストの先頭のノード（組み）を取得する。次に、選択したノード（組み）が自ノードに関するものか否かを判断する。この判断で「Ｎｏ」となった場合は、処理を終了する。「Ｙｅｓ」となった場合は、自ノードの該当する複製プロセスを実体プロセスへと昇格させる。続いて、昇格させた実体プロセスの複製を作成するために、自ノード内の資源予約部に問い合わせて予約済みノードの一つ（ここでは、「ノードＮ」とする）を取得する。続いて、ノードＮに対して昇格した実体プロセスに関する複製作成要求を送信し、ノードＮから複製作成応答を受信する。そして、自身が管理する複製管理テーブルの、昇格した実体プロセスに対応するエントリの複製先ノードリストの最後に、ノードＮに関する情報（組み）を追加する。
【００５１】
さらに、複製管理部は、自身が管理する複製管理テーブルにおいて、先の処理で選択したノード（組み）を、先の処理で昇格させた実体プロセスに対応するエントリの複製先ノードリストのフィールドから削除するとともに、同エントリの実体が存在するノードの識別子および実体プロセスの識別子の各フィールドにその削除したノード（組み）の情報をコピーする。そして、元の実体プロセス（ユーザプログラムＰ）に関する複製管理テーブルのエントリを保有する他の全てのノードに対して複製テーブル変更要求を送信する。
【００５２】
一方、プロセスＰが複製プロセスであった場合には、複製管理部は、その複製プロセスに対応するエントリを特定し、そのエントリの、複製先ノードリストから、プロセスＰに対応するノード（組み）を削除する。次に、複製管理部は、プロセスＰに対応する実体プロセスが自ノードに含まれるかどうか判断する。この判断で「Ｎｏ」となった場合は、処理を終了する。「Ｙｅｓ」となった場合は、自ノード内の資源予約部に問い合わせて予約済みノードの一つ（ここでは、「ノードＮ」とする）を取得する。続いて、ノードＮに対して該実体プロセスに関する複製作成要求を送信し、ノードＮから複製作成応答を受信する。そして、自身が管理する複製管理テーブルの、該実体プロセスに対応するエントリの複製先ノードリストの最後に、ノードＮに関する情報（組み）を追加する。
【００５３】
複製管理部から予約済みノードの問合せを受けた時の資源予約部の動作は「（１）ノード故障発生時の動作」と同様である。
【００５４】
（３）複製管理部による定期的な更新動作：
次に、複製管理部１１１−１〜１１１−４において行われる複製プロセスの定期的な更新動作について説明する。
【００５５】
複製管理部は、定期的に複製プロセスの更新を行う。この複製管理部における定期的な更新処理の実行は、例えば、Ｌｉｎｕｘの場合であれば、インターバルタイマ（ｓｅｔｉｔｉｍｅｒで指定する）を使用することで実現できる。
【００５６】
定期的な更新処理が起動された複製管理部は、自身の複製管理テーブル１１８を検索して、自ノードに実体プロセスが存在するかを調べる。そして、自ノードに実体プロセスが存在する場合、その実体プロセスの複製プロセスを保有する他のノードに対して複製更新要求を送信する。複製更新要求には、実体プロセスが存在するノードの識別子、実体プロセスのプロセス識別子、複製作成先のノードの識別子、実体プロセスのすべてのプロセス状態が含まれる。このプロセス状態として、実体プロセスと複製プロセスの差分だけを送るようにしてもよい。
【００５７】
複製更新要求を受け取った別のノードの複製管理部は、自身が管理する複製管理テーブル内の、複製更新要求により指定される実体プロセスに対応する複製プロセスに対して、送られてきたプロセス状態を上書きする。プロセス状態として差分だけが送られてくる場合には、必要な部分だけを上書きする。
【００５８】
（４）ユーザプログラム（実体プロセス）による資源取得時の動作：
次に、ユーザプログラムが動作中に資源取得要求を行った場合の、資源予約部の動作について説明する。
【００５９】
ユーザプログラムは起動されると、その実体プロセスによって資源が取得されると同時に資源取得要求が発行される。資源予約部は、通常、実体プロセスから発行される資源取得要求を監視しており、予約が必要な資源の取得要求が発行されたことを検出すると、以下のような処理を実行する。ここで、資源取得要求とは、プロセスを生成する、ファイルをオーブンする、セマフォを作成する、などの処理が含まれる。例えば、Ｌｉｎｕｘの場合、ｆｏｒｋ、ｏｐｅｎ、ｓｅｍｇｅｔなどがこれに当たる。
【００６０】
図７は、ユーザプログラムからの資源取得要求を検出した資源予約部の動作を説明するためのフローチャートである。以下、図７を参照して資源予約部の動作を説明する。
【００６１】
資源予約部は、実体プロセスから発行される資源取得要求を検出すると、その実体プロセスの識別子に基づいて、自身が管理する予約管理テーブルを検索して対応するエントリを見つけ、このエントリの予約先ノードリストのフィールドに含まれる全てのノードに対して、資源取得要求を発行した実体プロセスが取得した資源の資源予約要求を送信する（ステップＳ４０１）。資源予約要求は、「（１）ノード故障発生時の動作」のものと同様であるが、予約したい資源のリストとして資源取得要求により取得される資源の資源タイプと資源識別子のリストが含まれる。
【００６２】
資源予約要求を受け取った他の資源予約部は、ローカルな資源（資源予約部が存在するのと同じノード（同一ノード）内に含まれる、通信チャネルやファイルなどの資源）の予約処理を行うとともに、その予約の成否に応じて、成功または失敗の資源予約応答を要求元の資源予約部に返す。ここで、資源を予約する、あるいは、予約を取り消す方法としては、ＯＳの提供する資源取得・解放機能を利用して、ローカルな資源を取得・解放する方法がある。また、資源予約の機能を持ったＯＳ(CMUのresource kernelなど)であれば、効率的にリソースＩＤなどの予約・予約取消だけを行うこともできる。
【００６３】
次に、要求元の資源予約部は、他の資源予約部から資源予約応答を順次受信する（ステップＳ４０２）。そして、受信した資源予約応答について以下のステップＳ４０３〜ステップＳ４０６の処理を繰り返す。資源予約応答には、送信元ノードの識別子、資源予約要求に含まれていた実体プロセスの識別子、資源予約の結果（成功か失敗か）が含まれる。
【００６４】
まず、ステップＳ４０３で、受け取った資源予約応答の結果が成功であるか否かが確認される。この確認で「Ｙｅｓ」となった場合は、なにも処理せずに、ステップＳ４０６ですべての処理が終了したかどうかが判断される。この判断で「Ｎｏ」となった場合はステップＳ４０２に戻り、「Ｙｅｓ」となった場合は処理を終了する。
【００６５】
ステップＳ４０３の確認で、「Ｎｏ」となった場合（資源予約応答の結果が失敗の場合）は、ステップＳ４０４で、送信元のノードに対して、同一実体プロセスに関するエントリに含まれるすべての資源の予約を取り消すために資源予約取消要求を出し、さらに自身の管理する予約管理テーブルからその資源に関する情報を削除する。このとき、資源予約取消要求を受け取った他方の資源予約部１１２は、ローカルな資源の予約取消を行い、要求元の資源予約部に資源予約取消応答を返す。資源予約取消要求には、送信元ノードの識別子、実体プロセスの識別子、上記資源解放要求により解放される資源の情報が含まれる。
【００６６】
さらに、ステップＳ４０５で、図５に示したステップＳ２０２〜Ｓ２０５と同様の処理を行って、新たな予約先ノードを追加する。すなわち、システムの全ノードの一つに対して、実体プロセスに関する資源予約要求を送信する。続いて、資源予約応答を受け取り、結果が成功の場合は、資源予約部は、資源予約応答を返したノードを予約管理テーブルの該当プログラムに対応するエントリの予約先ノードリストの最後に追加する。その後、ステップＳ４０６に移行する。
【００６７】
以上のステップＳ４０２〜Ｓ４０６の処理が、すべての資源予約応答を処理するまで繰り返し行われる。
【００６８】
（５）ユーザプログラムによる資源解放時の動作：
資源予約部は、通常、ユーザプログラムの実体プロセスから発行される資源解放要求を監視しており、予約が必要な資源の解放要求が発行されたことを検出した場合は、以下の処理を実行する。ここで、資源解放要求とは、プロセスを終了する、ファイルをクローズする、セマフォを削除するなどの処理である。例えば、Ｌｉｎｕｘの場合、ｅｘｉｔ、ｃｌｏｓｅ、ｓｅｍｃｔｌなどがこれに当たる。
【００６９】
資源解放要求を検出した資源予約部は、まず、実体プロセスの識別子に基づいて自身が管理する予約管理テーブルを検索し、対応するエントリを見つけ、このエントリの予約先ノードリストのフィールドに含まれる全てのノードに対して、上述した資源取得要求の発行の際に取得された資源の資源予約取消要求を送信する。
【００７０】
資源予約取消要求を受け取った別のノードの資源予約部は、その予約を取り消して要求元の資源予約部に資源予約取消応答を返す。
【００７１】
要求元の資源予約部は、すべての資源予約取消応答を受け取り終えたら、自身が管理する予約管理テーブルから、解放した資源に関する情報を削除する。
【００７２】
（６）ユーザプログラムの開始終了時の動作：
次に、ユーザプログラムの開始時、終了時の複製管理部および予約管理部の動作について説明する。
【００７３】
（６ａ）ユーザプログラムの開始時の動作：
複製管理部は、自ノード内でのユーザプログラムの開始と終了を監視している。ユーザプログラムの開始を検出すると、複製管理部は、まず、自身が管理する複製管理テーブルに、その開始したプログラムの実体プロセスに対応する新たなエントリを作成する。続いて、システム全体から１つのノードを選択して、複製プロセスを作成するための複製作成要求をその選択したノードの複製管理部に送る。このノードの選択と複製作成要求の処理は、複製の数が複製度に達するまで繰り返される。複製作成要求を受け取った別ノードの複製管理部の動作は、前述した「（１）ノード故障発生時の動作」における、ノード故障が発生した場合の別ノードの複製管理部の動作と同様である。
【００７４】
また、複製管理部は、資源予約部に対して、開始したプログラムの実体プロセスに関する資源予約の開始を要求する。資源予約開始要求には、実体プロセスのプロセスＩＤが含まれる。
【００７５】
資源予約開始要求を受けた資源予約部は、次のような処理を行う。自身が管理する予約管理テーブルに、資源予約開始要求により指定された実体プロセスに関するエントリを追加する。続いて、システム全体から１つのノードを選択して、資源予約要求を送信する。そして、資源予約応答の成否に応じて、予約管理テーブルを更新する。この予約要求の処理は、規定の予約数に達するまで繰り返される。
【００７６】
（６ｂ）ユーザプログラムの終了時の動作：
ユーザプログラムの実体プロセスの終了を検出すると、複製管理部は、まず、自身が管理する複製管理テーブルを検索して、その終了した実体プロセスに対応するエントリを見つける。続いて、そのエントリに含まれる複製ノードリストに含まれる全てのノードに対して、複製削除要求を送る。複製削除要求には、実体プロセスが存在するノードの識別子と実体プロセスのプロセス識別子が含まれる。さらに、複製管理部は、資源予約部に対して資源予約終了要求を送る。資源予約終了要求には、実体プロセスのプロセス識別子が含まれる。
【００７７】
複製削除要求を受け取った別ノードの複製管理部は、自身が管理する複製管理テーブルを検索し、複製削除要求に対応するエントリを見つけ出す。続いて、エントリに含まれる情報を参照して、複製プロセスを終了させる。最後に、そのエントリを自身が管理する複製管理テーブルから削除する。
【００７８】
資源予約終了要求を受けた資源予約部は、まず、自身の予約管理テーブルを検索して、資源予約終了要求に対応するエントリを見つけ出す。そのエントリを参照して、すべての予約済みノードに対して資源予約取消要求を送信する。そして、自身の予約管理テーブルからこのエントリを削除する。
【００７９】
以上説明した本実施形態の複製管理システムによれば、ノード故障やユーザプログラムの故障により、実体プロセスあるいは複製プロセスが失われて、複製の数を一定に保つために新規に複製プロセスを作成しようとした場合に、予め資源予約をしてあるノードに複製を作成するようになっているので、すでに存在するプロセスとの間で資源競合が起きることがない。よって、複製プロセスの作成を、失敗することなく、確実に行うことができる。
【００８０】
［実施例］
次に、本実施形態の複製管理システムの動作を、具体的な例を挙げて説明する。ここでは、複製管理テーブル１１８と予約管理テーブル１１９の更新を中心に説明する。
【００８１】
図８は、図１に示した管理システムの各ノード１００−１〜１００−４の、ノード故障発生に伴う状態の変化を説明するための図で、（ａ）はノード故障発生前の状態、（ｂ）はノード故障処理後の状態をそれぞれ示す。この例では、ノード１００-１に"Ｎｏｄｅ０１"、ノード１００-２に"Ｎｏｄｅ０２"、ノード１００-３に"Ｎｏｄｅ０３"，ノード１００-４に"Ｎｏｄｅ０４"というホスト名が与えられている。
【００８２】
図９は、ノード１００-１の複製管理部１１１−１が保有する複製管理テーブル１１８−１のノード故障発生に伴う状態の変化を説明するための図で、（ａ）はノード故障発生前の状態、（ｂ）はノード故障処理後の状態をそれぞれ示す。図１０は、ノード１００-４の複製管理部１１１−４が保有する複製管理テーブル１１８−４のノード故障発生に伴う状態の変化を説明するための図で、（ａ）はノード故障発生前の状態、（ｂ）はノード故障処理後の状態をそれぞれ示す。図１１は、各ノードの資源予約部が保有する予約管理テーブルのノード故障発生に伴う状態の変化を説明するための図で、（ａ）はノード故障発生前の状態、（ｂ）はノード故障処理後の状態をそれぞれ示す。
【００８３】
以下、図８〜１１を参照して、ノード故障が発生した場合の動作について説明する。
【００８４】
ノード故障発生前は、図８（ａ）に示すように、ノード１００−１にはプログラムＡの複製プロセスが存在する。また、ノード１００−２にはプログラムＡの実体とプログラムＢの複製プロセスとプログラムＣの複製プロセスが、ノード１００−３にはプログラムＢの実体プロセスが、ノード１００−４にはプログラムＣの実体プロセスがそれぞれ存在する。
【００８５】
今、ノード故障がノード１００−２で発生したとする。ノード１００−２には、ＩＰＭＩ対応のハードウェアが搭載されており、故障通知が、ＩＰＭＩのアラートメッセージとして故障検出部１１３が存在するノード１００−１に通知される。ＩＰＭＩのアラートメッセージを受信した故障検出部１１３は、全ノードの複製管理部１１１−１〜１１１−４に対してＴＣＰ／ＩＰのソケット通信でノード故障情報を送信する。
【００８６】
まず、故障通知メッセージを受け取ったノード１００−１の複製管理部１１１−１の動作について説明する。この動作は、図４に示した手順で行われる。
【００８７】
複製管理部１１１−１は、複製管理テーブル１１８−４を検索する。ノード故障情報を受け取った時点では、複製管理部１１１−１は図８（ａ）の状態にある。このときの複製管理テーブル１１８−１には、図９（ａ）に示すように、ユーザプログラムＡのエントリの欄の、ユーザプログラム識別子のフィールドには「”Ａ”」が、実体が存在するノードの識別子のフィールドには「”Ｎｏｄｅ０２”」が、実体プロセスの識別子のフィールドには「１３４」が、複製先ノードの識別子と複製プロセスの識別子の組みリストのフィールドには「［”Ｎｏｄｅ０２”，２１１］」がそれぞれ格納されている。複製管理部１１１−１は、この複製管理テーブル１１８−１を調べて、ノード１００−２に存在した実体プロセスとして、プログラムＡのプロセス識別子「１３４」を得る（図４のＳ１０１の「Ｙｅｓ」）。
【００８８】
次に、複製管理部１１１−１は、プログラムＡのプロセス識別子１３４に対応する複製先ノードリストに含まれるノードの先頭の一つ「［“Ｎｏｄｅ０１”，２１１］」を選択する（図４のステップＳ１０２）。この時点で、ノード１００−１のプロセス識別子２１１を持つプロセスが実体プロセスになるので（図４のステップＳ１０３の「Ｙｅｓ」）、複製管理部１１８−１は同プロセスにシグナルを送り、実体プロセスへと昇格させる（図４のステップＳ１０４）。
【００８９】
次に、複製管理部１１１−１は、資源予約部１１２−１にノード取得要求を行う。このノード取得要求には、「［“Ｎｏｄｅ０２”，１３４、“Ｎｏｄｅ０１”，２１１］」という情報が含まれる。この時点では、資源予約部１１２−１が保有する予約管理テーブルには、図１１（ａ）に示すように、実体が存在するノードの識別子のフィールドに「”Ｎｏｄｅ０２”」が含まれており、その予約が存在するノードの識別子のリストのフィールドには「”Ｎｏｄｅ０４”」が格納されている。したがって、予約管理部１１２−１からは、ノード取得応答「［“Ｎｏｄｅ０４”］」が返される。この資源予約部１１２−１の動作を後で詳細に説明する。
【００９０】
次に、複製管理部１１１−１は、受け取ったノード取得応答［“Ｎｏｄｅ０４”］に基づき、“Ｎｏｄｅ０４”すなわちノード１００−４に対して複製作成要求を送信する。この複製作成要求には、「［“／ａ／ｂｉｎ／Ａ”，“Ｎｏｄｅ０１”，２１１，（プロセス状態データ）］」という情報が含まれる。複製管理部１１１−４からは、「［“Ｎｏｄｅ０４”，２１１，７８２］」という情報を含む複製作成応答が返される。この複製管理部１１１−４の複製作成応答動作は、後で詳細に説明する。複製管理部１１１−４から複製作成応答を受け取った複製管理部１１１−１は、複製管理テーブル１１８−１のプログラムＡに対応するエントリの欄の複製先ノードリストの最後に「［“Ｎｏｄｅ０４”，７８２］」という情報を追加する（図４のステップＳ１０５）。
【００９１】
次に、複製管理部１１１−１は、複製先ノードリストから選択した複製プロセスの情報［“Ｎｏｄｅ０１”，２１１］を、複製管理テーブル１１８−１の複製先ノードリストから削除するとともに、プログラムＡのエントリの欄の、実体プロセスの存在するノードのフィールドと実体プロセスのプロセス識別子のフィールドへコピーする。この結果、複製管理テーブル１１８−１のプログラムＡに対応するエントリの欄には、ユーザプログラム識別子のフィールドに「”Ａ”」が、実体が存在するノードの識別子のフィールドに「”Ｎｏｄｅ０１”」が、実体プロセスの識別子のフィールドに「２１１」が、複製先ノードの識別子と複製プロセスの識別子の組みリストのフィールドに「［”Ｎｏｄｅ０２”，２１１］」がそれぞれ格納されることとなる。
【００９２】
最後に、複製管理部１１１−１は、複製更新要求をノード１００-４に送信する（図４のステップ１０６）。
【００９３】
次に、ノード１００-１から複製作成要求を受け取った複製管理部１１１−４の動作について説明する。
【００９４】
複製管理部１１１−４は、ノード１００-１の複製管理部１１１−１から複製作成要求（「［“／ａ／ｂｉｎ／Ａ”，“Ｎｏｄｅ０１”，２１１，（プロセス状態データ）］」という情報が含まれる）を受け取ると、複製プロセス（プロセス識別子＝７２４）を作成し、自身が管理する複製管理テーブル１１８−４にプログラムＡに対応するエントリを追加する。この結果、複製管理テーブル１１８−４は、図１０（ａ）に示すような、プログラムＣに対応するエントリのみを有する状態から、図１０（ｂ）に示すような、プログラムＣ、Ａに対応するエントリを有する状態になる。このプログラムＡに対応するエントリの欄の、ユーザプログラム識別子のフィールドには「”Ａ”」が、実体が存在するノードの識別子のフィールドには「”Ｎｏｄｅ０１”」が、実体プロセスの識別子のフィールドには「２１１」が、複製先ノードの識別子と複製プロセスの識別子の組みリストのフィールドには「［”Ｎｏｄｅ０４”，７８２］」がそれぞれ格納されている。
【００９５】
上述した複製作成要求は、ノード１００-１からノード１００-４へ送信されるだけでなく、ノード１００−３、１００-４からノード１００-１へも送信されている。この結果、ノード１００-１の複製管理部１１１−１においても、上記の複製管理部１１１−４における処理と同様な処理が行われる。すなわち、複製管理部１１１−１は、複製プロセスを作成し、その結果を複製管理テーブル１１８-１に反映させる。最終的に、複製管理テーブル１１８−１は、図９（ｂ）に示すように、プログラムＡ、Ｂ、Ｃに対応するエントリを有する状態になる。
【００９６】
次に、上記のステップＳ１０５で複製管理部１１１−１からノード取得要求「［"Ｎｏｄｅ０２"，１３４，"Ｎｏｄｅ０１"，２１１］」を受けた資源予約部１１２−１の動作について説明する。この動作は、図５に示した手順で行われる。
【００９７】
資源予約部１１２−１は、複製管理部１１１−１からのノード取得要求を受け取ると、まず、自身が管理している予約管理テーブル１１９を検索して、実体プロセス「“Ｎｏｄｅ０２”，１３４」に対応するエントリから一つのノードを選択する。この時点では、予約管理テーブル１１９には、図１１（ａ）に示すように、実体プロセス「“Ｎｏｄｅ０２”，１３４」に対応するエントリの予約先ノードリストには「“Ｎｏｄｅ０４”」が存在する。よって、資源予約部１１２−１は、「“Ｎｏｄｅ０４”」、すなわちノード１００−４を選択して複製管理部１１１−１に返す（図５のステップＳ２０１）。
【００９８】
次に、資源予約部１１２−１は、実体プロセス「“Ｎｏｄｅ０２”，１３４」に対応するエントリの予約先ノードリストに含まれるノード「“Ｎｏｄｅ０４”」と実体の存在するノード「“Ｎｏｄｅ０２”」を除いた、残りのノード（ここでは、ノード１００−２、１００−３）から１つのノードを選択する。ここでは、ノード１００−２は故障しているので、資源予約部１１２−１は、ノード１００−３を選択し、そのノード１００−３に対して実体プロセス「“Ｎｏｄｅ０２”，１３４」に関する資源予約要求を送信する（図５のステップＳ２０２）。資源予約要求には、「“Ｎｏｄｅ０２”，１３４，［ＰＯＲＴ，８０］，［ＮＵＬＬ］，“Ｎｏｄｅ０１”，２１１」という情報が含まれる。
【００９９】
ノード１００−３ではポート８０が使われていないので、資源予約部１１２−３は、成功の資源予約応答を要求元の結果として資源予約部１１２−１に返す。資源予約部１１２−１は、成功の資源予約応答を受け取ると（図５のステップＳ２０３およびステップＳ２０４のＹ）。資源予約部１１２−１は、資源予約応答を返したノード１００−３の識別子“Ｎｏｄｅ０３”を自身が管理する予約管理テーブルの対応するエントリの予約先ノードリストの最後に追加する（図５のステップＳ２０５）。
【０１００】
最後に、資源予約部１１２−１は、実体プロセスが存在するノードの識別子と実体プロセスのプロセス識別子のそれぞれのフィールドを「“Ｎｏｄｅ０１”，２１１」に書き換え、予約先ノードリストからノード１００−４を削除する。そして、このエントリの最新状態をすべてのノードに送信する（図５のステップＳ２０６）。
【０１０１】
ノード１００-３、ノード１００−４においても、上述の処理と同様な処理が行われる。この結果、各資源予約部が管理する予約管理テーブルの状態は、図１１（ａ）に示す「“Ｎｏｄｅ０２”，１３４」に対応するエントリの部分が、図１１（ｂ）に示すような、「“Ｎｏｄｅ０１”，２１１」に対応するエントリに変更される。この変更後のエントリの予約先ノードリストのフィールドには「“Ｎｏｄｅ０１”」が格納されている。
【０１０２】
以上の処理が行われた結果、各ノード１００−１〜１００−４の状態は、図８（ｂ）に示すような状態となる。具体的には、ノード１００−１にはプログラムＡの実体プロセスとプログラムＢ、Ｃの各複製プロセスが存在する。ノード１００−２は故障とされる。ノード１００−３には、プログラムＢの実体プロセスが存在する。ノード１００−４にはプログラムＣの実体プロセスおよびプログラムＡの複製プロセスが存在する。
【０１０３】
（実施形態２）
上述した第１の実施形態のシステムでは、同一ノード内に資源が競合する予約を行うことはできない。資源予約部の動作を一部変更することで、同一ノード内で競合しうる資源の予約が可能になる。ここでは、そのような資源予約が可能な構成について説明する。
【０１０４】
第２の実施形態のシステムの構成は、図１に示したシステム構成と同じであるが、資源予約部の動作が一部異なる。他の動作については基本的には同じであるので、ここでは、動作の異なるところを中心に説明する。
【０１０５】
図４に示したステップＳ１０５で複製管理部からノード取得要求を受けた資源予約部は、以下のような動作を実行する。この動作は、図５に示した処理のステップＳ２０５の後に新たなステップを含む。
【０１０６】
まず、自身が管理する予約管理テーブルを検索して、ノード取得要求により指定された実体プロセスに対応するエントリの予約先ノードの識別子のリストから一つのノードを選択し、それを複製管理部に返す（図５のステップＳ２０１）。続いて、予約先ノードの識別子のリストに含まれるノードと実体の存在するノードを除いた、残りのノードからノードを一つを選択し、その選択したノードに、ノード取得要求により指定された実体プロセスに関する資源予約要求を送信する（図５のステップＳ２０２）。資源予約要求には、送信元ノードの識別子、実体プロセスの識別子、予約管理テーブルに記録されている予約済み資源のリストが含まれる。
【０１０７】
資源予約要求を送信した先のノードから資源予約応答を受け取ると（図５のステップＳ２０３）、その結果が成功であるかどうかが確認される（図５のステップＳ２０４）。資源予約応答の結果が成功の場合は、資源予約応答を返したノードを自身が管理する予約管理テーブルの該当プログラムに対応するエントリの予約先ノードリストの最後に追加する（図５のステップＳ２０５）。このノードの追加位置は、ノードリストの最初や途中にすることも可能である。資源予約応答の結果が失敗の場合は、ステップＳ２０２からの処理を繰り返す。資源予約応答には、送信元ノードの識別子、資源予約要求に含まれていた実体プロセスの識別子、資源予約の結果（成功か失敗か）が含まれる。
【０１０８】
次に、自身が管理する予約管理テーブルを検索し、ステップＳ２０１でノードが選択されたエントリの、資源タイプと資源識別子の組みのリストに含まれる資源を一つでも含むエントリが他にあれば、そのエントリの予約先ノードリストから自ノードを削除する。さらに、その予約先ノードリストから自ノードを削除したエントリに関して新たな予約先ノードを探すためにステップＳ２０２〜Ｓ２０５と同様な手順で資源予約処理を行う（新たなステップ）。資源予約要求には、送信元ノードの識別子、実体プロセスの識別子、予約したい資源のリストが含まれる。実体プロセスの識別子には、予約先ノードから自ノードを削除したエントリの実体プロセスの識別子が、予約したい資源のリストには、予約先ノードから自ノードを削除したエントリに格納されている資源タイプと資源識別子の組みのリストがそれぞれ指定される。
【０１０９】
最後に、自身が管理している予約管理テーブルの予約先ノードリストからステップＳ２０１で選択したノードを削除し、変更されたエントリの最新の情報を全てのノードに送信する（図５のステップＳ２０６）。
【０１１０】
また、資源予約要求を受け取った他の資源予約部は、以下のような動作を実行する。
【０１１１】
まず、自身が管理する予約管理テーブルを参照し、ローカルな資源がすでに予約されていないか調べる。予約がされていない場合は、資源の予約を行う。予約が成功したら、成功の資源予約応答を要求元の資源管理部に返す。予約に失敗した場合は、失敗の資源予約応答を要求元の資源管理部に返す。すでに資源が予約されている場合には、何もしないで、成功の資源予約応答を要求元の資源管理部に返す。
【０１１２】
以上の動作によれば、同一ノードに対して、他の複数のノードが同一資源を予約することが可能となる。前述した第１の実施形態の場合は、そのような競合資源の予約ができないため、予約が失敗することがあり、予約処理に時間を要する可能性があった。これに対して、本実施形態では、競合資源の予約を可能としたことで、予約の失敗を減らせ、予約処理時間が短縮される。
【０１１３】
（実施形態３）
上述した第１および第２の実施形態では、同一ノード内に資源が競合する二つの複製プロセスを作成することはできないため、例えば、システムの複数のノード上でＷｅｂサーバを動かす場合には、それぞれの複製プロセスをＷｅｂサーバが動作する以外の別のノードでＷｅｂサーバの複製プロセスが含まれないノードに作成する必要があった。このため、少なくとも、Ｗｅｂサーバを動かすノードと同じ数のノードがＷｅｂサーバの複製プロセスを置くために必要であった。第３の実施形態の複製管理システムは、そのような複製プロセスのそれぞれ異なるノードへの作成を行う必要のない構成になっている。具体的には、図１に示した構成において、各ノードの複製管理部に代えて、同一ノード内での複製プロセス同士の資源競合を可能とする第２の複製管理部を具備する。これ以外の部分は、図１に示した構成と同じである。ここでは、説明を簡略化するために、第１の実施形態と異なる部分についてのみ説明する。
【０１１４】
第２の複製管理部は、図１に示した複製管理部と同様な機能を持つ。ただし、新たな複製プロセスを作成する、または、複製プロセスの状態を更新する際に、すでに自ノード上の別の複製プロセスが必要な資源を保持していて資源の競合が生じる場合には、複製プロセスに資源を上書きする代わりに、第２の複製管理テーブルに情報を記録する。
【０１１５】
第２の複製管理テーブルは、図２に示した複製管理テーブルの項目に加えて、自ノード上に存在する複数の複製プロセスによって保有される資源のうち、競合し得る資源（資源予約部が管理対象とする資源と同様）のリスト（競合リスト）の項目を含む。競合リストは、資源の種類、資源の識別子、資源を保持する複製プロセスのプロセス識別子を含む。この第２の複製管理テーブルは、第２の複製管理部が確保するメモリ中に配置されてもよく、また、ディスク装置や他の補助記憶装置に配置されてもよい。
【０１１６】
図１２に、第２の複製管理テーブルの一例を示す。この図１２に示す第２の複製管理テーブル１５８は、「Ｎｏｄｅ０１」に置かれたもの想定している。「複製先ノードの識別子と複製プロセスの識別子の組みのリスト」のフィールドは、「Ｎｏｄｅ０１」には複製プロセスとしてプロセス識別子が「１３７」と「２５７」のプロセスが存在することを示している。また、「競合し得る資源と保持するプロセスの組みのリスト」のフィールドは、複製プロセスのうち、プロセス識別子が「１３７」のプロセスが、ポート番号「８０」とセマフォＩＤ「３６４」という資源を利用しており、プロセス識別子が「２５７」のプロセスがポート番号「８０」とポート番号「８０８０」という資源を利用していることを示している。さらに、資源を保持する識別子を参照することで、ポート番号「８０」で表される資源については、保持しているのはプロセス識別子が「１３７」のプロセスであり、プロセス識別子が「２５７」のプロセスは参照しているだけであることがわかる。
【０１１７】
次に、本実施形態の複製管理システムの動作について説明する。前述した第１の実施形態との相違は、第２の複製管理部が、別のノードの第２の複製管理部から複製作製要求および複製更新要求を受けた時と複製プロセスを実体プロセスに昇格させる時の動作にあるため、以下では、その動作を中心に説明する。
【０１１８】
まず、第２の複製管理部が別のノードの第２の複製管理部から複製作成要求を受けたときの動作について説明する。
【０１１９】
図４のステップＳ１０５で送信された複製作製要求を受けた第２の複製管理部は、自ノードに複製プロセスを作成する。さらに、自身が管理する第２の管理テーブル１５８に複製プロセスが追加されたことを反映させる。この際、複製作製要求にプロセス状態として含まれている資源のうち競合し得る資源に関して、「競合し得る資源と保持するプロセスの組みのリスト」のフィールドに登録する。さらに、第２に複製管理テーブル１５８を検索して、その登録した資源を他の複製プロセスがすでに保有していないかどうか調べる。登録した資源を他の複製プロセスがすでに保有していた場合は、「競合し得る資源と保持するプロセスの組みのリスト」のフィールドに登録された内容のうち、競合した資源のプロセス識別子の部分をその資源を保有するプロセスの識別子で置き換える。登録した資源を他の複製プロセスが保有していない場合は、自ノード内の該当する複製プロセスにその資源を上書きする。
【０１２０】
次に、定期的な複製プロセスの更新処理における複製更新要求を受け取った場合の第２の複製管理部の動作について説明する。
【０１２１】
別のノードからの複製更新要求を受けた第２の複製管理部は、自身が管理する第２の複製管理テーブル１５８を参照して、指定された実体プロセスに対応する複製プロセスを見つけ、その複製プロセスに対して、送られて来たプロセス状態を上書きする。この際、複製更新要求にプロセス状態として含まれている資源のうち競合し得るものに関して、「複製管理テーブル１５８を検索して、その登録した資源を他競合し得る資源と保持するプロセスの組みのリスト」のフィールドに登録する。さらに、第２の複製プロセスがすでに保有していないかどうか調べる。登録した資源を他の複製プロセスがすでに保有していた場合は、「競合し得る資源と保持するプロセスの組みのリスト」のフィールドに登録された内容のうち、競合した資源のプロセス識別子の部分をその資源を保有するプロセスの識別子で置き換える。登録した資源を他の複製プロセスが保有していない場合は、自ノード内の該当する複製プロセスにその資源を上書きする。
【０１２２】
次に、複製プロセスを実体プロセスに昇格させる場合の第２の複製管理部の動作について説明する。
【０１２３】
ノード故障発生時のおよびプロセス故障発生時に、複製プロセスを実体プロセスに昇格させる場合の第２の複製管理部の動作は、複製管理部（１１１−１〜１１１−４）と比べて、複製プロセスを実体プロセスに昇格させた後の動作が異なる。以下では、異なる部分を中心に説明する。
【０１２４】
第２の複製管理部は、図４のステップＳ１０１〜Ｓ１０３と同様の処理を行う。図４のステップ１０３の判断で「Ｎｏ」となった場合は、処理を終了する。「Ｙｅｓ」となった場合は、自ノードの該当する複製プロセスを実体プロセスへと昇格させる（ステップＳ１０４）。この昇格したプロセスをＰpとする。
【０１２５】
ここでプロセスＰｐに関して、第２の複製管理テーブル１５８の該当するエントリから「競合し得る資源と保持するプロセスの組のリスト」を取得する。この「競合し得る資源と保持するプロセスの組のリスト」に含まれる資源のうち、プロセスＰｐが保持していない資源に関しては、それを保持しているプロセスから資源を移動させる。該資源を保持している複製プロセスは競合し得る資源と保持するプロセスの組のリスト」に「資源を保持するプロセス」として記録されている。ここで「資源を移動させる」とは、プロセス状態の一部をあるプロセスから別のプロセスに移すことである。実現方法としては、プロセスの複製を作成するときと同様の方法、すなわち、あるプロセスのプロセス情報を取得して、他のプロセスにそのプロセス状態を上書きする方法が使える。
【０１２６】
さらに、この「競合し得る資源と保持するプロセスの組のリスト」に含まれる資源に関して、それらの資源を共有する他の複製プロセスがないかを第２の複製管理テーブル１５８から検索する。資源を共有する他のプロセスが存在する場合、それらの複製プロセスをすべて終了させる。複製プロセスの終了は、故障検出部により検出されるため、終了させられた複製プロセスの代わりとなる複製プロセスは、「実施形態１」の「（２）ユーザプログラムの故障発生時の動作」に従って、他のノードに作成されることになる。
【０１２７】
以上の実施形態の複製管理システムによれば、同一ノード内に資源が競合する二つの複製プロセスを作成することが可能になる。これにより、システムに同種のサーバ、例えば、ポート番号８０を利用するＷｅｂサーバを動かす場合でも、１つのノードにこれらすべてのサーバの複製プロセスを置くことが可能になる。
【０１２８】
（実施形態４）
第１の実施形態では、複製プロセスが作成されたノードでは、そのメモリ内に、実体プロセスと同じだけのプロセスに関するメモリ領域が設定されるため、複数の複製プロセスを作成するためには、ノードのメモリ容量を大きくする必要がある。ここでは、そのようなメモリの大容量化を避ける構成について説明する。
【０１２９】
図１３は、本発明の第４の実施形態である複製管理システムの一構成例を示すブロック図である。この複製管理システムは、図１に示したシステムにおいて、各ノードの複製管理部１１１−１〜１１１−４に代えて複製管理部１２１−１〜１２１−４を具備するとともに、実体プロセスに関するメモリ領域の一部を格納するための外部記憶装置３００を新たに設けたものである。これ以外の構成は、図１のものと同じである。
【０１３０】
複製管理部（１２１−１〜１２１−４）は、第１の実施形態で述べた機能に加えて、自ノードの実体プロセスのメモリ領域の一部を外部記憶装置３００に書き出す機能を備える。外部記憶装置３００は、例えばディスク装置より構成されるものであって、ユーザプログラムＡ〜Ｃの実体プロセスのメモリ領域の一部を書き込むためのメモリ領域１３０ａ〜１３０ｃを有する。
【０１３１】
次に、本実施形態の複製管理システムの動作を説明する。複製管理部（１２１−１〜１２１−４）における定期的な動作が、第１の実施形態のものと異なる。以下、動作の異なる点を中心に説明する。
【０１３２】
複製管理部は、定期的に複製プロセスの更新を行う。定期的な処理が起動されたとき、複製管理部は、自身が管理する複製管理テーブルを検索して、自ノードに実体プロセスが存在するかを調べる。自ノードに実体プロセスが存在する場合、その実体プロセスに関して、まず、実体プロセスのメモリ領域のアクセス情報を調べて、一定時間アクセスされなかった部分を外部記憶装置１３０に書き出す。さらに、そのメモリ領域に関する情報を複製管理テーブルに記録する。
【０１３３】
次に、複製管理部は、自ノードの実体プロセスに関する複製プロセスを保有するノードに対して、複製更新要求を送信する。この複製更新要求には、第１の実施形態で説明した複製更新要求に加えて上記の一定時間アクセスされなかったメモリ領域に関する情報が含まれる。なお、他にもプロセス状態として、実体プロセスと複製プロセスの差分だけを送る方法もある。
【０１３４】
複製更新要求を受け取った別のノードの複製管理部は、自身が管理する複製管理テーブルを参照して、指定された実体プロセスに対応する複製プロセスを見つけ、その複製プロセスに対して、送られてきたプロセス状態を上書きする。プロセス状態として差分だけが送られてくる場合には、必要な部分だけを上書きする。さらに、上述した一定時間アクセスされなかったメモリ領域の情報に基づいて、複製プロセスの対応するメモリ領域を解放するとともに、そのことを複製管理テーブルに反映させる。
【０１３５】
上記の動作の他、複製管理部は、複製プロセスを実体プロセスへ昇格させる場合に、自身が管理する複製管理テーブルを参照して、外部記憶装置１３０に書き出されたメモリ領域を複製プロセスの対応する領域に書き込む。
【０１３６】
以上の本実施形態の複製管理システムによれば、複製プロセスが存在することによるメモリ消費を抑えることができる。これにより、メモリの有効利用が可能になる。
【０１３７】
（実施形態５）
上述した第１〜４の実施形態のものは、資源予約を行うようになっているが、そのような資源予約なしでも、他のプロセスの干渉なし、複製プロセスを確実に作製することもできる。ここでは、そのような動作を実現する第５の実施形態の複製管理システムを説明する。
【０１３８】
本第５の実施形態の複製管理システムは、第３の実施形態のシステムにおいて、各ノードが資源予約部を持たない構成になっており、各ノードの第３の複製管理部は、図４のステップＳ１０５を実行しない。また、ユーザプログラムが通常の動作を行っており、資源の取得や解放を行った場合の資源予約・予約取消処理も行われない。ユーザプログラムの開始終了時の資源予約・予約取消処理も行われない。これ以外は、第３の実施形態のものと同じである。
【０１３９】
特徴となる動作を簡単に説明すると、第３の複製管理部は、ユーザプログラムのいずれかの実体プロセスによって自ノードの資源が取得されると、その資源を取得した実体プロセスの複製プロセスを他のノードの少なくとも１つに作成する。また、第３の複製管理部は、同一ノード内に、同一資源を保有する、複数のユーザプログラムのうちの少なくとも２つの複製プロセスを作成するとともに、該複製プロセスの一つが実体プロセスに昇格すると、他の複製プロセスを削除する。この構成によれば、同一ノード内に複数の異なるユーザプログラムの複製プロセスを作成することができるため、資源の競合によって複製プロセスの作成が失敗することはない。
【０１４０】
（実施形態６）
上述した第５の実施形態のシステムにおいても、第４の実施形態で説明した構成（図１３参照）を適用することができる。すなわち、第３の複製管理部が、自ノードに存在する実体プロセスのメモリ領域の一部（一定時間アクセスされなかった部分）を、ネットワークに接続された外部記憶装置内に書き出すとともに、他のノード上の、対応する複製プロセスの状態を実体プロセスの状態に更新する際に、書き出されたメモリ領域を除く状態で更新させる。一方、更新がなされた他のノード上の第３の複製管理部は、自ノード内の対応する複製プロセスを実体プロセスに昇格させる場合に、該複製プロセスの対応する領域に、外部記憶装置に格納したメモリ領域の一部を書き込む。この場合も、複製プロセスが存在することによるメモリ消費を抑えることができ、メモリの有効利用が可能になる。
【産業上の利用可能性】
【０１４１】
本発明によれば、サービスの停止が経済的、社会的に大きな損害を与える可能性があり、プロセスの複製により高信頼を実現する情報システムにおいて、さらなる高信頼を実現するといった用途に適用できる。また、複数の情報サービスが混在するデータセンタにおいて、予備の計算資源（コンピュータ、メモリなど）を必要最低限に抑えながら、プロセスの複製による高信頼を実現するといった用途にも適用可能である。
【図面の簡単な説明】
【０１４２】
【図１】本発明の第１の実施形態である複製管理システムの主要部を示すブロック図である。
【図２】図１に示す複製管理システムにおいて用いられる複製管理テーブルの一例を示す図である。
【図３】図１に示す複製管理システムにおいて用いられる予約管理テーブルの一例を示す図である。
【図４】図１に示す複製管理システムにおける、ノード故障情報を受け取った複製管理部の動作を説明するためのフローチャートである。
【図５】図１に示す複製管理システムにおける、ノード取得要求を受けた資源予約部の動作を説明するためのフローチャートである。
【図６】図１に示す複製管理システムにおける、資源予約要求を受けた他ノードの資源予約部の資源予約応答動作を説明するためのフローチャートである。
【図７】図１に示す複製管理システムにおける、ユーザプログラムからの資源取得要求を検出した資源予約部の動作を説明するためのフローチャートである。
【図８】図１に示す複製管理システムの各ノードの、ノード故障発生に伴う状態の変化を説明するための図で、（ａ）はノード故障発生前の状態、（ｂ）はノード故障処理後の状態をそれぞれ説明するための図である。
【図９】図１に示す複製管理システムの複製管理部１１１−１が保有する複製管理テーブル１１８−１のノード故障発生に伴う状態の変化を説明するための図で、（ａ）はノード故障発生前の状態、（ｂ）はノード故障処理後の状態をそれぞれ説明するための図である。
【図１０】図１に示す複製管理システムの複製管理部１１１−４が保有する複製管理テーブル１１８−４のノード故障発生に伴う状態の変化を説明するための図で、（ａ）はノード故障発生前の状態、（ｂ）はノード故障処理後の状態をそれぞれ説明するための図である。
【図１１】図１に示す複製管理システムの各ノードの資源予約部が保有する予約管理テーブルのノード故障発生に伴う状態の変化を説明するための図で、（ａ）はノード故障発生前の状態、（ｂ）はノード故障処理後の状態をそれぞれ説明するための図である。
【図１２】本発明の第２の実施形態である複製管理システムにおいて用いられる第２の複製管理テーブルの一例を示す図である。
【図１３】本発明の第５の実施形態である複製管理システムの一構成例を示すブロック図である。
【符号の説明】
【０１４３】
１００-１〜１００-４    ノード
２００  ネットワーク
１１１−１〜１１１−４、１２１−１〜１２１−４    複製管理部
１１２−１〜１１２−４    資源予約部
１１８、１５８    複製管理テーブル
１１９    資源管理テーブル
１３０  外部記憶装置
１３０ａ〜１３０ｃ  メモリ領域
【図１】
2005190162.tif 000003
【図２】
2005190162.tif 000004
【図３】
2005190162.tif 000005
【図４】
2005190162.tif 000006
【図５】
2005190162.tif 000007
【図６】
2005190162.tif 000008
【図７】
2005190162.tif 000009
【図８】
2005190162.tif 000010
【図９】
2005190162.tif 000011
【図１０】
2005190162.tif 000012
【図１１】
2005190162.tif 000013
【図１２】
2005190162.tif 000014
【図１３】
2005190162.tif 000015