3.機能比較
2007.3.21 株式会社四次元データ 宮澤了祐・内田康介
3.1.機能比較の方法
「pgpool-II」「PGCluster」「PostgresForest」「ウォームスタンバイ」の四種のレプリケーションシステムについて、いくつかの点について比較を行います。
- 縮退運転機能
データベース側になんらかの障害が発生した場合、自動的に障害部分を切り離し、アプリケーション側から見て問題なく動作するかをチェックします。 - 障害検知機能
障害が発生した箇所を特定する機能を比較します。 - 復旧機能
障害発生から復旧する手順を比較します。 - 導入のしやすさ
ゼロからレプリケーションシステムを構築する際の容易さやドキュメントの量などを比較します。 - 機能
上記以外の特徴を総合的に比較します。
また、縮退運転のチェック用に以下のような定期的にデータベースに接続するスレッドを作成するJavaプログラムを作成しました。 接続するURLなどは随時変更しつつ、チェックを行って行きます。
データベース「hoge」のテーブル「test」に接続しています。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Test { public static void main(String[] args) { for(;;){ Thread th = new Thread(new TestThread()); th.start(); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } } static class TestThread implements Runnable{ public void run() { Connection con = null; Statement stmt = null; try { Class.forName("org.postgresql.Driver"); con = DriverManager.getConnection( "jdbc:postgresql://192.168.0.1:9999/hoge", "postgres",""); stmt = con.createStatement(); String sql = "SELECT * FROM test"; ResultSet rs = stmt.executeQuery(sql); System.out.print("OK("); while(rs.next()){ System.out.print(rs.getInt(1) + "=" + rs.getString(2) + " "); } System.out.println(")"); stmt.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } }
3.2.pgpool-II
縮退運転
評価:○
実行中エラーを受け取ることはありませんでした。
障害検知
評価:○
pcp_node_infoというコマンドで、特定のノードの状態を確認できます。 このコマンドの引数は、「タイムアウト時間 pgpool-IIのホスト名 管理ポート番号 管理用ユーザ名 管理用パスワード ノード番号」となります。
/usr/local/pgpool2/pcp_node_info 10 '' 9898 postgres postgres 0 6001 3 1073741823.500000
実行結果の右から2つ目の値がノードの状態を表します。値の意味は次の通りです。『0:初期化中、1:稼動中(接続なし)、2:稼動中(接続中)、3:ダウン中』
また、管理ツールを導入している場合は、管理ツール上から確認することができます。
復旧機能
評価:×
pgpool-IIに復旧機能がありません。また、オンラインバックアップも利用できないため、復旧を行うにはpg_dumpallまたはrsyncを用いてデータの同期を行い、 その後全てのインスタンス及びpgpool-IIを再起動する必要があります。
また、pgpool-IIそのものをクラスタリングすることができませんので、pgpool-IIの障害時には復旧できるまでデータベースへのアクセスができなくなってしまいます。
そのため評価は「×」としました。
導入のしやすさ
評価:◎
コネクションプーリングシステムとして開発されたため、すでに作成されているDBインスタンスに対して変更を行う必要が無く、必要な設定ファイルも一つなので 非常に導入しやすいと言えます。
機能
評価:○
制限事項として、pg_hba.confを用いたクライアント・サーバ間のアクセス制限が出来ない、 JDBCの拡張問い合わせが使えないなどがあります。
導入しやすく、パラレルクエリなど大幅な性能向上が期待できる機能も持っています。
作者が日本人なため、文書などは日本語で提供されています。
3.3.PGCluster
縮退運転機能
評価:○
問題なくアプリケーションは動作しました。
障害検知機能
評価:△
レプリケーションサーバまたはロードバランサのログより解析することが出来ます。
復旧機能
評価:◎
PGClusterには同期を行う機能があります。クラスタDBを起動する際に「-R」オプションをつけることで、自動的に「起動」「同期」「レプリケーションサーバへの登録」を 行ってくれます。
pg_ctl -D /usr/local/pgcluster/db1 start -o "-R"
導入のしやすさ
評価:○
設定ファイルが多いので、覚えるまで若干の時間は必要となります。
ノードの追加なども設定ファイルの書き換えだけで済むので複雑な構成を作成するのも簡単に行えます。
PGCluster1.5以上の文書は日本語では提供されていません。 設定ファイルにはそこまで変更が無いので1.3以前は日本語で提供されているのでそちらを参考にすることが出来ます。
機能
評価:◎
ロードバランサ、レプリケートなど機能は豊富です。 PostgreSQLのバージョンに依存されますが、PgFoundryに移行してから開発速度が上がっているため新しいバージョンに対応したPGClusterのリリース期間は短くなっています。
ロードバランサや、レプリケーションサーバなどもクラスタリングすることが出来ます。
3.4.PostgresForest
縮退運転
評価:○
問題なくアプリケーションは動作しました。
障害検知
評価:○
環境構築ツールを用いてグローバルシステムカタログにアクセスし、インスタンスの情報を確認することで障害が起こった箇所を特定出来ます。
./forestadm -h 192.168.0.1 -p 6001 -g gsc -U forest -W forest [gsc]$ show instance; インスタンス一覧 SERVERID | HOST | PORT | STATUS ----------------------------------------- 0 | 192.168.0.1 | 6001 | 稼動中 1 | 192.168.0.2 | 6001 | 障害中
障害が発生した場合、STATUSに障害中と表示されます。
稼動中に戻すには次のコマンドを実行します。
[gsc]$ set instance up サーバID;
復旧機能
評価:○
PostgresForestにはDBクラスタを停止させることなく復旧を行うツール(ForestRecovery.sh)が付属しています。 このツールを以下の実行手順に従って利用することにより、リカバリ作業を容易に行うことが出来ます。
実行手順
1) -phase1 2) -stop_vm 3) -phase2 4) -start_vm 5) -cleanup
この手順を以下の<処理>の部分に入れて実行します。
./ForestRecovery.sh <処理> -user forest -pass forest -gsc_url \ jdbc:postgresql://192.168.0.1:6001/gsc 0 1 hoge
「-gsc_url」でグローバルシステムカタログのURLを指定します。「0 1 hoge」は、「リカバリ元のサーバID リカバリ先のサーバID リカバリを行うデータベース」を表します。
導入のしやすさ
評価:○
PostgresForestでは設定ファイルなどを用いるのではなく、全ての設定はグローバルシステムカタログと呼ばれるデータベースに保存されています。
そのため、設定を変更するためにはグローバルシステムカタログの仕組みや、設定ツールの使用法などに熟知する必要があります。
機能
評価:○
リカバリツールなどのメンテナンスツールや、設定を確認するためのツールなど運用に便利なツールが付属しています。
また、テーブルのパーティション化機能があるため運用性は非常に高いと思われます。
しかしながらJDBCの代用として動作するという仕組みなので、対象言語がJavaに限られてしまいます。
そのため評価は「○」としました。(Javaでのみ使用するならば「◎」)
3.5.ウォームスタンバイ
縮退運転機能
評価:△
アクティブ側の障害を検知しスタンバイ側を起動する仕組みと、アプリケーションの接続をスタンバイ側に切り替える仕組みを自前で用意する必要があります。
障害検知機能
評価:×
これまでのPostgreSQLと同様なので、障害検知機能はありません。
復旧機能
評価:◎
障害により起動したスタンバイ側をそのままアクティブ側として扱い、新たなスタンバイ側を導入することにより、障害前と同様の環境を構築することができます。
導入のしやすさ
評価:◎
PostgreSQL自身の機能であり、しかも既存機能の応用がほとんどです。 そのため、仕組みと導入手順さえ理解できれば非常に簡単に導入することができます。
機能
評価:△
レプリケーション以外の機能は無く、けっして高機能だとはいえませんが、 PostgreSQLの標準機能であるため、導入することによる機能・環境面での制限は無く、 動作も比較的安定していると思われます。
しかし、非同期方式のレプリケーションであるため、僅かながら欠落してしまうデータが存在する可能性があります。
3.6.まとめ
上記の評価を一覧表にまとめました。
名称 | 縮退運転 | 障害検知 | 復旧 | 導入の容易さ | 機能 |
---|---|---|---|---|---|
pgpool-II | ○ | ○ | × | ◎ | ○ |
pgcluster | ○ | △ | ◎ | ○ | ◎ |
PostgresForest | ○ | ○ | ○ | ○ | ○ |
ウォームスタンバイ | △ | × | ◎ | ◎ | △ |
上記の制限事項を理解して利用するのであれば「pgpool-II」、Javaで使用するならば「PGCluster」か 「PostgresForest」、シンプルなレプリケーションならば「ウォームスタンバイ」 が得意分野と言えます。