ウォームスタンバイ構成

ウォームスタンバイ構成

 PostgreSQLのバージョン8.2からは、レプリケーション(非同期)を実行するよりも簡単な方法として、「ウォームスタンバイ」機能がサポートされました。実はバージョン8.0から可能だった機能ですが、同機能に対応したツール群が充実したことでバージョン8.2からより使い勝手がよくなりました。若干のツールやスクリプトと、マシン間でファイルを転送する手段があれば、あとはPostgeSQL本体の機能だけで実現できます。

 ウォームスタンバイは、アーカイブ・ログを用いたリカバリ処理を応用したものです。アクティブ・マシンのPostgreSQLを、通常のPITR(ポイント・イン・タイム・リカバリ)と同様に、スレーブ・マシン上でリストアします。この際、読み込むWALファイルが尽きてもPostgreSQLを起動させずに、アクティブ・マシンから次のWALファイルが来るまで待機します。この挙動は、設定ファイルでスクリプトやツールを指定するだけで実現できます。

 スレーブ・マシンでは逐次、アクティブ・マシン上でのデータ変更差分を適用しています。このため、通常のPITRのようなリカバリ時間がかかりません。リカバリを必要とせずに、直ちに起動させることができます。さらに、pgpool-IIやHAクラスタ・ソフトと組み合わせれば、自動でフェイル・オーバーすることも可能です。レプリケーションにかかる負荷がSlony-Iと比べて軽い点も魅力です。

 ウォームスタンバイの欠点は、非同期であることや、スレーブ・マシンでSQLを受け付けられないことなどです。この点は、次バージョンのPostgreSQL 8.5に向けて改良案が提案され、実装されつつあります。

その他の方法、ソフト

 PostgreSQLのレプリケーションを行うソフトは、このほかにも多数あります。現在も開発が続いているオープンソースだけでも、PGCluster(http://pgfoundry.org/projects/pgcluster)、SkyToolsのLondiste(http://pgfoundry.org/projects/skytools)、Bucardo(http://bucardo.org/wiki/Bucardo)などを挙げることができます。このほか、商用製品がいくつかあります。

 信頼性を高める別の手段としては、より高レベルの要求に対しては、FT(Fault Tolerant=無停止型)サーバー上でデータベースを動かすことも考えられます。一方で、より低レベルの要求に対しては、単にPITRでバックアップを運用するやり方もよいでしょう。

 いずれにせよ、まず初めに可用性(信頼性)の要求レベルがあって、さらには稼働するデータベースの特性があって、それに見合った高信頼化の方式を選択することが重要です。

■高速化のためのクラスタ構成

 ここまでは、信頼性を高めることに着目してクラスタ構成について解説してきましたが、クラスタ構成は処理性能を高める目的にも利用できます。

 例えば、pgpool-IIは、ロード・バランス(負荷分散)の機能を持っています。単純に言えば、SELECT文をバックエンド・サーバーの1つにだけ渡すことで、データベース参照時の負荷分散が実現できます。実行するSQLの比率が参照系が80%以上で更新系が20%以下のシステムであれば、バックエンド・サーバーの台数を増やすことで性能を高められます。pgpool-IIによるロード・バランスは、レプリケーション部分にSlony-Iを使った場合も有効です。

 ただし、レプリケーションと負荷分散の組み合わせは、更新が多いシステムではレプリケーションにかかる負荷が大きくなってしまいます。このため、バックエンド・サーバーの台数を増やしても処理能力は増えません。また、多数の同時接続ではなく、1つの接続からの1つのSQLの実行時間が遅い場合は、サーバー台数を増やしても速くなりません。

 1つの接続からの1つのSQLの実行時間が遅い場合には、データを複数のPostgreSQLサーバーに分散して格納する方法が有効です。シェアード・ナッシング(何も共有しない)構成などと呼ばれます。機能ごとに分散格納する方法と、データの値ごとに分散格納する方法があります。前者についてはアプリケーション側で対応する必要がありますが、後者については、アプリケーションで対応するほかに、ミドルウエアを使って実現する方法もあります。

 データごとの分散格納と分散問い合わせを実現するミドルウエアには、GridSQL(http://sourceforge.net/projects/gridsql)があります。また、pgpool-IIには、分散問い合わせが可能なクラスタを構成する機能があります。これらは一般的に、BI(ビジネス・インテリジェンス)やOLAP(オンライン分析)のように、大量のデータに対して分析のためのSQLクエリを発行する用途に使われます。

 一方、通常のWebアプリケーションにおいてデータベースの更新負荷が高い場合の対策としては、機能ごとにデータベース・サーバーを分割するやり方が一般的です。

 以上で第4回は終わりです。クラスタリグによってPostgreSQLの可用性を高める方法について解説してきましたが、いかがだったでしょうか。いよいよ最終回となる次回では「Oracle Databaseとの違い」について、解説していきます。

--------------------------------------------------------------------------------------------------
※Think IT編集部注(2009.11.13):以下の部分を修正しました。
図3「PgAdmin III」→「pgpool-II」

この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30