JP2007241323A - 多重化データベースシステム及びそのデータ同期化方法、仲介装置、仲介プログラム、データベースサーバ、データベースサーバプログラム - Google Patents

多重化データベースシステム及びそのデータ同期化方法、仲介装置、仲介プログラム、データベースサーバ、データベースサーバプログラム Download PDF

Info

Publication number
JP2007241323A
JP2007241323A JP2004141174A JP2004141174A JP2007241323A JP 2007241323 A JP2007241323 A JP 2007241323A JP 2004141174 A JP2004141174 A JP 2004141174A JP 2004141174 A JP2004141174 A JP 2004141174A JP 2007241323 A JP2007241323 A JP 2007241323A
Authority
JP
Japan
Prior art keywords
server
database server
database
difference information
synchronization
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004141174A
Other languages
English (en)
Inventor
Takeshi Mishima
健 三島
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 JP2004141174A priority Critical patent/JP2007241323A/ja
Priority to PCT/JP2005/006483 priority patent/WO2005096155A1/ja
Publication of JP2007241323A publication Critical patent/JP2007241323A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

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

Abstract

【課題】 少ない同期化用データで復旧後のデータベースサーバの同期化を図るとともに、システム全体をダウンさせることなく、データベースサーバのデータ記憶状況に拘わらずデータベースサーバを任意に切り離し又は組み込むことができる多重化データベースシステムを提供する。
【解決手段】 新規のサーバ100の組み込み要求があると、正常稼働中のサーバ100の1つを切り離して同期化用サーバ100とし、同期化用サーバ100がスナップショットを作成し、新規のサーバ100に転送して該スナップショットからデータベース101を復元する。仲介装置200は、組込要求後のクライアントからのクエリを差分情報として蓄積する。差分情報は、新規のサーバ100及び同期化用サーバに転送する。
【選択図】 図1

Description

本発明は、障害などによりサービスが停止することなく常時連続したサービス提供が要求される多重化データベースシステムに関し、特に該システムを構成するデータベースサーバに障害が発生した場合の復旧処理や新規のデータベースサーバの組み込み処理を、サービス提供を継続したまま実施するためのデータ同期化技術に関する。
従来のデータベース同期化技術としては、例えば特許文献1に記載されているものが知られている。この従来技術では、それぞれデータベースを内蔵する複数のサーバがネットワーク等を介して相互接続されている。図39に示すように、特許文献1に記載されている実施例では、3個のサーバ1010,1020,1030を含み、それぞれネットワーク1040を介して相互接続されている。各サーバ1010,1020及び1030は、それぞれデータ更新制御部1011,1021,1031と、レプリケーション制御部1012,1022,1032と、データベース1013,1023,1033及び差分ファイル1014,1024,1034を含んでいる。
サーバ1010のデータ更新制御部1011は、データベースの更新処理を行う。レプリケーション制御部1012は、差分ファイル1014によりデータベース1013の同期化処理を行う。データベース1013は、データを一括管理する。差分ファイル1014は、データベース1013の差分情報を格納する。また、サーバ1020及び1030のデータ更新制御部1021,1031、レプリケーション制御部1022,1032、データベース1023,1033及び差分ファイル1024,1034は、それぞれ上述したデータ更新制御部1011,レプリケーション制御部1012,データベース1013及び差分ファイル1014と同様の機能を有する。
サーバ1010にデータ更新イベントが発生した場合、サーバ1010のデータ更新制御部1011は、自データベース1013の内容を更新した後、サーバ1020及びサーバ1030に対してデータ更新通知を送信する。サーバ1020及びサーバ1030のデータ更新制御部1021,1031は、自データベース1023,1033の内容を更新する。その後、サーバ1020及び1030は、それぞれサーバ1010に対してデータ更新完了通知を送信する。サーバ1010は、サーバ1020及びサーバ1030からのデータ更新完了通知がともに正常であれば、何も行わずに更新処理を終了する。差分ファイル1014,1024,1034には何も書き込まれない。
サーバ1030が障害などでダウンしている時にサーバ1010にデータ更新イベントが発生した場合、サーバ1020はデータ更新完了通知をサーバ1010へ送信するが、サーバ1030はデータ更新完了通知をサーバ1010へ送信できない。サーバ1010は、サーバ1030からのデータ更新完了通知を待ち続けるが、タイムアウトし、サーバ1030での更新が正常に終了しなかったことを知る。サーバ1010は、差分ファイル1014に更新が失敗した装置の情報(この場合、サーバ1030)と更新内容を保存する。以上で、サーバ1010は更新処理を終了する。
サーバ1020にデータ更新イベントが発生した場合も、サーバ1020は上述と同様の処理を行い、差分ファイル1024に更新が失敗した装置の情報と更新内容を保存し、更新処理を終了する。
以上のようにして、サーバ1030が復旧するまでの間、サーバ1010とサーバ1020は更新内容をそれぞれ差分ファイル1014,1024へ保存し続ける。
サーバ1030が障害から復旧すると、サーバ1030のレプリケーション制御部1032はサーバ1010に対してレプリケーション開始通知を送信する。サーバ1010のレプリケーション制御部1012は差分ファイル1014に保存されているデータを古い順に取り出し、サーバ1030へデータ更新通知を送信する。サーバ1030は自データベース1033の内容を更新した後、データ更新完了通知をサーバ1010へ送信する。サーバ1010は、データ更新完了通知を受信するたびに該当するデータを差分ファイル1014から削除する。
差分ファイル1014が空になったら、サーバ1020の差分ファイル1024のデータを上記と同様にしてサーバ1030に送信する。差分ファイル1024も空になったら、サーバ1030の同期化が完了する。
特開2001−290687号公報
しかしながら、上記特許文献1に記載のものでは、障害発生直後から正常稼働中のサーバがデータ更新内容を差分ファイルに蓄積しはじめるため、障害サーバの復旧までの時間が長くなると差分ファイルが巨大になってしまう。その結果、正常稼働中のサーバの記憶容量を食い潰してそのサーバが障害になってしまったり、障害から復旧したサーバの同期完了までに時間がかかるなどの問題がある。
また、同期化の手順は障害が発生した時点のデータベースに、障害が発生した後の更新内容を反映させるという方法である。このことは、同期化するサーバーは障害が発生する直前までのデータベースを正常に保持していることが前提となっていることを意味する。したがって、ハードディスクの故障などデータベースが破壊される障害が発生した場合、このサーバを同期化させることが不可能であるという問題がある。また、同じ理由から、サーバをアップグレードする場合など、データを全く保持していない新しいサーバを同期化することができないという問題もある。
さらに、同期化の手順は障害が発生した後の更新内容と障害が発生する直前までのデータベースを基に行う方式、つまり、障害発生時点をポイントとした方式であるため、障害復旧以外の目的にこの方式を使うことができない。すなわち、システム全体のサーバ台数を増やす目的で、新たなサーバを同期化させることはできないという問題がある。例えば、特許文献1の実施例では、システム全体のサーバ台数は3台であるが、これを4台に増やすために4台目のサーバを同期化させることはできない。
また、システム全体のサーバ台数を減らすことができないという問題点もある。その理由は、サーバを1台切り離すと、永遠に差分ファイルを蓄積するためである。
さらに、トランザクションが失敗した場合にその失敗したトランザクションの更新内容を取り消す方法が無いという問題もある。
さらに、障害でダウンしたサーバ以外の全てのサーバで、更新内容を分散して保存しているため、2台以上のサーバがダウンした場合には障害になったサーバを同期化できないという問題もある。
本発明は、上記事情に鑑みてなされたものであり、第1の目的とするところは、データベースサーバに障害が発生しても少ない同期化用データで復旧後のデータベースサーバの同期化を図ることができる多重化データベースシステムを提供することにある。また、第2の目的とするところは、システム全体をダウンさせることなく、データベースサーバのデータ記憶状況に拘わらずデータベースサーバを任意に切り離し又は組み込むことができる多重化データベースシステムを提供することにある。
上記目的を達成するために、本願発明では、複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正常な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、仲介装置は、クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部を備える。そして、この仲介装置は、新規の又はこのシステムから切り離されたデータベースサーバ(以後「新規データベースサーバ」と言う)のシステムへの組み込み要求があると、(1a)正常稼働中のデータベースサーバの中から選択した1つのデータベースサーバ(以下「同期化用データベースサーバ」と言う)に対してスナップショットの作成を指示するとともに、この同期化用データベースサーバをシステムから切り離し、(1b)組み込み要求受信時以降にクライアントコンピュータから受信する処理要求を正常稼働中の他のデータベースサーバを用いて処理するとともに、該処理要求を差分情報として差分情報記憶部に順次記憶し、(1c)差分情報転送要求を受信すると差分情報記憶部に記憶されている処理要求を同期化用データベースサーバ又は新規データベースサーバに順次送出し、(1d)差分情報記憶部に記憶されている処理要求の同期化用データベースサーバ又は新規データベースサーバに対する送出が終了すると当該送出終了に係る同期化用データベースサーバ又は新規データベースサーバをシステムに組み込み、(1e)同期化用データベースサーバ及び新規データベースサーバの双方についてシステムへの組込が終了すると差分情報の記憶処理を終了する。
正常稼働中のデータベースサーバは、(2a)仲介装置からスナップショット作成指示を受信するとその時点でのデータベースのスナップショットの作成を開始し、(2b)作成したスナップショットを新規データベースサーバに転送し、(2c)仲介装置から差分情報として順次受信した処理要求に応じた処理を行う。
新規データベースサーバは、(3a)同期化用データベースサーバからスナップショットを受信すると該スナップショットを用いてデータベースを復元し、(3b)スナップショットに基づきデータベースの復元が完了すると仲介装置に差分情報転送要求を送出し、(3c)仲介装置から差分情報として順次受信した処理要求に応じた処理を行う。
このようなシステムによれば、仲介装置では新規データベースサーバの同期化用の差分情報を差分情報記憶部に記憶するが、この差分情報は新規データベースサーバの組み込み要求を契機として差分情報記憶部への記憶が開始される。したがって、データベースサーバを故障等によりシステムから切り離した後に再びシステムに組み込む場合、障害復旧までに長時間要しても、仲介装置に多大な差分情報が蓄積することがない。これにより、仲介装置の記憶容量を節約できるとともに差分情報の増大による仲介装置の負荷増大やダウンを防止できる。
また、正常稼働中のデータベースサーバにおけるスナップショット及び仲介装置で記憶された差分情報に基づき新規データベースサーバのデータが復元されるので、組み込み時の新規データベースにおけるデータ蓄積状況はどのようなものであっても構わない。したがって、ディスク故障により切り離されたデータベースサーバの復帰や、新規のデータベースサーバの組み込み(すなわちデータベースサーバの増強)を実現できる。すなわち、任意のデータベースサーバの組み込みが可能となる。
さらに、データベースサーバをシステムから切り離しただけでは差分情報の記憶やスナップショットの作成は行われないので、データベースのシステムからの切り離しを任意に行うことができる。
さらに、同期化処理中は、スナップショットの作成及び新規データベースサーバへの転送処理を、クライアントコンピュータからの処理要求に対する処理を行うデータベースサーバとは異なるデータベースサーバ(同期化用データベースサーバ)が行うので、クライアントコンピュータからの処理要求を処理するデータベースサーバの負荷増大を防止できる。これにより、同期化処理中であってもクライアントへのサービス提供を円滑に維持できる。
なお、ここでシステムへのデータベースサーバの組み込みとは、多重化データベースシステムを構成するデータベースサーバとして機能するよう仲介装置が当該データベースサーバを取り扱うようにすることを意味する。また、システムからのデータベースサーバからの切り離しとは、多重化データベースシステムを構成するデータベースサーバとして機能しないよう仲介装置が当該データベースサーバを取り扱うようにすることを意味する。したがって、システムに組み込まれているデータベースサーバにはクライアントコンピュータからの処理要求が仲介装置を介して届くが、システムから切り離されたデータベースサーバにはクライアントコンピュータからの処理要求が届かない状態となる。なお、データベースサーバがシステムに組み込まれていること又は切り離されていることと、データベースサーバが仲介装置と通信可能又は不能であることとは無関係である点に留意されたい。つまり、データベースサーバと仲介装置が通信可能な状態にある場合であっても、データベースサーバがシステムに組み込まれていない場合もあり得る。
また、スナップショットとは、その作成時点で確定している(COMMITされている)のデータベース全体の複製データやデータベースを復元するために必要なデータを意味する。
以上説明したように本発明によれば、データベースサーバに障害が発生しても少ない同期化用データで復旧後のデータベースサーバの同期化を図ることができる。また、システム全体をダウンさせることなく、データベースサーバのデータ記憶状況に拘わらずデータベースサーバを任意に切り離し又は組み込むことができる。
(第1の実施の形態)
本発明の第1の実施の形態に係る多重化データベースシステムについて図面を参照して説明する。図1は本実施の形態に係る多重化データベースシステムの全体構成を説明するブロック図である。
この多重化データベースシステムは、図1に示すように、複数のデータベースサーバ(以下「サーバ」と言う)100と仲介装置200とをネットワーク300で接続したものであり、ネットワーク400を介して1以上のクライアントコンピュータ(以下「クライアント」と言う)500からアクセスされるものである。本実施の形態では、図1に示すように、3台のサーバ100a,100b,100cを有しており、2台のクライアント500a及び500bからアクセスされる。以降の説明において各サーバ100を他のサーバ100と区別する場合には添え字「a」「b」などの英小文字を付加するものとする。クライアント500についても同様である。なお、図1の例では、サーバ100とクライアント500はそれぞれ別々のネットワーク300,400に接続されているが、同じネットワークに接続されていてもよい。
図1に示すように、仲介装置200は、ネットワーク400側にIPアドレス172.17.1.1を持っており、これをデータベースサーバのIPアドレスとして公開している。クライアント500はデータベースにアクセスしたいときはIPアドレス172.17.1.1へクエリを送信し、IPアドレス172.17.1.1の仲介装置200からそのクエリに対する応答パケットを受信する。これは、クライアント500にとっては、IPアドレス172.17.1.1を持ったデータベースサーバとパケットを送受信していることと同じである。このIPアドレス172.17.1.1を持った仮想的なデータベースサーバを仮想サーバ800と呼ぶ。この仮想サーバ800の目的は、サーバ100が冗長化されていることを隠蔽するためである。つまり、全てのサーバ100a,サーバ100b,100cが稼働していようと、サーバ100bがダウンしてサーバ100a及び100cのみが稼働していようと、サーバ100a,100b,100cの他に新たなサーバが追加されようとクライアントには影響は無く、動作を変更する必要がない。
サーバ100は、データを保存・管理するデータベース101と、データベース101の動作を制御するデータベース制御部102とを備えている。
データベース101は、SQL(Structured Query Language)を解して処理を行うRDBMS(Relational Database Management System)である。このようなデータベース101としては種々のものがあり、例えばThe PostgreSQL Global Development GroupによるPostgreSQL(http://www.postgres.org/)や、Oracle社によるOracle(登録商標)(http://www.oracle.com)などが挙げられる。
データベース制御部102は、ネットワーク300を介して仲介装置200から送られてくるパケットに基づき動作する。このパケットは、SQLなどデータベース101での処理に係るもの、同期化処理に係るものに大別される。SQLなどデータベース101での処理に係るものについては、データベース制御部102は、当該パケットをデータベース101に渡し、データベース101からの処理結果を仲介装置200に返す。
一方、同期化処理に係るものは、さらに自身が本システムに組み込まれている場合のものと、障害復旧時などこれからシステムに組み込む場合のものとに別れる。前者については、スナップショットの作成指示がある。データベース制御部102は、スナップショット作成指示を仲介装置200から受信すると、データベース101のスナップショットを作成する。そして、作成したスナップショットを、スナップショット作成指示で指示されている転送先の他のサーバ100に転送する。サーバ100はスナップショットの転送の後にシステムから一時的に切り離される。また、サーバ100は、スナップショットを転送すると、後述するように、やがて仲介装置200から差分情報を受信する。この差分情報は、サーバ100が一時的にシステムから切り離されている間に、仲介装置200がクライアント500から受信した処理要求である。データベース制御部102は、この差分情報を処理する。
他方、障害復旧時などこれからシステムに組み込む場合、データベース制御部102は、他のデータベースサーバ100からスナップショットを受信すると、このスナップショットを用いて自身のデータベース101を復元する。データベース101の復元が完了すると仲介装置200に対して差分情報転送要求を送出する。後述するように、差分情報転送要求に応じて仲介装置200から差分情報が転送されるので、この差分情報を用いてデータベース101を復元する。
また、データベース制御部102は、本システムに組み込む際には、仲介装置200に対して組み込み要求を送信する。この組み込み要求は、サーバ100の起動時や、必要に応じて任意のタイミングで送出する。
仲介装置200は、本システム内のサーバ100を管理するサーバ管理表201と、トランザクションを管理するトランザクション管理表202と、同期化用に差分情報を蓄積する差分情報蓄積部203と、サーバ100に送信するクエリを一時保存する送信キュー204と、クライアント500・サーバ100間での処理の仲介やサーバ100の同期化制御などを行うサーバ制御部210とを備えている。
サーバ管理表201は、サーバが正常稼働中(active)か、障害などで停止している(down)か、同期化処理中(sync)かという状態を保存している。図2にサーバ管理表の一例を示す。サーバ管理表201は、図2に示すように、サーバ100を識別するためのサーバIDと、サーバの稼働状態から構成されている。図2の例では、サーバ100aとサーバ100bとサーバ100cが登録されており、稼働状態は共に正常稼働を示すactiveである。また、本実施形態では、サーバIDとして各サーバ100に付されたIPアドレスを用いた。
トランザクション管理表202は、現在実行中の又は実行開始を保留されているトランザクションの有無を記憶する。図3にトランザクション管理表202の一例を示す。図3に示すように、トランザクション管理表202は、クライアントを一意に識別するクライアントIDとトランザクションを一意に識別するトランザクションIDから構成される。これらのペアは、トランザクション開始時にトランザクション管理表202に登録され、トランザクション終了時にトランザクション管理表202から削除される。クライアントIDは、例えばクライアント500のIPアドレスやポート番号である。トランザクションIDは新しいトランザクションが発生する毎にサーバ制御部210が新たに割り振る。
差分情報蓄積部203は、サーバ同期化時にクライアント500から受信する全てのクエリを蓄積する。図4に差分情報蓄積部203が蓄積している差分情報の一例を示す。差分情報蓄積部203の各データは、図4に示すように、クライアント500が送信したクエリと、このクエリが所属するトランザクションIDとから構成される。トランザクションIDはトランザクション管理表202から取得する。同期化処理時におけるクライアント500からの新たなクエリは、この差分情報蓄積部203の最後に追加される。つまり、上から古いクエリが蓄積されている。図4の例では、トランザクションID=1のBEGINが一番古く、COMMITが一番新しい。
送信キュー204は、各クライアント500から受信したクエリを各サーバ100に送信するまで一時的に保存するバッファメモリである。図5に送信キュー204の一例を示す。送信キュー204の各データは、図5に示すように、クライアント500が送信したクエリと、このクエリが所属するトランザクションIDと、サーバ100に送信したか否かを表す送信情報とから構成される。トランザクションIDはトランザクション管理表202から取得する。クライアント500からの新たなクエリは、この送信キュー204の最後に追加される。つまり、上から古いクエリが蓄積されている。図5の例では、トランザクションID=1のBEGINが一番古く、トランザクションID=2のBEGINが一番新しい。この送信キュー204の送信状態は、クライアント500からクエリを受信した際には「未送信」が設定され、正常稼働中の全てのサーバ100に送信されると「送信完了」が設定される。送信完了となったエントリは、直ちに又は所定期間経過後に送信キュー204から削除される。
サーバ制御部210は、通常の処理(同期化処理時以外の処理)として、クライアント500からのパケットをネットワーク400経由で受信し、サーバ管理表201を見て正常稼働している全てのサーバ100へ該パケットを転送する。ここで、サーバ100へ転送するパケットは、送信キュー204に「未送信」として記憶されているクエリが対象であり、送信キュー204に記憶されている古いクエリから順に転送される。そして、サーバ100からのパケットをネットワーク300経由で受信し後述するパケットの正当性判断方法により1つ以上の該パケットのうち1つを選出し1つの正しいパケットをネットワーク400を経由してクライアント500へ転送する。なお、同期化処理時には、「未送信」のクエリであっても新規トランザクションに属するクエリは送信せず、実行中のトランザクションに属するクエリのみを古い順に正常稼働中のサーバ100に送信する。
ここで、サーバ制御部210は、クライアント500からの処理要求を解析してトランザクションの開始と終了を検出してトランザクション管理表202を更新する。トランザクション開始と終了をサーバ制御部210が検出する方法は、DBMSの種類によって異なる。例えば前述のPostgreSQLの場合は、トランザクションの開始はクライアント500が「BEGIN」というSQLを送信した時であり、トランザクションの終了はクライアント500が「COMMIT」「ROLLBACK」というSQLを送信した時である。また、Oracleの場合は、トランザクションの開始はクライアント500が有効なSQLを送信したときであり(明示的なトランザクションの開始を宣言するSQLは無い)、トランザクションの終了はクライアント500が「COMMIT」「ROLLBACK」というSQLを送信した時である。また、AUTO COMMITモードで動作する場合には、クライアント500から受信したSQL文はそれぞれ1つの独立したトランザクションに属していると解釈できるので、クライアント500からSQLを受信する毎に、該SQL実行前にトランザクションが開始されるとともにSQL実行後に当該トランザクションが終了したこととして扱うことができる。
また、パケットの正当性判断方法は、例えば、多数決で決める方法や、受信したパケットを所定のルールに基づいて判断する方法がある。例えば、クライアント500からの「参照」要求に対して「更新成功」という応答が返ってきた場合、正常であればそのような応答はあり得ないので(参照成功など参照に関する応答のはず)、この応答パケットは正しくないと判断する。また、パケット中にデータ長フィールドがある場合、このデータ長フィールドの値と実際に受信したパケット長を比較し、異なる場合は正しくないと判断する。また、複数のサーバ100の中からMasterサーバを予め1台決めておき、このサーバ100からのパケットを常に正しいと判断する。また、上記複数の方法を併用する方法もある。例えば、3台で多数決を行った結果、パケットの中身が全てバラバラであり、多数派のパケットを決められない場合はMasterサーバのパケットを正しいと判断する。正常稼働しているサーバが1つだけの場合は、そのサーバからの応答パケットを正常と判断する。
サーバ制御部210は、正当ではない応答を送信したサーバ100は障害と判断し、そのサーバ100についてはサーバ管理表201から登録を削除することによりシステムから切り離す。なお、応答を返してこないサーバ100も障害と判断する。
さらに、サーバ制御部210は、ネットワーク300を介してサーバ100からシステムの組み込み要求を受信すると、この新規のサーバ100と、正常稼働中のサーバ100とを同期化させる処理を行う。以下にその処理について説明する。
サーバ制御部210は、サーバ100からシステムの組み込み要求を受信すると、正常稼働中の複数のサーバ100から1つのサーバ100を選定し、このサーバ100に対してスナップショットの作成指示を送出する。そして、スナップショットの作成指示を送信したサーバ100については、サーバ管理表101の状態を「sync」に変更することによりシステムから切り離す。なお、以降の説明において、サーバ管理用101の状態が「sync」となっているサーバ100を「同期化用サーバ100」と呼ぶこととする。また、状態が「active」となっているサーバ100を「正常稼働中のサーバ100」と呼ぶこととする。
スナップショットの作成指示を送出するタイミングは、サーバ100においてトランザクションが実行中でないことが求められる。これはスナップショット作成中にトランザクションがROLLBACKするとデータの同期化が図れない場合があることを防止するためや、COMMITされていないために更新データがスナップショットに反映されないことを防止するためである。このためサーバ制御部210は、処理中のトランザクションが終了するまでスナップショットの作成指示の送出を待つとともに、スナップショット作成指示の送出までは新規トランザクションを開始しないようにしている。そして、新規トランザクションに係るSQLについては、スナップショット作成指示の送信後に、正常稼働中のサーバ100で処理するとともに、差分情報蓄積部203に蓄積する。差分情報蓄積部203に蓄積するクエリは、トランザクション制御SQL、参照系SQL及び更新系SQLを含む全てのSQLが対象となる。
サーバ制御部210がスナップショットの作成指示を送出すると、当該スナップショットは新規のサーバ100に転送され、このサーバ100からサーバ制御部210に対して差分情報転送要求が送出される。サーバ制御部210は、差分情報転送要求を受信すると、新規のサーバ100及び同期化用サーバ100に対して、差分情報蓄積部203に蓄積されているクエリを古いものから順次送信する。差分情報蓄積部203に蓄積されているSQLを全て送出すると、サーバ制御部210は、新規サーバ100及び同期化用サーバ100をシステムに組み込むべくサーバ管理表201を更新する。
ここで、サーバ制御部210は、差分情報の送出中にクライアント500から新たなクエリを受信する場合があるが、この場合は当該クエリを差分情報蓄積部203の最後に追加するとともに正常稼働中のサーバ100へ送信すれば良い。ただし、クライアント500のクエリ送出頻度が高い場合などには、差分情報の送出終了まで、すなわち同期化終了まで長時間要する場合が考えられる。そこで、差分情報蓄積部203における未送信の差分情報が所定件数以下となったら、クライアント500からのクエリを一時保留して差分情報の送出のみを行い、まず差分情報の送出を完了させる。そして、前述のように新規サーバ100及び同期化用サーバ100をシステムに組み込むべくサーバ管理表201を更新した後に、保留していたクエリ処理を再開すると好適である。
クライアント500は、データベースサーバ100に対して更新クエリ(データベースを更新するリクエスト)や参照クエリ(データベースの内容を参照するリクエスト)などを発行するものである。
次に、本実施の形態に係る多重化データベースシステムの動作について図面を参照して説明する。まず、サーバ100a,100b,100cが正常に動作している場合の動作を図6から図8を参照して説明する。
初期状態では、データベース101aと101bと101cは完全に同一であり、サーバ管理表201は図7のようになっているものとする。また、トランザクション管理表202と差分情報蓄積部203は空であるとする。各サーバ100a,100b,100cには、テーブルtest_tableが存在しているとする。
クライアント500aが172.17.1.1宛にトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200はそのパケットを受信する(ステップS1)。サーバ制御部210は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500aのIPアドレスとトランザクション番号を登録する(ステップS2)。図8にこのときのトランザクション管理表202を示す。そして、このパケットに係るクエリを送信状態「未送信」で送信キュー204に入れる。
サーバ制御部210は、送信キュー204から当該「未送信」のクエリを取り出し、サーバ管理表201を見て正常稼働している全てのサーバ100に該パケットを送信する。この場合、サーバ100aと100bと100cが正常稼働しているので、サーバ制御部210はサーバ100aとサーバ100bと100cへ該パケットを転送する(ステップS3〜S5)。そして、各サーバ100への送信が完了したので送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、全てのサーバ100から応答パケットを受信(ステップS6〜S8)するまで待ち、全ての応答パケットが揃ったら、各応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS9)。この場合、3つの応答パケットは全てトランザクションが正常に開始されたことを示すパケットであるため、障害は無いと判断し応答パケットの1つをクライアント500aへ転送する(ステップS10)。
次に、クライアント500aは、テーブルtest_tableを更新するSQL(UPDATE)を含んだパケットを172.17.1.1へ送信する(ステップS11)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100aと100bと100cへ該パケットを転送する(ステップS12〜S14)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、全てのサーバ100から応答パケットを受信(ステップS15〜S17)するまで待ち、全ての応答パケットが揃ったら、各応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS18)。この場合、3つの応答パケットは全てUPDATE成功したことを示すパケットであるため、障害は無いと判断し応答パケットの1つをクライアント500aへ転送する(ステップS19)。
次に、クライアント500aは、テーブルtest_tableへの更新を確定する(実際にデータベースを更新する)SQL(COMMIT)を含んだパケットを172.17.1.1へ送信する(ステップS20)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100aとサーバ100bと100cへ該パケットを転送する(ステップS21〜S23)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、全てのサーバ100から応答パケットを受信(ステップS24〜S26)するまで待ち、全ての応答パケットが揃ったら、各応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS27)。この場合、3つの応答パケットは全てCOMMIT成功したことを示すパケットであるため、障害は無いと判断する。COMMITが正常に完了したことから、トランザクションが終了したことが分かるので、サーバ制御部210はトランザクション管理表202からこのトランザクションの登録を削除する(ステップS28)。このときのトランザクション管理表202は再び初期状態(すなわち空)になる。サーバ制御部210は応答パケットの1つをクライアント500aへ転送する(ステップS29)。
次に、サーバ100bが故障などで障害になった場合の動作を図9から図11を参照して説明する。初期状態では、データベース101a,101b,101cは完全に同一であり、サーバ管理表201は前述した図7のようになっているとする。また、トランザクション管理表202と差分情報蓄積部203は空であるとする。
クライアント500aが172.17.1.1宛にトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200はそのパケットを受信する(ステップS30)。サーバ制御部210は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500aのIPアドレスとトランザクション番号を登録する(ステップS31)。図10にこのときのトランザクション管理表202を示す。そして、このパケットに係るクエリを送信状態「未送信」で送信キュー204に入れる。
サーバ制御部210は、送信キュー204から当該「未送信」のクエリを取り出し、サーバ管理表201を見て正常稼働している全てのサーバ100、この場合、サーバ100aと100bと100cへ該パケットを転送する(ステップS32〜S34)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、全てのサーバ100から応答パケットを受信(ステップS35〜S37)するまで待ち、全ての応答パケットが揃ったら、各応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS38)。この場合、3つの応答パケットはともにトランザクションが正常に開始されたことを示すパケットであるため、障害は無いと判断し応答パケットの1つをクライアント500aへ転送する(ステップS39)。
ここで、サーバ100cは、ステップS37で応答パケットを返した後、故障などの障害が発生してダウンしたものとする(ステップS40)。
次に、クライアント500aは、テーブルtest_tableを更新するSQL(UPDATE)を含んだパケットを172.17.1.1へ送信する(ステップS41)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100aと100bと100cへ該パケットを転送する(ステップS42〜S44)。この時点では、サーバ制御部210はサーバ100cのダウンを知らないので、サーバ100cが正常稼働しているという情報がサーバ管理表201に格納されたままである。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。サーバ100a及び100bは応答パケットを仲介装置200に送信し、仲介装置200がこの応答パケットを受信する(ステップS45,S46)。この時点では応答パケットが全て揃っているわけではないので、サーバ制御部210は残りのサーバ100cからの応答パケットを待つ。しかし、サーバ100cはダウンしているのでサーバ100cからの応答パケットはいつまで経っても仲介装置200には届かない。これによりサーバ制御部210はタイムアウトし、サーバ100cのダウンを検知する。そして、サーバ制御部210はサーバ管理表201のサーバ100cをactiveからdown(サーバ停止状態)に書き換える(ステップS47)。そのときのサーバ管理表201を図11に示す。また、ここでサーバ100a及び100bからの応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする。この場合、2つの応答パケットはともにUPDATE成功を示すパケットであるため、障害は無いと判断し、サーバ制御部210は応答パケットの1つをクライアント500aへ転送する(ステップS48)。ここでは、クライアント500aにとって、サーバ100cが障害になったかどうかは認識せず、今までと同様に仮想サーバ800からサービスを受けることができることに注目すべきである。
次に、クライアント500aは、テーブルtest_tableへの更新を確定するSQL(COMMIT)を含んだパケットを172.17.1.1へ送信する(ステップS49)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100a及び100bへ該パケットを転送する(ステップS50,S51)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、正常稼働中の各サーバ100a及び100bから応答パケットを受信(ステップS52,S53)するまで待ち、全ての応答パケットが揃ったら、各応答パケットを互いに比較することでサーバ100に障害が発生しているか否かをチェックする(ステップS54)。この場合、2つの応答パケットはトランザクションが正常に開始されたことを示すパケットであるため、障害は無いと判断する。COMMITが正常に完了したことから、トランザクションが終了したことが分かるので、サーバ制御部210はトランザクション管理表202からこのトランザクションの登録を削除する(ステップS55)。このときのトランザクション管理表202は再び初期状態(すなわち空)になる。サーバ制御部210は応答パケットの1つをクライアント500aへ転送する(ステップS56)。
ここで、ステップS50及びS51によって、サーバ100aと100bのデータベース101a及び101bは、クライアント500aからのUPDATE(ステップS49)が反映されているのに対して、サーバ100cのデータベース101cにはクライアント500aからのUPDATE(ステップS49)が反映されていない、つまり、データベース101a及び101bとデータベース101cとは非同期状態になったことに注目すべきである。
次に、サーバ100cが障害から復旧しシステムに組み込む(追加する)場合の動作を図12から図20を参照して説明する。このとき注目すべきポイントは、クライアント500a及び500bに対するサービスを続けたままサーバ100cを追加する、つまり、システムダウンさせずに各データベース101a,101b,101cを同期させることである。
データベース101cはデータベース101a及び101bと同期がとれていない状態、つまり、同一ではない状態である。例えば、データベース101cは、図9のステップS40の障害が起きる直前のデータを保持しているかもしれないし、全く新しいサーバの場合には、データを全く持っていない状態かもしれない。本発明では、前者の場合でも古いデータは削除し、データベース101cはデータを全く保持していないものとしてシステムに組み込む。つまり、ステップS40以前の古いデータを保持している必要はない。
ここでは、サーバ管理表201は図15のようになっているとする。また、トランザクション管理表202と差分情報蓄積部203は空であるとする。
図12に示すように、クライアント500aが172.17.1.1宛のトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200はそのパケットを受信する(ステップS60)。サーバ制御部210は、トランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500aのIPアドレスとトランザクション番号を登録する(ステップS61)。図16にこのときのトランザクション管理表202を示す。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100a及び101bへ該パケットを転送する(ステップS62,S63)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、応答パケットを各サーバ100から受信すると(ステップS64,S65)、各応答パケットを比較して障害有無をチェックし(ステップS66)、正当な応答パケットの1つをクライアント500aへ転送する(ステップS67)。
ここで、新規サーバ100cは電源を投入し起動されたものとする。これにより、サーバ100cのデータベース制御部102cは、データベース同期化要求(組込要求)を仲介装置200へ送信する(ステップS68)。
データベース同期化要求を受信したサーバ制御部210は、トランザクション管理表202をチェックし現在実行中のトランザクションが存在するかどうかを確認するとともに、実行中トランザクションの情報を記録しておく(ステップS69)。図16より、クライアント500a,トランザクション番号3のトランザクションが実行中なので、データベース同期化動作はこのトランザクションの終了を待つと同時に、新しいトランザクション開始要求を受け取った場合は、その要求をサーバ100へ転送することを遅らせる(ステップS70)。つまり、同期化動作は実行中のトランザクションが全くない状態で始める。この新規トランザクションの開始要求についての転送遅延処理は、送信キュー204での保留という手段で実現する。
次に、クライアント500aは、テーブルtest_tableを更新するSQL(UPDATE)を含んだパケットを172.17.1.1へ送信する(ステップS71)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。このクエリは前記ステップS69で記憶したトランザクション情報を参照することで同期化要求時に実行していたトランザクションに属するものと判定できるので、サーバ制御部210は、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100a及び100bへ該パケットを転送する(ステップS72,S73)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、正常稼働中の各サーバ100a及び100bから応答パケットを受信(ステップS74,S75)するまで待ち、各応答パケットが揃うと該パケットから障害の有無を判定する(ステップS76)。そして、サーバ制御部210は、正当な応答パケットの1つをクライアント500aへ転送する(ステップS77)。
次に、クライアント500bが172.17.1.1宛にトランザクション開始SQL(BEGIN)を含んだパケットを送信すると、仲介装置200はそのパケットを受信する(ステップS78)。サーバ制御部210は、このパケットによりトランザクションが開始されたことを検知し、トランザクション管理表202にクライアント500bのIPアドレスとトランザクション番号を登録する(ステップS79)。図17にこのときのトランザクション管理表202を示す。そして、このパケットに係るクエリを送信状態「未送信」で送信キュー204に入れる。しかし、この時点では同期化処理準備のため、新規トランザクション開始クエリは送信キュー204に保持したまま、正常稼働中のサーバ100a,100bへは転送しない(ステップS80)。
次に、クライアント500aは、テーブルtest_tableへの更新を確定するSQL(COMMIT)を含んだパケットを172.11.1.1へ送信する(ステップS81)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。このクエリは前記ステップS69で記憶したトランザクション情報を参照することで同期化要求時に実行していたトランザクションに属するものと判定できるので、サーバ制御部210は、送信キュー204から当該クエリを取り出し、サーバ管理表201を見て正常稼働しているサーバ、この場合、サーバ100a及び100bへ該パケットを転送する(ステップS82,S83)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。仲介装置200は、正常稼働中の全てのサーバ100a及び100bから応答パケットを受信(ステップS84,S85)するまで待ち、全ての応答パケットが揃ったら該パケットから障害の有無をチェックする(ステップS86)。また、COMMITが正常に完了したことから、トランザクションが終了したことが分かるので、サーバ制御部210はトランザクション管理表202からこのトランザクションの登録を削除する(ステップS87)。この時のトランザクション管理表202を図18に示す。サーバ制御部210は正当な応答パケットの1つをクライアント500aへ転送する(ステップS88)。
ここで、新規サーバ100cからの同期化要求時に実行していたトランザクションが全て無くなったので、サーバ制御部210は同期化動作を開始する(ステップS89)。具体的には、まず、サーバ制御部210は、正常稼働中のサーバ100a及び100bの中から同期化用サーバ100を1つ選定する(ステップS90)。本実施の形態ではサーバ100bを選択したものとする。そして、同期化用サーバ100bに対して同期化指示(スナップショット作成指示)を送出する(ステップS91)。また、サーバ管理表201のサーバ100bについて状態を「sync」に変更する(ステップS92)。この時のサーバ管理表201を図19に示す。なお、前記ステップS89において、トランザクション管理表202に記録されているトランザクションが同期化要求時に実行中であったものか、又は、その後にクライアント500から受信したものかを判定するには、前記ステップS69で記録しておいた同期要求時のトランザクション情報を参照すればよい。
同期化指示を受け取った同期化用サーバ100bのデータベース制御部102bは、データベース101bのスナップショットを作り出す(ステップS93)。ここで、このスナップショットは、同期化指示を受け取った時点でのデータベース全体のバックアップデータやデータベースを復元するための情報であり、同期化指示後の更新は反映されていないことに注目すべきである。
同期化用サーバ100bのデータベース制御部102bは、スナップショット作成が完了すると(ステップS94)、作成したスナップショットを新規サーバ100cへ転送する。このスナップショットの作成・転送とデータベースの復元は、データベース101bのサイズが大きければ大きいほど時間がかかるが、クライアントからのデータベースアクセスは正常稼働中のサーバ100aで実行されるのでクライアントに対するサービスを止めることはない。
新規サーバ100cのデータベース制御部102cは、同期化用サーバ100bから受信したスナップショットからデータベースを復元する(ステップS95)。
仲介装置200のサーバ制御部210は、サーバ100bに対して同期化指示を送信し(前記ステップS91)、サーバ100bについてサーバ管理表201の状態を「sync」に変更すると(前記ステップS92)、直ちに、クライアント500からの処理要求に対する処理を再開する。ここで、クライアント500から処理要求を処理するサーバは、状態が「active」のサーバ100aである。つまり、同期化用サーバ100bは、一時的にシステムから切り離され専ら同期化処理のみを行うことになる。また、ここでは、処理せずに送信キュー204に保持していた、クライアント500bからのBEGINを含んだパケットの処理を再開する。すなわち、サーバ制御部210は、転送せずに保持していたクライアント500bからのBEGIN SQLを含んだパケットを送信キュー204から取り出して差分情報蓄積部203に保存するとともに(ステップS95)、正常稼働中のサーバ100aへ転送する(ステップS96)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。
正常稼働中のサーバ100aは、応答パケットを仲介装置200に送信し、仲介装置200がこの応答パケットを受信する(ステップS97)。仲介装置200は、この応答パケットをクライアント500bへ転送する(ステップS98)。
次いで、クライアント500bがテーブルtest_tableの更新SQL(UPDATE)のパケットを仲介装置200に送信すると(ステップS99)、サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、当該クエリを差分情報蓄積部203に保存するとともに(ステップS100)、正常稼働中のサーバ100aに当該パケットを送信する(ステップS101)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。ここで、サーバ100aはUPDATEに失敗し、その旨を通知する応答パケットを仲介装置200に送信したものとする(ステップS102)。仲介装置200は、この応答パケットをクライアント500bに送信する(ステップS103)。
UPDATE失敗の応答パケットを受信したクライアント500bは、トランザクションを取り消すSQL(ROLLBACK)のパケットを仲介装置に送信する(ステップS104)。サーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、当該SQLを差分情報蓄積部203に保存するとともに(ステップS105)、正常稼働中のサーバ100aに当該パケットを送信する(ステップS106)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。そして、サーバ100aから正常にトランザクションがROLLBACKされたことを通知する応答パケットを受信すると(ステップS107)、トランザクション管理表202から当該トランザクションの登録を削除するとともに(ステップS108)、この応答パケットをクライアント500bに送信する(ステップS109)。この時点での差分情報蓄積部203を図20に示す。また、トランザクション管理表202は空になる。
ここで、新規サーバ100cにおいてスナップショットからのデータベース101cの復元が完了したものとする(ステップS110)。新規サーバ100cはデータベース101cの復元が完了すると差分情報転送要求を仲介装置200に送信する(ステップS111)。仲介装置200のサーバ制御部210は、差分情報転送要求を受信すると、差分情報蓄積部203に蓄積されているデータを古いものから順に新規サーバ100c及び同期化用サーバ100bに転送する処理を開始する(ステップS112)。
前記ステップS112で差分情報蓄積部203に蓄積されている全てのクエリが転送・処理されることでデータベース101aとデータベース101b及び101cとは完全に一致した状態(同期状態)になるが、この転送処理中にクライアント500から新たなクエリを受信する場合がある。例えば、図14に示すように、仲介装置200は、クライアント500bから新規トランザクションを開始するクエリ(BEGIN)を受信する(ステップS113)。仲介装置200は、当該新規トランザクションをトランザクション管理表202に登録する(ステップS114)。そして、当該クエリを送信キュー204に入れる。次いで、送信キュー204から当該クエリを取り出し、差分情報蓄積部203の最後に当該クエリを追加するとともに(ステップS115)、正常稼働中のサーバ100aに送信する(ステップS116)。そして、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。次いで、サーバ100aから応答パケットを受信すると(ステップS117)、当該応答パケットをクライアント500bに転送する(ステップS118)。
このように差分情報転送中にクライアント500から受信したクエリは、正常稼働中のサーバ100で処理するとともに、差分情報蓄積部203に蓄積していく。この処理を継続していくと、やがて差分情報蓄積部203に蓄積されているクエリは全て新規サーバ100c及び同期化用サーバ100bに転送され、差分情報蓄積部203は空になり、これを契機に差分情報転送処理が終了する(ステップS119)。これによりデータベース101aとデータベース101b及び101cは完全に一致した状態(同期状態)となるので、サーバ制御部210は、サーバ管理表201に新規サーバ100cを追加し稼働状態をactiveとするとともに、同期化用サーバ100bの稼働状態をactiveに変更することでシステムにサーバ100b及び100cを追加する(ステップS120)。この時のサーバ管理表201を図21に示す。これにより、サーバ100cがシステムに組み込まれた状態となるので、以降の動作は図6を参照して前述したものと同様となる。
この手順を繰り返せば、もともとシステムに組み込まれていたが障害等のためにシステムから切り離されたサーバであっても、新規のサーバであっても、理論的にはいくらでも追加できる。つまり、追加できるサーバ数に制限はない。
以上のように本実施の形態に係る多重化データベースシステムによれば、サーバ100のデータベース101の記憶状況に拘わらず、サーバ100をシステムに組み込むことができる。すなわち、元々システムに組み込まれていたが障害により切り離されたサーバ(ディスク障害によりデータを失ってしまったものなども含む)であっても、全く新規のサーバであっても同様の手順でシステムに組み込むことができる。
また、仲介装置200においてデータ同期化用に差分情報蓄積部203に記憶する同期化用データは、これから組み込むサーバ100からの組み込み要求を受信してから蓄積を開始するので、仲介装置200において同期化用データが増大することがない。これにより、仲介装置200の記憶容量を節約でき、該記憶容量が溢れることによる障害発生を未然に防止できる。また、サーバ100の切り離しも任意に行うことができる。
したがって、本実施の形態に係る多重化データベースシステムでは、サーバの組み込み及び切り離しを任意に実施できるので、用途や予算などの要求に応じて柔軟なシステム設計を行うことができる。
さらに、サーバ100の組込処理の際には、正常稼働中の複数のサーバ100の中から同期化処理用のサーバ100を選定し、この同期化処理用サーバ100を用いてスナップショットの作成・転送を行っているので、これと並行してクライアント500からの処理要求を正常稼働中の他のサーバ100を用いて処理できる。したがって、組込処理とクライアントからの処理要求に係る処理が異なるサーバで処理されるので負荷が分散されるとともに、スナップショットの作成中にもクライアント500からの処理要求に応じることができるので、クライアント500に対して円滑なサービスの提供を継続できる。
本実施の形態の変形例について説明する。上記実施形態では、差分情報転送中にクライアント500から新たなクエリを受信すると、当該クエリを差分情報蓄積部203に追記していた。このような処理では、差分情報の処理に時間がかかる場合や、クライアントからの受信するクエリの受信間隔が短い場合には、差分情報蓄積部203のデータが何時までたっても空にならなかったり空になるまで長時間要することになり、結果として新規サーバ100cの組み込み処理完了まで長時間要することが考えられる。そこで、差分情報転送中に差分情報蓄積部203のエントリ数が所定数以下となったら、新規クエリの処理を一時保留して専ら差分情報の転送のみを行って差分情報蓄積部203を空にしてしまうと良い。以下、このような処理について図22を参照して説明する。
ここでは、新規のサーバ100cがスナップショットからデータベース101cの復元処理中であるとする(ステップS200)。そして、サーバ100cにおいてデータベース101cの復元処理が完了し(ステップS201)、サーバ100cが仲介装置200に差分情報転送要求を送信した時点で(ステップS202)、差分情報蓄積部203には所定件数以上の差分情報が蓄積されているものとする。図22の例では、ステップS203〜ステップS207によるUPDATEのクエリが最新の差分情報として差分情報蓄積部203に記憶されているものとする。
図22に示すように、仲介装置200のサーバ制御部210は、サーバ100cから差分情報転送要求を受信すると、前述したように、差分情報蓄積部203に記憶されている各クエリを古いものから順に新規サーバ100c及び同期化用サーバ100bに転送する処理を開始する(ステップS208)。
サーバ制御部210は、クライアント500bから新たなクエリを受信したとする。図22の例では、サーバ制御部210は、クライアント500bからデータを追加するSQL(INSERT)を含むパケットを受信する(ステップS209)。差分情報転送中に新規クエリを受信したサーバ制御部210は、受信したクエリを送信キュー204に入れる。そして、送信キュー204から当該クエリを取り出し、差分情報蓄積部203に蓄積されている未転送のクエリの件数が所定件数より多い場合には、このクエリを差分情報蓄積部203の最後に追記するとともに(ステップS210)、正常稼働中のサーバ100aに該パケットを転送する(ステップS211)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。サーバ制御部210は、INSERTが成功したことを示す応答パケットをサーバ100aから受信すると(ステップS212)、この応答パケットをクライアント500bに転送する(ステップS213)。
ここで、仲介装置200から新規サーバ100c及び同期化用100bへの差分情報の転送は並行して行われており、これにより差分情報蓄積部203に記憶されている未転送のクエリが所定数以下となったとする。
サーバ制御部210は、クライアント500bからデータを更新するSQL(UPDATE)を含むパケットを受信すると(ステップS214)、受信したクエリを送信キュー204に入れる。ここでは、差分情報蓄積部203に蓄積されている未転送のクエリの件数が所定件数以下となっているので、この新規クエリの処理は保留する(ステップS215)。すなわち、この新規クエリの差分情報蓄積部203への記憶及び正常稼働中のサーバ100aへの転送は行わない。この保留処理は、差分情報蓄積部203に記憶されているクエリを全て新規サーバ100c及び同期化用サーバ100bに転送し、両サーバ100b及び100cがシステムへ組み込まれるまで継続する。
差分情報の転送が終了すると(ステップS216)、差分情報蓄積部203に蓄積されている全てのクエリが転送・処理されることでデータベース101aとデータベース101b及び101cは完全に一致した状態(同期状態)になる。そこで、サーバ制御部210は、サーバ管理表201にサーバ100cを追加し稼働状態をactiveとするとともに、同期化用サーバ100bの稼働状態もactiveにすることでシステムにサーバ100b及び100cを追加する(ステップS217)。
ここで、サーバ制御部210は、前記ステップS215で保留していた新規クエリの処理を再開する。この時点では既に同期化が終了しているので、以降の処理は図6を参照して前述したものと同様となる。すなわち、サーバ制御部210は、当該クエリを送信キュー204から取り出して正常稼働中のサーバ、この場合サーバ100a,100b,100cに転送する(ステップS218,S219,S220)。次いで、送信キュー204の送信状態を「送信完了」にして当該エントリを削除する。そして、各サーバ100a,100b,100cから受信した応答パケットを比較して障害発生の有無をチェックし(ステップS221〜S224)、正常な応答パケットの1つをクライアント500bへ転送する(ステップS225)。
このような処理により、差分情報の転送中にクライアントから受信したクエリは、未転送の差分情報が所定数より多い場合には差分情報蓄積部203への記憶並びに正常稼働中のサーバ100aへの転送が行われる。一方、未転送の差分情報が所定数以下の場合には新規クエリは保留される。これにより、差分情報の処理に時間がかかる場合やクライアントからの受信するクエリの受信間隔が短い場合であっても、データベースの同期を短時間に行うことができる。なお、閾値となる「所定件数」は、大きく設定すると新規クエリの保留時間が長くなる一方、小さく設定すると同期化処理完了までの時間が長引くことになるというトレードオフの関係にある。したがって、この「所定件数」は各装置の処理負荷やネットワーク速度などシステムの要件に応じて個々に最適な値を設定すればよい。また、本変形例において閾値を0以下に設定すれば、図12〜図21を参照して前述した実施例と同様の処理となる。
(第2の実施の形態)
本発明の第2の実施の形態に係る多重化データベースシステムについて説明する。本実施の形態に係る多重化データベースシステムが第1の実施の形態と異なる点は、仲介装置から新規のサーバ及び同期化用サーバに転送する差分情報の内容にある。他の構成・動作等については第1の実施の形態と同様なので、ここでは相違点のみを説明する。
第1の実施の形態では差分情報蓄積部203にはクライアント500から受信した全てのクエリを保存・転送していた。これにより、同期化処理を実施している間に正常稼働中のサーバ100で処理されたクエリを、新規のサーバ100及び同期化用サーバ100においても忠実に再現することができるので、完全な同期化を図ることができる。
ところで、仲介装置から新規のサーバ及び同期化用サーバに転送する差分情報は専ら同期処理用にのみ用いられるので、該同期化において不要なクエリは転送する必要がない。具体的には、参照系クエリのSQL(SELECT)は不要である。なお、ここでは、SELECT FOR UPDATE文は、SELECT文の一種であるが更新処理に影響を与えるので、ここでは参照系クエリではなく更新系クエリとして取り扱うものとする。
そこで、本実施の形態では、第1の実施の形態と異なり、クライアント500から受信したクエリのうち、参照系クエリを除いたものを差分情報として新規のサーバ100及び同期化用サーバ100に転送する。例えば、クライアント500から図23(a)に示すようなSQL文を受信したとすると、新規のサーバ100及び同期化用サーバ100には図23(b)に示すようなSQL文を転送してやればよい。
このような処理を行うため、本実施の形態に係るサーバ制御部210は、第1の実施の形態と同様にクライアント500からクエリを受信した全てのクエリを差分情報蓄積部203に記憶する。そして、差分情報を新規サーバ100及び同期化用サーバに転送するにあたって、まず該クエリが参照系クエリであるかを判別し、参照系クエリ以外を新規サーバ100及び同期化用サーバ100に転送する。他の処理については第1の実施の形態と同様である。
本実施の形態によれば、第1の実施の形態と比較すると、新規サーバ100及び同期化用サーバ100は同期化処理時において参照系クエリを処理する必要がないので同期化処理の短縮化を図ることができる。これは、複雑な参照系SQLや集合関数を含む参照系SQLなど処理負荷が大きい参照系SQLをクライアント500が発行している場合には特に有効である。他の効果については第1の実施の形態と同様である。
本実施の形態の変形例としては、サーバ制御部210が、同期化処理中にクライアント500からクエリを受信し、このクエリを差分情報として差分情報蓄積部203に蓄積するにあたって、まず該クエリが参照系クエリであるかを判別し、参照系クエリ以外を差分情報蓄積部203に記憶する。そして、差分情報の転送は差分情報蓄積部203に記憶されている全てのクエリを対象に行う方法が挙げられる。この変形例は、差分情報蓄積部203の記憶容量をさらに節約できるという効果を有する。
(第3の実施の形態)
本発明の第3の実施の形態に係る多重化データベースシステムについて説明する。本実施の形態に係る多重化データベースシステムが第1の実施の形態と異なる点は、データベース同期化動作中における差分情報の蓄積処理にある。他の構成・動作等については第1の実施の形態と同様なので、ここでは相違点のみを説明する。
第1の実施の形態では、サーバ制御部210は、クライアント500から受信した全てのパケットを差分情報蓄積部203に保存していた。すなわち、トランザクション制御SQL、参照系SQL及び更新系SQLの全てのSQLについて差分情報蓄積部203に保存し、サーバ100には差分情報蓄積部203に記憶されている全てのデータを古いものから順に送信していた。
一方、本実施の形態では、サーバ制御部210は、データベース同期化動作中にクライアント500から受信したパケットのうち、トランザクションの開始SQL(BEGIN)や確定SQL(COMMIT)や取消SQL(ROLLBACK)等のトランザクション制御SQL、及び、SELECTなど参照系のSQLについては保存せず、UPDATEやINSERTなどの更新系のSQLのうち正常稼働中のサーバ100でCOMMITされたもののみを差分情報蓄積部203に保存する。
ここで注意すべき点は、差分情報蓄積部203には、クライアント500から受信した順番ではなく、正常稼働中のサーバ100で処理された順番に更新クエリを蓄積することである。これは、更新対象が重複する更新クエリについては、その処理順序によってデータベース101の内容が異なってしまう可能性があるためである。
このような処理を実現するために、本実施の形態では、図24に示すような差分情報一時蓄積部205を新たに設けた。この差分情報一時蓄積部205のデータ構造は、差分情報蓄積部203と同様に、クライアントから受信したクエリと該クエリが属するトランザクションのIDとからなる。
サーバ制御部210は、同期化処理中にクライアント500からクエリを受信すると、更新系のもののみを順次、差分情報一時蓄積部205に蓄積するとともに、正常稼働中のサーバ100に転送する。一方、更新系以外のものについては、差分情報一時蓄積部205に蓄積することなく正常稼働中のサーバ100に転送する。
ここで、サーバ制御部210は、正常稼働中のサーバ100から更新クエリの実行が失敗したことを示す応答パケットを受信すると、当該更新クエリを差分情報一時蓄積部205から削除する。また、正常稼働中のサーバ100からトランザクションのROLLBACKが正常に完了したことを示す応答パケットを受信すると、サーバ制御部210は、当該トランザクションに属する全ての更新クエリを差分情報一時蓄積部205から削除する。一方、正常稼働中のサーバ100からトランザクションのCOMMITが正常に終了した応答パケットを受信すると、サーバ制御部210は、当該トランザクションに属する更新クエリについて差分情報一時蓄積部205から差分情報蓄積部203に順次移動させる。
以上のような処理により差分情報蓄積部203には、正常稼働中のサーバ100でCOMMITされた更新クエリのみが、その処理された順番で蓄積される。したがって、後に新規サーバ100から差分情報転送要求があったら、差分情報蓄積部203に記憶されている差分情報を蓄積されている順番で新規のサーバ100及び同期化用サーバ100に転送すればよい。なお、新規のサーバ100及び同期化用サーバ100のデータベース101は、仲介装置200からの更新クエリを順次処理するのみなので、この更新クエリはオートコミットモードで処理する。
このように、本実施の形態によれば、同期化処理には不要の参照系クエリ、BEGINやROLLBACKなどのトランザクション制御SQLを差分情報蓄積部203に蓄積することがないので、第1の実施形態と比較すると、差分情報の転送時間及びサーバでの処理時間を短縮化できる。他の効果については第1の実施の形態と同様である。
なお、本実施形態では、クライアント500から受信したクエリは、当該クエリの属するトランザクションが正常稼働中のサーバ100でCOMMITされた時点で、差分情報一時記憶部205から差分情報記憶部203へ移動されていたが、その変形例として、当該クエリが正常稼働中のサーバ100で正常処理された時点で移動するようにしてもよい。この場合には、トランザクションがROLLBACKしたらら該トランザクションに属する更新クエリを差分情報記憶部203から削除すればよい。このような処理は、例えばPostgreSQLのように、更新順序によって行の順番が変わるDBMSのデータベースを完全一致させるために有効である。
(第4の実施の形態)
本発明の第4の実施の形態に係る多重化データベースシステムについて説明する。本実施の形態に係る多重化データベースシステムが第1の実施の形態と異なる点は、差分情報蓄積部の構造にある。他の構成・動作等については第1の実施の形態と同様なので、ここでは相違点のみを説明する。
本実施の形態に係る仲介装置200は、図25に示すように、第1の実施の形態とは異なり差分情報蓄積部203は設けず、送信キュー206に第1の実施形態における差分情報蓄積部203と送信キュー204の機能を統合させている。
本実施の形態に係る送信キュー206のデータ構造について図26を参照して説明する。送信キュー206は、クライアント500から受信したクエリの内容と、そのクエリの属するトランザクションIDと、各サーバ100への送信状態とを記憶する。トランザクションIDは、第1の実施の形態と同様に、トランザクション管理表202から取得される。各サーバ100への送信状態は、システムに属する各サーバ100毎に記憶される。
送信キュー206の各サーバ100への送信状態は、「未送信」,「送信完了」,「保留」の3つの値を取りうる。「未送信」は、クライアント500から受信したクエリが未だ当該サーバ100に送信されていない状態である。「送信完了」は、当該サーバ100への送信が完了した状態である。「保留」は、新規サーバ100のシステムへの組み込み処理中に、当該サーバ100への転送されることなく保留されている状態である。全てのサーバ100についての送信状態が「送信完了」になると、当該エントリは送信キュー206から削除される。
次に、サーバ制御部210の動作について説明する。サーバ制御部210は、クライアント500からクエリを受信すると、当該クエリがトランザクション開始SQL(BEGIN)の場合は当該トランザクションに対して新たなトランザクションIDを振り出してトランザクション管理表202に登録する。そして、当該クエリ内容,新規トランザクションID,各サーバ100の送信状態を「未送信」で送信キュー206に登録する。また、クライアント500から受信したクエリがトランザクション開始SQL(BEGIN)以外の場合は、当該クエリの属するトランザクションIDをトランザクション管理表202から取得し、当該クエリ内容,トランザクションID,各サーバ100の送信状態を「未送信」で送信キュー206に登録する。
サーバ制御部210は、送信キュー206に記録されているクエリを、その送信状態が「未送信」となっているサーバ100に対して送信し、当該サーバ100についての送信状態を「送信完了」に変更する。全てのサーバ100について送信状態が「送信完了」になったクエリについては送信キュー206から削除する。
仲介装置200からクエリを受信した各サーバ100は、当該クエリの処理を行い、応答パケットを仲介装置200に返す。仲介装置200のサーバ制御部210は、各サーバ100から受信した応答パケットを対比して障害発生の有無を確認し、正常な応答パケットの1つをクライアント500に返す。
一方、サーバ100から正当でない応答が仲介装置200に返ってきたり、応答そのものが返ってこない場合には、当該サーバ100に障害が発生したものとしてシステムから切り離す。具体的には、サーバ管理表201における当該サーバの稼働情報を「down」に変更するとともに、送信キュー206の送信状態の欄について当該サーバに関する項目を削除する。図27は、送信キュー206が図26に示すような状態でサーバ100cがシステムから切り離された場合の送信キュー206の一例である。
次に、新規サーバ100からシステムへの組み込み要求を受信した場合の動作について説明する。サーバ制御部210は、第1の実施の形態と同様に、組み込み要求受信時に実行中のトランザクションが終了するまで、新規トランザクションの開始は保留する。具体的には、クライアント500から受信したクエリが新規トランザクションに係るものの場合には、送信状態を「保留」として送信キュー206に保存する。一方、クライアント500から受信したクエリが組み込み要求時に実行中のトランザクションに係るものの場合には、送信状態を「未送信」として送信キュー206に保存する。図28は、送信キュー206が図27に示すような状態で、仲介装置200が同期化要求を受信し、その後クライアント500から新たにクエリを受信した場合の送信キュー206の一例である。図28の例では、三行目のトランザクションID=3のBEGINを除いて上のクエリから順に(古いクエリから順に)、トランザクションID=2のSELECT,トランザクションID=1のCOMMIT,トランザクションID=2のCOMMITの順に正常稼働中のサーバ100a及び100bへ転送され、その送信状態が「未送信」から「送信完了」に変更される。トランザクションID=3のBEGINは、同期化用サーバ100bに同期化指示(スナップショット作成指示)を送信した後に転送されることになる。
そして、組み込み要求受信時に実行中のトランザクションに係るクエリを全て正常稼働中のサーバ100に送信し終えると、サーバ制御部210は、送信キュー206に組み込み対象である新規のサーバ100の項目を追加する。ここで、送信キュー206には送信状態が「保留」となっているクエリが記憶されている場合がある。この場合、サーバ制御部210は、送信キュー206に記憶されているクエリーに対して、新規サーバ100についての送信状態を「保留」とする。図29は、図28の送信キュー206に対して新規サーバ100cの登録をした場合を示している。また、サーバ制御部210は、組み込み要求受信時に実行中のトランザクションに係るクエリを全て正常稼働中のサーバ100に送信し終えると、第1の実施の形態と同様に、正常稼働中のサーバ100から同期化用サーバ100を選定し、この同期化用サーバ100に対して同期化指示(スナップショット作成指示)を送出する。
サーバ制御部210は、同期化用サーバ100に同期化指示を送信すると、この同期化用サーバ100についてサーバ管理表201の稼働状態を「sync」に変更する。そして、正常稼働中のサーバ100へのクエリの送信を再開する。具体的には、まず送信キュー206に記憶されている全てのクエリ(この時点では全てのクエリの送信状態は全てのサーバ100について「保留」になっている)について、正常稼働中のサーバ100の送信状態を「未送信」に変更する。そして、サーバ制御部210は、送信状態が「未送信」のクエリを当該サーバ100に順次送信し、送信が完了したら送信状態を「送信完了」に修正する。また、新たにクライアント500から受信したクエリは、正常稼働中のサーバ100についての送信状態は「未送信」、新規のサーバ100及び同期化用サーバ100についての送信状態は「保留」にして送信キュー206に記憶する。図30は、図29の送信キュー206に対して同期化指示送信後に新たなクエリを受信した場合を示している。また、図31のように、正常稼働中のサーバ100aに対しては「送信完了」となっても新規のサーバ100c及び同期化用サーバ100bに対しては「送信完了」になっていない(「保留」になっている)ので、送信キュー206から当該クエリは削除しない。
新規のサーバ100が正常稼働中のサーバ100から受信したスナップショットを用いてデータベース101の復元が完了すると、サーバ制御部210は新規のサーバ100から差分情報転送要求を受信する。サーバ制御部210は、送信キュー206に記憶されているクエリであって、送信状態が「保留」となっているものを当該「保留」となっていたサーバ100、すなわち新規のサーバ100及び同期化用サーバ100に古いものから順次送信する。送信したクエリについては、送信キュー206における当該サーバ100の送信状態を「送信完了」にし、全てのサーバ100についての送信状態が「送信完了」になったら当該エントリは削除する。
サーバ制御部210は、送信状態が「保留」となっているクエリが送信キュー206に存在しなくなると、サーバ管理表201に新規のサーバ100を「active」として追加するとともに、同期化用サーバ100の稼働状態を「active」に変更することで、当該サーバ100をシステムに組み込む。以降の動作は各サーバ100が正常動作している場合のものと同様になる。
以上のように本実施の形態に係る仲介装置200では、第1の実施の形態における差分情報蓄積部203と送信キュー204の機能を、1つの送信キュー206に統合しているので、メモリの利用効率や処理効率が向上する。また、送信キュー206の各クエリに対して、各サーバ100への送信状態を記憶するようにしているので、新規サーバ100を組み込む際には当該サーバ100の送信状態を追加すればよい。これにより、一度に複数台のサーバ100をシステムに組み込むことができる。他の作用効果については第1の実施の形態と同様である。
なお、本実施の形態は、第1の実施の形態の変形例として説明したが、上記第2〜第3の実施の形態において同様の変形を適用できることは言うまでもない。
(第5の実施の形態)
本発明の第5の実施の形態に係る多重化データベースシステムについて説明する。本実施の形態に係る多重化データベースシステムが第4の実施の形態と異なる点は、差分情報の蓄積方法にある。他の構成・動作等については第4の実施の形態と同様なので、ここでは相違点のみを説明する。
上述の第1の〜第4の実施の形態では、仲介装置200が正常稼働中のサーバ100にスナップショットの作成指示を送信するタイミングは、正常稼働中のサーバ100において実行中のトランザクションが無くなったときである。具体的には、新規サーバ100からの組込要求を受信した時点で実行中のトランザクションについて正常稼働中のサーバ100で処理を行うのと並行して、組込要求受信時以降にクライアント500から受信した新規トランザクションの開始要求を保留していた。そして、組込要求を受信した時に実行中のトランザクションが無くなった時点で、同期化用サーバ100にスナップショットの作成指示を送信している。これは、DBMSによっては、スナップショット作成時にトランザクションが実行中だと、そのトランザクションに属する更新クエリによるデータ更新がスナップショットに反映されるか否かが不確定となる場合を考慮したためである。
一方、本実施の形態では、サーバ100として、スナップショット作成時に実行中のトランザクションに属する更新クエリ及びスナップショット作成処理中に受信した更新クエリについては、当該スナップショットには反映しないという動作を行うものを用いる。これにより、本実施の形態に係る仲介装置200のサーバ制御部210は、組込要求受信時に実行中のトランザクションの終了を待つことなく、スナップショット作成指示の送信及び新規トランザクションの開始を行うことができる。
このような処理を行うため、本実施の形態に係る仲介装置200のサーバ制御部210は、送信キュー206に記憶されている各クエリについて、全てのサーバ100について送信状態が「送信完了」となり、且つ、当該クエリに属するトランザクションが終了した場合に、当該クエリの登録を削除する。
以下、新規サーバ100をシステムに組み込む際の動作について図32〜図36を参照して説明する。いま、システムにはサーバ100a及び100bが組み込まれており、これから新たにサーバ100cを組み込むものとする。
サーバ制御部210は、新規サーバ100cから組込要求を受信すると、正常稼働中のサーバ100の中から同期化用サーバ100を選定する。本実施の形態ではサーバ100bを選定したとする。サーバ制御部210は、同期化用サーバ100bに対してスナップショットの作成指示を送信する。新規サーバ100cが仲介装置200に対して組込要求を送信した際の送信キュー206の一例を図32に示す。前述したように、送信キュー206に記憶されたクエリは、当該クエリが送信完了しても該クエリの属するトランザクションが完了していないものは削除されずに残っている。スナップショット作成指示を受信した同期化用サーバ100bは、スナップショットの作成を開始する。ここで作成されるスナップショットは、送信キュー206に記憶されているクエリは反映されていないものである。また、サーバ制御部210は、新規サーバ100cから組込要求を受信すると、送信キュー206に記憶されている全てのクエリについて、当該新規サーバ100cの送信状態を「保留」にして追加する。この時の、送信キュー206の一例を図33に示す。
サーバ制御部210は、組込要求受信時以降にクライアント500からクエリを受信すると、正常稼働中のサーバ100aについては送信状態を「未送信」、同期化用サーバ100b及び新規サーバ100cについては送信状態を「保留」にして送信キュー206に順次追加する。そして、送信状態が「未送信」となっているクエリについては当該「未送信」のサーバ100aに対して順次転送し、送信状態を「送信完了」に変更していく。このとき、図34に示すように、送信キュー206に記憶されているクエリは、正常稼働中のサーバ100aについてはトランザクション単位で送信状態が「送信完了」となっているが、同期化用サーバ100b及び新規サーバ100cについては「保留」となっているので、ここではクエリの削除は行わない。
一方、仲介装置200からスナップショットの作成指示を受信した同期化用サーバ100bは、作成したスナップショットを新規のサーバ100cに送信する。新規のサーバ100cのデータベース制御部102cは、受信したスナップショットからデータベース101cを復元し、仲介装置200に差分情報転送要求を送信する。
差分情報転送要求を受信したサーバ制御部210は、送信キュー206に記憶されている送信状態が「保留」となっているクエリを差分情報として順次同期化用サーバ100b及び新規サーバ100cに送信し、図35に示すように、送信状態を「送信完了」に変更する。そして、前述したように、全てのサーバについて送信状態が「送信完了」となり、且つ、当該クエリのトランザクションが完了したら、そのクエリを削除する。以降、送信状態が「保留」のクエリの送信中にクライアント500からクエリを受信すると、図36に示すように、正常稼働中のサーバ100a,同期化用サーバ100b,新規サーバ100cの全ての送信状態を「未送信」で送信キュー206へ記憶する。そして、送信状態が「保留」のクエリが無くなった時点で各データベース101a,1010b,101cの同期が完了したことになる。
本実施形態によれば、システムで用いるサーバ100の機能的要件が限定されるためサーバ選択の幅が狭くなるものの、仲介装置200での処理が簡略化されるので処理効率の高いものとなる。
(第6の実施の形態)
本発明の第6の実施の形態に係る多重化データベースシステムについて図面を参照して説明する。本実施の形態に係る多重化データベースシステムが前述の各実施の形態と異なる点は、同期化用サーバ及び新規サーバへの差分情報の送出タイミングにある。
すなわち、上記各実施の形態では、仲介装置は新規サーバから差分情報転送要求を受信すると、新規サーバ及び同期化用サーバの双方に同時に差分情報の送出を行っていた。一方、本実施の形態では、同期化用サーバに対する差分情報の送出処理と新規サーバに対する差分情報の送出処理とを非同期でそれぞれ並行して実施する。このため、本実施の形態に係る仲介装置は、複数のサーバに対する差分情報を互いに独立して蓄積する必要があるので、前述の第4の実施の形態に係る仲介装置と同じ構成とした。すなわち、送信キュー206において、各サーバ毎に差分情報を記憶する。
仲介装置200は、前記各実施の形態とは異なり、新規サーバ100からだけでなく同期化用サーバ100からも差分情報転送要求を受信する。そして、差分情報転送要求を受信すると、送信キュー206における要求元のサーバについての送信状態が「保留」となっているクエリを、当該要求元のサーバに順次送出する。そして、差分情報転送要求元のサーバについて「保留」となっているクエリの送出が完了すると、当該サーバについてサーバ管理表201を更新してシステムに組み込む。組込処理時におけるクライアント500からのクエリの処理などは前述した第4の実施の形態と同様である。
同期化用サーバ100は、仲介装置200から同期化指示(スナップショット作成指示)を受信すると、スナップショットの作成を開始する。次に、スナップショットの作成が完了すると、仲介装置200に対して差分情報転送要求を送信するとともに、新規サーバ100に対するスナップショットの転送を開始する。この差分情報転送要求に応じて仲介装置200から差分情報を順次受信するので、同期化用サーバ100はこの差分情報の処理を行う。
次に、新規サーバ100をシステムに組み込む際の動作について図37及び図38のシーケンスチャートを参照して具体的に説明する。
今、新規サーバ100cが仲介装置200にシステムへの組込要求を送信し、仲介装置200がサーバ100bを同期化用サーバとして選定して、該同期化用サーバ100bに同期化指示を送信するとともに(ステップS301)、該サーバ100bをシステムから切り離したとする(ステップS302)。なお、システムへの組込要求の受信から同期指示の送信までの動作については、前述した第4の実施の形態と同様である。
同期化用サーバ100bは、仲介装置200から同期化指示を受信すると(ステップS301)、スナップショットの作成を開始する(ステップS303)。そして、スナップショットの作成が完了すると(ステップS304)、仲介装置200に対して差分情報転送要求を送信するとともに(ステップS305)、当該スナップショットを新規サーバ100cへ転送する処理を開始する(ステップS306)。
仲介装置200は、同期化用サーバ100bから差分情報転送要求を受信すると、当該サーバ100bに対する差分情報の送出を開始する(ステップS307)。具体的には、送信キュー206に蓄積されているクエリのうち同期化用サーバ100bについての送信状態が「保留」となっているものを、古いものから順に同期化用サーバ100bに送信する。そして、当該クエリについて送信キュー206における同期化用サーバ100bの送信状態を「送信完了」に更新する。
同期化用サーバ100bへの差分情報転送中に、クライアント500からクエリ(図37ではUPDATE)を受信すると(ステップS308)、仲介装置200は当該クエリを差分情報として記憶する(ステップS309)。具体的には、当該クエリを、正常稼働中のサーバ100aについては送信状態を「未送信」で、同期化用サーバ100b及び新規サーバ100cについては送信状態を「保留」にして、送信キュー206に蓄積する。次に、仲介装置200は、正常稼働中のサーバ100aに転送し(ステップS310)、送信キュー206のサーバ100aについての送信状態を「送信完了」に更新する。そして、正常稼働中のサーバ100aからの応答パケット(ステップS311)を、要求元のクライアント500に返す(ステップS312)。
新規サーバ100cは、スナップショットに基づきデータベース101cの復元を完了すると(ステップS313)、仲介装置200に対して差分情報転送要求を送信する(ステップS314)。
仲介装置200は、新規サーバ100cから差分情報転送要求を受信すると(ステップS314)、当該サーバ100cに対する差分情報の送出を開始する(ステップS315)。具体的には、送信キュー206に蓄積されているクエリのうち新規サーバ100cについての送信状態が「保留」となっているものを、古いものから順に新規サーバ100cに送信し、当該クエリについて同期化用サーバ100bの送信状態を「送信完了」に更新する。本実施の形態は、同期化用サーバ100bへの差分情報転送と、新規サーバ100cへの差分情報転送は、互いに並行して非同期で行うことが特徴的な点である。
同期化用サーバ100b及び新規サーバ100cへの差分情報転送中に、クライアント500からクエリ(図37ではINSERT)を受信すると(ステップS316)、仲介装置200は当該クエリを差分情報として記憶する(ステップS317)。具体的には、当該クエリを、正常稼働中のサーバ100aについては送信状態を「未送信」で、同期化用サーバ100b及び新規サーバ100cについては送信状態を「保留」にして、送信キュー206に蓄積する。次に、仲介装置200は、正常稼働中のサーバ100aに転送し(ステップS318)、送信キュー206のサーバ100aについての送信状態を「送信完了」に更新する。そして、正常稼働中のサーバ100aからの応答パケット(ステップS319)を、要求元のクライアント500に返す(ステップS320)。
仲介装置200は、同期化用サーバ100b又は新規サーバ100cについて送信状態が「保留」となっているクエリが送信キュー206からなくなると、差分情報の送出が完了したことになるので、当該サーバ100b,100cについてそれぞれサーバ管理表201を更新してシステムに組み込む。
通常は、図38に示すように、同期化用サーバ100bへの差分情報送出は新規サーバ100cより先に終了し(ステップS321)、仲介装置200は、同期化用サーバ100bについてサーバ管理表201の稼働状態をactiveに変更してシステムに組み込む(ステップS322)。
以降、新規サーバ100cへの差分情報転送中にクライアント500からのクエリ(図38ではUPDATE)は、正常稼働中のサーバ100a及び前記ステップS322で組み込まれたサーバ100bで処理される。具体的には、当該クライアント500からクエリを受信すると(ステップS323)、当該クエリを正常稼働中のサーバ100a及び100bについては送信状態を「未送信」で、新規サーバ100cについては送信状態を「保留」で、送信キュー206に蓄積する(ステップS324)。次に、仲介装置200は、正常稼働中のサーバ100a及び100bに転送し(ステップS325,S326)、送信キュー206のサーバ100a及び100bについての送信状態を「送信完了」に更新する。そして、正常稼働中のサーバ100a及び100bからの応答パケット(ステップS327,S328)の正当性をチェックし(ステップS329)、正しい応答の1つを要求元のクライアント500に返す(ステップS330)。
次に、仲介装置200は、新規サーバ100cについて送信状態が「保留」となっているクエリが送信キュー206からなくなると、差分情報の送出が完了したことになるので(ステップS331)、当該新規サーバ100cについてサーバ管理表201の稼働情報を「active」で追加してシステムに組み込む(ステップS332)。
本実施の形態によれば、上記各実施の形態と比較して、同期化用サーバ100のシステムの組込復帰の時期が早くなるので、システムに組み込まれているサーバの数が通常時よりも少なくなっている期間を短縮することができる。したがって、システムの耐故障性が向上する。
なお、本実施形態では、同期化用サーバ100bが新規サーバ100cよりも先にシステムに組み込まれた例について説明したが、例えば新規サーバ100cが同期化用サーバ100bよりも高性能である場合など、状況によっては新規サーバ100cの方が先にシステムに組み込まれる場合も考えられる。
以上、本発明の実施形態について詳述したが、上記実施の形態は例示的なものであり、本発明はこれに限定されるものではない。本発明の範囲は特許請求の範囲に示されており、この特許請求の範囲の意味に入る全ての変形例は本発明に含まれるものである。
例えば、各サーバは要求に応じて同じ応答をするならば同じ実装である必要はない。すなわち、バージョン、仕様、プログラム言語、コンパイラの種類、コンパイラオプション、ハードウェアかソフトウェアか、などが異なっていてもよい。サーバには、PostgreSQLなどのフリーソフトウェアやOracleなどの市販のソフトウェア、独自開発のソフトウェア、いずれを使ってもよい。また、それらが混在していてもよい。例えば、サーバ100aはPostgreSQLでサーバ100b及び100cはOracleでも良い。
DBMSとしては、市中品(例えば、OracleやPostgreSQL)を使う場合は、データベース制御部102は、データベース管理部とデータベースサーバ管理部に機能を分けることによって、市中品を無改造で使うことができる。データベース管理部は、データベース101を直接操作するもので、例えばPostgreSQLの場合はpostmasterやpostgresに相当する。データベースサーバ管理部は、仲介装置200とデータベース管理部の間に介在し、クエリの送受信を中継したりするほかに、他のサーバを同期化する際のデータベース101のスナップショットを作成したり、そのスナップショットを他のサーバへ転送したりする処理を行う。
スナップショットの作成方法は、例えばDBMSがPostgreSQLならばpg_dumpなどのダンプツールやバックアップツールを使って実現する。なお、pg_dumpはPostgreSQLサーバ同士を同期化する場合には有用だが、異種のDBMS同士(例えばPostgreSQLとOracle)を同期化する場合には、DBMS固有のツールは使わずに、正常稼働中のDBMSサーバからSELECTクエリで全てのデータを取りだしINSERTクエリでデータを入れる汎用のツールを使えばよい。
また、上記実施の形態では、システムへの組み込み要求(新規サーバのデータベース同期化要求)は当該新規サーバ100のデータベース制御部102が仲介装置200へ送信しているが、保守端末などの他の装置から送信してもよいし、オペレータが仲介装置200に直接指示しても良い。
さらに、上記実施の形態では、サーバはパソコン上のソフトウェアで実現しているが、ハードウェアで実装しても良い。
また、上記実施の形態では、仮想サーバ800を構成する仲介装置200は1台のみであったが、複数台設けて冗長性を持たせることにより、より可用性の高い構成とすることも可能である。仲介装置を多重化させる技術については、例えば本願出願人による特開2003−345679号公報に記載されたものなどを用いればよい。
第1の実施形態に係る多重化データベースシステムの構成図 第1の実施形態に係るサーバ管理表の一例を示す図 第1の実施形態に係るトランザクション管理表の一例を示す図 第1の実施形態に係る差分情報蓄積部の一例を示す図 第1の実施形態に係る送信キューの一例を示す図 各サーバが正常稼働している場合の多重化データベースシステムの動作を説明するシーケンスチャート 図5の動作におけるサーバ管理表の一例 図5の動作におけるトランザクション管理表の一例 サーバが故障した場合の多重化データベースシステムの動作を説明するシーケンスチャート 図8の動作におけるトランザクション管理表の一例 図8の動作におけるサーバ管理表の一例 新規にサーバを組み込む場合の多重化データベースシステムの動作を説明するシーケンスチャート 新規にサーバを組み込む場合の多重化データベースシステムの動作を説明するシーケンスチャート 新規にサーバを組み込む場合の多重化データベースシステムの動作を説明するシーケンスチャート 図11及び図12の動作におけるサーバ管理表の一例 図11及び図12の動作におけるトランザクション管理表の一例 図11及び図12の動作におけるトランザクション管理表の一例 図11及び図12の動作におけるトランザクション管理表の一例 図11及び図12の動作におけるサーバ管理表の一例 図11及び図12の動作における差分情報蓄積部の一例 図11及び図12の動作におけるサーバ管理表の一例 新規にサーバを組み込む場合の多重化データベースシステムの動作を説明するシーケンスチャート 第2の実施形態においてクライアントから受信したクエリと差分情報として送出するクエリの関係を説明する図 第3の実施形態に係る差分情報蓄積部の一例 第4の実施形態に係る仲介装置の構成図 第4の実施形態に係る送信キューの一例を示す図 第4の実施形態に係る多重化データベースシステムの動作中の送信キューの一例 第4の実施形態に係る多重化データベースシステムの動作中の送信キューの一例 第4の実施形態に係る多重化データベースシステムの動作中の送信キューの一例 第4の実施形態に係る多重化データベースシステムの動作中の送信キューの一例 第4の実施形態に係る多重化データベースシステムの動作中の送信キューの一例 第5の実施形態に係る多重化データベースシステムの動作中の送信キューの一例 第5の実施形態に係る多重化データベースシステムの動作中の送信キューの一例 第5の実施形態に係る多重化データベースシステムの動作中の送信キューの一例 第5の実施形態に係る多重化データベースシステムの動作中の送信キューの一例 第5の実施形態に係る多重化データベースシステムの動作中の送信キューの一例 第6の実施形態に係る多重化データベースシステムの動作を説明するシーケンスチャート 第6の実施形態に係る多重化データベースシステムの動作を説明するシーケンスチャート 従来のデータベース同期化システムの構成図
符号の説明
100…サーバ、101…データベース、102…データベース制御部、200…仲介装置、201…サーバ管理表、202…トランザクション管理表、203…差分情報蓄積部、204,206…送信キュー、205…差分情報一時蓄積部、210…サーバ制御部、300,400…ネットワーク、500…クライアント。

Claims (15)

  1. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正常な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、新規の又はこのシステムから切り離されたデータベースサーバ(以後「新規データベースサーバ」と言う)をシステムに組み込む際に各データベースサーバのデータを同期化する方法であって、
    仲介装置は、
    クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部を備え、
    新規データベースサーバの組み込み要求があると、
    (1a)正常稼働中のデータベースサーバの中から選択した1つのデータベースサーバ(以下「同期化用データベースサーバ」と言う)に対してスナップショットの作成を指示するとともに、この同期化用データベースサーバをシステムから切り離し、
    (1b)組み込み要求受信時以降にクライアントコンピュータから受信する処理要求を正常稼働中の他のデータベースサーバを用いて処理するとともに、該処理要求を差分情報として差分情報記憶部に順次記憶し、
    (1c)差分情報転送要求を受信すると差分情報記憶部に記憶されている処理要求を同期化用データベースサーバ又は新規データベースサーバに順次送出し、
    (1d)差分情報記憶部に記憶されている処理要求の同期化用データベースサーバ又は新規データベースサーバに対する送出が終了すると当該送出終了に係る同期化用データベースサーバ又は新規データベースサーバをシステムに組み込み、
    (1e)同期化用データベースサーバ及び新規データベースサーバの双方についてシステムへの組込が終了すると差分情報の記憶処理を終了し、
    正常稼働中のデータベースサーバは、
    (2a)仲介装置からスナップショット作成指示を受信するとその時点でのデータベースのスナップショットの作成を開始し、
    (2b)作成したスナップショットを新規データベースサーバに転送し、
    (2c)仲介装置から差分情報として順次受信した処理要求に応じた処理を行い、
    新規データベースサーバは、
    (3a)同期化用データベースサーバからスナップショットを受信すると該スナップショットを用いてデータベースを復元し、
    (3b)スナップショットに基づきデータベースの復元が完了すると仲介装置に差分情報転送要求を送出し、
    (3c)仲介装置から差分情報として順次受信した処理要求に応じた処理を行う
    ことを特徴とする多重化データベースシステムにおけるデータ同期化方法。
  2. 仲介装置は、新規データベースサーバから差分情報転送要求を受信すると、新規データベースサーバ及び同期化用データベースサーバの双方に対して同一の差分情報を送出する
    ことを特徴とする請求項1記載の多重化データベースシステムにおけるデータ同期化方法。
  3. 正常稼働中のデータベースサーバは、前記ステップ(2b)のスナップショットの転送が終了すると、仲介装置に対して差分情報転送要求を送出し、
    仲介装置は、差分情報転送要求の要求元の新規データベースサーバ又は同期化用データベースサーバのそれぞれに対して互いに非同期で差分情報を送出する
    ことを特徴とする請求項1記載の多重化データベースシステムにおけるデータ同期化方法。
  4. 仲介装置は、
    前記ステップ(1a)において、組み込み要求受信時以降にクライアントコンピュータから受信する新規トランザクションに係る処理要求の処理開始を、組み込み要求受信時点で処理中の全てのトランザクションが終了するまで保留し、処理中のトランザクションが全て終了したら、同期化用データベースサーバに対するスナップショット作成指示及びシステムからの切り離し処理を行う
    ことを特徴とする請求項1乃至3何れか1項記載の多重化データベースシステムにおけるデータ同期化方法。
  5. 仲介装置は、前記ステップ(1b)において、組み込み要求処理受信時に実行中のトランザクションに係る処理要求も差分情報として差分情報蓄積部に記憶する
    ことを特徴とする請求項1乃至3何れか1項記載の多重化データベースシステムにおけるデータ同期化方法。
  6. 仲介装置は、前記ステップ(1b)において、クライアントコンピュータから受信した全ての処理要求を差分情報蓄積部に記憶するとともに、前記ステップ(1c)において、差分情報記憶部に記憶されている全ての処理要求を同期化用データベースサーバ及び新規データベースサーバに送出する
    ことを特徴とする請求項1乃至5何れか1項記載の多重化データベースシステムにおけるデータ同期化方法。
  7. 仲介装置は、前記ステップ(1b)において、クライアントコンピュータから受信した処理要求のうち参照系要求を除いたものを差分情報蓄積部に記憶するとともに、前記ステップ(1c)において、差分情報記憶部に記憶されている全ての処理要求を同期化用データベースサーバ及び新規データベースサーバに送出する
    ことを特徴とする請求項1乃至5何れか1項記載の多重化データベースシステムにおけるデータ同期化方法。
  8. 仲介装置は、前記ステップ(1b)において、クライアントコンピュータから受信した全ての処理要求を差分情報蓄積部に記憶するとともに、前記ステップ(1c)において、差分情報記憶部に記憶されている処理要求のうち参照系要求を除いたものを同期化用データベースサーバ及び新規データベースサーバに送出する
    ことを特徴とする請求項1乃至5何れか1項記載の多重化データベースシステムにおけるデータ同期化方法。
  9. 仲介装置は、前記ステップ(1b)において、クライアントコンピュータから受信した全ての処理要求を差分情報蓄積部に記憶するとともに、前記ステップ(1c)において、差分情報記憶部に記憶されている処理要求のうち正常稼働中のデータベースサーバにおいて正常処理された処理要求のみを同期化用データベースサーバ及び新規データベースサーバに送出する
    ことを特徴とする請求項1乃至5何れか1項記載の多重化データベースシステムにおけるデータ同期化方法。
  10. 仲介装置は、前記ステップ(1c)において、差分情報記憶部に記憶されている処理要求のうち、トランザクション制御に係る処理要求及び参照系の処理要求を含まずに更新系の処理要求のみを同期化用データベースサーバ及び新規データベースサーバに送出する
    ことを特徴とする請求項9記載の多重化データベースシステムにおけるデータ同期化方法。
  11. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正常な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおいて、
    仲介装置は、
    クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部と、
    新規の又はこのシステムから切り離されたデータベースサーバ(以後「新規データベースサーバ」と言う)の該システムへの組み込み要求があると、正常稼働中のデータベースサーバの中から選択した1つのデータベースサーバ(以下「同期化用データベースサーバ」と言う)に対してスナップショットの作成を指示するとともに、この同期化用データベースサーバをシステムから切り離し、組み込み要求受信時以降にクライアントコンピュータから受信する処理要求を正常稼働中の他のデータベースサーバを用いて処理するとともに、該処理要求を差分情報として差分情報記憶部に順次記憶し、差分情報転送要求を受信すると差分情報記憶部に記憶されている処理要求を同期化用データベースサーバ又は新規データベースサーバに順次送出し、差分情報記憶部に記憶されている処理要求の同期化用データベースサーバ又は新規データベースサーバに対する送出が終了すると当該送出終了に係る同期化用データベースサーバ又は新規データベースサーバをシステムに組み込み、同期化用データベースサーバ及び新規データベースサーバの双方についてシステムへの組込が終了すると差分情報の記憶処理を終了する制御部を備え、
    データベースサーバは、
    正常稼働中には、仲介装置からスナップショット作成指示を受信するとその時点でのデータベースのスナップショットの作成を開始し、作成したスナップショットを新規データベースサーバに転送し、仲介装置から差分情報として順次受信した処理要求に応じた処理を行うとともに、
    システムへの組み込みを行う際には、同期化用データベースサーバからスナップショットを受信すると該スナップショットを用いてデータベースを復元し、スナップショットに基づきデータベースの復元が完了すると仲介装置に差分情報転送要求を送出し、仲介装置から差分情報として順次受信した処理要求に応じた処理を行う制御部を備えた
    ことを特徴とする多重化データベースシステム。
  12. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正常な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける仲介装置であって、
    クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部と、
    新規の又はこのシステムから切り離されたデータベースサーバ(以後「新規データベースサーバ」と言う)の該システムへの組み込み要求があると、正常稼働中のデータベースサーバの中から選択した1つのデータベースサーバ(以下「同期化用データベースサーバ」と言う)に対してスナップショットの作成を指示するとともに、この同期化用データベースサーバをシステムから切り離し、組み込み要求受信時以降にクライアントコンピュータから受信する処理要求を正常稼働中の他のデータベースサーバを用いて処理するとともに、該処理要求を差分情報として差分情報記憶部に順次記憶し、差分情報転送要求を受信すると差分情報記憶部に記憶されている処理要求を同期化用データベースサーバ又は新規データベースサーバに順次送出し、差分情報記憶部に記憶されている処理要求の同期化用データベースサーバ又は新規データベースサーバに対する送出が終了すると当該送出終了に係る同期化用データベースサーバ又は新規データベースサーバをシステムに組み込み、同期化用データベースサーバ及び新規データベースサーバの双方についてシステムへの組込が終了すると差分情報の記憶処理を終了する制御部とを備えた
    ことを特徴とする仲介装置。
  13. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正常な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおける仲介装置を実現するプログラムであって、
    コンピュータを、
    クライアントコンピュータからの処理要求を差分情報として記憶する差分情報記憶部と、
    新規の又はこのシステムから切り離されたデータベースサーバ(以後「新規データベースサーバ」と言う)の該システムへの組み込み要求があると、正常稼働中のデータベースサーバの中から選択した1つのデータベースサーバ(以下「同期化用データベースサーバ」と言う)に対してスナップショットの作成を指示するとともに、この同期化用データベースサーバをシステムから切り離し、組み込み要求受信時以降にクライアントコンピュータから受信する処理要求を正常稼働中の他のデータベースサーバを用いて処理するとともに、該処理要求を差分情報として差分情報記憶部に順次記憶し、差分情報転送要求を受信すると差分情報記憶部に記憶されている処理要求を同期化用データベースサーバ又は新規データベースサーバに順次送出し、差分情報記憶部に記憶されている処理要求の同期化用データベースサーバ又は新規データベースサーバに対する送出が終了すると当該送出終了に係る同期化用データベースサーバ又は新規データベースサーバをシステムに組み込み、同期化用データベースサーバ及び新規データベースサーバの双方についてシステムへの組込が終了すると差分情報の記憶処理を終了する制御部として機能させる
    ことを特徴とする仲介プログラム。
  14. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正常な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおけるデータベースサーバであって、
    正常稼働中には、仲介装置からスナップショット作成指示を受信するとその時点でのデータベースのスナップショットの作成を開始し、作成したスナップショットを、新規の又はこのシステムから切り離されたデータベースサーバ(以後「新規データベースサーバ」と言う)に転送し、仲介装置から差分情報として順次受信した処理要求に応じた処理を行うとともに、
    システムへの組み込みを行う際には、他のデータベースサーバからスナップショットを受信すると該スナップショットを用いてデータベースを復元し、スナップショットに基づきデータベースの復元が完了すると仲介装置に差分情報転送要求を送出し、仲介装置から差分情報として順次受信した処理要求に応じた処理を行う制御部を備えた
    ことを特徴とするデータベースサーバ。
  15. 複数のデータベースサーバと、クライアントコンピュータからの処理要求を各データベースサーバに中継するとともに各データベースサーバからの正常な応答の1つをクライアントコンピュータに処理結果として返す仲介装置とを備えた多重化データベースシステムにおけるデータベースサーバを実現するプログラムであって、
    コンピュータを、
    正常稼働中には、仲介装置からスナップショット作成指示を受信するとその時点でのデータベースのスナップショットの作成を開始し、作成したスナップショットを、新規の又はこのシステムから切り離されたデータベースサーバ(以後「新規データベースサーバ」と言う)に転送し、仲介装置から差分情報として順次受信した処理要求に応じた処理を行うとともに、
    システムへの組み込みを行う際には、他のデータベースサーバからスナップショットを受信すると該スナップショットを用いてデータベースを復元し、スナップショットに基づきデータベースの復元が完了すると仲介装置に差分情報転送要求を送出し、仲介装置から差分情報として順次受信した処理要求に応じた処理を行う制御部として機能させる
    ことを特徴とするデータベースサーバプログラム。
JP2004141174A 2004-04-01 2004-05-11 多重化データベースシステム及びそのデータ同期化方法、仲介装置、仲介プログラム、データベースサーバ、データベースサーバプログラム Pending JP2007241323A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2004141174A JP2007241323A (ja) 2004-05-11 2004-05-11 多重化データベースシステム及びそのデータ同期化方法、仲介装置、仲介プログラム、データベースサーバ、データベースサーバプログラム
PCT/JP2005/006483 WO2005096155A1 (ja) 2004-04-01 2005-04-01 多重化データベースシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004141174A JP2007241323A (ja) 2004-05-11 2004-05-11 多重化データベースシステム及びそのデータ同期化方法、仲介装置、仲介プログラム、データベースサーバ、データベースサーバプログラム

Publications (1)

Publication Number Publication Date
JP2007241323A true JP2007241323A (ja) 2007-09-20

Family

ID=38586851

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004141174A Pending JP2007241323A (ja) 2004-04-01 2004-05-11 多重化データベースシステム及びそのデータ同期化方法、仲介装置、仲介プログラム、データベースサーバ、データベースサーバプログラム

Country Status (1)

Country Link
JP (1) JP2007241323A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010217968A (ja) * 2009-03-13 2010-09-30 Hitachi Ltd ストリームデータ処理システムにおける障害回復方法、計算機システム及び障害回復プログラム
JP2012203473A (ja) * 2011-03-23 2012-10-22 Toshiba Corp 複数のインターネットサービスを多重化するサービス中継装置及びサービス中継方法
JP2012256240A (ja) * 2011-06-09 2012-12-27 Nippon Telegr & Teleph Corp <Ntt> 二重化システム、およびメモリ同期方法
JP2016099946A (ja) * 2014-11-26 2016-05-30 日本電気株式会社 同期処理装置、同期処理システム、同期処理方法、および、同期処理プログラム
WO2016151867A1 (ja) * 2015-03-26 2016-09-29 株式会社日立製作所 データベースシステム及びクエリ実行方法
JP2021532465A (ja) * 2018-08-02 2021-11-25 ヒタチ ヴァンタラ エルエルシー サーバ情報の分散回復

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010217968A (ja) * 2009-03-13 2010-09-30 Hitachi Ltd ストリームデータ処理システムにおける障害回復方法、計算機システム及び障害回復プログラム
JP2012203473A (ja) * 2011-03-23 2012-10-22 Toshiba Corp 複数のインターネットサービスを多重化するサービス中継装置及びサービス中継方法
JP2012256240A (ja) * 2011-06-09 2012-12-27 Nippon Telegr & Teleph Corp <Ntt> 二重化システム、およびメモリ同期方法
JP2016099946A (ja) * 2014-11-26 2016-05-30 日本電気株式会社 同期処理装置、同期処理システム、同期処理方法、および、同期処理プログラム
WO2016151867A1 (ja) * 2015-03-26 2016-09-29 株式会社日立製作所 データベースシステム及びクエリ実行方法
JP2021532465A (ja) * 2018-08-02 2021-11-25 ヒタチ ヴァンタラ エルエルシー サーバ情報の分散回復
JP7111882B2 (ja) 2018-08-02 2022-08-02 ヒタチ ヴァンタラ エルエルシー サーバ情報の分散回復

Similar Documents

Publication Publication Date Title
US8140623B2 (en) Non-blocking commit protocol systems and methods
EP2521037B1 (en) Geographically distributed clusters
US5802062A (en) Preventing conflicts in distributed systems
JP3822381B2 (ja) 分散データベースシステム障害回復方法
EP1704480B1 (en) Cluster database with remote data mirroring
US6941327B2 (en) Apparatus and method for database synchronization in a duplex system
EP0974895A2 (en) System for user control of version synchronization in mobile computing
US20070143362A1 (en) Database system including center server and local servers
WO2022170979A1 (zh) 日志执行方法、装置、计算机设备及存储介质
CN115098229A (zh) 事务处理方法、装置、节点设备及存储介质
Rodrigues et al. The GlobData fault-tolerant replicated distributed object database
JP2006338145A (ja) 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム
JP2007241323A (ja) 多重化データベースシステム及びそのデータ同期化方法、仲介装置、仲介プログラム、データベースサーバ、データベースサーバプログラム
Armendáriz-Inigo et al. SIPRe: a partial database replication protocol with SI replicas
JP4998010B2 (ja) データベースシステム管理、データベースシステム、プログラム及び処理装置
Liang et al. Online recovery in cluster databases
JP2007241322A (ja) 多重化データベースシステム及びそのデータ同期化方法、仲介装置、仲介プログラム、データベースサーバ、データベースサーバプログラム
Munoz et al. Globdata: A platform for supporting multiple consistency modes
JP4138329B2 (ja) データ処理システム及びデータ処理方法
Moiz A hybrid replication strategy for mobile environments
JP2007241324A (ja) 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム
JPH087765B2 (ja) Lan統合生産システムの作業代替方式
JP2007241325A (ja) 多重化データベースシステム及びその同期化方法、仲介装置、仲介プログラム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080507

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20081014