(57)【特許請求の範囲】
【請求項１】
複数のノードを有し、該複数の前記ノードは、データ操作要求を多重化して同じ前記データ操作要求を複数の前記ノードへ送信するデータ操作要求装置から前記データ操作要求を受信するデータ多重化システムであって、
複数の前記ノードからアクセス可能な共用記憶装置を有し、
各々の前記ノードは、
処理装置と、
永続記憶装置と、
一時記憶装置と
を有し、
前記永続記憶装置は、データレコードを記憶するデータレコード記憶部と前記データレコードの更新後ログを記憶する更新履歴記憶部とを有し、
前記処理装置は、
前記データ操作要求によって要求された操作を実行した前記データレコードの更新後ログを自ノードの前記一時記憶装置に書き込んだ時点で前記データ操作要求装置に対して応答を返すデータ操作手段と、
チェックポイント到来時、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログに基づいて自ノードの前記データレコード記憶部を更新し、また、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログを自ノードの前記更新履歴記憶部に書き込むと共に、前記更新履歴記憶部に書き込んだ最新の前記更新後ログを特定する情報を有するチェックポイント情報を前記共用記憶装置に書き込むチェックポイント処理手段と
を有する
データ多重化システム。
【請求項２】
各々の前記ノードの前記処理装置は、
障害の発生した前記ノードが書き込んだ前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報に基づいて障害の発生した前記ノードの前記一時記憶装置から消失した可能性のある前記更新後ログを決定し、該決定した前記更新後ログと同じ前記更新後ログを障害の発生した前記ノード以外の前記ノードの前記更新履歴記憶部および前記一時記憶装置から読み出し、障害回復用更新後ログとして、障害の発生した前記ノードへ送信する他ノード障害回復手段
を有する
請求項１に記載のデータ多重化システム。
【請求項３】
複数の前記ノードと前記共用記憶装置とに接続された管理装置を有し、
前記管理装置は、
障害の発生した前記ノードが書き込んだ前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報に基づいて障害の発生した前記ノードの前記一時記憶装置から消失した可能性のある前記更新後ログを決定し、該決定した前記更新後ログと同じ前記更新後ログを障害の発生した前記ノード以外の前記ノードの前記更新履歴記憶部および前記一時記憶装置から読み出し、障害回復用更新後ログとして、障害の発生した前記ノードへ送信する他ノード障害回復手段
を有する
請求項１に記載のデータ多重化システム。
【請求項４】
各々の前記ノードの前記処理装置は、
前記障害回復用更新後ログを受信し、該受信した前記障害回復用更新後ログを用いて自ノードの障害回復処理を行う障害回復手段
を有する
請求項２または３に記載のデータ多重化システム。
【請求項５】
前記データ操作要求は、前記データ操作要求を一意に識別する操作ＩＤを有し、
前記データ操作手段は、前記更新後ログの前記一時記憶装置への書き込みでは、前記更新後ログに対応する前記データ操作要求の有する前記操作ＩＤを前記更新後ログに付加して前記一時記憶装置に書き込み、
前記チェックポイント処理手段は、前記チェックポイント情報の前記共用記憶装置への書き込みでは、最新の前記更新後ログに付加された前記操作ＩＤを有する前記チェックポイント情報を前記共用記憶装置へ書き込む
請求項２乃至４の何れかに記載のデータ多重化システム。
【請求項６】
前記他ノード障害回復手段は、前記消失した可能性のある前記更新後ログの決定では、障害の発生した前記ノードが書き込んだ前記チェックポイント情報の前記操作ＩＤを前記共用記憶装置から読み出し、該読み出した前記操作ＩＤと同じ操作ＩＤを有する前記更新後ログ以降の更新後ログを、前記消失した可能性のある前記更新後ログに決定する
請求項５に記載のデータ多重化システム。
【請求項７】
前記データ操作要求は、当該データ操作要求を一意に識別する操作ＩＤを有し、
前記データ操作手段は、前記更新後ログの前記一時記憶装置への書き込みでは、前記更新後ログに対応する前記データ操作要求の有する前記操作ＩＤを前記更新後ログに付加して前記一時記憶装置に書き込み、
前記チェックポイント処理手段は、前記チェックポイント情報の前記共用記憶装置への書き込みでは、前記更新履歴記憶部に書き込んだ前記更新後ログに付加された前記操作ＩＤのリストとチェックポイント時刻とを有する前記チェックポイント情報を前記共用記憶装置へ書き込む
請求項２乃至４の何れかに記載のデータ多重化システム。
【請求項８】
前記他ノード障害回復手段は、前記消失した可能性のある前記更新後ログの決定では、前記障害回復用更新後ログを取得する前記ノードを障害回復用ノードと呼ぶとき、障害の発生した前記ノードが最後に書き込んだ前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報中の前記更新後ログのリストから最新の前記更新後ログの前記操作ＩＤを読み出し、前記障害回復用ノードの前記チェックポイント情報のうち前記読み出した前記操作ＩＤと同じ前記操作ＩＤを前記リスト中に有する前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報の一つ前のチェックポイントで書き込まれた前記障害回復用ノードの前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報中のチェックポイント時刻に所定時間を加えた時刻より古く且つ当該時刻に最も近いチェックポイント時刻を有する前記障害回復用ノードの前記チェックポイント情報を前記共用記憶装置から検索し、該検索したチェックポイント情報中の前記リストに記載される最新の前記更新後ログ以降の前記障害回復用ノード上の前記更新後ログを、前記消失した可能性のある前記更新後ログに決定する
請求項７に記載のデータ多重化システム。
【請求項９】
前記所定時間は、前記データ操作要求装置が、複数の前記ノードのうちの最初の前記ノードへ前記データ操作要求を送信してから同じ前記データ操作要求を前記複数の前記ノードのうちの最後の前記ノードへ送信するまでの時間を二倍した時間である
請求項８に記載のデータ多重化システム。
【請求項１０】
それぞれが処理装置と永続記憶装置と一時記憶装置とを有する複数のノードと、該複数の前記ノードからアクセス可能な共用記憶装置とを有し、複数の前記ノードは、データ操作要求を多重化して同じ前記データ操作要求を複数の前記ノードへ送信するデータ操作要求装置から前記データ操作要求を受信し、前記永続記憶装置は、データレコードを記憶するデータレコード記憶部と前記データレコードの更新後ログを記憶する更新履歴記憶部とを有するデータ多重化システムにおけるデータ多重化方法であって、
各々の前記ノードの前記処理装置が、前記データ操作要求によって要求された操作を実行した前記データレコードの更新後ログを自ノードの前記一時記憶装置に書き込んだ時点で前記データ操作要求装置に対して応答を返し、
各々の前記ノードの前記処理装置が、チェックポイント到来時、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログに基づいて自ノードの前記データレコード記憶部を更新し、また、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログを自ノードの前記更新履歴記憶部に書き込むと共に、前記更新履歴記憶部に書き込んだ最新の前記更新後ログを特定する情報を有するチェックポイント情報を前記共用記憶装置に書き込む
データ多重化方法。
【請求項１１】
データ操作要求を多重化して送信するデータ操作要求装置と、他のノード装置と共用する共用記憶装置とに接続されるノード装置であって、
処理装置と、
永続記憶装置と、
一時記憶装置と
を有し、
前記永続記憶装置は、データレコードを記憶するデータレコード記憶部と前記データレコードの更新後ログを記憶する更新履歴記憶部とを有し、
前記処理装置は、
前記データ操作要求によって要求された操作を実行した前記データレコードの更新後ログを自ノードの前記一時記憶装置に書き込んだ時点で前記データ操作要求装置に対して応答を返すデータ操作手段と、
チェックポイント到来時、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログに基づいて自ノードの前記データレコード記憶部を更新し、また、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログを自ノードの前記更新履歴記憶部に書き込むと共に、前記更新履歴記憶部に書き込んだ最新の前記更新後ログを特定する情報を有するチェックポイント情報を前記共用記憶装置に書き込むチェックポイント処理手段と
を有する
ノード装置。
【請求項１２】
各々の前記ノードの前記処理装置は、
障害の発生した前記ノードが書き込んだ前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報に基づいて障害の発生した前記ノードの前記一時記憶装置から消失した可能性のある前記更新後ログを決定し、該決定した前記更新後ログと同じ前記更新後ログを障害の発生した前記ノード以外の前記ノードの前記更新履歴記憶部および前記一時記憶装置から読み出し、障害回復用更新後ログとして、障害の発生した前記ノードへ送信する他ノード障害回復手段
を有する
請求項１１に記載のノード装置。
【請求項１３】
各々の前記ノードの前記処理装置は、
前記障害回復用更新後ログを受信し、該受信した前記障害回復用更新後ログを用いて自ノードの障害回復処理を行う障害回復手段
を有する
請求項１２に記載のノード装置。
【請求項１４】
前記データ操作要求は、前記データ操作要求を一意に識別する操作ＩＤを有し、
前記データ操作手段は、前記更新後ログの前記一時記憶装置への書き込みでは、前記更新後ログに対応する前記データ操作要求の有する前記操作ＩＤを前記更新後ログに付加して前記一時記憶装置に書き込み、
前記チェックポイント処理手段は、前記チェックポイント情報の前記共用記憶装置への書き込みでは、最新の前記更新後ログに付加された前記操作ＩＤを有する前記チェックポイント情報を前記共用記憶装置へ書き込む
請求項１２または１３に記載のノード装置。
【請求項１５】
前記他ノード障害回復手段は、前記消失した可能性のある前記更新後ログの決定では、障害の発生した前記ノードが書き込んだ前記チェックポイント情報の前記操作ＩＤを前記共用記憶装置から読み出し、該読み出した前記操作ＩＤと同じ操作ＩＤを有する前記更新後ログ以降の更新後ログを、前記消失した可能性のある前記更新後ログに決定する
請求項１４に記載のノード装置。
【請求項１６】
前記データ操作要求は、当該データ操作要求を一意に識別する操作ＩＤを有し、
前記データ操作手段は、前記更新後ログの前記一時記憶装置への書き込みでは、前記更新後ログに対応する前記データ操作要求の有する前記操作ＩＤを前記更新後ログに付加して前記一時記憶装置に書き込み、
前記チェックポイント処理手段は、前記チェックポイント情報の前記共用記憶装置への書き込みでは、前記更新履歴記憶部に書き込んだ前記更新後ログに付加された前記操作ＩＤのリストとチェックポイント時刻とを有する前記チェックポイント情報を前記共用記憶装置へ書き込む
請求項１２乃至１５の何れかに記載のノード装置。
【請求項１７】
前記他ノード障害回復手段は、前記消失した可能性のある前記更新後ログの決定では、前記障害回復用更新後ログを取得する前記ノードを障害回復用ノードと呼ぶとき、障害の発生した前記ノードが最後に書き込んだ前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報中の前記更新後ログのリストから最新の前記更新後ログの前記操作ＩＤを読み出し、前記障害回復用ノードの前記チェックポイント情報のうち前記読み出した前記操作ＩＤと同じ前記操作ＩＤを前記リスト中に有する前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報の一つ前のチェックポイントで書き込まれた前記障害回復用ノードの前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報中のチェックポイント時刻に所定時間を加えた時刻より古く且つ当該時刻に最も近いチェックポイント時刻を有する前記障害回復用ノードの前記チェックポイント情報を前記共用記憶装置から検索し、該検索したチェックポイント情報中の前記リストに記載される最新の前記更新後ログ以降の前記障害回復用ノード上の前記更新後ログを、前記消失した可能性のある前記更新後ログに決定する
請求項１６に記載のノード装置。
【請求項１８】
前記所定時間は、前記データ操作要求装置が、複数の前記ノードのうちの最初の前記ノードへ前記データ操作要求を送信してから同じ前記データ操作要求を前記複数の前記ノードのうちの最後の前記ノードへ送信するまでの時間を二倍した時間である
請求項１７に記載のノード装置。
【請求項１９】
複数のノードと、複数の前記ノードからアクセス可能な共用記憶装置とを有し、各々の前記ノードは、処理装置と永続記憶装置と一時記憶装置とを有し、データ操作要求を多重化して同じ前記データ操作要求を複数の前記ノードへ送信するデータ操作要求装置から前記データ操作要求を受信し、前記永続記憶装置は、データレコードを記憶するデータレコード記憶部と前記データレコードの更新後ログを記憶する更新履歴記憶部とを有し、前記処理装置は、前記データ操作要求によって要求された操作を実行した前記データレコードの更新後ログを自ノードの前記一時記憶装置に書き込んだ時点で前記データ操作要求装置に対して応答を返すデータ操作手段と、チェックポイント到来時、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログに基づいて自ノードの前記データレコード記憶部を更新し、また、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログを自ノードの前記更新履歴記憶部に書き込むと共に、前記更新履歴記憶部に書き込んだ最新の前記更新後ログを特定する情報を有するチェックポイント情報を前記共用記憶装置に書き込むチェックポイント処理手段とを有する、データ多重化システムにおける前記複数のノードと前記共用記憶装置とに接続された管理装置であって、
障害の発生した前記ノードが書き込んだ前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報に基づいて障害の発生した前記ノードの前記一時記憶装置から消失した可能性のある前記更新後ログを決定し、該決定した前記更新後ログと同じ前記更新後ログを障害の発生した前記ノード以外の前記ノードの前記更新履歴記憶部および前記一時記憶装置から読み出し、障害回復用更新後ログとして、障害の発生した前記ノードへ送信する他ノード障害回復手段
を有する
管理装置。
【請求項２０】
データ操作要求を多重化して送信するデータ操作要求装置と、他のノード装置と共用する共用記憶装置とに接続され、処理装置と、永続記憶装置と、一時記憶装置とを有し、前記永続記憶装置は、データレコードを記憶するデータレコード記憶部と前記データレコードの更新後ログを記憶する更新履歴記憶部とを有するノード装置の前記処理装置を構成するコンピュータを、
前記データ操作要求によって要求された操作を実行した前記データレコードの更新後ログを自ノードの前記一時記憶装置に書き込んだ時点で前記データ操作要求装置に対して応答を返すデータ操作手段と、
チェックポイント到来時、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログに基づいて自ノードの前記データレコード記憶部を更新し、また、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログを自ノードの前記更新履歴記憶部に書き込むと共に、前記更新履歴記憶部に書き込んだ最新の前記更新後ログを特定する情報を有するチェックポイント情報を前記共用記憶装置に書き込むチェックポイント処理手段と
して機能させるためのプログラム。
【請求項２１】
複数のノードと、複数の前記ノードからアクセス可能な共用記憶装置とを有し、各々の前記ノードは、処理装置と永続記憶装置と一時記憶装置とを有し、データ操作要求を多重化して同じ前記データ操作要求を複数の前記ノードへ送信するデータ操作要求装置から前記データ操作要求を受信し、前記永続記憶装置は、データレコードを記憶するデータレコード記憶部と前記データレコードの更新後ログを記憶する更新履歴記憶部とを有し、前記処理装置は、前記データ操作要求によって要求された操作を実行した前記データレコードの更新後ログを自ノードの前記一時記憶装置に書き込んだ時点で前記データ操作要求装置に対して応答を返すデータ操作手段と、チェックポイント到来時、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログに基づいて自ノードの前記データレコード記憶部を更新し、また、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログを自ノードの前記更新履歴記憶部に書き込むと共に、前記更新履歴記憶部に書き込んだ最新の前記更新後ログを特定する情報を有するチェックポイント情報を前記共用記憶装置に書き込むチェックポイント処理手段とを有する、データ多重化システムにおける前記複数のノードと前記共用記憶装置とに接続された管理装置を構成するコンピュータを、
障害の発生した前記ノードが書き込んだ前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報に基づいて障害の発生した前記ノードの前記一時記憶装置から消失した可能性のある前記更新後ログを決定し、該決定した前記更新後ログと同じ前記更新後ログを障害の発生した前記ノード以外の前記ノードの前記更新履歴記憶部および前記一時記憶装置から読み出し、障害回復用更新後ログとして、障害の発生した前記ノードへ送信する他ノード障害回復手段
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ多重化システム、データ多重化方法、ノード装置、管理装置、およびプログラムに関する。
【背景技術】
【０００２】
データベースに蓄積されたデータの消失に備えてデータを多重化するデータ多重化システムが提案ないし実用化されている。【０００３】
例えば、アプリケーションサーバがデータ操作要求を多重化して同じデータ操作要求を複数のノードへ送信し、各々のノードが同じデータ操作要求を処理することにより、複数のノードに蓄積されるデータを同一にすることが本発明に関連する第１の関連技術として提案されている（例えば特許文献１参照）。また、ＫＶＳ（キーバリューストア）を対象とし、同一のデータを複数のノードに多重化して記憶することが本発明に関連する第２の関連技術として提案されている（例えば特許文献２参照）。【０００４】
一方、データ操作要求の処理に伴う永続記憶装置へのアクセス回数を削減する手法として、ＷＡＬ（Ｗｒｉｔｅ  Ａｈｅａｄ  Ｌｏｇｇｉｎｇ）と呼ばれるログ先行書き込み方式がある。ＷＡＬでは、データレコードの更新後ログの書き込み完了をもってデータ操作要求に係る処理の完了（コミット）とみなし、データレコードに対する実際の更新は上記更新後ログに基づいて後のチェックポイント時に行う。例えば、トランザクション処理にＷＡＬを採用し、更新後ログはトランザクションのコミット時に永続記憶装置に書き込み、実データはチェックポイント時にデータベースに書き込むことが本発明に関連する第３の関連技術として提案されている（例えば特許文献３参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第５０５０３５８号公報
【特許文献２】特表２０１０−５０１９４２号公報
【特許文献３】特開２０１２−２３４５０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記第１または第２の関連技術に見られるようなデータ多重化システムの処理効率を高めるために、上記第３の関連技術に見られるようなＷＡＬ方式をデータ多重化システムの各ノードに適用することが考えられる。しかし、上記第３の関連技術に見られるようにデータレコードの更新後ログを永続記憶装置に書き込むＷＡＬ方式では、更新後ログを永続記憶装置に書き込む処理がオーバーヘッドになる。このオーバーヘッドは、永続記憶装置に比べてアクセス速度の速い一時記憶装置に更新後ログを書き込むようにすれば軽減できる。しかし、更新後ログを一時記憶装置に書き込むようにすると、ノードで障害が発生した場合に一時記憶装置上の更新後ログが消失する。このため、障害の発生したノードでは更新後ログに基づく実際のデータの更新が行えない。他方、障害の発生していないノードでは更新後ログに基づいて実際のデータが更新される。従って、データ多重化システムを構成する複数のノード間で保持するデータに不一致が発生する。このようなデータの不整合を是正する一つの方法は、障害の発生したノードにおいて消失した更新後ログを障害の発生していない他のノードから取得し、この取得した更新後ログを用いて障害の発生したノードで障害回復処理を行うことである。しかしながら、障害の発生したノードにおいて消失した更新後ログを他のノードから速やかに特定することは困難である。【０００７】
本発明の目的は、上述した課題、すなわち、障害の発生したノードにおいて消失した更新後ログを他のノードから速やかに特定することは困難である、という課題を解決するデータ多重化システムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明の第１の観点に係るデータ多重化システムは、
複数のノードを有し、該複数の前記ノードは、データ操作要求を多重化して同じ前記データ操作要求を複数の前記ノードへ送信するデータ操作要求装置から前記データ操作要求を受信するデータ多重化システムであって、
複数の前記ノードからアクセス可能な共用記憶装置を有し、
各々の前記ノードは、
処理装置と、
永続記憶装置と、
一時記憶装置と
を有し、
前記永続記憶装置は、データレコードを記憶するデータレコード記憶部と前記データレコードの更新後ログを記憶する更新履歴記憶部とを有し、
前記処理装置は、
前記データ操作要求によって要求された操作を実行した前記データレコードの更新後ログを自ノードの前記一時記憶装置に書き込んだ時点で前記データ操作要求装置に対して応答を返すデータ操作手段と、
チェックポイント到来時、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログに基づいて自ノードの前記データレコード記憶部を更新し、また、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログを自ノードの前記更新履歴記憶部に書き込むと共に、前記更新履歴記憶部に書き込んだ最新の前記更新後ログを特定する情報を有するチェックポイント情報を前記共用記憶装置に書き込むチェックポイント処理手段と
を有する。【０００９】
本発明の第２の観点にかかるデータ多重化方法は、
それぞれが処理装置と永続記憶装置と一時記憶装置とを有する複数のノードと、該複数の前記ノードからアクセス可能な共用記憶装置とを有し、複数の前記ノードは、データ操作要求を多重化して同じ前記データ操作要求を複数の前記ノードへ送信するデータ操作要求装置から前記データ操作要求を受信し、前記永続記憶装置は、データレコードを記憶するデータレコード記憶部と前記データレコードの更新後ログを記憶する更新履歴記憶部とを有するデータ多重化システムにおけるデータ多重化方法であって、
各々の前記ノードの前記処理装置が、前記データ操作要求によって要求された操作を実行した前記データレコードの更新後ログを自ノードの前記一時記憶装置に書き込んだ時点で前記データ操作要求装置に対して応答を返し、
各々の前記ノードの前記処理装置が、チェックポイント到来時、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログに基づいて自ノードの前記データレコード記憶部を更新し、また、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログを自ノードの前記更新履歴記憶部に書き込むと共に、前記更新履歴記憶部に書き込んだ最新の前記更新後ログを特定する情報を有するチェックポイント情報を前記共用記憶装置に書き込む。【００１０】
本発明の第３の観点に係るノード装置は、
データ操作要求を多重化して送信するデータ操作要求装置と、他のノード装置と共用する共用記憶装置とに接続されるノード装置であって、
処理装置と、
永続記憶装置と、
一時記憶装置と
を有し、
前記永続記憶装置は、データレコードを記憶するデータレコード記憶部と前記データレコードの更新後ログを記憶する更新履歴記憶部とを有し、
前記処理装置は、
前記データ操作要求によって要求された操作を実行した前記データレコードの更新後ログを自ノードの前記一時記憶装置に書き込んだ時点で前記データ操作要求装置に対して応答を返すデータ操作手段と、
チェックポイント到来時、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログに基づいて自ノードの前記データレコード記憶部を更新し、また、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログを自ノードの前記更新履歴記憶部に書き込むと共に、前記更新履歴記憶部に書き込んだ最新の前記更新後ログを特定する情報を有するチェックポイント情報を前記共用記憶装置に書き込むチェックポイント処理手段と
を有する。【００１１】
本発明の第４の観点に係る管理装置は、
複数のノードと、複数の前記ノードからアクセス可能な共用記憶装置とを有し、各々の前記ノードは、処理装置と永続記憶装置と一時記憶装置とを有し、データ操作要求を多重化して同じ前記データ操作要求を複数の前記ノードへ送信するデータ操作要求装置から前記データ操作要求を受信し、前記永続記憶装置は、データレコードを記憶するデータレコード記憶部と前記データレコードの更新後ログを記憶する更新履歴記憶部とを有し、前記処理装置は、前記データ操作要求によって要求された操作を実行した前記データレコードの更新後ログを自ノードの前記一時記憶装置に書き込んだ時点で前記データ操作要求装置に対して応答を返すデータ操作手段と、チェックポイント到来時、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログに基づいて自ノードの前記データレコード記憶部を更新し、また、自ノードの前記一時記憶装置に記憶されている前記データレコードの更新後ログを自ノードの前記更新履歴記憶部に書き込むと共に、前記更新履歴記憶部に書き込んだ最新の前記更新後ログを特定する情報を有するチェックポイント情報を前記共用記憶装置に書き込むチェックポイント処理手段とを有する、データ多重化システムにおける前記複数のノードと前記共用記憶装置とに接続された管理装置であって、
障害の発生した前記ノードが書き込んだ前記チェックポイント情報を前記共用記憶装置から読み出し、該読み出した前記チェックポイント情報に基づいて障害の発生した前記ノードの前記一時記憶装置から消失した可能性のある前記更新後ログを決定し、該決定した前記更新後ログと同じ前記更新後ログを障害の発生した前記ノード以外の前記ノードの前記更新履歴記憶部および前記一時記憶装置から読み出し、障害回復用更新後ログとして、障害の発生した前記ノードへ送信する他ノード障害回復手段
を有する。【００１２】
本発明の第５の観点に係るプログラムは、
データ操作要求を多重化して送信するデータ操作要求装置と、他のノード装置と共用する共用記憶装置とに接続され、処理装置と、永続記憶装置と、一時記憶装置とを有し、上記永続記憶装置は、データレコードを記憶するデータレコード記憶部と上記データレコードの更新後ログを記憶する更新履歴記憶部とを有するノード装置の上記処理装置を構成するコンピュータを、
上記データ操作要求によって要求された操作を実行した上記データレコードの更新後ログを自ノードの上記一時記憶装置に書き込んだ時点で上記データ操作要求装置に対して応答を返すデータ操作手段と、
チェックポイント到来時、自ノードの上記一時記憶装置に記憶されている上記データレコードの更新後ログに基づいて自ノードの上記データレコード記憶部を更新し、また、自ノードの上記一時記憶装置に記憶されている上記データレコードの更新後ログを自ノードの上記更新履歴記憶部に書き込むと共に、上記更新履歴記憶部に書き込んだ最新の上記更新後ログを特定する情報を有するチェックポイント情報を上記共用記憶装置に書き込むチェックポイント処理手段と
して機能させる。【００１３】
本発明の第６の観点に係るプログラムは、
複数のノードと、複数の上記ノードからアクセス可能な共用記憶装置とを有し、各々の上記ノードは、処理装置と永続記憶装置と一時記憶装置とを有し、データ操作要求を多重化して同じ上記データ操作要求を複数の上記ノードへ送信するデータ操作要求装置から上記データ操作要求を受信し、上記永続記憶装置は、データレコードを記憶するデータレコード記憶部と上記データレコードの更新後ログを記憶する更新履歴記憶部とを有し、上記処理装置は、上記データ操作要求によって要求された操作を実行した上記データレコードの更新後ログを自ノードの上記一時記憶装置に書き込んだ時点で上記データ操作要求装置に対して応答を返すデータ操作手段と、チェックポイント到来時、自ノードの上記一時記憶装置に記憶されている上記データレコードの更新後ログに基づいて自ノードの上記データレコード記憶部を更新し、また、自ノードの上記一時記憶装置に記憶されている上記データレコードの更新後ログを自ノードの上記更新履歴記憶部に書き込むと共に、上記更新履歴記憶部に書き込んだ最新の上記更新後ログを特定する情報を有するチェックポイント情報を上記共用記憶装置に書き込むチェックポイント処理手段とを有する、データ多重化システムにおける上記複数のノードと上記共用記憶装置とに接続された管理装置を構成するコンピュータを、
障害の発生した上記ノードが書き込んだ上記チェックポイント情報を上記共用記憶装置から読み出し、該読み出した上記チェックポイント情報に基づいて障害の発生した上記ノードの上記一時記憶装置から消失した可能性のある上記更新後ログを決定し、該決定した上記更新後ログと同じ上記更新後ログを障害の発生した上記ノード以外の上記ノードの上記更新履歴記憶部および上記一時記憶装置から読み出し、障害回復用更新後ログとして、障害の発生した上記ノードへ送信する他ノード障害回復手段
として機能させる。
【発明の効果】
【００１４】
本発明は上述した構成を有するため、障害の発生したノードにおいて消失した更新後ログを他ノードから速やかに特定することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施形態に係るデータ多重化システムのブロック図である。
【図２】本発明の第１の実施形態に係るデータ多重化システムの各部の状態の一例を示す模式図である。
【図３】本発明の第１の実施形態に係るデータ多重化システムにおいてノードに障害が発生した状況の一例を示す模式図である。
【図４】本発明の第２の実施形態に係るデータ多重化システムのブロック図である。
【図５】本発明の第２の実施形態における他ノード障害回復部の処理例を示すフローチャートである。
【図６】本発明の第２の実施形態における障害回復部の処理例を示すフローチャートである。
【図７】本発明の第３の実施形態に係るデータ多重化システムのブロック図である。
【図８】本発明の第３の実施形態におけるデータ操作部の処理例を示すフローチャートである。
【図９】本発明の第４の実施形態に係るデータ多重化システムのブロック図である。
【図１０】本発明の第４の実施形態におけるデータ操作部の処理例を示すフローチャートである。
【図１１】本発明の第４の実施形態における他ノード障害回復部の処理例を示すフローチャートである。
【図１２】本発明の第４の実施形態において障害の発生したノードで消失する可能性のある更新後ログに関する説明図である。
【図１３】本発明の第５の実施形態に係るデータ多重化システムのブロック図である。
【発明を実施するための形態】
【００１６】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００１７】
[第１の実施形態]
図１を参照すると、本発明の第１の実施形態に係るデータ多重化システム１００は、ノード１１０とノード１２０とデータ操作要求装置１３０と共用記憶装置１４０とがネットワーク１５０を通じて相互に接続されている。本実施形態では、ＫＶＳを対象とし、同一のＫＶデータを２台のノードに多重化して記憶する多重化システムについて説明する。但し、本発明はＫＶＳに限定されず、リレーショナルデータベース等の他の種類のデータベースの多重化に対しても適用可能である。また、ノードは２台に限定されず、３台以上であってもよい。
【００１８】
データ操作要求装置１３０は、データ操作要求をノード１１０、１２０に対してネットワーク１５０を通じて送信し、またノード１１０、１２０から上記データ操作要求に対する応答を受信する機能を有する。データ操作要求装置１３０は、データ操作要求の送信では、データ操作要求を多重化し、同じデータ操作要求をノード１１０とノード１２０とに同時に送信する。
【００１９】
データ操作要求で要求する操作には、ＰＵＴ操作、ＧＥＴ操作、ＤＥＬＥＴＥ操作の種別がある。ＰＵＴ操作はキーとバリューを指定した書き込み操作、ＧＥＴ操作はキーに対応したデータの読み込み操作、ＤＥＬＥＴＥ操作はキーを指定したデータの削除操作である。本実施形態では、ＰＵＴ操作とＤＥＬＥＴＥ操作に係るデータ操作要求には、データ多重化システム１００で一意に識別可能な識別子を付加する。本明細書では、この識別子を操作ＩＤと定義する。操作ＩＤとしては、操作対象とするデータのキー値とバージョン情報の組み合わせ、或いはデータ操作要求装置１３０で採番した順序番号を使用することができる。
【００２０】
ノード１１０は、データ操作要求装置１３０から受信したデータ操作要求に従って、自ノードの保有するデータを操作し、その操作結果をデータ操作要求装置１３０へ返却する機能を有する。ノード１１０は、処理装置１１１と永続記憶装置１１２と一時記憶装置１１３と通信装置１１４とを有する。
【００２１】
通信装置１１４は、専用のデータ通信回路からなり、ネットワーク１５０を介して接続されたデータ操作要求装置１３０、他のノード１２０、および共用記憶装置１４０などの各種装置との間でデータ通信を行う機能を有している。
【００２２】
永続記憶装置１１２は、ハードディスク装置などの不揮発性記憶装置で構成される。永続記憶装置１１２は、更新履歴記憶部１１２１とデータレコード記憶部１１２２とを有する。データレコード記憶部１１２２は、データレコード１１２２１を記憶する。各々のデータレコードは、ＫＶデータである。ＫＶデータは、キーとバリューとから構成される。バリューは値とバージョン情報とを有する。このバージョン情報は、ＣＡＳ（Ｃｏｍｐａｒｅ−Ａｎｄ−Ｓｗａｐ）命令によるアトミックなデータ書き込みの制御に使用される。更新履歴記憶部１１２１は、データレコード１１２２１に対する更新後ログ１１２１１を記憶する。更新後ログ１１２１１もまた、ＫＶデータである。すなわち、永続記憶装置１１２はＫＶＳである。
【００２３】
一時記憶装置１１３は、ＲＡＭなどの不揮発性記憶装置で構成される。一時記憶装置１１３には、ＷＡＬ方式における更新後ログ１１３１が書き出される。更新後ログ１１３１には、当該更新後ログ１１３１に対応するデータ操作要求に付加されていた操作ＩＤと同じ操作ＩＤが付加される。これによって、更新後ログ１１３１とデータ操作要求との対応関係が明確になる。なお、更新後ログ１１３１の時間的な順序は、一時記憶装置１１３および永続記憶装置１１２上における更新後ログ１１３１の記憶順序によって特定される。また各々の更新後ログ１１３１は、１つのＫＶデータで構成される。
【００２４】
処理装置１１１は、データ操作部１１１１とチェックポイント処理部１１１２とを有する。
【００２５】
データ操作部１１１１は、データ操作要求装置１３０から受信したデータ操作要求を実行する機能を有する。データ操作部１１１１は、データ操作要求装置１３０から受信したデータ操作要求の種別がＰＵＴ操作およびＤＥＬＥＴＥ操作の場合、ＷＡＬ方式で実行する。すなわち、データ操作部１１１１は、ＰＵＴ操作およびＤＥＬＥＴＥ操作を実行したデータレコードの更新後ログ１１３１を一時記憶装置１１３に書き込んだ時点でＰＵＴ操作およびＤＥＬＥＴＥ操作の完了（コミット）とみなし、データ操作要求装置１３０に対して応答を返す。実際のデータに対するＰＵＴ操作およびＤＥＬＥＴＥ操作は、後述するチェックポイント処理にて実施される。
【００２６】
また、データ操作部１１１１は、受信したデータ操作要求の種別がＧＥＴ操作の場合、ＧＥＴ操作で指定されたキーを持つＫＶデータを一時記憶装置１１３中のより新しい更新後ログ１１３１から順に検索し、要求元のデータ操作要求装置１３０へ返却する。若し、ＧＥＴ操作で指定されたキーを持つＫＶデータが一時記憶装置１１３の更新後ログ１１３１に存在しなければ、データレコード記憶部１１２２からＧＥＴ操作で指定されたキーを持つＫＶデータを検索し、要求元のデータ操作要求装置１３０へ返却する。
【００２７】
チェックポイント処理部１１１２は、適切な契機もしくは間隔でチェックポイント処理を実行する機能を有する。チェックポイント処理部１１１２は、チェックポイント処理では、一時記憶装置１１３に記憶されている更新後ログ１１３１を更新時刻のより古いものから順番に取り出し、以下の処理を実行する。まず、チェックポイント処理部１１１２は、取り出した更新後ログ１１３１を永続記憶装置１１２の更新履歴記憶部１１２１に書き込むと共に、この書き込んだ更新後ログ１１３１に関する情報（以下、チェックポイント情報と呼ぶ）を通信装置１１４を通じて共用記憶装置１４０に書き込み、次に、当該更新後ログ１１３１に基づいて、永続記憶装置１１２のデータレコード記憶部１１２２を更新する。共用記憶装置１４０に書き込むチェックポイント情報は、更新履歴記憶部１１２１に書き込んだ更新後ログ１１３１を特定できる情報であれば任意でよい。本実施形態では、更新履歴記憶部１１２１に書き込んだ更新後ログ１１３１中の操作ＩＤをチェックポイント情報とする。なお、チェックポイント処理時に一時記憶装置１１３に複数の更新後ログ１１３１が記憶されている場合、その更新時刻のより古いものから順番にチェックポイント情報を共用記憶装置１４０に上書きしていくと、上記複数の更新後ログ１１３１のうちの最新の更新後ログ１１３１の操作ＩＤだけが共用記憶装置１４０に記録されることになる。勿論、上書きでなく追記していくことで、更新後ログ１１３１の操作ＩＤの履歴を共用記憶装置１４０に記憶するようにしてもよい。
【００２８】
ノード１２０は、ノード１１０と同じ構成および機能を有する。すなわち、ノード１２０を構成する処理装置１２１と永続記憶装置１２２と一時記憶装置１２３と通信装置１２４は、ノード１１０を構成する処理装置１１１と永続記憶装置１１２と一時記憶装置１１３と通信装置１１４と同じ構成および機能を有する。また、処理装置１２１を構成するデータ操作部１２１１とチェックポイント処理部１２１２とは、処理装置１１１を構成するデータ操作部１１１１とチェックポイント処理部１１１２と同じ機能を有する。さらに、永続記憶装置１２２の更新履歴記憶部１２２１とデータレコード記憶部１２２２とは、永続記憶装置１１２の更新履歴記憶部１１２１とデータレコード記憶部１１２２と同じ機能を有する。このため、データ操作要求装置１３０から同じデータ操作要求が２台のノード１１０、１２０に送信された場合には、双方のノード１１０、１２０で同じ処理が行われるようになっている。
【００２９】
共用記憶装置１４０は、ハードディスク装置などの不揮発性記憶装置で構成される。共用記憶装置１４０は、ノード１１０に対応する記憶域１４１とノード１２０に対応する記憶域１４２とを有する。記憶域１４１は、ノード１１０のチェックポイント情報を記憶するために使用され、記憶域１４２は、ノード１２０のチェックポイント情報を記憶するために使用される。
【００３０】
次に本実施形態に係るデータ多重化システム１００の動作を説明する。
【００３１】
データ操作要求装置１３０は、データ操作要求をノード１１０に対して送信する場合、同じデータ操作要求を他のノード１２０に対しても送信する。なお、データ操作要求の多重化は、全ての種別のデータ操作要求に対して行ってもよいし、ＰＵＴ操作とＤＥＬＥＴＥ操作で多重化を行い、ＧＥＴ操作は何れか一方のノードに対して送信するようにしてもよい。
【００３２】
データ操作要求装置１３０から送信されたデータ操作要求がノード１１０、１２０においてどのように処理されるかについて、ＰＵＴ操作を例に挙げて説明する。より具体的には、先行するＧＥＴ操作によってノード１１０（または１２０）から取得したデータＡのバリューを更新してＰＵＴ操作でノード１１０、１２０に保存する場合を例に挙げて説明する。なお、データＡのキーはｋｅｙ１、ＧＥＴ時のバリューのバージョン情報は１、更新後のバージョン情報は２とする。
【００３３】
データ操作要求装置１３０は、更新後データのＰＵＴ操作にかかるデータ操作要求をネットワーク１５０を通じてノード１１０とノード１２０とに対して送信する。
【００３４】
ノード１１０では、上記データ操作要求は通信装置１１４で受信されて処理装置１１１のデータ操作部１１１１に伝達される。データ操作部１１１１は、データ操作要求に含まれる操作対象データのキーｋｅｙ１を有する最新の更新後ログ１１３１を一時記憶装置１１３から検索する。そして、検索に成功すると、その更新後ログ１１３１中のバージョン情報がＧＥＴ操作時と同じ「１」でなければ、他のデータ操作要求によって既に当該データが更新されているため、今回のデータ操作要求を失敗させる。この場合、データ操作部１１１１は、データ操作要求が失敗した旨の応答を通信装置１１４を通じてデータ操作要求装置１３０へ送信する。一方、更新後ログ１１３１に含まれる操作対象データのバージョン情報がＧＥＴ操作時と同じ「１」であれば、バリュー中の値を更新後の値に変更すると共にバージョン情報を「１」から「２」に変更した更新後ログ１１３１を一時記憶装置１１３に書き込む。このとき、今回のデータ操作要求に付加されている操作ＩＤを上記書き込む更新後ログ１１３１に付加する。そして、データ操作部１１１１は、この更新後ログ１１３１の書込み完了をもって操作完了と判断し、操作が正常に完了した旨の応答を通信装置１１４を通じてデータ操作要求装置１３０へ送信する。
【００３５】
また、データ操作部１１１１は、データ操作要求に含まれる操作対象データのキーｋｅｙ１を有する最新の更新後ログ１１３１が一時記憶装置１１３に存在しなければ、当該キーｋｅｙ１を有するＫＶデータをデータレコード記憶部１１２２から読み出し、そのバリューのバージョン情報がＧＥＴ操作時と同じ「１」であるか否かを調べる。若し、ＧＥＴ操作時と同じ「１」でなければ、他のデータ操作要求によって既に当該データが更新されているため、今回のデータ操作要求を失敗させる。この場合、データ操作部１１１１は、データ操作要求が失敗した旨の応答を通信装置１１４を通じてデータ操作要求装置１３０へ送信する。一方、ＧＥＴ操作時と同じ「１」であれば、バリュー中の値を更新後の値に変更すると共にバージョン情報を「１」から「２」に変更した更新後ログ１１３１を一時記憶装置１１３に書き込む。このとき、今回のデータ操作要求に付加されている操作ＩＤを上記書き込む更新後ログ１１３１に付加する。そして、データ操作部１１１１は、この更新後ログ１１３１の書込み完了をもって操作完了と判断し、操作が正常に完了した旨の応答を通信装置１１４を通じてデータ操作要求装置１３０へ送信する。
【００３６】
ノード１２０では、データ操作要求装置１３０から送信された上記データ操作要求は通信装置１２４で受信されて処理装置１２１のデータ操作部１２１１に伝達される。データ操作部１２１１は、ノード１１０のデータ操作部１１１１と同様の処理を実行し、操作結果をデータ操作要求装置１３０へ送信する。
【００３７】
次に、チェックポイント時の処理を説明する。
【００３８】
ノード１１０の処理装置１１１におけるチェックポイント処理部１１１２は、チェックポイントが到来すると、一時記憶装置１１３に記憶されている更新後ログ１１３１を更新時刻の古いものから順番に読み出して以下の処理を行う。
【００３９】
まず、チェックポイント処理部１１１２は、読み出した更新後ログ１１３１を永続記憶装置１１２の更新履歴記憶部１１２１に書き込み、この書き込んだ更新後ログ１１３１に関するチェックポイント情報を通信装置１１４を通じて共用記憶装置１４０の記憶域１４１に書き込む。次に、チェックポイント処理部１１１２は、上記読み出した更新後ログ１１３１に基づいて永続記憶装置１１２のデータレコード記憶部１１２２を更新する。例えば、更新後ログ１１３１が、キーｋｅｙ１を有するＫＶデータに関するログであれば、データレコード記憶部１１２２中のキーｋｅｙ１を有するデータレコード１１２２１のバリューを更新後ログ１１３１中の更新後のバリューに更新する。
【００４０】
次に、何れかのノードに障害が発生した際に、当該障害の発生したノードで消失した更新後ログを正常な他のノードが特定する方法について説明する。
【００４１】
図２はデータ多重化システム１００の各部の状態の一例を示す模式図であり、ノード１１０の一時記憶装置１１３と更新履歴記憶部１１２１の状態、ノード１２０の一時記憶装置１２３と更新履歴記憶部１２２１の状態、共用記憶装置１４０の記憶域１４１、１４２の状態を示している。この例では、ノード１１０の更新履歴記憶部１１２１には、操作ＩＤがＸ１〜Ｘ３の更新後ログが書き込まれており、一時記憶装置１１３には操作ＩＤがＸ４〜Ｘ６の更新後ログが書き込まれている。他方、ノード１２０の更新履歴記憶部１２２１には、操作ＩＤがＸ１〜Ｘ５の更新後ログが書き込まれており、一時記憶装置１２３には操作ＩＤがＸ６の更新後ログが書き込まれている。また、共用記憶装置１４０の記憶域１４１には、更新履歴記憶部１１２１に書き込まれた更新後ログのうち直前のチェックポイント処理で最後に書き込まれた更新後ログの操作ＩＤであるＸ３が書き込まれ、記憶域１４２には、更新履歴記憶部１２２１に書き込まれた更新後ログのうち直前のチェックポイント処理で最後に書き込まれた更新後ログの操作ＩＤであるＸ５が書き込まれている。
【００４２】
図３は、図２に示した状態においてノード１１０に障害が発生したときの状況を示す。ノード１１０では、一時記憶装置１１３が揮発性であるため更新後ログの全てが消失している。他方、不揮発性である更新履歴記憶部１１２１と共用記憶装置１４０、および、障害の発生していないノード１２０の一時記憶装置１２３、更新履歴記憶部１２２１は、記憶内容が維持されている。このため、例えばノード１１０側のオペレータ操作によって、ノード１２０からネットワーク１５０を通じて共用記憶装置１４０のノード１１０用の記憶域１４１を参照すると、ノード１１０が障害に遭遇する前に更新履歴記憶部１１２１に書き込んだ最後の更新後ログの操作ＩＤとして、Ｘ３を取得することができる。このため、ノード１１０において障害によって消失した更新後ログは、操作ＩＤがＸ３より後の操作ＩＤを有する更新後ログ、即ち操作ＩＤがＸ４〜Ｘ６の更新後ログであることが判明する。
【００４３】
このように本実施形態によれば、障害の発生したノードにおいて消失した更新後ログを他ノードから速やかに特定することができる。その理由は、各々のノードのチェックポイント処理部がチェックポイント到来時に、一時記憶装置に記憶されている更新後ログを自ノードの更新履歴記憶部に書き込むと共に、その書き込んだ更新後ログに関するチェックポイント情報を共用記憶装置に書き込むためである。
【００４４】
特に、データ操作要求に操作ＩＤを付加すると共に、この操作ＩＤを更新後ログに付加して一時記憶装置および更新履歴記憶部に書き込み、共用記憶装置に書き込むチェックポイント情報を更新履歴記憶部に書き込んだ最新の更新後ログの操作ＩＤとすることにより、共用記憶装置に書き込むチェックポイント情報の情報量を最小限にすることができると共に、消失した更新後ログの特定を簡易に行うことができる。
【００４５】
[第２の実施形態]
図４を参照すると、本発明の第２の実施形態に係るデータ多重化システム２００は、ノード２１０とノード２２０とデータ操作要求装置２３０と共用記憶装置２４０とがネットワーク２５０を通じて相互に接続されている。このうち、データ操作要求装置２３０と共用記憶装置２４０とネットワーク２５０とは、図１に示した第１の実施形態におけるデータ操作要求装置１３０と共用記憶装置１４０とネットワーク１５０と同じである。
【００４６】
ノード２１０は、処理装置２１１と永続記憶装置２１２と一時記憶装置２１３と通信装置２１４とを有する。このうち、永続記憶装置２１２と一時記憶装置２１３と通信装置２１４とは、図１に示した第１の実施形態における永続記憶装置１１２と一時記憶装置１１３と通信装置１１４と同じである。
【００４７】
処理装置２１１は、データ操作部２１１１とチェックポイント処理部２１１２と障害回復部２１１３と他ノード障害回復部２１１４とを有する。このうち、データ操作部２１１１とチェックポイント処理部２１１２とは、図１に示した第１の実施形態におけるデータ操作部１１１１とチェックポイント処理部１１１２と同じである。
【００４８】
障害回復部２１１３は、ネットワーク２５０を通じて他のノードから受信した更新後ログを用いて自ノードの障害回復処理を行う機能を有する。
【００４９】
他ノード障害回復部２１１４は、障害の発生した他ノードにおいて消失した更新後ログを特定する機能と、特定した更新後ログに対応する自ノードの更新後ログを他ノードへ送信する機能とを有する。
【００５０】
ノード２２０は、ノード２１０と同じ構成および機能を有する。すなわち、ノード２２０を構成する処理装置２２１と永続記憶装置２２２と一時記憶装置２２３と通信装置２２４は、ノード２１０を構成する処理装置２１１と永続記憶装置２１２と一時記憶装置２１３と通信装置２１４と同じ構成および機能を有する。また、処理装置２２１を構成するデータ操作部２２１１とチェックポイント処理部２２１２と障害回復部２２１３と他ノード障害回復部２２１４とは、処理装置２１１を構成するデータ操作部２１１１とチェックポイント処理部２１１２と障害回復部２１１３と他ノード障害回復部２１１４と同じ機能を有する。さらに、永続記憶装置２２２の更新履歴記憶部２２２１とデータレコード記憶部２２２２とは、永続記憶装置２１２の更新履歴記憶部２１２１とデータレコード記憶部２１２２と同じ機能を有する。
【００５１】
次に本実施形態に係るデータ多重化システム２００の動作を説明する。本実施形態に係るデータ多重化システム２００の動作のうち、障害回復部２１１３、２２１３と他ノード障害回復部２１１４、２２１４の動作以外は、図１に示した第１の実施形態に係るデータ多重化システム１００と同じである。
【００５２】
次に、ノード２１０に障害が発生した場合を例に挙げて、障害回復部２１１３、２２１３と他ノード障害回復部２１１４、２２１４の動作を説明する。
【００５３】
図５は他ノード障害回復部の処理の一例を示すフローチャートである。以下、図５を参照して、ノード２２０の処理装置２２１における他ノード障害回復部２２１４の動作を説明する。他ノード障害回復部２２１４は、ノード２１０に障害が発生したことを、オペレータからの通知或いはノード２１０から定期的に受信しているハートビート信号の途絶等によって検出すると、図５に示す処理の実行を開始する。まず、他ノード障害回復部２２１４は、通信装置２２４を通じてネットワーク２５０経由で共用記憶装置２４０のノード２１０用の記憶域２４１をアクセスし、ノード２１０が障害に遭遇する前に更新履歴記憶部２１２１に書き込んだ最後の更新後ログの操作ＩＤを読み出す（ステップＳ２０１）。
【００５４】
次に他ノード障害回復部２２１４は、自ノードの更新履歴記憶部２２２１および一時記憶装置２２３に記憶されている更新後ログのうち、上記ステップＳ２０１で読み出した操作ＩＤより後の操作ＩＤを有する更新後ログを、障害ノード２０１で消失した更新後ログに決定する（ステップＳ２０２）。
【００５５】
次に、他ノード障害回復部２２１４は、障害の発生したノード２１０が障害回復動作を実行できる状態になったことを、オペレータからの通知或いはノード２１０からのハートビート信号の受信等によって検出すると、上記決定した更新後ログに対応する自ノードの更新後ログを一時記憶装置２２３および更新履歴記憶部２２２１から読み出し、通信装置２２４を通じてネットワーク２５０経由でノード２１０へ送信する（Ｓ２０３）。
【００５６】
図６は障害回復部の処理の一例を示すフローチャートである。以下、図６を参照して、ノード２１０の処理装置２１１における障害回復部２１１３の動作を説明する。まず、ノード２１０の障害回復部２１１３は、ノード２２０から送信された障害回復に使用する更新後ログを通信装置２１４から受信する（Ｓ２１１）。次に障害回復部２１１３は、受信した更新後ログとデータレコード記憶部２１２２に記憶されているデータレコードとを用いて、ロールフォワード処理により、データレコード記憶部２１２２を更新する（ステップＳ２１２）。これによって、ノード２１０が障害発生前にコミットしていたが、データレコード記憶部２１２２に反映できていなかったＰＵＴ操作およびＤＥＬＥＴＥ操作が全て反映される。これにより、ノード２１０の状態はノード２２０の状態と同期した状態になり、障害状態から回復する。
【００５７】
このように本実施形態によれば、第１の実施形態と同様の効果が得られると共に、障害の発生したノードで消失した更新後ログに対応する更新後ログを他のノードから障害の発生したノードに送信して、障害回復処理を自動的に行うことができる。
【００５８】
[第３の実施形態]
図７を参照すると、本発明の第３の実施形態に係るデータ多重化システム３００は、ノード３１０とノード３２０とデータ操作要求装置３３０−１とデータ操作要求装置３３０−２と共用記憶装置３４０と順序番号採番装置３６０とがネットワーク３５０を通じて相互に接続されている。このうち、共用記憶装置３４０とネットワーク３５０とは、図４に示した第２の実施形態における共用記憶装置２４０とネットワーク２５０と同じである。
【００５９】
データ操作要求装置３３０−１は、データ操作要求をノード３１０、３２０に対してネットワーク３５０を通じて送信し、またノード３１０、３２０から上記データ操作要求に対する応答を受信する機能を有する。データ操作要求装置３３０−１は、データ操作要求の送信では、順序番号採番装置３６０に対して番号取得要求を送信してデータ多重化システム３００において一意な順序番号を取得し、この順序番号を操作ＩＤとして付加してデータ操作要求を多重化し、同じデータ操作要求をノード３１０とノード３２０とに同時に送信する。
【００６０】
データ操作要求装置３３０−２は、データ操作要求装置３３０−１と同様の機能を有する。
【００６１】
順序番号採番装置３６０は、データ操作要求装置３３０−１およびデータ操作要求装置３３０−２から順序番号の取得を要求される毎に、データ多重化システム３００において一意な順序番号を新たに採番し、要求元のデータ操作要求装置へ提供する。例えば、順序番号採番装置３６０は、順序番号の取得が要求される毎に、直前に採番した順序番号に１を加えた順序番号を生成し、提供する。
【００６２】
ノード３１０は、処理装置３１１と永続記憶装置３１２と一時記憶装置３１３と通信装置３１４とを有する。このうち、永続記憶装置３１２と一時記憶装置３１３と通信装置３１４とは、図４に示した第２の実施形態における永続記憶装置２１２と一時記憶装置２１３と通信装置２１４と同じである。
【００６３】
処理装置３１１は、データ操作部３１１１とチェックポイント処理部３１１２と障害回復部３１１３と他ノード障害回復部３１１４とを有する。このうち、チェックポイント処理部３１１２と障害回復部３１１３と他ノード障害回復部３１１４とは、図４に示した第２の実施形態におけるチェックポイント処理部２１１２と障害回復部２１１３と他ノード障害回復部２１１４と同じである。
【００６４】
データ操作部３１１１は、データ操作要求装置３３０−１およびデータ操作要求装置３３０−２から受信したデータ操作要求を、データ操作要求に付加されている順序番号の順に実行する機能を有する。すなわち、データ操作部１１１１は、データ操作要求を到着順でなく、付加されている順序番号の順に処理する。また、データ操作部３１１１は、ＰＵＴ操作およびＤＥＬＥＴＥ操作に関してはＷＡＬ方式で実行する機能を有する。
【００６５】
ノード３２０は、ノード３１０と同じ構成および機能を有する。すなわち、ノード３２０を構成する処理装置３２１と永続記憶装置３２２と一時記憶装置３２３と通信装置３２４は、ノード３１０を構成する処理装置３１１と永続記憶装置３１２と一時記憶装置３１３と通信装置３１４と同じ構成および機能を有する。また、処理装置３２１を構成するデータ操作部３２１１とチェックポイント処理部３２１２と障害回復部３２１３と他ノード障害回復部３２１４とは、処理装置３１１を構成するデータ操作部３１１１とチェックポイント処理部３１１２と障害回復部３１１３と他ノード障害回復部３１１４と同じ機能を有する。さらに、永続記憶装置３２２の更新履歴記憶部３２２１とデータレコード記憶部３２２２とは、永続記憶装置３１２の更新履歴記憶部３１２１とデータレコード記憶部３１２２と同じ機能を有する。
【００６６】
次に本実施形態に係るデータ多重化システム３００の動作を説明する。本実施形態に係るデータ多重化システム３００の動作のうち、データ操作要求装置３３０−１、３３０−２、順序番号採番装置３６０、データ操作部３１１１、３２１１の動作以外は、図４に示した第２の実施形態に係るデータ多重化システム２００と同じである。
【００６７】
次に、データ操作要求装置３３０−１、３３０−２と順序番号採番装置３６０の動作を説明する。
【００６８】
データ操作要求装置３３０−１、３３０−２は、データ操作要求を送信する場合、順序番号採番装置３６０に対して順序番号の取得を要求する。順序番号採番装置３６０は、上記要求に応じて順序番号を採番し、要求元のデータ操作要求装置３３０−１、３３０−２へ提供する。データ操作要求装置３３０−１、３３０−２は、取得した順序番号を操作ＩＤとしてデータ操作要求に付加し、同じデータ操作要求をノード３１０とノード３２０とに同時に送信する。
【００６９】
図８は、データ操作部の処理の一例を示すフローチャートである。次に、図８を参照して、ノード３１０のデータ操作部３１１１の動作を説明する。
【００７０】
データ操作部３１１１は、通信装置３１４を通じてデータ操作要求装置３３０−１、３３０−２から新たなデータ操作要求を受信すると（ステップＳ３０１）、自身で記憶している実行済の最新の順序番号と受信したデータ操作要求に付加されている順序番号とを比較し、今回受信したデータ操作要求が順序通りに実行する次のデータ操作要求であるか否かを判別する（ステップＳ３０２）。
【００７１】
受信したデータ操作要求が順序通りに実行する次のデータ操作要求でなければ、データ操作部３１１１は、今回受信したデータ操作要求の処理の実行を保留にし、内部に記憶しておく（ステップＳ３０３）。そして、ステップＳ３０１の処理へ戻り、新たなデータ操作要求が受信されるのを待つ。
【００７２】
他方、今回受信したデータ操作要求が順序通りであれば、データ操作部３１１１は、そのデータ操作要求の処理を実行する（ステップＳ３０４）。このとき、データ操作要求がＰＵＴ操作およびＤＥＬＥＴＥ操作であれば、ＷＡＬ方式で実行する。次に、データ操作部３１１１は、自身が記憶する実行済の最新の順序番号を更新し（ステップＳ３０５）、保留中のデータ操作要求の中に順序通りに実行する次のデータ操作要求が存在するか否かを調査する（ステップＳ３０６）。存在すれば、その保留中のデータ操作要求を取り出して実行する（ステップＳ３０４）。そして再びステップＳ３０５、Ｓ３０６の処理を繰り返す。ステップＳ３０６の処理において、次に実行するデータ操作要求が保留中のデータ操作要求の中に存在しないことが判明すると、データ操作部３１１１は、ステップＳ３０１の処理へ戻って、新たなデータ操作要求が受信されるのを待つ。
【００７３】
このように本実施形態によれば、第２の実施形態と同様の効果が得られると共に、データ操作要求装置が複数台存在し、データ操作要求の到着順がノード毎に相違する場合でも、複数のノードにおけるデータの不整合の発生を防止でき、データの多重化を支障なく実施することができる。その理由は以下の通りである。
【００７４】
データ操作要求装置が１つの場合、ノード３１０とノード３２０とで処理されるデータ操作要求の順序は同じになる。しかし、データ操作要求装置が複数存在する場合、データ操作要求装置３３０−１から出されたデータ操作要求Ｘ１が、データ操作要求装置３３０−２から後の時刻に出されたデータ操作要求Ｘ２よりノード３１０、３２０の双方とも早く到着するとは限らず、ノード３１０では最初にデータ操作要求Ｘ１が到着し、次にデータ操作要求Ｘ２が到着し、他方、ノード３２０では最初にデータ操作要求Ｘ２が到着し、次にデータ操作要求Ｘ１が到着するケースが発生する。このため、各々のノード３１０、３２０においてデータ操作要求を到着順に処理すると、データ操作要求Ｘ１とＸ２とが同じキーのＫＶデータを操作対象とするＰＵＴ操作またはＤＥＬＥＴＥ操作の場合、ノード３１０とノード３２０とでデータの不整合が発生する。しかし、本実施形態では、各々のノード３１０、３２０は到着順でなく、付与された順序番号の順にデータ操作要求Ｘ１、Ｘ２を処理するため、複数のノード間でデータの不整合は発生しない。データ操作要求装置から同じキーについて後に出されたＧＥＴ操作が先に出されたＰＵＴ操作よりも早く処理されることがないので、古いデータをＧＥＴすることが防止される。
【００７５】
また本実施形態では、各々のノード３１０、３２０は、全てのデータ操作要求を順序番号通りに処理するため、ノード３１０とノード３２０とにおける更新後ログの時系列は互いに同じになる。この結果、第１の実施形態と同様に、共用記憶装置に書き込むチェックポイント情報の情報量を最小限にすることができ、また消失した更新後ログの特定を簡易に行うことができる。
【００７６】
[第４の実施形態]
図９を参照すると、本発明の第４の実施形態に係るデータ多重化システム４００は、ノード４１０とノード４２０とデータ操作要求装置４３０−１とデータ操作要求装置４３０−２と共用記憶装置４４０と順序番号採番装置４６０とがネットワーク４５０を通じて相互に接続されている。
【００７７】
データ操作要求装置４３０−１は、データ操作要求をノード４１０、４２０に対してネットワーク４５０を通じて送信し、またノード４１０、４２０から上記データ操作要求に対する応答を受信する機能を有する。データ操作要求装置４３０−１は、データ操作要求の送信では、順序番号採番装置４６０に対して、操作対象とするデータのキーを指定した番号取得要求を送信してデータ多重化システム４００においてキー毎に一意な順序番号を取得し、この順序番号を操作ＩＤとして付加してデータ操作要求を多重化し、同じデータ操作要求をノード４１０とノード４２０とに同時に送信する。
【００７８】
データ操作要求装置４３０−２は、データ操作要求装置４３０−１と同様の機能を有する。
【００７９】
順序番号採番装置４６０は、データ操作要求装置４３０−１およびデータ操作要求装置４３０−２から順序番号の取得を要求されると、キー毎にデータ多重化システム４００において一意な順序番号を新たに採番し、要求元のデータ操作要求装置へ提供する。例えば、順序番号採番装置４６０は、或るキーｋｅｙ１を指定して順序番号の取得が要求されると、同じキーｋｅｙ１を指定した直前の取得要求に対して提供した順序番号に１を加えた順序番号を生成し、提供する。
【００８０】
ノード４１０は、処理装置４１１と永続記憶装置４１２と一時記憶装置４１３と通信装置４１４とを有する。このうち、永続記憶装置４１２と一時記憶装置４１３と通信装置４１４とは、図７に示した第３の実施形態における永続記憶装置３１２と一時記憶装置３１３と通信装置３１４と同じである。
【００８１】
処理装置４１１は、データ操作部４１１１とチェックポイント処理部４１１２と障害回復部４１１３と他ノード障害回復部４１１４とを有する。
【００８２】
データ操作部４１１１は、データ操作要求装置４３０−１およびデータ操作要求装置４３０−２から受信したデータ操作要求を、データ操作要求に付加されている順序番号の順に実行する機能を有する。本実施形態では、データ操作要求には、操作対象となるデータのキー毎に順序番号が付与されている。このため、データ操作部４１１１は、同じキーのＫＶデータに関する操作については、データ操作要求を到着順でなく付加されている順序番号の順に処理する。これによって、ノード４１０とノード４２０との間で発生するデータの不整合を防止する。他方、異なるキーのＫＶデータに関する操作に関しては、データ操作部４１１１は、到着順にデータ操作要求を処理する。これによって、無駄な待ち合わせを防止する。
【００８３】
但し、異なるキーのＫＶデータに関する操作についてデータ操作部４１１１において到着順にデータ操作要求を処理するため、ノード４１０とノード４２０とに到着するデータ操作要求の順序が逆転すると、更新後ログ４１３１の時系列がノード４１０とノード４２０とで同じにならない。このため、何れか一方のノードの障害復旧時、他方のノードにおける更新後ログの時系列のうち、障害ノードが永続記憶装置に最後に書き出した更新後ログに対応する更新後ログ以降のログを正常ノードから抽出する方法では、障害ノードで消失した全ての更新後ログを抽出できないケースが発生し、復旧されないデータが発生する。そこで、本実施形態では、正常ノードから抽出する更新後ログは余裕を見て余分に抽出する。どのような情報を基に、どの程度余分に抽出するか等については後述する。
【００８４】
チェックポイント処理部４１１２は、適切な間隔でチェックポイント処理を実行する機能を有する。チェックポイント処理部４１１２が行うチェックポイント処理は、共用記憶装置４４０に書き込むチェックポイント情報を除き、第３の実施形態におけるチェックポイント処理部３１１２と同じである。チェックポイント処理部４１１２は、永続記憶装置４１２の更新履歴記憶部４１２１に書き込んだ更新後ログ４１３１に付加されている操作ＩＤを更新順に列挙したリストと当該チェックポイントの時刻とを、チェックポイント情報として、共用記憶装置４４０の記憶域４４１に書き込む。
【００８５】
障害回復部４１１３は、ネットワーク４５０を通じて他のノードから受信した更新後ログを用いて自ノードの障害回復処理を行う機能を有する。
【００８６】
他ノード障害回復部４１１４は、障害の発生した他ノードにおいて消失した更新後ログを特定する機能と、特定した更新後ログに対応する自ノードの更新後ログを他ノードへ送信する機能とを有する。
【００８７】
ノード４２０は、ノード４１０と同じ構成および機能を有する。すなわち、ノード４２０を構成する処理装置４２１と永続記憶装置４２２と一時記憶装置４２３と通信装置４２４は、ノード４１０を構成する処理装置４１１と永続記憶装置４１２と一時記憶装置４１３と通信装置４１４と同じ構成および機能を有する。また、処理装置４２１を構成するデータ操作部４２１１とチェックポイント処理部４２１２と障害回復部４２１３と他ノード障害回復部４２１４とは、処理装置４１１を構成するデータ操作部４１１１とチェックポイント処理部４１１２と障害回復部４１１３と他ノード障害回復部４１１４と同じ機能を有する。さらに、永続記憶装置４２２の更新履歴記憶部４２２１とデータレコード記憶部４２２２とは、永続記憶装置４１２の更新履歴記憶部４１２１とデータレコード記憶部４１２２と同じ機能を有する。
【００８８】
次に本実施形態に係るデータ多重化システム４００の動作を説明する。
【００８９】
まず、データ操作要求装置４３０−１、４３０−２と順序番号採番装置４６０の動作を説明する。
【００９０】
データ操作要求装置４３０−１、４３０−２は、データ操作要求を送信する場合、順序番号採番装置４６０に対して操作対象となるデータのキーを指定して順序番号の取得を要求する。順序番号採番装置４６０は、上記要求に応じてキー毎に順序番号を採番し、要求元のデータ操作要求装置４３０−１、４３０−２へ提供する。データ操作要求装置４３０−１、４３０−２は、取得した順序番号を操作ＩＤとしてデータ操作要求に付加し、同じデータ操作要求をノード４１０とノード４２０とに同時に送信する。
【００９１】
図１０は、データ操作部の処理の一例を示すフローチャートである。次に、図１０を参照して、ノード４１０のデータ操作部４１１１の動作を説明する。なお、ノード４２０のデータ操作部４２１１の動作は、ノード４１０のデータ操作部４１１１と同じである。
【００９２】
データ操作部４１１１は、通信装置４１４を通じてデータ操作要求装置４３０−１、４３０−２から新たなデータ操作要求を受信すると（ステップＳ４０１）、自身で記憶している同じキーについての実行済の最新の順序番号と受信したデータ操作要求に付加されている順序番号とを比較し、今回受信したデータ操作要求が同一キーに関して順序通りに実行する次のデータ操作要求であるか否かを判別する（ステップＳ４０２）。
【００９３】
今回受信したデータ操作要求が同一キーに関して順序通りに実行する次のデータ操作要求でなければ、データ操作部４１１１は、今回受信したデータ操作要求の処理の実行を保留にし、内部にキー別に記憶しておく（ステップＳ４０３）。そして、ステップＳ４０１の処理へ戻り、新たなデータ操作要求が受信されるのを待つ。
【００９４】
他方、今回受信したデータ操作要求が順序通りであれば、データ操作部４１１１は、そのデータ操作要求の処理を実行する（ステップＳ４０４）。このとき、ＰＵＴ操作およびＤＥＬＥＴＥ操作に関してはＷＡＬ方式で実行する。次に、データ操作部４１１１は、自身が記憶する同一キーに関する実行済の最新の順序番号を更新し（ステップＳ４０５）、同一キーを有する保留中のデータ操作要求の中に順序通りに実行する次のデータ操作要求が存在するか否かを調査する（ステップＳ４０６）。存在すれば、その保留中のデータ操作要求を取り出して実行する（ステップＳ４０４）。そして再びステップＳ４０５、Ｓ４０６の処理を繰り返す。ステップＳ４０６の処理において、次に実行するデータ操作要求が保留中のデータ操作要求の中に存在しないことが判明すると、データ操作部４１１１は、ステップＳ４０１の処理へ戻って、新たなデータ操作要求が受信されるのを待つ。
【００９５】
次に、ノード４１０のチェックポイント処理部４１１２の動作を説明する。なお、ノード４２０のチェックポイント処理部４２１２の動作は、ノード４１０のチェックポイント処理部４２１２と同じである。
【００９６】
チェックポイント処理部４１１２は、チェックポイントが到来すると、一時記憶装置４１３に記憶されている更新後ログ４１３１をその更新時刻の古いものから順に読み出し、更新後ログ４１３１毎に以下の処理を行う。
【００９７】
まず、チェックポイント処理部４１１２は、読み出した更新後ログ４１３１を永続記憶装置４１２の更新履歴記憶部４１２１に書き込み、この書き込んだ更新後ログ４１３１に付加されている操作ＩＤをリスト（初期状態はＮＵＬＬ）に記載する。次に、チェックポイント処理部４１１２は、上記読み出した更新後ログ４１３１に基づいて永続記憶装置４１２のデータレコード記憶部４１２２を更新する。このような処理を更新後ログ４１３１毎に繰り返し、最後の更新後ログを処理し終えると、上記リストに今回のチェックポイント時刻を付加したものをチェックポイント情報として通信装置４１４を通じて共用記憶装置４４０の記憶域４４１に書き込む。
【００９８】
図１１は他ノード障害回復部の処理の一例を示すフローチャートである。以下、図１１を参照して、ノード４２０の処理装置４２１における他ノード障害回復部４２１４の動作を説明する。なお、ノード４１０の他ノード障害回復部４１１４の動作は、ノード４２０の他ノード障害回復部４２１４と同じである。
【００９９】
他ノード障害回復部４２１４は、ノード４１０に障害が発生したことを、オペレータからの通知或いはノード４１０から定期的に受信しているハートビート信号の途絶等によって検出すると、図１１に示す処理の実行を開始する。まず、他ノード障害回復部４２１４は、通信装置４２４を通じてネットワーク４５０経由で共用記憶装置４４０のノード４１０用の記憶域４４１をアクセスし、ノード４１０が障害に遭遇する直前に更新履歴記憶部４１２１に最後に書き込んだチェックポイント情報を読み出す（ステップＳ４１１）。
【０１００】
次に、他ノード障害回復部４２１４は、上記読み出したチェックポイント情報中のリストから最新の更新後ログの操作ＩＤを読み出す（ステップＳ４１２）。次に、他ノード障害回復部４２１４は、ステップＳ４１２で読み出した操作ＩＤと同じ操作ＩＤをリスト中に有するチェックポイント情報を共用記憶装置４４０の自ノード４２０用の記憶域４４２から検索する（ステップＳ４１３）。次に、他ノード障害回復部４２１４は、ステップＳ４１３で検索したチェックポイント情報の次のチェックポイントで書き込まれたチェックポイント情報を共用記憶装置４４０の自ノード４２０用の記憶域４４２から読み出す（ステップＳ４１４）。次に、他ノード障害回復部４２１４は、ステップＳ４１４で読み出したチェックポイント情報中のチェックポイント時刻から所定時間前の時刻より古く且つ当該時刻に最も近いチェックポイント時刻を有するチェックポイント情報を共用記憶装置４４０の自ノード４２０用の記憶域４４２から検索する（ステップＳ４１５）。ここで、上記所定時間は後述するＴの二倍の２Ｔである。次に、他ノード障害回復部４２１４は、ステップＳ４１５で検索したチェックポイント情報中のリストに記載された最新の更新後ログの操作ＩＤと同じ操作ＩＤを有する更新後ログ以降の自ノード４２０上の全ての更新後ログを、障害ノード４１０で消失した更新後ログに決定する（ステップＳ４１６）。
【０１０１】
次に、他ノード障害回復部４２１４は、障害の発生したノード４１０が障害回復動作を実行できる状態になったことを、オペレータからの通知或いはノード４１０からのハートビート信号の受信等によって検出すると、ステップＳ４１６で決定した更新後ログを一時記憶装置４２３および更新履歴記憶部４２２１から読み出し、通信装置４２４を通じてネットワーク４５０経由でノード４１０へ送信する（Ｓ４１７）。
【０１０２】
上記の他ノード障害回復部４２１４の動作について、より具体的に説明する。
【０１０３】
今、データ操作要求装置４３０−１、４３０−２が同じデータ操作要求をノード４１０、４２０の何れか一方に送信してから他方に送信するまでの時間の最大値をＴとする。例えば、データ操作要求装置４３０−１、４３０−２が、或るタイムアウト時間内にデータ操作要求を多重化して送信する場合、Ｔ＝タイムアウト時間となる。このとき、最悪のケースでは、障害の発生したノードが永続記憶装置に最後に書き込んだ更新後ログと同じ更新後ログを正常ノードが受信した時刻より２Ｔ前の時刻で受信した更新後ログ以降の更新後ログが障害ノードから消失した可能性がある。この点について図１２を参照して説明する。
【０１０４】
図１２は、データ操作要求装置４３０−１、４３０−２がノード４１０、４２０に対して同じデータ操作要求を送信している状況の一例を示すシーケンスチャートである。図１２の例では、データ操作要求装置４３０−１は、最初にノード４１０に対してＰＵＴＸ１（）というデータ操作要求を送信した後、タイムアウトするまでに同じＰＵＴＸ１（）というデータ操作要求をノード４２０へ送信している。一方、データ操作要求装置４３０−２は、それとは反対に、最初にノード４２０に対してＰＵＴＸ２（）というデータ操作要求を送信した後、タイムアウトするまでに同じＰＵＴＸ２（）というデータ操作要求をノード４１０へ送信している。さらに、ノード４１０では、ＰＵＴＸ１（）を受信した直後にチェックポイント処理を行い、その直後に障害が発生している。また、データ操作要求装置４３０−２からノード４１０へのＰＵＴＸ２（）の送信は障害発生直後に行われている。このような最悪の状況では、ノード４２０がＰＵＴＸ１（）を受信した時刻より２Ｔ前の時刻で受信したＰＵＴＸ２（）以降のデータ操作要求がノード４１０から消失する可能性がある。
【０１０５】
但し、ノード４２０においてＰＵＴＸ１（）やＰＵＴＸ２（）等の個々のデータ操作要求を受信した時刻は記録されていない。他方、過去のチェックポイント時刻の履歴はチェックポイント情報に記録されている。チェックポイント時刻ｔ１のチェックポイント情報に記録された更新後ログに対応するデータ操作要求の受信時刻は、一つ前のチェックポイント情報に記録されたチェックポイント時刻ｔ０より過去の時刻になることはない。そこで、データ操作要求ＰＵＴＸ１（）やＰＵＴＸ２（）の受信時刻を、その更新後ログをチェックポイント情報に書き込んだチェックポイントの１つ前のチェックポイントの時刻で近似する。この結果、障害ノードがチェックポイントで最後に書き込んだ更新後ログに対応する正常ノードの更新後ログの受信時刻から２Ｔ前の時刻に受信した更新後ログ以降の更新後ログは、図１１に示すような手順に従って求めることができる。
【０１０６】
次に、障害回復部４１１３、４２１３の動作を説明する。障害回復部４１１３、４２１３の動作は、第３の実施形態における障害回復部３１１３、３２１３と基本的に同じである。但し、他のノードから送られてくる障害回復用の更新後ログの中には、バージョン情報が古いデータが存在するケースがあるので、古いバージョン情報の更新後ログでデータを上書きしないようする。
【０１０７】
このように本実施形態によれば、複数のノード４１０、４２０間で更新後ログの時系列に逆転が生じる状況下において、障害ノードで消失した更新後ログを適切な余裕を見て余分に特定するため、障害ノードで消失した全ての更新後ログを抽出できずに復旧されないデータが発生することを防止でき、且つ、障害回復用の更新後ログが無駄に増大することを防止することができる。
【０１０８】
[第５の実施形態]
上述した第１乃至第４の実施形態では、障害の発生したノードで消失した更新後ログを決定する機能や、決定した更新後ログを正常なノードから取得して障害発生ノードへ送信する機能を各ノードに持たせたが、そのような機能をノードとは別に存在する管理装置に持たせることも可能である。図１３はそのような実施形態に係るデータ多重化システム５００のブロック図である。
【０１０９】
図１３に示すデータ多重化システム５００は、管理装置４７０がネットワーク４５０に接続されている点で図９に示した第４の実施形態に係るデータ多重化システム４００と相違する。管理装置４７０は、他ノード障害回復部４７１を有する。
【０１１０】
他ノード障害回復部４７１は、例えば障害の発生したノードをノード４１０とすると、先ず、ノード４１０が書き込んだチェックポイント情報を共用記憶装置４４０から読み出す。次に、他ノード障害回復部４７１は、読み出したチェックポイント情報に基づいて障害の発生したノード４１０の一時記憶装置４１３から消失した可能性のある更新後ログを決定する。この決定は、第４の実施形態におけるノード４２０の他ノード障害回復部４２１４と同じ方法で行われる。そして、他ノード障害回復部４７１は、決定した更新後ログをノード４２０の更新履歴記憶部４２２１および一時記憶装置４２３から、例えばノード４２０のデータ操作部４２１１を通じて読み出し、障害回復用更新後ログとして、障害の発生したノード４１０へ送信する。
【０１１１】
本実施形態では、第４の実施形態に管理装置４７０を追加したが、第２の実施形態や第３の実施形態に管理装置４７０と同様の管理装置を追加することも可能である。
【０１１２】
[他の実施形態]
以上、幾つかの実施形態を挙げて本発明を説明したが、本発明は以上の実施形態にのみ限定されず、その他各種の付加変更が可能である。例えば、以下のような実施形態も本発明に含まれる。
【０１１３】
複数のノード間で更新後ログの時系列に逆転が生じる状況として第４の実施形態を例示したが、本発明はそのような例に限定されない。例えば、複数のデータ操作要求装置がデータ操作要求に順序番号を一切付与せずに多重化して複数のノードへ送信し、各ノードでは、受信した順番にデータ操作要求を実行するデータ多重化システムに対しても本発明は適用可能である。そのようなデータ多重化システムでは、複数のノード間で更新後ログの時系列に逆転が生じると、ノード間でデータに矛盾が発生したり、実行されないデータ操作要求が発生するが、そのような事象を検出し正常に回復させることは可能である。従って、正常に回復したノードから障害発生ノードで消失した更新後ログを抽出する際に、本発明の第４の実施形態で説明した方法と同様の方法を使用することができる。
【０１１４】
また第２乃至第４の実施形態では、ノードの台数が２台であるため、何れかのノードで障害が発生すると、障害の発生していないノードが１台になる。そのため、第２乃至第４の実施形態では、障害の発生していないノードの他ノード障害回復部は、自ノードから障害回復処理用の更新後ログを抽出している。しかしながら、ノードの台数が３台以上の場合、障害の発生していないノードの他ノード障害回復部は、自ノードからではなく、障害の発生していない他のノードから、障害回復処理用の更新後ログを抽出し、障害の発生したノードへ送信するようにしてもよい。
【０１１５】
なお、本発明は、日本国にて２０１３年３月１３日に特許出願された特願２０１３−０５０２３６の特許出願に基づく優先権主張の利益を享受するものであり、当該特許出願に記載された内容は、全て本明細書に含まれるものとする。
【産業上の利用可能性】
【０１１６】
本発明は、ＫＶデータを多重化する分散ＫＶＳ等のデータ多重化システムに利用することができる。
【符号の説明】
【０１１７】
１００、２００、３００、４００、５００…データ多重化システム
１１０、２１０、３１０、４１０…ノード
１１１、２１１、３１１、４１１…処理装置
１１１１、２１１１、３１１１、４１１１…データ操作部
１１１２、２１１２、３１１２、４１１２…チェックポイント処理部
２１１３、３１１３、４１１３…障害回復部
２１１４、３１１４、４１１４…他ノード障害回復部
１１２、２１２、３１２、４１２…永続記憶装置
１１２１、２１２１、３１２１、４１２１…更新履歴記憶部
１１２１１、２１２１１、３１２１１、４１２１１…更新後ログ
１１２２、２１２２、３１２２、４１２２…データレコード部
１１２２１、２１２２１、３１２２１、４１２２１…データレコード
１１３、２１３、３１３、４１３…一時記憶装置
１１３１、２１３１、３１３１、４１３１…更新後ログ
１１４、２１４、３１４、４１４…通信装置
１２０、２２０、３２０、４２０…ノード
１２１、２２１、３２１、４２１…処理装置
１２１１、２２１１、３２１１、４２１１…データ操作部
１２１２、２２１２、３２１２、４２１２…チェックポイント処理部
２２１３、３２１３、４２１３…障害回復部
２２１４、３２１４、４２１４…他ノード障害回復部
１２２、２２２、３２２、４２２…永続記憶装置
１２２１、２２２１、３２２１、４２２１…更新履歴記憶部
１２２１１、２２２１１、３２２１１、４２２１１…更新後ログ
１２２２、２２２２、３２２２、４２２２…データレコード部
１２２２１、２２２２１、３２２２１、４２２２１…データレコード
１２３、２２３、３２３、４２３…一時記憶装置
１２３１、２２３１、３２３１、４２３１…更新後ログ
１２４、２２４、３２４、４２４…通信装置
１３０、２３０、３３０−１、３３０−２、４３０−１、４３０−２…データ操作要求装置
１４０、２４０、３４０、４４０…共用記憶装置
１４１、２４１、３４１、４４１…記憶域
１４１１、２４１１、３４１１、４４１１…チェックポイント情報
１４２、２４２、３４２、４４２…記憶域
１４２１、２４２１、３４２１、４４２１…チェックポイント情報
１５０、２５０、３５０、４５０…ネットワーク
３６０、４６０…順序番号採番装置
４７０…管理装置
４７１…他ノード障害回復部
【図１】
0006028850.tif 000002
【図２】
0006028850.tif 000003
【図３】
0006028850.tif 000004
【図４】
0006028850.tif 000005
【図５】
0006028850.tif 000006
【図６】
0006028850.tif 000007
【図７】
0006028850.tif 000008
【図８】
0006028850.tif 000009
【図９】
0006028850.tif 000010
【図１０】
0006028850.tif 000011
【図１１】
0006028850.tif 000012
【図１２】
0006028850.tif 000013
【図１３】
0006028850.tif 000014