デベロッパー

デベロッパー

高可用性データ同期アーキテクチャ

Joshua Savill
2008年6月17日 / 10:00
 
 

はじめに

 データの同期は、企業の情報システムで重要な部分を占めるようになりました。高可用性データベースを同期させること、そして単一障害点(SPOF:Single Points of Failure)のない同期システムを構築することは、今日のデータシステムに求められる24時間稼動という要件を満たすために、解決しなければならない課題です。

データ同期

 データ同期環境には、リモートデータベースから統合データベースへのデータ転送と、その逆方向へのデータ転送を行うための転送メカニズムがあります。

図1 同期プロセス
図1 同期プロセス
 各種のデータベース管理ソリューションは、それぞれ異なるデータ同期メカニズムを使用しています。Sybase iAnywhereの同期ソフトウェアである「MobiLink Synchronization」は、拡張性の高いセッションベースの同期システムを持ちます。このソフトウェアを利用することで、統合データベースと呼ばれるメインデータベースと多数のリモートデータベース間のデータ同期が可能になります。統合データベースにはいくつかのODBC規格のデータベースを使用でき、例えばSQL Anywhere、Sybase Adaptive Server Enterprise、Oracle、Microsoft SQL Server、IBM DB2などが使用できます。

図2 Sybase iAnywhereのMobiLink Synchronizationシステム
図2 Sybase iAnywhereのMobiLink Synchronizationシステム
 単一障害点のない同期システムを構築するには、システムの各コンポーネントを二重化する(冗長性を持たせる)ことが必要です。

データベースのミラーリング

 最近の傾向として、企業はデータや関連するアプリケーションが常に利用可能であることを求めるようになっています。それゆえ、企業のデータベース管理システムを24時間常に稼動させ、オンラインに保つことの重要性は増しています。データベースのミラーリングは、データベース管理システムの可用性と災害復旧性を高める技術であり、データとデータ同期を常時利用できるようにします。

 データベースのミラーリングシステムは、それぞれ別のコンピュータ上で実行される2つあるいは3つのデータベースサーバから成り、これらのサーバの連携によってデータベースのコピーを保持します。データベースのミラーリングは、プライマリサーバ、ミラーサーバ、監視サーバという3種類のサーバによって行われます。プライマリサーバとミラーサーバはそれぞれがデータベースファイルのコピーを保持します。監視サーバはデータベースのコピーを保持せず、他の2つのサーバのうちどちらにデータベースの所有権を持たせるかを決定します。

図3 可用性の高いデータベース管理システムの構成
図3 可用性の高いデータベース管理システムの構成

統合データベースの高可用性

 データベースのミラーリングは統合データベースの高可用性を実現します。図4の点線は、データベースのミラーリング環境でロールの切り替えが起こった場合の、同期サーバのフェールオーバーを表しています。

図4 統合データベースの高可用性
図4 統合データベースの高可用性

同期サーバの高可用性

 データベースのミラーリング環境を用意しただけでは、データ同期システムの単一障害点の問題は解決されません。図4では、同期サーバが単一障害点になります。しかし、複数の同期サーバとロードバランサ(フェールオーバークラスタ)を使用すれば、システムの単一障害点を取り除くことができます。図5の点線は、データベースのミラーリング環境でロールの切り替えが起こった場合、あるいは同期サーバ#1で障害が発生した場合の、同期サーバのフェールオーバーを表しています。

図5 単一障害点のない高可用性データ同期システム
図5 単一障害点のない高可用性データ同期システム
 ロードバランサ(フェールオーバークラスタ)と複数の同期サーバの導入によって、データ同期環境の各コンポーネントが二重化されます。この環境ならば、ハードウェアあるいはソフトウェアに障害が起こっても、データ同期システムは引き続き機能します。

リモートデータベースの高可用性

 リモートデータベースシステムでデータベースのミラーリング環境を構築することもできますが、データ同期を起動する方法はさらに複雑になります。データ同期は、同期クライアントがリモートデータベースおよび同期サーバと接続を確立したときに起動されます。ただし、データベースのミラーリング環境では、どちらのデータベースがプライマリサーバとして稼動しているのか、常に認識されているわけではありません。

 同期クライアントは、プライマリサーバ(あるいは、ロールの切り替えが起こった場合はミラーサーバ)と接続を確立する必要があります。よって、必然的に同期サーバはリモートデータベースと同じマシン上になければなりません。そうすれば同期クライアントは稼動中のデータベースに接続でき、システムの単一障害点を回避できます。

同期クライアントの高可用性

 同期クライアントの高可用性を実現するには、クライアント側のプライマリサーバとミラーサーバの両方のマシンに同期クライアントをインストールし、その後、外部プロシージャから同期を起動します。

図6 リモートデータベースの高可用性
図6 リモートデータベースの高可用性
 これはxp_cmdshellで実現できます。xp_cmdshellシステムプロシージャを使用すると、SQLコードからWindowsコマンドシェルに対しオペレーティングシステムコマンドを直接実行できます。これならば、どのマシンがプライマリサーバになっているかを認識する必要がありません。理由は以下のとおりです。

  • アプリケーションがこの外部プロシージャを呼び出すと、その時点でプライマリデータベースサーバに指定されているコンピュータ上でのみ呼び出しが行われます。
  • 同期クライアントはデータベースサーバを基準として呼び出されるので、データベースファイルを問題なく見つけることができます。
 同期を起動する外部プロシージャの例を以下に示します。

CALL xp_cmdshell( 'START dbmlsync -c dsn=MyDB -k -o c:¥¥out¥¥ml.out 
        -n MyPub -e sv=Version1', 'no_output' )
 xp_cmdshellプロセスは、アプリケーション接続あるいはデータベースサーバマシンのシステムプロセスを通じて起動できます。

高可用性同期クライアントによる単一障害点の排除

 データベースのミラーリングシステムでは、2台以上のマシンが停止しない限り、同期システム全体が停止することはありません。ただし、上記の解決方法では、同期クライアントを実行しているマシンが障害を起こすと、同期は停止します。この単一障害点を回避するには、両方のデータベースサーバ上のデータベースに格納されているスケジュールされたイベントから、外部プロシージャを呼び出すようにすればよいでしょう。こうすれば、外部アプリケーションからデータの同期を起動する必要はなくなります。スケジュールされたイベントはSybase iAnywhereのSQL Anywhereの特徴的な機能で、設定済みのスケジュールに基づいてロジックを起動することができます。スケジュールされたイベントは、現時点でプライマリサーバとなっているサーバ上でのみ実行されます。

 外部プロシージャをコールする、スケジュールされたイベントの例を以下に示します。

CREATE EVENT "SyncEvent" 
HANDLER
BEGIN
     event_parameter( 'NumActive' )
     IF CAST( event_parameter('NumActive' ) AS INTEGER )
        > 1 THEN RETURN;
     END IF;
     CALL xp_cmdshell( 'START dbmlsync -c dsn=MyDB -k 
        -o c:¥¥out¥¥ml.out -n MyPub -e sv=Version1', 'no_output' )
END;
ALTER EVENT "SyncEvent"
ADD SCHEDULE "daily_sync"
     EVERY 10 MINUTES BETWEEN '09:00:00' AND '22:00:00';
 このステートメントでは、まず、イベントパラメータNumActiveを使用してまだ同期が実行されていないことを確認します。次に、業務時間中は10分間隔で同期を起動するようにスケジュールします。

まとめ

 企業システムでは、これからもデータや関連アプリケーションが常に利用可能であることを望むような傾向が続いていくでしょう。企業のデータベース管理システムを24時間常に稼動させオンラインに保つことの重要性は今後も増していくと思われます。

 データベースのミラーリングは、データ同期環境で可用性と災害復旧性を実現する効果的な方法です。データベースミラーリング環境のフェールオーバーは迅速かつ自動的であり、シームレスで信頼性の高いサービスです。さらに、リモートデータベースからスケジュールされたイベントを利用してxp_cmdshellで同期を起動するようにすれば、ミラーリングアーキテクチャの単一障害点の問題を回避できます。

参考資料

著者紹介

Joshua Savill(Joshua Savill)
Sybase iAnywhereに勤務する、データ同期テクノロジーのプロダクトマネージャ。
【関連記事】
アメブロ、基幹データベースインフラを刷新
新バージョンでブラウザ市場でのシェア奪取を狙う『Opera 9.5』
Oracle DB 向けノンプログラミング DB アプリケーション生成ツールを無償配布
クラスキャット、ハイブリッド型“侵入検知・防御”機能のある Linux 管理ツールを
米カリフォルニア州、処方薬 DB のオンライン化で薬物乱用に対抗

New Topics

Special Ad

ゆりかごからロケットまで、すべての乗り物をエンジョイ
ゆりかごからロケットまで、すべての乗り物をエンジョイ えん乗り」は、ゆりかごからロケットまで、すべての乗り物をエンジョイする、ニュース、コラム、動画などをお届けします! てんこ盛りをエンジョイするのは こちらから

Hot Topics

IT Job

Interviews / Specials

Popular

Access Ranking

Partner Sites