TOP調査レポート> HinemosでPostgresForestを採用した理由について
オープンソースをこう使った! 〜 運用管理ツールHinemosの秘密
オープンソースをこう使った! 〜 運用管理ツールHinemosの秘密

第6回:「PostgresForest」を使ったデータベースのクラスタリング

著者:NTTデータ  宇山 公隆   2006/10/13
前のページ  1  2  3  次のページ
HinemosでPostgresForestを採用した理由について

   Hinemosでは前述したとおり、PostgresForestを利用することで、可用性の向上を実現しています。それでは何故、他のクラスタリングミドルウェアを採用せずに、PostgresForestを採用したのでしょうか。理由としては以下の通りになります。
  • 前述の通り、Hinemosには何も手を入れることなくクラスタ環境を利用することができるようになります。設定と環境構築さえ行ってしまえば、クラスタ環境を手に入れることができるため、そのメリットは大きいと考えました
  • PostgresForestではクラスタ構成を取るために高価なシェアードディスクを必要としません。導入におけるコスト的なメリットが高いといえます
  • 最後に、PostgresForestは筆者らが開発したOSSという点もあります。使い方を熟知していることや、何か障害が起こったときに対応が迅速に行われることもメリットと考えました

表2:PostgresForestを採用した理由


Hinemosで利用するPostgresForestのテーブル形式

   PostgresForestにおけるテーブルのクラスタリングでは大きく分けて、多重化テーブルとパーティション化テーブルという2種類の方式があります。Hinemosではこのうち、可用性を求める要件と、基となるデータベースのテーブル構成をそのまま利用できるという点からミラーリングを行う多重化テーブルを採用しています(Hinemosで利用していないパーティション化テーブルについての詳細についてはここでは割愛します)。

   多重化テーブルは、同じ内容のデータベースを複数のノードに複製してもち、その内容の同期をとります。一部のノードが障害を発生しても、そのノードを切り離して縮退運転を行うことで、サービスダウンを避けることが可能です。また、多数の検索要求を各ノードに振り分けて行うことによって、負荷を分散することができます。

多重化テーブル
図2:多重化テーブル


Hinemos内部におけるJBossとPostgresForestの連携

   クラスタ環境のHinemosでは、マシンレベルではなく、各コンポーネントのレベルでそれぞれ障害に対処していることは「第5回:JBossのクラスタリング機能を活用した可用性向上について」で説明したとおりです。これはデータベースについても同様で、以降より関連するJBossとの障害パターンについて説明します。


マスタ側のJBossは正常で、片系のPostgreSQLが障害を起こしたとき

   これはPostgresForestの機能をそのまま利用した通常想定されるパターンです。PostgresForestは障害を起こしたノードを切り離し縮退運転に移行しますが、正常にサービス提供を続けます。PostgresForestからみてクライアントとなるJBossはデータベースの障害を意識することなく動作を続けます。

マスタ側のJBossは正常で片系のPostgreSQLで障害発生時の動作イメージ
図3:マスタ側のJBossは正常で片系のPostgreSQLで障害発生時の動作イメージ
(簡略化のため、JBossとPostgresForest以外のコンポーネントについては省略しています)


マスタのJBossが障害を起こしたとき

   第5回で説明したとおり、マスタのJBossが障害を起こすとスレーブ側のJBossに処理を引き継ぎます。この時にスレーブ側のPostgresForestのドライバが使用されます。

   データベース的にはクライアントであるJBossの障害なので、マスタ側のJBossで行われていたトランザクションはロールバックされます。そのため、新たにスレーブ側で処理が行われても、データに矛盾が生じることはありません。

マスタノードのJBossで障害発生時の動作イメージ
図4:マスタノードのJBossで障害発生時の動作イメージ
(簡略化のため、JBossとPostgresForest以外のコンポーネントについては省略しています)

   なお、この状態で片系の PostgresForestが障害を起こすと、先と同様に障害を起こしたノードを切り離しますが、正常にサービス提供を続けます。

   このように、障害が各コンポーネントで発生しても可能な限りサービス提供をし続けようと動作します。

前のページ  1  2  3  次のページ


NTTデータ  宇山 公隆
著者プロフィール
株式会社NTTデータ   宇山 公隆
基盤システム事業本部 オープンソース開発センタ シニアエキスパート
NTTデータにてDBMSの開発、SI、技術サポートや、ソフトウェア製品開発、新規ビジネス開拓など様々な仕事に従事。2002年よりOSS分野に参画。現在はHinemosの開発リーダとして、機能および品質向上とコミュニティの創造を目指して活動中。


INDEX
第6回:「PostgresForest」を使ったデータベースのクラスタリング
  今回は
HinemosでPostgresForestを採用した理由について
  Hinemosにおけるデータベース障害時の縮退運転への移行および復帰の仕組み