SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

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

データベースミラーリングを利用した高可用性

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

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

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

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

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

図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で同期を起動するようにすれば、ミラーリングアーキテクチャの単一障害点の問題を回避できます。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Joshua Savill(Joshua Savill)

Sybase iAnywhereに勤務する、データ同期テクノロジーのプロダクトマネージャ。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2422 2008/09/05 11:15

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング