JP5395517B2 - 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム - Google Patents

分散データ管理システム、データ管理装置、データ管理方法、およびプログラム Download PDF

Info

Publication number
JP5395517B2
JP5395517B2 JP2009131309A JP2009131309A JP5395517B2 JP 5395517 B2 JP5395517 B2 JP 5395517B2 JP 2009131309 A JP2009131309 A JP 2009131309A JP 2009131309 A JP2009131309 A JP 2009131309A JP 5395517 B2 JP5395517 B2 JP 5395517B2
Authority
JP
Japan
Prior art keywords
proposal
notification
candidacy
slave
proposal number
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
JP2009131309A
Other languages
English (en)
Other versions
JP2010277467A (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.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone 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 Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2009131309A priority Critical patent/JP5395517B2/ja
Publication of JP2010277467A publication Critical patent/JP2010277467A/ja
Application granted granted Critical
Publication of JP5395517B2 publication Critical patent/JP5395517B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、3台以上のデータベース装置によって構成され、1台をマスタ、残りのデータベース装置をスレーブとしてデータベースを保持する分散データベースシステムにおいて、マスタに障害が発生したときの可用性(システムを継続して稼動できること)の確率を高める技術に関する。
分散データベースシステムの可用性の確率を高めるために、分散データベースシステムを構成する複数のデータベース装置に同じデータベースを保持させて、一部のデータベース装置に障害が発生しても、残りのデータベース装置によってサービスを継続させる手法がある。
前記した手法を用いるものとして、例えば、PAXOS(非特許文献1参照)が知られている。PAXOSを実用に供する場合、ユーザからデータベースの更新や参照のためにアクセスされるデータベース装置を1台決定しておき、それをマスタと呼び、マスタ以外のデータベース装置をスレーブとすることが、一般的に行われている。なお、マスタは、ユーザの処理要求(データベースの更新または参照に係る要求)を受け付けるとともに、その処理要求に対して応答する。また、マスタは、スレーブに最新のデータベースの状態を送信して、スレーブのデータベースをマスタのデータベースと同じ状態に維持する。
PAXOSは、マスタに障害が発生したときに、スレーブの中から新たなマスタを決定するアルゴリズムを備えている。例えば、スレーブがマスタに障害が発生したと判定するケースは、マスタからスレーブに対して一定周期で出力されるハートビートメッセージを、スレーブが受信できなくなったときである。しかし、マスタおよびスレーブが接続されているネットワークにおいてパケットの損失、遅延、転置が発生している場合には、マスタが正常に動作していても、スレーブがハートビートメッセージを受信できないことがあるため、新たなマスタが決定されて、データベースの状態の異なるマスタが2つ存在することになってしまう可能性がある。その結果、データベースの整合性が損なわれることになる。
そこで、PAXOSのアルゴリズムは、2つのマスタが存在しないように調停するため、2つのフェーズで動作する(非特許文献2参照)。第1のフェーズでは、既存のマスタに障害が発生したと判断したスレーブが、次の新たなマスタに選ばれるために、立候補通知Prepare()を他のスレーブに送信する。そして、最も早く立候補通知Prepare()を出したデータベース装置が選ばれて立候補者となる、または、立候補通知Prepare()を出したデータベース装置が複数あった場合には、予め決められた優先順位の高いデータベース装置が選ばれて立候補者となる。次に、第2のフェーズでは、第1のフェーズで選ばれた立候補者が、「自分がマスタである」という提案内容を提案通知Propose()として他のスレーブに送信し、その提案内容について他のスレーブから承認を受けることによって、自分がマスタとなり、自分以外のデータベース装置をスレーブとする関係を確立する。
L. Lamport,"The part-time parliament",ACM Transactions on Computer System(TOCS),Vol.16,Issue 2,1998年5月,p.133-169 T. D. Chandra他,"PAXOS made live: an engineering perspective",PODC’07,Proceedings of the twenty-sixth annual ACM symposium on Principles of distributed computing,2007年6月20日,p.1-16
前記したように、PAXOSのアルゴリズムでは、新しいマスタを決定することができるが、その決定された新しいマスタが、最新のデータベースを備えているとは限らないという問題がある。そして、新しいマスタのデータベースが最新でない場合には、最新のデータベースを持つデータベース装置から最新のデータベースを取得して自身に適用するまでに掛かる期間において、分散データベースシステムの稼動が停止する。そのため、可用性を損なうという問題が発生する。なお、前記した問題は、データベースを含む、データやファイルの版数を管理するデータ管理についても発生する。
そこで、本発明の課題は、前記した問題を解決するために、3台以上のデータ管理装置によって構成され、1台をマスタ、残りの2台以上をスレーブとしてデータを保持する分散データ管理システムにおいて、マスタに障害が発生したときの可用性の確率を高める技術を提供することを目的とする。
前記課題を解決するために、本発明は、3台以上のデータ管理装置がネットワークを介して相互に通信可能に接続され、データ管理装置の中の1台をマスタとし、他のデータ管理装置をスレーブとして、マスタ障害時にスレーブの中から新しいマスタを選択する分散データ管理システムであって、スレーブが、処理部と、当該スレーブの管理するデータを更新するたびに大きくなるデータの更新番号およびその更新番号が大きくなるにしたがって大きくなる更新番号を変数とする提案番号を記憶する記憶部とを備え、スレーブの処理部が、マスタ障害時に、自身の記憶部から自身の更新番号を読出し、その更新番号を変数とする提案番号を含む立候補通知を他のスレーブに送信し、他のスレーブの処理部が、立候補通知を新たに受信したとき、自身の記憶部を探索して、該立候補通知を受信する以前に記憶した提案番号が無い場合には、自身の記憶部から自身の更新番号を読み出して、該更新番号を変数とする自身の提案番号を生成し、該自身の提案番号と新たに受信した立候補通知の提案番号との大小を比較して、新たに受信した立候補通知の提案番号が該自身の提案番号以上のとき、立候補通知の提案番号を含むその立候補通知に対する確認通知を、立候補通知を送信したスレーブに返信し、新たに受信した立候補通知の提案番号を自身の記憶部に記憶し、立候補通知を受信する以前に記憶した提案番号がある場合には、該記憶した提案番号中で最大の提案番号を抽出し、新たに受信した立候補通知の提案番号が最大の提案番号以上であれば、立候補通知の提案番号を含むその立候補通知に対する確認通知を、立候補通知を送出したスレーブに送信し、新たに受信した立候補通知の提案番号を自身の記憶部に記憶し、立候補通知を送信したスレーブが、分散データ管理システムに属するすべてのデータ管理装置中の過半数のスレーブから自身の提案番号を含む確認通知を受信したときに、自身の提案番号を含む自身がマスタになることを示す提案情報をすべてのスレーブに送信し、分散データ管理システムに属するすべてのデータ管理装置中の過半数のスレーブから提案情報に対する確認通知を受信した後、提案情報が確定したことを示す決定通知を他のスレーブに送信し、他のスレーブが、決定通知を受信し、自身の記憶部から、既に記憶されている立候補通知の提案番号を消去することを特徴とする。
また、本発明は、前記分散データ管理システムにおいて用いられるデータ管理装置であって、スレーブの管理するデータを更新するたびに大きくなるデータの更新番号およびその更新番号が大きくなるにしたがって大きくなる更新番号を変数とする提案番号を記憶する記憶手段と、マスタ障害時に、自身の記憶部から自身の更新番号を読出し、その更新番号を変数とする提案番号を含む立候補通知を他のスレーブに送信する手段と、立候補通知を新たに受信したとき、自身の記憶部を探索して、該立候補通知を受信する以前に記憶した提案番号が無い場合には、自身の記憶部から自身の更新番号を読み出して、該更新番号を変数とする自身の提案番号を生成し、該自身の提案番号と新たに受信した立候補通知の提案番号との大小を比較して、新たに受信した立候補通知の提案番号が該自身の提案番号以上のとき、立候補通知の提案番号を含むその立候補通知に対する確認通知を、立候補通知を送信したスレーブに返信し、新たに受信した立候補通知の提案番号を自身の記憶部に記憶し、立候補通知を受信する以前に記憶した提案番号がある場合には、該記憶した提案番号中で最大の提案番号を抽出し、新たに受信した立候補通知の提案番号が最大の提案番号以上であれば、立候補通知の提案番号を含むその立候補通知に対する確認通知を、立候補通知を送信したスレーブに返信し、新たに受信した立候補通知の提案番号を自身の記憶部に記憶する手段と、受信した確認通知に含まれる提案番号ごとに受信した数をカウントする第1のカウント手段と、分散データ管理システムに属するすべてのデータ管理装置の数と第1のカウント手段によってカウントされた提案番号ごとの受信数との比から、確認通知の受信数が過半数を超えたことを判定する第1の判定手段と、第1の判定手段によって、確認通知の受信数が過半数を超えたと判定されたとき、自身の提案番号を含む自身がマスタになることを示す提案情報をすべてのスレーブに送信する手段と、受信した自身の提案番号を含む自身がマスタになることを示す情報に含まれる提案番号ごとに受信した数をカウントする第2のカウント手段と、分散データ管理システムに属するすべてのデータ管理装置の数と第2のカウント手段によってカウントされた提案番号ごとの受信数との比から、いずれかの提案番号の提案情報の受信数が過半数を超えたことを判定する第2の判定手段と、第2の判定手段によって、提案情報の受信数が過半数を超えたと判定されたとき、提案情報が確定したことを示す決定通知を他のスレーブに送信する手段と、決定通知を受信し、自身の記憶部から、既に記憶されている立候補通知の提案番号を消去する手段とを備えることを特徴とする。
また、本発明は、3台以上のデータ管理装置がネットワークを介して相互に通信可能に接続され、データ管理装置の中の1台をマスタとし、他のデータ管理装置をスレーブとして、マスタ障害時にスレーブの中から新しいマスタを選択する分散データ管理システムにおいて用いられるデータ管理方法であって、スレーブが、処理部と、当該スレーブの管理するデータを更新するたびに大きくなるデータの更新番号およびその更新番号が大きくなるにしたがって大きくなる更新番号を変数とする提案番号を記憶する記憶部とを備え、スレーブの処理部が、マスタ障害時に、自身の記憶部から自身の更新番号を読出し、その更新番号を変数とする提案番号を含む立候補通知を他のスレーブに送信し、他のスレーブの処理部が、立候補通知を新たに受信したとき、自身の記憶部を探索して、該立候補通知を受信する以前に記憶した提案番号が無い場合には、自身の記憶部から自身の更新番号を読み出して、該更新番号を変数とする自身の提案番号を生成し、該自身の提案番号と新たに受信した立候補通知の提案番号との大小を比較して、新たに受信した立候補通知の提案番号が該自身の提案番号以上のとき、立候補通知の提案番号を含むその立候補通知に対する確認通知を、立候補通知を送信したスレーブに返信し、新たに受信した立候補通知の提案番号を自身の記憶部に記憶し、立候補通知を受信する以前に記憶した提案番号がある場合には、該記憶した提案番号中で最大の提案番号を抽出し、新たに受信した立候補通知の提案番号が最大の提案番号以上であれば、立候補通知の提案番号を含むその立候補通知に対する確認通知を、立候補通知を送信したスレーブに返信し、新たに受信した立候補通知の提案番号を自身の記憶部に記憶し、立候補通知を送信したスレーブが、分散データ管理システムに属するすべてのデータ管理装置中の過半数のスレーブから自身の提案番号を含む確認通知を受信したときに、自身の提案番号を含む自身がマスタになることを示す提案情報をすべてのスレーブに送信し、分散データ管理システムに属するすべてのデータ管理装置中の過半数のスレーブから提案情報に対する確認通知を受信した後、提案情報が確定したことを示す決定通知を他のスレーブに送信し、他のスレーブが、決定通知を受信し、自身の記憶部から、既に記憶されている立候補通知の提案番号を消去することを特徴とするデータ管理方法。
このような構成によれば、スレーブは、データを更新するたびに大きくなるデータの更新番号およびその更新番号が大きくなるにしたがって大きくなる前記更新番号を変数とする提案番号を記憶している。そして、スレーブは、マスタ障害時に、他のデータ管理装置から受信した立候補通知に含まれる提案番号と、記憶部に記憶してある最大の提案番号(当初記憶されているのは自身の提案番号のみ)とを比較して、立候補通知に含まれる提案番号が記憶部に記憶してある最大の提案番号以上の場合にのみ、立候補通知の提案番号を含む確認通知を、立候補通知を送信したスレーブに返信し、その立候補通知の提案番号を記憶する。すなわち、記憶部には、自分の提案番号以上のものが記憶されることになる。そして、スレーブが、過半数のスレーブから前記自身の提案番号を含む確認通知を受信したときに、自身の提案番号を含む自身がマスタになることを示す提案情報を、立候補通知を送信したスレーブに返信し、さらに、過半数の前記スレーブからいずれかの同じ提案番号を含む提案情報に示されるスレーブが、新しいマスタになる。そのため、より大きな提案番号のスレーブが新しいマスタに選ばれる、すなわち、最新の(提案番号が最も大きいまたは更新番号が最も大きい)データを持つスレーブが新しいマスタに選ばれる確率が高くなるので、マスタに障害が発生したときの可用性の確率を高めることができる。
また、本発明は、分散データ管理システムにおいて、提案番号が、データの更新番号に、新しいマスタに選択される優先順位を示すデータを識別するIDをさらに組み合わせたものであり、処理部が、提案番号の大小比較において、提案番号から取り出した更新番号同士を比較し、該更新番号の大きい方を、提案番号が大きいと判定し、更新番号同士が等しい場合には、データを識別するID同士を比較し、データを識別するIDの大きい方を、提案番号が大きいと判定することを特徴とする。
本発明は、データ管理装置において、提案番号が、データの更新番号に、新しいマスタに選択される優先順位を示すデータを識別するIDをさらに組み合わせたものであり、提案番号の大小比較において、提案番号から取り出した更新番号同士を比較し、該更新番号の大きい方を、提案番号が大きいと判定し、更新番号同士が等しい場合には、データを識別するID同士を比較し、データを識別するIDの大きい方を、提案番号が大きいと判定する手段を備えることを特徴とする。
本発明は、データ管理方法において、提案番号が、データの更新番号に、新しいマスタに選択される優先順位を示すデータを識別するIDをさらに組み合わせたものであり、処理部が、提案番号の大小比較において、提案番号から取り出した更新番号同士を比較し、該更新番号の大きい方を、提案番号が大きいと判定し、更新番号同士が等しい場合には、データを識別するID同士を比較し、データを識別するIDの大きい方を、提案番号が大きいと判定することを特徴とする。
このような構成によれば、提案番号が、データの更新番号と優先順位を示すIDとの組み合わせであるので、ユニークな番号となり、データの更新番号が等しい場合であっても、優先順位を示すIDの大小によって、新しいマスタの選択を早めることができる。すなわち、新しいマスタが決まるまでの分散データ管理システムの停止時間が短くなるため、マスタに障害が発生したときの可用性の確率を高めることができる。
本発明は、データ管理方法において、他のスレーブの処理部が、立候補通知を新たに受信したとき、自身の記憶部を探索して、自身の更新番号を読出し、該更新番号を変数とする自身の提案番号を生成し、該自身の提案番号と新たに受信した立候補通知の提案番号との大小を比較して、新たに受信した立候補通知の提案番号が該自身の提案番号以下であれば、自身の立候補通知を自身以外のスレーブに送信することを特徴とする。
このような構成によれば、さらに、既に立候補通知を送信したスレーブの提案番号より大きな提案番号を含む立候補通知を分散データ管理ネットワーク内に送出することができるので、最新のデータを保持するデータ管理装置を新しいマスタに決定する確率を高くすることができる。
本発明は、前記データ管理方法を、コンピュータとしてのデータ管理装置に実行させるためのプログラムとした。
このようなプログラムをインストールされたコンピュータは、このプログラムに基づいた機能を実現することができる。
本発明によれば、3台以上のデータ装置によって構成され、1台をマスタ、残りの2台以上をスレーブとしてデータを保持する分散データ管理システムにおいて、マスタに障害が発生したときの可用性を高める技術を提供することができる。
分散データベースシステムの構成を示す図である。 本実施形態におけるデータベース装置の構成および機能を示す図である。 本実施形態における第1のフェーズの処理の流れを示す図である。 本実施形態における第2のフェーズの処理の流れを示す図である。 比較例におけるデータベース装置の構成および機能を示す図である。 比較例における第1のフェーズの処理の流れを示す図である。 比較例における第2のフェーズの処理の流れを示す図である。
次に、本発明を実施するための形態(以降「本実施形態」と称す)について、適宜図面を参照しながら詳細に説明する。なお、本実施形態においては、データベースの場合を例として用いて説明する。
(分散データベースシステム)
本実施形態における分散データベースシステム1は、図1に示すように、3台のデータベース装置10(10A,10B,10C)とクライアント端末20とが、ネットワーク30を介して、通信可能に接続されている。なお、図1では、データベース装置10が3台しか記載されていないが、3台以上であっても構わない。また、クライアント端末20は、図1では1台しか記載されていないが、2台以上であっても構わない。
データベース装置10は、クライアント端末20からデータベースの更新や参照のための処理要求を受け付けて、その処理要求に応答する1台を決定しておき、それをマスタと呼び、マスタ以外のデータベース装置10をスレーブと呼ぶ。図1では、マスタは、データベース装置10Aであり、クライアント端末20との間で処理要求およびその処理要求に対する応答を送受信する。そして、データベース装置10B,10Cが、スレーブとなって、スレーブのデータベースをマスタのデータベースと同じ状態に維持するために、データベース同期のための情報をマスタ(データベース装置10A)との間で送受信する。スレーブの各データベース装置10B,10Cは、マスタに障害が発生したと判断したとき、新しいマスタに選択されるための調停を開始する。
データベース装置10は、例えば、計算機やPC(Personal Computer)であって、汎用のOS(Operating System)、データベースやファイルシステム等のデータ管理システム、およびローカルストレージ(ローカル記憶部)を備えている。なお、データベース装置10は、例えば、ローカルストレージを備える携帯電話機であっても構わない。クライアント端末20は、例えば、PCであって、ユーザからの指示をマスタのデータベース装置10Aに送信し、その指示に対する応答を、図示しない出力装置等に出力する。また、ネットワーク30は、インターネットまたはローカルエリアネットワークであって、そのネットワーク内において、パケットの損失、遅延、転置が発生しても構わない。
≪比較例≫
始めに、本実施形態の比較例として、前記したPAXOSのアルゴリズムを適用したマスタの決定処理について、図5〜7を用いて説明する。
(比較例のデータベース装置)
まず、データベース装置10(10D,10E,10F)の構成および機能について、図5を用いて説明する。図5に示すように、各データベース装置10D,10E,10Fは、処理部14、ローカル記憶部15、およびデータベース16を備える。処理部14は、コンピュータのCPU(Central Processing Unit)とメインメモリとで構成され、ローカル記憶部15に格納されているアプリケーションプログラムをメインメモリに展開して、各機能を具現化する。そして、処理部14は、図示しない入力装置を介して、クライアント端末20(図1参照)からの処理要求を受け付け、その処理要求に対する応答(処理結果)を返信する。ローカル記憶部15は、各種プログラムや処理部14の演算結果を記憶する。データベース16は、例えば、リレーショナルデータベース,ファイルシステム等によって、データを格納している。
処理部14の機能は、図5に示すように、提案番号発行部141、提案部142、および調停部143を備える。
提案番号発行部141は、立候補通知Prepare()を他のデータベース装置10に出力するときに、提案番号nを発行する。提案番号nは、予め決められたデータベース装置10間の優先順位に基づいて計算される、ユニークな番号である。例えば、提案番号n=データベースID+データベース装置の数×提案回数として計算される。ただし、提案回数は、新しいマスタが決定されるまでに立候補通知を出力する回数であって、立候補通知を出力するたびに+1増加される。つまり、提案番号発行部141は、新たなマスタが決定されるまでの間に立候補通知に対して他のスレーブから応答(確認通知)が無い場合、再度立候補通知を出すごとに提案回数を+1増加した提案番号nを発行する。なお、提案番号nは、新しいマスタが決定すると、初期値(例えば、0)にリセットされる。
提案部142は、立候補通知Prepare()や提案通知Propose()を他のデータベース装置10に送信し、他のデータベース装置10から立候補通知や提案通知に対する応答(確認通知PrepareACK(),ProposeACK())を受信する。調停部143は、立候補通知や提案通知を受信し、受信した立候補通知や提案通知をローカル記憶部15に記憶する。また、調停部143は、新たに受信した立候補通知や提案通知に含まれる提案番号nと、ローカル記憶部15に既に記憶されている、新しいマスタが決まるまでの間に受信してローカル記憶部15に記憶した提案番号n’との大小を比較し、提案番号nが提案番号n’以上であれば、確認通知PrepareACK(),ProposeACK()を送信する。
(比較例における第1のフェーズの処理)
第1のフェーズでは、既存のマスタに障害が発生したと判断したスレーブが、次の新たなマスタに選ばれるために、立候補通知Prepare()を他のスレーブに送信する。そして、最も早く立候補通知Prepare()を出したデータベース装置が選ばれて立候補者となる、または、立候補通知Prepare()を出したデータベース装置が複数あった場合には、予め決められた優先順位の高いデータベース装置が選ばれて立候補者となる。
図6は、比較例における第1のフェーズの処理の流れを示す(適宜図5参照)。まず、ステップS601では、立候補通知を送信するデータベース装置10D(以降、データベース装置10Dと称す。)の提案番号発行部141は、例えばマスタからのハートビートメッセージを所定時間受信しなかったとき、マスタに障害が発生したと判断し、立候補通知Prepare()を識別する提案番号nを発行する。ステップS602では、提案部142は、立候補通知Prepare(n)を、立候補通知を受信するデータベース装置10E(10),10F(10),・(以降、他のデータベース装置10と称す。)に送信する。なお、データベース装置10Dは、立候補通知Prepare(n)を自分自身に送信しても構わない。
ステップS603では、他のデータベース装置10の調停部143は、データベース装置10Dから送信された立候補通知Prepare(n)を受信する。ステップS604では、調停部143は、ローカル記憶部15を探索して、以前受信した立候補通知Prepare(n’)がある(ローカル記憶部15に記憶されている)か否かを判定する。以前受信した立候補通知Prepare(n’)が無い場合(ステップS604でNo)、ステップS605では、調停部143は、確認通知PrepareACK(n)を、データベース装置10Dに返信する。その後、ステップS606では、調停部143は、ステップS603において受信した立候補通知Prepare(n)を自身のローカル記憶部15に記憶する。
また、以前受信した立候補通知Prepare(n’)がある(ローカル記憶部15に記憶されている)場合(ステップS604でYes)、ステップS607では、調停部143は、提案番号nが以前受信した提案番号n’以上か否かを比較する。そして、提案番号nが以前受信した提案番号n’以上の場合(ステップS607でYes)、ステップS608では、調停部143は、提案番号がn以下の以前受信した提案通知Propose()の中で、最大の提案番号nmを持つ提案通知Propose(nm,v’)を読出し、確認通知PrepareACK(n,Propose(nm,v’))を、データベース装置10Dに返信する。なお、v’は、提案内容であり、例えば「誰(どのデータベース装置10)がマスタになる」という情報である。以前受信した提案通知Propose()がない場合は,確認通知PrepareACK(n)をデータベース装置10Dに返信する。前記ステップS605の確認通知PrepareACK(n)およびステップS608の確認通知PrepareACK(n,Propose(nm,v’))の返信と合わせて、あるデータベース装置Xが過半数以上の他のデータベース装置から確認通知ProposeACK()を受信した状態で,他のデータベース装置Yがデータベース装置Xの提案番号以上の提案番号を用いるPrepare()を発行した場合も,他のデータベース装置Yの提案通知Propose()はデータベース装置Xの提案内容と同じになる。したがって、あるデータベース装置Xが確認通知ProposeACK()を過半数受信していれば他のデータベース装置はマスタにならないことを保証する。また、ステップS609では、調停部143は、受信した立候補通知Prepare(n)を自身のローカル記憶部15に記憶する。
また、提案番号nが以前受信した提案番号n’以上でない場合(ステップS607でNo)、他のデータベース装置10の処理部14は、処理を終了する。すなわち、他のデータベース装置10の調停部143は、確認通知PrepareACK()を、データベース装置10Dに送信しない。
また、データベース装置10Dは、自分自身に、確認通知PrepareACK()を送信するものとする。
(比較例における第2のフェーズの処理)
第2のフェーズでは、第1のフェーズで選ばれた立候補者が、「自分がマスタである」という提案内容を提案通知Propose()として他のスレーブに送信し、その提案内容について他のスレーブから承認を受けることによって、自分がマスタとなり、自分以外のデータベース装置をスレーブとする関係を確立する。
図7は、比較例における第2のフェーズの処理の流れを示す(適宜図5参照)。まず、ステップS701では、データベース装置10Dの提案部142は、他のデータベース装置10から送信された確認通知PrepareACK()を受信する。次に、調停部143は、所定時間に受信した提案番号nの確認通知PrepareACK()の数が分散データベースシステム1全体に存在するデータベース装置10の数の過半数となったかを集計して、過半数の提案番号nの確認通知PrepareACK()を受信したか否かを判定する。そして、過半数の提案番号nの確認通知PrepareACK()を受信しなかった場合(ステップS701でNo)、ステップS702で、調停部143は、立候補が否決されたものと判断し、処理を終了する。なお、ステップS702の処理の後、新しいマスタが未だ決定していない場合には、データベース装置10Dの処理は、図6に示す処理のステップS601へ戻って、提案番号nを再計算して、ステップS602以降の処理を継続しても構わない。なお、再計算された提案番号nは、前回立候補通知に用いた数値よりは大きな数値にされる。
ステップS701において、過半数の提案番号nの確認通知PrepareACK()を受信した場合(ステップS701でYes)、ステップS703では、調停部143は、確認通知PrepareACK(n,Propose(nm,v’))を受信したか否かを判定する。そして、確認通知PrepareACK(n,Propose(nm,v’))を一つでも受信した場合(ステップS703でYes)、ステップS704では、調停部143は、各他のデータベース装置10から受信した提案通知Propose(nm,v’)の提案番号nm同士を比較する。そして、提案部142は、その比較結果を受けて、最大の提案番号の提案通知Propose()の提案内容v’を自身の提案内容vとして、提案通知Propose(n,v)を、他のデータベース装置10に送信する。なお、データベース装置10Dは、自分自身に提案通知Propose(n,v)を送信しても構わない。
ステップS703において確認通知PrepareACK(n,Propose(nm,v’))を受信しなかった場合(ステップS703でNo)、ステップS705では、提案部142は、自身の提案内容vを決定し、提案通知Propose(n,v)を、他のデータベース装置10に送信する。なお、ステップS704およびS705において、データベース装置10Dは、提案通知Propose(n,v)を自分自身に送信しても構わない。ステップS706では、他のデータベース装置10の調停部143は、提案通知Propose(n,v)を受信した後、ローカル記憶部15を探索し、提案番号nが以前受信した提案番号n’以上か否かを判定する。
そして、提案番号nが以前受信した提案番号n’以上の場合(ステップS706でYes)、ステップS707では、調停部143は、確認通知ProposeACK(n)を、データベース装置10Dに返信する。また、調停部143は、受信した提案通知Propose(n,v)をローカル記憶部15に記憶する。なお、提案番号nが以前受信した提案番号n’以上でない場合(ステップS706でNo)、他のデータベース装置10の処理部14は、処理を終了する。すなわち、他のデータベース装置10の調停部143は、確認通知ProposeACK()を、データベース装置10Dに送信しない。
ステップS708では、データベース装置10Dの提案部142は、他のデータベース装置10から送信された確認通知ProposeACK()を受信する。そして、調停部143は、所定時間に受信した確認通知ProposeACK(n)の数が分散データベースシステム1全体に存在するデータベース装置10の数の過半数となったかを集計して、過半数の確認通知ProposeACK(n)を受信したか否かを判定する。そして、過半数の確認通知ProposeACK(n)を受信しなかった場合(ステップS708でNo)、処理はステップS702へ進み、データベース装置10Dの調停部143は、立候補が否決されたものと判断し、処理を終了する。また、過半数の確認通知ProposeACK(n)を受信した場合(ステップS708でYes)、ステップS709では、データベース装置10Dの調停部143は、提案内容v(データベース装置10Dがマスタになること)が決定されたと判断する。そして、データベース装置10Dの調停部143は、提案内容vが確定したことを示す決定通知を、他のデータベース装置10に送信する。
なお、ステップS707以降のステップS710では、他のデータベース装置10の調停部143は、受信した提案通知Propose(n)を自身のローカル記憶部15に記憶する。そして、他のデータベース装置10の処理部14は、データベース装置10Dから決定通知を受信した後、ローカル記憶部15に記憶した立候補通知Prepare()、提案通知Propose()、確認通知PrepareACK(),ProposeACK()を消去して、処理を終了する。
≪本実施形態≫
次に本実施形態におけるマスタの決定処理について、図2〜4を用いて説明する。
(本実施形態のデータベース装置)
次に、データベース装置10(10A,10B,10C)の構成および機能について、図2を用いて説明する。図2に示すように、各データベース装置10A,10B,10Cは、処理部11、ローカル記憶部12、およびデータベース13を備える。処理部11は、コンピュータのCPUとメインメモリとで構成され、ローカル記憶部12に格納されているアプリケーションプログラムをメインメモリに展開して、各機能を具現化する。そして、処理部11は、図示しない入力装置を介して、クライアント端末20(図1参照)からの処理要求を受け付け、その処理要求に対する応答(処理結果)を返信する。ローカル記憶部12は、各種プログラムや処理部11の演算結果を記憶する。データベース13は、例えば、リレーショナルデータベース,ファイルシステム等によって、データを格納している。
処理部11は、図2に示すように、ログ管理部111、提案番号発行部112、提案部113、および調停部114を備える。
ログ管理部111は、データベース13の最新のログ更新番号を管理し、そのログ更新番号を、データベース13の状態と関連付けてローカル記憶部12に記憶する。なお、ログ更新番号は、連続する番号でなくともよく、データベースを更新するたびに大きくなるものとする。また、ログ管理部111は、提案番号発行部112からの指示によって、ローカル記憶部12から最新のログ更新番号を読み出し、提案番号発行部112へ出力する。
提案番号発行部112は、立候補通知Prepare()を他のデータベース装置10に出力するときに、ローカル記憶部12に記憶された最新のログ更新番号「L」と、予めデータベース装置10ごとにユニークに決められたデータベース装置ID(Identification)の「I」とを変数として用いて、提案番号(L,I)を発行する。なお、提案番号(L,I)は、ログ更新番号「L」が大きくなるにしたがって大きくなるものとする。提案番号発行部112は、新たなマスタが決定されるまでの間に立候補通知に対する応答(確認通知)が無い場合、再度立候補通知を出すごとに、提案番号(L,I)の中のLの値を+1増加した提案番号を発行する。そして、提案番号(L,I)は、新しいマスタが決定すると、初期値(最新のログ管理番号「L」とデータベース装置IDの「I」の組)にリセットされる。なお、本実施形態の提案番号(L,I)が比較例の提案番号nと異なる点は、比較例の提案番号nはデータベースのログ更新番号とは無関係であったのに対して、本実施形態の提案番号(L,I)中の「L」が、データベースのログ更新番号であることである。すなわち、提案番号(L,I)の大小を比較するときに、ログ更新番号「L」によって、最新の(ログ更新番号または提案番号が最も大きい)データベースの状態を保持するデータベース装置10を選びやすくすることができる。ちなみに、本実施形態では、提案番号(L,I)の大小比較において、最初に、ログ更新番号同士を比較する。そして、L>L’であれば、提案番号(L,I)が提案番号(L’,I’)より大きいと判定する。また、L=L’であれば、次に、データベース装置ID同士を比較する。そして、I>I’であれば、提案番号(L,I)が提案番号(L’,I’)より大きいと判定する。
提案部113は、立候補通知Prepare()や提案通知Propose()を他のデータベース装置10に送信し、他のデータベース装置10から立候補通知や提案通知に対する応答(確認通知PrepareACK(),ProposeACK())を受信する。調停部114は、立候補通知や提案通知を受信し、受信した立候補通知や提案通知をローカル記憶部12に記憶する。また、調停部114は、新たに受信した立候補通知や提案通知に含まれる提案番号(L,I)と、ローカル記憶部12に既に記憶されている、新しいマスタが決まるまでの間に受信してローカル記憶部12に記憶した提案番号(L’ ’,I’ ’)との大小を比較し、提案番号(L,I)が提案番号(L’ ’,I’ ’)以上であれば、確認通知PrepareACK(),ProposeACK()を送信する。
(本実施形態における第1のフェーズの処理)
図3は、本実施形態における第1のフェーズの処理の流れを示す(適宜図2参照)。まず、ステップS301では、立候補通知を送信するデータベース装置10A(以降、データベース装置10Aと称す。)のログ管理部111は、例えば、マスタからのハートビートメッセージを所定時間受信しなかった場合にマスタに障害が発生したと判断する提案番号発行部112からのトリガに基づいて、ログ更新番号「L」をローカル記憶部12から読出す。また、提案番号発行部112は、データベース装置ID「I」を取得する。ステップS302では、提案番号発行部112は、ログ更新番号「L」とデータベース装置ID「I」とを変数として、提案番号(L,I)を発行する。そして、提案部113は、立候補通知Prepare(L,I)を、立候補通知を受信するデータベース装置10B(10),10C(10),・(以降、他のデータベース装置10と称す。)に送信する。なお、データベース装置10Aは、立候補通知Prepare(L,I)を自分自身に送信しても構わない。
ステップS303では、他のデータベース装置10の調停部114は、データベース装置10Aから送信された立候補通知Prepare(L,I)を受信する。ステップS304では、調停部114は、ローカル記憶部12を探索して、記憶されている立候補通知Prepare()または提案通知Propose()の提案番号を読出して、以前受信した提案番号(L’’,I’’)があるか否かを判定する。そして、以前受信した提案番号(L’’,I’’)が無い場合(ステップS304でNo)、ステップS305では、ログ管理部111は、自身のログ更新番号「L’」およびデータベース装置ID「I’」をローカル記憶部12から取得し、提案番号発行部112が提案番号(L’,I’)を生成する。
ステップS306では、調停部114は、提案番号(L,I)が提案番号(L’,I’)以上か否かを判定する。提案番号(L,I)が提案番号(L’,I’)以上の場合(ステップS306でYes)、ステップS307では、調停部114は、確認通知PrepareACK(L,I)を、データベース装置10Aに返信する。その後、ステップS308では、調停部114は、ステップS303において受信した立候補通知Prepare(L,I)を自身のローカル記憶部12に記憶する。なお、本実施形態では、ステップS306を設けたことによって、少なくとも、ログ更新番号「L」が自身のものより小さいケースを受け付けなくすることができるようになり、ログ更新番号のより大きい(最新の)データベースを保持するデータベース装置10をマスタに選択する確率を高めることができる。
ここで、ステップS306における、提案番号(L,I)と提案番号(L’,I’)との大小比較について説明する。本実施形態では、最初に、ログ更新番号同士を比較する。そして、L>L’であれば、提案番号(L,I)が提案番号(L’,I’)より大きいと判定する。また、L=L’であれば、次に、データベース装置ID同士を比較する。そして、I>I’であれば、提案番号(L,I)が提案番号(L’,I’)より大きいと判定する。
そして、図3に戻って、ステップS306において、提案番号(L,I)が提案番号(L’,I’)以上でない場合(ステップS306でNo)、他のデータベース装置10の処理部14は、処理は終了する。すなわち、他のデータベース装置10の調停部114は、確認通知PrepareACK()を、データベース装置10Aに送信しない。
また、ステップS304において、以前受信した提案番号(L’’,I’’)がある場合(ステップS304でYes)、ステップS309では、調停部114は、ローカル記憶部12を探索して、以前受信した立候補通知Prepare()または提案通知Propose()の提案番号(L’’,I’’)の中で、最大の提案番号を抽出し、(Lm,Im)とする。次に、ステップS310では、調停部114は、提案番号(L,I)が提案番号(Lm,Im)以上か否かを判定する。
提案番号(L,I)が提案番号(Lm,Im)以上の場合(ステップS310でYes)、ステップS311では、調停部114は、以前受信した提案通知Propose()の中で、最大の提案番号(Lm,Im)を持つPropose((Lm,Im),v’)をローカル記憶部12から読出し、確認通知PrepareACK((L,I),Propose((Lm,Im),v’)を、データベース装置10Aに返信する。なお、v’は、提案内容であり、例えば「誰(どのデータベース装置10)がマスタになる」という情報である。以前受信した提案通知Propose(Lm, Im)がない場合は、確認通知PrepareACK(L,I)をデータベース装置10Aに返信する。また、ステップS312では、調停部114は、受信した立候補通知Prepare(L,I)を自身のローカル記憶部12に記憶する。
また、提案番号(L,I)が提案番号(Lm,Im)以上でないの場合(ステップS310でNo)、他のデータベース装置10の処理部11は、処理を終了する。すなわち、他のデータベース装置10の調停部114は、確認通知PrepareACK()を、データベース装置10Aに送信しない。
また、データベース装置10Aは、自分自身に、確認通知PrepareACK()を送信するものとする。
(本実施形態における第2のフェーズの処理)
図4は、本実施形態における第2のフェーズの処理の流れを示す(適宜図2参照)。まず、ステップS401では、データベース装置10Aの提案部113は、他のデータベース装置10から送信された確認通知PrepareACK(L,I)を受信する。次に、調停部114は、所定時間に受信した提案番号(L,I)の確認通知PrepareACK()の数が分散データベースシステム1全体に存在するデータベース装置10の数の過半数となったかを集計して、過半数の確認通知PrepareACK(L,I)を受信したか否かを判定する。そして、過半数の確認通知PrepareACK(L,I)を受信しなかった場合(ステップS401でNo)、ステップS402では、調停部114は、立候補が否決されたものと判断し、処理を終了する。なお、ステップS402の処理の後、新しいマスタが未だ決定していない場合には、データベース装置10Aの処理は、図3に示す処理のステップS301へ戻って、提案番号(L,I)を再計算し、ステップS302以降の処理を継続しても構わない。なお、再計算された提案番号(L,I)は、前回の立候補通知に用いたLに+1増加して生成される。
ステップS401において、過半数の確認通知PrepareACK(L,I)を受信した場合(ステップS401でYes)、ステップS403では、調停部114は、確認通知PrepareACK((L,I),Propose((Lm,Im),v’))を受信したか否かを判定する。そして、確認通知PrepareACK((L,I),Propose((Lm,Im),v’))を一つでも受信した場合(ステップS403でYes)、ステップS404では、調停部114は、各他のデータベース装置10から受信した提案通知Propose((Lm,Im),v’)の提案番号(Lm,Im)同士を比較する。そして、提案部113は、その比較結果を受けて、最大の提案番号の提案通知Propose()の提案内容v’を自身の提案内容vとして、提案通知Propose((L,I),v)を、他のデータベース装置10に送信する。なお、データベース装置10Aは、自分自身に提案通知Propose((L,I),v)を送信しても構わない。
ステップS403において確認通知PrepareACK((L,I),Propose((Lm,Im),v’))を受信しなかった場合(ステップS403でNo)、ステップS405では、提案部113は、自身の提案内容vを決定し、提案通知Propose((L,I),v)を、他のデータベース装置10に送信する。なお、ステップS404およびS405において、データベース装置10Aは、提案通知Propose((L,I),v)を、自分自身に送信しても構わない。ステップS406では、他のデータベース装置10の調停部114は、提案通知Propose((L,I),v)を受信した後、ローカル記憶部12を探索し、提案番号(L,I)が以前受信した提案番号(L’’,I’’)以上か否かを判定する。
そして、提案番号(L,I)が以前受信した提案番号(L’’,I’’)以上の場合(ステップS406でYes)、ステップS407では、調停部114は、確認通知ProposeACK(L,I)を、データベース装置10に返信する。また、調停部114は、受信した提案通知Propose(L,I)を自身のローカル記憶部12に記憶する。なお、提案番号(L,I)が以前受信した提案番号(L’’,I’’)以上でない場合(ステップS406でNo)、他のデータベース装置10の処理部11は、処理を終了する。すなわち、他のデータベース装置10の調停部114は、確認通知ProposeACK()を、データベース装置10Aに送信しない。
ステップS408では、データベース装置10Aの提案部113は、他のデータベース装置10から送信された確認通知ProposeACK(L,I)を受信する。そして、調停部114は、所定時間に受信した確認通知ProposeACK(L,I)の数が分散データベースシステム1全体に存在するデータベース装置10の数の過半数となったかを集計して、過半数の確認通知ProposeACK(L,I)を受信したか否かを判定する。そして、過半数の確認通知ProposeACK(L,I)を受信しなかった場合(ステップS408でNo)、処理はステップS402へ進み、データベース装置10Aの調停部114は、立候補が否決されたものと判断し、処理を終了する。また、過半数の確認通知ProposeACK(L,I)を受信した場合(ステップS408でYes)、ステップS409では、データベース装置10Aの調停部114は、提案内容v(データベース装置10Aがマスタになること)が決定されたと判断する。そして、データベース装置10Aの調停部114は、提案内容vが確定したことを示す決定通知を、他のデータベース装置10に送信する。
なお、ステップS407以降、ステップS410では、他のデータベース装置10の調停部114は、受信した提案通知Propose(L,I)を自身のローカル記憶部12に記憶する。そして、他のデータベース装置10の処理部11は、データベース装置10Aから決定通知を受信した後、ローカル記憶部12に記憶した立候補通知Prepare()、提案通知Propose()、確認通知PrepareACK(),ProposeACK()を消去して、処理を終了する。
(具体例)
本実施形態の処理の流れとその効果について、表1に示す具体例を用いて説明する(適宜図3,4参照)。表1に示すように、分散データベースシステム1が、マスタ(データベース装置名N1)1台、スレーブ(データベース装置名N2,N3,N4,N5)4台の合計5台のデータベース装置によって構成されているものとする。

Figure 0005395517
第1のフェーズでは、マスタのN1に障害が発生して、各スレーブは、N4,N2,N3,N5の順に立候補通知Prepare()を送信するものとする。スレーブN4は、提案番号を(122,4)として、立候補通知Prepare(122,4)を他のスレーブN2,N3,N5に送信する(ステップS302)。他のスレーブN2,N3,N5は、N4から立候補通知Prepare(122,4)を受信する(ステップS303)。この立候補通知Prepare(122,4)受信時点では、他のスレーブN2,N3,N5は、それぞれの記憶部に記憶した立候補通知が存在しない(すなわち、以前受信した提案番号がない)ので(ステップS304)、それぞれの記憶部から自身のログ更新番号「L」を読出し(ステップS305)、自身の提案番号(L,I)を生成する。そして、他のスレーブN2,N3,N5は、自身の提案番号(L,I)と、受信した立候補通知Prepare(122,4)の提案番号(122,4)とを比較する(ステップS306)。提案番号同士の比較では、スレーブN2については、(123,2)>(122,4)、スレーブN3については、(122,3)<(122,4)、スレーブN5については、(122,5)>(122,4)となる。その結果、スレーブN3および自分(N4)は、確認通知PrepareACK(122,4)を送信する(ステップS307)。その後、スレーブN3およびスレーブN4は、確認通知Prepare(122,4)を記憶部に記憶する(ステップS308)。そして、スレーブN4は、スレーブN3および自分(N4)から確認通知PrepareACK(122,4)を受信する(ステップS401)。すなわち、スレーブN4は、5台のデータベース装置のうち、2台からしか確認通知PrepareACK(122,4)を受信できない。したがって、スレーブN4は、過半数の確認通知PrepareACK(122,4)を受信できないことになり、立候補否決となる(ステップS402)。
次に、スレーブN2が送信した立候補通知Prepare(123,2)に対しては、それを受信したスレーブN3およびスレーブN4は、ステップS308において既に記憶部に記憶した立候補通知Prepare(122,4)が存在するため、記憶されている最大の提案番号である(122,4)を抽出し(ステップS309)、提案番号同士の比較を行う(ステップS310)。その比較結果は、スレーブ3については、(122,4)<(123,2)、スレーブ4については、(122,4)<(123,2)となる。また、スレーブ5については、(122,5)<(123,2)となる。したがって、スレーブN2の送信した立候補通知Prepare(123,2)に対しては、スレーブN2,N3,N4,N5は、確認通知PrepareACK(123,2)を送信することになる(ステップS311)。そして、スレーブN2は、スレーブN2,N3,N4,N5から確認通知PrepareACK(123,2)を受信する(ステップS401)。したがって、スレーブN2は、第2のフェーズにおいて、提案通知Propose((123,2),「マスタはN2である」)を全データベース装置に送信する(ステップS405)。次に、ステップS406において提案番号(123,2)が以前受信した提案番号(123,2)以上であるので、各スレーブN2、N3,N4,N5は、確認通知Propose(123,2)を送信する。そして、スレーブN2は、過半数のデータベース装置から確認通知ProposeACK(123,2)を受信して(ステップS408)、提案内容「マスタはN2である」に決定する(ステップS409、S411)。
前記したように、本実施形態では、ステップS304において、最初に受信した立候補通知の提案番号は必ず自身の提案番号と比較されるため、記憶部に記憶される、以前受信した提案番号は必ず自身の提案番号以上に限られる。したがって、過半数のデータベース装置のログ更新番号が最新のものである場合、必ず(100%の確率で)、最新のログ更新番号のデータベースを保持するデータベース装置が新しいマスタに選択される。なお、半数以下のデータベース装置しか最新のログ更新番号のデータベースを保持していない場合、データベース装置の台数をMとすると、最悪の状態で、(M+1)/(2×(M−1))の確率で最新のログ更新番号のデータベースを持つデータベース装置が、新しいマスタになる。すなわち、表1に示すM=5の場合には、最悪でも75%の確率で最新のログ更新番号のデータベースを保持するデータベース装置が、新しいマスタになる。また、半数以上のデータベース装置のログ更新番号が最新のものである確率を0.5とした場合、新しいマスタが最新のログ更新番号となる確率は、100%×0.5+75%×0.5=87.5%となる。
≪変形例≫
前記した実施形態では、マスタに障害が発生したと判定してから、初回(1回目)の立候補通知Prepare()を送信した場合について説明をしたが、本変形例では、新しいマスタが決まるまでの間に、再度の立候補通知Prepare()を送信する場合において、最新のログ更新番号のデータベースを保持するデータベース装置10が新しいマスタに決定される確率を高める方法について、説明する(適宜図1,3参照)。
本実施形態における第1のフェーズにおいて、データベース装置10Aが初回(1回目)の立候補通知Prepare()を送信したにもかかわらす、確認通知PrepareACK()を受信できず、その後他のスレーブの立候補通知Prepare()や提案通知Propose()も受信できなかった場合を想定する。この場合、データベース装置10Aは、確認通知PrepareACK()を受信できない理由が、(a)立候補通知Prepare()がネットワーク30内でパケット損失によって消滅してしまったのか、(b)提案番号が小さいためなのか、(c)確認通知PrepareACK()がネットワーク30内でパケット損失によって消滅してしまったのか、(d)新たにマスタに選択されたデータベース装置10が故障したのか、を知ることができない。それを明確にするために、データベース装置10Aは、所定時間待った後、立候補通知Prepare()を再度送信する。このとき、立候補通知Prepare()に用いる提案番号(L,I)は、前回の立候補通知Prepare()に用いたLの値に、立候補通知Prepare()を送信するごとに+1増加したものを用いる。そして、前回用いたLに+1増加した提案番号を用いて、図3のステップS302以降の処理が実行される。
この立候補通知を再度送信する場合について、表1のケースを用いて説明する。マスタN1に障害が発生したと判断したとき、スレーブN4,N2,N3,N5の順で第1のフェーズが開始されたものとする。スレーブN4の初回(1回目)の立候補通知Prepare()は、提案番号比較の結果、前記したように、過半数の確認通知PrepareACK()を受信することはできない。しかし、スレーブN4は、所定時間待った後、2回目の立候補通知Prepare()を送信するまでに、他のスレーブN2,N3,N5のいずれもが立候補通知Prepare()を送信していなければ、初回の提案番号(122,4)を提案番号(123,4)として立候補通知Prepare(123,4)を送信するために、最新のログ更新番号でないにもかかわらず、新しいマスタになってしまうという事態が起きる。
そこで、ログ更新番号が最新のデータベースを保持するスレーブが、新しいマスタに選択される確率を高くするために、3つの案について説明する。
第1案は、いずれかのデータベース装置10が再度の立候補通知Prepare()を送信する前に、すべてのスレーブが初回の立候補通知Prepare()を送信できるように、再度の立候補通知を発行できる時間を設定することである。例えば、マスタからのハートビートメッセージは、ブロードキャストによって全スレーブに送信される。スレーブは、所定時間内にハートビートメッセージを受信しなければ、マスタに障害が発生したと判定し、第1のフェーズを開始する。マスタのハートビート送出装置の負荷状況またはネットワークの輻輳状況によっては、立候補通知Prepare()を送信するタイミングが、スレーブごとに異なって、最も早く送信される立候補通知Prepare()の送信時刻と最後に送信される立候補通知Prepare()の送信時刻との時間差が大きくなる場合がある。5台のデータベース装置10を用いたシミュレーション実験による結果では、前記時間差を2秒と見積もればほとんどの場合で、再度の立候補通知Prepare()の送信前に、すべてのスレーブが初回の立候補通知Prepare()を送信できることが分かった。
第2案は、受信した立候補通知Prepare()の提案番号(L,I)が、自身の提案番号(L’,I’)より小さい場合に、自身の立候補通知Prepare()を送信することである。この構成によって、ログ更新番号が小さいスレーブが立候補通知Prepare()を送信しても、そのログ更新番号以上のログ更新番号のスレーブが立候補通知Prepare()を送信するため、より高い確率で、最新のログ更新番号のデータベースを保持するデータベース装置10が新しいマスタに選択されることになる。なお、前記第1案および第2案では、ネットワーク30において、パケットの損失、遅延、転置が発生する場合を含む環境において有効な方法である。
第3案では、ネットワーク30において、パケットの損失、遅延、転置が発生しない環境において用いることが有効な方法について説明する。例えば、表1のケースにおいて、スレーブN5,N4,N3,N2の順に第1のフェーズの処理を開始したとする。スレーブN5は、提案番号(122,5)を含む立候補通知Prepare(122,5)を他のスレーブN2,N3,N4に送信する。スレーブN5は、スレーブN3,N4および自身(N5)からPrepareACK(122,5)を受信する、すなわち、過半数のPrepareACK()を受信することができる。そして、スレーブN5は、最新のログ更新番号のデータベースを保持していなくても、新しいマスタとなってしまうという問題がある。これは、最新のログ更新番号のデータベースを保持するスレーブの台数が半数未満であり、かつ、スレーブN5のIDが過半数のスレーブのIDより高いことに起因している。そこで、マスタからハートビートメッセージを受信してからマスタの故障と判定するまでの判定時間を、優先順位の高いほど(IDの大きいほど)判定時間を長くすることによって、前記問題を解決することができる。
以上、本実施形態および変形例の分散データベースシステム1によれば、図3に示すステップS304〜S305において、以前に受信した提案番号(L’’,I’’)がない(すなわち、初めて立候補通知Prepare(L,I)を受信した)場合、自身のログ更新番号「L」’およびデータベース装置ID「I’」を取得して生成した提案番号(L’,I’)を比較基準として備えている。しかし、比較例では、ステップS604において、以前に受信した提案番号n’がない(すなわち、初めて立候補通知Prepare(n)を受信した)場合、提案番号の大小を比較する基準を備えていない。そのため、本実施形態では、少なくとも、立候補通知Prepare(L,I)を受信したデータベース装置10は、自身のログ更新番号「L’」より小さい立候補通知Prepare()に対して、確認通知PrepareACK()を返信することはなく、必ず、自身のログ更新番号「L」以上のデータベース装置10をマスタの候補とすることができる。すなわち、新しく選ばれるマスタが、最新のログ更新番号のデータベースを備えている確率を高めることができる。したがって、分散データベースシステム1において、マスタに障害が発生したときの可用性を高めることができる。
なお、本実施形態では、提案番号を(L,I)の場合について説明したが、ログ更新番号「L」だけを用いても、可用性を高める効果をもたらすことが可能である。
また、本実施形態では、データベースの場合について説明したが、版数管理をしているデータやファイルに対しても、適用することが可能である。
また、本実施形態において、データベース装置10(図2参照)の各部の処理は、データベース装置10をコンピュータで実現したときに搭載されるプログラムによって実現されてもよい。このプログラムは、通信回線を介して提供することもできるし、CD−ROM等のコンピュータ読み取り可能な記録媒体に書き込んで配布することも可能である。
1 分散データベースシステム(分散データ管理システム)
10(10A,10B,10C) データベース装置(データ管理装置)
11 処理部
12 ローカル記憶部(記憶部)
13 データベース
30 ネットワーク
111 ログ管理部
112 提案番号発行部
113 提案部
114 調停部

Claims (8)

  1. 3台以上のデータ管理装置がネットワークを介して相互に通信可能に接続され、前記データ管理装置の中の1台をマスタとし、他の前記データ管理装置をスレーブとして、マスタ障害時にスレーブの中から新しいマスタを選択する分散データ管理システムであって、
    前記スレーブは、処理部と、当該スレーブの管理するデータを更新するたびに大きくなるデータの更新番号およびその更新番号が大きくなるにしたがって大きくなる前記更新番号を変数とする提案番号を記憶する記憶部とを備え、
    前記スレーブの処理部は、
    マスタ障害時に、自身の記憶部から自身の更新番号を読出し、その更新番号を変数とする提案番号を含む立候補通知を他のスレーブに送信し、
    前記他のスレーブの処理部は、
    前記立候補通知を新たに受信したとき、自身の記憶部を探索して、
    該立候補通知を受信する以前に記憶した提案番号が無い場合には、自身の記憶部から自身の更新番号を読み出して、該更新番号を変数とする自身の提案番号を生成し、該自身の提案番号と新たに受信した前記立候補通知の提案番号との大小を比較して、前記新たに受信した前記立候補通知の提案番号が該自身の提案番号以上のとき、前記立候補通知の提案番号を含むその立候補通知に対する確認通知を、前記立候補通知を送信したスレーブに返信し、前記新たに受信した前記立候補通知の提案番号を自身の記憶部に記憶し、
    前記立候補通知を受信する以前に記憶した提案番号がある場合には、該記憶した提案番号中で最大の提案番号を抽出し、前記新たに受信した前記立候補通知の提案番号が前記最大の提案番号以上であれば、前記立候補通知の提案番号を含むその立候補通知に対する確認通知を、前記立候補通知を送出したスレーブに送信し、前記新たに受信した前記立候補通知の提案番号を自身の記憶部に記憶し、
    前記立候補通知を送信したスレーブは、
    前記分散データ管理システムに属するすべての前記データ管理装置中の過半数の前記スレーブから前記自身の提案番号を含む確認通知を受信したときに、自身の提案番号を含む自身がマスタになることを示す提案情報をすべての前記スレーブに送信し、
    前記分散データ管理システムに属するすべての前記データ管理装置中の過半数の前記スレーブから前記提案情報に対する確認通知を受信した後、前記提案情報が確定したことを示す決定通知を前記他のスレーブに送信し、
    前記他の前記スレーブは、前記決定通知を受信し、自身の記憶部から、既に記憶されている前記立候補通知の提案番号を消去する
    ことを特徴とする分散データ管理システム。
  2. 前記提案番号は、前記データの更新番号に、新しいマスタに選択される優先順位を示す前記データを識別するIDをさらに組み合わせたものであり、
    前記処理部は、前記提案番号の大小比較において、
    前記提案番号から取り出した更新番号同士を比較し、該更新番号の大きい方を、前記提案番号が大きいと判定し、
    前記更新番号同士が等しい場合には、前記データを識別するID同士を比較し、前記データを識別するIDの大きい方を、前記提案番号が大きいと判定する
    ことを特徴とする請求項1に記載の分散データ管理システム。
  3. 請求項1に記載の分散データ管理システムにおいて用いられるデータ管理装置であって、
    前記スレーブの管理するデータを更新するたびに大きくなるデータの更新番号およびその更新番号が大きくなるにしたがって大きくなる前記更新番号を変数とする提案番号を記憶する記憶手段と、
    マスタ障害時に、自身の記憶部から自身の更新番号を読出し、その更新番号を変数とする提案番号を含む立候補通知を他のスレーブに送信する手段と、
    前記立候補通知を新たに受信したとき、自身の記憶部を探索して、該立候補通知を受信する以前に記憶した提案番号が無い場合には、自身の記憶部から自身の更新番号を読み出して、該更新番号を変数とする自身の提案番号を生成し、該自身の提案番号と新たに受信した前記立候補通知の提案番号との大小を比較して、前記新たに受信した前記立候補通知の提案番号が該自身の提案番号以上のとき、前記立候補通知の提案番号を含むその立候補通知に対する確認通知を、前記立候補通知を送信したスレーブに返信し、前記新たに受信した前記立候補通知の提案番号を自身の記憶部に記憶し、前記立候補通知を受信する以前に記憶した提案番号がある場合には、該記憶した提案番号中で最大の提案番号を抽出し、前記新たに受信した前記立候補通知の提案番号が前記最大の提案番号以上であれば、前記立候補通知の提案番号を含むその立候補通知に対する確認通知を、前記立候補通知を送信したスレーブに返信し、前記新たに受信した前記立候補通知の提案番号を自身の記憶部に記憶する手段と、
    受信した確認通知に含まれる提案番号ごとに受信した数をカウントする第1のカウント手段と、
    前記分散データ管理システムに属するすべての前記データ管理装置の数と前記第1のカウント手段によってカウントされた提案番号ごとの受信数との比から、前記確認通知の受信数が過半数を超えたことを判定する第1の判定手段と、
    前記第1の判定手段によって、前記確認通知の受信数が過半数を超えたと判定されたとき、自身の提案番号を含む自身がマスタになることを示す提案情報をすべての前記スレーブに送信する手段と、
    受信した前記自身の提案番号を含む自身がマスタになることを示す情報に含まれる提案番号ごとに受信した数をカウントする第2のカウント手段と、
    前記分散データ管理システムに属するすべての前記データ管理装置の数と前記第2のカウント手段によってカウントされた提案番号ごとの受信数との比から、いずれかの提案番号の前記提案情報の受信数が過半数を超えたことを判定する第2の判定手段と、
    前記第2の判定手段によって、前記提案情報の受信数が過半数を超えたと判定されたとき、前記提案情報が確定したことを示す決定通知を前記他のスレーブに送信する手段と、
    前記決定通知を受信し、自身の記憶部から、既に記憶されている前記立候補通知の提案番号を消去する手段
    とを備えることを特徴とするデータ管理装置。
  4. 前記提案番号は、前記データの更新番号に、新しいマスタに選択される優先順位を示す前記データを識別するIDをさらに組み合わせたものであり、
    前記提案番号の大小比較において、前記提案番号から取り出した更新番号同士を比較し、該更新番号の大きい方を、前記提案番号が大きいと判定し、前記更新番号同士が等しい場合には、前記データを識別するID同士を比較し、前記データを識別するIDの大きい方を、前記提案番号が大きいと判定する手段
    を備えることを特徴とする請求項3に記載のデータ管理装置。
  5. 3台以上のデータ管理装置がネットワークを介して相互に通信可能に接続され、前記データ管理装置の中の1台をマスタとし、他の前記データ管理装置をスレーブとして、マスタ障害時にスレーブの中から新しいマスタを選択する分散データ管理システムにおいて用いられるデータ管理方法であって、
    前記スレーブは、処理部と、当該スレーブの管理するデータを更新するたびに大きくなるデータの更新番号およびその更新番号が大きくなるにしたがって大きくなる前記更新番号を変数とする提案番号を記憶する記憶部とを備え、
    前記スレーブの処理部は、
    マスタ障害時に、自身の記憶部から自身の更新番号を読出し、その更新番号を変数とする提案番号を含む立候補通知を他のスレーブに送信し、
    前記他のスレーブの処理部は、
    前記立候補通知を新たに受信したとき、自身の記憶部を探索して、
    該立候補通知を受信する以前に記憶した提案番号が無い場合には、自身の記憶部から自身の更新番号を読み出して、該更新番号を変数とする自身の提案番号を生成し、該自身の提案番号と新たに受信した前記立候補通知の提案番号との大小を比較して、前記新たに受信した前記立候補通知の提案番号が該自身の提案番号以上のとき、前記立候補通知の提案番号を含むその立候補通知に対する確認通知を、前記立候補通知を送信したスレーブに返信し、前記新たに受信した前記立候補通知の提案番号を自身の記憶部に記憶し、
    前記立候補通知を受信する以前に記憶した提案番号がある場合には、該記憶した提案番号中で最大の提案番号を抽出し、前記新たに受信した前記立候補通知の提案番号が前記最大の提案番号以上であれば、前記立候補通知の提案番号を含むその立候補通知に対する確認通知を、前記立候補通知を送信したスレーブに返信し、前記新たに受信した前記立候補通知の提案番号を自身の記憶部に記憶し、
    前記立候補通知を送信したスレーブは、
    前記分散データ管理システムに属するすべての前記データ管理装置中の過半数の前記スレーブから前記自身の提案番号を含む確認通知を受信したときに、自身の提案番号を含む自身がマスタになることを示す提案情報をすべての前記スレーブに送信し、
    前記分散データ管理システムに属するすべての前記データ管理装置中の過半数の前記スレーブから前記提案情報に対する確認通知を受信した後、前記提案情報が確定したことを示す決定通知を前記他のスレーブに送信し、
    前記他の前記スレーブは、前記決定通知を受信し、自身の記憶部から、既に記憶されている前記立候補通知の提案番号を消去する
    ことを特徴とするデータ管理方法。
  6. 前記他のスレーブの処理部は、
    前記立候補通知を新たに受信したとき、
    自身の記憶部を探索して、自身の更新番号を読出し、該更新番号を変数とする自身の提案番号を生成し、該自身の提案番号と新たに受信した前記立候補通知の提案番号との大小を比較して、前記新たに受信した前記立候補通知の提案番号が該自身の提案番号以下であれば、自身の立候補通知を自身以外の前記スレーブに送信する
    ことを特徴とする請求項5に記載のデータ管理方法。
  7. 前記提案番号は、前記データの更新番号に、新しいマスタに選択される優先順位を示す前記データを識別するIDをさらに組み合わせたものであり、
    前記処理部は、前記提案番号の大小比較において、
    前記提案番号から取り出した更新番号同士を比較し、該更新番号の大きい方を、前記提案番号が大きいと判定し、
    前記更新番号同士が等しい場合には、前記データを識別するID同士を比較し、前記データを識別するIDの大きい方を、前記提案番号が大きいと判定する
    ことを特徴とする請求項5または請求項6に記載のデータ管理方法。
  8. 請求項5ないし請求項7のいずれか一項に記載のデータ管理方法を、コンピュータとしてのデータ管理装置に実行させるためのプログラム。
JP2009131309A 2009-05-29 2009-05-29 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム Expired - Fee Related JP5395517B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009131309A JP5395517B2 (ja) 2009-05-29 2009-05-29 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009131309A JP5395517B2 (ja) 2009-05-29 2009-05-29 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム

Publications (2)

Publication Number Publication Date
JP2010277467A JP2010277467A (ja) 2010-12-09
JP5395517B2 true JP5395517B2 (ja) 2014-01-22

Family

ID=43424346

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009131309A Expired - Fee Related JP5395517B2 (ja) 2009-05-29 2009-05-29 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム

Country Status (1)

Country Link
JP (1) JP5395517B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5613119B2 (ja) * 2011-07-26 2014-10-22 日本電信電話株式会社 マスター/スレーブシステム、制御装置、マスター/スレーブ切替方法、および、マスター/スレーブ切替プログラム
JP5900094B2 (ja) * 2012-03-28 2016-04-06 日本電気株式会社 データ整合システム、データ整合方法およびデータ整合プログラム
KR101750601B1 (ko) 2014-08-28 2017-06-27 네이버 주식회사 장애 내구성을 지닌 클러스터의 상태 감시 및 클러스터의 형상 변경을 위한 클러스터 관리 방법 및 데이터 저장 시스템
JP6282989B2 (ja) * 2015-02-16 2018-02-21 日本電信電話株式会社 データベースシステム及びそのマスター/スレーブ決定方法
JP6918565B2 (ja) * 2017-05-02 2021-08-11 株式会社メガチップス 通信端末装置、情報通信システム、プログラムおよび情報通信方法
US10200197B1 (en) * 2017-12-18 2019-02-05 Nec Corporation Scalable crash fault-tolerance consensus protocol with efficient message aggregation
WO2022031258A1 (en) * 2020-08-03 2022-02-10 Hitachi Vantara Llc Randomization of heartbeat communications among multiple partition groups

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2002332845B2 (en) * 2001-09-06 2008-06-12 Oracle International Corporation Exactly once cache framework
US7711825B2 (en) * 2003-12-30 2010-05-04 Microsoft Corporation Simplified Paxos
US7334154B2 (en) * 2004-06-18 2008-02-19 Microsoft Corporation Efficient changing of replica sets in distributed fault-tolerant computing system
US7698465B2 (en) * 2004-11-23 2010-04-13 Microsoft Corporation Generalized Paxos

Also Published As

Publication number Publication date
JP2010277467A (ja) 2010-12-09

Similar Documents

Publication Publication Date Title
US10204114B2 (en) Replicating data across data centers
JP5395517B2 (ja) 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム
KR101484333B1 (ko) 충돌 지식의 전파
WO2019217482A1 (en) Merging conflict resolution for multi-master distributed databases
US10331625B2 (en) Managing sequential data store
JP5092234B2 (ja) 情報処理装置、分散同期型情報システム、情報同期方法、及び、プログラム
US20190129976A1 (en) Apparatus for controlling synchronization of metadata on network and method for the same
US8095495B2 (en) Exchange of syncronization data and metadata
US8296372B2 (en) Method and system for merging electronic messages
US11620087B2 (en) Implicit leader election in a distributed storage network
US11265182B2 (en) Messaging to enforce operation serialization for consistency of a distributed data structure
JP3756349B2 (ja) データベース管理装置、および、そのプログラムが記録された記録媒体
JP6586174B2 (ja) データベースシステム、トランザクション管理ノード、方法およびプログラム
JP2011070636A (ja) データ同期システム、データ同期方法、情報処理装置、情報処理方法、およびプログラム
JP5416490B2 (ja) 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム
US20140025630A1 (en) Data-store management apparatus, data providing system, and data providing method
JP6459654B2 (ja) イベントドリブンシステム、情報処理装置、イベントドリブンプログラムおよびイベントドリブン方法
Brahneborg et al. Towards a more reliable store-and-forward protocol for mobile text messages
JP6043687B2 (ja) サーバ/クライアントシステム
JPWO2016067370A1 (ja) 情報処理装置、方法およびプログラム
RU2609089C2 (ru) Система и способ выполнения очереди запросов в отношении цифровых объектов
JPH11327989A (ja) データベース管理装置、および、そのプログラムが記録された記録媒体
JP5877802B2 (ja) 通信端末装置及び通信アクセス方法
WO2024108348A1 (en) Method and system for eventual consistency of data types in geo-distributed active-active database systems
US10938701B2 (en) Efficient heartbeat with remote servers by NAS cluster nodes

Legal Events

Date Code Title Description
RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20110819

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110920

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130201

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131002

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131015

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131018

R150 Certificate of patent or registration of utility model

Ref document number: 5395517

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees