クラスタリングでPostgreSQLの可用性と信頼性を高める
HAクラスタソフトを用意する
今回は、PostgreSQLを複数のサーバー機に配置するクラスタリング構成について紹介します。クラスタリング構成で運営すると、可用性(信頼性)や性能を向上させることができます。
PostgreSQLは伝統的に、クラスタリングのためのソフトを本体には含まないという方針で開発されてきました。その代わりに本体とは独立して、PostgreSQLをクラスタリング構成で運営するためのミドルウエアが何種類か開発されています。
こうしたソフトには、オープンソースのものもありますし、商用製品として販売されているものもあります。また、汎用のHA(High Availability=高可用性)クラスタ・ソフトの多くが、保護対象のリソースとしてPostgreSQLをサポートしています。
■可用性を上げる
まずはクラスタリングのメリットを知るために、基本の確認をしましょう。
システムの可用性(信頼性)とは、システムが正常に稼働する度合いを指す言葉で、稼働率として評価するのが一般的です。例えば、稼働率99.99%のシステムの年間停止時間は、約50分です。この停止時間には、障害が発生してから、それを検知・復旧するのにかかった時間、さらにメンテナンスのための計画停止時間が含まれます。
したがって、要求された可用性の水準が稼働率99.99%より高い場合、障害を人間が検知してバックアップ・ファイルからリストアして復旧する、という手順はとれません。そこで、レプリケーションを実施してリストアにかかる時間を不要にする、あるいは、待機系のシステムに処理を引き継ぐフェイル・オーバーの仕組みを導入するといった対策が採られるわけです。
汎用のHAクラスタ・ソフトを使う
汎用のHAクラスタ・ソフトとは、複数マシンでクラスタを構成し、サービスの可用性を高めるものです。複数のマシンを束ねたクラスタに、1つの仮想IPアドレスでアクセスできます。こうしたソフトには、商用製品のLifeKeeperやCLUSTER PRO、あるいはオープンソースのHeartbeat(http://www.linux-ha.org/ja/HomePage_ja)などがあります。
これらのHAクラスタ・ソフトは、PostgreSQLに対応しています。死活監視の際にPostgreSQL固有の確認方法(SQLで問い合わせる、など)がとれるほか、サービスの起動や停止などの処理が可能です。多くのHAクラスタ・ソフトでは、こうしたアプリケーション固有の処理をモジュールとして追加できるようになっています。
汎用のHAクラスタ・ソフトでは、複雑な構成も組めますが、基本はアクティブ・スタンバイ構成になります。本番環境のPostgreSQLマシンに対して、PostgreSQLを導入した別の待機マシンを用意しておく構成です。スタンバイ・マシン側からアクティブ・マシンを監視し、アクティブ・マシンの障害を検知した際にはフェイル・オーバーを実施して処理を引き継ぎます。
フェイル・オーバーでは、アクティブ・マシンのPostgreSQLで使っているデータをスタンバイ・マシンに引き継がなくては意味がありません。そこで、複数マシン間でデータをコピーするデータ・レプリケーションか、複数マシン間で単一のストレージを共有する共有ストレージが使われます。
データ・レプリケーションとは、アクティブ・マシン上のデータをスタンバイ・マシンに逐次コピーする仕組みです。たいていの商用HAクラスタ・ソフトには、ファイル・システムのレベルでレプリケーションを行う機能が含まれています。DRBDというLinux向けのオープンソースもありますし、後述するデータベース・レベルでのレプリケーションを組み合わせることも可能です。
共有ストレージを使う方法も有力です。共有ストレージは、ファイバ・チャネル(Fibre Channel)やiSCSIといったインタフェースを持ち、複数台のマシンから接続できます。システム障害時には、同じディスクをスタンバイ・マシン側でマウントして読み書きをすれば、データをそのまま引き継げます。なお、PostgreSQLは、共有ストレージ上の1つのデータを複数マシンから同時に使う方式には対応していません。
共有ストレージを使う場合、ストレージ部分が故障すると全体の障害につながります。多くのストレージ製品ではハードウエア・レベルで信頼性を高めたラインナップを用意していますので、これらの採用を検討するのが良いでしょう。