PGの2種類のクラスター技術:Pgpool-IIとPostgres-XL


PGの2つのクラスタスキームを最近検討したが,それぞれPgpool−IIとPostgres−XLであり,ここでは両者のメカニズム,構造,優劣,テスト結果などをまとめた.
1、Pgpool-IIとPostgres-XLの概要私の現在の理解によると、Pgpool-IIとPostgres-XLはPGクラスタのオープンソース実現において比較的成功した2つのプロジェクトであり、インターネット上の関連紹介も少なくないが、両者が企業の生産環境で広く使用されているかどうかはまだ確定していない.ここで、Pgpool-IIの前身であるPgpool-I、Postgres-XLの前身であるPostgres-XCである.1.1、Pgpool-IPgpool-IIはミドルウェアに相当し、アプリケーションとPGサービス端の間に位置し、アプリケーションにとってPgpool-IIはPGサービス端に相当する.PGサービス側にとって、Pgpool-IIはPGクライアントに相当する.このことから,Pgpool−IIとPGは解結合しており,このようなメカニズムに基づいて,Pgpool−IIは既存の任意のバージョンのPG主従構造上に構築でき,主従構造の実現はPgpool−IIとは無関係であり,slonyなどのツールやPG自身のストリームレプリケーションメカニズムによって実現できる.主従構造のクラスタに加えて、Pgpool-IIもマルチマスター構造をサポートし、複製モードと呼ばれ、このモードではPGノード間は対等であり、主従関係がなく、書き込み操作は同時にすべてのノードで実行され、このモードでは書き込み操作の代価が大きく、性能的には主従モードに及ばない.PG 9.3以降にサポートされるストリームレプリケーションメカニズムは、同期レプリケーションと非同期レプリケーションを含むホストスレーブ構造のクラスタを容易に構築することができるため、Pgpool-IIで比較的よく用いられるモードは、ストリームレプリケーションホストスレーブモードであり、その構造は下図(一ホストマルチスレーブでもよい)のようなものである.
PGが自身のストリームレプリケーションメカニズムによって主従構造クラスタを容易に構築できる以上、なぜその上にPgpool-IIを構築しなければならないのか.単純な主従構造クラスタでは接続プール、負荷等化、自動フェイルオーバーなどの機能が提供されないため、Pgpool-IIはちょうどこれらを行うことができ、もちろん負荷等化は読み取り操作のみに対して行われ、書き込み操作は主ノード上でのみ発生する.単一の障害を回避するために、Pgpool-II自身も主従構造を構成することができ、外部に仮想IPアドレスを提供し、主ノードが障害した後、ノードから新しい主ノードに昇格し、仮想IPを引き継ぐことができる.1.2、Postgres-XLPostgres-XLのメカニズムとPgpool-IIは大きく異なり、PGとは独立ではなく、PGソースコードに基づいて新しい機能を追加して実現されている.簡単に言えば、Postgres-XLはPGのSQL解析層の動作とデータアクセス層の動作を異なる2つのノードに分離し、それぞれCoordinatorノードとDatanodeノードと呼ばれ、各ノードは複数を構成し、元の単一PGインスタンスで完了した動作を協調して完了することができる.さらに,分散モードでのトランザクションの正確な実行を保証するためにGTMノードを追加した.単一の障害を回避するために、すべてのノードに対応するslaveノードを構成できます.Postgres-XLの構造図は、公式サイトからの下図を参照してください.
Postgres-XLのCoordinatorノードはクラスタ全体のデータアクセスポートであり、複数の構成が可能であり、それらの上にNginxなどのツールを介して負荷分散を実現する.Coordinatorノードはデータの格納情報を維持しているが,データ自体は格納していない.SQL文を受信した後、CoordinatorはSQLを解析し、実行計画を作成し、タスクを関連するDatanodeに配布し、Datanodeは実行結果をCoordinatorに返し、Coordinatorは各Datanodeが返した結果を統合し、最後にクライアントに返す.Postgres-XLのDatanodeノードは実際にデータにアクセスすることを担当し、データの複数のDatanode上の分布には2つの方式がある:コピーモードとスライスモード、コピーモードの下で、1つのテーブルのデータは指定したノード上で複数のコピーが存在する;スライス・モードでは、1つのテーブルのデータが指定されたルールに従って複数のデータ・ノードに分散され、これらのノードは完全なデータを共有します.この2つのモードの選択は、テーブル作成時にCREATE TABLE文指定を実行するか、ALTER TABLE文でデータの分散を変更することもできます.
2、Pgpool-IIとPostgres-XLの比較
3、Pgpool-IIとPostgres-XLの性能テスト私はそれぞれpgbenchとbenchmarksqlを使ってPgpool-IIクラスタとPostgres-XLクラスタの性能をテストし、比較のために単機PGの性能もテストしました.試験条件:Pgpool-IIクラスタは2台の虚機に構築された主従複製(非同期)クラスタである.Postgres-XLクラスタも、2つのCoordinatorノードと2つのDatanodeノードを含む同じ条件で構築された2台のダミークラスタです.単機PGも同じ条件のダミーで動作する.オペレーティングシステムはCentOS 6.6、単機PGとPgpool-IIクラスタ種のPGバージョン番号は9.5、Postgres-XLバージョン番号はPostgres-XL 9.5 R 1である.3,PG 9.5のみに基づく.3.1、pgbenchテストpgbenchはPGが持っている簡単なPG性能テストツールであり、テスト指標はTPSであり、毎秒完成するトランザクション数を表す.テスト手順は次のとおりです:1)ライブラリの作成
psql -h 10.192.33.244 -p7777 -c "create database pgbench"

2)データの生成
pgbench -i -s 1000 -h 10.192.33.244 -p 7777 pgbench 
#  -s     ,    1000,           16G。

3)テスト
pgbench -h 10.192.33.244 -p7777  -c30 -T300 -n 
#    5  ,    3 。 

pgbenchテスト結果:
pgbenchの試験結果、Pgpool-IIクラスタの性能は単機PGの性能よりやや劣り、約84%であった.Postgres-XLクラスタの性能は単機PGの性能よりも若干良く,約137%であった.3.2、benchmarksqlはbenchmarksqlをテストするのはよく使われるTPC-Cテストツールであり、TPC-CテストはデータベースのOLT P性能を測定する.テスト手順は次のとおりです:1)ライブラリの作成
psql -h 10.192.33.244 -p7777 -c "create database tpcc"

2)データの生成
./runDatabaseBuild.sh props.pg
#props.pg     ,                、     ,
#         100 warehouse,        10G,    1  。

3)テスト
./runBenchmark.sh props.pg

benchmarksqlテスト結果:
benchmarksql試験の結果,両クラスタは単機PGの性能指標とほぼ一致し,高下を見分けることができなかった.このような結果が得られる可能性のある原因の1つは、テストデータ量が小さく、クラスタの性能優位性を発揮できないことであり、特にPostgres-XLのようなクラスタは、ビッグデータ処理に対して設計的にいくつかの最適化を行い、ビッグデータ処理のシーンにより適しているはずである.benchmarksqlテストはデータ生成に時間がかかるため,ここでは大きなデータ量のテストは行わない.
最後に、総合的に見て、私はPostgres-XLに傾いています.もし会社が今後使うつもりなら、私は推薦します.